fix workflow node iterator . (#21008)

Signed-off-by: zhanluxianshen <zhanluxianshen@163.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
湛露先生
2025-07-15 10:55:49 +08:00
committed by GitHub
parent 88537991d6
commit 9823edd3a2

View File

@@ -521,6 +521,31 @@ class IterationNode(BaseNode[IterationNodeData]):
) )
return return
elif self.node_data.error_handle_mode == ErrorHandleMode.TERMINATED: elif self.node_data.error_handle_mode == ErrorHandleMode.TERMINATED:
yield NodeInIterationFailedEvent(
**metadata_event.model_dump(),
)
outputs[current_index] = None
# clean nodes resources
for node_id in iteration_graph.node_ids:
variable_pool.remove([node_id])
# iteration run failed
if self.node_data.is_parallel:
yield IterationRunFailedEvent(
iteration_id=self.id,
iteration_node_id=self.node_id,
iteration_node_type=self.node_type,
iteration_node_data=self.node_data,
parallel_mode_run_id=parallel_mode_run_id,
start_at=start_at,
inputs=inputs,
outputs={"output": outputs},
steps=len(iterator_list_value),
metadata={"total_tokens": graph_engine.graph_runtime_state.total_tokens},
error=event.error,
)
else:
yield IterationRunFailedEvent( yield IterationRunFailedEvent(
iteration_id=self.id, iteration_id=self.id,
iteration_node_id=self.node_id, iteration_node_id=self.node_id,
@@ -528,11 +553,20 @@ class IterationNode(BaseNode[IterationNodeData]):
iteration_node_data=self.node_data, iteration_node_data=self.node_data,
start_at=start_at, start_at=start_at,
inputs=inputs, inputs=inputs,
outputs={"output": None}, outputs={"output": outputs},
steps=len(iterator_list_value), steps=len(iterator_list_value),
metadata={"total_tokens": graph_engine.graph_runtime_state.total_tokens}, metadata={"total_tokens": graph_engine.graph_runtime_state.total_tokens},
error=event.error, error=event.error,
) )
# stop the iterator
yield RunCompletedEvent(
run_result=NodeRunResult(
status=WorkflowNodeExecutionStatus.FAILED,
error=event.error,
)
)
return
yield metadata_event yield metadata_event
current_output_segment = variable_pool.get(self.node_data.output_selector) current_output_segment = variable_pool.get(self.node_data.output_selector)