fix(model_prices): update provider and web search pricing

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
mateo 2026-09-08 19:28:04 +00:00
parent bd2a35514d
commit d497434680
4 changed files with 293 additions and 56 deletions

View file

@ -29176,7 +29176,13 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_web_search": true
},
"gpt-4o-mini-2024-07-18": {
"cache_read_input_token_cost": 7.5e-08,
@ -29193,9 +29199,9 @@
"output_cost_per_token_priority": 1e-06,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29204,7 +29210,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_web_search": true
},
"gpt-4o-mini-audio-preview": {
"deprecation_date": "2026-05-07",
@ -29294,9 +29301,9 @@
"output_cost_per_token": 6e-07,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29321,9 +29328,9 @@
"output_cost_per_token": 6e-07,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29434,9 +29441,9 @@
"output_cost_per_token": 1e-05,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.05,
"search_context_size_low": 0.03,
"search_context_size_medium": 0.035
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29461,9 +29468,9 @@
"output_cost_per_token": 1e-05,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.05,
"search_context_size_low": 0.03,
"search_context_size_medium": 0.035
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -41625,6 +41632,28 @@
"mode": "rerank",
"output_cost_per_token": 0.0
},
"rerank-v4.0-fast": {
"input_cost_per_query": 0.002,
"input_cost_per_token": 0.0,
"litellm_provider": "cohere",
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "rerank",
"output_cost_per_token": 0.0,
"source": "https://cohere.com/pricing"
},
"rerank-v4.0-pro": {
"input_cost_per_query": 0.0025,
"input_cost_per_token": 0.0,
"litellm_provider": "cohere",
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "rerank",
"output_cost_per_token": 0.0,
"source": "https://cohere.com/pricing"
},
"nvidia_nim/nvidia/nv-rerankqa-mistral-4b-v3": {
"input_cost_per_query": 0.0,
"input_cost_per_token": 0.0,
@ -47811,7 +47840,7 @@
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_input_tokens": 128000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
@ -47827,7 +47856,7 @@
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_input_tokens": 128000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
@ -47842,14 +47871,17 @@
},
"vertex_ai/xai/grok-4.20-non-reasoning": {
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 2e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
"output_cost_per_token": 6e-06,
"source": "https://docs.x.ai/developers/models",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
@ -47858,14 +47890,17 @@
},
"vertex_ai/xai/grok-4.20-reasoning": {
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 2e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
"output_cost_per_token": 6e-06,
"source": "https://docs.x.ai/developers/models",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
@ -47873,6 +47908,42 @@
"supports_vision": true,
"supports_web_search": true
},
"vertex_ai/xai/grok-4.3": {
"cache_read_input_token_cost": 2e-07,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 200000,
"max_tokens": 200000,
"mode": "chat",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"vertex_ai/xai/grok-4.6": {
"cache_read_input_token_cost": 5e-07,
"cache_read_input_token_cost_above_200k_tokens": 1e-06,
"input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 524288,
"max_tokens": 524288,
"mode": "chat",
"output_cost_per_token": 6e-06,
"output_cost_per_token_above_200k_tokens": 1.2e-05,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"vertex_ai/qwen/qwen3-235b-a22b-instruct-2507-maas": {
"input_cost_per_token": 2.2e-07,
"litellm_provider": "vertex_ai-qwen_models",
@ -56824,8 +56895,8 @@
"rpm": 10
},
"vertex_ai/gemini-3.5-transcribe-preview": {
"input_cost_per_audio_token": 2.5e-06,
"input_cost_per_token": 2.5e-06,
"input_cost_per_audio_token": 2e-06,
"input_cost_per_token": 2e-06,
"litellm_provider": "vertex_ai",
"mode": "audio_transcription",
"output_cost_per_token": 1.2e-05,
@ -56860,6 +56931,27 @@
],
"supports_audio_input": true
},
"vertex_ai/gemini-3.5-live-translate-preview": {
"input_cost_per_audio_token": 3.5e-06,
"input_cost_per_token": 3.5e-06,
"litellm_provider": "vertex_ai",
"mode": "realtime",
"output_cost_per_audio_token": 2.1e-05,
"output_cost_per_token": 2.1e-05,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/realtime"
],
"supported_modalities": [
"audio"
],
"supported_output_modalities": [
"audio",
"text"
],
"supports_audio_input": true,
"supports_audio_output": true
},
"perplexity/pplx-embed-context-v1-0.6b": {
"input_cost_per_token": 8e-09,
"litellm_provider": "perplexity",

View file

@ -29176,7 +29176,13 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"search_context_cost_per_query": {
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_web_search": true
},
"gpt-4o-mini-2024-07-18": {
"cache_read_input_token_cost": 7.5e-08,
@ -29193,9 +29199,9 @@
"output_cost_per_token_priority": 1e-06,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29204,7 +29210,8 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
"supports_vision": true,
"supports_web_search": true
},
"gpt-4o-mini-audio-preview": {
"deprecation_date": "2026-05-07",
@ -29294,9 +29301,9 @@
"output_cost_per_token": 6e-07,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29321,9 +29328,9 @@
"output_cost_per_token": 6e-07,
"output_cost_per_token_batches": 3e-07,
"search_context_cost_per_query": {
"search_context_size_high": 0.03,
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.0275
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29434,9 +29441,9 @@
"output_cost_per_token": 1e-05,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.05,
"search_context_size_low": 0.03,
"search_context_size_medium": 0.035
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -29461,9 +29468,9 @@
"output_cost_per_token": 1e-05,
"output_cost_per_token_batches": 5e-06,
"search_context_cost_per_query": {
"search_context_size_high": 0.05,
"search_context_size_low": 0.03,
"search_context_size_medium": 0.035
"search_context_size_high": 0.025,
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025
},
"supports_function_calling": true,
"supports_parallel_function_calling": true,
@ -41625,6 +41632,28 @@
"mode": "rerank",
"output_cost_per_token": 0.0
},
"rerank-v4.0-fast": {
"input_cost_per_query": 0.002,
"input_cost_per_token": 0.0,
"litellm_provider": "cohere",
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "rerank",
"output_cost_per_token": 0.0,
"source": "https://cohere.com/pricing"
},
"rerank-v4.0-pro": {
"input_cost_per_query": 0.0025,
"input_cost_per_token": 0.0,
"litellm_provider": "cohere",
"max_input_tokens": 32768,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "rerank",
"output_cost_per_token": 0.0,
"source": "https://cohere.com/pricing"
},
"nvidia_nim/nvidia/nv-rerankqa-mistral-4b-v3": {
"input_cost_per_query": 0.0,
"input_cost_per_token": 0.0,
@ -47811,7 +47840,7 @@
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_input_tokens": 128000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
@ -47827,7 +47856,7 @@
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_input_tokens": 128000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
@ -47842,14 +47871,17 @@
},
"vertex_ai/xai/grok-4.20-non-reasoning": {
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 2e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
"output_cost_per_token": 6e-06,
"source": "https://docs.x.ai/developers/models",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_response_schema": true,
"supports_tool_choice": true,
@ -47858,14 +47890,17 @@
},
"vertex_ai/xai/grok-4.20-reasoning": {
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 2e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 2000000,
"max_output_tokens": 2000000,
"max_tokens": 2000000,
"mode": "chat",
"output_cost_per_token": 6e-06,
"source": "https://docs.x.ai/developers/models",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
@ -47873,6 +47908,42 @@
"supports_vision": true,
"supports_web_search": true
},
"vertex_ai/xai/grok-4.3": {
"cache_read_input_token_cost": 2e-07,
"cache_read_input_token_cost_above_200k_tokens": 4e-07,
"input_cost_per_token": 1.25e-06,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 200000,
"max_tokens": 200000,
"mode": "chat",
"output_cost_per_token": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"vertex_ai/xai/grok-4.6": {
"cache_read_input_token_cost": 5e-07,
"cache_read_input_token_cost_above_200k_tokens": 1e-06,
"input_cost_per_token": 2e-06,
"input_cost_per_token_above_200k_tokens": 4e-06,
"litellm_provider": "vertex_ai",
"max_input_tokens": 524288,
"max_tokens": 524288,
"mode": "chat",
"output_cost_per_token": 6e-06,
"output_cost_per_token_above_200k_tokens": 1.2e-05,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"vertex_ai/qwen/qwen3-235b-a22b-instruct-2507-maas": {
"input_cost_per_token": 2.2e-07,
"litellm_provider": "vertex_ai-qwen_models",
@ -56824,8 +56895,8 @@
"rpm": 10
},
"vertex_ai/gemini-3.5-transcribe-preview": {
"input_cost_per_audio_token": 2.5e-06,
"input_cost_per_token": 2.5e-06,
"input_cost_per_audio_token": 2e-06,
"input_cost_per_token": 2e-06,
"litellm_provider": "vertex_ai",
"mode": "audio_transcription",
"output_cost_per_token": 1.2e-05,
@ -56860,6 +56931,27 @@
],
"supports_audio_input": true
},
"vertex_ai/gemini-3.5-live-translate-preview": {
"input_cost_per_audio_token": 3.5e-06,
"input_cost_per_token": 3.5e-06,
"litellm_provider": "vertex_ai",
"mode": "realtime",
"output_cost_per_audio_token": 2.1e-05,
"output_cost_per_token": 2.1e-05,
"source": "https://cloud.google.com/gemini-enterprise-agent-platform/generative-ai/pricing",
"supported_endpoints": [
"/v1/realtime"
],
"supported_modalities": [
"audio"
],
"supported_output_modalities": [
"audio",
"text"
],
"supports_audio_input": true,
"supports_audio_output": true
},
"perplexity/pplx-embed-context-v1-0.6b": {
"input_cost_per_token": 8e-09,
"litellm_provider": "perplexity",

View file

@ -1,5 +1,6 @@
import os
import json
from collections.abc import Mapping, Sequence
from pathlib import Path
import pytest
@ -11,8 +12,6 @@ from litellm.types.llms.openai import FileSearchTool, ResponsesAPIResponse, WebS
from litellm.types.utils import ModelResponse, StandardBuiltInToolsParams
def test_web_search_cost_low():
web_search_options = WebSearchOptions(search_context_size="low")
model_info = litellm.get_model_info("gpt-4o-search-preview")
@ -683,12 +682,13 @@ def test_web_search_provider_prefix_fallback_does_not_misprice_non_gemini_model(
def _openai_responses_with_web_search_calls(model, num_calls):
from litellm.types.llms.openai import ResponsesAPIResponse
from openai.types.responses.response_function_web_search import (
ActionSearch,
ResponseFunctionWebSearch,
)
from litellm.types.llms.openai import ResponsesAPIResponse
output = [
ResponseFunctionWebSearch(
id=f"ws_{i}",
@ -859,11 +859,64 @@ def test_dated_search_preview_entries_carry_search_pricing(local_model_cost_map)
custom_llm_provider="openai",
standard_built_in_tools_params=None,
)
assert cost == pytest.approx(0.035), (
f"dated search-preview id must bill the $0.035 search fee, got ${cost}"
assert cost == pytest.approx(0.025), (
f"dated search-preview id must bill the $0.025 search fee, got ${cost}"
)
@pytest.mark.parametrize(
"web_search_options",
[
None,
WebSearchOptions(search_context_size="low"),
WebSearchOptions(search_context_size="medium"),
WebSearchOptions(search_context_size="high"),
],
)
def test_gpt_4o_mini_snapshot_bills_web_search_like_its_alias(
web_search_options, local_model_cost_map
):
"""Snapshot and alias must bill web search identically: OpenAI lists preview search at $25 per 1k calls."""
alias_info = litellm.get_model_info("gpt-4o-mini")
snapshot_info = litellm.get_model_info("gpt-4o-mini-2024-07-18")
assert snapshot_info["supports_web_search"] is True
assert alias_info["supports_web_search"] is True
snapshot_cost = StandardBuiltInToolCostTracking.get_cost_for_web_search(
web_search_options=web_search_options, model_info=snapshot_info
)
alias_cost = StandardBuiltInToolCostTracking.get_cost_for_web_search(
web_search_options=web_search_options, model_info=alias_info
)
assert snapshot_cost == alias_cost == 0.025
def test_gpt_4o_mini_web_search_price_matches_in_both_cost_maps():
"""The bundled backup and canonical file are both served to deployments, so both must carry the price."""
repo_root = Path(__file__).parents[4]
cost_maps = tuple(
json.loads((repo_root / path).read_text(encoding="utf-8"))
for path in (
"model_prices_and_context_window.json",
"litellm/model_prices_and_context_window_backup.json",
)
)
canonical, backup = cost_maps
expected_search_price = {
"search_context_size_low": 0.025,
"search_context_size_medium": 0.025,
"search_context_size_high": 0.025,
}
for model_name in ("gpt-4o-mini", "gpt-4o-mini-2024-07-18"):
canonical_entry = canonical[model_name]
backup_entry = backup[model_name]
assert canonical_entry["search_context_cost_per_query"] == expected_search_price
assert backup_entry["search_context_cost_per_query"] == expected_search_price
assert canonical_entry == backup_entry
# Note: File search integration test removed due to complex annotation detection logic
# The unit tests in test_azure_assistant_cost_tracking.py provide comprehensive coverage

View file

@ -322,8 +322,8 @@ class TestModelCostEntry:
entry = json.load(f)["vertex_ai/gemini-3.5-transcribe-preview"]
assert entry["mode"] == "audio_transcription"
assert entry["litellm_provider"] == "vertex_ai"
assert entry["input_cost_per_audio_token"] == pytest.approx(2.5e-06)
assert entry["input_cost_per_token"] == pytest.approx(2.5e-06)
assert entry["input_cost_per_audio_token"] == pytest.approx(2e-06)
assert entry["input_cost_per_token"] == pytest.approx(2e-06)
assert entry["output_cost_per_token"] == pytest.approx(1.2e-05)
assert entry["supported_endpoints"] == ["/v1/audio/transcriptions"]