zcbot/web/schemas.py

90 lines
2.9 KiB
Python

"""/v1 请求体 Pydantic 模型(从 app.py 析出,2026-07-23 拆分)。"""
from __future__ import annotations
from typing import Optional
from pydantic import BaseModel
class TaskCreateRequest(BaseModel):
name: str # 任务显示名(必填,DB 列 NOT NULL)
working_dir: str = "" # 工作目录名(可选,留空 → 用 name 作目录名)
description: str = ""
skill: str = ""
model_profile: str = "" # `family.variant`,留空 → cfg["default_model"];必须存在于 config/models/
class TaskPatchRequest(BaseModel):
status: Optional[str] = None
description: Optional[str] = None
name: Optional[str] = None
skill: Optional[str] = None
model_profile: Optional[str] = None # 切模型(c 模式 task 层 / A 粒度 — 下条 send 生效)
class SchedulePatchRequest(BaseModel):
# 前端只读视图仅用 enabled(停用/启用);其余字段留着供"对话改不了时"的兜底直改,
# 但前端不暴露编辑表单(建/改走对话,§8.5)。
enabled: Optional[bool] = None
class MessageRequest(BaseModel):
content: str
# 该条消息触发的生图 / 生视频模型 variant key(config/media/doubao.yaml image/video 段)。
# 空 → 对应 tool 走 yaml 第一个 variant;非空 → 本次 run 装配指定 variant。
# 仅作用于本 run,不入 DB,UI 下拉的选择跟在消息 POST body 上。
image_model: str = ""
video_model: str = ""
class OptimizePromptRequest(BaseModel):
text: str
# 选择性传当前 UI 选中的 variant key,润色 meta-prompt 会把对应模型特性塞进去
# (让 LLM 知道下游 tool 偏好,润色出更贴合 seedream / seedance 等的 prompt)。
image_model: str = ""
video_model: str = ""
class FileDeleteRequest(BaseModel):
path: str
recursive: bool = False
class FileRenameRequest(BaseModel):
path: str # 被重命名的目录 / 文件,相对 user_root
new_name: str # 新的 leaf 名(不是路径),不含 / \ ..
class FileTransferRequest(BaseModel):
paths: list[str] # 多源,均相对 user_root
dest_dir: str = "" # 目标目录,相对 user_root,空 → user_root
class LoginRequest(BaseModel):
user_id: str
platform_key: str
# 0016:平台可选注入的用户档案,缺省即旧行为(只填 user_id),向后兼容老调用方。
name: Optional[str] = None # 显示名 / 姓名
user_name: Optional[str] = None # 平台账号名
class PasswordLoginRequest(BaseModel):
email: str
password: str
class AdminCreateUserRequest(BaseModel):
email: str
password: str
admin_token: str
role: str = "user" # 'user' / 'admin';admin 可访问 /static/admin.html 管理后台
class ChangePasswordRequest(BaseModel):
old_password: str
new_password: str
class KbCreateRequest(BaseModel):
name: str # 库名(中文/字母/数字/-/_,拒 dotfile 与路径字符,≤40 字符)