import { useCallback, useState } from 'react' import React from 'react' import { Input, ScrollArea } from '@janhq/joi' import { ArrowLeft, Search } from 'lucide-react' import BlankState from '@/containers/BlankState' import CenterPanelContainer from '@/containers/CenterPanelContainer' import useModelHub, { ModelHubCategory } from '@/hooks/useModelHub' import { HfModelEntry } from '@/utils/huggingface' import { getLogoByCategory } from '@/utils/model-engine' import BuiltInModelCard from './BuiltInModelCard' import GroupInfo from './GroupInfo' import HuggingFaceModelCard from './HuggingFaceModelCard' import RemoteModelCard from './RemoteModelCard' type Props = { category: ModelHubCategory onBackClicked: () => void } const DetailModelGroup: React.FC = ({ category, onBackClicked }) => { const [filter, setFilter] = useState('') const { data } = useModelHub() const onFilterChange = useCallback( (e: React.ChangeEvent) => { setFilter(e.target.value) }, [] ) if (!data) return null const modelEntries: HfModelEntry[] = [] if (category === 'BuiltInModels') { modelEntries.push(...(data.modelCategories.get('BuiltInModels') ?? [])) } else if (category === 'HuggingFace') { modelEntries.push(...(data.modelCategories.get('HuggingFace') ?? [])) } else { Object.entries(data.modelCategories).forEach(([key, value]) => { if (key === category) { modelEntries.push(...value) } }) } const refinedImageUrl = getLogoByCategory(category) ?? modelEntries.find((entry) => entry.model?.metadata?.logo != null)?.model ?.metadata?.logo const apiKeyUrl: string | undefined = modelEntries.find( (entry) => entry.model?.metadata?.api_key_url != null )?.model?.metadata?.api_key_url const filteredModels = filter.trim().length > 0 ? modelEntries.filter((model) => model.name.toLowerCase().includes(filter.toLowerCase()) ) : modelEntries return (
} placeholder="Search" value={filter} onChange={onFilterChange} />
{/*