# -*- coding: utf-8 -*- """ 表 """ from datetime import datetime, timedelta from pydantic_ai._uuid import uuid7 from sqlmodel import Field, JSON, SQLModel from random import choices # 验证码表 class Captchas(SQLModel, table=True): email: str = Field(..., primary_key=True, description="邮箱") captcha: str = Field( default_factory=lambda: "".join(choices("0123456789", k=6)), description="验证码", ) is_valid: bool = Field( default=True, index=True, description="是否有效,True 表示有效,False 表示无效" ) is_unused: bool = Field( default=True, index=True, description="是否未使用,True 表示未使用,False 表示已使用。", ) expired_at: datetime = Field( default_factory=lambda: datetime.now() + timedelta(minutes=30), primary_key=True, description="过期时间", ) # 用户表 class Users(SQLModel, table=True): id: str = Field( default_factory=lambda: str(uuid7()), primary_key=True, description="用户唯一标识", ) email: str = Field(..., index=True, description="邮箱") # 会话表 class Conversations(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, index=True, description="是否删除") created_at: datetime = Field(default_factory=datetime.now, description="创建时间") # 思考节点表(仅定义) class ThoughtNodes(SQLModel): kind: str = Field(description="思考节点类型") content: str = Field(default="", description="思考节点内容") # 对话表 class Dialogs(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: dict[int, ThoughtNodes] = Field( default_factory=dict, sa_type=JSON, description="思考节点字典" ) answer: str = Field(default="", description="回答") # 运行结果表 class RunResults(SQLModel, table=True): conversation_id: str = Field(primary_key=True, description="会话唯一标识") dialog_id: str = Field(primary_key=True, description="对话唯一标识") new_messages: str = Field(description="新增消息")