import { Form, Modal, Input, Select, Button } from 'antd'; import { AgentToolType, AgentToolTypeEnum, AGENT_TOOL_TYPE_LIST, MetricOptionType, MetricType, ModelType, QUERY_MODE_LIST, } from './type'; import { useEffect, useState } from 'react'; import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'; import styles from './style.less'; import { getLeafList, uuid } from '@/utils/utils'; import { getMetricList, getModelList } from './service'; import { PluginType } from '../ChatPlugin/type'; import { getPluginList } from '../ChatPlugin/service'; const FormItem = Form.Item; type Props = { editTool?: AgentToolType; onSaveTool: (tool: AgentToolType) => Promise; onCancel: () => void; }; const ToolModal: React.FC = ({ editTool, onSaveTool, onCancel }) => { const [toolType, setToolType] = useState(); const [modelList, setModelList] = useState([]); const [saveLoading, setSaveLoading] = useState(false); const [examples, setExamples] = useState<{ id: string; question?: string }[]>([]); const [metricOptions, setMetricOptions] = useState([]); const [modelMetricList, setModelMetricList] = useState([]); const [plugins, setPlugins] = useState([]); const [form] = Form.useForm(); const initModelList = async () => { const res = await getModelList(); setModelList([{ id: -1, name: '默认' }, ...getLeafList(res.data)]); }; const initPluginList = async () => { const res = await getPluginList({}); setPlugins(res.data || []); }; useEffect(() => { initModelList(); initPluginList(); }, []); const initModelMetrics = async (params: any) => { const res = await getMetricList(params[0].modelId); setModelMetricList(res.data.list); }; useEffect(() => { if (editTool) { form.setFieldsValue({ ...editTool, plugins: editTool.plugins?.[0] }); setToolType(editTool.type); setExamples( (editTool.exampleQuestions || []).map((item) => ({ id: uuid(), question: item })), ); setMetricOptions(editTool.metricOptions || []); if (editTool.metricOptions && editTool.metricOptions.length > 0) { initModelMetrics(editTool.metricOptions || []); } } else { form.resetFields(); } }, [editTool]); const layout = { labelCol: { span: 6 }, wrapperCol: { span: 14 }, }; const onOk = async () => { const values = await form.validateFields(); setSaveLoading(true); await onSaveTool({ id: editTool?.id, ...values, exampleQuestions: examples.map((item) => item.question).filter((item) => item), plugins: values.plugins ? [values.plugins] : undefined, metricOptions: metricOptions.map((item) => ({ ...item, modelId: values.modelId })), }); setSaveLoading(false); }; const updateMetricList = async (value: number) => { const res = await getMetricList(value); setModelMetricList(res.data.list); }; return (
{(toolType === AgentToolTypeEnum.RULE || toolType === AgentToolTypeEnum.LLM_S2SQL) && ( { example.question = e.target.value; setExamples([...examples]); }} allowClear /> { setExamples(examples.filter((item) => item.id !== id)); }} /> ); })} )} {toolType === AgentToolTypeEnum.INTERPRET && ( <> ({ label: metric.name, value: `${metric.id}`, }))} showSearch className={styles.filterParamValueField} filterOption={(input, option) => ((option?.label ?? '') as string) .toLowerCase() .includes(input.toLowerCase()) } allowClear value={filter.metricId} onChange={(value) => { filter.metricId = value; setMetricOptions([...metricOptions]); }} /> { setMetricOptions(metricOptions.filter((item) => item.id !== filter.id)); }} /> ); })} )} {toolType === AgentToolTypeEnum.PLUGIN && ( ((option?.label ?? '') as string).toLowerCase().includes(input.toLowerCase()) } /> )}
); }; export default ToolModal;