import { ReactComponent as MoreModelIcon } from '@/assets/svg/more-model.svg'; import SvgIcon from '@/components/svg-icon'; import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; import { LlmItem, useSelectLlmList } from '@/hooks/llm-hooks'; import { CloseCircleOutlined, SettingOutlined, UserOutlined, } from '@ant-design/icons'; import { Avatar, Button, Card, Col, Collapse, CollapseProps, Divider, Flex, List, Row, Space, Spin, Tag, Tooltip, Typography, } from 'antd'; import { useCallback, useMemo } from 'react'; import SettingTitle from '../components/setting-title'; import { isLocalLlmFactory } from '../utils'; import ApiKeyModal from './api-key-modal'; import BedrockModal from './bedrock-modal'; import { IconMap } from './constant'; import { useHandleDeleteLlm, useSubmitApiKey, useSubmitBedrock, useSubmitOllama, useSubmitSystemModelSetting, useSubmitVolcEngine, } from './hooks'; import styles from './index.less'; import OllamaModal from './ollama-modal'; import SystemModelSettingModal from './system-model-setting-modal'; import VolcEngineModal from './volcengine-modal'; const LlmIcon = ({ name }: { name: string }) => { const icon = IconMap[name as keyof typeof IconMap]; return icon ? ( ) : ( } /> ); }; const { Text } = Typography; interface IModelCardProps { item: LlmItem; clickApiKey: (llmFactory: string) => void; } const ModelCard = ({ item, clickApiKey }: IModelCardProps) => { const { visible, switchVisible } = useSetModalState(); const { t } = useTranslate('setting'); const { handleDeleteLlm } = useHandleDeleteLlm(item.name); const handleApiKeyClick = () => { clickApiKey(item.name); }; const handleShowMoreClick = () => { switchVisible(); }; return ( {item.name} {item.tags} {visible && ( ( {item.name} {item.type} )} /> )} ); }; const UserSettingModel = () => { const { factoryList, myLlmList: llmList, loading } = useSelectLlmList(); const { saveApiKeyLoading, initialApiKey, llmFactory, onApiKeySavingOk, apiKeyVisible, hideApiKeyModal, showApiKeyModal, } = useSubmitApiKey(); const { saveSystemModelSettingLoading, onSystemSettingSavingOk, systemSettingVisible, hideSystemSettingModal, showSystemSettingModal, } = useSubmitSystemModelSetting(); const { t } = useTranslate('setting'); const { llmAddingVisible, hideLlmAddingModal, showLlmAddingModal, onLlmAddingOk, llmAddingLoading, selectedLlmFactory, } = useSubmitOllama(); const { volcAddingVisible, hideVolcAddingModal, showVolcAddingModal, onVolcAddingOk, volcAddingLoading, } = useSubmitVolcEngine(); const { bedrockAddingLoading, onBedrockAddingOk, bedrockAddingVisible, hideBedrockAddingModal, showBedrockAddingModal, } = useSubmitBedrock(); const ModalMap = useMemo( () => ({ Bedrock: showBedrockAddingModal, VolcEngine: showVolcAddingModal, }), [showBedrockAddingModal, showVolcAddingModal], ); const handleAddModel = useCallback( (llmFactory: string) => { if (isLocalLlmFactory(llmFactory)) { showLlmAddingModal(llmFactory); } else if (llmFactory in ModalMap) { ModalMap[llmFactory as keyof typeof ModalMap](); } else { showApiKeyModal({ llm_factory: llmFactory }); } }, [showApiKeyModal, showLlmAddingModal, ModalMap], ); const items: CollapseProps['items'] = [ { key: '1', label: t('addedModels'), children: ( ( )} /> ), }, { key: '2', label: t('modelsToBeAdded'), children: ( ( {item.name} {item.tags} )} /> ), }, ]; return (
{systemSettingVisible && ( )}
); }; export default UserSettingModel;