Skip to main content

Retry & Error Handling

Retry handles transient errors (rate limits, network issues, server errors) automatically with exponential backoff.

Retry is enabled by default (enabled: true). The retry: block is optional — omitting it leaves retry on with the framework's default attempt count (3) and return_last exhaustion behavior. To opt out, set enabled: false explicitly.

Configuration

yaml
YAML
defaults:
retry:
enabled: true # default — shown for clarity, can be omitted
max_attempts: 3
on_exhausted: return_last

actions:
- name: extract_metadata
retry:
max_attempts: 5
on_exhausted: raise

- name: noisy_endpoint
retry:
enabled: false # explicit opt-out; default is true

Options

OptionTypeDefaultDescription
enabledbooltrueRetry is on by default. Set enabled: false to opt out. Other fields below take effect only when enabled is true.
max_attemptsint3Maximum attempts (1-10)
on_exhaustedstringreturn_lastBehavior when retries exhausted

Exhaustion Behavior

ValueBehavior
return_lastReturn last response, workflow continues
raiseRaise exception, workflow fails

Retryable Errors

Error TypeExamplesRetryable
Rate LimitsHTTP 429, quota exceededYes
Network IssuesConnection timeout, DNS failureYes
Server ErrorsHTTP 502, 503, 504Yes
Invalid RequestBad API key, malformed inputNo
Schema ViolationInvalid JSON outputNo (uses reprompt)
info

For invalid LLM outputs, Agent Actions uses reprompting instead of retry.

Provider Support

All provider-specific errors are normalized into unified RateLimitError and NetworkError types, ensuring consistent retry behavior across OpenAI, Anthropic, Gemini, Cohere, Groq, and Ollama.

Best Practices

Use raise for CI/CD:

yaml
YAML
retry:
max_attempts: 3
on_exhausted: raise

Use return_last for partial results:

yaml
YAML
retry:
max_attempts: 3
on_exhausted: return_last

See Also