Skip to content

Commit ebc16e7

Browse files
committed
Some minor fixes.
1 parent 15eeb6a commit ebc16e7

File tree

5 files changed

+56
-22
lines changed

5 files changed

+56
-22
lines changed

web/src/components/llm-mcp-server-select.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { truncate } from 'lodash';
44

55
interface IProps {
66
value?: string;
7-
onChange?: (value: string) => void;
7+
onChange?: (value: string, option: any) => void;
88
disabled?: boolean;
99
}
1010

web/src/hooks/mcp-server-setting-hooks.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ export const useFetchMultipleMcpServers = (idList: string[]): ResponseGetType<IM
2525
initialData: [],
2626
gcTime: 0,
2727
queryFn: async () => {
28-
const { data } = await mcpServerService.get_multiple({ id_list: idList});
28+
if (!idList) {
29+
return [];
30+
}
31+
32+
const { data } = await mcpServerService.get_multiple({ id_list: idList });
2933
return data?.data ?? [];
3034
},
3135
});

web/src/pages/flow/form/generate-form/hooks.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,7 @@ export const useBuildMcpServerVariableOptions = (nodeId: string) => {
7474
const { getNode } = useGraphStore((state) => state);
7575
const node = getNode(nodeId);
7676
const selectedMcpServerIdList = node?.data.form.llm_enabled_mcp_servers;
77-
78-
if (!selectedMcpServerIdList) {
79-
return [];
80-
}
81-
82-
const { data: selectedMcpServers } = useFetchMultipleMcpServers(selectedMcpServerIdList);
77+
const { data: selectedMcpServers } = useFetchMultipleMcpServers(selectedMcpServerIdList || []);
8378

8479
return selectedMcpServers.map(s => ({
8580
label: s.name,

web/src/pages/flow/form/generate-form/index.tsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,35 @@ const GenerateForm = ({ onValuesChange, form, node }: IOperatorForm) => {
1313
const { t } = useTranslate('flow');
1414

1515
const [isCurrentLlmSupportTools, setCurrentLlmSupportTools] = useState(false);
16+
const [newMcpServerVariableMap, setNewMcpServerVariableMap] = useState<any[]>(node!!.data.form.mcp_server_variable_map);
1617

1718
const onLlmSelectChanged = (_: string, option: any) => {
18-
setCurrentLlmSupportTools(option.is_tools);
19+
setTimeout(() => {
20+
setCurrentLlmSupportTools(option.is_tools);
21+
}, 0);
1922

2023
if (!option.is_tools) {
2124
node!!.data.form.llm_enabled_tools = [];
2225
node!!.data.form.llm_enabled_mcp_servers = [];
26+
node!!.data.form.mcp_server_variable_map = [];
2327
}
2428
};
2529

30+
const onMcpServerSelectChanged = (_: string, option: any[]) => {
31+
const existing_servers = new Set(option.map((o: any) => o.value));
32+
const new_map = [];
33+
34+
for (const m of node?.data.form.mcp_server_variable_map || []) {
35+
const server_id = m.target.split('@')[1];
36+
37+
if (existing_servers.has(server_id)) {
38+
new_map.push(m);
39+
}
40+
}
41+
42+
setNewMcpServerVariableMap(new_map);
43+
};
44+
2645
return (
2746
<Form
2847
name="basic"
@@ -65,9 +84,14 @@ const GenerateForm = ({ onValuesChange, form, node }: IOperatorForm) => {
6584
label={t('modelEnabledMcpServers', { keyPrefix: 'chat' })}
6685
tooltip={t('modelEnabledMcpServersTip', { keyPrefix: 'chat' })}
6786
>
68-
<LLMMcpServerSelect disabled={!isCurrentLlmSupportTools}></LLMMcpServerSelect>
87+
<LLMMcpServerSelect disabled={!isCurrentLlmSupportTools} onChange={onMcpServerSelectChanged}></LLMMcpServerSelect>
6988
</Form.Item>
70-
<McpInputVariable name="mcp_server_variable_map" node={node!!} />
89+
<McpInputVariable
90+
name="mcp_server_variable_map"
91+
node={node!!}
92+
disabled={!isCurrentLlmSupportTools}
93+
newMap={newMcpServerVariableMap}
94+
/>
7195
<Form.Item
7296
name={['cite']}
7397
label={t('cite')}

web/src/pages/flow/form/generate-form/mcp-input-variable.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import { RAGFlowNodeType } from '@/interfaces/database/flow';
22
import { MinusCircleOutlined, PlusOutlined } from '@ant-design/icons';
33
import { Button, Collapse, Flex, Form, Input, Select } from 'antd';
4-
import { PropsWithChildren, useCallback } from 'react';
4+
import { PropsWithChildren, useCallback, useEffect } from 'react';
55
import { useTranslation } from 'react-i18next';
66
import { useBuildComponentIdSelectOptions } from '../../hooks/use-get-begin-query';
77

88
import styles from './index.less';
99
import { useBuildMcpServerVariableOptions } from './hooks';
1010

1111
interface IProps {
12-
name?: string;
12+
name: string;
1313
node: RAGFlowNodeType;
14+
disabled?: boolean;
15+
newMap?: any[];
1416
}
1517

1618
enum VariableType {
@@ -21,8 +23,7 @@ enum VariableType {
2123
const getVariableName = (type: string) =>
2224
type === VariableType.Reference ? 'component_id' : 'value';
2325

24-
const McpVariableForm = ({ name: formName, node }: IProps) => {
25-
const nextFormName = formName || 'query';
26+
const McpVariableForm = ({ name: formName, node, disabled }: IProps) => {
2627
const { t } = useTranslation();
2728

2829
const targetOptions = useBuildMcpServerVariableOptions(node.id);
@@ -42,15 +43,15 @@ const McpVariableForm = ({ name: formName, node }: IProps) => {
4243
const handleTypeChange = useCallback(
4344
(name: number) => () => {
4445
setTimeout(() => {
45-
form.setFieldValue([nextFormName, name, 'component_id'], undefined);
46-
form.setFieldValue([nextFormName, name, 'value'], undefined);
46+
form.setFieldValue([formName, name, 'component_id'], undefined);
47+
form.setFieldValue([formName, name, 'value'], undefined);
4748
}, 0);
4849
},
49-
[form, nextFormName],
50+
[form, formName],
5051
);
5152

5253
return (
53-
<Form.List name={nextFormName}>
54+
<Form.List name={formName}>
5455
{(fields, { add, remove }) => (
5556
<>
5657
{fields.map(({ key, name, ...restField }) => (
@@ -79,7 +80,7 @@ const McpVariableForm = ({ name: formName, node }: IProps) => {
7980
</Form.Item>
8081
<Form.Item noStyle dependencies={[name, 'type']}>
8182
{({ getFieldValue }) => {
82-
const type = getFieldValue([nextFormName, name, 'type']);
83+
const type = getFieldValue([formName, name, 'type']);
8384
return (
8485
<Form.Item
8586
{...restField}
@@ -108,6 +109,7 @@ const McpVariableForm = ({ name: formName, node }: IProps) => {
108109
block
109110
icon={<PlusOutlined />}
110111
className={styles.addButton}
112+
disabled={disabled}
111113
>
112114
{t('flow.addVariable')}
113115
</Button>
@@ -137,11 +139,20 @@ export function FormCollapse({
137139
);
138140
}
139141

140-
const McpInputVariable = ({ name, node }: IProps) => {
142+
const McpInputVariable = ({ name, node, disabled, newMap }: IProps) => {
141143
const { t } = useTranslation();
144+
145+
useEffect(() => {
146+
node!!.data.form.mcp_server_variable_map = newMap;
147+
}, [newMap]);
148+
142149
return (
143150
<FormCollapse title={t('flow.mcpInputVariable')}>
144-
<McpVariableForm name={name} node={node}></McpVariableForm>
151+
<McpVariableForm
152+
name={name}
153+
node={node}
154+
disabled={disabled}
155+
></McpVariableForm>
145156
</FormCollapse>
146157
);
147158
};

0 commit comments

Comments
 (0)