From 0118fd5edf1f69a4c6a91a759e5c56bfe76f9e60 Mon Sep 17 00:00:00 2001 From: morgmart <98432065+morgmart@users.noreply.github.com> Date: Tue, 7 Jul 2026 21:33:06 -0700 Subject: [PATCH] fix(acp): resolve provider default model instead of leaking sentinel "current" (#10305) Co-authored-by: Jack Amadeo --- crates/goose/src/acp/server.rs | 6 +++++- crates/goose/src/agents/agent.rs | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/crates/goose/src/acp/server.rs b/crates/goose/src/acp/server.rs index aff0a70b0..54d386db0 100644 --- a/crates/goose/src/acp/server.rs +++ b/crates/goose/src/acp/server.rs @@ -3056,7 +3056,11 @@ impl GooseAcpAgent { .get_goose_model() .internal_err_ctx("Failed to resolve default model from config")? } else if is_changing_provider { - ACP_CURRENT_MODEL.to_string() + crate::providers::get_from_registry(&resolved_provider_name) + .await + .ok() + .map(|entry| entry.metadata().default_model.clone()) + .unwrap_or(ACP_CURRENT_MODEL.to_string()) } else { current_model }; diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index e50e75ad5..0f2687706 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -2897,7 +2897,7 @@ impl Agent { .or_else(|| config.get_goose_provider().ok()) .ok_or_else(|| anyhow!("Could not configure agent: missing provider"))?; - let model_config = match session.model_config.clone() { + let mut model_config = match session.model_config.clone() { Some(saved_config) => saved_config, None => { let model_name = config @@ -2909,6 +2909,20 @@ impl Agent { } }; + // if the saved model is the ACP sentinel "current", only preserve this if the provider + // uses this sentinel to indicate it's an ACP provider that manages its model + if model_config.model_name == crate::acp::ACP_CURRENT_MODEL { + if let Ok(entry) = crate::providers::get_from_registry(&provider_name).await { + if entry.metadata().default_model != crate::acp::ACP_CURRENT_MODEL { + model_config = crate::model_config::model_config_from_user_config( + &provider_name, + &entry.metadata().default_model, + ) + .map_err(|e| anyhow!("Could not resolve default model: {}", e))?; + } + } + } + let extensions = EnabledExtensionsState::extensions_or_default(Some(&session.extension_data), config);