diff --git a/crates/agent_ui/src/agent_model_selector.rs b/crates/agent_ui/src/agent_model_selector.rs index c8b628c938e5be37ee3e10ca2a46dd2e59c78e84..f7b9157bbb9c07abac6a80dddfc014443165a712 100644 --- a/crates/agent_ui/src/agent_model_selector.rs +++ b/crates/agent_ui/src/agent_model_selector.rs @@ -11,7 +11,7 @@ use language_model::{ConfiguredModel, LanguageModelRegistry}; use picker::popover_menu::PickerPopoverMenu; use settings::update_settings_file; use std::sync::Arc; -use ui::{PopoverMenuHandle, Tooltip, prelude::*}; +use ui::{ButtonLike, PopoverMenuHandle, Tooltip, prelude::*}; pub struct AgentModelSelector { selector: Entity, @@ -94,20 +94,35 @@ impl Render for AgentModelSelector { fn render(&mut self, window: &mut Window, cx: &mut Context) -> impl IntoElement { let model = self.selector.read(cx).delegate.active_model(cx); let model_name = model + .as_ref() .map(|model| model.model.name().0) .unwrap_or_else(|| SharedString::from("No model selected")); + let provider_icon = model + .as_ref() + .map(|model| model.provider.icon()) + .unwrap_or_else(|| IconName::Ai); let focus_handle = self.focus_handle.clone(); PickerPopoverMenu::new( self.selector.clone(), - Button::new("active-model", model_name) - .label_size(LabelSize::Small) - .color(Color::Muted) - .icon(IconName::ChevronDown) - .icon_size(IconSize::XSmall) - .icon_position(IconPosition::End) - .icon_color(Color::Muted), + ButtonLike::new("active-model") + .child( + Icon::new(provider_icon) + .color(Color::Muted) + .size(IconSize::XSmall), + ) + .child( + Label::new(model_name) + .color(Color::Muted) + .size(LabelSize::Small) + .ml_0p5(), + ) + .child( + Icon::new(IconName::ChevronDown) + .color(Color::Muted) + .size(IconSize::XSmall), + ), move |window, cx| { Tooltip::for_action_in( "Change Model", diff --git a/crates/agent_ui/src/text_thread_editor.rs b/crates/agent_ui/src/text_thread_editor.rs index dcb239a46ddec79d7aa52c4180cb511e8b74ac71..d11deb790820ba18a7437ac50ed3d5b2e8d4c9c0 100644 --- a/crates/agent_ui/src/text_thread_editor.rs +++ b/crates/agent_ui/src/text_thread_editor.rs @@ -2120,12 +2120,21 @@ impl TextThreadEditor { let active_model = LanguageModelRegistry::read_global(cx) .default_model() .map(|default| default.model); - let focus_handle = self.editor().focus_handle(cx).clone(); let model_name = match active_model { Some(model) => model.name().0, None => SharedString::from("No model selected"), }; + let active_provider = LanguageModelRegistry::read_global(cx) + .default_model() + .map(|default| default.provider); + let provider_icon = match active_provider { + Some(provider) => provider.icon(), + None => IconName::Ai, + }; + + let focus_handle = self.editor().focus_handle(cx).clone(); + PickerPopoverMenu::new( self.language_model_selector.clone(), ButtonLike::new("active-model") @@ -2133,10 +2142,16 @@ impl TextThreadEditor { .child( h_flex() .gap_0p5() + .child( + Icon::new(provider_icon) + .color(Color::Muted) + .size(IconSize::XSmall), + ) .child( Label::new(model_name) + .color(Color::Muted) .size(LabelSize::Small) - .color(Color::Muted), + .ml_0p5(), ) .child( Icon::new(IconName::ChevronDown)