import { ReactComponent as MoreModelIcon } from '@/assets/svg/more-model.svg'; import { LlmIcon } from '@/components/svg-icon'; import { useTheme } from '@/components/theme-provider'; import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; import { LlmItem, useSelectLlmList } from '@/hooks/llm-hooks'; import { CloseCircleOutlined, SettingOutlined } from '@ant-design/icons'; import { 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 TencentCloudModal from './Tencent-modal'; import ApiKeyModal from './api-key-modal'; import AzureOpenAIModal from './azure-openai-modal'; import BedrockModal from './bedrock-modal'; import FishAudioModal from './fish-audio-modal'; import GoogleModal from './google-modal'; import { useHandleDeleteFactory, useHandleDeleteLlm, useSubmitApiKey, useSubmitAzure, useSubmitBedrock, useSubmitFishAudio, useSubmitGoogle, useSubmitHunyuan, useSubmitOllama, useSubmitSpark, useSubmitSystemModelSetting, useSubmitTencentCloud, useSubmitVolcEngine, useSubmityiyan, } from './hooks'; import HunyuanModal from './hunyuan-modal'; import styles from './index.less'; import OllamaModal from './ollama-modal'; import SparkModal from './spark-modal'; import SystemModelSettingModal from './system-model-setting-modal'; import VolcEngineModal from './volcengine-modal'; import YiyanModal from './yiyan-modal'; 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 { theme } = useTheme(); const { handleDeleteLlm } = useHandleDeleteLlm(item.name); const { handleDeleteFactory } = useHandleDeleteFactory(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 { theme } = useTheme(); 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 { HunyuanAddingVisible, hideHunyuanAddingModal, showHunyuanAddingModal, onHunyuanAddingOk, HunyuanAddingLoading, } = useSubmitHunyuan(); const { GoogleAddingVisible, hideGoogleAddingModal, showGoogleAddingModal, onGoogleAddingOk, GoogleAddingLoading, } = useSubmitGoogle(); const { TencentCloudAddingVisible, hideTencentCloudAddingModal, showTencentCloudAddingModal, onTencentCloudAddingOk, TencentCloudAddingLoading, } = useSubmitTencentCloud(); const { SparkAddingVisible, hideSparkAddingModal, showSparkAddingModal, onSparkAddingOk, SparkAddingLoading, } = useSubmitSpark(); const { yiyanAddingVisible, hideyiyanAddingModal, showyiyanAddingModal, onyiyanAddingOk, yiyanAddingLoading, } = useSubmityiyan(); const { FishAudioAddingVisible, hideFishAudioAddingModal, showFishAudioAddingModal, onFishAudioAddingOk, FishAudioAddingLoading, } = useSubmitFishAudio(); const { bedrockAddingLoading, onBedrockAddingOk, bedrockAddingVisible, hideBedrockAddingModal, showBedrockAddingModal, } = useSubmitBedrock(); const { AzureAddingVisible, hideAzureAddingModal, showAzureAddingModal, onAzureAddingOk, AzureAddingLoading, } = useSubmitAzure(); const ModalMap = useMemo( () => ({ Bedrock: showBedrockAddingModal, VolcEngine: showVolcAddingModal, 'Tencent Hunyuan': showHunyuanAddingModal, 'XunFei Spark': showSparkAddingModal, BaiduYiyan: showyiyanAddingModal, 'Fish Audio': showFishAudioAddingModal, 'Tencent Cloud': showTencentCloudAddingModal, 'Google Cloud': showGoogleAddingModal, 'Azure-OpenAI': showAzureAddingModal, }), [ showBedrockAddingModal, showVolcAddingModal, showHunyuanAddingModal, showTencentCloudAddingModal, showSparkAddingModal, showyiyanAddingModal, showFishAudioAddingModal, showGoogleAddingModal, showAzureAddingModal, ], ); 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;