From 313df84437ffc3ce737b660771436b50e2eede60 Mon Sep 17 00:00:00 2001 From: heheer <1239331448@qq.com> Date: Sat, 25 Jan 2025 14:09:49 +0800 Subject: [PATCH] fix --- .../global/core/workflow/runtime/utils.ts | 24 ++++++++++++------ .../service/core/workflow/dispatch/index.ts | 25 +------------------ 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/packages/global/core/workflow/runtime/utils.ts b/packages/global/core/workflow/runtime/utils.ts index 3bba74f7c68b..71cdaf448dff 100644 --- a/packages/global/core/workflow/runtime/utils.ts +++ b/packages/global/core/workflow/runtime/utils.ts @@ -207,6 +207,22 @@ export const checkNodeRunStatus = ({ currentNode: node }); + // check active(其中一组边,至少有一个 active,且没有 waiting 即可运行) + if ( + commonEdges.length > 0 && + commonEdges.some((item) => item.status === 'active') && + commonEdges.every((item) => item.status !== 'waiting') + ) { + return 'run'; + } + if ( + recursiveEdges.length > 0 && + recursiveEdges.some((item) => item.status === 'active') && + recursiveEdges.every((item) => item.status !== 'waiting') + ) { + return 'run'; + } + // check skip(其中一组边,全是 skiped 则跳过运行) if (commonEdges.length > 0 && commonEdges.every((item) => item.status === 'skipped')) { return 'skip'; @@ -215,14 +231,6 @@ export const checkNodeRunStatus = ({ return 'skip'; } - // check active(其中一组边,全不是 waiting 即可运行) - if (commonEdges.length > 0 && commonEdges.every((item) => item.status !== 'waiting')) { - return 'run'; - } - if (recursiveEdges.length > 0 && recursiveEdges.every((item) => item.status !== 'waiting')) { - return 'run'; - } - return 'wait'; }; diff --git a/packages/service/core/workflow/dispatch/index.ts b/packages/service/core/workflow/dispatch/index.ts index 56eb9d942a48..d13ef910aeb5 100644 --- a/packages/service/core/workflow/dispatch/index.ts +++ b/packages/service/core/workflow/dispatch/index.ts @@ -339,35 +339,12 @@ export async function dispatchWorkFlow(data: Props): Promise = new Set() - ): boolean => { - const target = edge.target; - if (entryNodeSet.has(target)) return true; - - if (visited.has(target)) return false; - - visited.add(target); - const canReach = runtimeEdges - .filter((e) => e.source === target) - .some((nextEdge) => canReachEntry(nextEdge, new Set(visited))); - - visited.delete(target); - return canReach; - }; - const interactiveResult: WorkflowInteractiveResponseType = { ...interactiveResponse, entryNodeIds, memoryEdges: runtimeEdges.map((edge) => ({ ...edge, - status: entryNodeSet.has(edge.target) - ? 'active' - : canReachEntry(edge) - ? edge.status - : 'waiting' // 未执行过的边,重置状态为waiting + status: entryNodeIds.includes(edge.target) ? 'active' : edge.status })), nodeOutputs };