diff --git a/api/core/workflow/graph_engine/graph_engine.py b/api/core/workflow/graph_engine/graph_engine.py index 498d15c916..d0f3041d5d 100644 --- a/api/core/workflow/graph_engine/graph_engine.py +++ b/api/core/workflow/graph_engine/graph_engine.py @@ -738,8 +738,10 @@ class GraphEngine: ) should_continue_retry = False elif run_result.status == WorkflowNodeExecutionStatus.SUCCEEDED: - if node_instance.should_continue_on_error and self.graph.edge_mapping.get( - node_instance.node_id + if ( + node_instance.should_continue_on_error + and self.graph.edge_mapping.get(node_instance.node_id) + and node_instance.node_data.error_strategy is ErrorStrategy.FAIL_BRANCH ): run_result.edge_source_handle = FailBranchSourceHandle.SUCCESS if run_result.metadata and run_result.metadata.get(NodeRunMetadataKey.TOTAL_TOKENS): diff --git a/api/core/workflow/nodes/answer/answer_stream_processor.py b/api/core/workflow/nodes/answer/answer_stream_processor.py index 4617d478d3..d8ad1dbd49 100644 --- a/api/core/workflow/nodes/answer/answer_stream_processor.py +++ b/api/core/workflow/nodes/answer/answer_stream_processor.py @@ -82,7 +82,7 @@ class AnswerStreamProcessor(StreamProcessor): :param event: node run succeeded event :return: """ - for answer_node_id, position in self.route_position.items(): + for answer_node_id in self.route_position: # all depends on answer node id not in rest node ids if event.route_node_state.node_id != answer_node_id and ( answer_node_id not in self.rest_node_ids @@ -155,11 +155,13 @@ class AnswerStreamProcessor(StreamProcessor): for answer_node_id, route_position in self.route_position.items(): if answer_node_id not in self.rest_node_ids: continue - + # exclude current node id + answer_dependencies = self.generate_routes.answer_dependencies + if event.node_id in answer_dependencies[answer_node_id]: + answer_dependencies[answer_node_id].remove(event.node_id) + answer_dependencies_ids = answer_dependencies.get(answer_node_id, []) # all depends on answer node id not in rest node ids - if all( - dep_id not in self.rest_node_ids for dep_id in self.generate_routes.answer_dependencies[answer_node_id] - ): + if all(dep_id not in self.rest_node_ids for dep_id in answer_dependencies_ids): if route_position >= len(self.generate_routes.answer_generate_route[answer_node_id]): continue