diff --git a/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py b/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py index d30c27e4883..f6aeaf5ebfd 100644 --- a/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py +++ b/apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py @@ -146,6 +146,7 @@ def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['question'] = details.get('question') self.context['reasoning_content'] = details.get('reasoning_content') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/application_node/impl/base_application_node.py b/apps/application/flow/step_node/application_node/impl/base_application_node.py index 00aee5ef77a..8a66e6503d5 100644 --- a/apps/application/flow/step_node/application_node/impl/base_application_node.py +++ b/apps/application/flow/step_node/application_node/impl/base_application_node.py @@ -168,6 +168,7 @@ def save_context(self, details, workflow_manage): self.context['question'] = details.get('question') self.context['type'] = details.get('type') self.context['reasoning_content'] = details.get('reasoning_content') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/condition_node/impl/base_condition_node.py b/apps/application/flow/step_node/condition_node/impl/base_condition_node.py index 722a8dcab93..b1be2fcd5ab 100644 --- a/apps/application/flow/step_node/condition_node/impl/base_condition_node.py +++ b/apps/application/flow/step_node/condition_node/impl/base_condition_node.py @@ -17,6 +17,7 @@ class BaseConditionNode(IConditionNode): def save_context(self, details, workflow_manage): self.context['branch_id'] = details.get('branch_id') self.context['branch_name'] = details.get('branch_name') + self.context['exception_message'] = details.get('err_message') def execute(self, **kwargs) -> NodeResult: branch_list = self.node_params_serializer.data['branch'] diff --git a/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py b/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py index b4326350108..e1607d9b81c 100644 --- a/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py +++ b/apps/application/flow/step_node/data_source_local_node/impl/base_data_source_local_node.py @@ -18,7 +18,7 @@ class BaseDataSourceLocalNodeForm(BaseForm): class BaseDataSourceLocalNode(IDataSourceLocalNode): def save_context(self, details, workflow_manage): - pass + self.context['exception_message'] = details.get('err_message') @staticmethod def get_form_list(node): diff --git a/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py b/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py index 8daeceecb02..cd355b48e3e 100644 --- a/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py +++ b/apps/application/flow/step_node/data_source_web_node/impl/base_data_source_web_node.py @@ -44,7 +44,7 @@ def handler(child_link: ChildLink, response: Fork.Response): }) except Exception as e: - maxkb_logger.error(f'{str(e)}:{traceback.format_exc()}') + maxkb_logger.error(f'{str(e)}:{traceback.format_exc()}') if workflow_manage.is_the_task_interrupted(): raise InterruptedTaskException('Task interrupted') @@ -53,7 +53,7 @@ def handler(child_link: ChildLink, response: Fork.Response): class BaseDataSourceWebNode(IDataSourceWebNode): def save_context(self, details, workflow_manage): - pass + self.context['exception_message'] = details.get('err_message') @staticmethod def get_form_list(node): @@ -77,7 +77,7 @@ def execute(self, **kwargs) -> NodeResult: self.workflow_manage.params.get('knowledge_base') or {}) except Exception as e: - if isinstance(e,InterruptedTaskException): + if isinstance(e, InterruptedTaskException): return NodeResult({'document_list': document_list, 'source_url': source_url, 'selector': selector}, self.workflow_manage.params.get('knowledge_base') or {}) maxkb_logger.error(_('data source web node:{node_id} error{error}{traceback}').format( diff --git a/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py b/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py index 1d3115e4c67..d49e574ba0d 100644 --- a/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py +++ b/apps/application/flow/step_node/direct_reply_node/impl/base_reply_node.py @@ -15,6 +15,7 @@ class BaseReplyNode(IReplyNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py index 7d196134bb5..5e85d0947b8 100644 --- a/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py +++ b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py @@ -16,6 +16,7 @@ class BaseDocumentExtractNode(IDocumentExtractNode): def save_context(self, details, workflow_manage): self.context['content'] = details.get('content') + self.context['exception_message'] = details.get('err_message') def execute(self, document, chat_id=None, **kwargs): get_buffer = FileBufferHandle().get_buffer diff --git a/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py b/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py index 9d32bb04506..819e10d3b97 100644 --- a/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py +++ b/apps/application/flow/step_node/document_split_node/impl/base_document_split_node.py @@ -39,6 +39,7 @@ def bytes_to_uploaded_file(file_bytes, file_name="file.txt"): class BaseDocumentSplitNode(IDocumentSplitNode): def save_context(self, details, workflow_manage): self.context['content'] = details.get('content') + self.context['exception_message'] = details.get('err_message') def get_reference_content(self, fields: List[str]): return self.workflow_manage.get_reference_field(fields[0], fields[1:]) diff --git a/apps/application/flow/step_node/form_node/impl/base_form_node.py b/apps/application/flow/step_node/form_node/impl/base_form_node.py index f89820074ff..86f299561d8 100644 --- a/apps/application/flow/step_node/form_node/impl/base_form_node.py +++ b/apps/application/flow/step_node/form_node/impl/base_form_node.py @@ -68,6 +68,7 @@ def save_context(self, details, workflow_manage): self.context['start_time'] = details.get('start_time') self.context['form_data'] = form_data self.context['is_submit'] = details.get('is_submit') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('result') if form_data is not None: diff --git a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py index 27419b056a2..aefa9ba0be2 100644 --- a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py +++ b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py @@ -18,6 +18,7 @@ class BaseImageGenerateNode(IImageGenerateNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['question'] = details.get('question') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py b/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py index 88eb406b4c4..5d1ec6f7b10 100644 --- a/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py +++ b/apps/application/flow/step_node/image_to_video_step_node/impl/base_image_to_video_node.py @@ -21,6 +21,7 @@ class BaseImageToVideoNode(IImageToVideoNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['question'] = details.get('question') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py index 2392acf64ea..885538d314e 100644 --- a/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py +++ b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py @@ -68,6 +68,7 @@ class BaseImageUnderstandNode(IImageUnderstandNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['question'] = details.get('question') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/intent_node/impl/base_intent_node.py b/apps/application/flow/step_node/intent_node/impl/base_intent_node.py index 061cf901490..e829b01f283 100644 --- a/apps/application/flow/step_node/intent_node/impl/base_intent_node.py +++ b/apps/application/flow/step_node/intent_node/impl/base_intent_node.py @@ -14,8 +14,8 @@ from models_provider.tools import get_model_instance_by_model_workspace_id, get_model_credential from .prompt_template import PROMPT_TEMPLATE -def get_default_model_params_setting(model_id): +def get_default_model_params_setting(model_id): model = QuerySet(Model).filter(id=model_id).first() credential = get_model_credential(model.provider, model.model_type, model.model_name) model_params_setting = credential.get_model_params_setting_form( @@ -24,7 +24,6 @@ def get_default_model_params_setting(model_id): def _write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow, answer: str): - chat_model = node_variable.get('chat_model') message_tokens = chat_model.get_num_tokens_from_messages(node_variable.get('message_list')) answer_tokens = chat_model.get_num_tokens(answer) @@ -41,7 +40,6 @@ def _write_context(node_variable: Dict, workflow_variable: Dict, node: INode, wo def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, workflow): - response = node_variable.get('result') answer = response.content _write_context(node_variable, workflow_variable, node, workflow, answer) @@ -49,13 +47,11 @@ def write_context(node_variable: Dict, workflow_variable: Dict, node: INode, wor class BaseIntentNode(IIntentNode): - def save_context(self, details, workflow_manage): - + self.context['exception_message'] = details.get('err_message') self.context['branch_id'] = details.get('branch_id') self.context['category'] = details.get('category') - def execute(self, model_id, dialogue_number, history_chat_record, user_input, branch, model_params_setting=None, **kwargs) -> NodeResult: @@ -79,7 +75,6 @@ def execute(self, model_id, dialogue_number, history_chat_record, user_input, br # 构建分类提示词 prompt = self.build_classification_prompt(user_input, branch) - # 生成消息列表 system = self.build_system_prompt() message_list = self.generate_message_list(system, prompt, history_message) @@ -130,7 +125,6 @@ def get_history_message(history_chat_record, dialogue_number): message.content = re.sub('[\d\D]*?<\/form_rander>', '', message.content) return history_message - def build_system_prompt(self) -> str: """构建系统提示词""" return "你是一个专业的意图识别助手,请根据用户输入和意图选项,准确识别用户的真实意图。" @@ -162,7 +156,6 @@ def build_classification_prompt(self, user_input: str, branch: List[Dict]) -> st user_input=user_input ) - def generate_message_list(self, system: str, prompt: str, history_message): """生成消息列表""" if system is None or len(system) == 0: @@ -237,7 +230,6 @@ def find_other_branch(self, branch: List[Dict]) -> Dict[str, Any] | None: return b return None - def get_details(self, index: int, **kwargs): """获取节点执行详情""" return { @@ -258,4 +250,4 @@ def get_details(self, index: int, **kwargs): 'answer_tokens': self.context.get('answer_tokens'), 'status': self.status, 'err_message': self.err_message - } \ No newline at end of file + } diff --git a/apps/application/flow/step_node/knowledge_write_node/impl/base_knowledge_write_node.py b/apps/application/flow/step_node/knowledge_write_node/impl/base_knowledge_write_node.py index 601f10ceb88..31124c8797d 100644 --- a/apps/application/flow/step_node/knowledge_write_node/impl/base_knowledge_write_node.py +++ b/apps/application/flow/step_node/knowledge_write_node/impl/base_knowledge_write_node.py @@ -211,7 +211,7 @@ def batch_add_document_tag(document_tag_map: Dict[str, List[str]]): class BaseKnowledgeWriteNode(IKnowledgeWriteNode): def save_context(self, details, workflow_manage): - pass + self.context['exception_message'] = details.get('err_message') def save(self, document_list): serializer = KnowledgeWriteParamSerializer(data=document_list, many=True) diff --git a/apps/application/flow/step_node/loop_break_node/impl/base_loop_break_node.py b/apps/application/flow/step_node/loop_break_node/impl/base_loop_break_node.py index 8c51009be34..103a95b2635 100644 --- a/apps/application/flow/step_node/loop_break_node/impl/base_loop_break_node.py +++ b/apps/application/flow/step_node/loop_break_node/impl/base_loop_break_node.py @@ -22,6 +22,9 @@ def _write_context(step_variable: Dict, global_variable: Dict, node, workflow): class BaseLoopBreakNode(ILoopBreakNode): + def save_context(self, details, workflow_manage): + self.context['exception_message'] = details.get('err_message') + def execute(self, condition, condition_list, **kwargs) -> NodeResult: r = [self.assertion(row.get('field'), row.get('compare'), row.get('value')) for row in condition_list] diff --git a/apps/application/flow/step_node/loop_continue_node/impl/base_loop_continue_node.py b/apps/application/flow/step_node/loop_continue_node/impl/base_loop_continue_node.py index b77d20692d2..2d6f88ae809 100644 --- a/apps/application/flow/step_node/loop_continue_node/impl/base_loop_continue_node.py +++ b/apps/application/flow/step_node/loop_continue_node/impl/base_loop_continue_node.py @@ -14,6 +14,9 @@ class BaseLoopContinueNode(ILoopContinueNode): + def save_context(self, details, workflow_manage): + self.context['exception_message'] = details.get('err_message') + def execute(self, condition, condition_list, **kwargs) -> NodeResult: condition_list = [self.assertion(row.get('field'), row.get('compare'), row.get('value')) for row in condition_list] diff --git a/apps/application/flow/step_node/loop_start_node/impl/base_start_node.py b/apps/application/flow/step_node/loop_start_node/impl/base_start_node.py index 0a56527e00f..e74800ddad9 100644 --- a/apps/application/flow/step_node/loop_start_node/impl/base_start_node.py +++ b/apps/application/flow/step_node/loop_start_node/impl/base_start_node.py @@ -19,6 +19,7 @@ class BaseLoopStartStepNode(ILoopStarNode): def save_context(self, details, workflow_manage): self.context['index'] = details.get('current_index') self.context['item'] = details.get('current_item') + self.context['exception_message'] = details.get('err_message') def get_node_params_serializer_class(self) -> Type[serializers.Serializer]: pass diff --git a/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py b/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py index 8fed9983e9e..0b6ffd84801 100644 --- a/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py +++ b/apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py @@ -16,8 +16,9 @@ def save_context(self, details, workflow_manage): self.context['result'] = details.get('result') self.context['tool_params'] = details.get('tool_params') self.context['mcp_tool'] = details.get('mcp_tool') + self.context['exception_message'] = details.get('err_message') - def execute(self, mcp_servers, mcp_server, mcp_tool, mcp_tool_id, mcp_source, tool_params,**kwargs) -> NodeResult: + def execute(self, mcp_servers, mcp_server, mcp_tool, mcp_tool_id, mcp_source, tool_params, **kwargs) -> NodeResult: if mcp_source == 'referencing': if not mcp_tool_id: raise ValueError("MCP tool ID is required when mcp_source is 'referencing'.") diff --git a/apps/application/flow/step_node/parameter_extraction_node/impl/base_parameter_extraction_node.py b/apps/application/flow/step_node/parameter_extraction_node/impl/base_parameter_extraction_node.py index 3c8480ab62a..e377e7092c8 100644 --- a/apps/application/flow/step_node/parameter_extraction_node/impl/base_parameter_extraction_node.py +++ b/apps/application/flow/step_node/parameter_extraction_node/impl/base_parameter_extraction_node.py @@ -89,6 +89,7 @@ def save_context(self, details, workflow_manage): self.context[key] = value self.context['result'] = details.get('result') self.context['request'] = details.get('request') + self.context['exception_message'] = details.get('err_message') def execute(self, input_variable, variable_list, model_params_setting, model_id, **kwargs) -> NodeResult: input_variable = str(input_variable) diff --git a/apps/application/flow/step_node/question_node/impl/base_question_node.py b/apps/application/flow/step_node/question_node/impl/base_question_node.py index 8c848e4acd0..bd40e31dae0 100644 --- a/apps/application/flow/step_node/question_node/impl/base_question_node.py +++ b/apps/application/flow/step_node/question_node/impl/base_question_node.py @@ -79,6 +79,7 @@ def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['message_tokens'] = details.get('message_tokens') self.context['answer_tokens'] = details.get('answer_tokens') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py index 58492d3055d..28ffda09b7e 100644 --- a/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py +++ b/apps/application/flow/step_node/reranker_node/impl/base_reranker_node.py @@ -82,6 +82,7 @@ def save_context(self, details, workflow_manage): self.context['run_time'] = details.get('run_time') self.context['result_list'] = details.get('result_list') self.context['result'] = details.get('result') + self.context['exception_message'] = details.get('err_message') def execute(self, question, reranker_setting, reranker_list, reranker_model_id, show_knowledge, **kwargs) -> NodeResult: diff --git a/apps/application/flow/step_node/search_document_node/impl/base_search_document_node.py b/apps/application/flow/step_node/search_document_node/impl/base_search_document_node.py index 7e0f8b78c93..ea2edeb6a9b 100644 --- a/apps/application/flow/step_node/search_document_node/impl/base_search_document_node.py +++ b/apps/application/flow/step_node/search_document_node/impl/base_search_document_node.py @@ -20,6 +20,7 @@ def save_context(self, details, workflow_manage): self.context['knowledge_items'] = details.get('knowledge_items') self.context['question'] = details.get('question') self.context['run_time'] = details.get('run_time') + self.context['exception_message'] = details.get('err_message') def get_reference_content(self, fields: List[str]): return self.workflow_manage.get_reference_field(fields[0], fields[1:]) @@ -120,7 +121,7 @@ def handle_custom_tags(self, document_id_list: List, search_condition_list: list field_value = self.workflow_manage.generate_prompt(condition['value']) compare_type = condition['compare'] - if not field_value or field_value == 'None' or len(field_value) == 0 : + if not field_value or field_value == 'None' or len(field_value) == 0: continue # 构建查询条件 @@ -159,7 +160,7 @@ def handle_custom_tags(self, document_id_list: List, search_condition_list: list field_value = self.workflow_manage.generate_prompt(condition['value']) compare_type = condition['compare'] - if not field_value or field_value == 'None' or len(field_value) == 0 : + if not field_value or field_value == 'None' or len(field_value) == 0: continue if compare_type == 'not_contain': diff --git a/apps/application/flow/step_node/search_knowledge_node/impl/base_search_knowledge_node.py b/apps/application/flow/step_node/search_knowledge_node/impl/base_search_knowledge_node.py index b9ae9261800..bcc190e6bc1 100644 --- a/apps/application/flow/step_node/search_knowledge_node/impl/base_search_knowledge_node.py +++ b/apps/application/flow/step_node/search_knowledge_node/impl/base_search_knowledge_node.py @@ -67,6 +67,7 @@ def save_context(self, details, workflow_manage): [f"{paragraph.get('title', '')}:{paragraph.get('content')}" for paragraph in result])[0:knowledge_setting.get('max_paragraph_char_number', 5000)] self.context['directly_return'] = directly_return + self.context['exception_message'] = details.get('err_message') def get_reference_content(self, fields: List[str]): return self.workflow_manage.get_reference_field(fields[0], fields[1:]) diff --git a/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py b/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py index 021f13170af..722d8ea9fb6 100644 --- a/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py +++ b/apps/application/flow/step_node/speech_to_text_step_node/impl/base_speech_to_text_node.py @@ -19,6 +19,7 @@ def save_context(self, details, workflow_manage): self.context['result'] = details.get('answer') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') + self.context['exception_message'] = details.get('err_message') def execute(self, stt_model_id, audio, model_params_setting=None, **kwargs) -> NodeResult: workspace_id = self.workflow_manage.get_body().get('workspace_id') diff --git a/apps/application/flow/step_node/start_node/impl/base_start_node.py b/apps/application/flow/step_node/start_node/impl/base_start_node.py index ab48eb07dd9..d56a5a0258d 100644 --- a/apps/application/flow/step_node/start_node/impl/base_start_node.py +++ b/apps/application/flow/step_node/start_node/impl/base_start_node.py @@ -52,6 +52,7 @@ def save_context(self, details, workflow_manage): self.context['audio'] = details.get('audio_list') self.context['video'] = details.get('video_list') self.context['other'] = details.get('other_list') + self.context['exception_message'] = details.get('err_message') self.status = details.get('status') self.err_message = details.get('err_message') for key, value in workflow_variable.items(): diff --git a/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py index 9adf8d6273f..12064b51fa6 100644 --- a/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py +++ b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py @@ -40,6 +40,7 @@ class BaseTextToSpeechNode(ITextToSpeechNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['result'] = details.get('result') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py b/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py index a225911a976..ccef0013451 100644 --- a/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py +++ b/apps/application/flow/step_node/text_to_video_step_node/impl/base_text_to_video_node.py @@ -14,9 +14,11 @@ from models_provider.tools import get_model_instance_by_model_workspace_id from django.utils.translation import gettext + class BaseTextToVideoNode(ITextToVideoNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') + self.context['exception_message'] = details.get('err_message') self.context['question'] = details.get('question') if self.node_params.get('is_result', False): self.answer_text = details.get('answer') diff --git a/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py b/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py index abbba7508e0..b0d1ba28fcf 100644 --- a/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py +++ b/apps/application/flow/step_node/tool_lib_node/impl/base_tool_lib_node.py @@ -174,6 +174,7 @@ def bytes_to_uploaded_file(file_bytes, file_name="unknown"): class BaseToolLibNodeNode(IToolLibNode): def save_context(self, details, workflow_manage): self.context['result'] = details.get('result') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result'): self.answer_text = str(details.get('result')) diff --git a/apps/application/flow/step_node/tool_node/impl/base_tool_node.py b/apps/application/flow/step_node/tool_node/impl/base_tool_node.py index f7220b2fcb3..3ee9e17d948 100644 --- a/apps/application/flow/step_node/tool_node/impl/base_tool_node.py +++ b/apps/application/flow/step_node/tool_node/impl/base_tool_node.py @@ -109,6 +109,7 @@ def convert_value(name: str, value, _type, is_required, source, node): class BaseToolNodeNode(IToolNode): def save_context(self, details, workflow_manage): self.context['result'] = details.get('result') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = str(details.get('result')) diff --git a/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py b/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py index 46b21153f73..69c04f0dbd6 100644 --- a/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py +++ b/apps/application/flow/step_node/variable_aggregation_node/impl/base_variable_aggregation_node.py @@ -9,6 +9,7 @@ from application.flow.i_step_node import NodeResult from application.flow.step_node.variable_aggregation_node.i_variable_aggregation_node import IVariableAggregation + def _filter_file_bytes(data): """递归过滤掉所有层级的 file_bytes""" if isinstance(data, dict): @@ -27,6 +28,7 @@ def save_context(self, details, workflow_manage): self.context['result'] = details.get('result') self.context['strategy'] = details.get('strategy') self.context['group_list'] = details.get('group_list') + self.context['exception_message'] = details.get('err_message') def get_first_non_null(self, variable_list): diff --git a/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py b/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py index a13dc048c5f..6f8138295f9 100644 --- a/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py +++ b/apps/application/flow/step_node/variable_assign_node/impl/base_variable_assign_node.py @@ -10,6 +10,7 @@ class BaseVariableAssignNode(IVariableAssignNode): def save_context(self, details, workflow_manage): self.context['variable_list'] = details.get('variable_list') self.context['result_list'] = details.get('result_list') + self.context['exception_message'] = details.get('err_message') def global_evaluation(self, variable, value): from application.flow.loop_workflow_manage import LoopWorkflowManage diff --git a/apps/application/flow/step_node/variable_splitting_node/impl/base_variable_splitting_node.py b/apps/application/flow/step_node/variable_splitting_node/impl/base_variable_splitting_node.py index 981e161ed71..44d3bf0df3e 100644 --- a/apps/application/flow/step_node/variable_splitting_node/impl/base_variable_splitting_node.py +++ b/apps/application/flow/step_node/variable_splitting_node/impl/base_variable_splitting_node.py @@ -37,6 +37,7 @@ def save_context(self, details, workflow_manage): self.context[key] = value self.context['result'] = details.get('result') self.context['request'] = details.get('request') + self.context['exception_message'] = details.get('err_message') def execute(self, input_variable, variable_list, **kwargs) -> NodeResult: self.context['request'] = input_variable diff --git a/apps/application/flow/step_node/video_understand_step_node/impl/base_video_understand_node.py b/apps/application/flow/step_node/video_understand_step_node/impl/base_video_understand_node.py index 31d16b9574c..90044a54980 100644 --- a/apps/application/flow/step_node/video_understand_step_node/impl/base_video_understand_node.py +++ b/apps/application/flow/step_node/video_understand_step_node/impl/base_video_understand_node.py @@ -67,6 +67,7 @@ class BaseVideoUnderstandNode(IVideoUnderstandNode): def save_context(self, details, workflow_manage): self.context['answer'] = details.get('answer') self.context['question'] = details.get('question') + self.context['exception_message'] = details.get('err_message') if self.node_params.get('is_result', False): self.answer_text = details.get('answer')