From 8c5d8b8d065c9bfb0b9b237f9f9ff7770f7ea9cc Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Tue, 10 Mar 2026 18:04:31 -0400 Subject: [PATCH] Hide unconfigured LLM providers in arc doctor output Only show providers where the API key is set, reducing noise for users who only have one or two providers configured. Co-Authored-By: Claude Opus 4.6 (1M context) --- lib/crates/arc-cli/src/doctor.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/crates/arc-cli/src/doctor.rs b/lib/crates/arc-cli/src/doctor.rs index fd36b70c6..f91557779 100644 --- a/lib/crates/arc-cli/src/doctor.rs +++ b/lib/crates/arc-cli/src/doctor.rs @@ -216,17 +216,15 @@ pub fn check_llm_providers( statuses: &[(Provider, bool)], live_results: Option<&[(Provider, Result<(), String>)]>, ) -> CheckResult { - let configured: Vec<_> = statuses.iter().filter(|(_, set)| *set).collect(); - let total = statuses.len(); - let count = configured.len(); + let count = statuses.iter().filter(|(_, set)| *set).count(); let mut details: Vec = statuses .iter() - .map(|(provider, set)| { + .filter(|(_, set)| *set) + .map(|(provider, _)| { let env_vars = provider.api_key_env_vars().join(" or "); - let status_text = if *set { "set" } else { "not set" }; CheckDetail { - text: format!("{provider} ({env_vars}): {status_text}"), + text: format!("{provider} ({env_vars}): set"), } }) .collect(); @@ -252,7 +250,7 @@ pub fn check_llm_providers( CheckResult { name: "LLM providers".to_string(), status: CheckStatus::Error, - summary: format!("{count} of {total} configured"), + summary: "none configured".to_string(), details, remediation: Some("Set at least one provider API key".to_string()), } @@ -261,7 +259,7 @@ pub fn check_llm_providers( CheckResult { name: "LLM providers".to_string(), status: CheckStatus::Warning, - summary: format!("{count} of {total} configured (connectivity issues)"), + summary: format!("{count} configured (connectivity issues)"), details, remediation: Some(format!("Connectivity issues with: {}", names.join(", "))), } @@ -269,7 +267,7 @@ pub fn check_llm_providers( CheckResult { name: "LLM providers".to_string(), status: CheckStatus::Pass, - summary: format!("{count} of {total} configured"), + summary: format!("{count} configured"), details, remediation: None, } @@ -1243,7 +1241,7 @@ mod tests { let statuses: Vec<(Provider, bool)> = Provider::ALL.iter().map(|p| (*p, true)).collect(); let result = check_llm_providers(&statuses, None); assert_eq!(result.status, CheckStatus::Pass); - assert!(result.summary.contains("7 of 7")); + assert!(result.summary.contains("7 configured")); } #[test] @@ -1257,7 +1255,7 @@ mod tests { statuses[4].1 = true; // Zai let result = check_llm_providers(&statuses, None); assert_eq!(result.status, CheckStatus::Pass); - assert!(result.summary.contains("5 of 7")); + assert!(result.summary.contains("5 configured")); } #[test] @@ -1265,7 +1263,7 @@ mod tests { let statuses: Vec<(Provider, bool)> = Provider::ALL.iter().map(|p| (*p, false)).collect(); let result = check_llm_providers(&statuses, None); assert_eq!(result.status, CheckStatus::Error); - assert!(result.summary.contains("0 of 7")); + assert!(result.summary.contains("none configured")); } #[test]