# 默认模型档案: <family>.<variant>,对应 config/models/<family>.yaml
default_model: deepseek_v4.flash

models_dir: config/models

# 模型档位(per-account 模型访问控制,见 core/model_access.py)。users.plan 存档位名;
# plan 为空 / 未知 → 落 `default` 档;role=admin 始终全开,不受此限制。
# 每档列出可用的模型 id:文本 = `family.variant`(config/models/);图/视频 = variant key
# (config/media/doubao.yaml)。成员含 `"*"` = 全开(含未来新增模型)。
# 三个 list 端点(/v1/models、/v1/image_models、/v1/video_models)按档过滤,用户只看到本档模型;
# 新建/切换/发媒体时再硬校验(老 task 续跑读 task.model_profile 不打断)。改后重启 web 生效。
model_tiers:
  default:                 # 基线:所有未分配档位的用户(= 公测期默认可用)
    - deepseek_v4.flash
    - deepseek_v4.pro
    - local.r1             # 内网模型(涉密任务)
    - local.qwen3
    - seedream_5           # 图(config/media/doubao.yaml image 段)
    - seedance_2_fast      # 视频
    - seedance_2_pro
  pro:                     # 基线 + 豆包 Seed 2.1 + GLM
    - deepseek_v4.flash
    - deepseek_v4.pro
    - local.r1             # 内网模型(涉密任务)
    - local.qwen3
    - doubao.turbo
    - doubao.pro
    - doubao.evolving
    - glm.pro
    - glm.pro52
    - unifyllm.fable5        # unifyllm 网关(海外旗舰,走代理出口)
    - unifyllm.opus48
    - unifyllm.sonnet46
    - unifyllm.gpt56_sol
    - unifyllm.gpt55
    - unifyllm.gpt54_mini
    - unifyllm.gemini31_pro
    - seedream_5
    - gpt_image              # 图(config/media/unifyllm.yaml image 段,GPT 生图)
    - seedance_2_fast
    - seedance_2_pro
skills_dir: skills
workspace_dir: workspace
system_prompt: prompts/system/general_v1.md

# 媒体生成每账号每日配额(usage_events.kind=image/video 计数,服务器本地 00:00 重置)。
# 失败任务不算(record_*_usage 只在成功 + 下载完才落库)。≤ 0 视为不限。
# 跨 task 跨 variant 全口径合计。改后 重启 web 生效。
quotas:
  images_per_day: 20    # seedream 等图像 tool 调用上限
  videos_per_day: 5     # seedance 等视频 tool 调用上限
  # per-user 工作目录总字节上限(包括上传 + tool 写的所有产物);≤ 0 视为不限。
  # 写前 gate(/v1/files/upload + DockerExecutor.write/edit),超额返 [Error] 硬阻。
  # 实测靠 lifespan 后台 15min 扫描 user_disk_usage 表,扫描间隙轻微突破接受
  # (跟 image/video 配额 race-tolerant 一致);外部用户开放前再上 OS 层 xfs prjquota 兜底。
  disk_bytes_per_user: 20gb             # 支持 20gb / 500mb / 1073741824(整数 bytes)
  disk_scan_interval_seconds: 900       # 后台扫描周期,默 15 分钟

# 优雅 drain(SIGTERM / systemctl restart):先拒新 POST /messages(返 503 + Retry-After,
# 客户端退避重试覆盖),等在跑的 run 自然收尾;超 drain_timeout 还没完的转协作式 cancel
# (下个 chunk 间隙退、标 idle 不报 error);再过 cancel_grace 仍没退的留给 systemd SIGKILL,
# 下次启动 reaper 标 error(最坏退化 = 改前行为)。改后重启 web 生效。
# ★ systemd unit 的 TimeoutStopSec 必须 > drain_timeout + cancel_grace + 余量(见 RUN.md 部署 SOP)。
shutdown:
  drain_timeout_seconds: 30     # 等在跑 run 收尾的上限 = 部署期 503 窗口上限;超时转 cancel
                                # (= 用户按停止,标 idle 可重发,非 error),故偏短更安全
  cancel_grace_seconds: 15      # 超时转 cancel 后再给的退场宽限

# Sandbox 容器资源限制(docker run flag,env 可 override);改后重启 web 生效,
# 新起的容器用新值,已 running 的不变(idle 5min 回收后下次起)。
sandbox:
  memory: 2g                 # --memory      (env: ZCBOT_SANDBOX_MEMORY)
  cpus: 1.0                  # --cpus        (env: ZCBOT_SANDBOX_CPUS)
  pids_limit: 1024           # --pids-limit  (env: ZCBOT_SANDBOX_PIDS_LIMIT);线程也计数,
                             # chromium headless 一次 ~150-200 线程 + 超时残留进程,256 会被
                             # 打满致 mmdc 渲 mermaid 必崩(pthread_create EAGAIN)
  shm_size: 512m             # --shm-size    (env: ZCBOT_SANDBOX_SHM_SIZE);chromium/mmdc 渲 mermaid 的 /dev/shm,默 64MB 不够会挂
  # 容器 DNS server 显式配置(docker run --dns,容器 /etc/resolv.conf 直接写,
  # 绕过 docker daemon 上游 DNS 探测路径;腾讯云轻量 / 部分云上 daemon 探测
  # systemd-resolved 上游会失败,导致 embedded DNS 127.0.0.11 forward 出去也跪)。
  # 默公共 DNS,国内访问通畅;留空(`dns: []`)走 docker 默认探测。
  dns:
    - "8.8.8.8"              # Google
    - "114.114.114.114"      # 国内通用
