'use client'; import { Check, ChevronDown } from 'lucide-react'; import { startTransition, useMemo, useOptimistic, useState } from 'react'; import { saveModel } from '@/app/(chat)/actions'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { type Model, models } from '@/lib/model'; import { cn } from '@/lib/utils'; export function ModelSelector({ selectedModelName, className, }: { selectedModelName: Model['name']; } & React.ComponentProps) { const [open, setOpen] = useState(false); const [optimisticModelName, setOptimisticModelName] = useOptimistic(selectedModelName); const selectModel = useMemo( () => models.find((model) => model.name === optimisticModelName), [optimisticModelName] ); return ( svg]:!size-5 md:[&>svg]:!size-4', className )} > {models.map((model) => ( { setOpen(false); startTransition(() => { setOptimisticModelName(model.name); saveModel(model.name); }); }} className="gap-4 group/item" data-active={model.name === optimisticModelName} >
{model.label} {model.description && (
{model.description}
)}
))}
); }