The model reads facts; a formula does the arithmetic. A language model reads the coverage for one event
and extracts a small set of concrete sub-factors, recording why it chose each value. A fixed, versioned
function then turns those facts into a score. This is the split canonical event datasets have always used —
KEDS and TABARI through PETRARCH to ICEWS and GDELT — and it is what makes a score re-derivable by hand
rather than an opaque model output.
Before you use them
Getting the evidence, not just the score
Events coded from 28 July 2026 return the sub-factors and the coder’s reason for each undermetrics.metric_inputs. Older events omit the field — the evidence was not recorded for them, and a
backfill is planned but has not run.
Versioning
Each event stampsmetric_version. The current contract is v2-2026-07-24, in effect from 28 July 2026.
Events coded earlier sit on the previous scale. metric_version is stored but not currently returned by
the API, so use the presence of metrics.metric_inputs as the boundary marker — it appears only on v2
events.
