import { useEffect, useState } from 'react'; import { Check, ChevronDown } from 'lucide-react'; import { api } from '@/api/client'; import type { ModelInfo } from '@/api/types'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; interface Props { value: string; onChange: (model: string) => void | Promise; } export function ModelPicker({ value, onChange }: Props) { const [models, setModels] = useState(null); const [error, setError] = useState(null); const [open, setOpen] = useState(false); useEffect(() => { if (!open || models !== null) return; api.models() .then(setModels) .catch((err) => setError(err instanceof Error ? err.message : 'failed to load models') ); }, [open, models]); return ( {error && (
{error}
)} {models === null && !error && (
Loading…
)} {models?.map((m) => ( void onChange(m.id)} className="font-mono text-xs" > {m.id} ))}
); }