What goes in an eval quality tracking dashboard?
An eval quality tracking dashboard turns eval runs from Braintrust, LangSmith, or Arize Phoenix into a longitudinal quality record: whether prompt and model changes actually improve output, what regressed between runs, and how much of production traffic the evals really cover.
Which cards belong on this dashboard?
- Pass rate by experiment over time (line)
- Mean score by dataset (line)
- Score delta vs. previous run per dataset (bar)
- Regressed examples between the latest two runs (table)
- Model comparison on shared datasets (bar)
- Pass rate by scorer (table)
- Online eval score trend on production samples (line)
- Share of production traffic scored — eval coverage (number)
What data does this dashboard need?
- Eval results at example grain: experiment, dataset, scorer, score, pass flag
- Experiment metadata: model, prompt version, started-at, cost
- Consistent dataset and scorer names across runs — the comparability key
- Online eval scores from sampled production traffic, where run
- Trace links so regressed examples can be drilled into at the source
How do you build it?
- Sync usage rollups from your LLM gateway, tracing, or eval tool into a database, keeping stable IDs, timestamps, token counts, and costs.
- Build clean models at the grain this dashboard requires — daily per app and model is the workhorse.
- Create one saved question per card and certify the shared models and metric definitions.
- Add dashboard filters for Date range, dataset, experiment, model, scorer.
- Exclude test, staging, and playground traffic from headline cards, and show the refresh time.
Example card SQL
WITH ranked AS (
SELECT
dataset,
experiment,
AVG(score) AS mean_score,
ROW_NUMBER() OVER (
PARTITION BY dataset ORDER BY MIN(created_at) DESC
) AS recency
FROM eval_results
GROUP BY dataset, experiment
)
SELECT
latest.dataset,
latest.experiment AS latest_experiment,
ROUND(latest.mean_score, 3) AS latest_score,
ROUND(previous.mean_score, 3) AS previous_score,
ROUND(latest.mean_score - previous.mean_score, 3) AS delta
FROM ranked latest
JOIN ranked previous
ON previous.dataset = latest.dataset AND previous.recency = 2
WHERE latest.recency = 1
ORDER BY delta ASC;