diff --git a/apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py b/apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py index 01e3dbd97bb..52c0a81fc2b 100644 --- a/apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py +++ b/apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py @@ -185,8 +185,7 @@ def execute(self, message_list: List[BaseMessage], mcp_output_enable=True, **kwargs): chat_model = get_model_instance_by_model_workspace_id(model_id, workspace_id, - **( - model_params_setting or {})) if model_id is not None else None + **(model_params_setting or {})) if model_id is not None else None if stream: return self.execute_stream(message_list, chat_id, problem_text, post_response_handler, chat_model, paragraph_list, diff --git a/apps/application/flow/compare/not_contain_compare.py b/apps/application/flow/compare/not_contain_compare.py index f9fb1d0eac0..2279be33c8d 100644 --- a/apps/application/flow/compare/not_contain_compare.py +++ b/apps/application/flow/compare/not_contain_compare.py @@ -20,7 +20,7 @@ def support(self, node_id, fields: List[str], source_value, compare, target_valu def compare(self, source_value, compare, target_value): if isinstance(source_value, str): return str(target_value) not in source_value - elif isinstance(self, list): + elif isinstance(source_value, list): return not any([str(item) == str(target_value) for item in source_value]) else: return str(target_value) not in str(source_value) 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 7d033e08884..0b9f72915f3 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 @@ -141,7 +141,7 @@ def reset_application_node_dict(application_node_dict, runtime_node_id, node_dat '${value}', content) application_node['content'] = res.replace('${value}', value) except Exception as e: - pass + maxkb_logger.warning(f'reset_application_node_dict error: {e}', exc_info=True) class BaseApplicationNode(IApplicationNode): 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 86fb00734bd..bbb2be7f418 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 @@ -110,7 +110,8 @@ def convert_value(name: str, value, _type, is_required, source, node): if _type == 'int': return int(value) if _type == 'boolean': - value = 0 if ['0', '[]'].__contains__(value) else value + if isinstance(value, str) and value.lower() in ('false', '0', '[]', ''): + return False return bool(value) if _type == 'float': return float(value) 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 d832fbb1180..16d13fa94ec 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 @@ -85,7 +85,8 @@ def convert_value(name: str, value, _type, is_required, source, node): if _type == 'int': return int(value) if _type == 'boolean': - value = 0 if ['0', '[]'].__contains__(value) else value + if isinstance(value, str) and value.lower() in ('false', '0', '[]', ''): + return False return bool(value) if _type == 'float': return float(value) diff --git a/apps/common/handle/impl/text/pdf_split_handle.py b/apps/common/handle/impl/text/pdf_split_handle.py index f3172e29884..0ffafff61c0 100644 --- a/apps/common/handle/impl/text/pdf_split_handle.py +++ b/apps/common/handle/impl/text/pdf_split_handle.py @@ -49,8 +49,9 @@ def handle(self, file, pattern_list: List, with_filter: bool, limit: int, get_bu # 获取临时文件的路径 temp_file_path = temp_file.name - pdf_document = fitz.open(temp_file_path) + pdf_document = None try: + pdf_document = fitz.open(temp_file_path) if type(limit) is str: limit = int(limit) if type(with_filter) is str: @@ -79,7 +80,8 @@ def handle(self, file, pattern_list: List, with_filter: bool, limit: int, get_bu 'content': [] } finally: - pdf_document.close() + if pdf_document is not None: + pdf_document.close() # 处理完后可以删除临时文件 os.remove(temp_file_path) @@ -331,9 +333,15 @@ def get_content(self, file, save_image): # 获取临时文件的路径 temp_file_path = temp_file.name - pdf_document = fitz.open(temp_file_path) + pdf_document = None try: + pdf_document = fitz.open(temp_file_path) return self.handle_pdf_content(file, pdf_document) except BaseException as e: traceback.print_exception(e) return f'{e}' + finally: + if pdf_document is not None: + pdf_document.close() + # 处理完后可以删除临时文件 + os.remove(temp_file_path) diff --git a/apps/common/utils/tool_code.py b/apps/common/utils/tool_code.py index 6b16e8ed1af..1f44a9741be 100644 --- a/apps/common/utils/tool_code.py +++ b/apps/common/utils/tool_code.py @@ -73,7 +73,7 @@ def init_sandbox_dir(): local_ip = socket.gethostbyname(hostname) banned_hosts = f"{banned_hosts},{local_ip}" banned_hosts = ",".join(s.strip() for s in banned_hosts.split(",") if s.strip() and s.strip().lower() != hostname.lower()) - with open(sandbox_conf_file_path, "w") as f: + with open(sandbox_conf_file_path, "w", encoding='utf-8') as f: f.write(f"SANDBOX_PYTHON_BANNED_HOSTS={banned_hosts}\n") f.write(f"SANDBOX_PYTHON_ALLOW_DL_PATHS={','.join(sorted(set(filter(None, sys.path + _sandbox_python_sys_path + allow_dl_paths.split(',')))))}\n") f.write(f"SANDBOX_PYTHON_ALLOW_DL_OPEN={allow_dl_open}\n") diff --git a/apps/knowledge/views/paragraph.py b/apps/knowledge/views/paragraph.py index ed574639419..ada0883e300 100644 --- a/apps/knowledge/views/paragraph.py +++ b/apps/knowledge/views/paragraph.py @@ -64,7 +64,6 @@ def get(self, request: Request, workspace_id: str, knowledge_id: str, document_i @log( menu='Paragraph', operate='Create Paragraph', get_operation_object=lambda r, keywords: get_knowledge_document_operation_object( - get_knowledge_operation_object(keywords.get('knowledge_id')), get_knowledge_operation_object(keywords.get('knowledge_id')), get_document_operation_object(keywords.get('document_id')) ), diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py index cf3f24da4a3..a807022dfdf 100644 --- a/apps/tools/serializers/tool.py +++ b/apps/tools/serializers/tool.py @@ -536,7 +536,8 @@ def convert_value(name: str, value: str, _type: str, is_required: bool): if _type == 'int': return int(value) if _type == 'boolean': - value = 0 if ['0', '[]'].__contains__(value) else value + if isinstance(value, str) and value.lower() in ('false', '0', '[]', ''): + return False return bool(value) if _type == 'float': return float(value) diff --git a/apps/trigger/handler/impl/task/application_task.py b/apps/trigger/handler/impl/task/application_task.py index 29ec3d478a7..1b6b200f592 100644 --- a/apps/trigger/handler/impl/task/application_task.py +++ b/apps/trigger/handler/impl/task/application_task.py @@ -51,6 +51,8 @@ def valid_value_type(value, _type): return isinstance(value, int) if _type == 'boolean': return isinstance(value, bool) + if _type == 'any': + return True return isinstance(value, str) diff --git a/apps/trigger/handler/impl/task/tool_task/base_tool_task.py b/apps/trigger/handler/impl/task/tool_task/base_tool_task.py index 564da67baad..09e320560c0 100644 --- a/apps/trigger/handler/impl/task/tool_task/base_tool_task.py +++ b/apps/trigger/handler/impl/task/tool_task/base_tool_task.py @@ -50,7 +50,8 @@ def _convert_value(_type, value): if _type == 'int': return int(value) if _type == 'boolean': - value = 0 if ['0', '[]'].__contains__(value) else value + if isinstance(value, str) and value.lower() in ('false', '0', '[]', ''): + return False return bool(value) if _type == 'float': return float(value) diff --git a/apps/trigger/handler/impl/task/tool_task/workflow_tool_task.py b/apps/trigger/handler/impl/task/tool_task/workflow_tool_task.py index d4de2bbc76b..c0ca5cf86aa 100644 --- a/apps/trigger/handler/impl/task/tool_task/workflow_tool_task.py +++ b/apps/trigger/handler/impl/task/tool_task/workflow_tool_task.py @@ -52,7 +52,8 @@ def _convert_value(_type, value): if _type == 'int': return int(value) if _type == 'boolean': - value = 0 if ['0', '[]'].__contains__(value) else value + if isinstance(value, str) and value.lower() in ('false', '0', '[]', ''): + return False return bool(value) if _type == 'float': return float(value) diff --git a/apps/trigger/handler/impl/trigger/scheduled_trigger.py b/apps/trigger/handler/impl/trigger/scheduled_trigger.py index 5b852381f3c..e4c6d685d73 100644 --- a/apps/trigger/handler/impl/trigger/scheduled_trigger.py +++ b/apps/trigger/handler/impl/trigger/scheduled_trigger.py @@ -243,11 +243,11 @@ def execute(trigger, **kwargs): if source_type == "APPLICATION": from trigger.handler.impl.task.application_task import ApplicationTask - ApplicationTask.execute(trigger_task, **kwargs) + ApplicationTask().execute(trigger_task, **kwargs) elif source_type == "TOOL": from trigger.handler.impl.task.tool_task import ToolTask - ToolTask.execute(trigger_task, **kwargs) + ToolTask().execute(trigger_task, **kwargs) else: maxkb_logger.warning(f"unsupported source_type={source_type}, task_id={trigger_task['id']}") diff --git a/apps/trigger/handler/simple_tools.py b/apps/trigger/handler/simple_tools.py index dd3ff5748c8..b8886fc0b33 100644 --- a/apps/trigger/handler/simple_tools.py +++ b/apps/trigger/handler/simple_tools.py @@ -53,5 +53,6 @@ def undeploy(trigger, **kwargs): @return: """ for simple_trigger_handler in simple_trigger_handlers: - return simple_trigger_handler.undeploy(trigger, **kwargs) + if simple_trigger_handler.support(trigger, **kwargs): + return simple_trigger_handler.undeploy(trigger, **kwargs) raise Exception("不支持的触发器类型") diff --git a/ui/src/workflow/common/NodeSearch.vue b/ui/src/workflow/common/NodeSearch.vue index 5e912873935..3bd48749a14 100644 --- a/ui/src/workflow/common/NodeSearch.vue +++ b/ui/src/workflow/common/NodeSearch.vue @@ -217,7 +217,6 @@ const handleSearch = (kw: string) => { } } const reSearch = () => { - console.log('ss') handleSearch(searchText.value) } // 生命周期