Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
newfish-cmyk committed Jan 25, 2025
1 parent 16ed2ab commit 313df84
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 32 deletions.
24 changes: 16 additions & 8 deletions packages/global/core/workflow/runtime/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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';
};

Expand Down
25 changes: 1 addition & 24 deletions packages/service/core/workflow/dispatch/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -339,35 +339,12 @@ export async function dispatchWorkFlow(data: Props): Promise<DispatchFlowRespons
});
});

const entryNodeSet = new Set(entryNodeIds);
const canReachEntry = (
edge: RuntimeEdgeItemType,
visited: Set<string> = 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
};
Expand Down

0 comments on commit 313df84

Please sign in to comment.