Files
hunjing/backend/app/core/config/app_config.py
T
chenxin b419e0afde M7:形仪与语音——真形锚点、候选定相、声音档案与克隆授权、ASR 接入
- 形仪域 domains/xingyi:form_anchors(稳定辨识特征/年龄表现/许可禁忌/可变范围——生成内容不可静默覆盖锚点);forms(主仪/化仪/文字形仪,candidate→adopt 定相治理:未定相不进呈现位、主仪唯一、新主仪自动退役旧主仪);voice_profiles(三来源,授权克隆必填用途与传播范围,revoke-grant 撤回立即生效,assert-usable 合成前置校验拒绝撤回/过期)
- ASR:元炁 SenseVoice /v1/audio/transcriptions 透传(Whisper 兼容 multipart);YUANQI_BASE_URL 未配置时 503 不降级不伪造——多模态关闭纪律
- 前端形仪工坊(人物详情页):真形锚点编辑(特征逐行解析)/候选登记定相废弃/声音档案建立与授权撤回;头像呈现位改走定相主仪(forms/primary);xingyi api 库 + mock + 组件 4 用例
- 退役:旧 avatar 模块(services/endpoints/avatar、avatar_dir 配置、avatar_url 字段、前端直传组件与测试)
- 验收(test_m7_xingyi 三用例):未定相不成为正式形仪(含主仪唯一与旧主仪 retired 断言);克隆授权可撤回(缺用途拒/撤回即拒/过期同理/预设不受约束);关闭全部多模态后文字相伴完整可用(ASR 503 时镜树缘契百工照常——回归)
- 四套件:后端 376、前端 203、BFF 4、神识 5 包全绿(2 个预存环境失败不变);迁移 008 净库+±1 干净
2026-08-27 20:26:52 +08:00

53 lines
2.0 KiB
Python

"""应用基础配置:运行环境、端口、CORS、默认模型提示等。"""
from __future__ import annotations
from typing import Literal
from pydantic_settings import BaseSettings
class AppConfig(BaseSettings):
"""应用基础配置。"""
# ==================== 基础配置 ====================
app_name: str = "魂镜后端" # 应用名称
app_env: Literal["dev", "prod"] = "dev" # 运行环境:dev(开发) / prod(生产)
debug: bool = False # 调试模式
timezone: str = "Asia/Shanghai" # 时区
api_prefix: str = "/api/v1" # API 路由前缀
backend_host: str = "0.0.0.0" # 监听地址
backend_port: int = 8000 # 监听端口
cors_allow_origins: str = "http://localhost:3000" # CORS 允许的源,逗号分隔
# ==================== 业务默认值 ====================
default_owner_scope: str = "local-user" # 默认所有者作用域
default_model_hint: str = "deepseek-v4-flash" # 默认真实远程逻辑模型提示
# ==================== 默认人物模板配置 ====================
character_templates_path: str = (
"../config/character_templates.yaml" # 人物模板配置文件路径(相对 backend)
)
# ==================== 文件存储 ====================
# ==================== 默认管理员用户 ====================
default_admin_username: str = "admin" # 种子默认管理员用户名
default_admin_email: str = "admin@hunjing.local" # 种子默认管理员邮箱
default_admin_password: str = "admin123" # 种子默认管理员密码(引导用,生产立即修改)
@property
def cors_origins(self) -> list[str]:
"""解析 CORS 允许的源为列表。"""
return [origin.strip() for origin in self.cors_allow_origins.split(",") if origin.strip()]
@property
def is_development(self) -> bool:
"""是否为开发环境。"""
return self.app_env == "dev"
@property
def is_production(self) -> bool:
"""是否为生产环境。"""
return self.app_env == "prod"