Repository navigation
share: rank ranges, pages per pair and cut outputs on the board card - #92
Open
davanstrien wants to merge 8 commits into
Open
davanstrien wants to merge 8 commits into
davanstrien wants to merge 8 commits into
Conversation
The card told readers that two models with overlapping 95% intervals are not clearly separated. That test is too strict: both ratings come from the same resampled pages and move together, so the difference between two ratings varies less than the two intervals suggest. compute_elo now keeps the bootstrap replicates long enough to test each pair's rating difference, and gives every model the best and worst rank it could hold (Leaderboard.rank_range). The intervals are unchanged: the same resamples produce them. The card and the board files also give: - the smallest and largest number of pages a pair was compared on, and why a pair is not compared on a page; - per model, the number of pages where its output was longer than the judge's text cap; - the link to the judge prompts at the version that judged, when the results metadata records it. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Card and method: - The card defines a rank range by the number of models clearly above and below. It no longer says that a range names the models a model is not separated from, or that it is the better guide for a pair. It gives the reading rule (ranges that do not overlap: clearly apart; ranges that overlap: no statement) and says that about 1 pair in 20 of equally good models is called apart by chance. - A model needs 20 pages to be called apart from another (the paired percentile test is anti-conservative below that), and there are no rank ranges from fewer than 100 resamples. - The percentile index arithmetic is the same as before the bootstrap was split, so intervals at every level are unchanged. Card facts: - Cut-output counts are "not recorded" for rows stored without the truncation flags, where a count of zero would be false. load_existing_comparisons keeps None for those rows. - The pages-per-pair line follows --min-chars (with 0, two empty outputs are compared) and counts the pairs that were never compared. - The judge-time version in the prompt link must be three plain ASCII numbers. Tests for pairing, level, exact twins, the fitted-rank clamp, the page gate, pair normalisation, and rows compared with compute_elo. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
- The card no longer says that two models whose ranges do not overlap are clearly apart. A reviewer built resamples where A is clearly above C and D, C and D are clearly above B, and the pair A and B still fails its own test. The card states what is always true: a range of one rank means the model is clearly apart from every other model, and a wider range does not decide a pair. That construction is a regression test. - The card, CHANGELOG and docstring say that a range always includes the model's own rank, and call 5% the level of each test, not the rate of chance separations (which is higher on few pages). - Pages per pair: with pairs that were never compared, the counts are for "each pair that was compared". When the results do not record --min-chars, the card says so and does not state that short pairs were left out. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…view - The reason two models with overlapping intervals can be clearly apart is that the difference between two ratings varies less than their two intervals added together. Ratings on one board do not, in general, move together: after centring their mean correlation is -1/(n-1). - A board with fewer than two models on 20 pages has no rank ranges. A full range in every row of a 12-page slice read as a result. - Each model under the page gate adds one rank to every other range. - Pages per pair: with pairs never compared, the counts are for the pairs that were compared. A judge call with no valid answer is a fourth reason for a missing comparison. - The cut-output note says that the cap applies to the flattened text in the default mode. - The agent skill keeps the rule for judge output (overlapping intervals are not a difference) and points to the rank ranges for a stronger test. - Tests pin the 20-page gate on both models of a pair, the 95% level, the replicate floor and the one-page pair. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Three review rounds each found a sentence in the card's rank-range paragraph that is true for typical boards and false for some board. The paragraph now holds statements of three kinds only: - definitions (how a range is counted, and that it is widened to include the model's own rank); - what always follows (a range of one rank means the model tested clearly apart from every other model; an untested model can only widen a range); - measurements, named as such (in simulations, 5 to 7 in 100 pairs of equally good models tested apart by chance on 20 pages or more). Withdrawn: "at least 1 pair in 20" (identical models never test apart), "varies less than their two intervals added together" (not for every set of resamples), "each such model adds one rank" (not after the range is widened to the fitted rank), and the note that the text cap applies after HTML is flattened (older results do not record the text mode). A test keeps these sentences off the card. Also: "1 page", and "N pairs of models had no direct comparison". Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
… third review - Results that do not record --min-chars come from a version that also left pairs out by other rules (an error message was judged as text; a pair with one empty output was skipped). For those the card says that the rules are not recorded, and names none. - The rate of chance separations on the card is "4 to 7 in 100 pairs, in simulations": boards of two models gave 4.3 to 4.7. - README and the agent skill say what a rank range is without claiming that it decides a pair. - "1 character"; no "each" when the page counts differ. - Tests: the page gate printed on the card is 20; no invented number when the text cap is not recorded. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
From the fourth review. No change to the computation. - Card: "pairs of ranked models" and "every other ranked model" (a FAILED model is in the table and is not tested). Two models with no direct comparison get their ratings, not their order, from comparisons with other models: equal ratings are ordered by name. A pair is left out when one output is an error marker such as [OCR ERROR], not for any text that reads like an error. When --min-chars is not recorded the card says so without stating how old the results are. - Docstrings: a wider range does not say how many models tested apart once it is widened to the fitted rank; two models are never called apart when their ratings are equal in every replicate (the same output is not enough: the judge can treat it differently against a third model); the example of two ranges that do not decide a pair needs four models. - CHANGELOG and docstring no longer infer that a large board is likely to hold a pair that tests apart by chance. - README and the agent skill: a board can show a rank range for each ranked model; fewer pages do not always mean failed outputs. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
…y a test From the second reviewer of the fourth round. No change to the computation. - "Two ranges do not decide a pair" was false on a two-model board, where ranges 1 and 2 decide the only pair, and wherever one of the two ranges is one rank. The card says that two ranges that are both wider than one rank do not always decide a pair. - The pages-per-pair line says "ranked models": a FAILED model is in the table and was compared on no page. - The cut-output note speaks of the judge's copy of an output. In the default text mode HTML is flattened before the cap, so an output longer than the cap can reach the judge whole. - The rank-range paragraph is one constant, and a test compares it word for word: mutants that changed a number or dropped a "not" survived the substring checks. - Docstrings and CHANGELOG: "rank range", not "the best and worst rank a model could hold"; the two rules agree on a two-model board. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016isSPrQfEr21vMuVwsfJxz
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The board card told readers that two models with overlapping 95% intervals are not clearly separated. On boards of three or more models that test is stricter than its 95% label: in simulations it called equally good models apart about 1% of the time. Testing the difference between two ratings directly, on the same resampled pages, separated 4 to 16 points more of the pairs that do differ. On a two-model board the two tests gave the same answer.
The card also did not say how many pages each pair rests on, or how often the judge read a cut output.
What this changes
Rank range (
elo.py,share.py)compute_elokeeps the bootstrap replicates long enough to test each pair's rating difference on the same resamples. Each ranked model gets a rank range: first rank = 1 + the number of models that test clearly above it, last rank = n − the number that test clearly below.Leaderboard.rank_rangeholds it.Card (
share.py)--min-chars, the card says that the rules for leaving a pair out are not recorded.New columns:
rank_low,rank_high,truncated_pagesinoverall.jsonl;rank_low,rank_highinslices.jsonl. Newboard.jsonkeys:pair_pages_min,pair_pages_max,pairs_never_compared,judged_with_version.What the rank range does and does not say
Two reviewers simulated it independently (Bradley-Terry data with and without page effects; 3, 9 and 20 models; 10 to 300 pages; 300 to 400 boards per cell). Their numbers agree within 1.5 points.
Limits:
Tests
ruff,tyandrumdlpass.compute_elo(...).rank_range, rendered cells, slice boards (including one too small for any pair), failed models, pages per pair in both storage orders, pairs never compared, cut outputs known and not recorded, the--min-charswording for each case, the version filter, a test that compares the rank-range paragraph word for word, and a test that keeps the withdrawn sentences off the card.Review before this PR
Four rounds, each by Codex and by an independent agent. No round found a defect in the computation after round 1; rounds 2 to 4 were about sentences.
The changes after round 4 are wording only. The rank-range paragraph is one constant, and a test compares it word for word.
Not in this PR
_check_valueaccepts an allow-listed string in a numeric column. This is an existing pattern in the privacy check, not new here.🤖 Generated with Claude Code