From 607f425cc66d800d76a17e08aac1bddf0acd74b0 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Fri, 29 Aug 2025 13:15:43 -0700 Subject: [PATCH] [Bug]: Fix Can't set reasoning_effort for DeepSeek-V3.1 on DeepInfra by default (#14053) * fix DeepInfraConfig * track supports reasoning * fix: get_supported_openai_params * test_deepseek_supported_openai_params --- litellm/llms/deepinfra/chat/transformation.py | 14 ++++++-- ...odel_prices_and_context_window_backup.json | 33 ++++++++++++------- model_prices_and_context_window.json | 33 ++++++++++++------- .../test_deepinfra_chat_transformation.py | 22 +++++++++++++ 4 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 tests/test_litellm/llms/deepinfra/test_deepinfra_chat_transformation.py diff --git a/litellm/llms/deepinfra/chat/transformation.py b/litellm/llms/deepinfra/chat/transformation.py index 0d446d39b92..09cdabcdd82 100644 --- a/litellm/llms/deepinfra/chat/transformation.py +++ b/litellm/llms/deepinfra/chat/transformation.py @@ -12,6 +12,9 @@ class DeepInfraConfig(OpenAIGPTConfig): The class `DeepInfra` provides configuration for the DeepInfra's Chat Completions API interface. Below are the parameters: """ + @property + def custom_llm_provider(self) -> Optional[str]: + return "deepinfra" frequency_penalty: Optional[int] = None function_call: Optional[Union[str, dict]] = None @@ -53,7 +56,7 @@ class DeepInfraConfig(OpenAIGPTConfig): return super().get_config() def get_supported_openai_params(self, model: str): - return [ + supported_openai_params = [ "stream", "frequency_penalty", "function_call", @@ -68,9 +71,16 @@ class DeepInfraConfig(OpenAIGPTConfig): "top_p", "response_format", "tools", - "tool_choice", + "tool_choice" ] + if litellm.supports_reasoning( + model=model, + custom_llm_provider=self.custom_llm_provider, + ): + supported_openai_params.append("reasoning_effort") + return supported_openai_params + def map_openai_params( self, non_default_params: dict, diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 122c87553f1..b4a36750fa2 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -15668,7 +15668,8 @@ "output_cost_per_token": 2.18e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1": { "max_tokens": 163840, @@ -15678,7 +15679,8 @@ "output_cost_per_token": 2.15e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-0528": { "max_tokens": 163840, @@ -15688,7 +15690,8 @@ "output_cost_per_token": 2.15e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-0528-Turbo": { "max_tokens": 32768, @@ -15698,7 +15701,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { "max_tokens": 131072, @@ -15708,7 +15712,8 @@ "output_cost_per_token": 4e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { "max_tokens": 131072, @@ -15718,7 +15723,8 @@ "output_cost_per_token": 1.5e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Turbo": { "max_tokens": 163840, @@ -15728,7 +15734,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3": { "max_tokens": 163840, @@ -15738,7 +15745,8 @@ "output_cost_per_token": 8.9e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3-0324": { "max_tokens": 163840, @@ -15748,7 +15756,8 @@ "output_cost_per_token": 8.8e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3-0324-Turbo": { "max_tokens": 32768, @@ -15758,7 +15767,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3.1": { "max_tokens": 163840, @@ -15768,7 +15778,8 @@ "output_cost_per_token": 1e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/google/codegemma-7b-it": { "max_tokens": 8192, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 122c87553f1..b4a36750fa2 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -15668,7 +15668,8 @@ "output_cost_per_token": 2.18e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1": { "max_tokens": 163840, @@ -15678,7 +15679,8 @@ "output_cost_per_token": 2.15e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-0528": { "max_tokens": 163840, @@ -15688,7 +15690,8 @@ "output_cost_per_token": 2.15e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-0528-Turbo": { "max_tokens": 32768, @@ -15698,7 +15701,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Llama-70B": { "max_tokens": 131072, @@ -15708,7 +15712,8 @@ "output_cost_per_token": 4e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B": { "max_tokens": 131072, @@ -15718,7 +15723,8 @@ "output_cost_per_token": 1.5e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-R1-Turbo": { "max_tokens": 163840, @@ -15728,7 +15734,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3": { "max_tokens": 163840, @@ -15738,7 +15745,8 @@ "output_cost_per_token": 8.9e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3-0324": { "max_tokens": 163840, @@ -15748,7 +15756,8 @@ "output_cost_per_token": 8.8e-07, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3-0324-Turbo": { "max_tokens": 32768, @@ -15758,7 +15767,8 @@ "output_cost_per_token": 3e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": true + "supports_tool_choice": true, + "supports_reasoning": true }, "deepinfra/deepseek-ai/DeepSeek-V3.1": { "max_tokens": 163840, @@ -15768,7 +15778,8 @@ "output_cost_per_token": 1e-06, "litellm_provider": "deepinfra", "mode": "chat", - "supports_tool_choice": false + "supports_tool_choice": false, + "supports_reasoning": true }, "deepinfra/google/codegemma-7b-it": { "max_tokens": 8192, diff --git a/tests/test_litellm/llms/deepinfra/test_deepinfra_chat_transformation.py b/tests/test_litellm/llms/deepinfra/test_deepinfra_chat_transformation.py new file mode 100644 index 00000000000..b2e9afb0c19 --- /dev/null +++ b/tests/test_litellm/llms/deepinfra/test_deepinfra_chat_transformation.py @@ -0,0 +1,22 @@ +import asyncio +import json +import os +import sys +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +# Add litellm to path +sys.path.insert(0, os.path.abspath("../../../..")) +import litellm + + +def test_deepseek_supported_openai_params(): + """ + Test "reasoning_effort" is an openai param supported for the DeepSeek model on deepinfra + """ + from litellm.llms.deepinfra.chat.transformation import DeepInfraConfig + + supported_openai_params = DeepInfraConfig().get_supported_openai_params(model="deepinfra/deepseek-ai/DeepSeek-V3.1") + print(supported_openai_params) + assert "reasoning_effort" in supported_openai_params