What is recorded
- Every minute, each node records the state of every provider and key it routes, including any hold.
- As it happens, each node records state changes, holds, checks and releases, edits to keys and providers, and changes to the adaptive routing settings.
- History is stored in the logs database, so it needs a Postgres or ClickHouse log store.
- History is kept for History Retention (days), 7 by default. The cluster leader deletes older history once a day.
- With Record Routing History off, nothing new is recorded and the dashboard shows the time since as No data. Routing is the same either way, and what adaptive routing decided for each request is still written to its request log.
The dashboard
Open Adaptive Routing > Dashboard in the sidebar. The dashboard and the incidents page need AdaptiveRouter: View (see RBAC).
Figures
Click a figure for its breakdown.
Health over time
The timeline has one row per provider and model. Expand a row to see its keys.- Each dot covers a stretch of time. Its colour is the worst state on any selected node in that stretch, and the filled share of the dot is how many nodes were in that state. Hover a dot for each node; click it to see what happened in that stretch.
- A hatched dot is a key held because the provider refused it.
- A grey dashed dot means no node was recording, because the cluster was down or history was off.
- A small mark on a dot, with a matching mark on the time axis, means a node wrote no samples for part of that stretch, for example because its process was paused.
- The Incidents lane above the rows shows each incident as a bar over the time it lasted. Click a bar to open the incident.
- Drag across the timeline to zoom into a range, or use the zoom buttons.


Incidents
An incident is one problem adaptive routing saw, on one of:- Provider · model: a provider failing or degraded for a model.
- Key on a model: one key failing or held for one model.
- Key, every model: one key held for every model, such as a rejected credential.
Statuses
An incident needs attention when:
A held key stops needing attention once its hold is released.
The incidents page
Open Adaptive Routing > Incidents in the sidebar.
Each row shows when the incident opened, how long it lasted, its status, where it happened, its cause and what adaptive routing did about it: Held the key, Moved traffic off, Gave it less traffic, and how many times it checked a held key. The chart button shows the incident on the dashboard timeline.
Filter by status, provider, model, reason, worst state, scope, region and node; each value shows how many incidents it matches. Search matches provider, model or key. Sort by needs attention first, newest, oldest, longest or shortest. The page shares the dashboard’s time window, Live mode and filters, so moving between them keeps your view.
Incident details
Click an incident on either page to open its details. Use the arrows to move through the list.
In the request logs
What adaptive routing decided for a request is written to its log, whether or not history is recorded. Open a request in Logs and its Routing tab starts with the Adaptive Routing card.
View in routing history opens the dashboard on the hour around the request, filtered to its provider.
The Logs filters have an Adaptive Routing group to find requests by these decisions, for example every request redirected away from the provider it named, or every attempt that was the check of a held key.

bifrost_alb_. You can filter on them through the logs API with a metadata_ parameter, such as metadata_bifrost_alb_decision=pinned_rerouted, or read them from log exports.
Provider-level fields are on a request’s first attempt. Key-level fields describe the last key picked for each attempt.
Common cases
Each case below is an illustration that puts the case’s rows from the dashboard timeline above its row on the Incidents page.Key rejected

Key rate limited

Provider outage

Key out of quota, recovering

Requests kept on a failing provider

provider/model, a routing rule or the virtual key, and Redirect Away from Failing Providers is off, so adaptive routing left them on it.
What to do: turn on Redirect Away from Failing Providers, and Add Fallbacks When a Provider Is Named if you want those requests to fall back while the provider recovers. Or give the requests fallbacks of their own.
Waiting for traffic


