DeepSeek R1 has reasoning always enabled at the model level. The model:
- Always returns
reasoningContentin a separate content block (Block 0) - Always returns the final answer in a
textblock (Block 1) - Does NOT accept
thinkingorreasoning_configparameters inadditionalModelRequestFields - Sending reasoning parameters causes validation errors
Added a new flag no_reasoning_params to the reasoning configuration object.
"DeepSeek R1": {
"id": "us.deepseek.r1-v1:0",
"inference_profile": {
"prefix": "us",
"region": "us-west-2"
},
"region": ["us-east-1", "us-east-2", "us-west-2"],
"cost": {
"input_1k_price": 0.00135,
"output_1k_price": 0.0054
},
"maxTokens": 163840,
"vision": false,
"document": true,
"tool": false,
"streaming": true,
"reasoning": {
"enabled": true,
"openai_reasoning_modalities": true,
"no_reasoning_params": true
}
}enabled: true: Tells the app that reasoning is supportedopenai_reasoning_modalities: true:- Look for
reasoningContentfield in the response (notthinking) - Show reasoning as always-on in the UI (no toggle)
- Handle two-block response structure
- Look for
no_reasoning_params: true:- NEW FLAG - Prevents sending ANY reasoning parameters to the API
- No
additionalModelRequestFieldsfor reasoning - Avoids validation errors from the model
Added no_reasoning_params?: boolean to ReasoningConfig interface with documentation.
Added check before sending reasoning parameters:
if isinstance(reasoning_config, dict) and reasoning_config.get("no_reasoning_params"):
logger.debug("Model has reasoning always enabled - not sending any reasoning parameters")
# Don't add any reasoning parameters to additional_model_fields
elif isinstance(reasoning_config, dict) and reasoning_config.get("openai_reasoning_modalities"):
# ... existing OpenAI logic
else:
# ... existing Anthropic logic- Added
no_reasoning_paramsto the configuration parameter list - Added new example section "Model-Level Reasoning (Always On)"
- Explained when and why to use this flag
Verified that DeepSeek R1:
- ✅ Works without any
additionalModelRequestFields - ✅ Returns
reasoningContentin Block 0 - ✅ Returns final answer in Block 1
- ❌ Fails when sending
thinkingparameter - ✅ Works with the new configuration
- No breaking changes to existing models
- Only affects models with
no_reasoning_params: true - All other reasoning configurations work exactly as before