refactor(replyer): 迁移 reply_messageDatabaseMessages 数据模型

将 `default_generator` 中使用的 `reply_message` 参数及其相关逻辑从旧的 SQLAlchemy `Messages` 模型迁移到新的 Pydantic `DatabaseMessages` 数据模型。

此更改统一了内部数据处理模型,提高了类型安全性和代码清晰度。同时,更新了所有对 `reply_message` 属性的访问方式,以适应新的嵌套数据结构(例如 `chat_info.platform` 和 `user_info.user_id`)。
This commit is contained in:
minecraft1024a
2025-10-12 14:10:27 +08:00
committed by Windpicker-owo
parent f90fab8790
commit e8bd190a0e

View File

@@ -26,7 +26,7 @@ from src.chat.utils.memory_mappings import get_memory_type_chinese_label
from src.chat.utils.prompt import Prompt, PromptParameters, global_prompt_manager from src.chat.utils.prompt import Prompt, PromptParameters, global_prompt_manager
from src.chat.utils.timer_calculator import Timer from src.chat.utils.timer_calculator import Timer
from src.chat.utils.utils import get_chat_type_and_target_info from src.chat.utils.utils import get_chat_type_and_target_info
from src.common.database.sqlalchemy_models import Messages from src.common.data_models.database_data_model import DatabaseMessages
from src.common.logger import get_logger from src.common.logger import get_logger
from src.config.config import global_config, model_config from src.config.config import global_config, model_config
from src.individuality.individuality import get_individuality from src.individuality.individuality import get_individuality
@@ -265,7 +265,7 @@ class DefaultReplyer:
enable_tool: bool = True, enable_tool: bool = True,
from_plugin: bool = True, from_plugin: bool = True,
stream_id: str | None = None, stream_id: str | None = None,
reply_message: Messages | None = None, reply_message: DatabaseMessages | None = None,
) -> tuple[bool, dict[str, Any] | None, str | None]: ) -> tuple[bool, dict[str, Any] | None, str | None]:
# sourcery skip: merge-nested-ifs # sourcery skip: merge-nested-ifs
""" """
@@ -1150,7 +1150,7 @@ class DefaultReplyer:
extra_info: str = "", extra_info: str = "",
available_actions: dict[str, ActionInfo] | None = None, available_actions: dict[str, ActionInfo] | None = None,
enable_tool: bool = True, enable_tool: bool = True,
reply_message: Messages | None = None, reply_message: DatabaseMessages | dict[str, Any] | None = None,
) -> str: ) -> str:
""" """
构建回复器上下文 构建回复器上下文
@@ -1169,7 +1169,11 @@ class DefaultReplyer:
""" """
if available_actions is None: if available_actions is None:
available_actions = {} available_actions = {}
await self._async_init()
# 确保 reply_message 是 DatabaseMessages 对象
if isinstance(reply_message, dict):
reply_message = DatabaseMessages(**reply_message)
chat_stream = self.chat_stream chat_stream = self.chat_stream
chat_id = chat_stream.stream_id chat_id = chat_stream.stream_id
person_info_manager = get_person_info_manager() person_info_manager = get_person_info_manager()
@@ -1194,10 +1198,10 @@ class DefaultReplyer:
if reply_message is None: if reply_message is None:
logger.warning("reply_message 为 None无法构建prompt") logger.warning("reply_message 为 None无法构建prompt")
return "" return ""
platform = reply_message.chat_info_platform platform = reply_message.chat_info.platform
person_id = person_info_manager.get_person_id( person_id = person_info_manager.get_person_id(
platform, # type: ignore platform, # type: ignore
reply_message.user_id, # type: ignore reply_message.user_info.user_id, # type: ignore
) )
person_name = await person_info_manager.get_value(person_id, "person_name") person_name = await person_info_manager.get_value(person_id, "person_name")
@@ -1206,15 +1210,15 @@ class DefaultReplyer:
# 尝试从reply_message获取用户名 # 尝试从reply_message获取用户名
await person_info_manager.first_knowing_some_one( await person_info_manager.first_knowing_some_one(
platform, # type: ignore platform, # type: ignore
reply_message.user_id, # type: ignore reply_message.user_info.user_id, # type: ignore
reply_message.user_nickname or "", reply_message.user_info.user_nickname or "",
reply_message.user_cardname or "", reply_message.user_info.user_cardname or "",
) )
# 检查是否是bot自己的名字如果是则替换为"(你)" # 检查是否是bot自己的名字如果是则替换为"(你)"
bot_user_id = str(global_config.bot.qq_account) bot_user_id = str(global_config.bot.qq_account)
current_user_id = await person_info_manager.get_value(person_id, "user_id") current_user_id = await person_info_manager.get_value(person_id, "user_id")
current_platform = reply_message.chat_info_platform current_platform = reply_message.chat_info.platform
if current_user_id == bot_user_id and current_platform == global_config.bot.platform: if current_user_id == bot_user_id and current_platform == global_config.bot.platform:
sender = f"{person_name}(你)" sender = f"{person_name}(你)"
@@ -1568,7 +1572,7 @@ class DefaultReplyer:
raw_reply: str, raw_reply: str,
reason: str, reason: str,
reply_to: str, reply_to: str,
reply_message: Messages | None = None, reply_message: DatabaseMessages | None = None,
) -> str: # sourcery skip: merge-else-if-into-elif, remove-redundant-if ) -> str: # sourcery skip: merge-else-if-into-elif, remove-redundant-if
await self._async_init() await self._async_init()
chat_stream = self.chat_stream chat_stream = self.chat_stream
@@ -1576,7 +1580,7 @@ class DefaultReplyer:
is_group_chat = self.is_group_chat is_group_chat = self.is_group_chat
if reply_message: if reply_message:
sender = reply_message.user_nickname or reply_message.user_cardname sender = reply_message.user_info.user_nickname or reply_message.user_info.user_cardname
target = reply_message.processed_plain_text target = reply_message.processed_plain_text
else: else:
sender, target = self._parse_reply_target(reply_to) sender, target = self._parse_reply_target(reply_to)