Skip to content

Chart every program's exact-match rate on the model page - #171

Merged
MaxGhenis merged 2 commits into
mainfrom
model-program-chart
Sep 6, 2026
Merged

Chart every program's exact-match rate on the model page#171
MaxGhenis merged 2 commits into
mainfrom
model-program-chart

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

Summary

The model page listed all 18 programs in a table sorted hardest-first, but nothing let a reader take in a model's whole profile at a glance or see why the unweighted rates do not average to the headline. It now shows one thin bar per output group, best first, with the program's share of the headline weight beside each bar, and keeps the table as a collapsible tabular twin.

  • app/src/lib/programChart.ts: programBars(bench, model) joins programRows with each output group's share of globalWeights.household (summed by output group) and sorts by exact-match rate descending; formatShare prints the share.
  • app/src/components/ProgramBars.tsx: plain HTML list, one row per program: label, a track with the exact-match fill (bg-primary on bg-surface, rounded end, 2px gap), the rate in mono text, the weight share in muted text; each row's title carries the within-1% rate and output count. Single series, so no legend; text wears text tokens, never the series color.
  • Model page: "Exact match by program" heading with a one-line explanation of the weighting; the table moves under a "Table view" disclosure.

For Claude Fable 5.1 this shows the story behind its 86.9% headline: eligibility flags at 96–100% carry a third of the weight, but federal income tax at 69% carries 19% and state income tax at 63% carries 6%.

Tests

app/tests/programChart.test.ts: 18 bars, descending, federal tax at 69.0% with a 19% share, shares summing to 1; the rendered list has 18 rows with the rate, share and title text. bun run lint && bun run test && bun run build pass.

🤖 Generated with Claude Code

One thin bar per output group, best first, with the program's share of
the headline weight beside it, so a reader sees all 18 programs at a
glance and why the unweighted rates do not average to the headline (the
dollar-heavy tax lines carry most of the weight and are where models
miss most). The existing table stays as a collapsible tabular twin.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
policybench-site Ready Ready Preview Sep 6, 2026 1:37pm UTC

Request Review

Below the theme's `sm` breakpoint (48rem) the label, rate and share now
share one line and the bar takes the full row width beneath them, so a
320px viewport gives the track 288px instead of zero. Labels wrap there
instead of truncating. From `sm` up the four columns stay on one line,
the label column is capped at 14rem and the bar track keeps a 6rem
minimum, so long labels truncate before the bar shrinks.

Adds a test pinning the responsive classes; browser probes at 320, 360,
656, 768 and 1280px confirmed the track widths and no horizontal
overflow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit c7aaffe into main Sep 6, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant