Rag.Router.RoundRobin (rag v0.3.4)
View SourceRound-Robin routing strategy.
Distributes requests evenly across providers. Supports optional weights for uneven distribution and automatic provider recovery.
Configuration
RoundRobin.init(
providers: [:gemini, :codex, :claude],
weights: %{gemini: 3, codex: 2, claude: 1}, # Optional weighted distribution
max_consecutive_failures: 3, # Mark unavailable after N failures
recovery_cooldown_ms: 30_000 # Retry unavailable after 30s
)Behavior
- Selects providers in rotating order
- Optionally applies weights (higher weight = more selections)
- Skips temporarily unavailable providers
- Automatically recovers providers after cooldown
Weighted Distribution
With weights {gemini: 2, codex: 1}, the selection pattern is:
gemini → gemini → codex → gemini → gemini → codex → ...
Summary
Types
@type t() :: %Rag.Router.RoundRobin{ consecutive_failures: %{required(atom()) => non_neg_integer()}, current_index: non_neg_integer(), max_consecutive_failures: pos_integer(), providers: [atom()], recovery_cooldown_ms: pos_integer(), unavailable: MapSet.t(atom()), unavailable_since: %{required(atom()) => integer()}, weight_counters: %{required(atom()) => non_neg_integer()}, weights: %{required(atom()) => pos_integer()} | nil }