import { useCallback, useEffect, useState } from 'react' import Image from 'next/image' import { LlmEngine, Model, RemoteEngine } from '@janhq/core' import { Button } from '@janhq/joi' import { useSetAtom } from 'jotai' import { SettingsIcon } from 'lucide-react' import useGetModelsByEngine from '@/hooks/useGetModelsByEngine' import { getTitleByCategory } from '@/utils/model-engine' import ModelLabel from '../ModelLabel' import { setUpRemoteModelStageAtom } from '@/helpers/atoms/SetupRemoteModel.atom' type Props = { engine: LlmEngine searchText: string onModelSelected: (model: Model) => void } const ModelSection: React.FC = ({ engine, searchText, onModelSelected, }) => { const [models, setModels] = useState([]) const { getModelsByEngine } = useGetModelsByEngine() const setUpRemoteModelStage = useSetAtom(setUpRemoteModelStageAtom) const engineLogo: string | undefined = models.find( (entry) => entry?.metadata?.logo != null )?.metadata?.logo const apiKeyUrl: string | undefined = models.find( (entry) => entry?.metadata?.api_key_url != null )?.metadata?.api_key_url const onSettingClick = useCallback(() => { setUpRemoteModelStage('SETUP_API_KEY', engine as unknown as RemoteEngine, { logo: engineLogo, api_key_url: apiKeyUrl, }) }, [apiKeyUrl, engine, engineLogo, setUpRemoteModelStage]) useEffect(() => { const matchedModels = getModelsByEngine(engine, searchText) setModels(matchedModels) }, [getModelsByEngine, engine, searchText]) if (models.length === 0) return null const engineName = getTitleByCategory(engine) return (
{engineName}
    {models.map((model) => (
  • onModelSelected(model)} > {model.metadata?.logo ? ( logo ) : ( !model.engine?.includes('cortex.') && (
    ) )}

    {model.name ?? model.model}

    {!model.engine?.includes('cortex.') && ( )}
  • ))}
) } export default ModelSection