mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-12 03:48:56 +00:00
fix(bedrock): prefer regional endpoint host regions
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
parent
0272d8191e
commit
d8f7217b71
2 changed files with 76 additions and 3 deletions
|
|
@ -194,7 +194,8 @@ fn platform_region(
|
|||
.strip_suffix(".api.aws")
|
||||
.map(str::to_string)
|
||||
});
|
||||
let region = resolve_aws_region(host_region.as_deref(), ¶ms.aws, env)
|
||||
let region = host_region
|
||||
.or_else(|| resolve_aws_region(None, ¶ms.aws, env))
|
||||
.or_else(|| resolve_non_empty(None, env, &["AWS_DEFAULT_REGION"]))
|
||||
.ok_or_else(|| Error::Auth(AwsParams::REGION.missing("Claude Platform on AWS")))?;
|
||||
validated_region(region)
|
||||
|
|
@ -320,6 +321,43 @@ mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case::explicit_regional_endpoint(
|
||||
"https://aws-external-anthropic.us-west-2.api.aws",
|
||||
"us-east-1",
|
||||
"us-west-2"
|
||||
)]
|
||||
fn public_regional_host_precedes_configured_region(
|
||||
#[case] api_base: &str,
|
||||
#[case] configured_region: &str,
|
||||
#[case] expected_region: &str,
|
||||
) {
|
||||
let params = LitellmParams {
|
||||
api_base: Some(api_base.into()),
|
||||
aws: AwsParams {
|
||||
aws_region_name: Some(configured_region.into()),
|
||||
..Default::default()
|
||||
},
|
||||
..Default::default()
|
||||
};
|
||||
let env = |name: &str| {
|
||||
(name == "ANTHROPIC_AWS_WORKSPACE_ID").then(|| "workspace".into())
|
||||
};
|
||||
let url = BEDROCK_CLAUDE_PLATFORM_MESSAGES_CONFIG
|
||||
.get_complete_url(None, "claude-test", ¶ms, false, &env)
|
||||
.unwrap();
|
||||
let environment = BEDROCK_CLAUDE_PLATFORM_MESSAGES_CONFIG
|
||||
.validate_environment(vec![], None, "claude-test", ¶ms, &env)
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
url,
|
||||
"https://aws-external-anthropic.us-west-2.api.aws/v1/messages"
|
||||
);
|
||||
assert!(
|
||||
matches!(environment.auth, AuthScheme::AwsSigV4 { region, service: SERVICE, .. } if region == expected_region)
|
||||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case::default(json!({}), false)]
|
||||
#[case::override_empty(json!({"claude_platform_unsupported_params": []}), true)]
|
||||
|
|
|
|||
|
|
@ -250,9 +250,10 @@ fn mantle_region(
|
|||
params: &LitellmParams,
|
||||
env: &dyn Fn(&str) -> Option<String>,
|
||||
) -> Result<String, Error> {
|
||||
let region = resolve_non_empty(params.aws.aws_region_name.as_deref(), &|_| None, &[])
|
||||
let region = mantle_base(base, params, env)
|
||||
.and_then(|base| mantle_host_region(&base))
|
||||
.or_else(|| resolve_non_empty(params.aws.aws_region_name.as_deref(), &|_| None, &[]))
|
||||
.or_else(|| mantle_model(model).1)
|
||||
.or_else(|| mantle_base(base, params, env).and_then(|base| mantle_host_region(&base)))
|
||||
.or_else(|| resolve_non_empty(None, env, REGION_ENVS))
|
||||
.unwrap_or_else(|| "us-east-1".into());
|
||||
validated_region(region)
|
||||
|
|
@ -323,6 +324,40 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case::explicit_regional_endpoint(
|
||||
"https://bedrock-mantle.us-west-2.api.aws",
|
||||
"us-east-1",
|
||||
"us-west-2"
|
||||
)]
|
||||
fn public_regional_host_precedes_configured_region(
|
||||
#[case] api_base: &str,
|
||||
#[case] configured_region: &str,
|
||||
#[case] expected_region: &str,
|
||||
) {
|
||||
let params = LitellmParams {
|
||||
api_base: Some(api_base.into()),
|
||||
aws: AwsParams {
|
||||
aws_region_name: Some(configured_region.into()),
|
||||
..Default::default()
|
||||
},
|
||||
..Default::default()
|
||||
};
|
||||
let url = BEDROCK_MANTLE_MESSAGES_CONFIG
|
||||
.get_complete_url(None, "claude-test", ¶ms, false, &|_| None)
|
||||
.unwrap();
|
||||
let environment = BEDROCK_MANTLE_MESSAGES_CONFIG
|
||||
.validate_environment(vec![], None, "claude-test", ¶ms, &|_| None)
|
||||
.unwrap();
|
||||
assert_eq!(
|
||||
url,
|
||||
"https://bedrock-mantle.us-west-2.api.aws/anthropic/v1/messages"
|
||||
);
|
||||
assert!(
|
||||
matches!(environment.auth, AuthScheme::AwsSigV4 { region, service: "bedrock", .. } if region == expected_region)
|
||||
);
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[case::aws_default_region("AWS_DEFAULT_REGION", "eu-west-1")]
|
||||
fn aws_default_region_selects_mantle_endpoint(
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue