import { useState } from 'react' import { InferenceEngine, Model } from '@janhq/core' import { Badge } from '@janhq/uikit' import { MoreVerticalIcon, Trash2Icon, PlayIcon, StopCircleIcon, } from 'lucide-react' import { useActiveModel } from '@/hooks/useActiveModel' import { useClickOutside } from '@/hooks/useClickOutside' import useDeleteModel from '@/hooks/useDeleteModel' import { toGigabytes } from '@/utils/converter' type RowModelProps = { data: Model } export default function RowModel(props: RowModelProps) { const [more, setMore] = useState(false) const [menu, setMenu] = useState(null) const [toggle, setToggle] = useState(null) useClickOutside(() => setMore(false), null, [menu, toggle]) const { activeModel, startModel, stopModel, stateModel } = useActiveModel() const { deleteModel } = useDeleteModel() const isActiveModel = stateModel.model === props.data.id const isRemoteModel = props.data.engine === InferenceEngine.openai || props.data.engine === InferenceEngine.triton_trtllm const onModelActionClick = (modelId: string) => { if (activeModel && activeModel.id === modelId) { stopModel(modelId) } else { startModel(modelId) } } return ( {props.data.name} {props.data.id} {props.data.metadata.size ? toGigabytes(props.data.metadata.size) : '-'} v{props.data.version} {isRemoteModel ? ( Active ) : stateModel.loading && stateModel.model === props.data.id ? ( {stateModel.state === 'start' ? 'Starting...' : 'Stopping...'} ) : activeModel && activeModel.id === props.data.id ? ( Active ) : ( Inactive )} {!isRemoteModel && (
{ setMore(!more) }} >
)} {more && (
{ onModelActionClick(props.data.id) setMore(false) }} > {activeModel && activeModel.id === props.data.id ? ( ) : ( )} {isActiveModel ? stateModel.state : 'Start'}  Model
{ setTimeout(async () => { await stopModel(props.data.id) deleteModel(props.data) }, 500) setMore(false) }} > Delete Model
)} ) }