71 lines
3.0 KiB
Python
71 lines
3.0 KiB
Python
"""司命台 · 人物模板管理 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="模型策略。")
|