Skip to content

Commit 722d885

Browse files
committed
feat: loopNode
1 parent bfb03a6 commit 722d885

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

apps/application/flow/step_node/loop_node/i_loop_node.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ def get_node_params_serializer_class(self) -> Type[serializers.Serializer]:
4646
return ILoopNodeSerializer
4747

4848
def _run(self):
49-
return self.execute(**self.node_params_serializer.data, **self.flow_params_serializer.data)
49+
array = self.node_params_serializer.data.get('array')
50+
if self.node_params_serializer.data.get('loop_type') == 'ARRAY':
51+
array = self.workflow_manage.get_reference_field(
52+
array[0],
53+
array[1:])
54+
return self.execute(**{**self.node_params_serializer.data, "array": array}, **self.flow_params_serializer.data)
5055

5156
def execute(self, loop_type, array, number, loop_body, stream, **kwargs) -> NodeResult:
5257
pass

apps/application/flow/step_node/loop_node/impl/base_loop_node.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, wor
7171
_write_context(node_variable, workflow_variable, node, workflow, content, reasoning_content)
7272

7373

74-
def loop_number(number: int, loop_body, workflow_manage_new_instance, workflow):
74+
def loop_number(number: int, workflow_manage_new_instance, node: INode):
7575
loop_global_data = {}
7676
for index in range(number):
7777
"""
@@ -91,31 +91,29 @@ def loop_number(number: int, loop_body, workflow_manage_new_instance, workflow):
9191
loop_global_data = instance.context
9292

9393

94-
def loop_array(array, loop_body, workflow_manage_new_instance, workflow):
94+
def loop_array(array, workflow_manage_new_instance, node: INode):
9595
loop_global_data = {}
96+
loop_execute_details = []
9697
for item, index in zip(array, range(len(array))):
9798
"""
9899
指定次数循环
99100
@return:
100101
"""
101102
instance = workflow_manage_new_instance({'index': index, 'item': item}, loop_global_data)
102103
response = instance.stream()
103-
answer = ''
104-
reasoning_content = ''
105104
for chunk in response:
106-
content_chunk = chunk.get('content', '')
107-
reasoning_content_chunk = chunk.get('reasoning_content', '')
108-
reasoning_content += reasoning_content_chunk
109-
answer += content_chunk
110105
yield chunk
111106
loop_global_data = instance.context
107+
runtime_details = instance.get_runtime_details()
108+
loop_execute_details.append(runtime_details)
109+
node.context['loop_execute_details'] = loop_execute_details
112110

113111

114112
def get_write_context(loop_type, array, number, loop_body, stream):
115113
def inner_write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow):
116114
if loop_type == 'ARRAY':
117-
return loop_array(array, loop_body, node_variable['workflow_manage_new_instance'], workflow)
118-
return loop_number(number, loop_body, node_variable['workflow_manage_new_instance'], workflow)
115+
return loop_array(array, node_variable['workflow_manage_new_instance'], node)
116+
return loop_number(number, node_variable['workflow_manage_new_instance'], node)
119117

120118
return inner_write_context
121119

@@ -138,8 +136,7 @@ def execute(self, loop_type, array, number, loop_body, stream, **kwargs) -> Node
138136
def workflow_manage_new_instance(start_data, global_data):
139137
workflow_manage = WorkflowManage(Flow.new_instance(loop_body), self.workflow_manage.params,
140138
LoopWorkFlowPostHandler(
141-
self.workflow_manage.work_flow_post_handler.chat_info
142-
,
139+
self.workflow_manage.work_flow_post_handler.chat_info,
143140
self.workflow_manage.work_flow_post_handler.client_id,
144141
self.workflow_manage.work_flow_post_handler.client_type)
145142
, base_to_response=LoopToResponse(),

0 commit comments

Comments
 (0)