balibabu commited on
Commit
b2b0160
·
1 Parent(s): 4856f42

feat: add description text to operators and extract the useFetchModelId to logicHooks.ts and drag the operator to the canvas and initialize the form data #918 (#1379)

Browse files

### What problem does this PR solve?

feat: add description text to operators #918
feat: drag the operator to the canvas and initialize the form data #918
feat: extract the useFetchModelId to logicHooks.ts
### Type of change


- [x] New Feature (non-breaking change which adds functionality)

web/.umirc.ts CHANGED
@@ -1,40 +1,40 @@
1
- import { defineConfig } from 'umi';
2
- import { appName } from './src/conf.json';
3
- import routes from './src/routes';
4
-
5
- export default defineConfig({
6
- title: appName,
7
- outputPath: 'dist',
8
- // alias: { '@': './src' },
9
- npmClient: 'npm',
10
- base: '/',
11
- routes,
12
- publicPath: '/',
13
- esbuildMinifyIIFE: true,
14
- icons: {},
15
- hash: true,
16
- favicons: ['/logo.svg'],
17
- clickToComponent: {},
18
- history: {
19
- type: 'browser',
20
- },
21
- plugins: ['@react-dev-inspector/umi4-plugin', '@umijs/plugins/dist/dva'],
22
- dva: {},
23
-
24
- lessLoader: {
25
- modifyVars: {
26
- hack: `true; @import "~@/less/index.less";`,
27
- },
28
- },
29
- devtool: 'source-map',
30
- copy: ['src/conf.json'],
31
- proxy: {
32
- '/v1': {
33
- target: '',
34
- changeOrigin: true,
35
- ws: true,
36
- logger: console,
37
- // pathRewrite: { '^/v1': '/v1' },
38
- },
39
- },
40
- });
 
1
+ import { defineConfig } from 'umi';
2
+ import { appName } from './src/conf.json';
3
+ import routes from './src/routes';
4
+
5
+ export default defineConfig({
6
+ title: appName,
7
+ outputPath: 'dist',
8
+ // alias: { '@': './src' },
9
+ npmClient: 'npm',
10
+ base: '/',
11
+ routes,
12
+ publicPath: '/',
13
+ esbuildMinifyIIFE: true,
14
+ icons: {},
15
+ hash: true,
16
+ favicons: ['/logo.svg'],
17
+ clickToComponent: {},
18
+ history: {
19
+ type: 'browser',
20
+ },
21
+ plugins: ['@react-dev-inspector/umi4-plugin', '@umijs/plugins/dist/dva'],
22
+ dva: {},
23
+
24
+ lessLoader: {
25
+ modifyVars: {
26
+ hack: `true; @import "~@/less/index.less";`,
27
+ },
28
+ },
29
+ devtool: 'source-map',
30
+ copy: ['src/conf.json'],
31
+ proxy: {
32
+ '/v1': {
33
+ target: '',
34
+ changeOrigin: true,
35
+ ws: true,
36
+ logger: console,
37
+ // pathRewrite: { '^/v1': '/v1' },
38
+ },
39
+ },
40
+ });
web/src/components/message-item/index.less CHANGED
@@ -4,10 +4,10 @@
4
  display: inline-block;
5
  }
6
  .messageItemSectionLeft {
7
- width: 70%;
8
  }
9
  .messageItemSectionRight {
10
- width: 40%;
11
  }
12
  .messageItemContent {
13
  display: inline-flex;
 
4
  display: inline-block;
5
  }
6
  .messageItemSectionLeft {
7
+ width: 80%;
8
  }
9
  .messageItemSectionRight {
10
+ width: 80%;
11
  }
12
  .messageItemContent {
13
  display: inline-flex;
web/src/hooks/logicHooks.ts CHANGED
@@ -22,8 +22,13 @@ import { useTranslation } from 'react-i18next';
22
  import { useDispatch } from 'umi';
23
  import { useSetModalState, useTranslate } from './commonHooks';
24
  import { useSetDocumentParser } from './documentHooks';
 
25
  import { useOneNamespaceEffectsLoading } from './storeHooks';
26
- import { useSaveSetting } from './userSettingHook';
 
 
 
 
27
 
28
  export const useChangeDocumentParser = (documentId: string) => {
29
  const setDocumentParser = useSetDocumentParser();
@@ -269,3 +274,26 @@ export const useSelectItem = (defaultId?: string) => {
269
 
270
  return { selectedId, handleItemClick };
271
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  import { useDispatch } from 'umi';
23
  import { useSetModalState, useTranslate } from './commonHooks';
24
  import { useSetDocumentParser } from './documentHooks';
25
+ import { useFetchLlmList } from './llmHooks';
26
  import { useOneNamespaceEffectsLoading } from './storeHooks';
27
+ import {
28
+ useFetchTenantInfo,
29
+ useSaveSetting,
30
+ useSelectTenantInfo,
31
+ } from './userSettingHook';
32
 
33
  export const useChangeDocumentParser = (documentId: string) => {
34
  const setDocumentParser = useSetDocumentParser();
 
274
 
275
  return { selectedId, handleItemClick };
276
  };
277
+
278
+ export const useFetchModelId = (visible: boolean) => {
279
+ const fetchTenantInfo = useFetchTenantInfo(false);
280
+ const tenantInfo = useSelectTenantInfo();
281
+
282
+ useEffect(() => {
283
+ if (visible) {
284
+ fetchTenantInfo();
285
+ }
286
+ }, [visible, fetchTenantInfo]);
287
+
288
+ return tenantInfo?.llm_id ?? '';
289
+ };
290
+
291
+ export const useFetchLlmModelOnVisible = (visible: boolean) => {
292
+ const fetchLlmList = useFetchLlmList();
293
+
294
+ useEffect(() => {
295
+ if (visible) {
296
+ fetchLlmList();
297
+ }
298
+ }, [fetchLlmList, visible]);
299
+ };
web/src/locales/en.ts CHANGED
@@ -565,6 +565,17 @@ The above is the content you need to summarize.`,
565
  componentId: 'component id',
566
  add: 'Add',
567
  operation: 'operation',
 
 
 
 
 
 
 
 
 
 
 
568
  },
569
  footer: {
570
  profile: 'All rights reserved @ React',
 
565
  componentId: 'component id',
566
  add: 'Add',
567
  operation: 'operation',
568
+ beginDescription: 'This is where the flow begin',
569
+ answerDescription: `This component is used as an interface between bot and human. It receives input of user and display the result of the computation of the bot.`,
570
+ retrievalDescription: `This component is for the process of retrieving relevent information from knowledge base. So, knowledgebases should be selected. If there's nothing retrieved, the 'Empty response' will be returned.`,
571
+ generateDescription: `This component is used to call LLM to generate text. Be careful about the prompt setting.`,
572
+ categorizeDescription: `This component is used to categorize text. Please specify the name, description and examples of the category. Every single category leads to different downstream components.`,
573
+ relevantDescription: `This component is used to judge if the retrieved information is relevent to user's question. 'Yes' represents that they're relevant. 'No' represents they're irrelevant.`,
574
+ rewriteQuestionDescription: `This component is used to refine user's quesion. Typically, when a user's original question can't retrieve relevant information from knowledge base, this component help you change the question into a proper one which might be more consistant with the expressions in knowledge base. Only 'Retrieval' can be its downstreams.`,
575
+ messageDescription:
576
+ 'This component is used to send user static information.',
577
+ keywordDescription:
578
+ 'This component is used to send user static information.',
579
  },
580
  footer: {
581
  profile: 'All rights reserved @ React',
web/src/pages/chat/chat-configuration-modal/hooks.ts DELETED
@@ -1,29 +0,0 @@
1
- import { useFetchLlmList } from '@/hooks/llmHooks';
2
- import {
3
- useFetchTenantInfo,
4
- useSelectTenantInfo,
5
- } from '@/hooks/userSettingHook';
6
- import { useEffect } from 'react';
7
-
8
- export const useFetchModelId = (visible: boolean) => {
9
- const fetchTenantInfo = useFetchTenantInfo(false);
10
- const tenantInfo = useSelectTenantInfo();
11
-
12
- useEffect(() => {
13
- if (visible) {
14
- fetchTenantInfo();
15
- }
16
- }, [visible, fetchTenantInfo]);
17
-
18
- return tenantInfo?.llm_id ?? '';
19
- };
20
-
21
- export const useFetchLlmModelOnVisible = (visible: boolean) => {
22
- const fetchLlmList = useFetchLlmList();
23
-
24
- useEffect(() => {
25
- if (visible) {
26
- fetchLlmList();
27
- }
28
- }, [fetchLlmList, visible]);
29
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
web/src/pages/chat/chat-configuration-modal/index.tsx CHANGED
@@ -11,11 +11,11 @@ import camelCase from 'lodash/camelCase';
11
  import { useEffect, useRef, useState } from 'react';
12
  import { IPromptConfigParameters } from '../interface';
13
  import AssistantSetting from './assistant-setting';
14
- import { useFetchLlmModelOnVisible, useFetchModelId } from './hooks';
15
  import ModelSetting from './model-setting';
16
  import PromptEngine from './prompt-engine';
17
 
18
  import { useTranslate } from '@/hooks/commonHooks';
 
19
  import { getBase64FromUploadFileList } from '@/utils/fileUtil';
20
  import { removeUselessFieldsFromValues } from '@/utils/form';
21
  import styles from './index.less';
 
11
  import { useEffect, useRef, useState } from 'react';
12
  import { IPromptConfigParameters } from '../interface';
13
  import AssistantSetting from './assistant-setting';
 
14
  import ModelSetting from './model-setting';
15
  import PromptEngine from './prompt-engine';
16
 
17
  import { useTranslate } from '@/hooks/commonHooks';
18
+ import { useFetchLlmModelOnVisible, useFetchModelId } from '@/hooks/logicHooks';
19
  import { getBase64FromUploadFileList } from '@/utils/fileUtil';
20
  import { removeUselessFieldsFromValues } from '@/utils/form';
21
  import styles from './index.less';
web/src/pages/flow/chat/drawer.tsx CHANGED
@@ -1,16 +1,19 @@
 
1
  import { IModalProps } from '@/interfaces/common';
2
  import { Drawer } from 'antd';
3
  import FlowChatBox from './box';
4
 
5
  const ChatDrawer = ({ visible, hideModal }: IModalProps<any>) => {
 
 
6
  return (
7
  <Drawer
8
- title="Debug"
9
  placement="right"
10
  onClose={hideModal}
11
  open={visible}
12
  getContainer={false}
13
- width={window.innerWidth > 1278 ? '30%' : 470}
14
  mask={false}
15
  // zIndex={10000}
16
  >
 
1
+ import { useFetchFlow } from '@/hooks/flow-hooks';
2
  import { IModalProps } from '@/interfaces/common';
3
  import { Drawer } from 'antd';
4
  import FlowChatBox from './box';
5
 
6
  const ChatDrawer = ({ visible, hideModal }: IModalProps<any>) => {
7
+ const { data } = useFetchFlow();
8
+
9
  return (
10
  <Drawer
11
+ title={data.title}
12
  placement="right"
13
  onClose={hideModal}
14
  open={visible}
15
  getContainer={false}
16
+ width={window.innerWidth > 1278 ? '40%' : 470}
17
  mask={false}
18
  // zIndex={10000}
19
  >
web/src/pages/flow/constant.tsx CHANGED
@@ -1,3 +1,4 @@
 
1
  import {
2
  BranchesOutlined,
3
  DatabaseOutlined,
@@ -33,7 +34,7 @@ export const operatorIconMap = {
33
 
34
  export const operatorMap = {
35
  [Operator.Retrieval]: {
36
- description: 'Retrieval description drjlftglrthjftl',
37
  backgroundColor: '#cad6e0',
38
  color: '#385974',
39
  },
@@ -47,7 +48,8 @@ export const operatorMap = {
47
  color: '#996464',
48
  },
49
  [Operator.Answer]: {
50
- description: 'Answer description',
 
51
  backgroundColor: '#f4816d',
52
  color: 'white',
53
  },
@@ -126,7 +128,15 @@ export const initialBeginValues = {
126
  prologue: `Hi! I'm your assistant, what can I do for you?`,
127
  };
128
 
 
 
 
 
 
 
 
129
  const initialLlmBaseValues = {
 
130
  temperature: 0.1,
131
  top_p: 0.3,
132
  frequency_penalty: 0.7,
@@ -196,7 +206,14 @@ export const RestrictedUpstreamMap = {
196
  [Operator.Answer]: [],
197
  [Operator.Retrieval]: [],
198
  [Operator.Generate]: [],
199
- [Operator.Message]: [],
 
 
 
 
 
 
 
200
  [Operator.Relevant]: [],
201
  [Operator.RewriteQuestion]: [],
202
  };
 
1
+ import { variableEnabledFieldMap } from '@/constants/chat';
2
  import {
3
  BranchesOutlined,
4
  DatabaseOutlined,
 
34
 
35
  export const operatorMap = {
36
  [Operator.Retrieval]: {
37
+ description: 'This is where the flow begin',
38
  backgroundColor: '#cad6e0',
39
  color: '#385974',
40
  },
 
48
  color: '#996464',
49
  },
50
  [Operator.Answer]: {
51
+ description:
52
+ 'This component is used as an interface between bot and human. It receives input of user and display the result of the computation of the bot.',
53
  backgroundColor: '#f4816d',
54
  color: 'white',
55
  },
 
128
  prologue: `Hi! I'm your assistant, what can I do for you?`,
129
  };
130
 
131
+ export const variableCheckBoxFieldMap = Object.keys(
132
+ variableEnabledFieldMap,
133
+ ).reduce<Record<string, boolean>>((pre, cur) => {
134
+ pre[cur] = true;
135
+ return pre;
136
+ }, {});
137
+
138
  const initialLlmBaseValues = {
139
+ ...variableCheckBoxFieldMap,
140
  temperature: 0.1,
141
  top_p: 0.3,
142
  frequency_penalty: 0.7,
 
206
  [Operator.Answer]: [],
207
  [Operator.Retrieval]: [],
208
  [Operator.Generate]: [],
209
+ [Operator.Message]: [
210
+ Operator.Begin,
211
+ Operator.Message,
212
+ Operator.Generate,
213
+ Operator.Retrieval,
214
+ Operator.RewriteQuestion,
215
+ Operator.Categorize,
216
+ ],
217
  [Operator.Relevant]: [],
218
  [Operator.RewriteQuestion]: [],
219
  };
web/src/pages/flow/flow-sider/index.tsx CHANGED
@@ -1,6 +1,7 @@
1
- import { Card, Flex, Layout, Space, Typography } from 'antd';
 
2
  import classNames from 'classnames';
3
-
4
  import { componentMenuList } from '../constant';
5
  import { useHandleDrag } from '../hooks';
6
  import OperatorIcon from '../operator-icon';
@@ -8,8 +9,6 @@ import styles from './index.less';
8
 
9
  const { Sider } = Layout;
10
 
11
- const { Text } = Typography;
12
-
13
  interface IProps {
14
  setCollapsed: (width: boolean) => void;
15
  collapsed: boolean;
@@ -17,6 +16,7 @@ interface IProps {
17
 
18
  const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
19
  const { handleDragStart } = useHandleDrag();
 
20
 
21
  return (
22
  <Sider
@@ -40,13 +40,9 @@ const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
40
  <Space size={15}>
41
  <OperatorIcon name={x.name}></OperatorIcon>
42
  <section>
43
- <b>{x.name}</b>
44
- <Text
45
- ellipsis={{ tooltip: x.description }}
46
- style={{ width: 130 }}
47
- >
48
- {x.description}
49
- </Text>
50
  </section>
51
  </Space>
52
  </Flex>
 
1
+ import { useTranslate } from '@/hooks/commonHooks';
2
+ import { Card, Flex, Layout, Space, Tooltip } from 'antd';
3
  import classNames from 'classnames';
4
+ import lowerFirst from 'lodash/lowerFirst';
5
  import { componentMenuList } from '../constant';
6
  import { useHandleDrag } from '../hooks';
7
  import OperatorIcon from '../operator-icon';
 
9
 
10
  const { Sider } = Layout;
11
 
 
 
12
  interface IProps {
13
  setCollapsed: (width: boolean) => void;
14
  collapsed: boolean;
 
16
 
17
  const FlowSide = ({ setCollapsed, collapsed }: IProps) => {
18
  const { handleDragStart } = useHandleDrag();
19
+ const { t } = useTranslate('flow');
20
 
21
  return (
22
  <Sider
 
40
  <Space size={15}>
41
  <OperatorIcon name={x.name}></OperatorIcon>
42
  <section>
43
+ <Tooltip title={t(`${lowerFirst(x.name)}Description`)}>
44
+ <b>{x.name}</b>
45
+ </Tooltip>
 
 
 
 
46
  </section>
47
  </Space>
48
  </Flex>
web/src/pages/flow/hooks.ts CHANGED
@@ -17,13 +17,25 @@ import {
17
  ModelVariableType,
18
  settledModelVariableMap,
19
  } from '@/constants/knowledge';
 
20
  import { Variable } from '@/interfaces/database/chat';
21
  import { useDebounceEffect } from 'ahooks';
22
  import { FormInstance, message } from 'antd';
23
  import { humanId } from 'human-id';
24
  import trim from 'lodash/trim';
25
  import { useParams } from 'umi';
26
- import { NodeMap, Operator, RestrictedUpstreamMap } from './constant';
 
 
 
 
 
 
 
 
 
 
 
27
  import useGraphStore, { RFState } from './store';
28
  import { buildDslComponentsByGraph } from './utils';
29
 
@@ -43,6 +55,32 @@ export const useSelectCanvasData = () => {
43
  return useGraphStore(selector);
44
  };
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  export const useHandleDrag = () => {
47
  const handleDragStart = useCallback(
48
  (operatorId: string) => (ev: React.DragEvent<HTMLDivElement>) => {
@@ -59,6 +97,7 @@ export const useHandleDrop = () => {
59
  const addNode = useGraphStore((state) => state.addNode);
60
  const [reactFlowInstance, setReactFlowInstance] =
61
  useState<ReactFlowInstance<any, any>>();
 
62
 
63
  const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {
64
  event.preventDefault();
@@ -93,6 +132,7 @@ export const useHandleDrop = () => {
93
  data: {
94
  label: `${type}`,
95
  name: humanId(),
 
96
  },
97
  sourcePosition: Position.Right,
98
  targetPosition: Position.Left,
@@ -100,7 +140,7 @@ export const useHandleDrop = () => {
100
 
101
  addNode(newNode);
102
  },
103
- [reactFlowInstance, addNode],
104
  );
105
 
106
  return { onDrop, onDragOver, setReactFlowInstance };
@@ -244,7 +284,10 @@ export const useSetLlmSetting = (form?: FormInstance) => {
244
  return pre;
245
  }, {});
246
  const otherValues = settledModelVariableMap[ModelVariableType.Precise];
247
- form?.setFieldsValue({ ...switchBoxValues, ...otherValues });
 
 
 
248
  }, [form, initialLlmSetting]);
249
  };
250
 
 
17
  ModelVariableType,
18
  settledModelVariableMap,
19
  } from '@/constants/knowledge';
20
+ import { useFetchModelId } from '@/hooks/logicHooks';
21
  import { Variable } from '@/interfaces/database/chat';
22
  import { useDebounceEffect } from 'ahooks';
23
  import { FormInstance, message } from 'antd';
24
  import { humanId } from 'human-id';
25
  import trim from 'lodash/trim';
26
  import { useParams } from 'umi';
27
+ import {
28
+ NodeMap,
29
+ Operator,
30
+ RestrictedUpstreamMap,
31
+ initialBeginValues,
32
+ initialCategorizeValues,
33
+ initialGenerateValues,
34
+ initialMessageValues,
35
+ initialRelevantValues,
36
+ initialRetrievalValues,
37
+ initialRewriteQuestionValues,
38
+ } from './constant';
39
  import useGraphStore, { RFState } from './store';
40
  import { buildDslComponentsByGraph } from './utils';
41
 
 
55
  return useGraphStore(selector);
56
  };
57
 
58
+ export const useInitializeOperatorParams = () => {
59
+ const llmId = useFetchModelId(true);
60
+
61
+ const initializeOperatorParams = useCallback(
62
+ (operatorName: Operator) => {
63
+ const initialFormValuesMap = {
64
+ [Operator.Begin]: initialBeginValues,
65
+ [Operator.Retrieval]: initialRetrievalValues,
66
+ [Operator.Generate]: { ...initialGenerateValues, llm_id: llmId },
67
+ [Operator.Answer]: {},
68
+ [Operator.Categorize]: { ...initialCategorizeValues, llm_id: llmId },
69
+ [Operator.Relevant]: { ...initialRelevantValues, llm_id: llmId },
70
+ [Operator.RewriteQuestion]: {
71
+ ...initialRewriteQuestionValues,
72
+ llm_id: llmId,
73
+ },
74
+ [Operator.Message]: initialMessageValues,
75
+ };
76
+ return initialFormValuesMap[operatorName];
77
+ },
78
+ [llmId],
79
+ );
80
+
81
+ return initializeOperatorParams;
82
+ };
83
+
84
  export const useHandleDrag = () => {
85
  const handleDragStart = useCallback(
86
  (operatorId: string) => (ev: React.DragEvent<HTMLDivElement>) => {
 
97
  const addNode = useGraphStore((state) => state.addNode);
98
  const [reactFlowInstance, setReactFlowInstance] =
99
  useState<ReactFlowInstance<any, any>>();
100
+ const initializeOperatorParams = useInitializeOperatorParams();
101
 
102
  const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {
103
  event.preventDefault();
 
132
  data: {
133
  label: `${type}`,
134
  name: humanId(),
135
+ form: initializeOperatorParams(type as Operator),
136
  },
137
  sourcePosition: Position.Right,
138
  targetPosition: Position.Left,
 
140
 
141
  addNode(newNode);
142
  },
143
+ [reactFlowInstance, addNode, initializeOperatorParams],
144
  );
145
 
146
  return { onDrop, onDragOver, setReactFlowInstance };
 
284
  return pre;
285
  }, {});
286
  const otherValues = settledModelVariableMap[ModelVariableType.Precise];
287
+ form?.setFieldsValue({
288
+ ...switchBoxValues,
289
+ ...otherValues,
290
+ });
291
  }, [form, initialLlmSetting]);
292
  };
293
 
web/src/pages/flow/list/index.less CHANGED
@@ -56,6 +56,6 @@
56
  }
57
 
58
  .templatesBox {
59
- max-height: 500px;
60
  overflow: auto;
61
  }
 
56
  }
57
 
58
  .templatesBox {
59
+ // max-height: 500px;
60
  overflow: auto;
61
  }
web/src/pages/flow/utils.ts CHANGED
@@ -2,11 +2,11 @@ import { DSLComponents } from '@/interfaces/database/flow';
2
  import { removeUselessFieldsFromValues } from '@/utils/form';
3
  import dagre from 'dagre';
4
  import { humanId } from 'human-id';
5
- import { curry, isEmpty } from 'lodash';
6
  import pipe from 'lodash/fp/pipe';
7
  import { Edge, Node, Position } from 'reactflow';
8
  import { v4 as uuidv4 } from 'uuid';
9
- import { NodeMap, Operator, initialFormValuesMap } from './constant';
10
  import { ICategorizeItemResult, NodeData } from './interface';
11
 
12
  const buildEdges = (
@@ -143,17 +143,17 @@ const removeUselessDataInTheOperator = curry(
143
  },
144
  );
145
  // initialize data for operators without parameters
146
- const initializeOperatorParams = curry((operatorName: string, values: any) => {
147
- if (isEmpty(values)) {
148
- return initialFormValuesMap[operatorName as Operator];
149
- }
150
- return values;
151
- });
152
 
153
  const buildOperatorParams = (operatorName: string) =>
154
  pipe(
155
  removeUselessDataInTheOperator(operatorName),
156
- initializeOperatorParams(operatorName), // Final processing, for guarantee
157
  );
158
 
159
  // construct a dsl based on the node information of the graph
 
2
  import { removeUselessFieldsFromValues } from '@/utils/form';
3
  import dagre from 'dagre';
4
  import { humanId } from 'human-id';
5
+ import { curry } from 'lodash';
6
  import pipe from 'lodash/fp/pipe';
7
  import { Edge, Node, Position } from 'reactflow';
8
  import { v4 as uuidv4 } from 'uuid';
9
+ import { NodeMap, Operator } from './constant';
10
  import { ICategorizeItemResult, NodeData } from './interface';
11
 
12
  const buildEdges = (
 
143
  },
144
  );
145
  // initialize data for operators without parameters
146
+ // const initializeOperatorParams = curry((operatorName: string, values: any) => {
147
+ // if (isEmpty(values)) {
148
+ // return initialFormValuesMap[operatorName as Operator];
149
+ // }
150
+ // return values;
151
+ // });
152
 
153
  const buildOperatorParams = (operatorName: string) =>
154
  pipe(
155
  removeUselessDataInTheOperator(operatorName),
156
+ // initializeOperatorParams(operatorName), // Final processing, for guarantee
157
  );
158
 
159
  // construct a dsl based on the node information of the graph