Rag.Router.Fallback (rag v0.3.4)
View SourceFallback routing strategy.
Tries providers in order until one succeeds. If a provider fails multiple times, it is temporarily skipped. Failed providers are automatically retried after a decay period.
Configuration
Fallback.init(
providers: [:gemini, :codex, :claude],
fallback_order: [:claude, :gemini, :codex], # Optional custom order
max_failures: 3, # Skip after N failures
failure_decay_ms: 60_000 # Reset failures after 60s
)Behavior
- Selects first available provider in fallback order
- On failure, marks provider and tries next
- Skips providers with >= max_failures recent failures
- Resets failure count on success
- Decays failure count over time
Example
{:ok, state} = Fallback.init(providers: [:gemini, :codex, :claude])
{:ok, :gemini, state} = Fallback.select_provider(state, request)
# If gemini fails
state = Fallback.handle_result(state, :gemini, {:error, :timeout})
{:ok, :codex, state} = Fallback.next_provider(state, :gemini, request)
Summary
Types
@type t() :: %Rag.Router.Fallback{ current_index: non_neg_integer(), failure_decay_ms: pos_integer() | nil, failure_times: %{required(atom()) => integer()}, failures: %{required(atom()) => non_neg_integer()}, fallback_order: [atom()], max_failures: pos_integer(), providers: [atom()] }