Skip to content

v1.20.17 — Live reasoning streaming + native ChatOpenAI + Anthropic per-model thinking

Choose a tag to compare

@jgouviergmail jgouviergmail released this 31 May 23:15

Highlights

💭 Live agent reasoning (config-driven)

Agents stream their chain-of-thought to the progress UI wherever the provider API supports it — OpenAI (Responses summary), DeepSeek (reasoning_content), the ReAct loop, and structured-output nodes via an auto-tool path. Reasoning is enabled solely by the per-model "Configuration LLM" matrix and never injected, so a reasoning block appears only for agents the admin turned it on for; it disappears when the final answer arrives.

🧠 Anthropic per-model extended thinking (Admin · Configuration LLM)

  • opus-4-6 / sonnet-4-6: adaptive thinking + effort (off · low · medium · high · max).
  • opus-4-5 / haiku-4-5: manual thinking budget (on/off + tokens, 1024–16384).
  • Temperature/top-p are locked when thinking is on (Anthropic API constraint), enforced at UI + service + factory.
  • Separate global effort control for opus-4-5.

⚙️ Native OpenAI client

Removed the ~1800-line custom ResponsesLLM in favor of native ChatOpenAI (use_responses_api=True). Only ChatOpenAICached (~1 method) remains, preserving LIA's static-prefix prompt_cache_key routing.

🔧 Fix

Structured-output nodes no longer 400 on a thinking-enabled Claude ("Thinking may not be enabled when tool_choice forces tool use") — they route through the auto-tool path, the only API-supported combination.

Notes

  • Architecture decision: ADR-087.
  • 2 Alembic migrations (anthropic_thinking_config_001, anthropic_global_effort_001) — single head.
  • FAQ changelog updated in all 6 languages (en, fr, de, es, it, zh).
  • Gates: Ruff / Black / MyPy strict clean; backend unit suite green (947 tests); frontend tsc + eslint clean; i18n parity verified.

🤖 Generated with Claude Code