fix(model_prices): registry audit 2026-10-03, add cohere embed v5, grok-imagine-video-1.5-lite and openrouter gpt-image rows (#44376)

* fix(model_prices): registry audit 2026-10-03, add cohere embed v5 and absorb openrouter gpt-image rows

Co-authored-by: tinysolver <iam.tinysolver@gmail.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix(model_prices): add grok-imagine-video-1.5-lite and gemini 3.5 transcribe limits, drop deprecation-only date

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: tinysolver <iam.tinysolver@gmail.com>
This commit is contained in:
devin-ai-integration[bot] 2026-10-03 12:53:07 -07:00 • committed by GitHub
parent d306d6d70b
commit 671748067d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 205 additions and 0 deletions

View file

@ -16085,6 +16085,28 @@
"input_cost_per_image_token": 4.7e-07,
"source": "https://cohere.com/pricing"
},
"cohere/embed-v5.0-pro": {
"input_cost_per_token": 1.2e-07,
"litellm_provider": "cohere",
"max_input_tokens": 128000,
"max_tokens": 128000,
"mode": "embedding",
"output_cost_per_token": 0.0,
"output_vector_size": 2048,
"supports_embedding_image_input": true,
"source": "https://cohere.com/pricing"
},
"cohere/embed-v5.0-fast": {
"input_cost_per_token": 8e-08,
"litellm_provider": "cohere",
"max_input_tokens": 128000,
"max_tokens": 128000,
"mode": "embedding",
"output_cost_per_token": 0.0,
"output_vector_size": 2048,
"supports_embedding_image_input": true,
"source": "https://cohere.com/pricing"
},
"cohere/parse-v5.0": {
"litellm_provider": "cohere",
"mode": "ocr",
@ -61056,6 +61078,9 @@
"input_cost_per_audio_token": 2e-06,
"input_cost_per_token": 2e-06,
"litellm_provider": "gemini",
"max_input_tokens": 98304,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "audio_transcription",
"output_cost_per_token": 1.2e-05,
"source": "https://ai.google.dev/gemini-api/docs/pricing",
@ -61078,6 +61103,9 @@
"input_cost_per_audio_token": 3.5e-06,
"input_cost_per_token": 3.5e-06,
"litellm_provider": "gemini",
"max_input_tokens": 131072,
"max_output_tokens": 65536,
"max_tokens": 65536,
"mode": "audio_transcription",
"output_cost_per_token": 2.1e-05,
"source": "https://ai.google.dev/gemini-api/docs/pricing",
@ -64092,6 +64120,23 @@
"video"
]
},
"xai/grok-imagine-video-1.5-lite": {
"input_cost_per_image": 0.01,
"litellm_provider": "xai",
"mode": "video_generation",
"output_cost_per_second": 0.02,
"output_cost_per_second_1080p": 0.14,
"output_cost_per_second_480p": 0.02,
"output_cost_per_second_720p": 0.03,
"source": "https://docs.x.ai/developers/pricing",
"supported_modalities": [
"text",
"image"
],
"supported_output_modalities": [
"video"
]
},
"xai/grok-imagine-video-1.5-2026-05-30": {
"input_cost_per_image": 0.01,
"litellm_provider": "xai",
@ -75511,6 +75556,42 @@
"supports_vision": true,
"supports_web_search": true
},
"openrouter/openai/gpt-image-2": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-image-2.5-flare": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-image-2.5-sunburst": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-5.4-mini:batch": {
"cache_read_input_token_cost": 3.75e-08,
"input_cost_per_token": 3.75e-07,

View file

@ -16085,6 +16085,28 @@
"input_cost_per_image_token": 4.7e-07,
"source": "https://cohere.com/pricing"
},
"cohere/embed-v5.0-pro": {
"input_cost_per_token": 1.2e-07,
"litellm_provider": "cohere",
"max_input_tokens": 128000,
"max_tokens": 128000,
"mode": "embedding",
"output_cost_per_token": 0.0,
"output_vector_size": 2048,
"supports_embedding_image_input": true,
"source": "https://cohere.com/pricing"
},
"cohere/embed-v5.0-fast": {
"input_cost_per_token": 8e-08,
"litellm_provider": "cohere",
"max_input_tokens": 128000,
"max_tokens": 128000,
"mode": "embedding",
"output_cost_per_token": 0.0,
"output_vector_size": 2048,
"supports_embedding_image_input": true,
"source": "https://cohere.com/pricing"
},
"cohere/parse-v5.0": {
"litellm_provider": "cohere",
"mode": "ocr",
@ -61056,6 +61078,9 @@
"input_cost_per_audio_token": 2e-06,
"input_cost_per_token": 2e-06,
"litellm_provider": "gemini",
"max_input_tokens": 98304,
"max_output_tokens": 32768,
"max_tokens": 32768,
"mode": "audio_transcription",
"output_cost_per_token": 1.2e-05,
"source": "https://ai.google.dev/gemini-api/docs/pricing",
@ -61078,6 +61103,9 @@
"input_cost_per_audio_token": 3.5e-06,
"input_cost_per_token": 3.5e-06,
"litellm_provider": "gemini",
"max_input_tokens": 131072,
"max_output_tokens": 65536,
"max_tokens": 65536,
"mode": "audio_transcription",
"output_cost_per_token": 2.1e-05,
"source": "https://ai.google.dev/gemini-api/docs/pricing",
@ -64092,6 +64120,23 @@
"video"
]
},
"xai/grok-imagine-video-1.5-lite": {
"input_cost_per_image": 0.01,
"litellm_provider": "xai",
"mode": "video_generation",
"output_cost_per_second": 0.02,
"output_cost_per_second_1080p": 0.14,
"output_cost_per_second_480p": 0.02,
"output_cost_per_second_720p": 0.03,
"source": "https://docs.x.ai/developers/pricing",
"supported_modalities": [
"text",
"image"
],
"supported_output_modalities": [
"video"
]
},
"xai/grok-imagine-video-1.5-2026-05-30": {
"input_cost_per_image": 0.01,
"litellm_provider": "xai",
@ -75511,6 +75556,42 @@
"supports_vision": true,
"supports_web_search": true
},
"openrouter/openai/gpt-image-2": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-image-2.5-flare": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-flare/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-image-2.5-sunburst": {
"input_cost_per_image_token": 8e-06,
"input_cost_per_token": 5e-06,
"litellm_provider": "openrouter",
"mode": "image_generation",
"output_cost_per_image_token": 3e-05,
"source": "https://openrouter.ai/api/v1/images/models/openai/gpt-image-2.5-sunburst/endpoints",
"supported_endpoints": [
"/v1/images/generations"
],
"supports_vision": true
},
"openrouter/openai/gpt-5.4-mini:batch": {
"cache_read_input_token_cost": 3.75e-08,
"input_cost_per_token": 3.75e-07,

View file

@ -0,0 +1,43 @@
from pathlib import Path
from typing import Final
import pytest
from pydantic import TypeAdapter
from litellm import get_model_info
from litellm.litellm_core_utils.get_llm_provider_logic import get_llm_provider
REPO_ROOT: Final = Path(__file__).parents[2]
COST_MAP_ADAPTER: Final = TypeAdapter(dict[str, dict[str, object]])
MODELS: Final = (
"openrouter/openai/gpt-image-2",
"openrouter/openai/gpt-image-2.5-flare",
"openrouter/openai/gpt-image-2.5-sunburst",
)
PRICE_FIELDS: Final = ("input_cost_per_token", "input_cost_per_image_token", "output_cost_per_image_token")
def _cost_map(path: Path) -> dict[str, dict[str, object]]:
return COST_MAP_ADAPTER.validate_json(path.read_bytes())
MAIN_COST_MAP: Final = _cost_map(REPO_ROOT / "model_prices_and_context_window.json")
BACKUP_COST_MAP: Final = _cost_map(REPO_ROOT / "litellm" / "model_prices_and_context_window_backup.json")
@pytest.mark.parametrize("model", MODELS)
def test_openrouter_gpt_image_row_is_identical_in_main_and_backup(model: str) -> None:
assert model in MAIN_COST_MAP, f"{model} is missing from model_prices_and_context_window.json"
assert BACKUP_COST_MAP.get(model) == MAIN_COST_MAP[model]
@pytest.mark.usefixtures("local_model_cost_map")
@pytest.mark.parametrize("model", MODELS)
def test_openrouter_gpt_image_model_info_comes_from_the_openrouter_row(model: str) -> None:
routed_model, provider, _, _ = get_llm_provider(model=model)
assert (routed_model, provider) == (model.removeprefix("openrouter/"), "openrouter")
info = get_model_info(model=routed_model, custom_llm_provider=provider)
row = MAIN_COST_MAP[model]
assert (info["key"], info["litellm_provider"], info["mode"]) == (model, "openrouter", "image_generation")
assert {field: info[field] for field in PRICE_FIELDS} == {field: row[field] for field in PRICE_FIELDS}