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
#4896 recovers a turn when a provider rejects image input, but the classifier (is_unsupported_image_input_error in crates/buzz-agent/src/llm.rs) only matches the OpenRouter/DeepSeek rejection (No endpoints found that support image input) and only runs on the 404 arms of post() / openrouter_post().
Probed against the real post path: OpenAI- and Claude-style image rejections arrive as 400s, which are classified as AgentError::Llm before the matcher ever runs. So broadening the phrase list alone changes nothing for those providers; real coverage requires:
Hoisting the unsupported-image check above the status dispatch (with ordering tests so 401/403/429/5xx handling is unaffected).
Blocked on: capturing a real image-rejection body from OpenAI and Anthropic (send one image request to a text-only model on each and record status + body verbatim).
Risk note for whoever picks this up: a false positive in this classifier strips images from history on a turn where images were fine — prefer narrow matchers over broad ones like contains("not support image").
Follow-up from #4896 (comment).
#4896 recovers a turn when a provider rejects image input, but the classifier (
is_unsupported_image_input_errorincrates/buzz-agent/src/llm.rs) only matches the OpenRouter/DeepSeek rejection (No endpoints found that support image input) and only runs on the 404 arms ofpost()/openrouter_post().Probed against the real post path: OpenAI- and Claude-style image rejections arrive as 400s, which are classified as
AgentError::Llmbefore the matcher ever runs. So broadening the phrase list alone changes nothing for those providers; real coverage requires:Blocked on: capturing a real image-rejection body from OpenAI and Anthropic (send one image request to a text-only model on each and record status + body verbatim).
Risk note for whoever picks this up: a false positive in this classifier strips images from history on a turn where images were fine — prefer narrow matchers over broad ones like
contains("not support image").