51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
数据表模型
|
|
"""
|
|
from datetime import datetime
|
|
|
|
from pydantic_ai._uuid import uuid7
|
|
from sqlmodel import Field, JSON, SQLModel
|
|
|
|
|
|
# 会话数据表模型
|
|
class Conversation(SQLModel, table=True):
|
|
id: str = Field(
|
|
default_factory=lambda: str(uuid7()),
|
|
primary_key=True,
|
|
description="会话唯一标识",
|
|
)
|
|
user_id: str = Field(..., index=True, description="用户唯一标识")
|
|
description: str = Field(..., description="会话描述")
|
|
is_deleted: bool = Field(default=False, description="是否删除")
|
|
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
|
|
|
|
|
|
# 对话数据表模型
|
|
class Dialog(SQLModel, table=True):
|
|
id: str = Field(
|
|
default_factory=lambda: str(uuid7()),
|
|
primary_key=True,
|
|
description="对话唯一标识",
|
|
)
|
|
conversation_id: str = Field(..., index=True, description="会话唯一标识")
|
|
question: str = Field(..., description="问题")
|
|
thought_nodes: list[ThoughtNode] = Field(
|
|
default_factory=list, sa_type=JSON, description="思考节点列表"
|
|
)
|
|
answer: str = Field(default="", description="回答")
|
|
|
|
|
|
# 思考节点数据表模型
|
|
class ThoughtNode(SQLModel):
|
|
|
|
kind: str = Field(description="思考节点类型")
|
|
content: str = Field(default="", description="思考节点内容")
|
|
|
|
|
|
# 运行结果数据表模型
|
|
class RunResult(SQLModel, table=True):
|
|
conversation_id: str = Field(primary_key=True, description="会话唯一标识")
|
|
dialog_id: str = Field(primary_key=True, description="对话唯一标识")
|
|
new_messages: str = Field(description="新增消息")
|