expression

This commit is contained in:
UnCLAS-Prommer
2026-02-28 15:57:44 +08:00
parent b9faed4924
commit 78983c4ed8
2 changed files with 95 additions and 2 deletions

View File

@@ -0,0 +1,89 @@
from datetime import datetime
from typing import List, Optional, Literal
import json
from src.common.database.database_model import Expression
from . import BaseDatabaseDataModel
class MaiExpression(BaseDatabaseDataModel[Expression]):
def __init__(
self,
item_id: int,
situation: str,
style: str,
context: str,
# up_content: str,
content: List[str],
count: int,
last_active_time: datetime,
create_time: datetime,
session_id: Optional[str] = None,
checked: bool = False,
rejected: bool = False,
modified_by: Optional[Literal["ai", "user"]] = None,
):
self.item_id = item_id
"""自增主键ID"""
self.situation = situation
"""表达方式使用情景"""
self.style = style
"""表达方式风格"""
self.context = context
"""表达方式上下文"""
# self.up_content = up_content
self.content: List[str] = content
"""内容列表"""
self.count: int = count
self.last_active_time: datetime = last_active_time or datetime.now()
self.create_time: datetime = create_time or datetime.now()
self.session_id: Optional[str] = session_id
self.checked: bool = checked
"""是否已经被检查过"""
self.rejected: bool = rejected
"""是否被拒绝但是未更新"""
self.modified_by: Optional[Literal["ai", "user"]] = modified_by
"""最后修改者标记用户或AI为空表示未检查"""
@classmethod
def from_db_instance(cls, db_record: Expression):
content_list = json.loads(db_record.content_list) if db_record.content_list else []
for item in content_list:
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
situation=db_record.situation,
style=db_record.style,
context=db_record.context,
content=content_list,
count=db_record.count,
last_active_time=db_record.last_active_time,
create_time=db_record.create_time,
session_id=db_record.session_id,
checked=db_record.checked,
rejected=db_record.rejected,
modified_by=db_record.modified_by,
)
def to_db_instance(self):
for item in self.content:
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,
content_list=json.dumps(self.content),
count=self.count,
last_active_time=self.last_active_time,
create_time=self.create_time,
session_id=self.session_id,
checked=self.checked,
rejected=self.rejected,
modified_by=self.modified_by,
)

View File

@@ -1,4 +1,4 @@
from typing import Optional from typing import Optional, Literal
from sqlalchemy import Column, Float, Enum as SQLEnum, DateTime from sqlalchemy import Column, Float, Enum as SQLEnum, DateTime
from sqlmodel import SQLModel, Field, LargeBinary from sqlmodel import SQLModel, Field, LargeBinary
from enum import Enum from enum import Enum
@@ -171,7 +171,7 @@ class Expression(SQLModel, table=True):
style: str = Field(index=True, max_length=255, primary_key=True) # 风格 style: str = Field(index=True, max_length=255, primary_key=True) # 风格
context: str # 上下文 context: str # 上下文
up_content: str # up_content: str
content_list: str # 内容列表JSON格式存储 content_list: str # 内容列表JSON格式存储
count: int = Field(default=0) # 使用次数 count: int = Field(default=0) # 使用次数
@@ -181,6 +181,10 @@ class Expression(SQLModel, table=True):
create_time: datetime = Field(default_factory=datetime.now, sa_column=Column(DateTime)) # 创建时间 create_time: datetime = Field(default_factory=datetime.now, sa_column=Column(DateTime)) # 创建时间
session_id: Optional[str] = Field(default=None, max_length=255, nullable=True) # 会话ID区分是否为全局表达方式 session_id: Optional[str] = Field(default=None, max_length=255, nullable=True) # 会话ID区分是否为全局表达方式
checked: bool = Field(default=False) # 是否已经被检查过
rejected: bool = Field(default=False) # 是否被拒绝但是未更新
modified_by: Optional[Literal["ai", "user"]] = Field(default=None) # 最后修改者标记用户或AI为空表示未检查
class Jargon(SQLModel, table=True): class Jargon(SQLModel, table=True):
"""存黑话的模型""" """存黑话的模型"""