"""运行时设置覆盖(键值存储)。 config.yaml 是只读挂载(镜像内不含配置),改完需重启容器才生效。 本表持久化用户在「设置页」修改的参数,进程重启后自动加载, 无需改 config.yaml 或重建镜像。 当前支持的键见 _ALLOWED_KEYS(settings_router 维护),值为 JSON 字符串。 """ from __future__ import annotations from datetime import datetime, timezone from sqlalchemy import String, DateTime, Text from sqlalchemy.orm import Mapped, mapped_column from ..database import Base def _now() -> datetime: return datetime.now(timezone.utc) class Setting(Base): """单个配置项的覆盖值(key = 'asr.batch_size' 之类的点分路径)。""" __tablename__ = "setting" key: Mapped[str] = mapped_column(String(128), primary_key=True) value: Mapped[str] = mapped_column(Text) # JSON 编码的值 updated_at: Mapped[datetime] = mapped_column( DateTime, default=_now, onupdate=_now, ) def __repr__(self) -> str: return f"Setting(key={self.key!r}, value={self.value!r})"