From a0098de28c6cff3d25d1a7314e92c4b7dd733dd0 Mon Sep 17 00:00:00 2001 From: Chummy Date: Thu, 19 Feb 2026 18:48:24 +0800 Subject: [PATCH] fix(bedrock): normalize aws-bedrock alias and harden docs/tests --- docs/providers-reference.md | 4 ++-- src/onboard/wizard.rs | 25 ++++++++++++++++++++++++- src/providers/mod.rs | 13 +++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/docs/providers-reference.md b/docs/providers-reference.md index eae0b6d..a399dc7 100644 --- a/docs/providers-reference.md +++ b/docs/providers-reference.md @@ -2,7 +2,7 @@ This document maps provider IDs, aliases, and credential environment variables. -Last verified: **February 18, 2026**. +Last verified: **February 19, 2026**. ## How to List Providers @@ -41,7 +41,7 @@ credential is not reused for fallback providers. | `zai` | `z.ai` | No | `ZAI_API_KEY` | | `glm` | `zhipu` | No | `GLM_API_KEY` | | `minimax` | `minimax-intl`, `minimax-io`, `minimax-global`, `minimax-cn`, `minimaxi`, `minimax-oauth`, `minimax-oauth-cn`, `minimax-portal`, `minimax-portal-cn` | No | `MINIMAX_OAUTH_TOKEN`, `MINIMAX_API_KEY` | -| `bedrock` | `aws-bedrock` | No | `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` + `AWS_REGION` | +| `bedrock` | `aws-bedrock` | No | `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` (optional: `AWS_REGION`) | | `qianfan` | `baidu` | No | `QIANFAN_API_KEY` | | `qwen` | `dashscope`, `qwen-intl`, `dashscope-intl`, `qwen-us`, `dashscope-us` | No | `DASHSCOPE_API_KEY` | | `groq` | — | No | `GROQ_API_KEY` | diff --git a/src/onboard/wizard.rs b/src/onboard/wizard.rs index 11c1c2d..6747e66 100644 --- a/src/onboard/wizard.rs +++ b/src/onboard/wizard.rs @@ -505,6 +505,7 @@ fn canonical_provider_name(provider_name: &str) -> &str { "google" | "google-gemini" => "gemini", "kimi_coding" | "kimi_for_coding" => "kimi-code", "nvidia-nim" | "build.nvidia.com" => "nvidia", + "aws-bedrock" => "bedrock", _ => provider_name, } } @@ -547,7 +548,7 @@ fn default_model_for_provider(provider: &str) -> String { "ollama" => "llama3.2".into(), "gemini" => "gemini-2.5-pro".into(), "kimi-code" => "kimi-for-coding".into(), - "bedrock" | "aws-bedrock" => "anthropic.claude-sonnet-4-5-20250929-v1:0".into(), + "bedrock" => "anthropic.claude-sonnet-4-5-20250929-v1:0".into(), "nvidia" => "meta/llama-3.3-70b-instruct".into(), "astrai" => "anthropic/claude-sonnet-4.6".into(), _ => "anthropic/claude-sonnet-4.6".into(), @@ -5047,6 +5048,10 @@ mod tests { assert_eq!(default_model_for_provider("gemini"), "gemini-2.5-pro"); assert_eq!(default_model_for_provider("google"), "gemini-2.5-pro"); assert_eq!(default_model_for_provider("kimi-code"), "kimi-for-coding"); + assert_eq!( + default_model_for_provider("bedrock"), + "anthropic.claude-sonnet-4-5-20250929-v1:0" + ); assert_eq!( default_model_for_provider("google-gemini"), "gemini-2.5-pro" @@ -5081,6 +5086,7 @@ mod tests { assert_eq!(canonical_provider_name("zai-cn"), "zai"); assert_eq!(canonical_provider_name("z.ai-global"), "zai"); assert_eq!(canonical_provider_name("nvidia-nim"), "nvidia"); + assert_eq!(canonical_provider_name("aws-bedrock"), "bedrock"); assert_eq!(canonical_provider_name("build.nvidia.com"), "nvidia"); } @@ -5130,6 +5136,19 @@ mod tests { assert!(ids.contains(&"anthropic/claude-sonnet-4.6".to_string())); } + #[test] + fn curated_models_for_bedrock_include_verified_model_ids() { + let ids: Vec = curated_models_for_provider("bedrock") + .into_iter() + .map(|(id, _)| id) + .collect(); + + assert!(ids.contains(&"anthropic.claude-sonnet-4-6".to_string())); + assert!(ids.contains(&"anthropic.claude-opus-4-6-v1".to_string())); + assert!(ids.contains(&"anthropic.claude-haiku-4-5-20251001-v1:0".to_string())); + assert!(ids.contains(&"anthropic.claude-sonnet-4-5-20250929-v1:0".to_string())); + } + #[test] fn curated_models_for_moonshot_drop_deprecated_aliases() { let ids: Vec = curated_models_for_provider("moonshot") @@ -5229,6 +5248,10 @@ mod tests { curated_models_for_provider("nvidia"), curated_models_for_provider("build.nvidia.com") ); + assert_eq!( + curated_models_for_provider("bedrock"), + curated_models_for_provider("aws-bedrock") + ); } #[test] diff --git a/src/providers/mod.rs b/src/providers/mod.rs index a45d533..9a6aead 100644 --- a/src/providers/mod.rs +++ b/src/providers/mod.rs @@ -1219,6 +1219,19 @@ mod tests { assert!(resolved.is_none()); } + #[test] + fn resolve_provider_credential_bedrock_uses_internal_credential_path() { + let _generic_guard = EnvGuard::set("API_KEY", Some("generic-key")); + let _override_guard = EnvGuard::set("OPENROUTER_API_KEY", Some("openrouter-key")); + + assert_eq!( + resolve_provider_credential("bedrock", Some("explicit")), + Some("explicit".to_string()) + ); + assert!(resolve_provider_credential("bedrock", None).is_none()); + assert!(resolve_provider_credential("aws-bedrock", None).is_none()); + } + #[test] fn regional_alias_predicates_cover_expected_variants() { assert!(is_moonshot_alias("moonshot"));