From 7d88da123c0d8319f352962fb45d82e69e6e4dc4 Mon Sep 17 00:00:00 2001 From: celeste1900 <253458269+celeste1900@users.noreply.github.com> Date: Fri, 3 Jul 2026 18:11:19 +0800 Subject: [PATCH 1/7] Add Ofox as an OpenAI-compatible provider (100 models) --- litellm/llms/openai_like/providers.json | 12 + model_prices_and_context_window.json | 1189 +++++++++++++++++ provider_endpoints_support.json | 17 + .../llms/openai_like/test_ofox_provider.py | 63 + 4 files changed, 1281 insertions(+) create mode 100644 tests/litellm/llms/openai_like/test_ofox_provider.py diff --git a/litellm/llms/openai_like/providers.json b/litellm/llms/openai_like/providers.json index d87346fea70..9b86a2729a4 100644 --- a/litellm/llms/openai_like/providers.json +++ b/litellm/llms/openai_like/providers.json @@ -176,5 +176,17 @@ "max_completion_tokens": "max_tokens" }, "supported_endpoints": ["/v1/chat/completions", "/v1/responses", "/v1/embeddings"] + }, + "ofox": { + "base_url": "https://api.ofox.ai/v1", + "api_key_env": "OFOX_API_KEY", + "api_base_env": "OFOX_API_BASE", + "param_mappings": { + "max_completion_tokens": "max_tokens" + }, + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ] } } diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index a3dcdaed3f7..ac32f13cef4 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -44072,5 +44072,1194 @@ } } ] + }, + "ofox/anthropic/claude-haiku-4.5": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "input_cost_per_token": 1e-06, + "output_cost_per_token": 5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1e-07 + }, + "ofox/anthropic/claude-opus-4.5": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 64000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 2.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/anthropic/claude-opus-4.6": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 2.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/anthropic/claude-opus-4.7": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 2.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/anthropic/claude-opus-4.8": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 2.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/anthropic/claude-sonnet-4.5": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-07 + }, + "ofox/anthropic/claude-sonnet-4.6": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-07 + }, + "ofox/anthropic/claude-sonnet-5": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-07 + }, + "ofox/bailian/qwen-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 32000, + "input_cost_per_token": 2.2e-08, + "output_cost_per_token": 2.2e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 4.3e-09 + }, + "ofox/bailian/qwen-max": { + "max_tokens": 32000, + "max_input_tokens": 32000, + "max_output_tokens": 8000, + "input_cost_per_token": 3.5e-07, + "output_cost_per_token": 1.38e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 6.9e-08 + }, + "ofox/bailian/qwen-plus": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 32000, + "input_cost_per_token": 1.2e-07, + "output_cost_per_token": 2.9e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.3e-08 + }, + "ofox/bailian/qwen-turbo": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 16000, + "input_cost_per_token": 5e-08, + "output_cost_per_token": 9e-08, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 8.6e-09 + }, + "ofox/bailian/qwen-vl-max": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 8000, + "input_cost_per_token": 2.3e-07, + "output_cost_per_token": 5.8e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 4.6e-08 + }, + "ofox/bailian/qwen3-coder-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 2.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 6e-08 + }, + "ofox/bailian/qwen3-coder-next": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 2e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": false + }, + "ofox/bailian/qwen3-coder-plus": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 1.8e-06, + "output_cost_per_token": 9e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2e-07 + }, + "ofox/bailian/qwen3-max": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 3.6e-07, + "output_cost_per_token": 1.43e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 7.2e-08 + }, + "ofox/bailian/qwen3.5-122b-a10b": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.9e-07, + "output_cost_per_token": 2.29e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.9e-07 + }, + "ofox/bailian/qwen3.5-27b": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.9e-07, + "output_cost_per_token": 2.05e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.9e-07 + }, + "ofox/bailian/qwen3.5-35b-a3b": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.9e-07, + "output_cost_per_token": 1.83e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.9e-07 + }, + "ofox/bailian/qwen3.5-397b-a17b": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 5.5e-07, + "output_cost_per_token": 3.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5.5e-07 + }, + "ofox/bailian/qwen3.5-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 1e-07, + "output_cost_per_token": 4e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1e-08 + }, + "ofox/bailian/qwen3.5-plus": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 4e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 4e-08 + }, + "ofox/bailian/qwen3.6-27b": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3.6e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "ofox/bailian/qwen3.6-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.5e-08 + }, + "ofox/bailian/qwen3.6-max-preview": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2e-07 + }, + "ofox/bailian/qwen3.6-plus": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-08 + }, + "ofox/bailian/qwen3.7-max": { + "max_tokens": 1064000, + "max_input_tokens": 1064000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.5e-06, + "output_cost_per_token": 7.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.5e-07 + }, + "ofox/bailian/qwen3.7-plus": { + "max_tokens": 1064000, + "max_input_tokens": 1064000, + "max_output_tokens": 64000, + "input_cost_per_token": 4e-07, + "output_cost_per_token": 1.6e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 8e-08 + }, + "ofox/deepseek/deepseek-v3.2": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 32000, + "input_cost_per_token": 2.9e-07, + "output_cost_per_token": 4.3e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 6e-08 + }, + "ofox/deepseek/deepseek-v4-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 1.4e-07, + "output_cost_per_token": 2.8e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.8e-09 + }, + "ofox/deepseek/deepseek-v4-pro": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 4.5e-07, + "output_cost_per_token": 8.8e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3.7e-09 + }, + "ofox/google/gemini-2.5-flash": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/google/gemini-2.5-flash-image": { + "max_tokens": 32000, + "max_input_tokens": 32000, + "max_output_tokens": 32000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-2.5-flash-lite": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 65535, + "input_cost_per_token": 1e-07, + "output_cost_per_token": 4e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.5e-08 + }, + "ofox/google/gemini-2.5-pro": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.25e-07 + }, + "ofox/google/gemini-3-flash-preview": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-08 + }, + "ofox/google/gemini-3-pro-image": { + "max_tokens": 66000, + "max_input_tokens": 66000, + "max_output_tokens": 32000, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-3-pro-image-preview": { + "max_tokens": 64000, + "max_input_tokens": 64000, + "max_output_tokens": 32000, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-3.1-flash-image": { + "max_tokens": 131000, + "max_input_tokens": 131000, + "max_output_tokens": 64000, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-3.1-flash-image-preview": { + "max_tokens": 64000, + "max_input_tokens": 64000, + "max_output_tokens": 64000, + "input_cost_per_token": 5e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-3.1-flash-lite": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.5e-08 + }, + "ofox/google/gemini-3.1-flash-lite-image": { + "max_tokens": 66000, + "max_input_tokens": 66000, + "max_output_tokens": 64000, + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 1.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": false, + "supports_vision": true + }, + "ofox/google/gemini-3.1-pro-preview": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-07 + }, + "ofox/google/gemini-3.5-flash": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 65536, + "input_cost_per_token": 1.5e-06, + "output_cost_per_token": 9e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.5e-07 + }, + "ofox/minimax/m2-her": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false + }, + "ofox/minimax/minimax-m2": { + "max_tokens": 204800, + "max_input_tokens": 204800, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/minimax/minimax-m2.1": { + "max_tokens": 204800, + "max_input_tokens": 204800, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/minimax/minimax-m2.1-lightning": { + "max_tokens": 204800, + "max_input_tokens": 204800, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/minimax/minimax-m2.5": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/minimax/minimax-m2.5-lightning": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/minimax/minimax-m2.7": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 131000, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 6e-08 + }, + "ofox/minimax/minimax-m2.7-highspeed": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 131000, + "input_cost_per_token": 6e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 6e-08 + }, + "ofox/minimax/minimax-m3": { + "max_tokens": 1131000, + "max_input_tokens": 1131000, + "max_output_tokens": 131000, + "input_cost_per_token": 6e-07, + "output_cost_per_token": 2.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.2e-07 + }, + "ofox/moonshotai/kimi-k2.5": { + "max_tokens": 262144, + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "input_cost_per_token": 6e-07, + "output_cost_per_token": 3e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1e-07 + }, + "ofox/moonshotai/kimi-k2.6": { + "max_tokens": 262144, + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "input_cost_per_token": 9.5e-07, + "output_cost_per_token": 4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.6e-07 + }, + "ofox/moonshotai/kimi-k2.7-code": { + "max_tokens": 262144, + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "input_cost_per_token": 9.5e-07, + "output_cost_per_token": 4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.9e-07 + }, + "ofox/moonshotai/kimi-k2.7-code-highspeed": { + "max_tokens": 262144, + "max_input_tokens": 262144, + "max_output_tokens": 262144, + "input_cost_per_token": 9.5e-07, + "output_cost_per_token": 4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.9e-07 + }, + "ofox/openai/gpt-4.1": { + "max_tokens": 1047576, + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 8e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/openai/gpt-4.1-mini": { + "max_tokens": 1047576, + "max_input_tokens": 1047576, + "max_output_tokens": 32768, + "input_cost_per_token": 4e-07, + "output_cost_per_token": 1.6e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1e-07 + }, + "ofox/openai/gpt-4o": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "input_cost_per_token": 2.5e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.25e-06 + }, + "ofox/openai/gpt-4o-mini": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "input_cost_per_token": 1.5e-07, + "output_cost_per_token": 6e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 7.5e-08 + }, + "ofox/openai/gpt-5": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 65536, + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.3e-07 + }, + "ofox/openai/gpt-5-mini": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 32768, + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/openai/gpt-5-nano": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 16384, + "input_cost_per_token": 5e-08, + "output_cost_per_token": 4e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1e-08 + }, + "ofox/openai/gpt-5.1": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.3e-07 + }, + "ofox/openai/gpt-5.1-codex-max": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 1e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.3e-07 + }, + "ofox/openai/gpt-5.1-codex-mini": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 65536, + "input_cost_per_token": 2.5e-07, + "output_cost_per_token": 2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/openai/gpt-5.2": { + "max_tokens": 512000, + "max_input_tokens": 512000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.75e-06, + "output_cost_per_token": 1.4e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.8e-07 + }, + "ofox/openai/gpt-5.2-codex": { + "max_tokens": 512000, + "max_input_tokens": 512000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.75e-06, + "output_cost_per_token": 1.4e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.8e-07 + }, + "ofox/openai/gpt-5.3-codex": { + "max_tokens": 512000, + "max_input_tokens": 512000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.75e-06, + "output_cost_per_token": 1.4e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.8e-07 + }, + "ofox/openai/gpt-5.4": { + "max_tokens": 1050000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 2.5e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.5e-07 + }, + "ofox/openai/gpt-5.4-mini": { + "max_tokens": 400000, + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "input_cost_per_token": 7.5e-07, + "output_cost_per_token": 4.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 7.5e-08 + }, + "ofox/openai/gpt-5.4-nano": { + "max_tokens": 400000, + "max_input_tokens": 400000, + "max_output_tokens": 128000, + "input_cost_per_token": 2e-07, + "output_cost_per_token": 1.25e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-08 + }, + "ofox/openai/gpt-5.4-pro": { + "max_tokens": 1050000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 3e-05, + "output_cost_per_token": 0.00018, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true + }, + "ofox/openai/gpt-5.5": { + "max_tokens": 1050000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 3e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07 + }, + "ofox/volcengine/doubao-seed-1-6": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 1.2e-07, + "output_cost_per_token": 2.9e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.3e-08 + }, + "ofox/volcengine/doubao-seed-1-6-flash": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 32000, + "input_cost_per_token": 3e-08, + "output_cost_per_token": 2.2e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 4.3e-09 + }, + "ofox/volcengine/doubao-seed-1-6-vision": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 32000, + "input_cost_per_token": 1.2e-07, + "output_cost_per_token": 1.15e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.3e-08 + }, + "ofox/volcengine/doubao-seed-1-8": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 64000, + "input_cost_per_token": 1.2e-07, + "output_cost_per_token": 2.9e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.3e-08 + }, + "ofox/volcengine/doubao-seed-2.0-code": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 128000, + "input_cost_per_token": 6.7e-07, + "output_cost_per_token": 3.36e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.4e-07 + }, + "ofox/volcengine/doubao-seed-2.0-lite": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 32000, + "input_cost_per_token": 1.3e-07, + "output_cost_per_token": 7.6e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-08 + }, + "ofox/volcengine/doubao-seed-2.0-mini": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 32000, + "input_cost_per_token": 6e-08, + "output_cost_per_token": 5.6e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-08 + }, + "ofox/volcengine/doubao-seed-2.0-pro": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 128000, + "input_cost_per_token": 6.7e-07, + "output_cost_per_token": 3.36e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.4e-07 + }, + "ofox/volcengine/doubao-seed-2.1-pro": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "input_cost_per_token": 8.84e-07, + "output_cost_per_token": 4.42e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.77e-07 + }, + "ofox/volcengine/doubao-seed-2.1-turbo": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "input_cost_per_token": 4.42e-07, + "output_cost_per_token": 2.212e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 8.5e-08 + }, + "ofox/volcengine/doubao-seed-character": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "input_cost_per_token": 1.77e-07, + "output_cost_per_token": 8.84e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.4e-08 + }, + "ofox/volcengine/doubao-seed-evolving": { + "max_tokens": 256000, + "max_input_tokens": 256000, + "max_output_tokens": 256000, + "input_cost_per_token": 8.84e-07, + "output_cost_per_token": 4.42e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1.77e-07 + }, + "ofox/x-ai/grok-4.1-fast": { + "max_tokens": 2000000, + "max_input_tokens": 2000000, + "max_output_tokens": 30000, + "input_cost_per_token": 2e-07, + "output_cost_per_token": 5e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-08 + }, + "ofox/x-ai/grok-4.20": { + "max_tokens": 2000000, + "max_input_tokens": 2000000, + "max_output_tokens": 128000, + "input_cost_per_token": 4e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 4e-07 + }, + "ofox/x-ai/grok-4.3": { + "max_tokens": 1000000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 2.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-08 + }, + "ofox/z-ai/glm-4.6": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 4e-07, + "output_cost_per_token": 1.9e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.1e-07 + }, + "ofox/z-ai/glm-4.7": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 4e-07, + "output_cost_per_token": 2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 8e-08 + }, + "ofox/z-ai/glm-4.7-flash:free": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 0.0, + "output_cost_per_token": 0.0, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false + }, + "ofox/z-ai/glm-4.7-flashx": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 7.2e-08, + "output_cost_per_token": 4.3e-07, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.5e-08 + }, + "ofox/z-ai/glm-5": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 1e-06, + "output_cost_per_token": 3.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2e-07 + }, + "ofox/z-ai/glm-5-turbo": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.2e-06, + "output_cost_per_token": 4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.4e-07 + }, + "ofox/z-ai/glm-5.1": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.6e-07 + }, + "ofox/z-ai/glm-5.2": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 128000, + "input_cost_per_token": 1.4e-06, + "output_cost_per_token": 4.4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 2.6e-07 + }, + "ofox/z-ai/glm-5v-turbo": { + "max_tokens": 200000, + "max_input_tokens": 200000, + "max_output_tokens": 128000, + "input_cost_per_token": 1.2e-06, + "output_cost_per_token": 4e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.4e-07 } } diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index 3034ada56ba..79cd61bd09a 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -2924,6 +2924,23 @@ "rerank": false, "a2a": false } + }, + "ofox": { + "display_name": "Ofox (`ofox`)", + "url": "https://docs.litellm.ai/docs/providers/ofox", + "endpoints": { + "chat_completions": true, + "messages": false, + "responses": true, + "embeddings": true, + "image_generations": true, + "audio_transcriptions": true, + "audio_speech": false, + "moderations": false, + "batches": false, + "rerank": false, + "a2a": false + } } }, "endpoints": { diff --git a/tests/litellm/llms/openai_like/test_ofox_provider.py b/tests/litellm/llms/openai_like/test_ofox_provider.py new file mode 100644 index 00000000000..f8291a1a085 --- /dev/null +++ b/tests/litellm/llms/openai_like/test_ofox_provider.py @@ -0,0 +1,63 @@ +""" +Unit tests for the Ofox OpenAI-like provider. +""" + +import os +import sys + +sys.path.insert( + 0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../..")) +) + +from litellm.llms.openai_like.dynamic_config import create_config_class +from litellm.llms.openai_like.json_loader import JSONProviderRegistry + +OFOX_BASE_URL = "https://api.ofox.ai/v1" + + +def _get_config(): + provider = JSONProviderRegistry.get("ofox") + assert provider is not None + config_class = create_config_class(provider) + return config_class() + + +def test_ofox_provider_registered(): + provider = JSONProviderRegistry.get("ofox") + assert provider is not None + assert provider.base_url == OFOX_BASE_URL + assert provider.api_key_env == "OFOX_API_KEY" + assert provider.api_base_env == "OFOX_API_BASE" + + +def test_ofox_resolves_env_api_key(monkeypatch): + config = _get_config() + monkeypatch.setenv("OFOX_API_KEY", "test-key") + api_base, api_key = config._get_openai_compatible_provider_info(None, None) + assert api_base == OFOX_BASE_URL + assert api_key == "test-key" + + +def test_ofox_maps_max_completion_tokens(): + config = _get_config() + params = config.map_openai_params( + non_default_params={"max_completion_tokens": 256}, + optional_params={}, + model="ofox/openai/gpt-5.5", + drop_params=False, + ) + assert params.get("max_tokens") == 256 + assert "max_completion_tokens" not in params + + +def test_ofox_complete_url_appends_endpoint(): + config = _get_config() + url = config.get_complete_url( + api_base=OFOX_BASE_URL, + api_key="test-key", + model="ofox/openai/gpt-5.5", + optional_params={}, + litellm_params={}, + stream=False, + ) + assert url == f"{OFOX_BASE_URL}/chat/completions" From dc7f695a13135188ed16f1a210eb2ffeec79a84c Mon Sep 17 00:00:00 2001 From: celeste1900 <253458269+celeste1900@users.noreply.github.com> Date: Fri, 3 Jul 2026 18:27:25 +0800 Subject: [PATCH 2/7] fix(ofox): align max_tokens with max_output_tokens and inherit adaptive_thinking - max_tokens now equals max_output_tokens (litellm convention; fixes test_max_tokens_consistency) - inherit supports_adaptive_thinking (and reasoning/caching/schema flags) from canonical entries for Claude models (fixes claude-sonnet-5 config test) --- model_prices_and_context_window.json | 373 +++++++++++++++++---------- 1 file changed, 243 insertions(+), 130 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index ac32f13cef4..17f61361752 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -44074,7 +44074,7 @@ ] }, "ofox/anthropic/claude-haiku-4.5": { - "max_tokens": 200000, + "max_tokens": 64000, "max_input_tokens": 200000, "max_output_tokens": 64000, "input_cost_per_token": 1e-06, @@ -44083,10 +44083,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1e-07 + "cache_read_input_token_cost": 1e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-opus-4.5": { - "max_tokens": 200000, + "max_tokens": 64000, "max_input_tokens": 200000, "max_output_tokens": 64000, "input_cost_per_token": 5e-06, @@ -44095,10 +44098,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-opus-4.6": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 5e-06, @@ -44107,10 +44113,14 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-opus-4.7": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 5e-06, @@ -44119,10 +44129,14 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-opus-4.8": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 5e-06, @@ -44131,10 +44145,14 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-sonnet-4.5": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 3e-06, @@ -44143,10 +44161,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-07 + "cache_read_input_token_cost": 3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-sonnet-4.6": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 3e-06, @@ -44155,10 +44176,14 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-07 + "cache_read_input_token_cost": 3e-07, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/anthropic/claude-sonnet-5": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 2e-06, @@ -44167,10 +44192,14 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2e-07 + "cache_read_input_token_cost": 2e-07, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/bailian/qwen-flash": { - "max_tokens": 1000000, + "max_tokens": 32000, "max_input_tokens": 1000000, "max_output_tokens": 32000, "input_cost_per_token": 2.2e-08, @@ -44182,7 +44211,7 @@ "cache_read_input_token_cost": 4.3e-09 }, "ofox/bailian/qwen-max": { - "max_tokens": 32000, + "max_tokens": 8000, "max_input_tokens": 32000, "max_output_tokens": 8000, "input_cost_per_token": 3.5e-07, @@ -44194,7 +44223,7 @@ "cache_read_input_token_cost": 6.9e-08 }, "ofox/bailian/qwen-plus": { - "max_tokens": 1000000, + "max_tokens": 32000, "max_input_tokens": 1000000, "max_output_tokens": 32000, "input_cost_per_token": 1.2e-07, @@ -44206,7 +44235,7 @@ "cache_read_input_token_cost": 2.3e-08 }, "ofox/bailian/qwen-turbo": { - "max_tokens": 128000, + "max_tokens": 16000, "max_input_tokens": 128000, "max_output_tokens": 16000, "input_cost_per_token": 5e-08, @@ -44218,7 +44247,7 @@ "cache_read_input_token_cost": 8.6e-09 }, "ofox/bailian/qwen-vl-max": { - "max_tokens": 128000, + "max_tokens": 8000, "max_input_tokens": 128000, "max_output_tokens": 8000, "input_cost_per_token": 2.3e-07, @@ -44230,7 +44259,7 @@ "cache_read_input_token_cost": 4.6e-08 }, "ofox/bailian/qwen3-coder-flash": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 5e-07, @@ -44242,7 +44271,7 @@ "cache_read_input_token_cost": 6e-08 }, "ofox/bailian/qwen3-coder-next": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 2e-07, @@ -44253,7 +44282,7 @@ "supports_vision": false }, "ofox/bailian/qwen3-coder-plus": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 1.8e-06, @@ -44265,7 +44294,7 @@ "cache_read_input_token_cost": 2e-07 }, "ofox/bailian/qwen3-max": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 3.6e-07, @@ -44277,7 +44306,7 @@ "cache_read_input_token_cost": 7.2e-08 }, "ofox/bailian/qwen3.5-122b-a10b": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 2.9e-07, @@ -44289,7 +44318,7 @@ "cache_read_input_token_cost": 2.9e-07 }, "ofox/bailian/qwen3.5-27b": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 2.9e-07, @@ -44301,7 +44330,7 @@ "cache_read_input_token_cost": 2.9e-07 }, "ofox/bailian/qwen3.5-35b-a3b": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 2.9e-07, @@ -44313,7 +44342,7 @@ "cache_read_input_token_cost": 2.9e-07 }, "ofox/bailian/qwen3.5-397b-a17b": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 5.5e-07, @@ -44325,7 +44354,7 @@ "cache_read_input_token_cost": 5.5e-07 }, "ofox/bailian/qwen3.5-flash": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 1e-07, @@ -44337,7 +44366,7 @@ "cache_read_input_token_cost": 1e-08 }, "ofox/bailian/qwen3.5-plus": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 4e-07, @@ -44349,7 +44378,7 @@ "cache_read_input_token_cost": 4e-08 }, "ofox/bailian/qwen3.6-27b": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 6e-07, @@ -44360,7 +44389,7 @@ "supports_vision": true }, "ofox/bailian/qwen3.6-flash": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 2.5e-07, @@ -44372,7 +44401,7 @@ "cache_read_input_token_cost": 2.5e-08 }, "ofox/bailian/qwen3.6-max-preview": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 2e-06, @@ -44384,7 +44413,7 @@ "cache_read_input_token_cost": 2e-07 }, "ofox/bailian/qwen3.6-plus": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 5e-07, @@ -44396,7 +44425,7 @@ "cache_read_input_token_cost": 5e-08 }, "ofox/bailian/qwen3.7-max": { - "max_tokens": 1064000, + "max_tokens": 64000, "max_input_tokens": 1064000, "max_output_tokens": 64000, "input_cost_per_token": 2.5e-06, @@ -44408,7 +44437,7 @@ "cache_read_input_token_cost": 2.5e-07 }, "ofox/bailian/qwen3.7-plus": { - "max_tokens": 1064000, + "max_tokens": 64000, "max_input_tokens": 1064000, "max_output_tokens": 64000, "input_cost_per_token": 4e-07, @@ -44420,7 +44449,7 @@ "cache_read_input_token_cost": 8e-08 }, "ofox/deepseek/deepseek-v3.2": { - "max_tokens": 128000, + "max_tokens": 32000, "max_input_tokens": 128000, "max_output_tokens": 32000, "input_cost_per_token": 2.9e-07, @@ -44432,7 +44461,7 @@ "cache_read_input_token_cost": 6e-08 }, "ofox/deepseek/deepseek-v4-flash": { - "max_tokens": 1000000, + "max_tokens": 384000, "max_input_tokens": 1000000, "max_output_tokens": 384000, "input_cost_per_token": 1.4e-07, @@ -44441,10 +44470,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 2.8e-09 + "cache_read_input_token_cost": 2.8e-09, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/deepseek/deepseek-v4-pro": { - "max_tokens": 1000000, + "max_tokens": 384000, "max_input_tokens": 1000000, "max_output_tokens": 384000, "input_cost_per_token": 4.5e-07, @@ -44453,10 +44484,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3.7e-09 + "cache_read_input_token_cost": 3.7e-09, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-2.5-flash": { - "max_tokens": 1048576, + "max_tokens": 65536, "max_input_tokens": 1048576, "max_output_tokens": 65536, "input_cost_per_token": 3e-07, @@ -44465,7 +44498,10 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-2.5-flash-image": { "max_tokens": 32000, @@ -44476,10 +44512,12 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": false, - "supports_vision": true + "supports_vision": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-2.5-flash-lite": { - "max_tokens": 1048576, + "max_tokens": 65535, "max_input_tokens": 1048576, "max_output_tokens": 65535, "input_cost_per_token": 1e-07, @@ -44488,10 +44526,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2.5e-08 + "cache_read_input_token_cost": 2.5e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-2.5-pro": { - "max_tokens": 1048576, + "max_tokens": 65536, "max_input_tokens": 1048576, "max_output_tokens": 65536, "input_cost_per_token": 1.25e-06, @@ -44500,10 +44541,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.25e-07 + "cache_read_input_token_cost": 1.25e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3-flash-preview": { - "max_tokens": 1048576, + "max_tokens": 65536, "max_input_tokens": 1048576, "max_output_tokens": 65536, "input_cost_per_token": 5e-07, @@ -44512,10 +44556,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-08 + "cache_read_input_token_cost": 5e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3-pro-image": { - "max_tokens": 66000, + "max_tokens": 32000, "max_input_tokens": 66000, "max_output_tokens": 32000, "input_cost_per_token": 2e-06, @@ -44523,10 +44570,12 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": false, - "supports_vision": true + "supports_vision": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3-pro-image-preview": { - "max_tokens": 64000, + "max_tokens": 32000, "max_input_tokens": 64000, "max_output_tokens": 32000, "input_cost_per_token": 2e-06, @@ -44534,10 +44583,12 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": false, - "supports_vision": true + "supports_vision": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3.1-flash-image": { - "max_tokens": 131000, + "max_tokens": 64000, "max_input_tokens": 131000, "max_output_tokens": 64000, "input_cost_per_token": 5e-07, @@ -44545,7 +44596,9 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": false, - "supports_vision": true + "supports_vision": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3.1-flash-image-preview": { "max_tokens": 64000, @@ -44556,10 +44609,12 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": false, - "supports_vision": true + "supports_vision": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3.1-flash-lite": { - "max_tokens": 1000000, + "max_tokens": 64000, "max_input_tokens": 1000000, "max_output_tokens": 64000, "input_cost_per_token": 2.5e-07, @@ -44568,10 +44623,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2.5e-08 + "cache_read_input_token_cost": 2.5e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3.1-flash-lite-image": { - "max_tokens": 66000, + "max_tokens": 64000, "max_input_tokens": 66000, "max_output_tokens": 64000, "input_cost_per_token": 2.5e-07, @@ -44582,7 +44640,7 @@ "supports_vision": true }, "ofox/google/gemini-3.1-pro-preview": { - "max_tokens": 1048576, + "max_tokens": 65536, "max_input_tokens": 1048576, "max_output_tokens": 65536, "input_cost_per_token": 2e-06, @@ -44591,10 +44649,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2e-07 + "cache_read_input_token_cost": 2e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/google/gemini-3.5-flash": { - "max_tokens": 1000000, + "max_tokens": 65536, "max_input_tokens": 1000000, "max_output_tokens": 65536, "input_cost_per_token": 1.5e-06, @@ -44603,10 +44664,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.5e-07 + "cache_read_input_token_cost": 1.5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/minimax/m2-her": { - "max_tokens": 200000, + "max_tokens": 131000, "max_input_tokens": 200000, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44617,7 +44681,7 @@ "supports_vision": false }, "ofox/minimax/minimax-m2": { - "max_tokens": 204800, + "max_tokens": 131000, "max_input_tokens": 204800, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44629,7 +44693,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/minimax/minimax-m2.1": { - "max_tokens": 204800, + "max_tokens": 131000, "max_input_tokens": 204800, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44641,7 +44705,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/minimax/minimax-m2.1-lightning": { - "max_tokens": 204800, + "max_tokens": 131000, "max_input_tokens": 204800, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44653,7 +44717,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/minimax/minimax-m2.5": { - "max_tokens": 200000, + "max_tokens": 131000, "max_input_tokens": 200000, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44665,7 +44729,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/minimax/minimax-m2.5-lightning": { - "max_tokens": 200000, + "max_tokens": 131000, "max_input_tokens": 200000, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44677,7 +44741,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/minimax/minimax-m2.7": { - "max_tokens": 200000, + "max_tokens": 131000, "max_input_tokens": 200000, "max_output_tokens": 131000, "input_cost_per_token": 3e-07, @@ -44689,7 +44753,7 @@ "cache_read_input_token_cost": 6e-08 }, "ofox/minimax/minimax-m2.7-highspeed": { - "max_tokens": 200000, + "max_tokens": 131000, "max_input_tokens": 200000, "max_output_tokens": 131000, "input_cost_per_token": 6e-07, @@ -44701,7 +44765,7 @@ "cache_read_input_token_cost": 6e-08 }, "ofox/minimax/minimax-m3": { - "max_tokens": 1131000, + "max_tokens": 131000, "max_input_tokens": 1131000, "max_output_tokens": 131000, "input_cost_per_token": 6e-07, @@ -44761,7 +44825,7 @@ "cache_read_input_token_cost": 1.9e-07 }, "ofox/openai/gpt-4.1": { - "max_tokens": 1047576, + "max_tokens": 32768, "max_input_tokens": 1047576, "max_output_tokens": 32768, "input_cost_per_token": 2e-06, @@ -44770,10 +44834,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-4.1-mini": { - "max_tokens": 1047576, + "max_tokens": 32768, "max_input_tokens": 1047576, "max_output_tokens": 32768, "input_cost_per_token": 4e-07, @@ -44782,10 +44848,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1e-07 + "cache_read_input_token_cost": 1e-07, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-4o": { - "max_tokens": 128000, + "max_tokens": 16384, "max_input_tokens": 128000, "max_output_tokens": 16384, "input_cost_per_token": 2.5e-06, @@ -44794,10 +44862,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.25e-06 + "cache_read_input_token_cost": 1.25e-06, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-4o-mini": { - "max_tokens": 128000, + "max_tokens": 16384, "max_input_tokens": 128000, "max_output_tokens": 16384, "input_cost_per_token": 1.5e-07, @@ -44806,10 +44876,12 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 7.5e-08 + "cache_read_input_token_cost": 7.5e-08, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5": { - "max_tokens": 256000, + "max_tokens": 65536, "max_input_tokens": 256000, "max_output_tokens": 65536, "input_cost_per_token": 1.25e-06, @@ -44818,10 +44890,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.3e-07 + "cache_read_input_token_cost": 1.3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5-mini": { - "max_tokens": 256000, + "max_tokens": 32768, "max_input_tokens": 256000, "max_output_tokens": 32768, "input_cost_per_token": 2.5e-07, @@ -44830,10 +44905,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5-nano": { - "max_tokens": 128000, + "max_tokens": 16384, "max_input_tokens": 128000, "max_output_tokens": 16384, "input_cost_per_token": 5e-08, @@ -44842,10 +44920,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 1e-08 + "cache_read_input_token_cost": 1e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.1": { - "max_tokens": 256000, + "max_tokens": 128000, "max_input_tokens": 256000, "max_output_tokens": 128000, "input_cost_per_token": 1.25e-06, @@ -44854,10 +44935,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.3e-07 + "cache_read_input_token_cost": 1.3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.1-codex-max": { - "max_tokens": 256000, + "max_tokens": 128000, "max_input_tokens": 256000, "max_output_tokens": 128000, "input_cost_per_token": 1.25e-06, @@ -44866,10 +44950,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.3e-07 + "cache_read_input_token_cost": 1.3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.1-codex-mini": { - "max_tokens": 256000, + "max_tokens": 65536, "max_input_tokens": 256000, "max_output_tokens": 65536, "input_cost_per_token": 2.5e-07, @@ -44878,10 +44965,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.2": { - "max_tokens": 512000, + "max_tokens": 128000, "max_input_tokens": 512000, "max_output_tokens": 128000, "input_cost_per_token": 1.75e-06, @@ -44890,10 +44980,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.8e-07 + "cache_read_input_token_cost": 1.8e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.2-codex": { - "max_tokens": 512000, + "max_tokens": 128000, "max_input_tokens": 512000, "max_output_tokens": 128000, "input_cost_per_token": 1.75e-06, @@ -44902,10 +44995,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.8e-07 + "cache_read_input_token_cost": 1.8e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.3-codex": { - "max_tokens": 512000, + "max_tokens": 128000, "max_input_tokens": 512000, "max_output_tokens": 128000, "input_cost_per_token": 1.75e-06, @@ -44914,10 +45010,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.8e-07 + "cache_read_input_token_cost": 1.8e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.4": { - "max_tokens": 1050000, + "max_tokens": 128000, "max_input_tokens": 1050000, "max_output_tokens": 128000, "input_cost_per_token": 2.5e-06, @@ -44926,10 +45025,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2.5e-07 + "cache_read_input_token_cost": 2.5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.4-mini": { - "max_tokens": 400000, + "max_tokens": 128000, "max_input_tokens": 400000, "max_output_tokens": 128000, "input_cost_per_token": 7.5e-07, @@ -44938,10 +45040,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 7.5e-08 + "cache_read_input_token_cost": 7.5e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.4-nano": { - "max_tokens": 400000, + "max_tokens": 128000, "max_input_tokens": 400000, "max_output_tokens": 128000, "input_cost_per_token": 2e-07, @@ -44950,10 +45055,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2e-08 + "cache_read_input_token_cost": 2e-08, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/openai/gpt-5.4-pro": { - "max_tokens": 1050000, + "max_tokens": 128000, "max_input_tokens": 1050000, "max_output_tokens": 128000, "input_cost_per_token": 3e-05, @@ -44961,10 +45069,12 @@ "litellm_provider": "ofox", "mode": "chat", "supports_function_calling": true, - "supports_vision": true + "supports_vision": true, + "supports_reasoning": true, + "supports_prompt_caching": true }, "ofox/openai/gpt-5.5": { - "max_tokens": 1050000, + "max_tokens": 128000, "max_input_tokens": 1050000, "max_output_tokens": 128000, "input_cost_per_token": 5e-06, @@ -44973,10 +45083,13 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-07 + "cache_read_input_token_cost": 5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true, + "supports_response_schema": true }, "ofox/volcengine/doubao-seed-1-6": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 1.2e-07, @@ -44988,7 +45101,7 @@ "cache_read_input_token_cost": 2.3e-08 }, "ofox/volcengine/doubao-seed-1-6-flash": { - "max_tokens": 256000, + "max_tokens": 32000, "max_input_tokens": 256000, "max_output_tokens": 32000, "input_cost_per_token": 3e-08, @@ -45000,7 +45113,7 @@ "cache_read_input_token_cost": 4.3e-09 }, "ofox/volcengine/doubao-seed-1-6-vision": { - "max_tokens": 256000, + "max_tokens": 32000, "max_input_tokens": 256000, "max_output_tokens": 32000, "input_cost_per_token": 1.2e-07, @@ -45012,7 +45125,7 @@ "cache_read_input_token_cost": 2.3e-08 }, "ofox/volcengine/doubao-seed-1-8": { - "max_tokens": 256000, + "max_tokens": 64000, "max_input_tokens": 256000, "max_output_tokens": 64000, "input_cost_per_token": 1.2e-07, @@ -45024,7 +45137,7 @@ "cache_read_input_token_cost": 2.3e-08 }, "ofox/volcengine/doubao-seed-2.0-code": { - "max_tokens": 256000, + "max_tokens": 128000, "max_input_tokens": 256000, "max_output_tokens": 128000, "input_cost_per_token": 6.7e-07, @@ -45036,7 +45149,7 @@ "cache_read_input_token_cost": 1.4e-07 }, "ofox/volcengine/doubao-seed-2.0-lite": { - "max_tokens": 256000, + "max_tokens": 32000, "max_input_tokens": 256000, "max_output_tokens": 32000, "input_cost_per_token": 1.3e-07, @@ -45048,7 +45161,7 @@ "cache_read_input_token_cost": 3e-08 }, "ofox/volcengine/doubao-seed-2.0-mini": { - "max_tokens": 256000, + "max_tokens": 32000, "max_input_tokens": 256000, "max_output_tokens": 32000, "input_cost_per_token": 6e-08, @@ -45060,7 +45173,7 @@ "cache_read_input_token_cost": 2e-08 }, "ofox/volcengine/doubao-seed-2.0-pro": { - "max_tokens": 256000, + "max_tokens": 128000, "max_input_tokens": 256000, "max_output_tokens": 128000, "input_cost_per_token": 6.7e-07, @@ -45120,7 +45233,7 @@ "cache_read_input_token_cost": 1.77e-07 }, "ofox/x-ai/grok-4.1-fast": { - "max_tokens": 2000000, + "max_tokens": 30000, "max_input_tokens": 2000000, "max_output_tokens": 30000, "input_cost_per_token": 2e-07, @@ -45132,7 +45245,7 @@ "cache_read_input_token_cost": 5e-08 }, "ofox/x-ai/grok-4.20": { - "max_tokens": 2000000, + "max_tokens": 128000, "max_input_tokens": 2000000, "max_output_tokens": 128000, "input_cost_per_token": 4e-06, @@ -45144,7 +45257,7 @@ "cache_read_input_token_cost": 4e-07 }, "ofox/x-ai/grok-4.3": { - "max_tokens": 1000000, + "max_tokens": 128000, "max_input_tokens": 1000000, "max_output_tokens": 128000, "input_cost_per_token": 1.25e-06, @@ -45156,7 +45269,7 @@ "cache_read_input_token_cost": 2e-08 }, "ofox/z-ai/glm-4.6": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 4e-07, @@ -45168,7 +45281,7 @@ "cache_read_input_token_cost": 1.1e-07 }, "ofox/z-ai/glm-4.7": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 4e-07, @@ -45180,7 +45293,7 @@ "cache_read_input_token_cost": 8e-08 }, "ofox/z-ai/glm-4.7-flash:free": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 0.0, @@ -45191,7 +45304,7 @@ "supports_vision": false }, "ofox/z-ai/glm-4.7-flashx": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 7.2e-08, @@ -45203,7 +45316,7 @@ "cache_read_input_token_cost": 1.5e-08 }, "ofox/z-ai/glm-5": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 1e-06, @@ -45215,7 +45328,7 @@ "cache_read_input_token_cost": 2e-07 }, "ofox/z-ai/glm-5-turbo": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 1.2e-06, @@ -45227,7 +45340,7 @@ "cache_read_input_token_cost": 2.4e-07 }, "ofox/z-ai/glm-5.1": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 1.4e-06, @@ -45239,7 +45352,7 @@ "cache_read_input_token_cost": 2.6e-07 }, "ofox/z-ai/glm-5.2": { - "max_tokens": 1048576, + "max_tokens": 128000, "max_input_tokens": 1048576, "max_output_tokens": 128000, "input_cost_per_token": 1.4e-06, @@ -45251,7 +45364,7 @@ "cache_read_input_token_cost": 2.6e-07 }, "ofox/z-ai/glm-5v-turbo": { - "max_tokens": 200000, + "max_tokens": 128000, "max_input_tokens": 200000, "max_output_tokens": 128000, "input_cost_per_token": 1.2e-06, From c71d444831f96fef8a55538a18ff88a72d18d44b Mon Sep 17 00:00:00 2001 From: celeste1900 <253458269+celeste1900@users.noreply.github.com> Date: Mon, 6 Jul 2026 10:49:08 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix(ofox):=20address=20Greptile=20review=20?= =?UTF-8?q?=E2=80=94=20drop=20:free=20key,=20align=20advertised=20endpoint?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove ofox/z-ai/glm-4.7-flash:free (non-standard colon suffix, unsafe for litellm routing) - provider_endpoints_support: only advertise chat_completions + responses (the modalities this PR actually ships); embeddings/images/audio deferred with their models --- model_prices_and_context_window.json | 11 ----------- provider_endpoints_support.json | 6 +++--- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 17f61361752..ed5ede3eff4 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -45292,17 +45292,6 @@ "supports_vision": false, "cache_read_input_token_cost": 8e-08 }, - "ofox/z-ai/glm-4.7-flash:free": { - "max_tokens": 128000, - "max_input_tokens": 200000, - "max_output_tokens": 128000, - "input_cost_per_token": 0.0, - "output_cost_per_token": 0.0, - "litellm_provider": "ofox", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": false - }, "ofox/z-ai/glm-4.7-flashx": { "max_tokens": 128000, "max_input_tokens": 200000, diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index 79cd61bd09a..5c1fa786255 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -2932,9 +2932,9 @@ "chat_completions": true, "messages": false, "responses": true, - "embeddings": true, - "image_generations": true, - "audio_transcriptions": true, + "embeddings": false, + "image_generations": false, + "audio_transcriptions": false, "audio_speech": false, "moderations": false, "batches": false, From 9240a01fcb4520e66fe35296e3f8260ad53714fb Mon Sep 17 00:00:00 2001 From: celeste1900 <253458269+celeste1900@users.noreply.github.com> Date: Fri, 17 Jul 2026 11:25:34 +0800 Subject: [PATCH 4/7] fix(ofox): sync cache pricing with provider catalog Correct cache_read for grok-4.3 and qwen3.7-max, and add cache_creation cost for models that charge it (Anthropic/Qwen/MiniMax/Doubao). Gemini is intentionally excluded: it bills hourly cache storage, not a per-write cost. --- model_prices_and_context_window.json | 85 +++++++++++++++++++--------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index ed5ede3eff4..be734fb6da2 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -44084,6 +44084,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 1e-07, + "cache_creation_input_token_cost": 1.25e-06, "supports_reasoning": true, "supports_prompt_caching": true, "supports_response_schema": true @@ -44099,6 +44100,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 6.25e-06, "supports_reasoning": true, "supports_prompt_caching": true, "supports_response_schema": true @@ -44114,6 +44116,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 6.25e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, "supports_prompt_caching": true, @@ -44130,6 +44133,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 6.25e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, "supports_prompt_caching": true, @@ -44146,6 +44150,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 6.25e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, "supports_prompt_caching": true, @@ -44162,6 +44167,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 3e-07, + "cache_creation_input_token_cost": 3.75e-06, "supports_reasoning": true, "supports_prompt_caching": true, "supports_response_schema": true @@ -44177,6 +44183,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 3e-07, + "cache_creation_input_token_cost": 3.75e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, "supports_prompt_caching": true, @@ -44193,6 +44200,7 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 2e-07, + "cache_creation_input_token_cost": 2.5e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, "supports_prompt_caching": true, @@ -44208,7 +44216,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 4.3e-09 + "cache_read_input_token_cost": 4.3e-09, + "cache_creation_input_token_cost": 2.7e-08 }, "ofox/bailian/qwen-max": { "max_tokens": 8000, @@ -44268,7 +44277,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 6e-08 + "cache_read_input_token_cost": 6e-08, + "cache_creation_input_token_cost": 2.7e-07 }, "ofox/bailian/qwen3-coder-next": { "max_tokens": 64000, @@ -44291,7 +44301,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 2e-07 + "cache_read_input_token_cost": 2e-07, + "cache_creation_input_token_cost": 1e-06 }, "ofox/bailian/qwen3-max": { "max_tokens": 64000, @@ -44363,7 +44374,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1e-08 + "cache_read_input_token_cost": 1e-08, + "cache_creation_input_token_cost": 1.25e-07 }, "ofox/bailian/qwen3.5-plus": { "max_tokens": 64000, @@ -44375,7 +44387,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 4e-08 + "cache_read_input_token_cost": 4e-08, + "cache_creation_input_token_cost": 4e-07 }, "ofox/bailian/qwen3.6-27b": { "max_tokens": 64000, @@ -44398,7 +44411,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2.5e-08 + "cache_read_input_token_cost": 2.5e-08, + "cache_creation_input_token_cost": 3.1e-07 }, "ofox/bailian/qwen3.6-max-preview": { "max_tokens": 64000, @@ -44410,7 +44424,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 2e-07 + "cache_read_input_token_cost": 2e-07, + "cache_creation_input_token_cost": 2e-06 }, "ofox/bailian/qwen3.6-plus": { "max_tokens": 64000, @@ -44422,7 +44437,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 5e-08 + "cache_read_input_token_cost": 5e-08, + "cache_creation_input_token_cost": 6.25e-07 }, "ofox/bailian/qwen3.7-max": { "max_tokens": 64000, @@ -44434,7 +44450,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 2.5e-07 + "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 3.125e-06 }, "ofox/bailian/qwen3.7-plus": { "max_tokens": 64000, @@ -44446,7 +44463,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 8e-08 + "cache_read_input_token_cost": 8e-08, + "cache_creation_input_token_cost": 5e-07 }, "ofox/deepseek/deepseek-v3.2": { "max_tokens": 32000, @@ -44690,7 +44708,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.1": { "max_tokens": 131000, @@ -44702,7 +44721,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.1-lightning": { "max_tokens": 131000, @@ -44714,7 +44734,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.5": { "max_tokens": 131000, @@ -44726,7 +44747,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.5-lightning": { "max_tokens": 131000, @@ -44738,7 +44760,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.7": { "max_tokens": 131000, @@ -44750,7 +44773,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 6e-08 + "cache_read_input_token_cost": 6e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m2.7-highspeed": { "max_tokens": 131000, @@ -44762,7 +44786,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": false, - "cache_read_input_token_cost": 6e-08 + "cache_read_input_token_cost": 6e-08, + "cache_creation_input_token_cost": 3.75e-07 }, "ofox/minimax/minimax-m3": { "max_tokens": 131000, @@ -45146,7 +45171,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.4e-07 + "cache_read_input_token_cost": 1.4e-07, + "cache_creation_input_token_cost": 2.4e-09 }, "ofox/volcengine/doubao-seed-2.0-lite": { "max_tokens": 32000, @@ -45158,7 +45184,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 3e-08 + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 2.4e-09 }, "ofox/volcengine/doubao-seed-2.0-mini": { "max_tokens": 32000, @@ -45170,7 +45197,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2e-08 + "cache_read_input_token_cost": 2e-08, + "cache_creation_input_token_cost": 2.4e-09 }, "ofox/volcengine/doubao-seed-2.0-pro": { "max_tokens": 128000, @@ -45182,7 +45210,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.4e-07 + "cache_read_input_token_cost": 1.4e-07, + "cache_creation_input_token_cost": 2.4e-09 }, "ofox/volcengine/doubao-seed-2.1-pro": { "max_tokens": 256000, @@ -45194,7 +45223,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.77e-07 + "cache_read_input_token_cost": 1.77e-07, + "cache_creation_input_token_cost": 2.5e-09 }, "ofox/volcengine/doubao-seed-2.1-turbo": { "max_tokens": 256000, @@ -45206,7 +45236,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 8.5e-08 + "cache_read_input_token_cost": 8.5e-08, + "cache_creation_input_token_cost": 2.4e-09 }, "ofox/volcengine/doubao-seed-character": { "max_tokens": 256000, @@ -45218,7 +45249,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2.4e-08 + "cache_read_input_token_cost": 2.4e-08, + "cache_creation_input_token_cost": 2.5e-09 }, "ofox/volcengine/doubao-seed-evolving": { "max_tokens": 256000, @@ -45230,7 +45262,8 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 1.77e-07 + "cache_read_input_token_cost": 1.77e-07, + "cache_creation_input_token_cost": 2.5e-09 }, "ofox/x-ai/grok-4.1-fast": { "max_tokens": 30000, @@ -45266,7 +45299,7 @@ "mode": "chat", "supports_function_calling": true, "supports_vision": true, - "cache_read_input_token_cost": 2e-08 + "cache_read_input_token_cost": 2e-07 }, "ofox/z-ai/glm-4.6": { "max_tokens": 128000, From b137c46d8815282fdbaeb181591e0bfd41a8cf01 Mon Sep 17 00:00:00 2001 From: celeste1900 Date: Mon, 24 Aug 2026 14:09:10 +0800 Subject: [PATCH 5/7] feat(ofox): add 13 recent models, drop 4 delisted entries Add: claude-fable-5, claude-opus-5, gemini-3.5-flash-lite, kimi-k3, gpt-5.6-luna/sol/terra (at our live billed prices, verified against usage records), grok-4.5, grok-4.6, and the dated DeepSeek snapshots deepseek-v4-flash-0423/-0731 and deepseek-v4-pro-0423/-0813 (DeepSeek replaced the bare aliases with dated snapshots upstream; prices match DeepSeek's official peak rates). Remove entries no longer served by the Ofox catalog (verified by live calls): deepseek/deepseek-v4-flash and deepseek-v4-pro (404), plus google/gemini-3-pro-image-preview and gemini-3.1-flash-image-preview (deprecated upstream). --- model_prices_and_context_window.json | 240 +++++++++++++++++++++------ 1 file changed, 186 insertions(+), 54 deletions(-) diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index dc4c69f3b1c..454c61ff2f9 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -46368,34 +46368,6 @@ "supports_vision": false, "cache_read_input_token_cost": 6e-08 }, - "ofox/deepseek/deepseek-v4-flash": { - "max_tokens": 384000, - "max_input_tokens": 1000000, - "max_output_tokens": 384000, - "input_cost_per_token": 1.4e-07, - "output_cost_per_token": 2.8e-07, - "litellm_provider": "ofox", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": false, - "cache_read_input_token_cost": 2.8e-09, - "supports_prompt_caching": true, - "supports_response_schema": true - }, - "ofox/deepseek/deepseek-v4-pro": { - "max_tokens": 384000, - "max_input_tokens": 1000000, - "max_output_tokens": 384000, - "input_cost_per_token": 4.5e-07, - "output_cost_per_token": 8.8e-07, - "litellm_provider": "ofox", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": false, - "cache_read_input_token_cost": 3.7e-09, - "supports_prompt_caching": true, - "supports_response_schema": true - }, "ofox/google/gemini-2.5-flash": { "max_tokens": 65536, "max_input_tokens": 1048576, @@ -46482,19 +46454,6 @@ "supports_prompt_caching": true, "supports_response_schema": true }, - "ofox/google/gemini-3-pro-image-preview": { - "max_tokens": 32000, - "max_input_tokens": 64000, - "max_output_tokens": 32000, - "input_cost_per_token": 2e-06, - "output_cost_per_token": 1.2e-05, - "litellm_provider": "ofox", - "mode": "chat", - "supports_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, "ofox/google/gemini-3.1-flash-image": { "max_tokens": 64000, "max_input_tokens": 131000, @@ -46508,19 +46467,6 @@ "supports_prompt_caching": true, "supports_response_schema": true }, - "ofox/google/gemini-3.1-flash-image-preview": { - "max_tokens": 64000, - "max_input_tokens": 64000, - "max_output_tokens": 64000, - "input_cost_per_token": 5e-07, - "output_cost_per_token": 3e-06, - "litellm_provider": "ofox", - "mode": "chat", - "supports_function_calling": false, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_response_schema": true - }, "ofox/google/gemini-3.1-flash-lite": { "max_tokens": 64000, "max_input_tokens": 1000000, @@ -47286,5 +47232,191 @@ "supports_function_calling": true, "supports_vision": true, "cache_read_input_token_cost": 2.4e-07 + }, + "ofox/anthropic/claude-fable-5": { + "max_tokens": 128000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 1e-05, + "output_cost_per_token": 5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 1e-06, + "cache_creation_input_token_cost": 1.25e-05, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/anthropic/claude-opus-5": { + "max_tokens": 128000, + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "input_cost_per_token": 5e-06, + "output_cost_per_token": 2.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 5e-07, + "cache_creation_input_token_cost": 6.25e-06, + "supports_adaptive_thinking": true, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/deepseek/deepseek-v4-flash-0423": { + "max_tokens": 384000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 4.4e-07, + "output_cost_per_token": 1.32e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.4e-08, + "supports_prompt_caching": true + }, + "ofox/deepseek/deepseek-v4-flash-0731": { + "max_tokens": 384000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 4.4e-07, + "output_cost_per_token": 1.32e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 1.4e-08, + "supports_prompt_caching": true + }, + "ofox/deepseek/deepseek-v4-pro-0423": { + "max_tokens": 384000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 1.32e-06, + "output_cost_per_token": 3.96e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 4.4e-08, + "supports_prompt_caching": true + }, + "ofox/deepseek/deepseek-v4-pro-0813": { + "max_tokens": 384000, + "max_input_tokens": 1000000, + "max_output_tokens": 384000, + "input_cost_per_token": 1.32e-06, + "output_cost_per_token": 3.96e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 4.4e-08, + "supports_prompt_caching": true + }, + "ofox/google/gemini-3.5-flash-lite": { + "max_tokens": 65536, + "max_input_tokens": 1000000, + "max_output_tokens": 65536, + "input_cost_per_token": 3e-07, + "output_cost_per_token": 2.5e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-08, + "cache_creation_input_token_cost": 8.3e-08, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/moonshotai/kimi-k3": { + "max_tokens": 1048576, + "max_input_tokens": 1048576, + "max_output_tokens": 1048576, + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/openai/gpt-5.6-luna": { + "max_tokens": 128000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 2e-07, + "output_cost_per_token": 1.2e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-08, + "cache_creation_input_token_cost": 2.5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/openai/gpt-5.6-sol": { + "max_tokens": 128000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 2.5e-06, + "output_cost_per_token": 1.5e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2.5e-07, + "cache_creation_input_token_cost": 3.125e-06, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/openai/gpt-5.6-terra": { + "max_tokens": 128000, + "max_input_tokens": 1050000, + "max_output_tokens": 128000, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1.2e-05, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": true, + "cache_read_input_token_cost": 2e-07, + "cache_creation_input_token_cost": 2.5e-06, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/x-ai/grok-4.5": { + "max_tokens": 65536, + "max_input_tokens": 500000, + "max_output_tokens": 65536, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 6e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 3e-07, + "supports_reasoning": true, + "supports_prompt_caching": true + }, + "ofox/x-ai/grok-4.6": { + "max_tokens": 65536, + "max_input_tokens": 500000, + "max_output_tokens": 65536, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 6e-06, + "litellm_provider": "ofox", + "mode": "chat", + "supports_function_calling": true, + "supports_vision": false, + "cache_read_input_token_cost": 5e-07, + "supports_reasoning": true, + "supports_prompt_caching": true } } From 948dd8816b3ba56bbcce927e41dc7554bfdf74fd Mon Sep 17 00:00:00 2001 From: celeste1900 Date: Tue, 25 Aug 2026 13:47:16 +0800 Subject: [PATCH 6/7] chore: trigger CI after marking ready for review From 26f9ff4c6d7aebc0914104eb0b139b6b540407bd Mon Sep 17 00:00:00 2001 From: celeste1900 Date: Thu, 27 Aug 2026 18:10:26 +0800 Subject: [PATCH 7/7] fix(ofox): align Claude 5 re-export entries with cost map invariants, drop sys.path hack in test Upstream now checks every claude-fable-5 and claude-opus-5 entry for prompt_cache_min_tokens 512, and every Fable 5 entry for thinking_always_on and supports_sampling_params false. The ofox/anthropic entries relay the Anthropic models unchanged, so they carry the same flags as the first-party entries. The backup cost map is mirrored to keep check_files_match green The provider test no longer inserts the repo root into sys.path (TQ003); pytest rootdir already makes litellm importable --- litellm/model_prices_and_context_window_backup.json | 8 ++++++-- model_prices_and_context_window.json | 8 ++++++-- tests/test_litellm/llms/openai_like/test_ofox_provider.py | 7 ------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 36d15242936..88ba34e7964 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -53021,7 +53021,10 @@ "cache_creation_input_token_cost": 1.25e-05, "supports_adaptive_thinking": true, "supports_reasoning": true, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "prompt_cache_min_tokens": 512, + "thinking_always_on": true, + "supports_sampling_params": false }, "ofox/anthropic/claude-opus-5": { "max_tokens": 128000, @@ -53037,7 +53040,8 @@ "cache_creation_input_token_cost": 6.25e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "prompt_cache_min_tokens": 512 }, "ofox/deepseek/deepseek-v4-flash-0423": { "max_tokens": 384000, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 36d15242936..88ba34e7964 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -53021,7 +53021,10 @@ "cache_creation_input_token_cost": 1.25e-05, "supports_adaptive_thinking": true, "supports_reasoning": true, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "prompt_cache_min_tokens": 512, + "thinking_always_on": true, + "supports_sampling_params": false }, "ofox/anthropic/claude-opus-5": { "max_tokens": 128000, @@ -53037,7 +53040,8 @@ "cache_creation_input_token_cost": 6.25e-06, "supports_adaptive_thinking": true, "supports_reasoning": true, - "supports_prompt_caching": true + "supports_prompt_caching": true, + "prompt_cache_min_tokens": 512 }, "ofox/deepseek/deepseek-v4-flash-0423": { "max_tokens": 384000, diff --git a/tests/test_litellm/llms/openai_like/test_ofox_provider.py b/tests/test_litellm/llms/openai_like/test_ofox_provider.py index f8291a1a085..882842f96a6 100644 --- a/tests/test_litellm/llms/openai_like/test_ofox_provider.py +++ b/tests/test_litellm/llms/openai_like/test_ofox_provider.py @@ -2,13 +2,6 @@ Unit tests for the Ofox OpenAI-like provider. """ -import os -import sys - -sys.path.insert( - 0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../..")) -) - from litellm.llms.openai_like.dynamic_config import create_config_class from litellm.llms.openai_like.json_loader import JSONProviderRegistry