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 sqlmodel import SQLModel, Field, LargeBinary
from enum import Enum
@@ -171,7 +171,7 @@ class Expression(SQLModel, table=True):
style: str = Field(index=True, max_length=255, primary_key=True) # 风格
context: str # 上下文
up_content: str
# up_content: str
content_list: str # 内容列表JSON格式存储
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)) # 创建时间
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):
"""存黑话的模型"""