diff --git a/app/assets/bundled/svg/kimi.svg b/app/assets/bundled/svg/kimi.svg new file mode 100644 index 0000000000..8c206c9310 --- /dev/null +++ b/app/assets/bundled/svg/kimi.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/src/ai/llms.rs b/app/src/ai/llms.rs index 76c27b9d46..73ab376543 100644 --- a/app/src/ai/llms.rs +++ b/app/src/ai/llms.rs @@ -186,11 +186,19 @@ pub fn model_leading_icon(llm: &LLMInfo, flags: ModelIconFlags) -> Icon { Icon::Aws } else if flags.is_using_gemini_enterprise { Icon::GeminiEnterpriseAgentPlatform + } else if is_kimi_model(llm) { + Icon::KimiLogo } else { llm.provider.icon().unwrap_or(Icon::Agent) } } +/// Kimi is Fireworks-hosted, which the server reports as `LLMProvider::Unknown`, +/// so the provider enum can't carry its logo. +pub fn is_kimi_model(llm: &LLMInfo) -> bool { + llm.id.as_str().starts_with("kimi-") +} + /// Key for cached LLM metadata in user preferences. /// /// Note: this key used to store a single [`AvailableLLMs`] diff --git a/app/src/terminal/view/ambient_agent/model_selector.rs b/app/src/terminal/view/ambient_agent/model_selector.rs index 9c999783a2..63daa920e2 100644 --- a/app/src/terminal/view/ambient_agent/model_selector.rs +++ b/app/src/terminal/view/ambient_agent/model_selector.rs @@ -22,7 +22,7 @@ use crate::ai::custom_model_routers::is_custom_router_id; use crate::ai::execution_profiles::model_menu_items::is_auto; use crate::ai::harness_availability::{HarnessAvailabilityEvent, HarnessAvailabilityModel}; use crate::ai::harness_display::icon_for as harness_icon_for; -use crate::ai::llms::{LLMId, LLMPreferences, LLMPreferencesEvent}; +use crate::ai::llms::{LLMId, LLMPreferences, LLMPreferencesEvent, is_kimi_model}; use crate::editor::{ EditorView, Event as EditorEvent, PropagateAndNoOpEscapeKey, PropagateAndNoOpNavigationKeys, SingleLineEditorOptions, TextOptions, @@ -509,6 +509,8 @@ impl ModelSelector { let display_name = llm.menu_display_name(); let leading_icon = if is_custom_router_id(llm.id.as_str()) { Icon::Dataflow + } else if is_kimi_model(llm) { + Icon::KimiLogo } else { llm.provider.icon().unwrap_or(Icon::Agent) }; diff --git a/crates/warp_core/src/ui/icons.rs b/crates/warp_core/src/ui/icons.rs index 875055648d..3ebd9ee31b 100644 --- a/crates/warp_core/src/ui/icons.rs +++ b/crates/warp_core/src/ui/icons.rs @@ -275,6 +275,7 @@ pub enum Icon { ClaudeLogo, GeminiLogo, GrokLogo, + KimiLogo, OpenAILogo, XLogo, AmpLogo, @@ -623,6 +624,7 @@ impl From for &'static str { Icon::ClaudeLogo => "bundled/svg/claude.svg", Icon::GeminiLogo => "bundled/svg/gemini_cli.svg", Icon::GrokLogo => "bundled/svg/grok.svg", + Icon::KimiLogo => "bundled/svg/kimi.svg", Icon::OpenAILogo => "bundled/svg/openai.svg", Icon::XLogo => "bundled/svg/x-logo.svg", Icon::AmpLogo => "bundled/svg/amp.svg",