mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-11 03:38:38 +00:00
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:
parent
401b12e64b
commit
f0849eb0c9
5 changed files with 388 additions and 174 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
133
tests/test_litellm/llms/xai/test_xai_redirected_slug_pricing.py
Normal file
133
tests/test_litellm/llms/xai/test_xai_redirected_slug_pricing.py
Normal 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
|
||||
Loading…
Add table
Reference in a new issue