This page documents the conventions used by the SOTA Dashboard: how the Composite Agent Score is computed, what counts as a Frontier / Agent-Product / Edge-SLM model, how the Pareto frontier is drawn, and what each of the 14 Agent widgets measures. If you only have five minutes, the “Composite Agent Score” section below covers 80% of what you need.
Composite Agent Score
The Composite Agent Score collapses a model’s performance across all
tracked agentic benchmarks into a single 0–100 number. It is computed
client-side in dashboard/js/agent-charts.js by the
_composite() function (mirrored in
Agent._compositeScores() in agent.js).
Formula
For a model m with scores on a set of benchmarks B(m):
For each benchmark b in B(m):
max_b = max value reported for b across all models
v = m's value on b
if b is in CATEGORIES[*].lower_better:
norm_b = (1 - v / max_b) * 100 # invert "lower is better"
else:
norm_b = (v / max_b) * 100 # higher-is-better
agent_score(m) = mean( norm_b for all b in B(m) )
coverage(m) = |B(m)|
In words: each benchmark is rescaled to 0–100 by dividing by the highest value any model has achieved on that benchmark, then we take the simple mean of all per-benchmark scores. Lower-is-better metrics (jailbreak ASR, scheming subversion rate, etc.) are inverted first so “higher = better” on the final scale.
Coverage threshold
A model is shown on rankings, scatter plots, and leaderboards only when
it has scores on ≥ 3 distinct agentic benchmarks.
Models with 1–2 benchmarks are excluded to avoid noisy outliers
from cherry-picked single-benchmark wins. The threshold is enforced in
_composite() at the line
if (byModel[midKey].count < 3) continue;.
Lower-better benchmarks (inverted before averaging)
The following benchmark IDs are listed in
CATEGORIES.safety.lower_better and inverted before they
contribute to the composite:
agentdojo_targeted_asr— AgentDojo prompt-injection attack success rateinjecagent— InjecAgent indirect injection success ratebrowserart— BrowserART browser-agent jailbreak rateanthropic_shade_browser_asr_attemptsanthropic_shade_browser_asr_scenariosanthropic_shade_browser_asr_with_safeguardsagent_red_teaming— red-team success rateagentsmith_infapollo_scheming_oversight_subversionapollo_scheming_persistence
Model Class Definitions
Every model in the dashboard is tagged with one of three classes. The Agent tab’s W4 Frontier-Product-Edge dot plot uses these classes directly; the W1 cost scatter colors bubbles by class.
| Class | Definition | Examples |
|---|---|---|
| Frontier | Large hosted general-purpose foundation models. Usually proprietary or open-weight at multi-100B scale, accessed via API or web chat. The base substrate that agent products build on top of. | GPT-5, Claude Opus 4.5/Sonnet 4.5, Gemini 2.5 Pro, Grok 4, DeepSeek V3.2, Qwen3-Max, Kimi K2, GLM-4.6 |
| Agent-Product | Packaged agent products built on top of a base frontier model. They add scaffolding (tool use, memory, planners, IDE/OS hooks) and ship as a product, not a raw model. Curated list lives in AGENT_PRODUCTS in agent.js. |
Claude Code, OpenAI Codex CLI, Cursor Composer, Replit Agent, Cognition Devin, Manus, Anthropic Computer Use, Google Mariner, OpenAI Operator, Claude Cowork |
| Edge-SLM | Small / on-device language models intended for laptops, phones, or embedded devices. Curated list lives in EDGE_SLMS in agent.js. Treated as $0/month in the cost simulator (W12) and at a placeholder $0.01 on the W1 log-scale X axis. |
Apple Foundation 3B, Apple Foundation Private Cloud, Microsoft Phi-4-mini-instruct, Phi-4, Google Gemma-3-270m, Gemma 3n, Function Gemma, Meta Llama-3.2-1B/3B-Instruct |
Strict Score Attribution Policy
Every score in data/scores.json must satisfy this rule:
The following are explicitly not admissible and have been purged from the dataset:
- “Frontier baseline” placeholders that approximate a model’s likely performance.
- Linear or log extrapolations from older versions of the same model family.
- Numbers cited “from a web report” without a working primary URL.
- Numbers attached to the wrong model (e.g. a Claude Opus 4 score reported on a Claude Sonnet 4.5 row).
- Rounded headline numbers from press releases that conflict with the model card’s exact value.
Each row in scores.json carries a source_url
field. The Score History modal opens that URL when a user clicks a
score, so the chain of evidence is always one click away.
Pareto Frontier Definition
The W1 Cost vs Performance Scatter draws a dashed line through the Pareto-efficient set: the subset of models for which no other model is strictly better on both axes simultaneously.
Formally, given points pi = (costi, scorei):
p_i is on the frontier ⇔
no p_j exists with
cost_j ≤ cost_i AND score_j ≥ score_i
AND (cost_j < cost_i OR score_j > score_i)
In plain language: a point is on the frontier if you cannot find
another point that is at least as cheap AND at least as good, with at
least one of those being strictly true. The dashed line connects
frontier points sorted left-to-right by ascending cost. Implementation
lives in _paretoFrontier() in agent-charts.js.
Edge SLM Cost Treatment
-
W1 Cost vs Performance Scatter: Edge SLMs run
free on-device, so they have no per-token API price. They are
plotted at the placeholder X =
$0.01 / 1M output tokens(a log-scale-friendly value defined asEDGE_X_PLACEHOLDER). A note in the chart legend tells readers this is a visualization convention, not a real price. - W12 Cost Simulator: Edge SLMs are counted as $0/month regardless of token volume. Compute, electricity, and device amortization are out of scope for the simulator — the goal is API-cost comparison, and on-device inference simply does not have an API bill.
14 Widget Inventory
The Agent tab is built from 14 named widgets. Each widget has a single canonical purpose:
| ID | Widget | What it shows |
|---|---|---|
| W1 | Cost vs Performance Scatter | Composite score (Y) vs $/1M output tokens (X, log scale). Pareto frontier dashed. |
| W2 | Capability Heatmap | Models × categories matrix; cell color = mean normalized score in that category. |
| W3 | Category Radar | Per-model radar across the 10 agent categories. |
| W4 | Frontier-Product-Edge Dot Plot | Three-class strip plot showing where each class sits on the composite score axis. |
| W5 | SOTA Timeline | Time-series of SOTA holders per benchmark; shows which model held the crown when. |
| W6 | Vendor × Benchmark Bubble Matrix | Vendor rows, benchmark columns, bubble size = score, color = recency. |
| W7 | Capability Fingerprint Mini-Radar | Compact radar variant for inline use in compare panels. |
| W8 | Score Distribution Violin | Per-benchmark distribution of all model scores; shows where the field clusters. |
| W9 | Capability Sankey | Flow from category → benchmark → SOTA holder; thickness = score share. |
| W10 | Cumulative SOTA Wins | Stacked area of cumulative SOTA-holder counts by vendor over time. |
| W11 | Build Your Agent Wizard | Interactive picker: choose required capabilities → get model recommendations. |
| W12 | Cost Simulator | Estimate monthly API cost given input/output token volume across selected models. |
| W13 | Provider Availability Map | Which models are available on which inference providers (OpenAI, Anthropic, Vertex, Bedrock, Together, etc.). |
| W14 | Recommendation Breakdown | Explains why the wizard recommended a model: per-capability score contributions. |
Versioning & Updates
-
Score updates are recorded in
data/export/reports/changelog.json. Each entry tags the model, benchmark, old → new value, and source URL. -
Session-level work (waves, sweeps, audits) is
summarized in
HISTORY.mdat the repository root. -
Ingest rules (file naming, source priority,
duplicate handling) are documented in
CONTRIBUTING.md. -
Cache busting: each JS <script> tag carries
a
?v=YYYYMMDD<letter>query string. When the deploy workflow ships a new build, it stamps the version withgit rev-parse HEADso browsers always see the latest code.
Source code references
dashboard/js/agent-charts.js—_composite(),_paretoFrontier(), all 14 widgets.dashboard/js/agent.js—CATEGORIES,AGENT_PRODUCTS,EDGE_SLMS,_allAgentBenchmarks().data/scores.json— one row per (model, benchmark, value, source_url) tuple.data/aa_pricing.json— per-model input/output token prices used by W1 and W12.data/export/reports/changelog.json— score-update audit log.