import { Fragment, useEffect } from "react"; import { Listbox, Transition } from "@headlessui/react"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/react/20/solid"; import { useAtom, useAtomValue } from "jotai"; import { selectedModelAtom } from "@/_helpers/atoms/Model.atom"; import { downloadedModelAtom } from "@/_helpers/atoms/DownloadedModel.atom"; import { AssistantModel } from "@/_models/AssistantModel"; function classNames(...classes: any) { return classes.filter(Boolean).join(" "); } const SelectModels: React.FC = () => { const downloadedModels = useAtomValue(downloadedModelAtom); const [selectedModel, setSelectedModel] = useAtom(selectedModelAtom); useEffect(() => { if (downloadedModels && downloadedModels.length > 0) { onModelSelected(downloadedModels[0]); } }, [downloadedModels]); const onModelSelected = (model: AssistantModel) => { setSelectedModel(model); }; if (!selectedModel) { return
You have not downloaded any model!
; } return ( {({ open }) => (
Select a Model:
{selectedModel.name} {downloadedModels.map((model) => ( classNames( active ? "bg-blue-600 text-white" : "text-gray-900", "relative cursor-default select-none py-2 pl-3 pr-9", ) } value={model} > {({ selected, active }) => ( <>
{model.name}
{selected ? ( ) : null} )}
))}
)}
); }; export default SelectModels;