diff --git a/crates/jcode-base/src/provider/mod.rs b/crates/jcode-base/src/provider/mod.rs index 0a9b2d7d2..0de4bfc9c 100644 --- a/crates/jcode-base/src/provider/mod.rs +++ b/crates/jcode-base/src/provider/mod.rs @@ -699,7 +699,9 @@ impl MultiProvider { }; provider.set_model(model)?; registry.set_active_compatible_profile(profile_id); - self.set_active_provider(ActiveProvider::OpenRouter); + // NOTE: Do NOT call set_active_provider(ActiveProvider::OpenRouter) here + // because it clears the active compatible profile we just set above. + // The compatible profile mechanism handles routing independently. Ok(()) } diff --git a/crates/jcode-base/src/provider/openrouter.rs b/crates/jcode-base/src/provider/openrouter.rs index 6caf84578..40089fc1d 100644 --- a/crates/jcode-base/src/provider/openrouter.rs +++ b/crates/jcode-base/src/provider/openrouter.rs @@ -1525,6 +1525,17 @@ impl OpenRouterProvider { pub(crate) fn load_usable_model_disk_cache_entry( &self, ) -> Option { + // For direct OpenAI-compatible profiles (e.g. DeepSeek), try the + // profile-specific namespace first so we don't fall through to a + // blocking fetch_models_from_api call every time. + if let Some(profile_id) = self.profile_id.as_deref() { + if let Some(entry) = + jcode_provider_openrouter::load_disk_cache_entry_for_namespace(profile_id) + && self.model_disk_cache_source_matches(&entry) + { + return Some(entry); + } + } load_disk_cache_entry().filter(|entry| self.model_disk_cache_source_matches(entry)) } diff --git a/crates/jcode-provider-openrouter/src/lib.rs b/crates/jcode-provider-openrouter/src/lib.rs index a9fa17f71..d8674190d 100644 --- a/crates/jcode-provider-openrouter/src/lib.rs +++ b/crates/jcode-provider-openrouter/src/lib.rs @@ -714,7 +714,7 @@ pub fn parse_provider_routing_from_env() -> ProviderRouting { pub fn is_kimi_model(model: &str) -> bool { let lower = model.to_lowercase(); - lower.contains("moonshotai/") || lower.contains("kimi-k2") || lower.contains("kimi-k2.5") + lower.contains("moonshotai/") || lower.contains("kimi-k2") || lower.contains("kimi-k2.5") || lower.contains("kimi-for-coding") } pub fn rank_providers_from_endpoints(endpoints: &[EndpointInfo]) -> Vec {