diff --git a/web/src/pages/agent/constant.tsx b/web/src/pages/agent/constant.tsx index 3ea744b5f..26b028825 100644 --- a/web/src/pages/agent/constant.tsx +++ b/web/src/pages/agent/constant.tsx @@ -646,7 +646,16 @@ export const initialEmailValues = { export const initialIterationValues = { items_ref: '', }; -export const initialIterationStartValues = {}; +export const initialIterationStartValues = { + outputs: { + item: { + type: 'unkown', + }, + index: { + type: 'integer', + }, + }, +}; export const initialCodeValues = { lang: 'python', diff --git a/web/src/pages/agent/form-sheet/use-form-config-map.tsx b/web/src/pages/agent/form-sheet/use-form-config-map.tsx index 68ecf7fe2..08e2a125a 100644 --- a/web/src/pages/agent/form-sheet/use-form-config-map.tsx +++ b/web/src/pages/agent/form-sheet/use-form-config-map.tsx @@ -1,6 +1,5 @@ import { LlmSettingSchema } from '@/components/llm-setting-items/next'; import { CodeTemplateStrMap, ProgrammingLanguage } from '@/constants/agent'; -import IterationStartForm from '@/pages/flow/form/iteration-start-from'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; import { Operator } from '../constant'; @@ -25,6 +24,7 @@ import GoogleForm from '../form/google-form'; import GoogleScholarForm from '../form/google-scholar-form'; import InvokeForm from '../form/invoke-form'; import IterationForm from '../form/iteration-form'; +import IterationStartForm from '../form/iteration-start-from'; import Jin10Form from '../form/jin10-form'; import KeywordExtractForm from '../form/keyword-extract-form'; import MessageForm from '../form/message-form'; diff --git a/web/src/pages/flow/form/iteration-start-from/index.tsx b/web/src/pages/agent/form/iteration-start-from/index.tsx similarity index 100% rename from web/src/pages/flow/form/iteration-start-from/index.tsx rename to web/src/pages/agent/form/iteration-start-from/index.tsx diff --git a/web/src/pages/agent/hooks/use-add-node.ts b/web/src/pages/agent/hooks/use-add-node.ts index ecf47a738..25f75b383 100644 --- a/web/src/pages/agent/hooks/use-add-node.ts +++ b/web/src/pages/agent/hooks/use-add-node.ts @@ -28,6 +28,7 @@ import { initialGoogleScholarValues, initialGoogleValues, initialInvokeValues, + initialIterationStartValues, initialIterationValues, initialJin10Values, initialKeywordExtractValues, @@ -99,7 +100,7 @@ export const useInitializeOperatorParams = () => { [Operator.Template]: initialTemplateValues, [Operator.Email]: initialEmailValues, [Operator.Iteration]: initialIterationValues, - [Operator.IterationStart]: initialIterationValues, + [Operator.IterationStart]: initialIterationStartValues, [Operator.Code]: initialCodeValues, [Operator.WaitingDialogue]: initialWaitingDialogueValues, [Operator.Agent]: { ...initialAgentValues, llm_id: llmId }, @@ -237,6 +238,34 @@ function isBottomSubAgent(type: string, position: Position) { ); } +function useResizeIterationNode() { + const { getNode, nodes, updateNode } = useGraphStore((state) => state); + + const resizeIterationNode = useCallback( + (type: string, position: Position, parentId?: string) => { + const parentNode = getNode(parentId); + if (parentNode && !isBottomSubAgent(type, position)) { + const MoveRightDistance = 310; + const childNodeList = nodes.filter((x) => x.parentId === parentId); + const maxX = Math.max(...childNodeList.map((x) => x.position.x)); + if (maxX + MoveRightDistance > parentNode.position.x) { + updateNode({ + ...parentNode, + width: (parentNode.width || 0) + MoveRightDistance, + position: { + x: parentNode.position.x + MoveRightDistance / 2, + y: parentNode.position.y, + }, + }); + } + } + }, + [getNode, nodes, updateNode], + ); + + return { resizeIterationNode }; +} + export function useAddNode(reactFlowInstance?: ReactFlowInstance) { const { edges, nodes, addEdge, addNode, getNode, updateNode } = useGraphStore( (state) => state, @@ -246,6 +275,7 @@ export function useAddNode(reactFlowInstance?: ReactFlowInstance) { const { calculateNewlyBackChildPosition } = useCalculateNewlyChildPosition(); const { addChildEdge } = useAddChildEdge(); const { addToolNode } = useAddToolNode(); + const { resizeIterationNode } = useResizeIterationNode(); // const [reactFlowInstance, setReactFlowInstance] = // useState>(); @@ -298,15 +328,7 @@ export function useAddNode(reactFlowInstance?: ReactFlowInstance) { newNode.extent = 'parent'; const parentNode = getNode(node.parentId); if (parentNode && !isBottomSubAgent(type, params.position)) { - const MoveRightDistance = 310; - updateNode({ - ...parentNode, - width: (parentNode.width || 0) + MoveRightDistance, - position: { - x: parentNode.position.x + MoveRightDistance / 2, - y: parentNode.position.y, - }, - }); + resizeIterationNode(type, params.position, node.parentId); } } @@ -321,7 +343,7 @@ export function useAddNode(reactFlowInstance?: ReactFlowInstance) { data: { label: Operator.IterationStart, name: Operator.IterationStart, - form: {}, + form: initialIterationStartValues, }, parentId: newNode.id, extent: 'parent', diff --git a/web/src/pages/agent/hooks/use-get-begin-query.tsx b/web/src/pages/agent/hooks/use-get-begin-query.tsx index 69ba6b8af..8ad416453 100644 --- a/web/src/pages/agent/hooks/use-get-begin-query.tsx +++ b/web/src/pages/agent/hooks/use-get-begin-query.tsx @@ -139,13 +139,14 @@ export function useBuildBeginVariableOptions() { return options; } -export const useBuildVariableOptions = (nodeId?: string) => { +export const useBuildVariableOptions = (nodeId?: string, parentId?: string) => { const nodeOutputOptions = useBuildNodeOutputOptions(nodeId); + const parentNodeOutputOptions = useBuildNodeOutputOptions(parentId); const beginOptions = useBuildBeginVariableOptions(); const options = useMemo(() => { - return [...beginOptions, ...nodeOutputOptions]; - }, [beginOptions, nodeOutputOptions]); + return [...beginOptions, ...nodeOutputOptions, ...parentNodeOutputOptions]; + }, [beginOptions, nodeOutputOptions, parentNodeOutputOptions]); return options; }; @@ -153,7 +154,7 @@ export const useBuildVariableOptions = (nodeId?: string) => { export function useBuildQueryVariableOptions() { const { data } = useFetchAgent(); const node = useContext(AgentFormContext); - const options = useBuildVariableOptions(node?.id); + const options = useBuildVariableOptions(node?.id, node?.parentId); const nextOptions = useMemo(() => { const globals = data?.dsl?.globals ?? {}; diff --git a/web/src/pages/flow/constant.tsx b/web/src/pages/flow/constant.tsx index 7e5a7604d..77ce94532 100644 --- a/web/src/pages/flow/constant.tsx +++ b/web/src/pages/flow/constant.tsx @@ -639,16 +639,7 @@ export const initialEmailValues = { export const initialIterationValues = { delimiter: ',', }; -export const initialIterationStartValues = { - outputs: { - item: { - type: 'unkown', - }, - index: { - type: 'integer', - }, - }, -}; +export const initialIterationStartValues = {}; export const initialCodeValues = { lang: 'python',