Truncated responses are treated as successful and retried silently (`finish_reason` never checked)
Related to #1747.
When a model's response is cut off mid-JSON, Agent Zero does not notice. The envelope never closes, extraction fails, the misformat warning fires, and the turn is retried — with no indication that the cause was output truncation rather than a formatting error. On an expensive model each retry is a full inference on a growing context.
finish_reason appears to be consulted in exactly one place
(helpers/litellm_transport.py, in the tool_calls / function_call check).
There is no branch for length or content_filter.
Two contributing factors make this easier to hit than it looks:
- No default
max_tokensis sent for the Anthropic provider, so the LiteLLM default applies. With high reasoning effort, thinking consumes the budget before the envelope closes. - The
limit_outputfield in model settings is wired only to the rate limiter (rl_output) and is never sent to the API, so it looks like a fix but is not.
Suggested fix: detect finish_reason == "length" and surface it distinctly
— either retry with a raised ceiling or emit a warning that names truncation as
the cause, rather than the generic misformat message.
Environment: v2.8 (2026-08-01), Claude Opus 5 high reasoning effort, Anthropic API via LiteLLM, Docker.
Source: agent0ai/agent-zero