Hadrian is experimental alpha software. Do not use in production.
Hadrian
ConfigurationFeatures

Fallback & Retry

Configure automatic retries and provider fallbacks

The [features.fallback] section configures automatic retry behavior and provider fallback chains for handling transient errors.

Configuration Reference

[features.fallback]
retries_enabled = true
max_retries = 3
initial_delay_ms = 1000
max_delay_ms = 30000
backoff_multiplier = 2.0
fallback_enabled = false
fallback_order = []
fallback_on = ["rate_limit", "server_error", "timeout"]
KeyTypeDefaultDescription
retries_enabledbooleantrueEnable automatic retries
max_retriesinteger3Maximum retry attempts
initial_delay_msinteger1000Initial retry delay (1 second)
max_delay_msinteger30000Maximum retry delay (30 seconds)
backoff_multiplierfloat2.0Exponential backoff multiplier
fallback_enabledbooleanfalseEnable provider fallbacks
fallback_orderarray[]Provider fallback chain
fallback_onarraysee belowError types that trigger fallback

Retry Behavior

Retries use exponential backoff with the formula:

delay = min(initial_delay_ms * (backoff_multiplier ^ attempt), max_delay_ms)

Example with defaults:

  • Attempt 1: 1000ms delay
  • Attempt 2: 2000ms delay
  • Attempt 3: 4000ms delay

Fallback Triggers

TriggerDescription
rate_limit429 Too Many Requests
server_error5xx errors
timeoutRequest timeout
overloadedProvider overloaded
context_lengthContext length exceeded
fallback_on = ["rate_limit", "server_error", "timeout"]

Complete Examples

Retries Only (Default)

[features.fallback]
retries_enabled = true
max_retries = 3
initial_delay_ms = 1000
max_delay_ms = 30000
backoff_multiplier = 2.0
fallback_enabled = false

With Provider Fallbacks

[features.fallback]
retries_enabled = true
max_retries = 2
initial_delay_ms = 500
max_delay_ms = 10000
backoff_multiplier = 2.0
fallback_enabled = true
fallback_order = ["anthropic", "openai", "bedrock"]
fallback_on = ["rate_limit", "server_error", "timeout", "overloaded"]

Flow: Primary provider fails → retry 2x → try Anthropic → retry 2x → try OpenAI → retry 2x → try Bedrock → fail

Aggressive Retries

[features.fallback]
retries_enabled = true
max_retries = 5
initial_delay_ms = 200
max_delay_ms = 5000
backoff_multiplier = 1.5
fallback_enabled = false

No Retries

[features.fallback]
retries_enabled = false
fallback_enabled = true
fallback_order = ["anthropic", "openai"]
fallback_on = ["server_error", "timeout"]

Context Length Fallback

Handle models with different context limits:

[features.fallback]
retries_enabled = true
max_retries = 1
fallback_enabled = true
fallback_order = ["gpt-4o", "claude-sonnet"]
fallback_on = ["context_length"]

Fallback Chain Behavior

Request to primary provider


    ┌─────────┐     ┌─────────────────┐
    │ Success │ ←── │ Retry if failed │
    └─────────┘     └─────────────────┘
         │                   │
         │              max_retries
         │                   │
         │                   ▼
         │         ┌─────────────────┐
         │         │ Next in fallback│
         │         │     order       │
         │         └─────────────────┘
         │                   │
         ▼                   ▼
    Return response    Repeat until
                       chain exhausted

Per-provider retry and circuit breaker settings (in [providers.<name>]) override global fallback settings for that provider.

See Also

On this page