fix(bedrock): normalize aws-bedrock alias and harden docs/tests

This commit is contained in:
Chummy 2026-02-19 18:48:24 +08:00
parent 0e4e0d590d
commit a0098de28c
3 changed files with 39 additions and 3 deletions

View file

@ -2,7 +2,7 @@
This document maps provider IDs, aliases, and credential environment variables. This document maps provider IDs, aliases, and credential environment variables.
Last verified: **February 18, 2026**. Last verified: **February 19, 2026**.
## How to List Providers ## How to List Providers
@ -41,7 +41,7 @@ credential is not reused for fallback providers.
| `zai` | `z.ai` | No | `ZAI_API_KEY` | | `zai` | `z.ai` | No | `ZAI_API_KEY` |
| `glm` | `zhipu` | No | `GLM_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` | | `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` | | `qianfan` | `baidu` | No | `QIANFAN_API_KEY` |
| `qwen` | `dashscope`, `qwen-intl`, `dashscope-intl`, `qwen-us`, `dashscope-us` | No | `DASHSCOPE_API_KEY` | | `qwen` | `dashscope`, `qwen-intl`, `dashscope-intl`, `qwen-us`, `dashscope-us` | No | `DASHSCOPE_API_KEY` |
| `groq` | — | No | `GROQ_API_KEY` | | `groq` | — | No | `GROQ_API_KEY` |

View file

@ -505,6 +505,7 @@ fn canonical_provider_name(provider_name: &str) -> &str {
"google" | "google-gemini" => "gemini", "google" | "google-gemini" => "gemini",
"kimi_coding" | "kimi_for_coding" => "kimi-code", "kimi_coding" | "kimi_for_coding" => "kimi-code",
"nvidia-nim" | "build.nvidia.com" => "nvidia", "nvidia-nim" | "build.nvidia.com" => "nvidia",
"aws-bedrock" => "bedrock",
_ => provider_name, _ => provider_name,
} }
} }
@ -547,7 +548,7 @@ fn default_model_for_provider(provider: &str) -> String {
"ollama" => "llama3.2".into(), "ollama" => "llama3.2".into(),
"gemini" => "gemini-2.5-pro".into(), "gemini" => "gemini-2.5-pro".into(),
"kimi-code" => "kimi-for-coding".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(), "nvidia" => "meta/llama-3.3-70b-instruct".into(),
"astrai" => "anthropic/claude-sonnet-4.6".into(), "astrai" => "anthropic/claude-sonnet-4.6".into(),
_ => "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("gemini"), "gemini-2.5-pro");
assert_eq!(default_model_for_provider("google"), "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("kimi-code"), "kimi-for-coding");
assert_eq!(
default_model_for_provider("bedrock"),
"anthropic.claude-sonnet-4-5-20250929-v1:0"
);
assert_eq!( assert_eq!(
default_model_for_provider("google-gemini"), default_model_for_provider("google-gemini"),
"gemini-2.5-pro" "gemini-2.5-pro"
@ -5081,6 +5086,7 @@ mod tests {
assert_eq!(canonical_provider_name("zai-cn"), "zai"); assert_eq!(canonical_provider_name("zai-cn"), "zai");
assert_eq!(canonical_provider_name("z.ai-global"), "zai"); assert_eq!(canonical_provider_name("z.ai-global"), "zai");
assert_eq!(canonical_provider_name("nvidia-nim"), "nvidia"); 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"); 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())); assert!(ids.contains(&"anthropic/claude-sonnet-4.6".to_string()));
} }
#[test]
fn curated_models_for_bedrock_include_verified_model_ids() {
let ids: Vec<String> = 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] #[test]
fn curated_models_for_moonshot_drop_deprecated_aliases() { fn curated_models_for_moonshot_drop_deprecated_aliases() {
let ids: Vec<String> = curated_models_for_provider("moonshot") let ids: Vec<String> = curated_models_for_provider("moonshot")
@ -5229,6 +5248,10 @@ mod tests {
curated_models_for_provider("nvidia"), curated_models_for_provider("nvidia"),
curated_models_for_provider("build.nvidia.com") curated_models_for_provider("build.nvidia.com")
); );
assert_eq!(
curated_models_for_provider("bedrock"),
curated_models_for_provider("aws-bedrock")
);
} }
#[test] #[test]

View file

@ -1219,6 +1219,19 @@ mod tests {
assert!(resolved.is_none()); 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] #[test]
fn regional_alias_predicates_cover_expected_variants() { fn regional_alias_predicates_cover_expected_variants() {
assert!(is_moonshot_alias("moonshot")); assert!(is_moonshot_alias("moonshot"));