Skip to content

Commit 2728453

Browse files
authored
fix: The workflow includes a form collection node. After the normal Q&A on the demonstration page is completed, refreshing the page will display the output of the nodes before the form collection node (#3081)
1 parent ccf43bb commit 2728453

File tree

12 files changed

+34
-17
lines changed

12 files changed

+34
-17
lines changed

apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
4141
"""
4242

43+
4344
def _write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow, answer: str,
4445
reasoning_content: str):
4546
chat_model = node_variable.get('chat_model')
@@ -102,7 +103,6 @@ def write_context_stream(node_variable: Dict, workflow_variable: Dict, node: INo
102103
_write_context(node_variable, workflow_variable, node, workflow, answer, reasoning_content)
103104

104105

105-
106106
async def _yield_mcp_response(chat_model, message_list, mcp_servers):
107107
async with MultiServerMCPClient(json.loads(mcp_servers)) as client:
108108
agent = create_react_agent(chat_model, client.get_tools())
@@ -115,6 +115,7 @@ async def _yield_mcp_response(chat_model, message_list, mcp_servers):
115115
if isinstance(chunk[0], AIMessageChunk):
116116
yield chunk[0]
117117

118+
118119
def mcp_response_generator(chat_model, message_list, mcp_servers):
119120
loop = asyncio.new_event_loop()
120121
try:
@@ -130,6 +131,7 @@ def mcp_response_generator(chat_model, message_list, mcp_servers):
130131
finally:
131132
loop.close()
132133

134+
133135
async def anext_async(agen):
134136
return await agen.__anext__()
135137

@@ -186,7 +188,8 @@ def save_context(self, details, workflow_manage):
186188
self.context['answer'] = details.get('answer')
187189
self.context['question'] = details.get('question')
188190
self.context['reasoning_content'] = details.get('reasoning_content')
189-
self.answer_text = details.get('answer')
191+
if self.node_params.get('is_result', False):
192+
self.answer_text = details.get('answer')
190193

191194
def execute(self, model_id, system, prompt, dialogue_number, history_chat_record, stream, chat_id, chat_record_id,
192195
model_params_setting=None,

apps/application/flow/step_node/application_node/impl/base_application_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ def save_context(self, details, workflow_manage):
168168
self.context['question'] = details.get('question')
169169
self.context['type'] = details.get('type')
170170
self.context['reasoning_content'] = details.get('reasoning_content')
171-
self.answer_text = details.get('answer')
171+
if self.node_params.get('is_result', False):
172+
self.answer_text = details.get('answer')
172173

173174
def execute(self, application_id, message, chat_id, chat_record_id, stream, re_chat, client_id, client_type,
174175
app_document_list=None, app_image_list=None, app_audio_list=None, child_node=None, node_data=None,

apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
class BaseReplyNode(IReplyNode):
1616
def save_context(self, details, workflow_manage):
1717
self.context['answer'] = details.get('answer')
18-
self.answer_text = details.get('answer')
18+
if self.node_params.get('is_result', False):
19+
self.answer_text = details.get('answer')
20+
1921
def execute(self, reply_type, stream, fields=None, content=None, **kwargs) -> NodeResult:
2022
if reply_type == 'referencing':
2123
result = self.get_reference_content(fields)

apps/application/flow/step_node/form_node/impl/base_form_node.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ def save_context(self, details, workflow_manage):
3838
self.context['start_time'] = details.get('start_time')
3939
self.context['form_data'] = form_data
4040
self.context['is_submit'] = details.get('is_submit')
41-
self.answer_text = details.get('result')
41+
if self.node_params.get('is_result', False):
42+
self.answer_text = details.get('result')
4243
if form_data is not None:
4344
for key in form_data:
4445
self.context[key] = form_data[key]
@@ -70,7 +71,7 @@ def get_answer_list(self) -> List[Answer] | None:
7071
"chat_record_id": self.flow_params_serializer.data.get("chat_record_id"),
7172
'form_data': self.context.get('form_data', {}),
7273
"is_submit": self.context.get("is_submit", False)}
73-
form = f'<form_rander>{json.dumps(form_setting,ensure_ascii=False)}</form_rander>'
74+
form = f'<form_rander>{json.dumps(form_setting, ensure_ascii=False)}</form_rander>'
7475
context = self.workflow_manage.get_workflow_content()
7576
form_content_format = self.workflow_manage.reset_prompt(form_content_format)
7677
prompt_template = PromptTemplate.from_template(form_content_format, template_format='jinja2')
@@ -85,7 +86,7 @@ def get_details(self, index: int, **kwargs):
8586
"chat_record_id": self.flow_params_serializer.data.get("chat_record_id"),
8687
'form_data': self.context.get('form_data', {}),
8788
"is_submit": self.context.get("is_submit", False)}
88-
form = f'<form_rander>{json.dumps(form_setting,ensure_ascii=False)}</form_rander>'
89+
form = f'<form_rander>{json.dumps(form_setting, ensure_ascii=False)}</form_rander>'
8990
context = self.workflow_manage.get_workflow_content()
9091
form_content_format = self.workflow_manage.reset_prompt(form_content_format)
9192
prompt_template = PromptTemplate.from_template(form_content_format, template_format='jinja2')

apps/application/flow/step_node/function_lib_node/impl/base_function_lib_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ def valid_function(function_lib, user_id):
113113
class BaseFunctionLibNodeNode(IFunctionLibNode):
114114
def save_context(self, details, workflow_manage):
115115
self.context['result'] = details.get('result')
116-
self.answer_text = str(details.get('result'))
116+
if self.node_params.get('is_result'):
117+
self.answer_text = str(details.get('result'))
117118

118119
def execute(self, function_lib_id, input_field_list, **kwargs) -> NodeResult:
119120
function_lib = QuerySet(FunctionLib).filter(id=function_lib_id).first()

apps/application/flow/step_node/function_node/impl/base_function_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ def convert_value(name: str, value, _type, is_required, source, node):
8484
class BaseFunctionNodeNode(IFunctionNode):
8585
def save_context(self, details, workflow_manage):
8686
self.context['result'] = details.get('result')
87-
self.answer_text = str(details.get('result'))
87+
if self.node_params.get('is_result', False):
88+
self.answer_text = str(details.get('result'))
8889

8990
def execute(self, input_field_list, code, **kwargs) -> NodeResult:
9091
params = {field.get('name'): convert_value(field.get('name'), field.get('value'), field.get('type'),

apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,17 @@ class BaseImageGenerateNode(IImageGenerateNode):
1616
def save_context(self, details, workflow_manage):
1717
self.context['answer'] = details.get('answer')
1818
self.context['question'] = details.get('question')
19-
self.answer_text = details.get('answer')
19+
if self.node_params.get('is_result', False):
20+
self.answer_text = details.get('answer')
2021

2122
def execute(self, model_id, prompt, negative_prompt, dialogue_number, dialogue_type, history_chat_record, chat_id,
2223
model_params_setting,
2324
chat_record_id,
2425
**kwargs) -> NodeResult:
2526
print(model_params_setting)
2627
application = self.workflow_manage.work_flow_post_handler.chat_info.application
27-
tti_model = get_model_instance_by_model_user_id(model_id, self.flow_params_serializer.data.get('user_id'), **model_params_setting)
28+
tti_model = get_model_instance_by_model_user_id(model_id, self.flow_params_serializer.data.get('user_id'),
29+
**model_params_setting)
2830
history_message = self.get_history_message(history_chat_record, dialogue_number)
2931
self.context['history_message'] = history_message
3032
question = self.generate_prompt_question(prompt)

apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ class BaseImageUnderstandNode(IImageUnderstandNode):
6969
def save_context(self, details, workflow_manage):
7070
self.context['answer'] = details.get('answer')
7171
self.context['question'] = details.get('question')
72-
self.answer_text = details.get('answer')
72+
if self.node_params.get('is_result', False):
73+
self.answer_text = details.get('answer')
7374

7475
def execute(self, model_id, system, prompt, dialogue_number, dialogue_type, history_chat_record, stream, chat_id,
7576
model_params_setting,

apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ def save_context(self, details, workflow_manage):
1414
self.context['result'] = details.get('result')
1515
self.context['tool_params'] = details.get('tool_params')
1616
self.context['mcp_tool'] = details.get('mcp_tool')
17-
self.answer_text = details.get('result')
17+
if self.node_params.get('is_result', False):
18+
self.answer_text = details.get('result')
1819

1920
def execute(self, mcp_servers, mcp_server, mcp_tool, tool_params, **kwargs) -> NodeResult:
2021
servers = json.loads(mcp_servers)
@@ -27,7 +28,8 @@ async def call_tool(s, session, t, a):
2728
return s
2829

2930
res = asyncio.run(call_tool(servers, mcp_server, mcp_tool, params))
30-
return NodeResult({'result': [content.text for content in res.content], 'tool_params': params, 'mcp_tool': mcp_tool}, {})
31+
return NodeResult(
32+
{'result': [content.text for content in res.content], 'tool_params': params, 'mcp_tool': mcp_tool}, {})
3133

3234
def handle_variables(self, tool_params):
3335
# 处理参数中的变量

apps/application/flow/step_node/question_node/impl/base_question_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ def save_context(self, details, workflow_manage):
8080
self.context['answer'] = details.get('answer')
8181
self.context['message_tokens'] = details.get('message_tokens')
8282
self.context['answer_tokens'] = details.get('answer_tokens')
83-
self.answer_text = details.get('answer')
83+
if self.node_params.get('is_result', False):
84+
self.answer_text = details.get('answer')
8485

8586
def execute(self, model_id, system, prompt, dialogue_number, history_chat_record, stream, chat_id, chat_record_id,
8687
model_params_setting=None,

apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class BaseSpeechToTextNode(ISpeechToTextNode):
1818

1919
def save_context(self, details, workflow_manage):
2020
self.context['answer'] = details.get('answer')
21-
self.answer_text = details.get('answer')
21+
if self.node_params.get('is_result', False):
22+
self.answer_text = details.get('answer')
2223

2324
def execute(self, stt_model_id, chat_id, audio, **kwargs) -> NodeResult:
2425
stt_model = get_model_instance_by_model_user_id(stt_model_id, self.flow_params_serializer.data.get('user_id'))

apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ def bytes_to_uploaded_file(file_bytes, file_name="generated_audio.mp3"):
3737
class BaseTextToSpeechNode(ITextToSpeechNode):
3838
def save_context(self, details, workflow_manage):
3939
self.context['answer'] = details.get('answer')
40-
self.answer_text = details.get('answer')
40+
if self.node_params.get('is_result', False):
41+
self.answer_text = details.get('answer')
4142

4243
def execute(self, tts_model_id, chat_id,
4344
content, model_params_setting=None,

0 commit comments

Comments
 (0)