From 6e512e0ebdbcca72e353ba39e8bf38ef2cd284c9 Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Tue, 4 Aug 2026 16:10:46 -0700 Subject: [PATCH] fix(pricing): add Azure GPT-5.6 Sol cache-write rates Foundry blog publishes Sol cached writes at $6.25/M; match OpenAI long-context and priority cache-creation tiers on azure/gpt-5.6 and azure/gpt-5.6-sol. Update Azure gpt-5.6 unit expectations for the Terra/Luna cuts already on this branch --- ...odel_prices_and_context_window_backup.json | 6 +++ model_prices_and_context_window.json | 6 +++ .../llm_cost_calc/test_llm_cost_calc_utils.py | 53 +++++++++++++++++-- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 45022b379cb..aec14d75b15 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -6341,6 +6341,9 @@ "supports_web_search": true }, "azure/gpt-5.6": { + "cache_creation_input_token_cost": 6.25e-06, + "cache_creation_input_token_cost_above_272k_tokens": 1.25e-05, + "cache_creation_input_token_cost_priority": 1.25e-05, "cache_read_input_token_cost": 5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, "cache_read_input_token_cost_priority": 1e-06, @@ -6386,6 +6389,9 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-sol": { + "cache_creation_input_token_cost": 6.25e-06, + "cache_creation_input_token_cost_above_272k_tokens": 1.25e-05, + "cache_creation_input_token_cost_priority": 1.25e-05, "cache_read_input_token_cost": 5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, "cache_read_input_token_cost_priority": 1e-06, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index aabb8ac05c9..0d99dadb68f 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -6341,6 +6341,9 @@ "supports_web_search": true }, "azure/gpt-5.6": { + "cache_creation_input_token_cost": 6.25e-06, + "cache_creation_input_token_cost_above_272k_tokens": 1.25e-05, + "cache_creation_input_token_cost_priority": 1.25e-05, "cache_read_input_token_cost": 5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, "cache_read_input_token_cost_priority": 1e-06, @@ -6386,6 +6389,9 @@ "supports_minimal_reasoning_effort": false }, "azure/gpt-5.6-sol": { + "cache_creation_input_token_cost": 6.25e-06, + "cache_creation_input_token_cost_above_272k_tokens": 1.25e-05, + "cache_creation_input_token_cost_priority": 1.25e-05, "cache_read_input_token_cost": 5e-07, "cache_read_input_token_cost_above_272k_tokens": 1e-06, "cache_read_input_token_cost_priority": 1e-06, 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 fbdf9b64bc0..55a6019210a 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,11 @@ 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", 2.5e-6, 1.5e-5, 2.5e-7), - ("azure/gpt-5.6-luna", 1e-6, 6e-6, 1e-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/us/gpt-5.6", 5.5e-6, 3.3e-5, 5.5e-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), + ("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), ], ) def test_generic_cost_per_token_azure_gpt56( @@ -795,6 +795,51 @@ def test_generic_cost_per_token_azure_gpt56( assert round(completion_cost, 10) == round(output_cost * completion_tokens, 10) +@pytest.mark.parametrize( + "model", + [ + "azure/gpt-5.6", + "azure/gpt-5.6-sol", + ], +) +def test_generic_cost_per_token_azure_gpt56_sol_cache_write(model): + """Azure Sol cache-write rate from the Foundry pricing table ($6.25/M).""" + os.environ["LITELLM_LOCAL_MODEL_COST_MAP"] = "True" + litellm.model_cost = litellm.get_model_cost_map(url="") + + cache_write_rate = 6.25e-6 + cache_read_rate = 5e-7 + input_rate = 5e-6 + model_cost_map = litellm.model_cost[model] + assert model_cost_map["cache_creation_input_token_cost"] == cache_write_rate + assert model_cost_map["cache_creation_input_token_cost_above_272k_tokens"] == 1.25e-5 + assert model_cost_map["cache_creation_input_token_cost_priority"] == 1.25e-5 + + cached_tokens = 50000 + cache_write_tokens = 40000 + prompt_tokens = 100000 + text_tokens = prompt_tokens - cached_tokens - cache_write_tokens + usage = Usage( + prompt_tokens=prompt_tokens, + completion_tokens=100, + total_tokens=prompt_tokens + 100, + prompt_tokens_details=PromptTokensDetailsWrapper( + cached_tokens=cached_tokens, cache_write_tokens=cache_write_tokens + ), + ) + prompt_cost, _ = generic_cost_per_token( + model=model, + usage=usage, + custom_llm_provider="azure", + ) + expected_prompt_cost = ( + text_tokens * input_rate + + cached_tokens * cache_read_rate + + cache_write_tokens * cache_write_rate + ) + assert prompt_cost == pytest.approx(expected_prompt_cost) + + @pytest.mark.parametrize( "model,expected_none,expected_xhigh,expected_minimal", [