Every provider response or exception is classified into a kind. retry_on filters which kinds trigger enforce-mode retry.
Agent hint
Use for retry_on list, billed-but-empty detection, classify_response_override hook.
In scope
Out of scope
* Retry only when mode is enforce and kind is listed in retry_on.
| Kind | Retry in enforce | Notes |
|---|---|---|
| success | No | Usable response with content. |
| timeout | Yes* | Wall-clock or client timeout. |
| 429 | Yes* | Rate limited by provider. |
| 5xx | Yes* | Provider server error. |
| network | Yes* | Connection reset, DNS, etc. |
| empty | Yes* | Billed but empty content. |
| content_filter | Yes* | Filtered finish_reason. |
| truncated | Yes* | Truncated output. |
| refusal | Yes* | Model refusal. |
| tool_error | Yes* | Tool call failure. |
Empty and content-filter responses are often still billed — observe mode records them as UNFULFILLED_SPEND for dashboard analytics.