import React, { useMemo } from 'react' import { formatDownloadPercentage, toGigabytes } from '@utils/converter' import useDownloadModel from '@hooks/useDownloadModel' import { modelDownloadStateAtom } from '@helpers/atoms/DownloadState.atom' import { atom, useAtomValue } from 'jotai' import { useGetDownloadedModels } from '@hooks/useGetDownloadedModels' import SimpleTag from '../SimpleTag' import { RamRequired, UsecaseTag } from '../SimpleTag/TagType' import { ModelCatalog, ModelVersion } from '@janhq/core/lib/types' type Props = { model: ModelCatalog modelVersion: ModelVersion isRecommended: boolean } const ModelVersionItem: React.FC = ({ model, modelVersion, isRecommended, }) => { const { downloadModel } = useDownloadModel() const { downloadedModels } = useGetDownloadedModels() const isDownloaded = downloadedModels.find((model) => model._id === modelVersion._id) != null const downloadAtom = useMemo( () => atom((get) => get(modelDownloadStateAtom)[modelVersion._id ?? '']), [modelVersion._id] ) const downloadState = useAtomValue(downloadAtom) const onDownloadClick = () => { downloadModel(model, modelVersion) } let downloadButton = ( ) if (downloadState) { downloadButton = (
{formatDownloadPercentage(downloadState.percent)}
) } else if (isDownloaded) { downloadButton =
Downloaded
} const { maxRamRequired, usecase } = modelVersion return (
{modelVersion.name}
{toGigabytes(modelVersion.size)}
{downloadButton}
) } export default ModelVersionItem