import { useCallback, useMemo, useState } from 'react' import { useDropzone } from 'react-dropzone' import { InferenceEngine } from '@janhq/core' import { Button, ScrollArea } from '@janhq/joi' import { useAtomValue, useSetAtom } from 'jotai' import { UploadCloudIcon, UploadIcon } from 'lucide-react' import { twMerge } from 'tailwind-merge' import ModelSearch from '@/containers/ModelSearch' import SetupRemoteModel from '@/containers/SetupRemoteModel' import useDropModelBinaries from '@/hooks/useDropModelBinaries' import { setImportModelStageAtom } from '@/hooks/useImportModel' import MyModelList from './MyModelList' import { downloadedModelsAtom } from '@/helpers/atoms/Model.atom' const MyModels = () => { const downloadedModels = useAtomValue(downloadedModelsAtom) const setImportModelStage = useSetAtom(setImportModelStageAtom) const { onDropModels } = useDropModelBinaries() const [searchText, setSearchText] = useState('') const filteredDownloadedModels = useMemo( () => downloadedModels .filter((e) => e.name.toLowerCase().includes(searchText.toLowerCase().trim()) ) .sort((a, b) => a.name.localeCompare(b.name)), [downloadedModels, searchText] ) const { getRootProps, isDragActive } = useDropzone({ noClick: true, multiple: true, onDrop: onDropModels, }) const onImportModelClick = useCallback(() => { setImportModelStage('SELECTING_MODEL') }, [setImportModelStage]) const onSearchChange = useCallback((input: string) => { setSearchText(input) }, []) const findByEngine = filteredDownloadedModels.map((x) => x.engine) const groupByEngine = findByEngine.filter(function (item, index) { if (findByEngine.indexOf(item) === index) return item !== InferenceEngine.nitro }) return (
{isDragActive && (
Drop file here

File (GGUF) or folder

)}
{filteredDownloadedModels.filter( (x) => x.engine === InferenceEngine.nitro ).length !== 0 && (
Cortex
{filteredDownloadedModels ? filteredDownloadedModels .filter((x) => x.engine === InferenceEngine.nitro) .map((model) => { return }) : null}
)} {groupByEngine.map((engine, i) => { return (
{engine}
{filteredDownloadedModels ? filteredDownloadedModels .filter((x) => x.engine === engine) .map((model) => { return }) : null}
) })}
) } export default MyModels