From 6846bc1115794f62a17c48d0c5f3c69caf4d46a2 Mon Sep 17 00:00:00 2001 From: Ahmed Ibrahim Date: Fri, 2 Jan 2026 15:22:51 -0800 Subject: [PATCH] hard disable remote models refresh when feature is disabled (#8687) We were refreshing on tag mismatch even with feature is disabled --- codex-rs/core/src/codex.rs | 5 ++++- codex-rs/core/src/models_manager/manager.rs | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 047404f38..26f0a80cd 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -2631,7 +2631,10 @@ async fn try_run_turn( } ResponseEvent::ModelsEtag(etag) => { // Update internal state with latest models etag - sess.services.models_manager.refresh_if_new_etag(etag).await; + sess.services + .models_manager + .refresh_if_new_etag(etag, sess.features.enabled(Feature::RemoteModels)) + .await; } ResponseEvent::Completed { response_id: _, diff --git a/codex-rs/core/src/models_manager/manager.rs b/codex-rs/core/src/models_manager/manager.rs index 3f6c2bdff..060f4a5c2 100644 --- a/codex-rs/core/src/models_manager/manager.rs +++ b/codex-rs/core/src/models_manager/manager.rs @@ -86,11 +86,15 @@ impl ModelsManager { if self.try_load_cache().await { return Ok(()); } - self.refresh_available_models_no_cache().await + self.refresh_available_models_no_cache(config.features.enabled(Feature::RemoteModels)) + .await } - pub(crate) async fn refresh_available_models_no_cache(&self) -> CoreResult<()> { - if self.auth_manager.get_auth_mode() == Some(AuthMode::ApiKey) { + pub(crate) async fn refresh_available_models_no_cache( + &self, + remote_models_feature: bool, + ) -> CoreResult<()> { + if !remote_models_feature || self.auth_manager.get_auth_mode() == Some(AuthMode::ApiKey) { return Ok(()); } let auth = self.auth_manager.auth(); @@ -157,12 +161,15 @@ impl ModelsManager { } OPENAI_DEFAULT_API_MODEL.to_string() } - pub async fn refresh_if_new_etag(&self, etag: String) { + pub async fn refresh_if_new_etag(&self, etag: String, remote_models_feature: bool) { let current_etag = self.get_etag().await; if current_etag.clone().is_some() && current_etag.as_deref() == Some(etag.as_str()) { return; } - if let Err(err) = self.refresh_available_models_no_cache().await { + if let Err(err) = self + .refresh_available_models_no_cache(remote_models_feature) + .await + { error!("failed to refresh available models: {err}"); } }