Files
NyaHome/src/nyahome/database/model_story.py
T
MangoFanFanw 21f0d7725e refactor: 主要功能实现
目前的工作已经实现的功能:
- 基本 FastAPI 路由;
- 基本 AI 聊天和创作功能;
- 用户信息管理、权限验证、JWT 令牌签发和验证、端点保护;
- HTML 验证码邮件发送和验证码验证。
2026-05-24 13:58:51 +08:00

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