From eaf4f8f654944524d9cfab7e03e38e6e477c0b5c Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Wed, 14 May 2025 16:21:41 +0300 Subject: [PATCH] agent: Don't duplicate recommended models in all models list (#30692) Release Notes: - N/A --- .../src/language_model_selector.rs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/crates/language_model_selector/src/language_model_selector.rs b/crates/language_model_selector/src/language_model_selector.rs index e1dbb1cc42f499a8c5e5b2ca35f46c789107d4d8..84e81046063374202d50905b80d53d6b88854ac6 100644 --- a/crates/language_model_selector/src/language_model_selector.rs +++ b/crates/language_model_selector/src/language_model_selector.rs @@ -326,8 +326,14 @@ struct GroupedModels { impl GroupedModels { pub fn new(other: Vec, recommended: Vec) -> Self { + let recommended_ids: HashSet<_> = recommended.iter().map(|info| info.model.id()).collect(); + let mut other_by_provider: IndexMap<_, Vec> = IndexMap::default(); for model in other { + if recommended_ids.contains(&model.model.id()) { + continue; + } + let provider = model.model.provider_id(); if let Some(models) = other_by_provider.get_mut(&provider) { models.push(model); @@ -885,4 +891,26 @@ mod tests { let results = matcher.fuzzy_search("z4n"); assert_models_eq(results, vec!["zed/gpt-4.1-nano"]); } + + #[gpui::test] + fn test_exclude_recommended_models(_cx: &mut TestAppContext) { + let recommended_models = create_models(vec![("zed", "claude")]); + let all_models = create_models(vec![ + ("zed", "claude"), // Should be filtered out from "other" + ("zed", "gemini"), + ("copilot", "o3"), + ]); + + let grouped_models = GroupedModels::new(all_models, recommended_models); + + let actual_other_models = grouped_models + .other + .values() + .flatten() + .cloned() + .collect::>(); + + // Recommended models should not appear in "other" + assert_models_eq(actual_other_models, vec!["zed/gemini", "copilot/o3"]); + } }