From 5fa057b07710e89bd2ea39e8a8524950d895d3b1 Mon Sep 17 00:00:00 2001 From: Mohammad Ali Farhan Date: Sat, 8 Aug 2026 14:28:18 +0530 Subject: [PATCH 1/2] fix(pricing): restore Azure gpt-5.6 terra/luna rates to Azure's published prices OpenAI cut terra 20% and luna 80% on 2026-07-30. 4d43080a7 mirrored that cut onto the azure/ rows on the assumption that Azure follows OpenAI's list price. Azure has not adopted the cut: Microsoft still publishes $1.00/1M input and $6.00/1M output for luna global, and $1.10/$6.60 for the us/eu data zones. That made LiteLLM report 5x less than Azure actually bills for luna and 20% less for terra, on every azure/ gpt-5.6 deployment. Restore the 60 affected fields across the six azure global/us/eu terra and luna rows to their pre-4d43080a7 values, in both cost maps. Input, output, cache-read, priority, and above-272k variants all scale together. sol is untouched, as are the openai/ and bedrock_mantle rows, whose cut is correct. The regression test parametrization already covered the global and eu rows; add the two us rows so azure/us/gpt-5.6-luna, the deployment named in the report, is pinned too. Fixes #36094 --- ...odel_prices_and_context_window_backup.json | 120 +++++++++--------- model_prices_and_context_window.json | 120 +++++++++--------- .../llm_cost_calc/test_llm_cost_calc_utils.py | 10 +- 3 files changed, 126 insertions(+), 124 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index d954e33da9c5..1ccf94c6c22e 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -6431,23 +6431,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-terra": { - "cache_read_input_token_cost": 2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4e-07, - "cache_read_input_token_cost_priority": 4e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 8e-07, - "input_cost_per_token": 2e-06, - "input_cost_per_token_above_272k_tokens": 4e-06, - "input_cost_per_token_priority": 4e-06, - "input_cost_per_token_above_272k_tokens_priority": 8e-06, + "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_priority": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 1e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_priority": 5e-06, + "input_cost_per_token_above_272k_tokens_priority": 1e-05, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.2e-05, - "output_cost_per_token_above_272k_tokens": 1.8e-05, - "output_cost_per_token_priority": 2.4e-05, - "output_cost_per_token_above_272k_tokens_priority": 3.6e-05, + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_priority": 3e-05, + "output_cost_per_token_above_272k_tokens_priority": 4.5e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6476,23 +6476,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-luna": { - "cache_read_input_token_cost": 2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4e-08, - "cache_read_input_token_cost_priority": 4e-08, - "cache_read_input_token_cost_above_272k_tokens_priority": 8e-08, - "input_cost_per_token": 2e-07, - "input_cost_per_token_above_272k_tokens": 4e-07, - "input_cost_per_token_priority": 4e-07, - "input_cost_per_token_above_272k_tokens_priority": 8e-07, + "cache_read_input_token_cost": 1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2e-07, + "cache_read_input_token_cost_priority": 2e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 4e-07, + "input_cost_per_token": 1e-06, + "input_cost_per_token_above_272k_tokens": 2e-06, + "input_cost_per_token_priority": 2e-06, + "input_cost_per_token_above_272k_tokens_priority": 4e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.2e-06, - "output_cost_per_token_above_272k_tokens": 1.8e-06, - "output_cost_per_token_priority": 2.4e-06, - "output_cost_per_token_above_272k_tokens_priority": 3.6e-06, + "output_cost_per_token": 6e-06, + "output_cost_per_token_above_272k_tokens": 9e-06, + "output_cost_per_token_priority": 1.2e-05, + "output_cost_per_token_above_272k_tokens_priority": 1.8e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6605,20 +6605,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, - "cache_read_input_token_cost_priority": 5.5e-07, - "input_cost_per_token": 2.2e-06, - "input_cost_per_token_above_272k_tokens": 4.4e-06, - "input_cost_per_token_priority": 5.5e-06, + "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, + "cache_read_input_token_cost_priority": 6.875e-07, + "input_cost_per_token": 2.75e-06, + "input_cost_per_token_above_272k_tokens": 5.5e-06, + "input_cost_per_token_priority": 6.875e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-05, - "output_cost_per_token_above_272k_tokens": 1.98e-05, - "output_cost_per_token_priority": 3.3e-05, + "output_cost_per_token": 1.65e-05, + "output_cost_per_token_above_272k_tokens": 2.475e-05, + "output_cost_per_token_priority": 4.125e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6647,20 +6647,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-luna": { - "cache_read_input_token_cost": 2.2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, - "cache_read_input_token_cost_priority": 5.5e-08, - "input_cost_per_token": 2.2e-07, - "input_cost_per_token_above_272k_tokens": 4.4e-07, - "input_cost_per_token_priority": 5.5e-07, + "cache_read_input_token_cost": 1.1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, + "cache_read_input_token_cost_priority": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "input_cost_per_token_above_272k_tokens": 2.2e-06, + "input_cost_per_token_priority": 2.75e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-06, - "output_cost_per_token_above_272k_tokens": 1.98e-06, - "output_cost_per_token_priority": 3.3e-06, + "output_cost_per_token": 6.6e-06, + "output_cost_per_token_above_272k_tokens": 9.9e-06, + "output_cost_per_token_priority": 1.65e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6773,20 +6773,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, - "cache_read_input_token_cost_priority": 5.5e-07, - "input_cost_per_token": 2.2e-06, - "input_cost_per_token_above_272k_tokens": 4.4e-06, - "input_cost_per_token_priority": 5.5e-06, + "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, + "cache_read_input_token_cost_priority": 6.875e-07, + "input_cost_per_token": 2.75e-06, + "input_cost_per_token_above_272k_tokens": 5.5e-06, + "input_cost_per_token_priority": 6.875e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-05, - "output_cost_per_token_above_272k_tokens": 1.98e-05, - "output_cost_per_token_priority": 3.3e-05, + "output_cost_per_token": 1.65e-05, + "output_cost_per_token_above_272k_tokens": 2.475e-05, + "output_cost_per_token_priority": 4.125e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6815,20 +6815,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-luna": { - "cache_read_input_token_cost": 2.2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, - "cache_read_input_token_cost_priority": 5.5e-08, - "input_cost_per_token": 2.2e-07, - "input_cost_per_token_above_272k_tokens": 4.4e-07, - "input_cost_per_token_priority": 5.5e-07, + "cache_read_input_token_cost": 1.1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, + "cache_read_input_token_cost_priority": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "input_cost_per_token_above_272k_tokens": 2.2e-06, + "input_cost_per_token_priority": 2.75e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-06, - "output_cost_per_token_above_272k_tokens": 1.98e-06, - "output_cost_per_token_priority": 3.3e-06, + "output_cost_per_token": 6.6e-06, + "output_cost_per_token_above_272k_tokens": 9.9e-06, + "output_cost_per_token_priority": 1.65e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 8982b4f2565f..0e77647af2f9 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -6431,23 +6431,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-terra": { - "cache_read_input_token_cost": 2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4e-07, - "cache_read_input_token_cost_priority": 4e-07, - "cache_read_input_token_cost_above_272k_tokens_priority": 8e-07, - "input_cost_per_token": 2e-06, - "input_cost_per_token_above_272k_tokens": 4e-06, - "input_cost_per_token_priority": 4e-06, - "input_cost_per_token_above_272k_tokens_priority": 8e-06, + "cache_read_input_token_cost": 2.5e-07, + "cache_read_input_token_cost_above_272k_tokens": 5e-07, + "cache_read_input_token_cost_priority": 5e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 1e-06, + "input_cost_per_token": 2.5e-06, + "input_cost_per_token_above_272k_tokens": 5e-06, + "input_cost_per_token_priority": 5e-06, + "input_cost_per_token_above_272k_tokens_priority": 1e-05, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.2e-05, - "output_cost_per_token_above_272k_tokens": 1.8e-05, - "output_cost_per_token_priority": 2.4e-05, - "output_cost_per_token_above_272k_tokens_priority": 3.6e-05, + "output_cost_per_token": 1.5e-05, + "output_cost_per_token_above_272k_tokens": 2.25e-05, + "output_cost_per_token_priority": 3e-05, + "output_cost_per_token_above_272k_tokens_priority": 4.5e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6476,23 +6476,23 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-luna": { - "cache_read_input_token_cost": 2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4e-08, - "cache_read_input_token_cost_priority": 4e-08, - "cache_read_input_token_cost_above_272k_tokens_priority": 8e-08, - "input_cost_per_token": 2e-07, - "input_cost_per_token_above_272k_tokens": 4e-07, - "input_cost_per_token_priority": 4e-07, - "input_cost_per_token_above_272k_tokens_priority": 8e-07, + "cache_read_input_token_cost": 1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2e-07, + "cache_read_input_token_cost_priority": 2e-07, + "cache_read_input_token_cost_above_272k_tokens_priority": 4e-07, + "input_cost_per_token": 1e-06, + "input_cost_per_token_above_272k_tokens": 2e-06, + "input_cost_per_token_priority": 2e-06, + "input_cost_per_token_above_272k_tokens_priority": 4e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.2e-06, - "output_cost_per_token_above_272k_tokens": 1.8e-06, - "output_cost_per_token_priority": 2.4e-06, - "output_cost_per_token_above_272k_tokens_priority": 3.6e-06, + "output_cost_per_token": 6e-06, + "output_cost_per_token_above_272k_tokens": 9e-06, + "output_cost_per_token_priority": 1.2e-05, + "output_cost_per_token_above_272k_tokens_priority": 1.8e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6605,20 +6605,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, - "cache_read_input_token_cost_priority": 5.5e-07, - "input_cost_per_token": 2.2e-06, - "input_cost_per_token_above_272k_tokens": 4.4e-06, - "input_cost_per_token_priority": 5.5e-06, + "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, + "cache_read_input_token_cost_priority": 6.875e-07, + "input_cost_per_token": 2.75e-06, + "input_cost_per_token_above_272k_tokens": 5.5e-06, + "input_cost_per_token_priority": 6.875e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-05, - "output_cost_per_token_above_272k_tokens": 1.98e-05, - "output_cost_per_token_priority": 3.3e-05, + "output_cost_per_token": 1.65e-05, + "output_cost_per_token_above_272k_tokens": 2.475e-05, + "output_cost_per_token_priority": 4.125e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6647,20 +6647,20 @@ "supports_minimal_reasoning_effort": false }, "azure/us/gpt-5.6-luna": { - "cache_read_input_token_cost": 2.2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, - "cache_read_input_token_cost_priority": 5.5e-08, - "input_cost_per_token": 2.2e-07, - "input_cost_per_token_above_272k_tokens": 4.4e-07, - "input_cost_per_token_priority": 5.5e-07, + "cache_read_input_token_cost": 1.1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, + "cache_read_input_token_cost_priority": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "input_cost_per_token_above_272k_tokens": 2.2e-06, + "input_cost_per_token_priority": 2.75e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-06, - "output_cost_per_token_above_272k_tokens": 1.98e-06, - "output_cost_per_token_priority": 3.3e-06, + "output_cost_per_token": 6.6e-06, + "output_cost_per_token_above_272k_tokens": 9.9e-06, + "output_cost_per_token_priority": 1.65e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6773,20 +6773,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-terra": { - "cache_read_input_token_cost": 2.2e-07, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-07, - "cache_read_input_token_cost_priority": 5.5e-07, - "input_cost_per_token": 2.2e-06, - "input_cost_per_token_above_272k_tokens": 4.4e-06, - "input_cost_per_token_priority": 5.5e-06, + "cache_read_input_token_cost": 2.75e-07, + "cache_read_input_token_cost_above_272k_tokens": 5.5e-07, + "cache_read_input_token_cost_priority": 6.875e-07, + "input_cost_per_token": 2.75e-06, + "input_cost_per_token_above_272k_tokens": 5.5e-06, + "input_cost_per_token_priority": 6.875e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-05, - "output_cost_per_token_above_272k_tokens": 1.98e-05, - "output_cost_per_token_priority": 3.3e-05, + "output_cost_per_token": 1.65e-05, + "output_cost_per_token_above_272k_tokens": 2.475e-05, + "output_cost_per_token_priority": 4.125e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", @@ -6815,20 +6815,20 @@ "supports_minimal_reasoning_effort": false }, "azure/eu/gpt-5.6-luna": { - "cache_read_input_token_cost": 2.2e-08, - "cache_read_input_token_cost_above_272k_tokens": 4.4e-08, - "cache_read_input_token_cost_priority": 5.5e-08, - "input_cost_per_token": 2.2e-07, - "input_cost_per_token_above_272k_tokens": 4.4e-07, - "input_cost_per_token_priority": 5.5e-07, + "cache_read_input_token_cost": 1.1e-07, + "cache_read_input_token_cost_above_272k_tokens": 2.2e-07, + "cache_read_input_token_cost_priority": 2.75e-07, + "input_cost_per_token": 1.1e-06, + "input_cost_per_token_above_272k_tokens": 2.2e-06, + "input_cost_per_token_priority": 2.75e-06, "litellm_provider": "azure", "max_input_tokens": 1050000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.32e-06, - "output_cost_per_token_above_272k_tokens": 1.98e-06, - "output_cost_per_token_priority": 3.3e-06, + "output_cost_per_token": 6.6e-06, + "output_cost_per_token_above_272k_tokens": 9.9e-06, + "output_cost_per_token_priority": 1.65e-05, "supported_endpoints": [ "/v1/chat/completions", "/v1/batch", diff --git a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py index 0970e029ad88..b9324b35e357 100644 --- a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py +++ b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py @@ -757,11 +757,13 @@ def test_generic_cost_per_token_gpt56_terra_cache_costs_by_tier_and_context( [ ("azure/gpt-5.6", 5e-6, 3e-5, 5e-7), ("azure/gpt-5.6-sol", 5e-6, 3e-5, 5e-7), - ("azure/gpt-5.6-terra", 2e-6, 1.2e-5, 2e-7), - ("azure/gpt-5.6-luna", 2e-7, 1.2e-6, 2e-8), + ("azure/gpt-5.6-terra", 2.5e-6, 1.5e-5, 2.5e-7), + ("azure/gpt-5.6-luna", 1e-6, 6e-6, 1e-7), ("azure/us/gpt-5.6", 5.5e-6, 3.3e-5, 5.5e-7), - ("azure/eu/gpt-5.6-terra", 2.2e-6, 1.32e-5, 2.2e-7), - ("azure/eu/gpt-5.6-luna", 2.2e-7, 1.32e-6, 2.2e-8), + ("azure/us/gpt-5.6-terra", 2.75e-6, 1.65e-5, 2.75e-7), + ("azure/us/gpt-5.6-luna", 1.1e-6, 6.6e-6, 1.1e-7), + ("azure/eu/gpt-5.6-terra", 2.75e-6, 1.65e-5, 2.75e-7), + ("azure/eu/gpt-5.6-luna", 1.1e-6, 6.6e-6, 1.1e-7), ], ) def test_generic_cost_per_token_azure_gpt56( From 506adb35ac4fe17cdfb0812cb9f479c9c5dbfa86 Mon Sep 17 00:00:00 2001 From: Mohammad Ali Farhan Date: Sat, 8 Aug 2026 15:16:52 +0530 Subject: [PATCH 2/2] test(pricing): cover the azure gpt-5.6 priority and long-context rates The existing parametrization only exercises base input/output/cache-read, so 40 of the 60 restored fields were unpinned: a typo in a priority or above-272k rate, or a key the calculator never reads, would fall back to base rates and misreport spend for those tiers without failing anything. Drive generic_cost_per_token across both tiers and both context bands for the global terra/luna rows, plus one us and one eu row. All nine cases fail against the pre-fix cost map. --- .../llm_cost_calc/test_llm_cost_calc_utils.py | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py index b9324b35e357..c58e02887344 100644 --- a/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py +++ b/tests/test_litellm/litellm_core_utils/llm_cost_calc/test_llm_cost_calc_utils.py @@ -797,6 +797,51 @@ def test_generic_cost_per_token_azure_gpt56( assert round(completion_cost, 10) == round(output_cost * completion_tokens, 10) +@pytest.mark.parametrize( + "model,service_tier,prompt_tokens,input_rate,output_rate,cache_read_rate", + [ + ("azure/gpt-5.6-luna", None, 300000, 2e-6, 9e-6, 2e-7), + ("azure/gpt-5.6-luna", "priority", 1000, 2e-6, 1.2e-5, 2e-7), + ("azure/gpt-5.6-luna", "priority", 300000, 4e-6, 1.8e-5, 4e-7), + ("azure/gpt-5.6-terra", None, 300000, 5e-6, 2.25e-5, 5e-7), + ("azure/gpt-5.6-terra", "priority", 1000, 5e-6, 3e-5, 5e-7), + ("azure/gpt-5.6-terra", "priority", 300000, 1e-5, 4.5e-5, 1e-6), + ("azure/us/gpt-5.6-luna", None, 300000, 2.2e-6, 9.9e-6, 2.2e-7), + ("azure/us/gpt-5.6-luna", "priority", 1000, 2.75e-6, 1.65e-5, 2.75e-7), + ("azure/eu/gpt-5.6-terra", None, 300000, 5.5e-6, 2.475e-5, 5.5e-7), + ], +) +def test_generic_cost_per_token_azure_gpt56_priority_and_long_context_rates( + model, service_tier, prompt_tokens, input_rate, output_rate, cache_read_rate +): + """The base-rate test above leaves the ``_priority`` and ``_above_272k_tokens`` + fields unexercised, so a typo in one, or a key the calculator never reads, would + silently fall back to base rates and misreport spend for those tiers. + """ + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + cached_tokens = prompt_tokens // 5 + text_tokens = prompt_tokens - cached_tokens + completion_tokens = 500 + usage = Usage( + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + total_tokens=prompt_tokens + completion_tokens, + prompt_tokens_details=PromptTokensDetailsWrapper(cached_tokens=cached_tokens), + ) + + prompt_cost, completion_cost = generic_cost_per_token( + model=model, + usage=usage, + custom_llm_provider="azure", + service_tier=service_tier, + ) + + assert prompt_cost == pytest.approx(text_tokens * input_rate + cached_tokens * cache_read_rate) + assert completion_cost == pytest.approx(completion_tokens * output_rate) + + @pytest.mark.parametrize( "model,expected_none,expected_xhigh,expected_minimal", [