From bf9997b1c6dd80db2875ce703edfc53190930560 Mon Sep 17 00:00:00 2001 From: ZZR <1206302772@qq.com> Date: Thu, 10 Sep 2026 09:06:14 +0800 Subject: [PATCH] fix: only auto-generate model catalog for custom Responses providers with model routes Narrows the previous "always generate catalog for custom Responses providers" behavior: a flat model_list without suffix windows, metadata overrides or model routes keeps main's contract of not writing model_catalog_json (the model list itself is sufficient there). Catalog generation is now limited to custom Responses providers that actually need it to expose model metadata for routing targets, i.e. when profile.has_model_routes() is true. Users relying on a hand-written model_catalog_json pointer keep the existing preserve behavior. --- crates/codex-plus-core/src/relay_config.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/codex-plus-core/src/relay_config.rs b/crates/codex-plus-core/src/relay_config.rs index d2be4bf32..60e4a5528 100644 --- a/crates/codex-plus-core/src/relay_config.rs +++ b/crates/codex-plus-core/src/relay_config.rs @@ -1962,6 +1962,8 @@ fn apply_model_catalog_to_config( return Ok(normalize_optional_toml(doc)); } // Known bundled metadata entries need a catalog even without a user-supplied window. + // 自定义 Responses provider 走 model_routes 时需要 catalog,才能给路由目标暴露模型元数据; + // 纯平铺 model_list 且无窗口/元数据的仍保持"不生成"契约(无后缀不落盘,见既有测试)。 if !has_metadata_overrides && !entries.iter().any(|entry| { entry.suffix_window.is_some() @@ -1969,6 +1971,7 @@ fn apply_model_catalog_to_config( || crate::model_suffix::requires_bundled_metadata_catalog(&entry.slug) || (official_deepseek_responses && entry.slug.starts_with("deepseek-v4-")) }) + && !(custom_responses && profile.has_model_routes()) { let mut doc = parse_toml_document(&config_text)?; if root_key_string(&config_text, "model_catalog_json").as_deref()