Add LLM fallbacks and resilience
SkillMonitoring & opsUse this to make an LLM app resilient to provider failures, rate limits, timeouts, and outages. Trigger on "handle LLM API errors", "add retries/fallbacks", "the app breaks when OpenAI is down", "rate limit errors", "make my LLM calls reliable", "timeout handling". Add retries, timeouts, and model/provider fallbacks, and observe them so failures are visible.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Add LLM fallbacks and resilience skill
What this skill tells your AI
The instructions your AI receives, as published by contextjet-ai/awesome-llm-observability in skills/add-llm-fallbacks/SKILL.md and read by ahel’s review.
LLM providers rate-limit, time out, 500, and occasionally go down. A single unguarded call means your app goes down with them. Add layered resilience, and instrument it so you can see when it kicks in.
The layers (add all of them)
- Timeouts. Every call needs a sane timeout. An unbounded call can hang a request forever. Set it based on your p95 latency plus headroom.
- Retries with backoff. Retry transient failures (429, 500, 503, timeouts) with exponential backoff + jitter. Cap the number of retries and cap the total wait, and honor
Retry-Afterwhen present. A naive retry loop turns a rate limit into a retry storm (and a big bill, seereduce-llm-cost). - Do not retry non-transient errors. 400s (bad request), auth errors, and content-policy refusals will fail again. Retrying them wastes time and money.
- Model / provider fallback. If the primary model errors or is down, fall back to a secondary (same provider different model, or a different provider). A gateway (LiteLLM, Portkey) gives you this with config instead of code.
- Graceful degradation. When everything fails, return a sensible fallback (cached answer, a "try again shortly" message, a simpler non-LLM path) instead of a stack trace.
Instrument it (so resilience is not invisible)
The failure mode of good resilience is that it hides problems. Emit telemetry so you still see them:
- A span/event when a retry happens (and how many).
- A span/event when a fallback fires (primary -> secondary).
- Error rate per provider/model and fallback rate on a dashboard, with alerts (see
set-up-drift-alerts).
If your fallback rate silently climbs to 30%, you want to know, not find out from the bill or a user.
Watch the cost/quality of fallbacks
A fallback model may be cheaper-but-worse or pricier. Track cost and (ideally) quality on the fallback path too, so a provider outage does not silently degrade your app for hours.
Verify
- Kill the primary provider (bad key / block the host) and confirm the app fails over, not over.
- Simulate a 429 and confirm backoff +
Retry-Afterare honored, with a capped total wait. - Confirm retries and fallbacks show up in traces/metrics.
Anti-patterns
- No timeout (one hung call ties up a worker).
- Retrying 4xx/auth/policy errors (they will not succeed; you just wait and pay).
- Fixed-delay retries with no cap (retry storm on a rate limit).
- Silent fallbacks with no telemetry (you are degraded and blind to it).
- A fallback model nobody evaluated (you fail over into worse answers).
Grounding
Standard distributed-systems resilience patterns applied to LLM calls: exponential backoff with jitter (AWS Architecture guidance), retry/timeout/circuit-breaker (Nygard, Release It!). Gateways implement provider fallback: LiteLLM, Portkey.
Signals
- GitHub stars
- 33
- Forks
- 18
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
add-llm-fallbacks- Source
- github.com/contextjet-ai/awesome-llm-observability