From 9a5860874b8a46be402ee8532b32af4006ff4ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Wed, 15 Apr 2026 17:33:18 +0800 Subject: [PATCH] fix: Fix null pointer exception --- .../step_node/ai_chat_step_node/impl/base_chat_node.py | 4 ++-- .../step_node/tool_lib_node/impl/base_tool_lib_node.py | 3 +-- .../impl/base_variable_splitting_node.py | 2 +- apps/chat/serializers/chat.py | 8 ++++---- .../impl/ollama_model_provider/ollama_model_provider.py | 2 +- apps/trigger/handler/impl/trigger/event_trigger.py | 2 +- 6 files changed, 10 insertions(+), 11 deletions(-) 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 664b696ed63..d1d76b7d98e 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 @@ -362,9 +362,9 @@ def handle_variables(self, tool_params): for k, v in tool_params.items(): if type(v) == str: tool_params[k] = self.workflow_manage.generate_prompt(tool_params[k]) - if type(v) == dict: + elif type(v) == dict: self.handle_variables(v) - if (type(v) == list) and (type(v[0]) == str): + elif (type(v) == list) and len(v) > 0 and type(v[0]) == str: tool_params[k] = self.get_reference_content(v) return tool_params 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 f2434284d76..1553fad918e 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 @@ -251,6 +251,7 @@ def execute(self, tool_lib_id, input_field_list, **kwargs) -> NodeResult: def tool_exec_record(self, tool_lib, all_params): task_record_id = uuid.uuid7() start_time = time.time() + filtered_args = all_params try: # 过滤掉 tool_init_params 中的参数 tool_init_params = json.loads(rsa_long_decrypt(tool_lib.init_params)) if tool_lib.init_params else {} @@ -259,8 +260,6 @@ def tool_exec_record(self, tool_lib, all_params): k: v for k, v in all_params.items() if k not in tool_init_params } - else: - filtered_args = all_params if [WorkflowMode.KNOWLEDGE, WorkflowMode.KNOWLEDGE_LOOP].__contains__( self.workflow_manage.flow.workflow_mode): source_id = self.workflow_manage.params.get('knowledge_id') 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 90a47613a46..274604e2328 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 @@ -16,7 +16,7 @@ jsonpath_expr_cache = MemCache('parse_path', { 'TIMEOUT': 3600, # 缓存有效期为 1 小时 'OPTIONS': { - 'MAX_ENTRIES': 1000, # 最多缓存 500 个条目 + 'MAX_ENTRIES': 1000, # 最多缓存 1000 个条目 'CULL_FREQUENCY': 10, # 达到上限时,删除约 1/10 的缓存 }, }) diff --git a/apps/chat/serializers/chat.py b/apps/chat/serializers/chat.py index ddb08cbcc6f..4514dc457bc 100644 --- a/apps/chat/serializers/chat.py +++ b/apps/chat/serializers/chat.py @@ -382,10 +382,10 @@ def get_chat_record(chat_info, chat_record_id): str(chat_record.id) == str(chat_record_id)] if chat_record_list is not None and len(chat_record_list): return chat_record_list[-1] - chat_record = QuerySet(ChatRecord).filter(id=chat_record_id, chat_id=chat_info.chat_id).first() - if chat_record is None: - if not is_valid_uuid(chat_record_id): - raise ChatException(500, _("Conversation record does not exist")) + chat_record = QuerySet(ChatRecord).filter(id=chat_record_id, chat_id=chat_info.chat_id).first() + if chat_record is None: + if not is_valid_uuid(chat_record_id): + raise ChatException(500, _("Conversation record does not exist")) chat_record = QuerySet(ChatRecord).filter(id=chat_record_id).first() return chat_record diff --git a/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py b/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py index 2ad2107e1a2..5bb8a54049f 100644 --- a/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py +++ b/apps/models_provider/impl/ollama_model_provider/ollama_model_provider.py @@ -224,7 +224,7 @@ def convert_to_down_model_chunk(row_str: str, chunk_index: int): if row.get('status').__contains__("pulling"): progress = 0 status = DownModelChunkStatus.pulling - if 'total' in row and 'completed' in row: + if 'total' in row and 'completed' in row and row.get('total'): progress = (row.get('completed') / row.get('total') * 100) elif 'error' in row: status = DownModelChunkStatus.error diff --git a/apps/trigger/handler/impl/trigger/event_trigger.py b/apps/trigger/handler/impl/trigger/event_trigger.py index 6368cf58b13..cb3df4c26f4 100644 --- a/apps/trigger/handler/impl/trigger/event_trigger.py +++ b/apps/trigger/handler/impl/trigger/event_trigger.py @@ -119,7 +119,7 @@ def execute(trigger, request=None, **kwargs): trigger_setting = trigger.get('trigger_setting') if trigger_setting.get('token'): token = request.META.get('HTTP_AUTHORIZATION') - if trigger_setting.get('token') != token.replace('Bearer ', ''): + if not token or trigger_setting.get('token') != token.replace('Bearer ', ''): raise AppAuthenticationFailed(1002, _('Authentication information is incorrect')) is_active = trigger.get('is_active') if not is_active: