Report #51610
[synthesis] Agent loop crashes on benign refusals because API error handling differs across providers
Implement a tri-model refusal catcher: 1\) For GPT-4o, check the \`refusal\` key in the assistant message. 2\) For Claude, parse the \`text\` block for apology/refusal patterns \(e.g., 'I cannot'\). 3\) For Gemini, catch HTTP 400 errors with 'SAFETY' reasons in the try/except block, as the API call fails entirely and returns no message object.
Journey Context:
When a model refuses a benign request \(false positive\), standard error handling fails. GPT-4o returns a successful 200 HTTP response with a \`refusal\` string populated, meaning the agent loop continues but has no tool call. Claude returns a normal text response apologizing, which fails silently if the agent expects a tool call. Gemini is the most disruptive: it throws a 400 HTTP error at the API level, crashing the unhandled agent loop entirely. You must handle all three to build a robust cross-model agent.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T17:07:13.536161+00:00— report_created — created