Latest Results
feat(core): add `reasoning_effort` as a standard chat model parameter (#38887)
`langchain-anthropic`, `langchain-openai`, `langchain-fireworks`, and
`langchain-xai` now support a standard `reasoning_effort` parameter. It
can be set at model construction or per invocation, with each provider
translating it to the appropriate API.
`ModelProfile` now exposes supported reasoning effort levels and the
default level for supported models.
---
Adds a standard `reasoning_effort` parameter across chat model
integrations. Like `temperature`, it can be set on the model or per
call, while each provider translates it into its own API format.
Motivating example: [`deepagents-code`
(dcode)](https://docs.langchain.com/oss/python/deepagents/code/overview)
implemented provider-agnostic reasoning effort itself. This PR upstreams
that support into LangChain's provider integrations, making
`reasoning_effort` a standard parameter and exposing supported levels
via `ModelProfile`.
```python
from langchain_anthropic import ChatAnthropic
model = ChatAnthropic(model="claude-sonnet-4-6")
model.invoke(
"Why do parrots have colorful feathers?",
reasoning_effort="high",
)
```
### Model specific labels and default
| Provider | Model / version | Levels supported | Default |
|----------|-----------------|------------------|---------|
| **OpenAI** | gpt-5.5, gpt-5.6* | `none`, `low`, `medium`, `high`,
`xhigh` (+ `max` on gpt-5.6+) | `medium` |
| | other gpt-5* | `none`, `low`, `medium`, `high`, `xhigh` | — |
| **Anthropic** | Opus 4.0 / 4.1 | *(none – predates effort entirely)* |
— |
| | Opus 4.5 | `low`, `medium`, `high` | `high` |
| | Opus 4.6 | `low`, `medium`, `high`, `max` | `high` |
| | Opus 4.7+ | `low`, `medium`, `high`, `xhigh`, `max` | `high` |
| | Sonnet 4.0 / 4.1 / 4.5 | *(none – predates or rejects effort)* | — |
| | Sonnet 4.6 | `low`, `medium`, `high`, `max` | `high` |
| | Sonnet 5+ | `low`, `medium`, `high`, `xhigh`, `max` | `high` |
| **Fireworks** | DeepSeek V4 Pro | `none`, `low`, `medium`, `high`,
`xhigh`, `max` | `high` |
| | Kimi K2 | `low`, `medium`, `high` | — |
| | GLM 5 | `none`, `high`, `max` | `max` |
| **xAI** | Grok 4.5-class models | `low`, `medium`, `high` | `high` |
### Provider specific details
| Provider | Model class | Translation |
|----------|-------------|-------------|
| **OpenAI** | `ChatOpenAI` | Translates `reasoning_effort` to
`reasoning.effort` and adds `summary: "auto"`. |
| **Anthropic** | `ChatAnthropic` | Translates `reasoning_effort` to
`output_config.effort` and defaults `thinking` to `adaptive`. |
| **Fireworks** | `ChatFireworks` | Sends `reasoning_effort` as a flat
field unchanged. |
| **xAI** | `ChatXAI` | Nests `reasoning_effort` under
`extra_body.reasoning_effort`. |
### Anthropic: `effort` alias
`ChatAnthropic` already exposed an `effort` parameter. This PR makes it
a true Pydantic alias for `reasoning_effort` while preserving existing
behavior.
- Both `effort` and `reasoning_effort` work at construction; if both are
provided, `effort` wins.
- Call-time (`.invoke()`, `.bind()`) support is handled manually to
preserve the same precedence, since Pydantic aliases only apply at
construction.
- `effort` remains supported (no deprecation).
### Other providers
- **DeepSeek**: inherits support from `BaseChatOpenAI`.
- **Groq** and **Perplexity**: already have native `reasoning_effort`
support.
- **OpenRouter** and **Mistral AI**: out of scope (no native support
today).
- **Google (Gemini)**: implemented separately in
[`langchain-google`](https://github.com/langchain-ai/langchain-google/pull/1895) Latest Branches
0%
0%
0%
© 2026 CodSpeed Technology