Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions litellm/model_prices_and_context_window_backup.json
Original file line number Diff line number Diff line change
Expand Up @@ -6592,6 +6592,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,
Expand Down Expand Up @@ -6642,6 +6645,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,
Expand Down Expand Up @@ -6693,6 +6699,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.5e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5e-06,
"cache_creation_input_token_cost_priority": 5e-06,
"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,
Expand Down Expand Up @@ -6744,6 +6753,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.5e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5e-07,
"cache_creation_input_token_cost_priority": 5e-07,
"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,
Expand Down Expand Up @@ -6795,6 +6807,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -6842,6 +6857,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-sol": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -6890,6 +6908,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.75e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-06,
"cache_creation_input_token_cost_priority": 6.875e-06,
"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,
Expand Down Expand Up @@ -6938,6 +6959,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.75e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-07,
"cache_creation_input_token_cost_priority": 6.875e-07,
"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,
Expand Down Expand Up @@ -6986,6 +7010,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -7033,6 +7060,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-sol": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -7081,6 +7111,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.75e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-06,
"cache_creation_input_token_cost_priority": 6.875e-06,
"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,
Expand Down Expand Up @@ -7129,6 +7162,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.75e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-07,
"cache_creation_input_token_cost_priority": 6.875e-07,
"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,
Expand Down
36 changes: 36 additions & 0 deletions model_prices_and_context_window.json
Original file line number Diff line number Diff line change
Expand Up @@ -6592,6 +6592,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,
Expand Down Expand Up @@ -6642,6 +6645,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,
Expand Down Expand Up @@ -6693,6 +6699,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.5e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5e-06,
"cache_creation_input_token_cost_priority": 5e-06,
"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,
Expand Down Expand Up @@ -6744,6 +6753,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.5e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5e-07,
"cache_creation_input_token_cost_priority": 5e-07,
"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,
Expand Down Expand Up @@ -6795,6 +6807,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -6842,6 +6857,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-sol": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -6890,6 +6908,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.75e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-06,
"cache_creation_input_token_cost_priority": 6.875e-06,
"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,
Expand Down Expand Up @@ -6938,6 +6959,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/us/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.75e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-07,
"cache_creation_input_token_cost_priority": 6.875e-07,
"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,
Expand Down Expand Up @@ -6986,6 +7010,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -7033,6 +7060,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-sol": {
"cache_creation_input_token_cost": 6.875e-06,
"cache_creation_input_token_cost_above_272k_tokens": 1.375e-05,
"cache_creation_input_token_cost_priority": 1.71875e-05,
"cache_read_input_token_cost": 5.5e-07,
"cache_read_input_token_cost_above_272k_tokens": 1.1e-06,
"cache_read_input_token_cost_priority": 1.375e-06,
Expand Down Expand Up @@ -7081,6 +7111,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-terra": {
"cache_creation_input_token_cost": 2.75e-06,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-06,
"cache_creation_input_token_cost_priority": 6.875e-06,
"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,
Expand Down Expand Up @@ -7129,6 +7162,9 @@
"supports_minimal_reasoning_effort": false
},
"azure/eu/gpt-5.6-luna": {
"cache_creation_input_token_cost": 2.75e-07,
"cache_creation_input_token_cost_above_272k_tokens": 5.5e-07,
"cache_creation_input_token_cost_priority": 6.875e-07,
"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,
Expand Down
51 changes: 51 additions & 0 deletions tests/test_litellm/test_cost_calculator.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@

from typing import Final

import pytest


Expand Down Expand Up @@ -3781,3 +3783,52 @@ def test_completion_cost_prices_anthropic_shaped_cache_read_tokens(_local_model_
)

assert cost == pytest.approx(3 * 4e-6 + 4014 * 4e-7 + 5 * 2e-5, rel=1e-9)


@pytest.mark.parametrize(
"model",
tuple(
f"azure/{region}gpt-5.6{variant}"
for region in ("", "eu/", "us/")
for variant in ("", "-sol", "-terra", "-luna")
),
)
@pytest.mark.parametrize("tier", ("", "_above_272k_tokens", "_priority"))
def test_azure_gpt_5_6_cache_write_rate_matches_openai_ratio(_local_model_cost_map, model: str, tier: str):
"""Regression for #37631: the azure/* gpt-5.6 entries carried no
cache_creation_input_token_cost at all, so cache writes fell back to $0. Azure
charges 1.25x the input rate for them, matching the OpenAI-hosted twins."""
info: Final = litellm.model_cost[model]
twin: Final = litellm.model_cost[model.split("/")[-1]]
twin_ratio: Final = twin[f"cache_creation_input_token_cost{tier}"] / twin[f"input_cost_per_token{tier}"]

assert twin_ratio == pytest.approx(1.25, rel=1e-12)
assert info[f"cache_creation_input_token_cost{tier}"] == pytest.approx(
twin_ratio * info[f"input_cost_per_token{tier}"], rel=1e-12
)


def test_azure_gpt_5_6_bills_cache_write_tokens_at_cache_creation_rate(_local_model_cost_map):
"""Regression for #37631: Azure reports cache writes as
prompt_tokens_details.cache_write_tokens, which LiteLLM classifies as cache-creation
tokens. Without a cache-creation rate on the azure/* entries the lookup yielded $0,
under-billing a write-heavy prompt by ~98%."""
from litellm.litellm_core_utils.llm_cost_calc.utils import generic_cost_per_token

def _input_cost(model: str) -> float:
usage: Final = Usage(
completion_tokens=0,
prompt_tokens=10_000,
total_tokens=10_000,
prompt_tokens_details=PromptTokensDetailsWrapper(
cached_tokens=0, text_tokens=0, cache_write_tokens=10_000
),
)
return generic_cost_per_token(model=model, usage=usage, custom_llm_provider="azure")[0]

global_cost: Final = _input_cost("azure/gpt-5.6-sol")
eu_cost: Final = _input_cost("azure/eu/gpt-5.6-sol")

assert global_cost == pytest.approx(10_000 * 6.25e-06, rel=1e-9)
assert global_cost > 10_000 * litellm.model_cost["azure/gpt-5.6-sol"]["input_cost_per_token"]
assert eu_cost == pytest.approx(1.1 * global_cost, rel=1e-9)
Loading