Files
hunjing/backend/app/schemas/admin_character.py
T
2026-08-21 16:00:13 +08:00

71 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""司命台 · 人物模板管理 API schema。
对应 admin 端系统模板 CRUD(api-spec §19 扩展)。
"""
from __future__ import annotations
from typing import Any
from pydantic import BaseModel, ConfigDict, Field
class AdminTemplateSummaryResponse(BaseModel):
"""系统模板列表项(管理端完整视图)。"""
key: str = Field(description="模板唯一标识(template_key)。")
name: str = Field(description="模板人物内部名称。")
display_name: str | None = Field(description="模板人物显示昵称。")
language: str = Field(description="默认语言。")
privacy_level: str = Field(description="隐私等级。")
is_default: bool = Field(
default=False, description="是否默认模板(新用户以此创建初始角色)。"
)
profile: dict[str, Any] = Field(description="完整人物档案。")
model_policy: dict[str, Any] = Field(description="完整模型策略。")
created_at: str = Field(description="创建时间,UTC ISO 8601。")
updated_at: str = Field(description="更新时间,UTC ISO 8601。")
class AdminCreateTemplateRequest(BaseModel):
"""创建系统模板。"""
model_config = ConfigDict(extra="forbid")
key: str = Field(
min_length=1,
pattern=r"^[a-z][a-z0-9_\-]*$",
description="模板唯一标识,仅允许小写字母、数字、下划线、连字符。"
"如与 YAML 中已有的 key 相同,下次重启时会被 YAML 配置覆盖。",
)
name: str = Field(min_length=1, description="模板人物内部名称。")
display_name: str | None = Field(default=None, description="可选显示昵称。")
language: str = Field(default="zh-CN", description="默认语言。")
privacy_level: str = Field(default="normal", description="隐私等级。")
is_default: bool = Field(
default=False,
description="是否默认模板。至多一个为 true,多个则取第一个。",
)
profile: dict[str, Any] = Field(
default_factory=dict,
description="人物档案。生日 (birthday) 无需提供,系统自动兜底。",
)
model_policy: dict[str, Any] = Field(
default_factory=dict,
description="模型策略。default_chat_model_hint 无需提供,从 settings 自动补充。",
)
class AdminUpdateTemplateRequest(BaseModel):
"""更新系统模板(所有字段可选,仅更新提供值的字段)。"""
model_config = ConfigDict(extra="forbid")
name: str | None = Field(default=None, description="内部名称。")
display_name: str | None = Field(default=None, description="显示昵称。")
language: str | None = Field(default=None, description="默认语言。")
privacy_level: str | None = Field(default=None, description="隐私等级。")
is_default: bool | None = Field(default=None, description="是否默认模板。")
profile: dict[str, Any] | None = Field(default=None, description="人物档案。")
model_policy: dict[str, Any] | None = Field(default=None, description="模型策略。")