| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  | import { useState } from 'react' | 
					
						
							|  |  |  | import useSWR from 'swr' | 
					
						
							|  |  |  | import { useTranslation } from 'react-i18next' | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  | import { useContext } from 'use-context-selector' | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  | import type { | 
					
						
							|  |  |  |   BackendModel, | 
					
						
							|  |  |  |   FormValue, | 
					
						
							|  |  |  |   ProviderConfigModal, | 
					
						
							|  |  |  |   ProviderEnum, | 
					
						
							|  |  |  | } from './declarations' | 
					
						
							|  |  |  | import ModelSelector from './model-selector' | 
					
						
							|  |  |  | import ModelCard from './model-card' | 
					
						
							|  |  |  | import ModelItem from './model-item' | 
					
						
							|  |  |  | import ModelModal from './model-modal' | 
					
						
							|  |  |  | import config from './configs' | 
					
						
							|  |  |  | import { ConfigurableProviders } from './utils' | 
					
						
							| 
									
										
										
										
											2023-08-13 22:50:31 +08:00
										 |  |  | import { HelpCircle } from '@/app/components/base/icons/src/vender/line/general' | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |   changeModelProviderPriority, | 
					
						
							|  |  |  |   deleteModelProvider, | 
					
						
							|  |  |  |   deleteModelProviderModel, | 
					
						
							|  |  |  |   fetchDefaultModal, | 
					
						
							|  |  |  |   fetchModelProviders, | 
					
						
							|  |  |  |   setModelProvider, | 
					
						
							|  |  |  |   updateDefaultModel, | 
					
						
							|  |  |  | } from '@/service/common' | 
					
						
							|  |  |  | import { useToastContext } from '@/app/components/base/toast' | 
					
						
							|  |  |  | import Confirm from '@/app/components/base/confirm/common' | 
					
						
							|  |  |  | import { ModelType } from '@/app/components/header/account-setting/model-page/declarations' | 
					
						
							|  |  |  | import { useEventEmitterContextContext } from '@/context/event-emitter' | 
					
						
							|  |  |  | import { useProviderContext } from '@/context/provider-context' | 
					
						
							| 
									
										
										
										
											2023-08-13 22:50:31 +08:00
										 |  |  | import Tooltip from '@/app/components/base/tooltip' | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  | import I18n from '@/context/i18n' | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | const MODEL_CARD_LIST = [ | 
					
						
							|  |  |  |   config.openai, | 
					
						
							|  |  |  |   config.anthropic, | 
					
						
							|  |  |  | ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const titleClassName = `
 | 
					
						
							|  |  |  | flex items-center h-9 text-sm font-medium text-gray-900 | 
					
						
							|  |  |  | `
 | 
					
						
							|  |  |  | const tipClassName = `
 | 
					
						
							|  |  |  | ml-0.5 w-[14px] h-[14px] text-gray-400 | 
					
						
							|  |  |  | `
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DeleteModel = { | 
					
						
							|  |  |  |   model_name: string | 
					
						
							|  |  |  |   model_type: string | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ModelPage = () => { | 
					
						
							|  |  |  |   const { t } = useTranslation() | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |   const { locale } = useContext(I18n) | 
					
						
							| 
									
										
										
										
											2023-08-22 14:55:20 +08:00
										 |  |  |   const { | 
					
						
							|  |  |  |     updateModelList, | 
					
						
							|  |  |  |     embeddingsDefaultModel, | 
					
						
							|  |  |  |     mutateEmbeddingsDefaultModel, | 
					
						
							|  |  |  |     speech2textDefaultModel, | 
					
						
							|  |  |  |     mutateSpeech2textDefaultModel, | 
					
						
							|  |  |  |   } = useProviderContext() | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |   const { data: providers, mutate: mutateProviders } = useSWR('/workspaces/current/model-providers', fetchModelProviders) | 
					
						
							|  |  |  |   const { data: textGenerationDefaultModel, mutate: mutateTextGenerationDefaultModel } = useSWR('/workspaces/current/default-model?model_type=text-generation', fetchDefaultModal) | 
					
						
							|  |  |  |   const [showModal, setShowModal] = useState(false) | 
					
						
							|  |  |  |   const { notify } = useToastContext() | 
					
						
							|  |  |  |   const { eventEmitter } = useEventEmitterContextContext() | 
					
						
							|  |  |  |   const [modelModalConfig, setModelModalConfig] = useState<ProviderConfigModal | undefined>(undefined) | 
					
						
							|  |  |  |   const [confirmShow, setConfirmShow] = useState(false) | 
					
						
							|  |  |  |   const [deleteModel, setDeleteModel] = useState<DeleteModel & { providerKey: ProviderEnum }>() | 
					
						
							|  |  |  |   const [modalMode, setModalMode] = useState('add') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |   let modelList = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (locale === 'en') { | 
					
						
							|  |  |  |     modelList = [ | 
					
						
							|  |  |  |       config.azure_openai, | 
					
						
							|  |  |  |       config.replicate, | 
					
						
							|  |  |  |       config.huggingface_hub, | 
					
						
							| 
									
										
										
										
											2023-09-18 18:02:05 +08:00
										 |  |  |       config.zhipuai, | 
					
						
							| 
									
										
										
										
											2023-10-10 12:10:43 +08:00
										 |  |  |       config.baichuan, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |       config.spark, | 
					
						
							| 
									
										
										
										
											2023-09-18 18:02:05 +08:00
										 |  |  |       config.minimax, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |       config.tongyi, | 
					
						
							|  |  |  |       config.wenxin, | 
					
						
							|  |  |  |       config.chatglm, | 
					
						
							| 
									
										
										
										
											2023-08-22 18:19:10 +08:00
										 |  |  |       config.xinference, | 
					
						
							|  |  |  |       config.openllm, | 
					
						
							| 
									
										
										
										
											2023-09-13 10:08:33 +08:00
										 |  |  |       config.localai, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |     ] | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   else { | 
					
						
							|  |  |  |     modelList = [ | 
					
						
							|  |  |  |       config.huggingface_hub, | 
					
						
							| 
									
										
										
										
											2023-09-18 18:02:05 +08:00
										 |  |  |       config.zhipuai, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |       config.spark, | 
					
						
							| 
									
										
										
										
											2023-11-13 18:01:37 +08:00
										 |  |  |       config.baichuan, | 
					
						
							| 
									
										
										
										
											2023-09-18 18:02:05 +08:00
										 |  |  |       config.minimax, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |       config.azure_openai, | 
					
						
							|  |  |  |       config.replicate, | 
					
						
							|  |  |  |       config.tongyi, | 
					
						
							|  |  |  |       config.wenxin, | 
					
						
							|  |  |  |       config.chatglm, | 
					
						
							| 
									
										
										
										
											2023-08-22 18:19:10 +08:00
										 |  |  |       config.xinference, | 
					
						
							|  |  |  |       config.openllm, | 
					
						
							| 
									
										
										
										
											2023-08-29 22:22:02 +08:00
										 |  |  |       config.localai, | 
					
						
							| 
									
										
										
										
											2023-08-22 15:38:12 +08:00
										 |  |  |     ] | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |   const handleOpenModal = (newModelModalConfig: ProviderConfigModal | undefined, editValue?: FormValue) => { | 
					
						
							|  |  |  |     if (newModelModalConfig) { | 
					
						
							|  |  |  |       setShowModal(true) | 
					
						
							|  |  |  |       const defaultValue = editValue ? { ...newModelModalConfig.defaultValue, ...editValue } : newModelModalConfig.defaultValue | 
					
						
							|  |  |  |       setModelModalConfig({ | 
					
						
							|  |  |  |         ...newModelModalConfig, | 
					
						
							|  |  |  |         defaultValue, | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       if (editValue) | 
					
						
							|  |  |  |         setModalMode('edit') | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         setModalMode('add') | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const handleCancelModal = () => { | 
					
						
							|  |  |  |     setShowModal(false) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const handleUpdateProvidersAndModelList = () => { | 
					
						
							|  |  |  |     updateModelList(ModelType.textGeneration) | 
					
						
							|  |  |  |     updateModelList(ModelType.embeddings) | 
					
						
							| 
									
										
										
										
											2023-08-28 10:54:41 +08:00
										 |  |  |     updateModelList(ModelType.speech2text) | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |     mutateProviders() | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-08-23 19:48:31 +08:00
										 |  |  |   const handleSave = async (originValue?: FormValue) => { | 
					
						
							|  |  |  |     if (originValue && modelModalConfig) { | 
					
						
							|  |  |  |       const v = modelModalConfig.filterValue ? modelModalConfig.filterValue(originValue) : originValue | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |       let body, url | 
					
						
							|  |  |  |       if (ConfigurableProviders.includes(modelModalConfig.key)) { | 
					
						
							|  |  |  |         const { model_name, model_type, ...config } = v | 
					
						
							|  |  |  |         body = { | 
					
						
							|  |  |  |           model_name, | 
					
						
							|  |  |  |           model_type, | 
					
						
							|  |  |  |           config, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         url = `/workspaces/current/model-providers/${modelModalConfig.key}/models` | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       else { | 
					
						
							|  |  |  |         body = { | 
					
						
							|  |  |  |           config: v, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         url = `/workspaces/current/model-providers/${modelModalConfig.key}` | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       try { | 
					
						
							|  |  |  |         eventEmitter?.emit('provider-save') | 
					
						
							|  |  |  |         const res = await setModelProvider({ url, body }) | 
					
						
							|  |  |  |         if (res.result === 'success') { | 
					
						
							|  |  |  |           notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) | 
					
						
							|  |  |  |           handleUpdateProvidersAndModelList() | 
					
						
							|  |  |  |           handleCancelModal() | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         eventEmitter?.emit('') | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       catch (e) { | 
					
						
							|  |  |  |         eventEmitter?.emit('') | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const handleConfirm = (deleteModel: DeleteModel, providerKey: ProviderEnum) => { | 
					
						
							|  |  |  |     setDeleteModel({ ...deleteModel, providerKey }) | 
					
						
							|  |  |  |     setConfirmShow(true) | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const handleOperate = async ({ type, value }: Record<string, any>, provierKey: ProviderEnum) => { | 
					
						
							|  |  |  |     if (type === 'delete') { | 
					
						
							|  |  |  |       if (!value) { | 
					
						
							|  |  |  |         const res = await deleteModelProvider({ url: `/workspaces/current/model-providers/${provierKey}` }) | 
					
						
							|  |  |  |         if (res.result === 'success') { | 
					
						
							|  |  |  |           notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) | 
					
						
							|  |  |  |           handleUpdateProvidersAndModelList() | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       else { | 
					
						
							|  |  |  |         handleConfirm(value, provierKey) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (type === 'priority') { | 
					
						
							|  |  |  |       const res = await changeModelProviderPriority({ | 
					
						
							|  |  |  |         url: `/workspaces/current/model-providers/${provierKey}/preferred-provider-type`, | 
					
						
							|  |  |  |         body: { | 
					
						
							|  |  |  |           preferred_provider_type: value, | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       if (res.result === 'success') { | 
					
						
							|  |  |  |         notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) | 
					
						
							|  |  |  |         mutateProviders() | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const handleDeleteModel = async () => { | 
					
						
							|  |  |  |     const { model_name, model_type, providerKey } = deleteModel || {} | 
					
						
							|  |  |  |     const res = await deleteModelProviderModel({ | 
					
						
							|  |  |  |       url: `/workspaces/current/model-providers/${providerKey}/models?model_name=${model_name}&model_type=${model_type}`, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     if (res.result === 'success') { | 
					
						
							|  |  |  |       notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) | 
					
						
							|  |  |  |       setConfirmShow(false) | 
					
						
							|  |  |  |       handleUpdateProvidersAndModelList() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const mutateDefaultModel = (type: ModelType) => { | 
					
						
							|  |  |  |     if (type === ModelType.textGeneration) | 
					
						
							|  |  |  |       mutateTextGenerationDefaultModel() | 
					
						
							|  |  |  |     if (type === ModelType.embeddings) | 
					
						
							|  |  |  |       mutateEmbeddingsDefaultModel() | 
					
						
							|  |  |  |     if (type === ModelType.speech2text) | 
					
						
							|  |  |  |       mutateSpeech2textDefaultModel() | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   const handleChangeDefaultModel = async (type: ModelType, v: BackendModel) => { | 
					
						
							|  |  |  |     const res = await updateDefaultModel({ | 
					
						
							|  |  |  |       url: '/workspaces/current/default-model', | 
					
						
							|  |  |  |       body: { | 
					
						
							|  |  |  |         model_type: type, | 
					
						
							|  |  |  |         provider_name: v.model_provider.provider_name, | 
					
						
							|  |  |  |         model_name: v.model_name, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     if (res.result === 'success') { | 
					
						
							|  |  |  |       notify({ type: 'success', message: t('common.actionMsg.modifiedSuccessfully') }) | 
					
						
							|  |  |  |       mutateDefaultModel(type) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     <div className='relative pt-1 -mt-2'> | 
					
						
							|  |  |  |       <div className='grid grid-cols-3 gap-4 mb-5'> | 
					
						
							|  |  |  |         <div className='w-full'> | 
					
						
							|  |  |  |           <div className={titleClassName}> | 
					
						
							|  |  |  |             {t('common.modelProvider.systemReasoningModel.key')} | 
					
						
							| 
									
										
										
										
											2023-08-13 22:50:31 +08:00
										 |  |  |             <Tooltip | 
					
						
							|  |  |  |               selector='model-page-system-reasoning-model-tip' | 
					
						
							|  |  |  |               htmlContent={ | 
					
						
							|  |  |  |                 <div className='w-[261px] text-gray-500'>{t('common.modelProvider.systemReasoningModel.tip')}</div> | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |               <HelpCircle className={tipClassName} /> | 
					
						
							|  |  |  |             </Tooltip> | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |           </div> | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <ModelSelector | 
					
						
							|  |  |  |               value={textGenerationDefaultModel && { providerName: textGenerationDefaultModel.model_provider.provider_name, modelName: textGenerationDefaultModel.model_name }} | 
					
						
							|  |  |  |               modelType={ModelType.textGeneration} | 
					
						
							|  |  |  |               onChange={v => handleChangeDefaultModel(ModelType.textGeneration, v)} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div className='w-full'> | 
					
						
							|  |  |  |           <div className={titleClassName}> | 
					
						
							|  |  |  |             {t('common.modelProvider.embeddingModel.key')} | 
					
						
							| 
									
										
										
										
											2023-08-13 22:50:31 +08:00
										 |  |  |             <Tooltip | 
					
						
							|  |  |  |               selector='model-page-system-embedding-model-tip' | 
					
						
							|  |  |  |               htmlContent={ | 
					
						
							|  |  |  |                 <div className='w-[261px] text-gray-500'>{t('common.modelProvider.embeddingModel.tip')}</div> | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |               <HelpCircle className={tipClassName} /> | 
					
						
							|  |  |  |             </Tooltip> | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |           </div> | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <ModelSelector | 
					
						
							|  |  |  |               value={embeddingsDefaultModel && { providerName: embeddingsDefaultModel.model_provider.provider_name, modelName: embeddingsDefaultModel.model_name }} | 
					
						
							|  |  |  |               modelType={ModelType.embeddings} | 
					
						
							|  |  |  |               onChange={v => handleChangeDefaultModel(ModelType.embeddings, v)} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |         <div className='w-full'> | 
					
						
							|  |  |  |           <div className={titleClassName}> | 
					
						
							|  |  |  |             {t('common.modelProvider.speechToTextModel.key')} | 
					
						
							| 
									
										
										
										
											2023-08-13 22:50:31 +08:00
										 |  |  |             <Tooltip | 
					
						
							|  |  |  |               selector='model-page-system-speechToText-model-tip' | 
					
						
							|  |  |  |               htmlContent={ | 
					
						
							|  |  |  |                 <div className='w-[261px] text-gray-500'>{t('common.modelProvider.speechToTextModel.tip')}</div> | 
					
						
							|  |  |  |               } | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |               <HelpCircle className={tipClassName} /> | 
					
						
							|  |  |  |             </Tooltip> | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |           </div> | 
					
						
							|  |  |  |           <div> | 
					
						
							|  |  |  |             <ModelSelector | 
					
						
							|  |  |  |               value={speech2textDefaultModel && { providerName: speech2textDefaultModel.model_provider.provider_name, modelName: speech2textDefaultModel.model_name }} | 
					
						
							|  |  |  |               modelType={ModelType.speech2text} | 
					
						
							|  |  |  |               onChange={v => handleChangeDefaultModel(ModelType.speech2text, v)} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <div className='mb-5 h-[0.5px] bg-gray-100' /> | 
					
						
							|  |  |  |       <div className='mb-3 text-sm font-medium text-gray-800'>{t('common.modelProvider.models')}</div> | 
					
						
							|  |  |  |       <div className='grid grid-cols-2 gap-4 mb-6'> | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |           MODEL_CARD_LIST.map((model, index) => ( | 
					
						
							|  |  |  |             <ModelCard | 
					
						
							|  |  |  |               key={index} | 
					
						
							|  |  |  |               modelItem={model.item} | 
					
						
							|  |  |  |               currentProvider={providers?.[model.item.key]} | 
					
						
							|  |  |  |               onOpenModal={editValue => handleOpenModal(model.modal, editValue)} | 
					
						
							|  |  |  |               onOperate={v => handleOperate(v, model.item.key)} | 
					
						
							|  |  |  |             /> | 
					
						
							|  |  |  |           )) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       { | 
					
						
							| 
									
										
										
										
											2023-11-13 18:01:37 +08:00
										 |  |  |         modelList.map((model, index) => ( | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |           <ModelItem | 
					
						
							|  |  |  |             key={index} | 
					
						
							|  |  |  |             modelItem={model.item} | 
					
						
							|  |  |  |             currentProvider={providers?.[model.item.key]} | 
					
						
							|  |  |  |             onOpenModal={editValue => handleOpenModal(model.modal, editValue)} | 
					
						
							|  |  |  |             onOperate={v => handleOperate(v, model.item.key)} | 
					
						
							|  |  |  |             onUpdate={mutateProviders} | 
					
						
							|  |  |  |           /> | 
					
						
							|  |  |  |         )) | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       <ModelModal | 
					
						
							|  |  |  |         isShow={showModal} | 
					
						
							|  |  |  |         modelModal={modelModalConfig} | 
					
						
							|  |  |  |         onCancel={handleCancelModal} | 
					
						
							|  |  |  |         onSave={handleSave} | 
					
						
							|  |  |  |         mode={modalMode} | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |       <Confirm | 
					
						
							|  |  |  |         isShow={confirmShow} | 
					
						
							|  |  |  |         onCancel={() => setConfirmShow(false)} | 
					
						
							|  |  |  |         title={deleteModel?.model_name || ''} | 
					
						
							|  |  |  |         desc={t('common.modelProvider.item.deleteDesc', { modelName: deleteModel?.model_name }) || ''} | 
					
						
							|  |  |  |         onConfirm={handleDeleteModel} | 
					
						
							| 
									
										
										
										
											2023-10-26 10:35:03 +08:00
										 |  |  |         confirmWrapperClassName='!z-30' | 
					
						
							| 
									
										
										
										
											2023-08-12 00:57:13 +08:00
										 |  |  |       /> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default ModelPage |