diff --git a/backend/apps/chat/task/llm.py b/backend/apps/chat/task/llm.py index 6671291f..f59d6ad9 100644 --- a/backend/apps/chat/task/llm.py +++ b/backend/apps/chat/task/llm.py @@ -38,7 +38,7 @@ from apps.system.crud.assistant import AssistantOutDs, AssistantOutDsFactory, ge from apps.system.schemas.system_schema import AssistantOutDsSchema from common.core.config import settings from common.core.deps import CurrentAssistant, CurrentUser -from common.utils.utils import SQLBotLogUtil, extract_nested_json +from common.utils.utils import SQLBotLogUtil, extract_nested_json, prepare_for_orjson warnings.filterwarnings("ignore") @@ -716,6 +716,10 @@ class LLMService: return save_error_message(session=self.session, record_id=self.record.id, message=message) def save_sql_data(self, data_obj: Dict[str, Any]): + data_result = data_obj.get('data') + if data_result: + data_result = prepare_for_orjson(data_result) + data_obj['data'] = data_result return save_sql_exec_data(session=self.session, record_id=self.record.id, data=orjson.dumps(data_obj).decode()) diff --git a/backend/common/utils/utils.py b/backend/common/utils/utils.py index 9d35dd4b..a0281df5 100644 --- a/backend/common/utils/utils.py +++ b/backend/common/utils/utils.py @@ -1,3 +1,4 @@ +import base64 import hashlib import inspect import logging @@ -215,6 +216,20 @@ class SQLBotLogUtil: logger = SQLBotLogUtil._get_logger() if logger.isEnabledFor(logging.CRITICAL): logger._log(logging.CRITICAL, msg, args, **kwargs) + +def prepare_for_orjson(data): + if not data: + return data + if isinstance(data, bytes): + return base64.b64encode(data).decode('utf-8') + elif isinstance(data, dict): + return {k: prepare_for_orjson(v) for k, v in data.items()} + elif isinstance(data, (list, tuple)): + return [prepare_for_orjson(item) for item in data] + else: + return data + +