diff --git a/web/src/components/dynamic-form.tsx b/web/src/components/dynamic-form.tsx index e13c05fa1..f7449ec9f 100644 --- a/web/src/components/dynamic-form.tsx +++ b/web/src/components/dynamic-form.tsx @@ -550,11 +550,13 @@ const DynamicForm = { } : fieldProps; return ( - +
+ +
); }} diff --git a/web/src/pages/agent/gobal-variable-sheet/index.tsx b/web/src/pages/agent/gobal-variable-sheet/index.tsx index 8d7ab3afe..dbea2721f 100644 --- a/web/src/pages/agent/gobal-variable-sheet/index.tsx +++ b/web/src/pages/agent/gobal-variable-sheet/index.tsx @@ -81,31 +81,34 @@ export const GobalParamSheet = (props: IGobalParamModalProps) => { const { saveGraph, loading } = useSaveGraph(); - const handleSubmit = (value: FieldValues) => { + const handleSubmit = async (value: FieldValues) => { const param = { ...(data.dsl?.variables || {}), [value.name]: value, } as Record; - saveGraph(undefined, { + + const res = await saveGraph(undefined, { gobalVariables: param, }); - if (!loading) { - setTimeout(() => { - refetch(); - }, 500); + + if (res.code === 0) { + refetch(); } hideAddModal(); }; - const handleDeleteGobalVariable = (key: string) => { + const handleDeleteGobalVariable = async (key: string) => { const param = { ...(data.dsl?.variables || {}), } as Record; delete param[key]; - saveGraph(undefined, { + const res = await saveGraph(undefined, { gobalVariables: param, }); - refetch(); + console.log('delete gobal variable-->', res); + if (res.code === 0) { + refetch(); + } }; const handleEditGobalVariable = (item: FieldValues) => { diff --git a/web/src/pages/agent/utils.ts b/web/src/pages/agent/utils.ts index 6d214b771..8536f0fe0 100644 --- a/web/src/pages/agent/utils.ts +++ b/web/src/pages/agent/utils.ts @@ -356,15 +356,19 @@ export const buildDslGobalVariables = ( return { globals: dsl.globals, variables: dsl.variables || {} }; } - let gobalVariablesTemp = {}; + let gobalVariablesTemp: Record = {}; + let gobalSystem: Record = {}; + Object.keys(dsl.globals)?.forEach((key) => { + if (key.indexOf('sys') > -1) { + gobalSystem[key] = dsl.globals[key]; + } + }); Object.keys(gobalVariables).forEach((key) => { - gobalVariablesTemp = { - ['env.' + key]: gobalVariables[key].value, - }; + gobalVariablesTemp['env.' + key] = gobalVariables[key].value; }); const gobalVariablesResult = { - ...dsl.globals, + ...gobalSystem, ...gobalVariablesTemp, }; return { globals: gobalVariablesResult, variables: gobalVariables }; diff --git a/web/src/pages/dataset/dataset-overview/overview-table.tsx b/web/src/pages/dataset/dataset-overview/overview-table.tsx index 05e9465b0..26e89cd61 100644 --- a/web/src/pages/dataset/dataset-overview/overview-table.tsx +++ b/web/src/pages/dataset/dataset-overview/overview-table.tsx @@ -37,7 +37,7 @@ import { useReactTable, } from '@tanstack/react-table'; import { TFunction } from 'i18next'; -import { ArrowUpDown, ClipboardList, Eye } from 'lucide-react'; +import { ArrowUpDown, ClipboardList, Eye, MonitorUp } from 'lucide-react'; import { FC, useMemo, useState } from 'react'; import { useParams } from 'umi'; import { RunningStatus } from '../dataset/constant'; @@ -107,11 +107,20 @@ export const getFileLogsTableColumns = ( meta: { cellClassName: 'max-w-[10vw]' }, cell: ({ row }) => (
- {row.original.source_from - ? DataSourceInfo[ - row.original.source_from as keyof typeof DataSourceInfo - ].icon - : t('localUpload')} + {row.original.source_from === 'local' || + row.original.source_from === '' ? ( +
+ +
+ ) : ( +
+ { + DataSourceInfo[ + row.original.source_from as keyof typeof DataSourceInfo + ].icon + } +
+ )}
), }, diff --git a/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx b/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx index 85289894f..3259cbe74 100644 --- a/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx +++ b/web/src/pages/dataset/dataset/use-dataset-table-columns.tsx @@ -14,7 +14,7 @@ import { cn } from '@/lib/utils'; import { DataSourceInfo } from '@/pages/user-setting/data-source/contant'; import { formatDate } from '@/utils/date'; import { ColumnDef } from '@tanstack/table-core'; -import { ArrowUpDown } from 'lucide-react'; +import { ArrowUpDown, MonitorUp } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { DatasetActionCell } from './dataset-action-cell'; import { ParsingStatusCell } from './parsing-status-cell'; @@ -126,11 +126,20 @@ export function useDatasetTableColumns({ header: t('source'), cell: ({ row }) => (
- {row.original.source_type - ? DataSourceInfo[ - row.original.source_type as keyof typeof DataSourceInfo - ]?.icon || t('localUpload') - : t('localUpload')} + {row.original.source_type === 'local' || + row.original.source_type === '' ? ( +
+ +
+ ) : ( +
+ { + DataSourceInfo[ + row.original.source_type as keyof typeof DataSourceInfo + ].icon + } +
+ )}
), }, diff --git a/web/src/pages/user-setting/index.tsx b/web/src/pages/user-setting/index.tsx index 224c2e9e2..3f5644234 100644 --- a/web/src/pages/user-setting/index.tsx +++ b/web/src/pages/user-setting/index.tsx @@ -47,7 +47,7 @@ const UserSetting = () => {
diff --git a/web/src/pages/user-setting/profile/index.tsx b/web/src/pages/user-setting/profile/index.tsx index b86e1fd41..da19afa0d 100644 --- a/web/src/pages/user-setting/profile/index.tsx +++ b/web/src/pages/user-setting/profile/index.tsx @@ -20,6 +20,7 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select'; +import { Separator } from '@/components/ui/separator'; import { useTranslate } from '@/hooks/common-hooks'; import { TimezoneList } from '@/pages/user-setting/constants'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -122,20 +123,22 @@ const ProfilePage: FC = () => { // }; return ( -
+
{/* Header */} -
-

{t('profile')}

-
+
+
+ {t('profile')} +
+
{t('profileDescription')}
- + {/* Main Content */} -
+
{/* Name */} -
+
diff --git a/web/src/pages/user-setting/setting-model/index1.tsx b/web/src/pages/user-setting/setting-model/index1.tsx deleted file mode 100644 index 4a2fea817..000000000 --- a/web/src/pages/user-setting/setting-model/index1.tsx +++ /dev/null @@ -1,584 +0,0 @@ -import { ReactComponent as MoreModelIcon } from '@/assets/svg/more-model.svg'; -import { LlmIcon } from '@/components/svg-icon'; -import { useTheme } from '@/components/theme-provider'; -import { LLMFactory } from '@/constants/llm'; -import { useSetModalState, useTranslate } from '@/hooks/common-hooks'; -import { - LlmItem, - useFetchMyLlmListDetailed, - useSelectLlmList, -} from '@/hooks/llm-hooks'; -import { getRealModelName } from '@/utils/llm-util'; -import { - CloseCircleOutlined, - EditOutlined, - SettingOutlined, -} from '@ant-design/icons'; -import { - Button, - Card, - Col, - Collapse, - CollapseProps, - Divider, - Flex, - List, - Row, - Space, - Spin, - Tag, - Tooltip, - Typography, -} from 'antd'; -import { CircleHelp } from 'lucide-react'; -import { useCallback, useMemo } from 'react'; -import SettingTitle from '../components/setting-title'; -import { isLocalLlmFactory } from '../utils'; -import { - useHandleDeleteFactory, - useHandleDeleteLlm, - useSubmitApiKey, - useSubmitAzure, - useSubmitBedrock, - useSubmitFishAudio, - useSubmitGoogle, - useSubmitHunyuan, - useSubmitOllama, - useSubmitSpark, - useSubmitSystemModelSetting, - useSubmitTencentCloud, - useSubmitVolcEngine, - useSubmityiyan, -} from './hooks'; -import styles from './index.less'; -import ApiKeyModal from './modal/api-key-modal'; -import AzureOpenAIModal from './modal/azure-openai-modal'; -import BedrockModal from './modal/bedrock-modal'; -import FishAudioModal from './modal/fish-audio-modal'; -import GoogleModal from './modal/google-modal'; -import HunyuanModal from './modal/hunyuan-modal'; -import TencentCloudModal from './modal/next-tencent-modal'; -import OllamaModal from './modal/ollama-modal'; -import SparkModal from './modal/spark-modal'; -import SystemModelSettingModal from './modal/system-model-setting-modal'; -import VolcEngineModal from './modal/volcengine-modal'; -import YiyanModal from './modal/yiyan-modal'; - -const { Text } = Typography; -interface IModelCardProps { - item: LlmItem; - clickApiKey: (llmFactory: string) => void; - handleEditModel: (model: any, factory: LlmItem) => void; -} - -type TagType = - | 'LLM' - | 'TEXT EMBEDDING' - | 'TEXT RE-RANK' - | 'TTS' - | 'SPEECH2TEXT' - | 'IMAGE2TEXT' - | 'MODERATION'; - -const sortTags = (tags: string) => { - const orderMap: Record = { - LLM: 1, - 'TEXT EMBEDDING': 2, - 'TEXT RE-RANK': 3, - TTS: 4, - SPEECH2TEXT: 5, - IMAGE2TEXT: 6, - MODERATION: 7, - }; - - return tags - .split(',') - .map((tag) => tag.trim()) - .sort( - (a, b) => - (orderMap[a as TagType] || 999) - (orderMap[b as TagType] || 999), - ); -}; - -const ModelCard = ({ item, clickApiKey, handleEditModel }: 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} - - {sortTags(item.tags).map((tag, index) => ( - - {tag} - - ))} - - - - - - - - - - - - - {visible && ( - ( - - - {getRealModelName(model.name)} - {model.type} - {isLocalLlmFactory(item.name) && ( - - - - )} - - - - - - )} - /> - )} - - - ); -}; - -const UserSettingModel = () => { - const { factoryList, myLlmList: llmList, loading } = useSelectLlmList(); - const { data: detailedLlmList } = useFetchMyLlmListDetailed(); - const { theme } = useTheme(); - const { - saveApiKeyLoading, - initialApiKey, - llmFactory, - editMode, - onApiKeySavingOk, - apiKeyVisible, - hideApiKeyModal, - showApiKeyModal, - } = useSubmitApiKey(); - const { - saveSystemModelSettingLoading, - onSystemSettingSavingOk, - systemSettingVisible, - hideSystemSettingModal, - showSystemSettingModal, - } = useSubmitSystemModelSetting(); - const { t } = useTranslate('setting'); - const { - llmAddingVisible, - hideLlmAddingModal, - showLlmAddingModal, - onLlmAddingOk, - llmAddingLoading, - editMode: llmEditMode, - initialValues: llmInitialValues, - 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( - () => ({ - [LLMFactory.Bedrock]: showBedrockAddingModal, - [LLMFactory.VolcEngine]: showVolcAddingModal, - [LLMFactory.TencentHunYuan]: showHunyuanAddingModal, - [LLMFactory.XunFeiSpark]: showSparkAddingModal, - [LLMFactory.BaiduYiYan]: showyiyanAddingModal, - [LLMFactory.FishAudio]: showFishAudioAddingModal, - [LLMFactory.TencentCloud]: showTencentCloudAddingModal, - [LLMFactory.GoogleCloud]: showGoogleAddingModal, - [LLMFactory.AzureOpenAI]: 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 handleEditModel = useCallback( - (model: any, factory: LlmItem) => { - if (factory) { - const detailedFactory = detailedLlmList[factory.name]; - const detailedModel = detailedFactory?.llm?.find( - (m: any) => m.name === model.name, - ); - - const editData = { - llm_factory: factory.name, - llm_name: model.name, - model_type: model.type, - }; - - if (isLocalLlmFactory(factory.name)) { - showLlmAddingModal(factory.name, true, editData, detailedModel); - } else if (factory.name in ModalMap) { - ModalMap[factory.name as keyof typeof ModalMap](); - } else { - showApiKeyModal(editData, true); - } - } - }, - [showApiKeyModal, showLlmAddingModal, ModalMap, detailedLlmList], - ); - - const items: CollapseProps['items'] = [ - { - key: '1', - label: t('addedModels'), - children: ( - ( - - )} - /> - ), - }, - { - key: '2', - label: ( -
- {t('modelsToBeAdded')} - - - -
- ), - children: ( - ( - - - - - - - {item.name} - - - {sortTags(item.tags).map((tag, index) => ( - - {tag} - - ))} - - - - - - - - )} - /> - ), - }, - ]; - - return ( -
- -
- - - -
-
- - {systemSettingVisible && ( - - )} - - - - - - - - - - -
- ); -}; - -export default UserSettingModel;