Repository navigation
feat(vision-suite): aggregate repeated runs into mean and spread - #183
Merged
Merged
Conversation
ADR 0023 asks for n=3 per think-on cell because on-policy sampling is not deterministic, but nothing turned three scores files into one row. Doing that arithmetic by hand into a table is exactly what ADR 0012 rule 8 forbids, so this does it: files are matched as scores_<tag>.json and scores_<tag>-rep<N>.json, an arm measured once and an arm measured three times both work, and the reported n says which. Reports max-min rather than a standard deviation. With n=3 the range is what a reader can reason about, and it is the number that decides whether a difference BETWEEN arms survives the noise WITHIN one -- so it is printed separately as "the bar any cross-arm claim must clear". That framing is not decorative. Measuring qwen3.8 this week I reported a name_bbox gain at n=1, retracted it at n=2 as noise, and then at n=5 found it was real after all: think-on's lowest value (0.631) clears think-off's highest (0.571), and the arms never overlap. Two samples showed the spread was large, which was true, but not that the arms overlapped -- and I conflated those. A tool that prints both numbers side by side would have stopped the flip-flop. Also derives finetext correct/fabricated from the tiers, because per-tier recall alone misleads. Every model emits all 20 codes regardless of what it can resolve (finetext_probe.py says so), so a zeroed small tier means FABRICATED codes rather than omitted ones -- and the tiers can swap between runs while the total holds: two think-on runs scored 4/4/4/1/0 and 4/4/4/0/1, identical totals, opposite tiers. Reading that as "lost the 9px tier" is wrong; the total is the signal. Verified against the seven qwen3.8 runs on 10.8.0.4, including pooling this morning's arms with tonight's to n=5, plus the no-args and missing-tag paths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
ADR 0023 asks for n=3 per think-on cell because on-policy sampling isn't deterministic — but nothing turned three scores files into one row. Computing those means by hand into a table is exactly what ADR 0012 rule 8 forbids, so this does it.
Files match as
scores_<tag>.jsonandscores_<tag>-rep<N>.json, so an arm measured once and an arm measured three times both work, and the reported n says which.It reports spread, and that is the point
Max-min rather than a standard deviation: at n=3 the range is what a reader can reason about, and it's the number that decides whether a difference between arms survives the noise within one. It's printed separately as "the bar any cross-arm claim must clear".
That framing isn't decorative — it comes from getting this wrong twice this week on qwen3.8:
name_bboxTwo samples showed the spread was large, which was true, but not that the arms overlapped — and I conflated those. A tool printing both numbers side by side would have stopped the flip-flop.
Pooled at n=5 vs n=2 it reads:
Incidentally establishing that think-off is near-deterministic but not exactly so — 0.003 on scene IoU across two greedy runs, consistent with GPU float-reduction ordering. The ADR's convention of a single think-off run rests on an assumption that is very nearly, but not quite, true.
Derives finetext correct/fabricated
Per-tier recall alone misleads. Every model emits all 20 codes regardless of what it can resolve (
finetext_probe.pysays so), so a zeroed small tier means fabricated codes, not omitted ones — and tiers can swap between runs while the total holds: two think-on runs scored4/4/4/1/0and4/4/4/0/1, identical totals, opposite tiers. Reading that as "lost the 9px tier" is wrong; the total is the signal.Verified
Against the seven qwen3.8 runs on 10.8.0.4, including pooling this morning's arms with tonight's to n=5, plus the no-args and missing-tag paths.
🤖 Generated with Claude Code