Skip to content

Commit 4e58d07

Browse files
authored
fix: Workflow execution details execution status determination (#4483)
1 parent 8456566 commit 4e58d07

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

apps/application/flow/i_step_node.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,36 @@ def __init__(self, chat_info, knowledge_action_id):
105105
self.knowledge_action_id = knowledge_action_id
106106

107107
def handler(self, workflow):
108-
err = [True for key, value in workflow.get_runtime_details().items() if value.get('status') == 500]
108+
state = get_workflow_state(workflow)
109109
QuerySet(KnowledgeAction).filter(id=self.knowledge_action_id).update(
110-
state=State.FAILURE if any(err) else State.SUCCESS,
110+
state=state,
111111
run_time=time.time() - workflow.context.get('start_time') if workflow.context.get(
112112
'start_time') is not None else 0)
113113

114114

115+
def get_loop_workflow_node(node_list):
116+
result = []
117+
for item in node_list:
118+
if item.get('type') == 'loop-node':
119+
for loop_item in item.get('loop_node_data') or []:
120+
for inner_item in loop_item.values():
121+
result.append(inner_item)
122+
return result
123+
124+
125+
def get_workflow_state(workflow):
126+
details = workflow.get_runtime_details()
127+
node_list = details.values()
128+
all_node = [*node_list, *get_loop_workflow_node(node_list)]
129+
err = any([True for value in all_node if value.get('status') == 500])
130+
if err:
131+
return State.FAILURE
132+
write_is_exist = any([True for value in all_node if value.get('type') == 'knowledge-write-node'])
133+
if not write_is_exist:
134+
return State.FAILURE
135+
return State.SUCCESS
136+
137+
115138
class NodeResult:
116139
def __init__(self, node_variable: Dict, workflow_variable: Dict,
117140
_write_context=write_context, _is_interrupt=is_interrupt):

0 commit comments

Comments
 (0)