From c2b75a03d7be1fdd304da0b2d88e4fc68fb926eb Mon Sep 17 00:00:00 2001 From: UnCLAS-Prommer Date: Fri, 6 Mar 2026 22:45:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=B7=BB=E5=8A=A0=EF=BC=9B=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E6=B7=BB=E5=8A=A0=EF=BC=9Butils=5Fmessage?= =?UTF-8?q?=E4=BC=A0=E5=8F=82=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/data_models/__init__.py | 2 +- src/common/data_models/jargon_data_model.py | 64 +++++++++++++++++++++ src/common/database/database_model.py | 1 + src/common/utils/utils_message.py | 2 + 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/common/data_models/jargon_data_model.py diff --git a/src/common/data_models/__init__.py b/src/common/data_models/__init__.py index f22115e8..90366600 100644 --- a/src/common/data_models/__init__.py +++ b/src/common/data_models/__init__.py @@ -15,7 +15,7 @@ class BaseDataModel: return copy.deepcopy(self) -class BaseDatabaseDataModel(ABC, Generic[T]): +class BaseDatabaseDataModel(ABC, Generic[T], BaseDataModel): @classmethod @abstractmethod def from_db_instance(cls, db_record: T) -> Self: diff --git a/src/common/data_models/jargon_data_model.py b/src/common/data_models/jargon_data_model.py new file mode 100644 index 00000000..b5772b45 --- /dev/null +++ b/src/common/data_models/jargon_data_model.py @@ -0,0 +1,64 @@ +from typing import Optional + +from src.common.database.database_model import Jargon + +from . import BaseDatabaseDataModel + + +class MaiJargon(BaseDatabaseDataModel[Jargon]): + """Jargon 数据模型,与数据库模型 Jargon 互转。""" + + def __init__( + self, + content: str, + meaning: str, + raw_content: Optional[str] = None, + session_id: Optional[str] = None, + count: int = 0, + is_jargon: Optional[bool] = True, + is_global: bool = False, + is_complete: bool = False, + inference_with_context: Optional[str] = None, + inference_with_content_only: Optional[str] = None, + ): + self.content = content + self.raw_content = raw_content + self.meaning = meaning + self.session_id = session_id + self.count = count + self.is_jargon = is_jargon + self.is_global = is_global + self.is_complete = is_complete + self.inference_with_context = inference_with_context + self.inference_with_content_only = inference_with_content_only + + @classmethod + def from_db_instance(cls, db_record: Jargon) -> "MaiJargon": + """从数据库模型创建 MaiJargon 实例。""" + return cls( + content=db_record.content, + meaning=db_record.meaning, + raw_content=db_record.raw_content, + session_id=db_record.session_id, + count=db_record.count, + is_jargon=db_record.is_jargon, + is_global=db_record.is_global, + is_complete=db_record.is_complete, + inference_with_context=db_record.inference_with_context, + inference_with_content_only=db_record.inference_with_content_only, + ) + + def to_db_instance(self) -> Jargon: + """将 MaiJargon 转换为数据库模型 Jargon。""" + return Jargon( + content=self.content, + raw_content=self.raw_content, + meaning=self.meaning, + session_id=self.session_id, + count=self.count, + is_jargon=self.is_jargon, + is_global=self.is_global, + is_complete=self.is_complete, + inference_with_context=self.inference_with_context, + inference_with_content_only=self.inference_with_content_only, + ) diff --git a/src/common/database/database_model.py b/src/common/database/database_model.py index 1e12604d..07693fed 100644 --- a/src/common/database/database_model.py +++ b/src/common/database/database_model.py @@ -208,6 +208,7 @@ class Jargon(SQLModel, table=True): count: int = Field(default=0) # 使用次数 is_jargon: Optional[bool] = Field(default=True) # 是否为黑话,False表示为白话 + is_global: bool = Field(default=False) # 是否为全局黑话 is_complete: bool = Field(default=False) # 是否为已经完成全部推断(count > 100后不再推断) inference_with_context: Optional[str] = Field(default=None, nullable=True) # 带上下文的推断结果,JSON格式 inference_with_content_only: Optional[str] = Field(default=None, nullable=True) # 只基于词条的推断结果,JSON格式 diff --git a/src/common/utils/utils_message.py b/src/common/utils/utils_message.py index a344c8ea..c6844f1f 100644 --- a/src/common/utils/utils_message.py +++ b/src/common/utils/utils_message.py @@ -145,6 +145,7 @@ class MessageUtils: @staticmethod async def build_readable_message( messages: List["SessionMessage"], + *, anonymize: bool = False, show_lineno: bool = False, extract_pictures: bool = False, @@ -437,6 +438,7 @@ class MessageUtils: ] return component + # TODO: 这个函数的实现非常临时,后续需要替换为更完善的实现,比如直接从配置文件中读取机器人自己的ID,或者通过API获取机器人自己的信息等 def is_bot_self(user_id: str) -> bool: """