You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Tool calls fail on reasoning deployments that refuse function tools unless reasoning_effort is "none" #1353
On an Azure OpenAI reasoning deployment, every request that carries tools comes back 400 ("Function tools with reasoning_effort are not supported for ") unless the body sets reasoning_effort: "none". Chat then falls back to a single retrieval step, and the governance second look, which needs tools, cannot run, so the pairs it would settle go to people instead.
What exists
#1232 learns max_completion_tokens and drops temperature from a single 400. Main also has a reasoning_effort setting, but with_reasoning_effort puts it into every chat body (crates/utopia-llm/src/lib.rs), so making tool calls work means turning reasoning off for extraction and alignment too.
Proposal
Learn it the way #1232 does: when a request with tools gets that 400, retry with reasoning_effort: "none" and remember it for tool calls only (chat_tools and chat_tools_stream), leaving the other calls as configured. Splitting the setting by call kind (extraction, alignment, tool calls) would also work.
Workaround we run
A small proxy in front of the endpoint that sets reasoning_effort: "none" when tools is non-empty.
Seen on v0.1.0-rc9; checked against main on 2026-10-21.
Thanks, confirmed on dev: the workspace's one reasoning_effort goes into every body, tool calls included. Learning none for tool bodies from the first 400 (the same pattern as the completion ceiling) is the small fix; per-task effort comes with ADR 0067. Note #1232 was closed unmerged, so dev has no learned-from-400 handling beyond the ceiling yet.
Fixed on dev by #1368: a tool request refused for its reasoning effort is retried with none and the client remembers it. The follow-up for a deployment that refuses none too is #1372.
Activity
WaylandYang commentedon Oct 22, 2026
Thanks, confirmed on dev: the workspace's one reasoning_effort goes into every body, tool calls included. Learning
nonefor tool bodies from the first 400 (the same pattern as the completion ceiling) is the small fix; per-task effort comes with ADR 0067. Note #1232 was closed unmerged, so dev has no learned-from-400 handling beyond the ceiling yet.A tool request refused for its reasoning effort is retried with none …
Merge pull request #26 from re-cinq/sync/upstream-dev-2026-10-22c
WaylandYang commentedon Oct 23, 2026
Fixed on dev by #1368: a tool request refused for its reasoning effort is retried with
noneand the client remembers it. The follow-up for a deployment that refusesnonetoo is #1372.A deployment that refuses reasoning_effort none on tool requests too …