From 02e1b6ad6cbeca1a84be79ce2cfe1e4766b88797 Mon Sep 17 00:00:00 2001 From: IvanShang <77005282+qdivan@users.noreply.github.com> Date: Sun, 16 Aug 2026 23:17:58 +0800 Subject: [PATCH] test(pricing): cover priority rates for dated OpenAI snapshots --- tests/test_litellm/test_cost_calculator.py | 32 ++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/test_litellm/test_cost_calculator.py b/tests/test_litellm/test_cost_calculator.py index 8dad4bef07b..908fbd3f1b0 100644 --- a/tests/test_litellm/test_cost_calculator.py +++ b/tests/test_litellm/test_cost_calculator.py @@ -2335,6 +2335,38 @@ def test_completion_cost_extracts_service_tier_from_usage(_local_model_cost_map) ), f"Flex pricing should be ~50% of standard, got {flex_ratio:.2f}" +@pytest.mark.parametrize( + ("requested_model", "served_model", "input_rate", "output_rate"), + ( + ("gpt-4o", "gpt-4o-2024-08-06", 4.25e-6, 17e-6), + ("gpt-4o", "gpt-4o-2024-11-20", 4.25e-6, 17e-6), + ("gpt-4o-mini", "gpt-4o-mini-2024-07-18", 0.25e-6, 1e-6), + ("gpt-4.1", "gpt-4.1-2025-04-14", 3.5e-6, 14e-6), + ("gpt-4.1-mini", "gpt-4.1-mini-2025-04-14", 0.7e-6, 2.8e-6), + ), +) +def test_completion_cost_uses_priority_rates_for_served_openai_snapshot( + monkeypatch, + requested_model, + served_model, + input_rate, + output_rate, +): + monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True") + monkeypatch.setattr(litellm, "model_cost", litellm.get_model_cost_map(url="")) + usage = Usage(prompt_tokens=100, completion_tokens=50, total_tokens=150) + response = ModelResponse(usage=usage, model=served_model) + + cost = completion_cost( + completion_response=response, + model=requested_model, + custom_llm_provider="openai", + optional_params={"service_tier": "priority"}, + ) + + assert cost == pytest.approx(100 * input_rate + 50 * output_rate) + + def test_completion_cost_service_tier_priority(_local_model_cost_map): """Test that service_tier extraction follows priority: optional_params > completion_response > usage.""" from litellm import completion_cost