'use client'; import { startTransition, useMemo, useOptimistic, useState } from 'react'; import { saveModelId } from '@/app/(chat)/actions'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { models } from '@/lib/ai/models'; import { cn } from '@/lib/utils'; import { CheckCirclFillIcon, ChevronDownIcon } from './icons'; export function ModelSelector({ selectedModelId, className, }: { selectedModelId: string; } & React.ComponentProps) { const [open, setOpen] = useState(false); const [optimisticModelId, setOptimisticModelId] = useOptimistic(selectedModelId); const selectModel = useMemo( () => models.find((model) => model.id === optimisticModelId), [optimisticModelId] ); return ( {models.map((model) => ( { setOpen(false); startTransition(() => { setOptimisticModelId(model.id); saveModelId(model.id); }); }} className="gap-4 group/item flex flex-row justify-between items-center" data-active={model.id === optimisticModelId} >
{model.label} {model.description && (
{model.description}
)}
))}
); }