fix(models): xai retirement repricing, bedrock grok-4.6 caching, openai/gemini deprecation dates

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
Devin AI 2026-08-29 13:11:26 +00:00
parent 401b12e64b
commit f0849eb0c9
5 changed files with 388 additions and 174 deletions

View file

@ -23096,7 +23096,8 @@
"supports_system_messages": true,
"supports_video_input": true,
"supports_vision": true,
"tpm": 800000
"tpm": 800000,
"deprecation_date": "2026-09-30"
},
"gemini/gemini-3.1-pro-preview": {
"prompt_cache_min_tokens": 4096,
@ -26146,7 +26147,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"low/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26157,7 +26159,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"low/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26168,7 +26171,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.034,
@ -26179,7 +26183,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.05,
@ -26190,7 +26195,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.05,
@ -26201,7 +26207,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.133,
@ -26212,7 +26219,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.2,
@ -26223,7 +26231,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.2,
@ -26234,7 +26243,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.009,
@ -26245,7 +26255,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26256,7 +26267,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26267,7 +26279,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.009,
@ -26278,7 +26291,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26289,7 +26303,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26300,7 +26315,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"gpt-5": {
"cache_read_input_token_cost": 1.25e-07,
@ -44050,21 +44066,24 @@
]
},
"xai/grok-3": {
"cache_read_input_token_cost": 7.5e-07,
"input_cost_per_token": 3e-06,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://x.ai/api#pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_response_schema": false,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-3-beta": {
"cache_read_input_token_cost": 7.5e-07,
@ -44115,21 +44134,24 @@
"supports_web_search": true
},
"xai/grok-3-latest": {
"cache_read_input_token_cost": 7.5e-07,
"input_cost_per_token": 3e-06,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://x.ai/api#pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_response_schema": false,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-3-mini": {
"cache_read_input_token_cost": 7.5e-08,
@ -44236,89 +44258,99 @@
"supports_web_search": true
},
"xai/grok-4": {
"input_cost_per_token": 3e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-fast-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-fast-non-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-0709": {
"input_cost_per_token": 3e-06,
"input_cost_per_token_above_128k_tokens": 6e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token_above_128k_tokens": 3e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-latest": {
"input_cost_per_token": 3e-06,
"input_cost_per_token_above_128k_tokens": 6e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token_above_128k_tokens": 3e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast": {
"cache_read_input_token_cost": 5e-08,
@ -44342,16 +44374,14 @@
"supports_web_search": true
},
"xai/grok-4-1-fast-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44361,19 +44391,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-reasoning-latest": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44383,19 +44414,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-non-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-non-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44404,19 +44436,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-non-reasoning-latest": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-non-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44425,7 +44458,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4.20-multi-agent-beta-0309": {
"cache_read_input_token_cost": 2e-07,
@ -50432,14 +50468,13 @@
"us.xai.grok-4.6": {
"input_cost_per_token": 2.2e-06,
"output_cost_per_token": 6.6e-06,
"cache_read_input_token_cost": 5.5e-07,
"litellm_provider": "bedrock_converse",
"max_input_tokens": 500000,
"max_output_tokens": 500000,
"max_tokens": 500000,
"mode": "chat",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_prompt_caching": false,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true
@ -50447,14 +50482,13 @@
"global.xai.grok-4.6": {
"input_cost_per_token": 2e-06,
"output_cost_per_token": 6e-06,
"cache_read_input_token_cost": 5e-07,
"litellm_provider": "bedrock_converse",
"max_input_tokens": 500000,
"max_output_tokens": 500000,
"max_tokens": 500000,
"mode": "chat",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_prompt_caching": false,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true

View file

@ -23096,7 +23096,8 @@
"supports_system_messages": true,
"supports_video_input": true,
"supports_vision": true,
"tpm": 800000
"tpm": 800000,
"deprecation_date": "2026-09-30"
},
"gemini/gemini-3.1-pro-preview": {
"prompt_cache_min_tokens": 4096,
@ -26146,7 +26147,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"low/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26157,7 +26159,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"low/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26168,7 +26171,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.034,
@ -26179,7 +26183,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.05,
@ -26190,7 +26195,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"medium/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.05,
@ -26201,7 +26207,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.133,
@ -26212,7 +26219,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.2,
@ -26223,7 +26231,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"high/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.2,
@ -26234,7 +26243,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.009,
@ -26245,7 +26255,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26256,7 +26267,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"standard/1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26267,7 +26279,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1024-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.009,
@ -26278,7 +26291,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1024-x-1536/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26289,7 +26303,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"1536-x-1024/gpt-image-1.5-2025-12-16": {
"input_cost_per_image": 0.013,
@ -26300,7 +26315,8 @@
"/v1/images/edits"
],
"supports_vision": true,
"supports_pdf_input": true
"supports_pdf_input": true,
"deprecation_date": "2026-12-01"
},
"gpt-5": {
"cache_read_input_token_cost": 1.25e-07,
@ -44050,21 +44066,24 @@
]
},
"xai/grok-3": {
"cache_read_input_token_cost": 7.5e-07,
"input_cost_per_token": 3e-06,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://x.ai/api#pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_response_schema": false,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-3-beta": {
"cache_read_input_token_cost": 7.5e-07,
@ -44115,21 +44134,24 @@
"supports_web_search": true
},
"xai/grok-3-latest": {
"cache_read_input_token_cost": 7.5e-07,
"input_cost_per_token": 3e-06,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 131072,
"max_output_tokens": 131072,
"max_tokens": 131072,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://x.ai/api#pricing",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_response_schema": false,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-3-mini": {
"cache_read_input_token_cost": 7.5e-08,
@ -44236,89 +44258,99 @@
"supports_web_search": true
},
"xai/grok-4": {
"input_cost_per_token": 3e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-fast-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-fast-non-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-0709": {
"input_cost_per_token": 3e-06,
"input_cost_per_token_above_128k_tokens": 6e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token_above_128k_tokens": 3e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-latest": {
"input_cost_per_token": 3e-06,
"input_cost_per_token_above_128k_tokens": 6e-06,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 256000,
"max_output_tokens": 256000,
"max_tokens": 256000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"output_cost_per_token_above_128k_tokens": 3e-05,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_tool_choice": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast": {
"cache_read_input_token_cost": 5e-08,
@ -44342,16 +44374,14 @@
"supports_web_search": true
},
"xai/grok-4-1-fast-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44361,19 +44391,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-reasoning-latest": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44383,19 +44414,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-non-reasoning": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-non-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44404,19 +44436,20 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4-1-fast-non-reasoning-latest": {
"cache_read_input_token_cost": 5e-08,
"input_cost_per_token": 2e-07,
"input_cost_per_token_above_128k_tokens": 4e-07,
"cache_read_input_token_cost": 2e-07,
"input_cost_per_token": 1.25e-06,
"litellm_provider": "xai",
"max_input_tokens": 2000000.0,
"max_output_tokens": 2000000.0,
"max_tokens": 2000000.0,
"mode": "chat",
"output_cost_per_token": 5e-07,
"output_cost_per_token_above_128k_tokens": 1e-06,
"output_cost_per_token": 2.5e-06,
"source": "https://docs.x.ai/docs/models/grok-4-1-fast-non-reasoning",
"supports_audio_input": true,
"supports_function_calling": true,
@ -44425,7 +44458,10 @@
"supports_tool_choice": true,
"supports_vision": true,
"supports_web_search": true,
"deprecation_date": "2026-05-15"
"deprecation_date": "2026-05-15",
"input_cost_per_token_above_200k_tokens": 2.5e-06,
"output_cost_per_token_above_200k_tokens": 5e-06,
"cache_read_input_token_cost_above_200k_tokens": 4e-07
},
"xai/grok-4.20-multi-agent-beta-0309": {
"cache_read_input_token_cost": 2e-07,
@ -50432,14 +50468,13 @@
"us.xai.grok-4.6": {
"input_cost_per_token": 2.2e-06,
"output_cost_per_token": 6.6e-06,
"cache_read_input_token_cost": 5.5e-07,
"litellm_provider": "bedrock_converse",
"max_input_tokens": 500000,
"max_output_tokens": 500000,
"max_tokens": 500000,
"mode": "chat",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_prompt_caching": false,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true
@ -50447,14 +50482,13 @@
"global.xai.grok-4.6": {
"input_cost_per_token": 2e-06,
"output_cost_per_token": 6e-06,
"cache_read_input_token_cost": 5e-07,
"litellm_provider": "bedrock_converse",
"max_input_tokens": 500000,
"max_output_tokens": 500000,
"max_tokens": 500000,
"mode": "chat",
"supports_function_calling": true,
"supports_prompt_caching": true,
"supports_prompt_caching": false,
"supports_reasoning": true,
"supports_tool_choice": true,
"supports_vision": true

View file

@ -1611,6 +1611,18 @@ class TestEnableAnthropicPromptCaching:
monkeypatch.setattr(litellm, "enable_anthropic_prompt_caching", True)
assert self._points(model="anthropic.claude-3-5-sonnet-20240620-v1:0", provider="bedrock") == []
@pytest.mark.parametrize("model", ["us.xai.grok-4.6", "global.xai.grok-4.6"])
def test_bedrock_grok_not_injected(self, monkeypatch, local_model_cost_map, model):
"""Bedrock does not support prompt caching for Grok. The cost-map entries must
carry supports_prompt_caching=false so no breakpoints are injected; otherwise
Bedrock rejects the whole request ("You invoked an unsupported model or your
request did not allow prompt caching")."""
from litellm.utils import supports_prompt_caching
monkeypatch.setattr(litellm, "enable_anthropic_prompt_caching", True)
assert supports_prompt_caching(model=model, custom_llm_provider="bedrock") is False
assert self._points(model=model, provider="bedrock") == []
def test_stands_down_when_client_sent_cache_control(self, monkeypatch):
monkeypatch.setattr(litellm, "enable_anthropic_prompt_caching", True)
messages = [

View file

@ -127,11 +127,12 @@ class TestXAICostCalculator:
prompt_cost, completion_cost = cost_per_token(model="grok-4", usage=usage)
# Expected costs for grok-4:
# Input: 10 tokens * $3e-6 = $0.00003
# Completion: (200 + 150) tokens * $1.5e-5 = $0.00525
expected_prompt_cost = 10 * 3e-6
expected_completion_cost = (200 + 150) * 1.5e-5
# grok-4 was retired on 2026-05-15 and now redirects to grok-4.3, so it bills
# at grok-4.3's rates:
# Input: 10 tokens * $1.25e-6
# Completion: (200 + 150) tokens * $2.5e-6
expected_prompt_cost = 10 * 1.25e-6
expected_completion_cost = (200 + 150) * 2.5e-6
assert math.isclose(prompt_cost, expected_prompt_cost, rel_tol=1e-10)
assert math.isclose(completion_cost, expected_completion_cost, rel_tol=1e-10)
@ -193,7 +194,7 @@ class TestXAICostCalculator:
def test_tiered_pricing_above_128k_tokens(self):
"""Test tiered pricing for tokens above 128k."""
# Test with grok-4-fast-reasoning which has tiered pricing
# Test with grok-4-1-fast, which still carries a 128k tier
usage = Usage(
prompt_tokens=150000, # Above 128k threshold
completion_tokens=100000, # Above 128k threshold
@ -208,10 +209,10 @@ class TestXAICostCalculator:
)
prompt_cost, completion_cost = cost_per_token(
model="xai/grok-4-fast-reasoning", usage=usage
model="xai/grok-4-1-fast", usage=usage
)
# Expected costs for grok-4-fast-reasoning with tiered pricing:
# Expected costs for grok-4-1-fast with tiered pricing:
# Input: 150000 tokens * $0.4e-6 (ALL tokens at tiered rate since input > 128k) = $0.06
# Completion: (100000 + 50000) tokens * $1e-6 (tiered rate since input > 128k) = $0.15
expected_prompt_cost = 150000 * 0.4e-6
@ -222,7 +223,7 @@ class TestXAICostCalculator:
def test_tiered_pricing_below_128k_tokens(self):
"""Test that regular pricing is used for tokens below 128k threshold."""
# Test with grok-4-fast-reasoning which has tiered pricing
# Test with grok-4-1-fast, which still carries a 128k tier
usage = Usage(
prompt_tokens=100000, # Below 128k threshold
completion_tokens=50000,
@ -237,10 +238,10 @@ class TestXAICostCalculator:
)
prompt_cost, completion_cost = cost_per_token(
model="xai/grok-4-fast-reasoning", usage=usage
model="xai/grok-4-1-fast", usage=usage
)
# Expected costs for grok-4-fast-reasoning with regular pricing:
# Expected costs for grok-4-1-fast with regular pricing:
# Input: 100000 tokens * $0.2e-6 (regular rate) = $0.02
# Completion: (50000 + 10000) tokens * $0.5e-6 (regular rate) = $0.03
expected_prompt_cost = 100000 * 0.2e-6
@ -252,9 +253,9 @@ class TestXAICostCalculator:
def test_tiered_pricing_grok_4_latest(self):
"""Test tiered pricing for grok-4-latest model."""
usage = Usage(
prompt_tokens=200000, # Above 128k threshold
prompt_tokens=250000, # Above the 200k threshold
completion_tokens=100000,
total_tokens=350000,
total_tokens=400000,
completion_tokens_details=CompletionTokensDetailsWrapper(
accepted_prediction_tokens=0,
audio_tokens=0,
@ -268,11 +269,11 @@ class TestXAICostCalculator:
model="xai/grok-4-latest", usage=usage
)
# Expected costs for grok-4-latest with tiered pricing:
# Input: 200000 tokens * $6e-6 (ALL tokens at tiered rate since input > 128k) = $1.2
# Completion: (100000 + 50000) tokens * $30e-6 (tiered rate since input > 128k) = $4.5
expected_prompt_cost = 200000 * 6e-6
expected_completion_cost = (100000 + 50000) * 30e-6
# grok-4-latest redirects to grok-4.3, which tiers at 200k rather than 128k:
# Input: 250000 tokens * $2.5e-6 (ALL tokens at tiered rate since input > 200k)
# Completion: (100000 + 50000) tokens * $5e-6 (tiered rate since input > 200k)
expected_prompt_cost = 250000 * 2.5e-6
expected_completion_cost = (100000 + 50000) * 5e-6
assert math.isclose(prompt_cost, expected_prompt_cost, rel_tol=1e-10)
assert math.isclose(completion_cost, expected_completion_cost, rel_tol=1e-10)
@ -293,10 +294,10 @@ class TestXAICostCalculator:
)
prompt_cost, completion_cost = cost_per_token(
model="xai/grok-4-fast-reasoning", usage=usage
model="xai/grok-4-1-fast", usage=usage
)
# Expected costs for grok-4-fast-reasoning:
# Expected costs for grok-4-1-fast:
# Input: 150000 tokens * $0.4e-6 (ALL tokens at tiered rate since input > 128k) = $0.06
# Completion: (50000 + 10000) tokens * $1e-6 (tiered rate since input > 128k) = $0.06
expected_prompt_cost = 150000 * 0.4e-6

View file

@ -0,0 +1,133 @@
"""
xAI retired eight slugs on 2026-05-15 but kept them resolvable: chat slugs redirect to
grok-4.3 and bill at grok-4.3's rates, while the grok-code-fast slugs are aliases of
grok-build-0.1 and bill at its rates, so the registry must price them that way or spend
tracking is wrong.
https://docs.x.ai/developers/migration/may-15-retirement
https://docs.x.ai/developers/models/grok-build-0.1
"""
from __future__ import annotations
import json
from pathlib import Path
import pytest
REPO_ROOT = Path(__file__).parents[4]
PRICES_PATH = REPO_ROOT / "model_prices_and_context_window.json"
BACKUP_PRICES_PATH = REPO_ROOT / "litellm" / "model_prices_and_context_window_backup.json"
MAP_PATHS = (PRICES_PATH, BACKUP_PRICES_PATH)
REDIRECT_TARGET = "xai/grok-4.3"
REDIRECTED_SLUGS = (
"xai/grok-3",
"xai/grok-3-latest",
"xai/grok-4",
"xai/grok-4-0709",
"xai/grok-4-1-fast-non-reasoning",
"xai/grok-4-1-fast-non-reasoning-latest",
"xai/grok-4-1-fast-reasoning",
"xai/grok-4-1-fast-reasoning-latest",
"xai/grok-4-fast-non-reasoning",
"xai/grok-4-fast-reasoning",
"xai/grok-4-latest",
)
CODE_REDIRECT_TARGET = "xai/grok-build-0.1"
CODE_SLUGS = (
"xai/grok-code-fast",
"xai/grok-code-fast-1",
"xai/grok-code-fast-1-0825",
)
RETIREMENT_DATE = "2026-05-15"
BASE_COST_FIELDS = ("input_cost_per_token", "output_cost_per_token", "cache_read_input_token_cost")
TIER_COST_FIELDS = (
"input_cost_per_token_above_200k_tokens",
"output_cost_per_token_above_200k_tokens",
"cache_read_input_token_cost_above_200k_tokens",
)
STALE_TIER_FIELDS = (
"input_cost_per_token_above_128k_tokens",
"output_cost_per_token_above_128k_tokens",
"cache_read_input_token_cost_above_128k_tokens",
)
@pytest.fixture(scope="module", params=[p.name for p in MAP_PATHS])
def cost_map(request: pytest.FixtureRequest) -> dict:
path = next(p for p in MAP_PATHS if p.name == request.param)
return json.loads(path.read_text(encoding="utf-8"))
@pytest.mark.parametrize("slug", REDIRECTED_SLUGS)
def test_redirected_slug_bills_at_the_target_rate(cost_map: dict, slug: str):
target = cost_map[REDIRECT_TARGET]
entry = cost_map[slug]
for field in BASE_COST_FIELDS:
assert entry[field] == target[field], field
@pytest.mark.parametrize("slug", CODE_SLUGS)
def test_code_slug_bills_at_grok_build_rate(cost_map: dict, slug: str):
"""grok-code-fast* are aliases of grok-build-0.1, not grok-4.3 redirects."""
target = cost_map[CODE_REDIRECT_TARGET]
entry = cost_map[slug]
for field in (*BASE_COST_FIELDS, *TIER_COST_FIELDS):
assert entry[field] == target[field], field
@pytest.mark.parametrize("slug", (*REDIRECTED_SLUGS, *CODE_SLUGS))
def test_redirected_slug_keeps_its_retirement_date(cost_map: dict, slug: str):
assert cost_map[slug]["deprecation_date"] == RETIREMENT_DATE
@pytest.mark.parametrize("slug", REDIRECTED_SLUGS)
def test_no_slug_keeps_the_superseded_128k_tier(cost_map: dict, slug: str):
"""The 128k tier belonged to the retired model; grok-4.3 tiers at 200k."""
for field in STALE_TIER_FIELDS:
assert field not in cost_map[slug], field
@pytest.mark.parametrize("slug", REDIRECTED_SLUGS)
def test_redirected_slug_carries_the_target_tier_rates(cost_map: dict, slug: str):
"""The request executes as grok-4.3, so it is tiered at grok-4.3's 200k boundary."""
target = cost_map[REDIRECT_TARGET]
entry = cost_map[slug]
for field in TIER_COST_FIELDS:
assert entry[field] == target[field], field
def test_a_live_xai_model_is_untouched(cost_map: dict):
"""Guard against the repricing leaking onto models xAI still serves directly."""
assert cost_map["xai/grok-4.6"]["input_cost_per_token"] != cost_map[REDIRECT_TARGET]["input_cost_per_token"]
assert "deprecation_date" not in cost_map["xai/grok-4.6"]
def test_both_cost_maps_agree_on_the_redirected_slugs():
prices = json.loads(PRICES_PATH.read_text(encoding="utf-8"))
backup = json.loads(BACKUP_PRICES_PATH.read_text(encoding="utf-8"))
for slug in (*REDIRECTED_SLUGS, *CODE_SLUGS, REDIRECT_TARGET, CODE_REDIRECT_TARGET):
assert prices[slug] == backup[slug], slug
def test_every_retired_chat_slug_is_covered(cost_map: dict):
"""The list above must stay in step with what the registry marks retired."""
marked = {
key
for key, entry in cost_map.items()
if isinstance(entry, dict)
and entry.get("litellm_provider") == "xai"
and entry.get("deprecation_date") == RETIREMENT_DATE
and entry.get("mode") == "chat"
}
assert marked == {*REDIRECTED_SLUGS, *CODE_SLUGS}
def test_a_live_tiered_model_keeps_its_own_rates(cost_map: dict):
"""grok-4-1-fast is not retired, so it must keep its 128k tier and its own prices."""
entry = cost_map["xai/grok-4-1-fast"]
assert "deprecation_date" not in entry
assert entry["input_cost_per_token_above_128k_tokens"] == 4e-07
assert entry["input_cost_per_token"] == 2e-07