21f0d7725e
目前的工作已经实现的功能: - 基本 FastAPI 路由; - 基本 AI 聊天和创作功能; - 用户信息管理、权限验证、JWT 令牌签发和验证、端点保护; - HTML 验证码邮件发送和验证码验证。
108 lines
2.7 KiB
Python
108 lines
2.7 KiB
Python
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
|