Kaynağa Gözat

fix: correct output order in parallel mode for iteration nodes (#10323)

Novice 5 ay önce
ebeveyn
işleme
a7dbe58c85

+ 5 - 3
api/core/workflow/nodes/iteration/iteration_node.py

@@ -156,7 +156,7 @@ class IterationNode(BaseNode[IterationNodeData]):
             index=0,
             pre_iteration_output=None,
         )
-        outputs: list[Any] = []
+        outputs: list[Any] = [None] * len(iterator_list_value)
         try:
             if self.node_data.is_parallel:
                 futures: list[Future] = []
@@ -214,6 +214,8 @@ class IterationNode(BaseNode[IterationNodeData]):
                         graph_engine,
                         iteration_graph,
                     )
+            if self.node_data.error_handle_mode == ErrorHandleMode.REMOVE_ABNORMAL_OUTPUT:
+                outputs = [output for output in outputs if output is not None]
             yield IterationRunSucceededEvent(
                 iteration_id=self.id,
                 iteration_node_id=self.node_id,
@@ -425,7 +427,7 @@ class IterationNode(BaseNode[IterationNodeData]):
                             yield NodeInIterationFailedEvent(
                                 **metadata_event.model_dump(),
                             )
-                            outputs.insert(current_index, None)
+                            outputs[current_index] = None
                             variable_pool.add([self.node_id, "index"], next_index)
                             if next_index < len(iterator_list_value):
                                 variable_pool.add([self.node_id, "item"], iterator_list_value[next_index])
@@ -473,7 +475,7 @@ class IterationNode(BaseNode[IterationNodeData]):
                     yield metadata_event
 
             current_iteration_output = variable_pool.get(self.node_data.output_selector).value
-            outputs.insert(current_index, current_iteration_output)
+            outputs[current_index] = current_iteration_output
             # remove all nodes outputs from variable pool
             for node_id in iteration_graph.node_ids:
                 variable_pool.remove([node_id])

+ 2 - 2
web/i18n/en-US/workflow.ts

@@ -569,8 +569,8 @@ const translation = {
       errorResponseMethod: 'Error response method',
       ErrorMethod: {
         operationTerminated: 'terminated',
-        continueOnError: 'continue-on-error',
-        removeAbnormalOutput: 'remove-abnormal-output',
+        continueOnError: 'continue on error',
+        removeAbnormalOutput: 'remove abnormal output',
       },
       answerNodeWarningDesc: 'Parallel mode warning: Answer nodes, conversation variable assignments, and persistent read/write operations within iterations may cause exceptions.',
     },