Merge pull request #40606 from BerriAI/litellm_registry_audit_2026_09_10b

This commit is contained in:
Mateo Wang 2026-09-11 08:00:04 -07:00 committed by GitHub
commit 67cb34ceee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 261 additions and 57 deletions

View file

@ -33076,6 +33076,7 @@
"supports_tool_choice": true
},
"groq/gemma-7b-it": {
"deprecation_date": "2024-12-18",
"input_cost_per_token": 5e-08,
"litellm_provider": "groq",
"max_input_tokens": 8192,
@ -56465,17 +56466,17 @@
"supports_reasoning": true,
"source": "https://serverless.tensormesh.ai/v1/models/openrouter"
},
"deepseek-v4-flash": {
"deepseek-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56489,19 +56490,45 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": false
"supports_vision": true
},
"deepseek-v4-flash-vision-exp": {
"deepseek-v4-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
],
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
},
"deepseek-v4-flash-vision-exp": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56543,17 +56570,17 @@
"supports_tool_choice": true,
"supports_vision": false
},
"deepseek/deepseek-v4-flash": {
"deepseek/deepseek-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56567,19 +56594,45 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": false
"supports_vision": true
},
"deepseek/deepseek-v4-flash-vision-exp": {
"deepseek/deepseek-v4-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
],
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
},
"deepseek/deepseek-v4-flash-vision-exp": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56935,6 +56988,23 @@
],
"supports_audio_input": true
},
"gpt-live-1": {
"input_cost_per_second": 0.0008333333333333334,
"litellm_provider": "openai",
"mode": "realtime",
"source": "https://developers.openai.com/api/docs/models/gpt-live-1",
"supported_modalities": [
"text",
"audio"
],
"supported_output_modalities": [
"text",
"audio"
],
"supports_audio_input": true,
"supports_audio_output": true,
"supports_function_calling": true
},
"gpt-realtime-translate": {
"input_cost_per_second": 0.0005666666666666667,
"litellm_provider": "openai",
@ -60039,6 +60109,7 @@
]
},
"xai/grok-imagine-image-quality": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -60055,6 +60126,7 @@
]
},
"xai/grok-imagine-image-quality-20260403": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -60071,6 +60143,7 @@
]
},
"xai/grok-imagine-image-quality-latest": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -61860,6 +61933,7 @@
"mode": "responses",
"supports_web_search": true,
"supports_function_calling": true,
"supports_reasoning": true,
"input_cost_per_token": 1.15e-08,
"output_cost_per_token": 1.7e-07,
"cache_read_input_token_cost": 1.15e-09,
@ -61870,6 +61944,7 @@
"mode": "responses",
"supports_web_search": true,
"supports_function_calling": true,
"supports_reasoning": true,
"input_cost_per_token": 2.5e-07,
"output_cost_per_token": 2.5e-06,
"cache_read_input_token_cost": 2.5e-07,

View file

@ -33076,6 +33076,7 @@
"supports_tool_choice": true
},
"groq/gemma-7b-it": {
"deprecation_date": "2024-12-18",
"input_cost_per_token": 5e-08,
"litellm_provider": "groq",
"max_input_tokens": 8192,
@ -56465,17 +56466,17 @@
"supports_reasoning": true,
"source": "https://serverless.tensormesh.ai/v1/models/openrouter"
},
"deepseek-v4-flash": {
"deepseek-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56489,19 +56490,45 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": false
"supports_vision": true
},
"deepseek-v4-flash-vision-exp": {
"deepseek-v4-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
],
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
},
"deepseek-v4-flash-vision-exp": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56543,17 +56570,17 @@
"supports_tool_choice": true,
"supports_vision": false
},
"deepseek/deepseek-v4-flash": {
"deepseek/deepseek-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56567,19 +56594,45 @@
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": false
"supports_vision": true
},
"deepseek/deepseek-v4-flash-vision-exp": {
"deepseek/deepseek-v4-flash": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 1.4e-08,
"input_cost_per_token": 4.4e-07,
"input_cost_per_token_cache_hit": 1.4e-08,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.32e-06,
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
],
"supports_assistant_prefill": true,
"supports_function_calling": true,
"supports_native_streaming": true,
"supports_parallel_function_calling": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_system_messages": true,
"supports_tool_choice": true,
"supports_vision": true
},
"deepseek/deepseek-v4-flash-vision-exp": {
"cache_creation_input_token_cost": 0.0,
"cache_read_input_token_cost": 6e-09,
"input_cost_per_token": 3e-07,
"input_cost_per_token_cache_hit": 6e-09,
"litellm_provider": "deepseek",
"max_input_tokens": 1000000,
"max_output_tokens": 393216,
"max_tokens": 393216,
"mode": "chat",
"output_cost_per_token": 1.2e-06,
"source": "https://api-docs.deepseek.com/quick_start/pricing",
"supported_endpoints": [
"/v1/chat/completions"
@ -56935,6 +56988,23 @@
],
"supports_audio_input": true
},
"gpt-live-1": {
"input_cost_per_second": 0.0008333333333333334,
"litellm_provider": "openai",
"mode": "realtime",
"source": "https://developers.openai.com/api/docs/models/gpt-live-1",
"supported_modalities": [
"text",
"audio"
],
"supported_output_modalities": [
"text",
"audio"
],
"supports_audio_input": true,
"supports_audio_output": true,
"supports_function_calling": true
},
"gpt-realtime-translate": {
"input_cost_per_second": 0.0005666666666666667,
"litellm_provider": "openai",
@ -60039,6 +60109,7 @@
]
},
"xai/grok-imagine-image-quality": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -60055,6 +60126,7 @@
]
},
"xai/grok-imagine-image-quality-20260403": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -60071,6 +60143,7 @@
]
},
"xai/grok-imagine-image-quality-latest": {
"deprecation_date": "2026-11-02",
"input_cost_per_image": 0.05,
"litellm_provider": "xai",
"mode": "image_generation",
@ -61860,6 +61933,7 @@
"mode": "responses",
"supports_web_search": true,
"supports_function_calling": true,
"supports_reasoning": true,
"input_cost_per_token": 1.15e-08,
"output_cost_per_token": 1.7e-07,
"cache_read_input_token_cost": 1.15e-09,
@ -61870,6 +61944,7 @@
"mode": "responses",
"supports_web_search": true,
"supports_function_calling": true,
"supports_reasoning": true,
"input_cost_per_token": 2.5e-07,
"output_cost_per_token": 2.5e-06,
"cache_read_input_token_cost": 2.5e-07,

View file

@ -198,6 +198,8 @@ def test_get_model_info_resolves_provider_prefixed_model_ids(local_model_cost_ma
("perplexity/perplexity/kimi-k3", True),
("perplexity/perplexity/deepseek-v4-flash-0731", True),
("perplexity/perplexity/kimi-k2.7-code", False),
("perplexity/perplexity/nemotron-3.5-lightning-30b-a3b", True),
("perplexity/perplexity/nemotron-3-ultra-550b-a55b", True),
):
assert litellm.supports_reasoning(model=model) is reasoning, model
@ -209,6 +211,18 @@ def test_get_model_info_resolves_provider_prefixed_model_ids(local_model_cost_ma
assert via_provider["output_cost_per_token"] == 4.4e-06
assert via_provider["mode"] == "responses"
lightning = litellm.get_model_info(
model="perplexity/nemotron-3.5-lightning-30b-a3b", custom_llm_provider="perplexity"
)
assert lightning["key"] == "perplexity/perplexity/nemotron-3.5-lightning-30b-a3b"
assert lightning["input_cost_per_token"] == 1.15e-08
assert lightning["output_cost_per_token"] == 1.7e-07
assert lightning["cache_read_input_token_cost"] == 1.15e-09
assert lightning["mode"] == "responses"
ultra = litellm.get_model_info(model="perplexity/perplexity/nemotron-3-ultra-550b-a55b")
assert ultra["key"] == "perplexity/perplexity/nemotron-3-ultra-550b-a55b"
def test_get_model_info_strips_openai_finetune_ids_without_a_custom_suffix(local_model_cost_map):
info = litellm.get_model_info(model="ft:gpt-4o-2024-08-06:my-org::abc123", custom_llm_provider="openai")
@ -4075,7 +4089,7 @@ def test_deepseek_v4_models_in_cost_map():
configured in model_prices_and_context_window.json.
Prices sourced from https://api-docs.deepseek.com/quick_start/pricing:
- deepseek-v4-flash: $0.44/M input, $1.32/M output
- deepseek-v4-flash: $0.30/M input, $1.20/M output
- deepseek-v4-pro: $1.32/M input, $3.96/M output
Closes https://github.com/BerriAI/litellm/issues/26709
@ -4088,9 +4102,9 @@ def test_deepseek_v4_models_in_cost_map():
model_cost = json.load(f)
# --- bare model names ---
for key, expected_input, expected_output, expected_cache in [
("deepseek-v4-flash", 4.4e-07, 1.32e-06, 1.4e-08),
("deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08),
for key, expected_input, expected_output, expected_cache, expected_vision in [
("deepseek-v4-flash", 3e-07, 1.2e-06, 6e-09, True),
("deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08, False),
]:
info = model_cost.get(key)
assert info is not None, f"{key} missing from model_prices_and_context_window.json"
@ -4102,11 +4116,12 @@ def test_deepseek_v4_models_in_cost_map():
assert info["max_input_tokens"] == 1_000_000
assert info["supports_function_calling"] is True
assert info["supports_tool_choice"] is True
assert info.get("supports_vision", False) is expected_vision
# --- provider-prefixed names ---
for key, expected_input, expected_output, expected_cache in [
("deepseek/deepseek-v4-flash", 4.4e-07, 1.32e-06, 1.4e-08),
("deepseek/deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08),
for key, expected_input, expected_output, expected_cache, expected_vision in [
("deepseek/deepseek-v4-flash", 3e-07, 1.2e-06, 6e-09, True),
("deepseek/deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08, False),
]:
info = model_cost.get(key)
assert info is not None, f"{key} missing from model_prices_and_context_window.json"
@ -4117,6 +4132,7 @@ def test_deepseek_v4_models_in_cost_map():
assert info["cache_read_input_token_cost"] == expected_cache
assert info["supports_function_calling"] is True
assert info["supports_tool_choice"] is True
assert info.get("supports_vision", False) is expected_vision
def test_deepseek_v4_models_in_backup_cost_map():
@ -4132,9 +4148,9 @@ def test_deepseek_v4_models_in_backup_cost_map():
model_cost = json.load(f)
# --- bare model names ---
for key, expected_input, expected_output, expected_cache in [
("deepseek-v4-flash", 4.4e-07, 1.32e-06, 1.4e-08),
("deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08),
for key, expected_input, expected_output, expected_cache, expected_vision in [
("deepseek-v4-flash", 3e-07, 1.2e-06, 6e-09, True),
("deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08, False),
]:
info = model_cost.get(key)
assert info is not None, f"{key} missing from backup JSON"
@ -4144,11 +4160,12 @@ def test_deepseek_v4_models_in_backup_cost_map():
assert info["output_cost_per_token"] == expected_output
assert info["cache_read_input_token_cost"] == expected_cache
assert info["max_input_tokens"] == 1_000_000
assert info.get("supports_vision", False) is expected_vision
# --- provider-prefixed names ---
for key, expected_input, expected_output, expected_cache in [
("deepseek/deepseek-v4-flash", 4.4e-07, 1.32e-06, 1.4e-08),
("deepseek/deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08),
for key, expected_input, expected_output, expected_cache, expected_vision in [
("deepseek/deepseek-v4-flash", 3e-07, 1.2e-06, 6e-09, True),
("deepseek/deepseek-v4-pro", 1.32e-06, 3.96e-06, 4.4e-08, False),
]:
info = model_cost.get(key)
assert info is not None, f"{key} missing from backup JSON"
@ -4157,6 +4174,43 @@ def test_deepseek_v4_models_in_backup_cost_map():
assert info["input_cost_per_token"] == expected_input
assert info["output_cost_per_token"] == expected_output
assert info["cache_read_input_token_cost"] == expected_cache
assert info.get("supports_vision", False) is expected_vision
def test_deprecation_dates_for_retired_xai_and_groq_models():
import json
from pathlib import Path
json_path = Path(__file__).parents[2] / "model_prices_and_context_window.json"
with open(json_path) as f:
model_cost = json.load(f)
assert model_cost["xai/grok-imagine-image-quality"]["deprecation_date"] == "2026-11-02"
assert model_cost["xai/grok-imagine-image-quality-latest"]["deprecation_date"] == "2026-11-02"
assert model_cost["xai/grok-imagine-image-quality-20260403"]["deprecation_date"] == "2026-11-02"
assert model_cost["groq/gemma-7b-it"]["deprecation_date"] == "2024-12-18"
@pytest.mark.usefixtures("local_model_cost_map")
def test_deepseek_flash_completion_cost():
from litellm.types.utils import ModelResponse
response = ModelResponse(
model="deepseek-flash",
usage=Usage(
prompt_tokens=1_000_000,
completion_tokens=1_000_000,
total_tokens=2_000_000,
),
)
cost = litellm.completion_cost(
completion_response=response,
model="deepseek-flash",
custom_llm_provider="deepseek",
)
assert cost == pytest.approx(1.50, abs=1e-9)
_FIREWORKS_MODELS = [