@@ -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+
115138class NodeResult :
116139 def __init__ (self , node_variable : Dict , workflow_variable : Dict ,
117140 _write_context = write_context , _is_interrupt = is_interrupt ):
0 commit comments