Add support for reasoning param

This commit is contained in:
Sameer Kankute 2025-12-15 09:12:35 +05:30
parent bba229f922
commit 57e75a3082
5 changed files with 127 additions and 3 deletions

View file

@ -300,6 +300,51 @@ litellm_settings:
</TabItem>
</Tabs>
## Reasoning Effort
The `reasoning_effort` parameter is supported on select Fireworks AI models. Supported models include:
<Tabs>
<TabItem value="sdk" label="SDK">
```python
from litellm import completion
import os
os.environ["FIREWORKS_AI_API_KEY"] = "YOUR_API_KEY"
response = completion(
model="fireworks_ai/accounts/fireworks/models/qwen3-8b",
messages=[
{"role": "user", "content": "What is the capital of France?"}
],
reasoning_effort="low",
)
print(response)
```
</TabItem>
<TabItem value="proxy" label="PROXY">
```bash
curl http://0.0.0.0:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $LITELLM_KEY" \
-d '{
"model": "fireworks_ai/accounts/fireworks/models/qwen3-8b",
"messages": [
{
"role": "user",
"content": "What is the capital of France?"
}
],
"reasoning_effort": "low"
}'
```
</TabItem>
</Tabs>
## Supported Models - ALL Fireworks AI Models Supported!
:::info

View file

@ -25,7 +25,11 @@ from litellm.types.utils import (
ModelResponse,
ProviderSpecificModelInfo,
)
from litellm.utils import supports_function_calling, supports_tool_choice
from litellm.utils import (
supports_function_calling,
supports_reasoning,
supports_tool_choice,
)
from ...openai.chat.gpt_transformation import OpenAIGPTConfig
from ..common_utils import FireworksAIException
@ -51,6 +55,7 @@ class FireworksAIConfig(OpenAIGPTConfig):
response_format: Optional[dict] = None
user: Optional[str] = None
logprobs: Optional[int] = None
reasoning_effort: Optional[str] = None
# Non OpenAI parameters - Fireworks AI only params
prompt_truncate_length: Optional[int] = None
@ -71,6 +76,7 @@ class FireworksAIConfig(OpenAIGPTConfig):
response_format: Optional[dict] = None,
user: Optional[str] = None,
logprobs: Optional[int] = None,
reasoning_effort: Optional[str] = None,
prompt_truncate_length: Optional[int] = None,
context_length_exceeded_behavior: Optional[Literal["error", "truncate"]] = None,
) -> None:
@ -111,6 +117,10 @@ class FireworksAIConfig(OpenAIGPTConfig):
if supports_tool_choice(model=model, custom_llm_provider="fireworks_ai"):
supported_params.append("tool_choice")
# Only add reasoning_effort for models that support it
if supports_reasoning(model=model, custom_llm_provider="fireworks_ai"):
supported_params.append("reasoning_effort")
return supported_params
def map_openai_params(

View file

@ -10787,6 +10787,7 @@
"mode": "chat",
"output_cost_per_token": 1.68e-06,
"source": "https://fireworks.ai/pricing",
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10799,6 +10800,7 @@
"mode": "chat",
"output_cost_per_token": 1.68e-06,
"source": "https://fireworks.ai/pricing",
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10812,6 +10814,7 @@
"output_cost_per_token": 1.2e-06,
"source": "https://fireworks.ai/models/fireworks/deepseek-v3p2",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10838,6 +10841,7 @@
"output_cost_per_token": 2.19e-06,
"source": "https://fireworks.ai/models/fireworks/glm-4p5",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10851,6 +10855,7 @@
"output_cost_per_token": 8.8e-07,
"source": "https://artificialanalysis.ai/models/glm-4-5-air",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10864,6 +10869,7 @@
"mode": "chat",
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10877,6 +10883,7 @@
"output_cost_per_token": 6e-07,
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10890,6 +10897,7 @@
"output_cost_per_token": 2e-07,
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -29313,7 +29321,8 @@
"input_cost_per_token": 1.2e-06,
"output_cost_per_token": 1.2e-06,
"litellm_provider": "fireworks_ai",
"mode": "chat"
"mode": "chat",
"supports_reasoning": true
},
"fireworks_ai/accounts/fireworks/models/gpt-oss-safeguard-120b": {
"max_tokens": 131072,

View file

@ -10787,6 +10787,7 @@
"mode": "chat",
"output_cost_per_token": 1.68e-06,
"source": "https://fireworks.ai/pricing",
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10799,6 +10800,7 @@
"mode": "chat",
"output_cost_per_token": 1.68e-06,
"source": "https://fireworks.ai/pricing",
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10812,6 +10814,7 @@
"output_cost_per_token": 1.2e-06,
"source": "https://fireworks.ai/models/fireworks/deepseek-v3p2",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10838,6 +10841,7 @@
"output_cost_per_token": 2.19e-06,
"source": "https://fireworks.ai/models/fireworks/glm-4p5",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10851,6 +10855,7 @@
"output_cost_per_token": 8.8e-07,
"source": "https://artificialanalysis.ai/models/glm-4-5-air",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10864,6 +10869,7 @@
"mode": "chat",
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10877,6 +10883,7 @@
"output_cost_per_token": 6e-07,
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -10890,6 +10897,7 @@
"output_cost_per_token": 2e-07,
"source": "https://fireworks.ai/pricing",
"supports_function_calling": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true
},
@ -29313,7 +29321,8 @@
"input_cost_per_token": 1.2e-06,
"output_cost_per_token": 1.2e-06,
"litellm_provider": "fireworks_ai",
"mode": "chat"
"mode": "chat",
"supports_reasoning": true
},
"fireworks_ai/accounts/fireworks/models/gpt-oss-safeguard-120b": {
"max_tokens": 131072,

View file

@ -10,6 +10,7 @@ sys.path.insert(
0, os.path.abspath("../../../../..")
) # Adds the parent directory to the system path
from litellm import supports_reasoning
from litellm.llms.fireworks_ai.chat.transformation import FireworksAIConfig
from litellm.types.llms.openai import ChatCompletionToolCallFunctionChunk
from litellm.types.utils import ChatCompletionMessageToolCall, Function, Message
@ -57,3 +58,53 @@ def test_handle_message_content_with_tool_calls():
updated_message.tool_calls[0].function.arguments
== expected_tool_call.function.arguments
)
def test_supports_reasoning_effort():
"""Test that reasoning_effort is only supported for specific Fireworks AI models."""
# Models that support reasoning_effort
supported_models = [
"fireworks_ai/accounts/fireworks/models/qwen3-8b",
"fireworks_ai/accounts/fireworks/models/qwen3-32b",
"fireworks_ai/accounts/fireworks/models/qwen3-coder-480b-a35b-instruct",
"fireworks_ai/accounts/fireworks/models/deepseek-v3p1",
"fireworks_ai/accounts/fireworks/models/deepseek-v3p2",
"fireworks_ai/accounts/fireworks/models/glm-4p5",
"fireworks_ai/accounts/fireworks/models/glm-4p5-air",
"fireworks_ai/accounts/fireworks/models/glm-4p6",
"fireworks_ai/accounts/fireworks/models/gpt-oss-120b",
"fireworks_ai/accounts/fireworks/models/gpt-oss-20b",
]
# Models that don't support reasoning_effort
unsupported_models = [
"fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct",
"fireworks_ai/accounts/fireworks/models/mixtral-8x7b-instruct",
]
for model in supported_models:
assert (
supports_reasoning(model=model, custom_llm_provider="fireworks_ai") == True
), f"{model} should support reasoning_effort"
for model in unsupported_models:
assert (
supports_reasoning(model=model, custom_llm_provider="fireworks_ai") == False
), f"{model} should not support reasoning_effort"
def test_get_supported_openai_params_reasoning_effort():
"""Test that reasoning_effort is only included in supported params for models that support it."""
config = FireworksAIConfig()
# Model that supports reasoning_effort
supported_params = config.get_supported_openai_params(
"fireworks_ai/accounts/fireworks/models/qwen3-8b"
)
assert "reasoning_effort" in supported_params
# Model that doesn't support reasoning_effort
unsupported_params = config.get_supported_openai_params(
"fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct"
)
assert "reasoning_effort" not in unsupported_params