Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6ae9179

Browse files
committed
Refine TUI AI hint layout
1 parent 1d207ab commit 6ae9179

2 files changed

Lines changed: 257 additions & 95 deletions

File tree

trueflow/src/ai.rs

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ pub fn resolve_ai_availability(config: &AiConfig, env: &AiEnvironment) -> AiAvai
400400
.copied()
401401
.map(|provider| AiAvailability::Ready {
402402
provider,
403-
model: config.model.clone(),
403+
model: effective_model_for_provider(provider, &config.model),
404404
})
405405
.unwrap_or_else(|| AiAvailability::Unavailable {
406406
reason: format!(
@@ -413,28 +413,31 @@ pub fn resolve_ai_availability(config: &AiConfig, env: &AiEnvironment) -> AiAvai
413413
detected,
414414
},
415415
AiProviderConfig::Anthropic => {
416-
resolve_explicit_provider(AiProvider::Anthropic, config.model.clone(), env, detected)
416+
resolve_explicit_provider(AiProvider::Anthropic, &config.model, env, detected)
417417
}
418418
AiProviderConfig::OpenAi => {
419-
resolve_explicit_provider(AiProvider::OpenAi, config.model.clone(), env, detected)
419+
resolve_explicit_provider(AiProvider::OpenAi, &config.model, env, detected)
420420
}
421421
AiProviderConfig::ClaudeCli => {
422-
resolve_explicit_provider(AiProvider::ClaudeCli, config.model.clone(), env, detected)
422+
resolve_explicit_provider(AiProvider::ClaudeCli, &config.model, env, detected)
423423
}
424424
AiProviderConfig::CodexCli => {
425-
resolve_explicit_provider(AiProvider::CodexCli, config.model.clone(), env, detected)
425+
resolve_explicit_provider(AiProvider::CodexCli, &config.model, env, detected)
426426
}
427427
}
428428
}
429429

430430
fn resolve_explicit_provider(
431431
provider: AiProvider,
432-
model: String,
432+
configured_model: &str,
433433
env: &AiEnvironment,
434434
detected: Vec<AiProvider>,
435435
) -> AiAvailability {
436436
if env.has_provider(provider) {
437-
AiAvailability::Ready { provider, model }
437+
AiAvailability::Ready {
438+
provider,
439+
model: effective_model_for_provider(provider, configured_model),
440+
}
438441
} else {
439442
AiAvailability::Unavailable {
440443
reason: format!("{} credentials or executable not found", provider.label()),
@@ -443,6 +446,20 @@ fn resolve_explicit_provider(
443446
}
444447
}
445448

449+
pub fn effective_model_for_provider(provider: AiProvider, configured_model: &str) -> String {
450+
if configured_model != "auto" {
451+
return configured_model.to_string();
452+
}
453+
fast_default_model_for_provider(provider).to_string()
454+
}
455+
456+
pub fn fast_default_model_for_provider(provider: AiProvider) -> &'static str {
457+
match provider {
458+
AiProvider::Anthropic | AiProvider::ClaudeCli => "claude-3-5-haiku-latest",
459+
AiProvider::OpenAi | AiProvider::CodexCli => "gpt-5-mini",
460+
}
461+
}
462+
446463
fn provider_list(providers: &[AiProvider]) -> String {
447464
providers
448465
.iter()
@@ -642,6 +659,22 @@ mod tests {
642659
);
643660
}
644661

662+
#[test]
663+
fn effective_model_uses_fast_provider_default_for_auto_model() {
664+
assert_eq!(
665+
effective_model_for_provider(AiProvider::CodexCli, "auto"),
666+
"gpt-5-mini"
667+
);
668+
assert_eq!(
669+
effective_model_for_provider(AiProvider::ClaudeCli, "auto"),
670+
"claude-3-5-haiku-latest"
671+
);
672+
assert_eq!(
673+
effective_model_for_provider(AiProvider::CodexCli, "gpt-4.1-mini"),
674+
"gpt-4.1-mini"
675+
);
676+
}
677+
645678
#[test]
646679
fn detection_prefers_api_keys_before_cli_tools() {
647680
let env = AiEnvironment::for_tests(true, true, ["claude", "codex"]);
@@ -677,10 +710,13 @@ mod tests {
677710
availability,
678711
AiAvailability::Ready {
679712
provider: AiProvider::OpenAi,
680-
model: "auto".to_string(),
713+
model: "gpt-5-mini".to_string(),
681714
}
682715
);
683-
assert_eq!(availability.modeline_text(), "AI: ready (OpenAI)");
716+
assert_eq!(
717+
availability.modeline_text(),
718+
"AI: ready (OpenAI / gpt-5-mini)"
719+
);
684720
}
685721

686722
#[test]

0 commit comments

Comments
 (0)