From 1be1ce581d284ac9a1ab7a4a3b11bbebf5b94c19 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Tue, 9 Jun 2026 14:06:18 -0700 Subject: [PATCH] [eric] providers: Fable 5 turns thinking off by omitting the param, not thinking:disabled (which 400s) --- backend/apps/agents/agent_manager.py | 5 ++++- backend/apps/agents/providers/thinking.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/apps/agents/agent_manager.py b/backend/apps/agents/agent_manager.py index 16551a02..6db1abcb 100644 --- a/backend/apps/agents/agent_manager.py +++ b/backend/apps/agents/agent_manager.py @@ -1759,7 +1759,10 @@ class AgentManager: level = "off" if api_type == "anthropic": if level == "off": - options_kwargs["thinking"] = {"type": "disabled"} + # Fable 5 400s on an explicit thinking:disabled; you turn it + # off there by omitting the param (off is Fable's default). + if not (isinstance(resolved_model, str) and "fable" in resolved_model): + options_kwargs["thinking"] = {"type": "disabled"} elif level in ("low", "medium", "high"): options_kwargs["effort"] = level except Exception as e: diff --git a/backend/apps/agents/providers/thinking.py b/backend/apps/agents/providers/thinking.py index f7a4b09f..48f24b25 100644 --- a/backend/apps/agents/providers/thinking.py +++ b/backend/apps/agents/providers/thinking.py @@ -20,6 +20,10 @@ def thinking_params_for(api: str, level: str, model_id: str = "") -> dict | None if level == "off": if api == "anthropic": + # Fable 5 400s on an explicit thinking:disabled; omit the param to + # turn thinking off (off is its default). Other Claude models accept it. + if "fable" in model_id: + return None return {"thinking": {"type": "disabled"}} if api == "codex": return {"reasoning": {"effort": "none"}}