diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 2b2c5483d45..8f182b515e6 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -49944,7 +49944,8 @@ "supports_prompt_caching": true, "supports_reasoning": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_vision": true }, "runinfra/deepseek-ai/DeepSeek-V4-Flash-0731": { "cache_read_input_token_cost": 1e-08, @@ -50004,6 +50005,27 @@ "supports_response_schema": true, "supports_tool_choice": true }, + "runinfra/ornith-ai/Ornith-1.5-35B-A3B": { + "cache_read_input_token_cost": 1e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "runinfra", + "max_input_tokens": 262144, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "source": "https://runinfra.ai/inference-api/ornith-1-5-35b", + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "xai/grok-4.20-0309-non-reasoning": { "cache_read_input_token_cost": 2e-07, "input_cost_per_token": 1.25e-06, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 2b2c5483d45..8f182b515e6 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -49944,7 +49944,8 @@ "supports_prompt_caching": true, "supports_reasoning": true, "supports_response_schema": true, - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_vision": true }, "runinfra/deepseek-ai/DeepSeek-V4-Flash-0731": { "cache_read_input_token_cost": 1e-08, @@ -50004,6 +50005,27 @@ "supports_response_schema": true, "supports_tool_choice": true }, + "runinfra/ornith-ai/Ornith-1.5-35B-A3B": { + "cache_read_input_token_cost": 1e-08, + "input_cost_per_token": 1e-07, + "litellm_provider": "runinfra", + "max_input_tokens": 262144, + "max_output_tokens": 32768, + "max_tokens": 32768, + "mode": "chat", + "output_cost_per_token": 4e-07, + "source": "https://runinfra.ai/inference-api/ornith-1-5-35b", + "supported_endpoints": [ + "/v1/chat/completions" + ], + "supports_function_calling": true, + "supports_native_streaming": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true + }, "xai/grok-4.20-0309-non-reasoning": { "cache_read_input_token_cost": 2e-07, "input_cost_per_token": 1.25e-06, diff --git a/tests/test_litellm/llms/openai_like/test_json_providers.py b/tests/test_litellm/llms/openai_like/test_json_providers.py index bf27307d8fc..1dbdd079ebb 100644 --- a/tests/test_litellm/llms/openai_like/test_json_providers.py +++ b/tests/test_litellm/llms/openai_like/test_json_providers.py @@ -427,6 +427,7 @@ class TestRuninfra: ), "runinfra/Inferact/Qwen3.8-2.4T-A95B-NVFP4": (2e-06, 6e-06, 2e-07), "runinfra/Qwen/Qwen3.8-27B": (1e-07, 4e-07, 1e-08), + "runinfra/ornith-ai/Ornith-1.5-35B-A3B": (1e-07, 4e-07, 1e-08), } for model, (input_cost, output_cost, cache_read_cost) in expected_models.items(): assert model in model_cost @@ -449,6 +450,18 @@ class TestRuninfra: assert model_cost["runinfra/Qwen/Qwen3.8-27B"]["max_input_tokens"] == 262144 assert model_cost["runinfra/Inferact/Qwen3.8-2.4T-A95B-NVFP4"]["supports_response_schema"] is True assert model_cost["runinfra/Qwen/Qwen3.8-27B"]["supports_response_schema"] is True + assert model_cost["runinfra/ornith-ai/Ornith-1.5-35B-A3B"]["max_input_tokens"] == 262144 + # Image input is proven on exactly these two and declared on no other, + # so a copied flag on a text-only model reddens here. + for model, expected_vision in ( + ("runinfra/Qwen/Qwen3.8-27B", True), + ("runinfra/ornith-ai/Ornith-1.5-35B-A3B", True), + ("runinfra/deepseek-ai/DeepSeek-V4-Flash-0731", False), + ("runinfra/deepseek-ai/DeepSeek-V4-Pro-0813", False), + ("runinfra/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16", False), + ("runinfra/Inferact/Qwen3.8-2.4T-A95B-NVFP4", False), + ): + assert model_cost[model].get("supports_vision", False) is expected_vision class TestPublicAIIntegration: