From 6cc1dad02368a39de4fddb3cb8aca8d5267b4f01 Mon Sep 17 00:00:00 2001 From: Filippo Mattia Menghi Date: Fri, 22 May 2026 11:59:06 +0200 Subject: [PATCH] Fix us-gov-{east,west}-1 Bedrock Sonnet 4.5 pricing (Fixes #27120) AWS GovCloud Bedrock pricing carries a +20% premium over the global Anthropic rates, not the +10% premium that applies to commercial US regions. Litellm's five us-gov Claude Sonnet 4.5 entries mirror the commercial-US prices (3.3e-06 input, 1.65e-05 output, 4.125e-06 cache write), undercharging customers by ~9%. Corrects all five affected entries in both model_prices_and_context_window.json and the bundled model_prices_and_context_window_backup.json to match AWS's published GovCloud rates (per https://aws.amazon.com/bedrock/pricing/): - input_cost_per_token 3.3e-06 -> 3.6e-06 ($3.60/MTok) - output_cost_per_token 1.65e-05 -> 1.8e-05 ($18.00/MTok) - cache_creation_input_token_cost 4.125e-06 -> 4.5e-06 ($4.50/MTok) - cache_read_input_token_cost 3.3e-07 -> 3.6e-07 ($0.36/MTok) - cache_creation_input_token_cost_above_1hr (added) ($7.20/MTok) Affected entries: - bedrock/us-gov-east-1/anthropic.claude-sonnet-4-5-20250929-v1:0 - bedrock/us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0 - bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0 - bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0 - us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0 New regression test tests/test_litellm/test_bedrock_usgov_pricing.py pins the corrected rates across all five entries and asserts the 1.2x global-to-us-gov ratio invariant, matching the pattern used by the existing Vertex and EU/AU/JP Bedrock pricing tests. --- ...odel_prices_and_context_window_backup.json | 45 +++++----- model_prices_and_context_window.json | 45 +++++----- .../test_bedrock_usgov_pricing.py | 89 +++++++++++++++++++ 3 files changed, 139 insertions(+), 40 deletions(-) create mode 100644 tests/test_litellm/test_bedrock_usgov_pricing.py diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 6a4a5dd6a03..ba5bc13dac3 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -8724,15 +8724,16 @@ "cache_creation_input_token_cost": 3.75e-07 }, "bedrock/us-gov-east-1/anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8745,15 +8746,16 @@ "supports_native_structured_output": true }, "bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8897,15 +8899,16 @@ "cache_creation_input_token_cost": 3.75e-07 }, "bedrock/us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8918,15 +8921,16 @@ "supports_native_structured_output": true }, "bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -31364,9 +31368,10 @@ "supports_native_structured_output": true }, "us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "input_cost_per_token_above_200k_tokens": 6.6e-06, "output_cost_per_token_above_200k_tokens": 2.475e-05, "cache_creation_input_token_cost_above_200k_tokens": 8.25e-06, @@ -31376,7 +31381,7 @@ "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 31a5993a240..705c2971dca 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -8737,15 +8737,16 @@ "cache_creation_input_token_cost": 3.75e-07 }, "bedrock/us-gov-east-1/anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8758,15 +8759,16 @@ "supports_native_structured_output": true }, "bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8910,15 +8912,16 @@ "cache_creation_input_token_cost": 3.75e-07 }, "bedrock/us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -8931,15 +8934,16 @@ "supports_native_structured_output": true }, "bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "litellm_provider": "bedrock", "max_input_tokens": 200000, "max_output_tokens": 8192, "max_tokens": 8192, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, @@ -31420,9 +31424,10 @@ "supports_native_structured_output": true }, "us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 4.5e-06, + "cache_creation_input_token_cost_above_1hr": 7.2e-06, + "cache_read_input_token_cost": 3.6e-07, + "input_cost_per_token": 3.6e-06, "input_cost_per_token_above_200k_tokens": 6.6e-06, "output_cost_per_token_above_200k_tokens": 2.475e-05, "cache_creation_input_token_cost_above_200k_tokens": 8.25e-06, @@ -31432,7 +31437,7 @@ "max_output_tokens": 64000, "max_tokens": 64000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.8e-05, "supports_assistant_prefill": true, "supports_computer_use": true, "supports_function_calling": true, diff --git a/tests/test_litellm/test_bedrock_usgov_pricing.py b/tests/test_litellm/test_bedrock_usgov_pricing.py new file mode 100644 index 00000000000..03ae25858a8 --- /dev/null +++ b/tests/test_litellm/test_bedrock_usgov_pricing.py @@ -0,0 +1,89 @@ +""" +Validate AWS GovCloud (Bedrock us-gov-*) Anthropic pricing entries. + +AWS Bedrock pricing in GovCloud carries a +20% premium over the global +Anthropic prices (not the +10% commercial-US premium). Until 2026-05-22 +these entries silently mirrored commercial US, undercharging customers +by ~9%. + +Source: https://aws.amazon.com/bedrock/pricing/ + + Sonnet 4.5 in us-gov-* (per million tokens): + input = $3.60 + output = $18.00 + cache write 5m = $4.50 + cache write 1h = $7.20 + cache read = $0.36 + +Reference: https://github.com/BerriAI/litellm/issues/27120 +""" + +import json +import os + +import pytest + + +@pytest.fixture(scope="module") +def model_data(): + json_path = os.path.join( + os.path.dirname(__file__), "../../model_prices_and_context_window.json" + ) + with open(json_path) as f: + return json.load(f) + + +SONNET_4_5_USGOV_KEYS = [ + "bedrock/us-gov-east-1/anthropic.claude-sonnet-4-5-20250929-v1:0", + "bedrock/us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0", + "bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0", + "bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0", + "us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0", +] + + +@pytest.mark.parametrize("model_key", SONNET_4_5_USGOV_KEYS) +def test_usgov_sonnet_4_5_pricing(model_data, model_key): + """Each us-gov sonnet-4-5 entry must carry the +20%-over-global rates + that AWS publishes on the GovCloud pricing page. + """ + assert model_key in model_data, f"Missing model entry: {model_key}" + info = model_data[model_key] + + assert info["input_cost_per_token"] == 3.6e-06, ( + f"{model_key}: input_cost_per_token should be $3.60/MTok " + f"(got {info['input_cost_per_token']})" + ) + assert ( + info["output_cost_per_token"] == 1.8e-05 + ), f"{model_key}: output_cost_per_token should be $18.00/MTok" + assert ( + info["cache_creation_input_token_cost"] == 4.5e-06 + ), f"{model_key}: 5m cache write should be $4.50/MTok" + assert ( + info["cache_creation_input_token_cost_above_1hr"] == 7.2e-06 + ), f"{model_key}: 1h cache write should be $7.20/MTok" + assert ( + info["cache_read_input_token_cost"] == 3.6e-07 + ), f"{model_key}: cache read should be $0.36/MTok" + + +def test_usgov_carries_20_percent_premium_over_global(model_data): + """The us-gov rates must equal 1.2x the global anthropic.* rates, + matching AWS's documented GovCloud uplift. + """ + global_key = "anthropic.claude-sonnet-4-5-20250929-v1:0" + usgov_key = "bedrock/us-gov-west-1/anthropic.claude-sonnet-4-5-20250929-v1:0" + global_info = model_data[global_key] + usgov_info = model_data[usgov_key] + for field in ( + "input_cost_per_token", + "output_cost_per_token", + "cache_creation_input_token_cost", + "cache_creation_input_token_cost_above_1hr", + "cache_read_input_token_cost", + ): + ratio = usgov_info[field] / global_info[field] + assert ( + abs(ratio - 1.2) < 1e-9 + ), f"{field}: us-gov / global ratio is {ratio}, expected 1.2"