Provider Failure Runbook
Procedures for handling AI provider outages.
Quick Diagnosis
# Check provider status in health response
curl -s http://localhost:8080/api/health | jq .providers
Provider Status Pages
| Provider | Status Page |
|---|---|
| Anthropic | https://status.anthropic.com |
| OpenAI | https://status.openai.com |
| Google (Gemini) | https://status.cloud.google.com |
| Mistral | https://status.mistral.ai |
| xAI | Check Twitter @xaboratory |
Automatic Fallback
Aragora automatically falls back to OpenRouter when primary providers fail:
- Provider returns 429 (rate limit) or 5xx error
- CircuitBreaker trips after 3 consecutive failures
- Request automatically routed to OpenRouter
Ensure OPENROUTER_API_KEY is set for fallback to work.
Manual Provider Disable
If a provider is causing issues, temporarily disable it:
# In .env or systemd override
ANTHROPIC_API_KEY= # Empty to disable
Then restart:
sudo systemctl restart aragora
Rate Limit Exhaustion
Symptoms
- 429 errors in logs
- Debates failing mid-conversation
- Health check shows provider "degraded"
Resolution
- Check usage in provider dashboard
- Wait for reset (usually hourly or daily)
- Enable OpenRouter fallback as backup
- Consider upgrading tier if persistent
Provider-Specific Issues
Anthropic
# Test connectivity
curl -H "x-api-key: $ANTHROPIC_API_KEY" \
https://api.anthropic.com/v1/messages \
-d '{"model":"claude-sonnet-4-20250514","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}'
OpenAI
# Test connectivity
curl -H "Authorization: Bearer $OPENAI_API_KEY" \
https://api.openai.com/v1/models
OpenRouter
# Test connectivity
curl -H "Authorization: Bearer $OPENROUTER_API_KEY" \
https://openrouter.ai/api/v1/models
Degraded Mode Operation
When all providers are down:
- Debates queue but don't execute
- Health endpoint returns "degraded"
- Existing cached responses still work
- New debates return provider unavailable error
Recovery Verification
After provider recovers:
# 1. Check health shows available
curl -s http://localhost:8080/api/health | jq .providers
# 2. Run test debate
curl -X POST http://localhost:8080/api/debates \
-H "Content-Type: application/json" \
-d '{"task":"Test: Is 2+2=4?","agents":["claude","gpt4"]}'
# 3. Verify completion
curl http://localhost:8080/api/debates/\{debate_id\}
Escalation
If provider outage lasts >1 hour:
- Check provider status page for updates
- Switch to backup providers
- Consider notifying users if service significantly degraded