Marco Beretta
LibreChat upload repo
3b6afc0
raw
history blame
2.15 kB
import { useState } from 'react';
import { DropdownMenuRadioItem } from '~/components';
import { Settings } from 'lucide-react';
import getIcon from '~/utils/getIcon';
import { useRecoilValue } from 'recoil';
import { SetTokenDialog } from '../SetTokenDialog';
import store from '~/store';
import { cn, alternateName } from '~/utils';
export default function ModelItem({ endpoint, value, isSelected }) {
const [setTokenDialogOpen, setSetTokenDialogOpen] = useState(false);
const endpointsConfig = useRecoilValue(store.endpointsConfig);
const icon = getIcon({
size: 20,
endpoint,
error: false,
className: 'mr-2',
message: false,
});
const isUserProvided = endpointsConfig?.[endpoint]?.userProvide;
// regular model
return (
<>
<DropdownMenuRadioItem
value={value}
className={cn(
'group dark:font-semibold dark:text-gray-100 dark:hover:bg-gray-800',
isSelected && 'active bg-gray-50 dark:bg-gray-800',
)}
id={endpoint}
>
{icon}
{alternateName[endpoint] || endpoint}
{endpoint === 'gptPlugins' && (
<span className="py-0.25 ml-1 rounded bg-blue-200 px-1 text-[10px] font-semibold text-[#4559A4]">
Beta
</span>
)}
<div className="flex w-4 flex-1" />
{isUserProvided ? (
<button
className={cn(
'invisible m-0 mr-1 flex-initial rounded-md p-0 text-xs font-medium text-gray-400 hover:text-gray-700 group-hover:visible dark:font-normal dark:text-gray-400 dark:hover:text-gray-200',
isSelected && 'visible text-gray-700 dark:text-gray-200',
)}
onClick={(e) => {
e.preventDefault();
setSetTokenDialogOpen(true);
}}
>
<Settings className="mr-1 inline-block w-[16px] items-center stroke-1" />
Config Token
</button>
) : null}
</DropdownMenuRadioItem>
<SetTokenDialog
open={setTokenDialogOpen}
onOpenChange={setSetTokenDialogOpen}
endpoint={endpoint}
/>
</>
);
}