From b298c49a5ade3a904b3e6feb0813c276ce700c35 Mon Sep 17 00:00:00 2001 From: rabi Date: Thu, 12 Feb 2026 16:25:38 +0530 Subject: [PATCH] fix: filter models without tool support from recommended list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Models without tool call support are filtered from the recommended model list when they have entries in the canonical registry, preventing their selection during configuration. The filter is bypassed when toolshim is enabled. Declarative providers whose models lack canonical registry coverage are unaffected — their full model list is returned as-is. OpenRouter's provider-level tool filtering is removed since its models are covered by the canonical registry. Change-Id: Iac92953108d0b120afe6d7b0fe6903acf1247332 Signed-off-by: rabi --- crates/goose-acp/tests/common_tests/mod.rs | 7 ------ crates/goose/src/providers/base.rs | 4 ++++ crates/goose/src/providers/openrouter.rs | 27 +--------------------- 3 files changed, 5 insertions(+), 33 deletions(-) diff --git a/crates/goose-acp/tests/common_tests/mod.rs b/crates/goose-acp/tests/common_tests/mod.rs index e5b3a305108e..c5471d2eb0c7 100644 --- a/crates/goose-acp/tests/common_tests/mod.rs +++ b/crates/goose-acp/tests/common_tests/mod.rs @@ -142,7 +142,6 @@ pub async fn run_model_list() { "gpt-5-codex", "gpt-5", "gpt-5-2025-08-07", - "gpt-5-chat-latest", "gpt-5-mini", "gpt-5-mini-2025-08-07", TEST_MODEL, @@ -172,16 +171,10 @@ pub async fn run_model_list() { "gpt-4o-2024-05-13", "gpt-4o-2024-08-06", "gpt-4o-2024-11-20", - "text-embedding-3-large", - "text-embedding-3-small", "gpt-4", "gpt-4-0613", "gpt-4-turbo", "gpt-4-turbo-2024-04-09", - "gpt-3.5-turbo", - "gpt-3.5-turbo-0125", - "gpt-3.5-turbo-1106", - "text-embedding-ada-002", ] .iter() .map(|id| ModelInfo::new(ModelId::new(*id), *id)) diff --git a/crates/goose/src/providers/base.rs b/crates/goose/src/providers/base.rs index 05447494bcd0..b253afea9c38 100644 --- a/crates/goose/src/providers/base.rs +++ b/crates/goose/src/providers/base.rs @@ -481,6 +481,10 @@ pub trait Provider: Send + Sync { return None; } + if !canonical_model.tool_call && !self.get_model_config().toolshim { + return None; + } + let release_date = canonical_model.release_date.clone(); Some((model.clone(), release_date)) diff --git a/crates/goose/src/providers/openrouter.rs b/crates/goose/src/providers/openrouter.rs index 52466c6a34b5..9ce10f1000c6 100644 --- a/crates/goose/src/providers/openrouter.rs +++ b/crates/goose/src/providers/openrouter.rs @@ -311,7 +311,6 @@ impl Provider for OpenRouterProvider { Ok((message, ProviderUsage::new(response_model, usage))) } - /// Fetch supported models from OpenRouter API (only models with tool support) async fn fetch_supported_models(&self) -> Result, ProviderError> { let response = self .api_client @@ -350,32 +349,8 @@ impl Provider for OpenRouterProvider { let mut models: Vec = data .iter() .filter_map(|model| { - // Get the model ID let id = model.get("id").and_then(|v| v.as_str())?; - - // Check if the model supports tools - let supported_params = - match model.get("supported_parameters").and_then(|v| v.as_array()) { - Some(params) => params, - None => { - // If supported_parameters is missing, skip this model (assume no tool support) - tracing::debug!( - "Model '{}' missing supported_parameters field, skipping", - id - ); - return None; - } - }; - - let has_tool_support = supported_params - .iter() - .any(|param| param.as_str() == Some("tools")); - - if has_tool_support { - Some(id.to_string()) - } else { - None - } + Some(id.to_string()) }) .collect();