From dc19e47ae8bfc8a21df4cdf31b73f947a3798e46 Mon Sep 17 00:00:00 2001 From: jeremy <94247773+1jehuang@users.noreply.github.com> Date: Mon, 3 Aug 2026 01:17:13 -0700 Subject: [PATCH 1/2] fix: avoid duplicate compatible-provider effort rows (fixes #742) --- crates/jcode-tui/src/tui/app/inline_interactive.rs | 3 ++- .../src/tui/app/inline_interactive_placeholder_routes.rs | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/jcode-tui/src/tui/app/inline_interactive.rs b/crates/jcode-tui/src/tui/app/inline_interactive.rs index fa786718bd..3ba2416254 100644 --- a/crates/jcode-tui/src/tui/app/inline_interactive.rs +++ b/crates/jcode-tui/src/tui/app/inline_interactive.rs @@ -4120,9 +4120,10 @@ mod tests { assert!(route_supports_reasoning_effort("openai-oauth")); assert!(route_supports_reasoning_effort("openai-api-key")); assert!(route_supports_reasoning_effort("openrouter")); - assert!(route_supports_reasoning_effort( + assert!(!route_supports_reasoning_effort( "openai-compatible:llamacpp" )); + assert!(!route_supports_reasoning_effort("openai-compatible:zai")); assert!(!route_supports_reasoning_effort("copilot")); assert!(!route_supports_reasoning_effort("bedrock")); assert!(!route_supports_reasoning_effort("https")); diff --git a/crates/jcode-tui/src/tui/app/inline_interactive_placeholder_routes.rs b/crates/jcode-tui/src/tui/app/inline_interactive_placeholder_routes.rs index cab0de0b10..9c16a3b939 100644 --- a/crates/jcode-tui/src/tui/app/inline_interactive_placeholder_routes.rs +++ b/crates/jcode-tui/src/tui/app/inline_interactive_placeholder_routes.rs @@ -40,7 +40,9 @@ pub(super) fn route_supports_reasoning_effort(api_method: &str) -> bool { | Method::OpenAIOAuth | Method::OpenAIApiKey | Method::OpenRouter => true, - Method::OpenAiCompatible { profile_id } => profile_id.is_some(), + // Named OpenAI-compatible profiles expose effort through `/effort`. + // Expanding them here creates one duplicate picker row per effort. + Method::OpenAiCompatible { .. } => false, Method::JcodeSubscription | Method::Copilot | Method::Cursor From f044816bf624a913fc66899bf3bc8de7fdfd380b Mon Sep 17 00:00:00 2001 From: jeremy <94247773+1jehuang@users.noreply.github.com> Date: Mon, 3 Aug 2026 01:17:13 -0700 Subject: [PATCH 2/2] fix: scope fast badge to OpenAI providers (fixes #739) --- crates/jcode-tui/src/tui/info_widget_model.rs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/crates/jcode-tui/src/tui/info_widget_model.rs b/crates/jcode-tui/src/tui/info_widget_model.rs index b4c9bec139..0d70d33eca 100644 --- a/crates/jcode-tui/src/tui/info_widget_model.rs +++ b/crates/jcode-tui/src/tui/info_widget_model.rs @@ -334,7 +334,11 @@ fn append_model_runtime_metadata(spans: &mut Vec>, data: &InfoWidg )); } - if let Some(tier) = data.service_tier.as_deref().and_then(short_service_tier) { + let is_openai = data + .provider_name + .as_deref() + .is_some_and(|provider| provider.trim().to_ascii_lowercase().starts_with("openai")); + if is_openai && let Some(tier) = data.service_tier.as_deref().and_then(short_service_tier) { spans.push(Span::styled(" ", Style::default())); spans.push(Span::styled( format!("[{tier}]"), @@ -436,7 +440,8 @@ mod tests { #[test] fn model_widget_and_overview_show_same_runtime_metadata() { let rect = Rect::new(0, 0, 40, 8); - let data = data(); + let mut data = data(); + data.provider_name = Some("openai".to_string()); let independent = first_line_text(render_model_widget(&data, rect)); let overview = first_line_text(render_model_info(&data, rect)); @@ -446,4 +451,15 @@ mod tests { assert!(overview.contains("(hi)")); assert!(overview.contains("[fast]")); } + + #[test] + fn non_openai_provider_hides_openai_service_tier() { + let rect = Rect::new(0, 0, 40, 8); + let mut data = data(); + data.model = Some("deepseek-v4-flash".to_string()); + data.provider_name = Some("deepseek".to_string()); + + assert!(!first_line_text(render_model_widget(&data, rect)).contains("[fast]")); + assert!(!first_line_text(render_model_info(&data, rect)).contains("[fast]")); + } }