import { updateModelConfig } from '../../service/modelConfig'; import { useModelConfigStore } from '../../store/useModelConfigStore'; import { Input, Modal, Radio } from 'antd'; import Image from 'next/image'; import { useCallback, useEffect, useState } from 'react'; import { QuestionCircleOutlined } from '@ant-design/icons'; interface IProps { open: boolean; onClose: () => void; } const options = [ { label: 'None', value: '' }, { label: 'OpenAI', value: 'openai' }, { label: 'Custom', value: 'litellm' } ]; const ModelConfigModal = (props: IProps) => { const { open, onClose } = props; const modelConfig = useModelConfigStore((store) => store.modelConfig); const baseModelConfig = useModelConfigStore((store) => store.baseModelConfig); const updateBaseModelConfig = useModelConfigStore((store) => store.updateBaseModelConfig); const fetchModelConfig = useModelConfigStore((store) => store.fetchModelConfig); const localProviderType = useModelConfigStore((store) => store.modelConfig.provider_type); const [modelType, setModelType] = useState(''); useEffect(() => { if (open) { fetchModelConfig(); } }, [open]); useEffect(() => { setModelType(localProviderType); }, [localProviderType]); const renderEmpty = () => { return (
SecondMe Logo
Please Choose OpenAI or Custom
); }; const renderOpenai = useCallback(() => { return (
{ updateBaseModelConfig({ ...baseModelConfig, key: e.target.value }); }} placeholder="Enter your OpenAI API key" value={baseModelConfig.key} />
You can get your API key from{' '} OpenAI API Keys page .
); }, [baseModelConfig]); const renderCustom = useCallback(() => { return (
Model Name
{ updateBaseModelConfig({ ...baseModelConfig, chat_model_name: e.target.value }); }} spellCheck="false" value={baseModelConfig.chat_model_name} />
API Key
{ updateBaseModelConfig({ ...baseModelConfig, chat_api_key: e.target.value }); }} spellCheck="false" value={baseModelConfig.chat_api_key} />
{ updateBaseModelConfig({ ...baseModelConfig, chat_endpoint: e.target.value }); }} value={baseModelConfig.chat_endpoint} />
{ updateBaseModelConfig({ ...baseModelConfig, embedding_model_name: e.target.value }); }} value={baseModelConfig.embedding_model_name} />
{ updateBaseModelConfig({ ...baseModelConfig, embedding_api_key: e.target.value }); }} value={baseModelConfig.embedding_api_key} />
{ updateBaseModelConfig({ ...baseModelConfig, embedding_endpoint: e.target.value }); }} value={baseModelConfig.embedding_endpoint} />
); }, [baseModelConfig, updateBaseModelConfig]); const handleUpdate = () => { updateModelConfig(modelConfig) .then((res) => { if (res.data.code == 0) { onClose(); } else { throw new Error(res.data.message); } }) .catch((error) => { console.error(error.message || 'Failed to update model config'); }); }; const renderMainContent = useCallback(() => { if (!modelType) { return renderEmpty(); } if (modelType === 'openai') { return renderOpenai(); } return renderCustom(); }, [modelType, renderOpenai, renderCustom]); return (
Support Model Configuration
} >

Configure models used for training data synthesis for Second Me, and as external reference models that Second Me can consult during usage.

{ setModelType(e.target.value); updateBaseModelConfig({ ...baseModelConfig, provider_type: e.target.value }); }} optionType="button" options={options} value={modelType ? modelType : ''} />
{renderMainContent()}
); }; export default ModelConfigModal;