'use client'; import { useState, useEffect } from 'react'; import { LLMCardVO } from '@/app/home/models/component/llm-card/LLMCardVO'; import styles from './LLMConfig.module.css'; import LLMCard from '@/app/home/models/component/llm-card/LLMCard'; import LLMForm from '@/app/home/models/component/llm-form/LLMForm'; import CreateCardComponent from '@/app/infra/basic-component/create-card-component/CreateCardComponent'; import { httpClient } from '@/app/infra/http/HttpClient'; import { LLMModel } from '@/app/infra/entities/api'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { toast } from 'sonner'; import { useTranslation } from 'react-i18next'; import { extractI18nObject } from '@/i18n/I18nProvider'; import { EmbeddingCardVO } from '@/app/home/models/component/embedding-card/EmbeddingCardVO'; import EmbeddingCard from '@/app/home/models/component/embedding-card/EmbeddingCard'; import EmbeddingForm from '@/app/home/models/component/embedding-form/EmbeddingForm'; export default function LLMConfigPage() { const { t } = useTranslation(); const [cardList, setCardList] = useState([]); const [modalOpen, setModalOpen] = useState(false); const [isEditForm, setIsEditForm] = useState(false); const [nowSelectedLLM, setNowSelectedLLM] = useState(null); const [embeddingCardList, setEmbeddingCardList] = useState( [], ); const [embeddingModalOpen, setEmbeddingModalOpen] = useState(false); const [isEditEmbeddingForm, setIsEditEmbeddingForm] = useState(false); const [nowSelectedEmbedding, setNowSelectedEmbedding] = useState(null); useEffect(() => { getLLMModelList(); getEmbeddingModelList(); }, []); async function getLLMModelList() { const requesterNameListResp = await httpClient.getProviderRequesters('llm'); const requesterNameList = requesterNameListResp.requesters.map((item) => { return { label: extractI18nObject(item.label), value: item.name, }; }); httpClient .getProviderLLMModels() .then((resp) => { const llmModelList: LLMCardVO[] = resp.models.map((model: LLMModel) => { console.log('model', model); return new LLMCardVO({ id: model.uuid, iconURL: httpClient.getProviderRequesterIconURL(model.requester), name: model.name, providerLabel: requesterNameList.find((item) => item.value === model.requester) ?.label || model.requester.substring(0, 10), baseURL: model.requester_config?.base_url, abilities: model.abilities || [], }); }); console.log('get llmModelList', llmModelList); setCardList(llmModelList); }) .catch((err) => { console.error('get LLM model list error', err); toast.error(t('models.getModelListError') + err.message); }); } function selectLLM(cardVO: LLMCardVO) { setIsEditForm(true); setNowSelectedLLM(cardVO); console.log('set now vo', cardVO); setModalOpen(true); } function handleCreateModelClick() { setIsEditForm(false); setNowSelectedLLM(null); setModalOpen(true); } function selectEmbedding(cardVO: EmbeddingCardVO) { setIsEditEmbeddingForm(true); setNowSelectedEmbedding(cardVO); setEmbeddingModalOpen(true); } function handleCreateEmbeddingModelClick() { setIsEditEmbeddingForm(false); setNowSelectedEmbedding(null); setEmbeddingModalOpen(true); } async function getEmbeddingModelList() { const requesterNameListResp = await httpClient.getProviderRequesters('text-embedding'); const requesterNameList = requesterNameListResp.requesters.map((item) => { return { label: extractI18nObject(item.label), value: item.name, }; }); httpClient .getProviderEmbeddingModels() .then((resp) => { const embeddingModelList: EmbeddingCardVO[] = resp.models.map( (model: { uuid: string; requester: string; name: string; requester_config?: { base_url?: string }; }) => { return new EmbeddingCardVO({ id: model.uuid, iconURL: httpClient.getProviderRequesterIconURL(model.requester), name: model.name, providerLabel: requesterNameList.find((item) => item.value === model.requester) ?.label || model.requester.substring(0, 10), baseURL: model.requester_config?.base_url || '', }); }, ); setEmbeddingCardList(embeddingModelList); }) .catch((err) => { console.error('get Embedding model list error', err); toast.error(t('embedding.getModelListError') + err.message); }); } return (
{isEditForm ? t('models.editModel') : t('models.createModel')} { setModalOpen(false); getLLMModelList(); }} onFormCancel={() => { setModalOpen(false); }} onLLMDeleted={() => { setModalOpen(false); getLLMModelList(); }} /> {isEditEmbeddingForm ? t('embedding.editModel') : t('embedding.createModel')} { setEmbeddingModalOpen(false); getEmbeddingModelList(); }} onFormCancel={() => { setEmbeddingModalOpen(false); }} onEmbeddingDeleted={() => { setEmbeddingModalOpen(false); getEmbeddingModelList(); }} />
{t('llm.llmModels')} {t('embedding.embeddingModels')}

{t('llm.description')}

{t('embedding.description')}

{cardList.map((cardVO) => { return (
{ selectLLM(cardVO); }} >
); })}
{embeddingCardList.map((cardVO) => { return (
{ selectEmbedding(cardVO); }} >
); })}
); }