84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
# -*- 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="新增消息")
|