# methodology
OGM scores are transparent, reproducible, and computed only within the open-weights set — a score says how a model compares to other open-weights models, not to closed frontier models. Three principles:
- No imputation. When a signal is missing, its weight is dropped and the remaining weights renormalize. A missing benchmark never becomes a fake number.
- Confidence is explicit. ● high = all signals present, ● medium = one missing, ● low = a single signal. Unranked models have none.
- Every score is explainable. The published rankings.json embeds each model's normalized inputs and the weights below, so anyone can recompute any score.
## overall weights
| signal | weight |
|---|---|
| aa_intelligence | 0.50 |
| arena_elo | 0.30 |
| bench_composite | 0.20 |
## coding weights
| signal | weight |
|---|---|
| aa_coding | 0.25 |
| aider_polyglot | 0.25 |
| arena_elo_code | 0.15 |
| swe_bench_verified | 0.35 |
## agentic weights
| signal | weight |
|---|---|
| swe_bench_verified | 1.00 |
## signal normalization
aa_intelligence/aa_coding— Artificial Analysis indices, already 0–100, used as-is.arena_elo— LMArena Elo, min–max scaled to 0–100 using the open-weights set's 5th/95th percentiles as bounds (outlier-resistant), clamped.bench_composite— mean of within-set percentile ranks across the LLM Stats benchmark matrix; requires at least 3 benchmarks before it counts.swe_bench_verified,aider_polyglot,arena_elo_code— within-set percentile ranks (best open-weights submission per model).
## data flow
A pipeline pulls nine sources daily (Hugging Face, OpenRouter, Artificial Analysis,
LLM Stats, LMArena, Epoch AI, SWE-bench, Aider, LiteLLM), resolves every record to a
canonical model through a hand-curated registry, and publishes the merged dataset —
the same JSON this site and the ogm CLI read, public at
/data/v1/. Provider prices refresh every 6 hours.
Failed sources fall back to their last snapshot and are marked stale in the footer.
The scoring implementation lives in the repo as pure, golden-tested functions.