炸掉
This commit is contained in:
committed by
DrSmoothl
parent
3ea14a85c3
commit
cd81f943e3
@@ -1,212 +1,211 @@
|
||||
import json
|
||||
from typing import Optional, Any, Dict
|
||||
from dataclasses import dataclass, field
|
||||
from dataclasses import dataclass
|
||||
|
||||
from . import BaseDataModel
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseUserInfo(BaseDataModel):
|
||||
platform: str = field(default_factory=str)
|
||||
user_id: str = field(default_factory=str)
|
||||
user_nickname: str = field(default_factory=str)
|
||||
user_cardname: Optional[str] = None
|
||||
# @dataclass
|
||||
# class DatabaseUserInfo(BaseDataModel):
|
||||
# platform: str = field(default_factory=str)
|
||||
# user_id: str = field(default_factory=str)
|
||||
# user_nickname: str = field(default_factory=str)
|
||||
# user_cardname: Optional[str] = None
|
||||
|
||||
# def __post_init__(self):
|
||||
# assert isinstance(self.platform, str), "platform must be a string"
|
||||
# assert isinstance(self.user_id, str), "user_id must be a string"
|
||||
# assert isinstance(self.user_nickname, str), "user_nickname must be a string"
|
||||
# assert isinstance(self.user_cardname, str) or self.user_cardname is None, (
|
||||
# "user_cardname must be a string or None"
|
||||
# )
|
||||
# # def __post_init__(self):
|
||||
# # assert isinstance(self.platform, str), "platform must be a string"
|
||||
# # assert isinstance(self.user_id, str), "user_id must be a string"
|
||||
# # assert isinstance(self.user_nickname, str), "user_nickname must be a string"
|
||||
# # assert isinstance(self.user_cardname, str) or self.user_cardname is None, (
|
||||
# # "user_cardname must be a string or None"
|
||||
# # )
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseGroupInfo(BaseDataModel):
|
||||
group_id: str = field(default_factory=str)
|
||||
group_name: str = field(default_factory=str)
|
||||
group_platform: Optional[str] = None
|
||||
# @dataclass
|
||||
# class DatabaseGroupInfo(BaseDataModel):
|
||||
# group_id: str = field(default_factory=str)
|
||||
# group_name: str = field(default_factory=str)
|
||||
# group_platform: Optional[str] = None
|
||||
|
||||
# def __post_init__(self):
|
||||
# assert isinstance(self.group_id, str), "group_id must be a string"
|
||||
# assert isinstance(self.group_name, str), "group_name must be a string"
|
||||
# assert isinstance(self.group_platform, str) or self.group_platform is None, (
|
||||
# "group_platform must be a string or None"
|
||||
# )
|
||||
# # def __post_init__(self):
|
||||
# # assert isinstance(self.group_id, str), "group_id must be a string"
|
||||
# # assert isinstance(self.group_name, str), "group_name must be a string"
|
||||
# # assert isinstance(self.group_platform, str) or self.group_platform is None, (
|
||||
# # "group_platform must be a string or None"
|
||||
# # )
|
||||
|
||||
|
||||
@dataclass
|
||||
class DatabaseChatInfo(BaseDataModel):
|
||||
stream_id: str = field(default_factory=str)
|
||||
platform: str = field(default_factory=str)
|
||||
create_time: float = field(default_factory=float)
|
||||
last_active_time: float = field(default_factory=float)
|
||||
user_info: DatabaseUserInfo = field(default_factory=DatabaseUserInfo)
|
||||
group_info: Optional[DatabaseGroupInfo] = None
|
||||
# @dataclass
|
||||
# class DatabaseChatInfo(BaseDataModel):
|
||||
# stream_id: str = field(default_factory=str)
|
||||
# platform: str = field(default_factory=str)
|
||||
# create_time: float = field(default_factory=float)
|
||||
# last_active_time: float = field(default_factory=float)
|
||||
# user_info: DatabaseUserInfo = field(default_factory=DatabaseUserInfo)
|
||||
# group_info: Optional[DatabaseGroupInfo] = None
|
||||
|
||||
# def __post_init__(self):
|
||||
# assert isinstance(self.stream_id, str), "stream_id must be a string"
|
||||
# assert isinstance(self.platform, str), "platform must be a string"
|
||||
# assert isinstance(self.create_time, float), "create_time must be a float"
|
||||
# assert isinstance(self.last_active_time, float), "last_active_time must be a float"
|
||||
# assert isinstance(self.user_info, DatabaseUserInfo), "user_info must be a DatabaseUserInfo instance"
|
||||
# assert isinstance(self.group_info, DatabaseGroupInfo) or self.group_info is None, (
|
||||
# "group_info must be a DatabaseGroupInfo instance or None"
|
||||
# )
|
||||
# # def __post_init__(self):
|
||||
# # assert isinstance(self.stream_id, str), "stream_id must be a string"
|
||||
# # assert isinstance(self.platform, str), "platform must be a string"
|
||||
# # assert isinstance(self.create_time, float), "create_time must be a float"
|
||||
# # assert isinstance(self.last_active_time, float), "last_active_time must be a float"
|
||||
# # assert isinstance(self.user_info, DatabaseUserInfo), "user_info must be a DatabaseUserInfo instance"
|
||||
# # assert isinstance(self.group_info, DatabaseGroupInfo) or self.group_info is None, (
|
||||
# # "group_info must be a DatabaseGroupInfo instance or None"
|
||||
# # )
|
||||
|
||||
|
||||
@dataclass(init=False)
|
||||
class DatabaseMessages(BaseDataModel):
|
||||
def __init__(
|
||||
self,
|
||||
message_id: str = "",
|
||||
time: float = 0.0,
|
||||
chat_id: str = "",
|
||||
reply_to: Optional[str] = None,
|
||||
interest_value: Optional[float] = None,
|
||||
key_words: Optional[str] = None,
|
||||
key_words_lite: Optional[str] = None,
|
||||
is_mentioned: Optional[bool] = None,
|
||||
is_at: Optional[bool] = None,
|
||||
reply_probability_boost: Optional[float] = None,
|
||||
processed_plain_text: Optional[str] = None,
|
||||
display_message: Optional[str] = None,
|
||||
priority_mode: Optional[str] = None,
|
||||
priority_info: Optional[str] = None,
|
||||
additional_config: Optional[str] = None,
|
||||
is_emoji: bool = False,
|
||||
is_picid: bool = False,
|
||||
is_command: bool = False,
|
||||
intercept_message_level: int = 0,
|
||||
is_notify: bool = False,
|
||||
selected_expressions: Optional[str] = None,
|
||||
user_id: str = "",
|
||||
user_nickname: str = "",
|
||||
user_cardname: Optional[str] = None,
|
||||
user_platform: str = "",
|
||||
chat_info_group_id: Optional[str] = None,
|
||||
chat_info_group_name: Optional[str] = None,
|
||||
chat_info_group_platform: Optional[str] = None,
|
||||
chat_info_user_id: str = "",
|
||||
chat_info_user_nickname: str = "",
|
||||
chat_info_user_cardname: Optional[str] = None,
|
||||
chat_info_user_platform: str = "",
|
||||
chat_info_stream_id: str = "",
|
||||
chat_info_platform: str = "",
|
||||
chat_info_create_time: float = 0.0,
|
||||
chat_info_last_active_time: float = 0.0,
|
||||
**kwargs: Any,
|
||||
):
|
||||
self.message_id = message_id
|
||||
self.time = time
|
||||
self.chat_id = chat_id
|
||||
self.reply_to = reply_to
|
||||
self.interest_value = interest_value
|
||||
# @dataclass(init=False)
|
||||
# class DatabaseMessages(BaseDataModel):
|
||||
# def __init__(
|
||||
# self,
|
||||
# message_id: str = "",
|
||||
# time: float = 0.0,
|
||||
# chat_id: str = "",
|
||||
# reply_to: Optional[str] = None,
|
||||
# interest_value: Optional[float] = None,
|
||||
# key_words: Optional[str] = None,
|
||||
# key_words_lite: Optional[str] = None,
|
||||
# is_mentioned: Optional[bool] = None,
|
||||
# is_at: Optional[bool] = None,
|
||||
# reply_probability_boost: Optional[float] = None,
|
||||
# processed_plain_text: Optional[str] = None,
|
||||
# display_message: Optional[str] = None,
|
||||
# priority_mode: Optional[str] = None,
|
||||
# priority_info: Optional[str] = None,
|
||||
# additional_config: Optional[str] = None,
|
||||
# is_emoji: bool = False,
|
||||
# is_picid: bool = False,
|
||||
# is_command: bool = False,
|
||||
# intercept_message_level: int = 0,
|
||||
# is_notify: bool = False,
|
||||
# selected_expressions: Optional[str] = None,
|
||||
# user_id: str = "",
|
||||
# user_nickname: str = "",
|
||||
# user_cardname: Optional[str] = None,
|
||||
# user_platform: str = "",
|
||||
# chat_info_group_id: Optional[str] = None,
|
||||
# chat_info_group_name: Optional[str] = None,
|
||||
# chat_info_group_platform: Optional[str] = None,
|
||||
# chat_info_user_id: str = "",
|
||||
# chat_info_user_nickname: str = "",
|
||||
# chat_info_user_cardname: Optional[str] = None,
|
||||
# chat_info_user_platform: str = "",
|
||||
# chat_info_stream_id: str = "",
|
||||
# chat_info_platform: str = "",
|
||||
# chat_info_create_time: float = 0.0,
|
||||
# chat_info_last_active_time: float = 0.0,
|
||||
# **kwargs: Any,
|
||||
# ):
|
||||
# self.message_id = message_id
|
||||
# self.time = time
|
||||
# self.chat_id = chat_id
|
||||
# self.reply_to = reply_to
|
||||
# self.interest_value = interest_value
|
||||
|
||||
self.key_words = key_words
|
||||
self.key_words_lite = key_words_lite
|
||||
self.is_mentioned = is_mentioned
|
||||
# self.key_words = key_words
|
||||
# self.key_words_lite = key_words_lite
|
||||
# self.is_mentioned = is_mentioned
|
||||
|
||||
self.is_at = is_at
|
||||
self.reply_probability_boost = reply_probability_boost
|
||||
# self.is_at = is_at
|
||||
# self.reply_probability_boost = reply_probability_boost
|
||||
|
||||
self.processed_plain_text = processed_plain_text
|
||||
self.display_message = display_message
|
||||
# self.processed_plain_text = processed_plain_text
|
||||
# self.display_message = display_message
|
||||
|
||||
self.priority_mode = priority_mode
|
||||
self.priority_info = priority_info
|
||||
# self.priority_mode = priority_mode
|
||||
# self.priority_info = priority_info
|
||||
|
||||
self.additional_config = additional_config
|
||||
self.is_emoji = is_emoji
|
||||
self.is_picid = is_picid
|
||||
self.is_command = is_command
|
||||
self.intercept_message_level = intercept_message_level
|
||||
self.is_notify = is_notify
|
||||
# self.additional_config = additional_config
|
||||
# self.is_emoji = is_emoji
|
||||
# self.is_picid = is_picid
|
||||
# self.is_command = is_command
|
||||
# self.intercept_message_level = intercept_message_level
|
||||
# self.is_notify = is_notify
|
||||
|
||||
self.selected_expressions = selected_expressions
|
||||
# self.selected_expressions = selected_expressions
|
||||
|
||||
self.group_info: Optional[DatabaseGroupInfo] = None
|
||||
self.user_info = DatabaseUserInfo(
|
||||
user_id=user_id,
|
||||
user_nickname=user_nickname,
|
||||
user_cardname=user_cardname,
|
||||
platform=user_platform,
|
||||
)
|
||||
if chat_info_group_id and chat_info_group_name:
|
||||
self.group_info = DatabaseGroupInfo(
|
||||
group_id=chat_info_group_id,
|
||||
group_name=chat_info_group_name,
|
||||
group_platform=chat_info_group_platform,
|
||||
)
|
||||
# self.group_info: Optional[DatabaseGroupInfo] = None
|
||||
# self.user_info = DatabaseUserInfo(
|
||||
# user_id=user_id,
|
||||
# user_nickname=user_nickname,
|
||||
# user_cardname=user_cardname,
|
||||
# platform=user_platform,
|
||||
# )
|
||||
# if chat_info_group_id and chat_info_group_name:
|
||||
# self.group_info = DatabaseGroupInfo(
|
||||
# group_id=chat_info_group_id,
|
||||
# group_name=chat_info_group_name,
|
||||
# group_platform=chat_info_group_platform,
|
||||
# )
|
||||
|
||||
self.chat_info = DatabaseChatInfo(
|
||||
stream_id=chat_info_stream_id,
|
||||
platform=chat_info_platform,
|
||||
create_time=chat_info_create_time,
|
||||
last_active_time=chat_info_last_active_time,
|
||||
user_info=DatabaseUserInfo(
|
||||
user_id=chat_info_user_id,
|
||||
user_nickname=chat_info_user_nickname,
|
||||
user_cardname=chat_info_user_cardname,
|
||||
platform=chat_info_user_platform,
|
||||
),
|
||||
group_info=self.group_info,
|
||||
)
|
||||
# self.chat_info = DatabaseChatInfo(
|
||||
# stream_id=chat_info_stream_id,
|
||||
# platform=chat_info_platform,
|
||||
# create_time=chat_info_create_time,
|
||||
# last_active_time=chat_info_last_active_time,
|
||||
# user_info=DatabaseUserInfo(
|
||||
# user_id=chat_info_user_id,
|
||||
# user_nickname=chat_info_user_nickname,
|
||||
# user_cardname=chat_info_user_cardname,
|
||||
# platform=chat_info_user_platform,
|
||||
# ),
|
||||
# group_info=self.group_info,
|
||||
# )
|
||||
|
||||
if kwargs:
|
||||
for key, value in kwargs.items():
|
||||
setattr(self, key, value)
|
||||
# if kwargs:
|
||||
# for key, value in kwargs.items():
|
||||
# setattr(self, key, value)
|
||||
|
||||
# def __post_init__(self):
|
||||
# assert isinstance(self.message_id, str), "message_id must be a string"
|
||||
# assert isinstance(self.time, float), "time must be a float"
|
||||
# assert isinstance(self.chat_id, str), "chat_id must be a string"
|
||||
# assert isinstance(self.reply_to, str) or self.reply_to is None, "reply_to must be a string or None"
|
||||
# assert isinstance(self.interest_value, float) or self.interest_value is None, (
|
||||
# "interest_value must be a float or None"
|
||||
# )
|
||||
def flatten(self) -> Dict[str, Any]:
|
||||
"""
|
||||
将消息数据模型转换为字典格式,便于存储或传输
|
||||
"""
|
||||
return {
|
||||
"message_id": self.message_id,
|
||||
"time": self.time,
|
||||
"chat_id": self.chat_id,
|
||||
"reply_to": self.reply_to,
|
||||
"interest_value": self.interest_value,
|
||||
"key_words": self.key_words,
|
||||
"key_words_lite": self.key_words_lite,
|
||||
"is_mentioned": self.is_mentioned,
|
||||
"is_at": self.is_at,
|
||||
"reply_probability_boost": self.reply_probability_boost,
|
||||
"processed_plain_text": self.processed_plain_text,
|
||||
"display_message": self.display_message,
|
||||
"priority_mode": self.priority_mode,
|
||||
"priority_info": self.priority_info,
|
||||
"additional_config": self.additional_config,
|
||||
"is_emoji": self.is_emoji,
|
||||
"is_picid": self.is_picid,
|
||||
"is_command": self.is_command,
|
||||
"intercept_message_level": self.intercept_message_level,
|
||||
"is_notify": self.is_notify,
|
||||
"selected_expressions": self.selected_expressions,
|
||||
"user_id": self.user_info.user_id,
|
||||
"user_nickname": self.user_info.user_nickname,
|
||||
"user_cardname": self.user_info.user_cardname,
|
||||
"user_platform": self.user_info.platform,
|
||||
"chat_info_group_id": self.group_info.group_id if self.group_info else None,
|
||||
"chat_info_group_name": self.group_info.group_name if self.group_info else None,
|
||||
"chat_info_group_platform": self.group_info.group_platform if self.group_info else None,
|
||||
"chat_info_stream_id": self.chat_info.stream_id,
|
||||
"chat_info_platform": self.chat_info.platform,
|
||||
"chat_info_create_time": self.chat_info.create_time,
|
||||
"chat_info_last_active_time": self.chat_info.last_active_time,
|
||||
"chat_info_user_platform": self.chat_info.user_info.platform,
|
||||
"chat_info_user_id": self.chat_info.user_info.user_id,
|
||||
"chat_info_user_nickname": self.chat_info.user_info.user_nickname,
|
||||
"chat_info_user_cardname": self.chat_info.user_info.user_cardname,
|
||||
}
|
||||
# # def __post_init__(self):
|
||||
# # assert isinstance(self.message_id, str), "message_id must be a string"
|
||||
# # assert isinstance(self.time, float), "time must be a float"
|
||||
# # assert isinstance(self.chat_id, str), "chat_id must be a string"
|
||||
# # assert isinstance(self.reply_to, str) or self.reply_to is None, "reply_to must be a string or None"
|
||||
# # assert isinstance(self.interest_value, float) or self.interest_value is None, (
|
||||
# # "interest_value must be a float or None"
|
||||
# # )
|
||||
# def flatten(self) -> Dict[str, Any]:
|
||||
# """
|
||||
# 将消息数据模型转换为字典格式,便于存储或传输
|
||||
# """
|
||||
# return {
|
||||
# "message_id": self.message_id,
|
||||
# "time": self.time,
|
||||
# "chat_id": self.chat_id,
|
||||
# "reply_to": self.reply_to,
|
||||
# "interest_value": self.interest_value,
|
||||
# "key_words": self.key_words,
|
||||
# "key_words_lite": self.key_words_lite,
|
||||
# "is_mentioned": self.is_mentioned,
|
||||
# "is_at": self.is_at,
|
||||
# "reply_probability_boost": self.reply_probability_boost,
|
||||
# "processed_plain_text": self.processed_plain_text,
|
||||
# "display_message": self.display_message,
|
||||
# "priority_mode": self.priority_mode,
|
||||
# "priority_info": self.priority_info,
|
||||
# "additional_config": self.additional_config,
|
||||
# "is_emoji": self.is_emoji,
|
||||
# "is_picid": self.is_picid,
|
||||
# "is_command": self.is_command,
|
||||
# "intercept_message_level": self.intercept_message_level,
|
||||
# "is_notify": self.is_notify,
|
||||
# "selected_expressions": self.selected_expressions,
|
||||
# "user_id": self.user_info.user_id,
|
||||
# "user_nickname": self.user_info.user_nickname,
|
||||
# "user_cardname": self.user_info.user_cardname,
|
||||
# "user_platform": self.user_info.platform,
|
||||
# "chat_info_group_id": self.group_info.group_id if self.group_info else None,
|
||||
# "chat_info_group_name": self.group_info.group_name if self.group_info else None,
|
||||
# "chat_info_group_platform": self.group_info.group_platform if self.group_info else None,
|
||||
# "chat_info_stream_id": self.chat_info.stream_id,
|
||||
# "chat_info_platform": self.chat_info.platform,
|
||||
# "chat_info_create_time": self.chat_info.create_time,
|
||||
# "chat_info_last_active_time": self.chat_info.last_active_time,
|
||||
# "chat_info_user_platform": self.chat_info.user_info.platform,
|
||||
# "chat_info_user_id": self.chat_info.user_info.user_id,
|
||||
# "chat_info_user_nickname": self.chat_info.user_info.user_nickname,
|
||||
# "chat_info_user_cardname": self.chat_info.user_info.user_cardname,
|
||||
# }
|
||||
|
||||
|
||||
@dataclass(init=False)
|
||||
|
||||
@@ -11,7 +11,6 @@ from . import BaseDatabaseDataModel
|
||||
class MaiExpression(BaseDatabaseDataModel[Expression]):
|
||||
def __init__(
|
||||
self,
|
||||
item_id: int,
|
||||
situation: str,
|
||||
style: str,
|
||||
# context: str,
|
||||
@@ -20,6 +19,7 @@ class MaiExpression(BaseDatabaseDataModel[Expression]):
|
||||
count: int,
|
||||
last_active_time: datetime,
|
||||
create_time: datetime,
|
||||
item_id: Optional[int] = None,
|
||||
session_id: Optional[str] = None,
|
||||
checked: bool = False,
|
||||
rejected: bool = False,
|
||||
@@ -55,7 +55,7 @@ class MaiExpression(BaseDatabaseDataModel[Expression]):
|
||||
if not isinstance(item, str):
|
||||
raise ValueError(f"Content item must be a string, got {type(item)}")
|
||||
return cls(
|
||||
item_id=db_record.id, # type: ignore
|
||||
item_id=db_record.id,
|
||||
situation=db_record.situation,
|
||||
style=db_record.style,
|
||||
# context=db_record.context,
|
||||
@@ -74,7 +74,6 @@ class MaiExpression(BaseDatabaseDataModel[Expression]):
|
||||
if not isinstance(item, str):
|
||||
raise ValueError(f"Content item must be a string, got {type(item)}")
|
||||
return Expression(
|
||||
id=self.item_id,
|
||||
situation=self.situation,
|
||||
style=self.style,
|
||||
# context=self.context,
|
||||
|
||||
@@ -7,13 +7,13 @@ if TYPE_CHECKING:
|
||||
from src.core.types import ActionInfo
|
||||
|
||||
|
||||
@dataclass
|
||||
class TargetPersonInfo(BaseDataModel):
|
||||
platform: str = field(default_factory=str)
|
||||
user_id: str = field(default_factory=str)
|
||||
user_nickname: str = field(default_factory=str)
|
||||
person_id: Optional[str] = None
|
||||
person_name: Optional[str] = None
|
||||
# @dataclass
|
||||
# class TargetPersonInfo(BaseDataModel):
|
||||
# platform: str = field(default_factory=str)
|
||||
# user_id: str = field(default_factory=str)
|
||||
# user_nickname: str = field(default_factory=str)
|
||||
# person_id: Optional[str] = None
|
||||
# person_name: Optional[str] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
from typing import Optional
|
||||
from typing import Optional, Dict
|
||||
|
||||
import json
|
||||
|
||||
from src.common.database.database_model import Jargon
|
||||
from src.common.logger import get_logger
|
||||
|
||||
from . import BaseDatabaseDataModel
|
||||
|
||||
logger = get_logger("jargon_data_model")
|
||||
|
||||
|
||||
class MaiJargon(BaseDatabaseDataModel[Jargon]):
|
||||
"""Jargon 数据模型,与数据库模型 Jargon 互转。"""
|
||||
@@ -12,28 +17,37 @@ class MaiJargon(BaseDatabaseDataModel[Jargon]):
|
||||
self,
|
||||
content: str,
|
||||
meaning: str,
|
||||
item_id: Optional[int] = None,
|
||||
raw_content: Optional[str] = None,
|
||||
session_id: Optional[str] = None,
|
||||
session_id_list: Optional[Dict[str, int]] = None,
|
||||
count: int = 0,
|
||||
is_jargon: Optional[bool] = True,
|
||||
is_complete: bool = False,
|
||||
is_global: bool = False,
|
||||
last_inference_count: int = 0,
|
||||
inference_with_context: Optional[str] = None,
|
||||
inference_with_content_only: Optional[str] = None,
|
||||
):
|
||||
self.item_id = item_id
|
||||
"""自增主键ID"""
|
||||
self.content = content
|
||||
"""黑话内容"""
|
||||
self.raw_content = raw_content
|
||||
"""原始内容,未处理的黑话内容"""
|
||||
self.meaning = meaning
|
||||
"""黑话含义"""
|
||||
self.session_id = session_id
|
||||
"""会话ID,区分是否为全局黑话"""
|
||||
self.session_id_list = session_id_list or {}
|
||||
"""会话ID字典,区分是否为全局黑话,格式为{"session_id": session_count, ...},如果为空表示全局黑话"""
|
||||
self.count = count
|
||||
"""使用次数"""
|
||||
self.is_jargon = is_jargon
|
||||
"""是否为黑话,False表示为白话"""
|
||||
self.is_complete = is_complete
|
||||
"""是否为已经完成全部推断(count > 100后不再推断)"""
|
||||
self.is_global = is_global
|
||||
"""是否为全局黑话(独立于session_id_dict)"""
|
||||
self.last_inference_count = last_inference_count
|
||||
"""上一次进行推断时的count值,用于判断是否需要重新推断"""
|
||||
self.inference_with_context = inference_with_context
|
||||
"""带上下文的推断结果,JSON格式"""
|
||||
self.inference_with_content_only = inference_with_content_only
|
||||
@@ -42,28 +56,40 @@ class MaiJargon(BaseDatabaseDataModel[Jargon]):
|
||||
@classmethod
|
||||
def from_db_instance(cls, db_record: Jargon) -> "MaiJargon":
|
||||
"""从数据库模型创建 MaiJargon 实例。"""
|
||||
json_list: Dict[str, int] = {}
|
||||
try:
|
||||
# 解析存储的字符串为字典
|
||||
json_list = json.loads(db_record.session_id_dict)
|
||||
except Exception as e:
|
||||
logger.error(f"Error parsing session_id_list: {e}")
|
||||
return cls(
|
||||
item_id=db_record.id,
|
||||
content=db_record.content,
|
||||
meaning=db_record.meaning,
|
||||
raw_content=db_record.raw_content,
|
||||
session_id=db_record.session_id,
|
||||
session_id_list=json_list,
|
||||
count=db_record.count,
|
||||
is_jargon=db_record.is_jargon,
|
||||
is_complete=db_record.is_complete,
|
||||
is_global=db_record.is_global,
|
||||
last_inference_count=db_record.last_inference_count,
|
||||
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。"""
|
||||
dumped_session_id_list = json.dumps(self.session_id_list)
|
||||
return Jargon(
|
||||
content=self.content,
|
||||
raw_content=self.raw_content,
|
||||
meaning=self.meaning,
|
||||
session_id=self.session_id,
|
||||
session_id_dict=dumped_session_id_list,
|
||||
count=self.count,
|
||||
is_jargon=self.is_jargon,
|
||||
is_complete=self.is_complete,
|
||||
is_global=self.is_global,
|
||||
last_inference_count=self.last_inference_count,
|
||||
inference_with_context=self.inference_with_context,
|
||||
inference_with_content_only=self.inference_with_content_only,
|
||||
)
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from typing import Any, Iterable, List, Optional, Tuple, Union
|
||||
# from dataclasses import dataclass
|
||||
# from enum import Enum
|
||||
# from typing import Any, Iterable, List, Optional, Tuple, Union
|
||||
|
||||
from . import BaseDataModel
|
||||
# from . import BaseDataModel
|
||||
|
||||
|
||||
class ReplyContentType(Enum):
|
||||
TEXT = "text"
|
||||
IMAGE = "image"
|
||||
EMOJI = "emoji"
|
||||
COMMAND = "command"
|
||||
VOICE = "voice"
|
||||
HYBRID = "hybrid"
|
||||
FORWARD = "forward"
|
||||
# class ReplyContentType(Enum):
|
||||
# TEXT = "text"
|
||||
# IMAGE = "image"
|
||||
# EMOJI = "emoji"
|
||||
# COMMAND = "command"
|
||||
# VOICE = "voice"
|
||||
# HYBRID = "hybrid"
|
||||
# FORWARD = "forward"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.value
|
||||
# def __str__(self) -> str:
|
||||
# return self.value
|
||||
|
||||
|
||||
@dataclass
|
||||
class ReplyContent:
|
||||
content_type: ReplyContentType | str
|
||||
content: Any
|
||||
# @dataclass
|
||||
# class ReplyContent:
|
||||
# content_type: ReplyContentType | str
|
||||
# content: Any
|
||||
|
||||
|
||||
@dataclass
|
||||
class ForwardNode:
|
||||
user_id: Optional[str] = None
|
||||
user_nickname: Optional[str] = None
|
||||
content: Union[str, List[ReplyContent], None] = None
|
||||
# @dataclass
|
||||
# class ForwardNode:
|
||||
# user_id: Optional[str] = None
|
||||
# user_nickname: Optional[str] = None
|
||||
# content: Union[str, List[ReplyContent], None] = None
|
||||
|
||||
@classmethod
|
||||
def construct_as_id_reference(cls, message_id: str) -> "ForwardNode":
|
||||
return cls(content=message_id)
|
||||
# @classmethod
|
||||
# def construct_as_id_reference(cls, message_id: str) -> "ForwardNode":
|
||||
# return cls(content=message_id)
|
||||
|
||||
@classmethod
|
||||
def construct_as_created_node(
|
||||
cls,
|
||||
user_id: str,
|
||||
user_nickname: str,
|
||||
content: List[ReplyContent],
|
||||
) -> "ForwardNode":
|
||||
return cls(user_id=user_id, user_nickname=user_nickname, content=content)
|
||||
# @classmethod
|
||||
# def construct_as_created_node(
|
||||
# cls,
|
||||
# user_id: str,
|
||||
# user_nickname: str,
|
||||
# content: List[ReplyContent],
|
||||
# ) -> "ForwardNode":
|
||||
# return cls(user_id=user_id, user_nickname=user_nickname, content=content)
|
||||
|
||||
|
||||
class ReplySetModel(BaseDataModel):
|
||||
def __init__(self) -> None:
|
||||
self.reply_data: List[ReplyContent] = []
|
||||
# class ReplySetModel(BaseDataModel):
|
||||
# def __init__(self) -> None:
|
||||
# self.reply_data: List[ReplyContent] = []
|
||||
|
||||
def __len__(self) -> int:
|
||||
return len(self.reply_data)
|
||||
# def __len__(self) -> int:
|
||||
# return len(self.reply_data)
|
||||
|
||||
def add_text_content(self, text: str) -> None:
|
||||
self.reply_data.append(ReplyContent(content_type=ReplyContentType.TEXT, content=text))
|
||||
# def add_text_content(self, text: str) -> None:
|
||||
# self.reply_data.append(ReplyContent(content_type=ReplyContentType.TEXT, content=text))
|
||||
|
||||
def add_voice_content(self, voice_base64: str) -> None:
|
||||
self.reply_data.append(ReplyContent(content_type=ReplyContentType.VOICE, content=voice_base64))
|
||||
# def add_voice_content(self, voice_base64: str) -> None:
|
||||
# self.reply_data.append(ReplyContent(content_type=ReplyContentType.VOICE, content=voice_base64))
|
||||
|
||||
def add_hybrid_content_by_raw(self, message_tuple_list: Iterable[Tuple[ReplyContentType | str, str]]) -> None:
|
||||
hybrid_contents: List[ReplyContent] = []
|
||||
for content_type, content in message_tuple_list:
|
||||
hybrid_contents.append(
|
||||
ReplyContent(content_type=self._normalize_content_type(content_type), content=content)
|
||||
)
|
||||
self.reply_data.append(ReplyContent(content_type=ReplyContentType.HYBRID, content=hybrid_contents))
|
||||
# def add_hybrid_content_by_raw(self, message_tuple_list: Iterable[Tuple[ReplyContentType | str, str]]) -> None:
|
||||
# hybrid_contents: List[ReplyContent] = []
|
||||
# for content_type, content in message_tuple_list:
|
||||
# hybrid_contents.append(
|
||||
# ReplyContent(content_type=self._normalize_content_type(content_type), content=content)
|
||||
# )
|
||||
# self.reply_data.append(ReplyContent(content_type=ReplyContentType.HYBRID, content=hybrid_contents))
|
||||
|
||||
def add_forward_content(self, forward_nodes: List[ForwardNode]) -> None:
|
||||
self.reply_data.append(ReplyContent(content_type=ReplyContentType.FORWARD, content=forward_nodes))
|
||||
# def add_forward_content(self, forward_nodes: List[ForwardNode]) -> None:
|
||||
# self.reply_data.append(ReplyContent(content_type=ReplyContentType.FORWARD, content=forward_nodes))
|
||||
|
||||
@staticmethod
|
||||
def _normalize_content_type(content_type: ReplyContentType | str) -> ReplyContentType | str:
|
||||
if isinstance(content_type, ReplyContentType):
|
||||
return content_type
|
||||
if isinstance(content_type, str):
|
||||
for item in ReplyContentType:
|
||||
if item.value == content_type:
|
||||
return item
|
||||
return content_type
|
||||
# @staticmethod
|
||||
# def _normalize_content_type(content_type: ReplyContentType | str) -> ReplyContentType | str:
|
||||
# if isinstance(content_type, ReplyContentType):
|
||||
# return content_type
|
||||
# if isinstance(content_type, str):
|
||||
# for item in ReplyContentType:
|
||||
# if item.value == content_type:
|
||||
# return item
|
||||
# return content_type
|
||||
|
||||
Reference in New Issue
Block a user