mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
A text-only model that is handed an image is a recoverable condition: the
turn loop strips the images out of history and continues. Reaching that
recovery depended on `is_unsupported_image_input_error`, which matched only
OpenRouter's sentence ("no endpoints found that support image input") and was
only consulted on a 404.
Fireworks says "This model does not support image inputs" and says it with a
400, so on the direct Fireworks route neither condition held. The rejection
stayed a terminal `AgentError::Llm`, buzz-acp requeued the batch with
exponential backoff, every retry replayed the same image and failed
identically, and after 10 attempts the batch dead-lettered. The agent then had
no work left and sat idle until the harness killed it, so the trial scored 0
however much budget remained. Measured on the 2026-08-07 max-effort cell: 6 of
the first 66 trials, all 6 at reward 0.0.
Match on substrings covering both phrasings, and check on any non-success
status rather than only 404 — in `openrouter_post` (which the Fireworks and
OpenRouter routes share) and in the generic `post`, since any
OpenAI-compatible provider fronting a text-only model can 400 the same way.
Signed-off-by: Atish Patel <atish@squareup.com>
Co-authored-by: Claude Code <noreply@anthropic.com>