package main import ( "log/slog" "git.yeij.top/AskaEth/Cyrene_v2/internal/config" "git.yeij.top/AskaEth/Cyrene_v2/internal/config/runtimeconfig" ) // materializeModels 在进程启动时跑一次「`.env` 默认层 → models.json 补齐」。 // // 语义(主人裁决,规则见 runtimeconfig.Materialize):`.env` 只是基础入口/播种层, // models.json(面板专用配置文件)才是一等来源。每次启动把 `.env` 的 LLM 块补进面板 // 配置里**缺失**的键,面板已有的键(含显式空值)绝不覆盖,组集合完全由面板决定 // (面板删掉的组不会因 `.env` 仍声明它而复活);面板配置缺失/为空时才由 `.env` // 播种出合成组(既有行为)。幂等,重复启动不再改动文件。 // // 失败一律只记日志、**不阻断启动**:模型栈的既有兜底(LoadModels 回退 `.env`)仍然 // 兜住,配置文件的一次写失败不该让服务起不来。 func materializeModels(path string, env config.LLMConfig, log *slog.Logger) { res, err := runtimeconfig.Materialize(path, env, log) if err != nil { log.Warn("models.json 补齐失败(模型栈仍按现状运行)", "path", path, "error", err) return } if res.Warn != nil { log.Warn("models.json 补齐未完成(模型栈仍按现状运行)", "path", path, "error", res.Warn) } }