import { Fragment, useState, useEffect } from 'react' import { InferenceEngine } from '@janhq/core' import { CommandModal, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Badge, } from '@janhq/uikit' import { DatabaseIcon, CpuIcon } from 'lucide-react' import { MainViewState } from '@/constants/screens' import { useActiveModel } from '@/hooks/useActiveModel' import { useGetDownloadedModels } from '@/hooks/useGetDownloadedModels' import { useMainViewState } from '@/hooks/useMainViewState' export default function CommandListDownloadedModel() { const { setMainViewState } = useMainViewState() const { downloadedModels } = useGetDownloadedModels() const { activeModel, startModel, stopModel } = useActiveModel() const onModelActionClick = (modelId: string) => { if (activeModel && activeModel.id === modelId) { stopModel(modelId) } else { startModel(modelId) } } const [open, setOpen] = useState(false) useEffect(() => { const down = (e: KeyboardEvent) => { if (e.key === 'e' && (e.metaKey || e.ctrlKey)) { e.preventDefault() setOpen((open) => !open) } } document.addEventListener('keydown', down) return () => document.removeEventListener('keydown', down) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const isNotDownloadedModel = downloadedModels.length === 0 if (isNotDownloadedModel) return null return ( No Model found. {!isNotDownloadedModel && ( {downloadedModels .filter((model) => { return model.engine === InferenceEngine.nitro }) .map((model, i) => { return ( { onModelActionClick(model.id) setOpen(false) }} >
{model.id} {activeModel && activeModel.id === model.id && ( Active )}
) })}
)} { setMainViewState(MainViewState.Hub) setOpen(false) }} > Explore The Hub
) }