diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3187695341..7650a8c602 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1428,6 +1428,13 @@ As of 2026-10-21, the milestone includes **829 merged pull requests**.
stalling other runs, requests and streams meanwhile. They now read the
config once per call in a worker, as image search already did. ([#7580])
+- **wizard:** The setup wizard's Anthropic default model is now
+ `claude-sonnet-5-5` instead of the retired `claude-sonnet-4-20250514`, which
+ the Claude API no longer accepts. For that model the wizard leaves out the
+ extended-thinking (`budget_tokens`) and thinking-disabled templates it
+ rejects. The Anthropic examples in `config.example.yaml` and the
+ configuration docs follow the same model.([#7585])
+
- **auth:** The public auth routes (`/register`, `/setup-status`,
`/providers`, `/oauth/{provider}` and `/callback/{provider}`) no longer read
`config.yaml` and `extensions_config.json` on the event loop. Each request
@@ -13177,5 +13184,6 @@ with **180 merged pull requests** since the first 2.0 milestone tag.
[#7560]: https://github.com/bytedance/deer-flow/pull/7560
[#7576]: https://github.com/bytedance/deer-flow/pull/7576
[#7580]: https://github.com/bytedance/deer-flow/pull/7580
+[#7585]: https://github.com/bytedance/deer-flow/pull/7585
[#7588]: https://github.com/bytedance/deer-flow/pull/7588
[#7591]: https://github.com/bytedance/deer-flow/pull/7591
diff --git a/backend/tests/test_setup_wizard.py b/backend/tests/test_setup_wizard.py
index 84f6b8a473..4078b9faff 100644
--- a/backend/tests/test_setup_wizard.py
+++ b/backend/tests/test_setup_wizard.py
@@ -147,6 +147,20 @@ class TestProviders:
# Override must not mutate the shared provider-level config.
assert provider.extra_config["supports_vision"] is True
+ def test_anthropic_sonnet_5_5_omits_rejected_thinking_templates(self):
+ """Sonnet 5.5 rejects budget_tokens and thinking disabled; other Claude models keep them."""
+ providers = {provider.name: provider for provider in LLM_PROVIDERS}
+ anthropic = providers["anthropic"]
+ assert anthropic.default_model == "claude-sonnet-5-5"
+
+ config = anthropic.extra_config_for("claude-sonnet-5-5")
+ assert "when_thinking_enabled" not in config
+ assert "when_thinking_disabled" not in config
+
+ assert anthropic.extra_config_for("claude-sonnet-4-5")["when_thinking_enabled"]["thinking"]["budget_tokens"] == 4096
+ # Omission must not mutate the shared provider-level config.
+ assert "when_thinking_enabled" in anthropic.extra_config
+
def test_extra_config_for_returns_provider_config_without_override(self):
"""Providers without per-model overrides return their config unchanged."""
providers = {provider.name: provider for provider in LLM_PROVIDERS}
diff --git a/config.example.yaml b/config.example.yaml
index 84adfa82e0..b4d17baa84 100644
--- a/config.example.yaml
+++ b/config.example.yaml
@@ -396,29 +396,20 @@ models:
# for example on Docker Desktop:
# base_url: http://host.docker.internal:8080/v1
- # Example: Anthropic Claude model (with extended thinking)
- # supports_thinking: true is required — without it, DeerFlow silently falls
- # back to non-thinking mode even when the UI thinking toggle is on.
- # budget_tokens is required by the Anthropic API when thinking.type=enabled
- # (no server default; min 1024; must be less than max_tokens).
- # - name: claude-sonnet-4
- # display_name: Claude Sonnet 4
+ # Example: Anthropic Claude model (thinks by default)
+ # Claude Sonnet 5.5 rejects extended thinking (budget_tokens), thinking
+ # type disabled, temperature, top_p and top_k, so leave them out.
+ # max_tokens covers both thinking and the answer.
+ # - name: claude-sonnet-5-5
+ # display_name: Claude Sonnet 5.5
# use: langchain_anthropic:ChatAnthropic
- # model: claude-sonnet-4-20250514
+ # model: claude-sonnet-5-5
# api_key: $ANTHROPIC_API_KEY
# default_request_timeout: 600.0
# max_retries: 2
- # max_tokens: 16000 # Per-call output cap
+ # max_tokens: 16000 # Per-call output cap (thinking + answer)
# context_window: 200000 # Total prompt + completion capacity
# supports_vision: true
- # supports_thinking: true
- # when_thinking_enabled:
- # thinking:
- # type: enabled
- # budget_tokens: 4096 # required; min 1024; must be < max_tokens
- # when_thinking_disabled:
- # thinking:
- # type: disabled
# Example: Google Gemini model (native SDK, no thinking support)
# - name: gemini-2.5-pro
diff --git a/frontend/src/content/en/application/configuration.mdx b/frontend/src/content/en/application/configuration.mdx
index bf21424e55..43bf3ffd71 100644
--- a/frontend/src/content/en/application/configuration.mdx
+++ b/frontend/src/content/en/application/configuration.mdx
@@ -48,21 +48,14 @@ models:
```yaml
models:
- - name: claude-3-5-sonnet
+ - name: claude-sonnet-5-5
use: langchain_anthropic:ChatAnthropic
- model: claude-3-5-sonnet-20241022
+ model: claude-sonnet-5-5
api_key: $ANTHROPIC_API_KEY
default_request_timeout: 600.0
max_retries: 2
max_tokens: 8192
supports_vision: true
- supports_thinking: true
- when_thinking_enabled:
- thinking:
- type: enabled
- when_thinking_disabled:
- thinking:
- type: disabled
```
diff --git a/scripts/wizard/providers.py b/scripts/wizard/providers.py
index 968e072854..21d9f41d8e 100644
--- a/scripts/wizard/providers.py
+++ b/scripts/wizard/providers.py
@@ -23,6 +23,9 @@ class LLMProvider:
# capability (e.g. MiniMax M3 supports vision but M2.7 is text-only). The
# provider-level extra_config holds the default (default_model) capability.
model_vision_overrides: dict[str, bool] = field(default_factory=dict)
+ # Per-model extra_config keys to leave out for models whose API rejects
+ # them (e.g. Claude Sonnet 5.5 rejects budget_tokens and thinking disabled).
+ model_omitted_config: dict[str, tuple[str, ...]] = field(default_factory=dict)
auth_hint: str | None = None
base_url_prompt: str | None = None
model_prompt: str | None = None
@@ -38,6 +41,8 @@ class LLMProvider:
config = dict(self.extra_config)
if model_name in self.model_vision_overrides:
config["supports_vision"] = self.model_vision_overrides[model_name]
+ for key in self.model_omitted_config.get(model_name, ()):
+ config.pop(key, None)
return config
@@ -256,10 +261,10 @@ LLM_PROVIDERS: list[LLMProvider] = [
LLMProvider(
name="anthropic",
display_name="Anthropic",
- description="Claude Sonnet 4 with extended thinking",
+ description="Claude Sonnet 5.5 with thinking",
use="langchain_anthropic:ChatAnthropic",
- models=["claude-sonnet-4-20250514", "claude-opus-4-5", "claude-sonnet-4-5"],
- default_model="claude-sonnet-4-20250514",
+ models=["claude-sonnet-5-5", "claude-opus-4-5", "claude-sonnet-4-5"],
+ default_model="claude-sonnet-5-5",
env_var="ANTHROPIC_API_KEY",
package="langchain-anthropic",
extra_config={
@@ -269,6 +274,8 @@ LLM_PROVIDERS: list[LLMProvider] = [
"supports_vision": True,
**ANTHROPIC_THINKING_CONFIG,
},
+ # Sonnet 5.5 thinks by default and rejects budget_tokens and thinking disabled.
+ model_omitted_config={"claude-sonnet-5-5": ("when_thinking_enabled", "when_thinking_disabled")},
),
LLMProvider(
name="deepseek",