diff --git a/webapp/packages/supersonic-fe/src/pages/Agent/ToolModal.tsx b/webapp/packages/supersonic-fe/src/pages/Agent/ToolModal.tsx index cae1133d4..f124c46c7 100644 --- a/webapp/packages/supersonic-fe/src/pages/Agent/ToolModal.tsx +++ b/webapp/packages/supersonic-fe/src/pages/Agent/ToolModal.tsx @@ -1,17 +1,12 @@ -import { Form, Modal, Input, Select, Button, TreeSelect } from 'antd'; -import { - AgentToolType, - AgentToolTypeEnum, - AGENT_TOOL_TYPE_LIST, - MetricOptionType, - QUERY_MODE_LIST, -} from './type'; +import { Form, Modal, Input, Select, Button, TreeSelect, message } from 'antd'; +import { AgentToolType, AgentToolTypeEnum, MetricOptionType, QUERY_MODE_LIST } from './type'; import { useEffect, useState } from 'react'; import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'; import styles from './style.less'; import { traverseTree, uuid } from '@/utils/utils'; import { getModelList } from './service'; import { PluginType } from '../ChatPlugin/type'; +import { getToolTypes } from './service'; import { getPluginList } from '../ChatPlugin/service'; const FormItem = Form.Item; @@ -29,6 +24,7 @@ const ToolModal: React.FC = ({ editTool, onSaveTool, onCancel }) => { const [examples, setExamples] = useState<{ id: string; question?: string }[]>([]); const [metricOptions, setMetricOptions] = useState([]); const [plugins, setPlugins] = useState([]); + const [toolTypesOptions, setToolTypesOptions] = useState([]); const [form] = Form.useForm(); const initModelList = async () => { @@ -50,6 +46,7 @@ const ToolModal: React.FC = ({ editTool, onSaveTool, onCancel }) => { useEffect(() => { initModelList(); initPluginList(); + queryToolTypes(); }, []); useEffect(() => { @@ -65,6 +62,21 @@ const ToolModal: React.FC = ({ editTool, onSaveTool, onCancel }) => { } }, [editTool]); + const queryToolTypes = async () => { + const { code, data } = await getToolTypes(); + if (code === 200 && data) { + const options = Object.keys(data).map((key: string) => { + return { + label: data[key], + value: key, + }; + }); + setToolTypesOptions(options); + } else { + message.error('获取工具类型失败'); + } + }; + const layout = { labelCol: { span: 6 }, wrapperCol: { span: 14 }, @@ -95,11 +107,7 @@ const ToolModal: React.FC = ({ editTool, onSaveTool, onCancel }) => { >
- diff --git a/webapp/packages/supersonic-fe/src/pages/Agent/ToolsSection.tsx b/webapp/packages/supersonic-fe/src/pages/Agent/ToolsSection.tsx index 8fc7824e5..78b220180 100644 --- a/webapp/packages/supersonic-fe/src/pages/Agent/ToolsSection.tsx +++ b/webapp/packages/supersonic-fe/src/pages/Agent/ToolsSection.tsx @@ -1,10 +1,11 @@ import { uuid } from '@/utils/utils'; import { DeleteOutlined, EditOutlined, ToolOutlined } from '@ant-design/icons'; -import { Empty, Popconfirm } from 'antd'; -import { useState } from 'react'; +import { Empty, Popconfirm, message } from 'antd'; +import { useState, useEffect } from 'react'; import styles from './style.less'; import ToolModal from './ToolModal'; -import { AgentToolType, AgentType, AGENT_TOOL_TYPE_LIST } from './type'; +import { getToolTypes } from './service'; +import { AgentToolType, AgentType } from './type'; type Props = { currentAgent?: AgentType; @@ -15,6 +16,12 @@ const ToolsSection: React.FC = ({ currentAgent, onSaveAgent }) => { const [modalVisible, setModalVisible] = useState(false); const [editTool, setEditTool] = useState(); + const [toolTypesOptions, setToolTypesOptions] = useState([]); + + useEffect(() => { + queryToolTypes(); + }, []); + const toolConfig = currentAgent?.toolConfig ? JSON.parse(currentAgent.toolConfig as any) : {}; const saveAgent = async (agent: AgentType) => { @@ -22,6 +29,21 @@ const ToolsSection: React.FC = ({ currentAgent, onSaveAgent }) => { setModalVisible(false); }; + const queryToolTypes = async () => { + const { code, data } = await getToolTypes(); + if (code === 200 && data) { + const options = Object.keys(data).map((key: string) => { + return { + label: data[key], + value: key, + }; + }); + setToolTypesOptions(options); + } else { + message.error('获取工具类型失败'); + } + }; + const onSaveTool = async (tool: AgentToolType) => { const newAgentConfig = toolConfig || ({} as any); if (!newAgentConfig.tools) { @@ -60,7 +82,7 @@ const ToolsSection: React.FC = ({ currentAgent, onSaveAgent }) => { {toolConfig?.tools && toolConfig?.tools?.length > 0 ? (
{toolConfig.tools.map((tool: AgentToolType) => { - const toolType = AGENT_TOOL_TYPE_LIST.find((item) => item.value === tool.type)?.label; + const toolType = toolTypesOptions.find((item) => item.value === tool.type)?.label; return (
{ + return request(`${process.env.CHAT_API_BASE_URL}agent/getToolTypes`, { + method: 'GET', + }); +} diff --git a/webapp/packages/supersonic-fe/src/pages/Agent/type.ts b/webapp/packages/supersonic-fe/src/pages/Agent/type.ts index ed38b937c..45eea5727 100644 --- a/webapp/packages/supersonic-fe/src/pages/Agent/type.ts +++ b/webapp/packages/supersonic-fe/src/pages/Agent/type.ts @@ -8,23 +8,9 @@ export enum AgentToolTypeEnum { NL2SQL_RULE = 'NL2SQL_RULE', NL2SQL_LLM = 'NL2SQL_LLM', PLUGIN = 'PLUGIN', + DATASET = 'DATASET', } -export const AGENT_TOOL_TYPE_LIST = [ - { - label: '规则语义解析', - value: AgentToolTypeEnum.NL2SQL_RULE, - }, - { - label: '大模型语义解析', - value: AgentToolTypeEnum.NL2SQL_LLM, - }, - { - label: '第三方插件', - value: AgentToolTypeEnum.PLUGIN, - }, -]; - export enum QueryModeEnum { METRIC = 'METRIC', DETAIL = 'DETAIL', @@ -97,7 +83,7 @@ export type AgentType = { status?: 0 | 1; enableSearch?: 0 | 1; toolConfig?: string; - modelConfig: LlmConfigType; + modelConfig?: LlmConfigType; multiTurnConfig?: MultiTurnConfig; visualConfig?: VisualConfig; }; diff --git a/webapp/packages/supersonic-fe/src/pages/System/index.tsx b/webapp/packages/supersonic-fe/src/pages/System/index.tsx index 634a93b7d..533008ed2 100644 --- a/webapp/packages/supersonic-fe/src/pages/System/index.tsx +++ b/webapp/packages/supersonic-fe/src/pages/System/index.tsx @@ -5,7 +5,7 @@ import { getSystemConfig, saveSystemConfig } from '@/services/user'; import { ProCard } from '@ant-design/pro-components'; import SelectTMEPerson from '@/components/SelectTMEPerson'; import { ConfigParametersItem, SystemConfig, dependenciesItem } from './types'; -import { testLLMConn } from '../../services/system'; +// import { testLLMConn } from '../../services/system'; import { groupBy } from 'lodash'; import { genneratorFormItemList } from '../SemanticModel/utils'; @@ -23,7 +23,7 @@ const System: React.FC = () => { const configMap = useRef>(); const configIocDepMap = useRef>(); - const [llmTestLoading, setLlmTestLoading] = useState(false); + // const [llmTestLoading, setLlmTestLoading] = useState(false); useEffect(() => { querySystemConfig(); @@ -48,7 +48,6 @@ const System: React.FC = () => { configMap.current = parametersMap; groupConfigAndSet(parameters); - console.log(parameters, admins, 232323); initDepConfig(parameters, admins); setConfigSource(data); @@ -197,16 +196,16 @@ const System: React.FC = () => { groupConfigAndSet(Object.values(tempConfigMap)); }; - const testLLMConnect = async (params: any) => { - setLlmTestLoading(true); - const { code, data } = await testLLMConn(params); - setLlmTestLoading(false); - if (code === 200 && data) { - message.success('连接成功'); - } else { - message.error('模型连接失败'); - } - }; + // const testLLMConnect = async (params: any) => { + // setLlmTestLoading(true); + // const { code, data } = await testLLMConn(params); + // setLlmTestLoading(false); + // if (code === 200 && data) { + // message.success('连接成功'); + // } else { + // message.error('模型连接失败'); + // } + // }; return ( <>