1111
1212from django .utils .translation import gettext as _
1313
14- from application .flow .common import Answer
14+ from application .flow .common import Answer , WorkflowMode
1515from application .flow .i_step_node import NodeResult , WorkFlowPostHandler , INode
1616from application .flow .step_node .loop_node .i_loop_node import ILoopNode
1717from application .flow .tools import Reasoning
@@ -197,6 +197,7 @@ def loop(workflow_manage_new_instance, node: INode, generate_loop):
197197 insert_or_replace (loop_node_data , index , instance .get_runtime_details ())
198198 insert_or_replace (loop_answer_data , index ,
199199 get_answer_list (instance , child_node_node_dict , node .runtime_node_id ))
200+ instance ._cleanup ()
200201 if break_outer :
201202 break
202203 node .context ['is_interrupt_exec' ] = is_interrupt_exec
@@ -206,7 +207,7 @@ def loop(workflow_manage_new_instance, node: INode, generate_loop):
206207 node .context ["item" ] = current_index
207208
208209
209- def get_write_context (loop_type , array , number , loop_body , stream ):
210+ def get_write_context (loop_type , array , number , loop_body ):
210211 def inner_write_context (node_variable : Dict , workflow_variable : Dict , node : INode , workflow ):
211212 if loop_type == 'ARRAY' :
212213 return loop (node_variable ['workflow_manage_new_instance' ], node , generate_loop_array (array ))
@@ -248,27 +249,31 @@ def get_answer_list(self) -> List[Answer] | None:
248249 def get_loop_context (self ):
249250 return self .context
250251
251- def execute (self , loop_type , array , number , loop_body , stream , ** kwargs ) -> NodeResult :
252+ def execute (self , loop_type , array , number , loop_body , ** kwargs ) -> NodeResult :
252253 from application .flow .loop_workflow_manage import LoopWorkflowManage , Workflow
254+ from application .flow .knowledge_loop_workflow_manage import KnowledgeLoopWorkflowManage
253255 def workflow_manage_new_instance (loop_data , global_data , start_node_id = None ,
254256 start_node_data = None , chat_record = None , child_node = None ):
255- workflow_manage = LoopWorkflowManage (Workflow .new_instance (loop_body ), self .workflow_manage .params ,
256- LoopWorkFlowPostHandler (
257- self .workflow_manage .work_flow_post_handler .chat_info ),
258- self .workflow_manage ,
259- loop_data ,
260- self .get_loop_context ,
261- base_to_response = LoopToResponse (),
262- start_node_id = start_node_id ,
263- start_node_data = start_node_data ,
264- chat_record = chat_record ,
265- child_node = child_node
266- )
257+ workflow_mode = WorkflowMode .KNOWLEDGE_LOOP if WorkflowMode .KNOWLEDGE == self .workflow_manage .flow .workflow_mode else WorkflowMode .APPLICATION_LOOP
258+ c = KnowledgeLoopWorkflowManage if workflow_mode == WorkflowMode .KNOWLEDGE_LOOP else LoopWorkflowManage
259+ workflow_manage = c (Workflow .new_instance (loop_body , workflow_mode ),
260+ self .workflow_manage .params ,
261+ LoopWorkFlowPostHandler (
262+ self .workflow_manage .work_flow_post_handler .chat_info ),
263+ self .workflow_manage ,
264+ loop_data ,
265+ self .get_loop_context ,
266+ base_to_response = LoopToResponse (),
267+ start_node_id = start_node_id ,
268+ start_node_data = start_node_data ,
269+ chat_record = chat_record ,
270+ child_node = child_node
271+ )
267272
268273 return workflow_manage
269274
270275 return NodeResult ({'workflow_manage_new_instance' : workflow_manage_new_instance }, {},
271- _write_context = get_write_context (loop_type , array , number , loop_body , stream ),
276+ _write_context = get_write_context (loop_type , array , number , loop_body ),
272277 _is_interrupt = _is_interrupt_exec )
273278
274279 def get_loop_context_data (self ):
0 commit comments