refactor: 主要功能实现
目前的工作已经实现的功能: - 基本 FastAPI 路由; - 基本 AI 聊天和创作功能; - 用户信息管理、权限验证、JWT 令牌签发和验证、端点保护; - HTML 验证码邮件发送和验证码验证。
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
from typing import Literal, Optional
|
||||
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy import Column, ForeignKey
|
||||
from sqlmodel import Field, Relationship, SQLModel
|
||||
|
||||
from ..config import config_manager
|
||||
|
||||
|
||||
class Chatroom(SQLModel, table=True):
|
||||
"""
|
||||
聊天室 表结构。
|
||||
聊天室是供剧本演出的场所。在聊天室中,由用户选定剧本模板、决定剧本走向,AI 按照剧本进行演出。
|
||||
我们规定 script 是故事脚本设定,content 是故事正片,script template 是脚本模板。
|
||||
|
||||
规定 creator_id 为 0 的聊天室为公共聊天室,其权限由配置文件决定。
|
||||
"""
|
||||
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
name: str
|
||||
description: str
|
||||
feature_image: str = Field(
|
||||
default=f"{config_manager.get('site_url', 'http://localhost:9000')}/nyahome/normal-thumbnail.png"
|
||||
)
|
||||
content: str
|
||||
script: str
|
||||
|
||||
script_template_id: int | None = Field(
|
||||
default=None, sa_column=Column(ForeignKey("scripttemplate.id", name="fk_chatroom_script_template"))
|
||||
)
|
||||
script_template_version: str | None
|
||||
script_template: "ScriptTemplate" = Relationship()
|
||||
|
||||
creator_id: int = Field(sa_column=Column(ForeignKey("modeluser.id", name="fk_chatroom_creator")))
|
||||
creator: Optional["ModelUser"] = Relationship(back_populates="chatrooms")
|
||||
|
||||
|
||||
class ChatroomPublic(BaseModel):
|
||||
id: int | None = None
|
||||
name: str
|
||||
description: str
|
||||
feature_image: str
|
||||
|
||||
script_template_id: int | None = None
|
||||
script_template_version: str | None
|
||||
|
||||
|
||||
class ScriptTemplate(SQLModel, table=True):
|
||||
"""
|
||||
剧本模板 表结构。
|
||||
聊天室通过加载剧本模板来开始演绎一个剧本。
|
||||
【开发中】
|
||||
"""
|
||||
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
name: str
|
||||
description: str
|
||||
version: str
|
||||
origin_url: str
|
||||
script: str
|
||||
|
||||
|
||||
class ScriptWordBook(BaseModel):
|
||||
key_word: str
|
||||
message: str
|
||||
|
||||
|
||||
class ChatScript(BaseModel):
|
||||
"""
|
||||
剧本(提示词与世界书)。
|
||||
"""
|
||||
|
||||
main_prompt: str
|
||||
user_prefix: str
|
||||
user_suffix: str
|
||||
world_books: list[ScriptWordBook]
|
||||
|
||||
|
||||
class ChatroomChat(BaseModel):
|
||||
"""
|
||||
聊天室的 chat 端点接收的数据结构,作为用户输入。
|
||||
"""
|
||||
|
||||
message: str
|
||||
prefix: str
|
||||
mode: Literal["continue", "expand"]
|
||||
model_id: int
|
||||
|
||||
|
||||
class ChatroomChatAccept(BaseModel):
|
||||
user_message: str
|
||||
aii_message: str
|
||||
mode: Literal["continue", "expand"]
|
||||
|
||||
|
||||
class ChatroomChatEdit(BaseModel):
|
||||
old_message: str
|
||||
new_message: str
|
||||
change: Literal["user", "aii"]
|
||||
|
||||
|
||||
class ChatroomChatDelete(BaseModel):
|
||||
message: str
|
||||
change: Literal["user", "aii"]
|
||||
|
||||
|
||||
from .model_user import ModelUser # noqa: E402
|
||||
Reference in New Issue
Block a user