Repository navigation
fix(eval): correct judge rendering, metric scoring, and bootstrap RNG - #1702
Merged
Merged
Conversation
…ures Signed-off-by: git-jxj <65210887+git-jxj@users.noreply.github.com>
Yunnglin
approved these changes
Sep 7, 2026
Yunnglin
left a comment
Collaborator
There was a problem hiding this comment.
LGTM. Renaming the parametrized argument avoids the pytest-benchmark fixture collision; the full targeted regression suite (89 passed), pre-commit, and CI smoke test all pass locally.
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.
Fixes #1697.
This fixes four scoring correctness issues: model text can expand judge-template placeholders, arena confidence intervals depend on unrelated global RNG activity, metric exceptions count as successful zero scores, and inclusion accuracy uses different matching rules for strings and lists.
{gold}, JSON, and backslashes.general_arenabootstrap its own RNG, seeded fromTaskConfig.seed. Fixed seeds reproduce confidence intervals regardless of global RNG consumption; explicitNoneretains nondeterministic sampling without modifying global RNG state.EXCLUDEDor partially failed samplesDEGRADED. Preserve valid metrics and their denominators through judge fallback and LLM recall, including a missing primary metric and equivalent metric names. When the judge recovers a completely failed rule, align equivalent metric names with the rule declaration soaccandaccuracydo not split the cross-sample aggregation denominator.allow_inclusion. Lists remain alternatives (including MMLU-Redux single-choice answers); string references become a single alternative, soYorkno longer matchesNew York. Case and surrounding whitespace follow the existing normalization rules, and blank predictions do not receive credit.The bootstrap issue is global-RNG coupling, not an absence of seeding in the standard entry point:
run_taskalready defaults to seed 42. This does not changearena_hard, whose current aggregation does not call bootstrap. The AIME/AIR-Bench parsing defects in #1578 were already fixed by #1588 and subsequently migrated to JSON contracts in #1601; those adapters are unchanged here.Compatibility
general_arena,mmlu_redux, andtrivia_qamove to evaluation versionv1.1. A shared scoring version is also included in native cache fingerprints so old scores cannot bypass the common judge and metric fixes. This invalidates existing native score-cache identities, including benchmarks outside these three: usererun_review=Trueto reuse predictions and recompute reviews. Legacy fingerprints remain calculated with their original algorithm for provenance tracking.Validation
Four of the 10 new cross-sample aggregation cases fail against
e0400d03: equivalent judge and rule names produce duplicate accuracy aggregates with one sample each instead of one aggregate with two samples.The results below are from the current revision unless marked as earlier. Regression tests were run against the old behavior and rerun after each fix. All judge responses use offline doubles.
python -m pytest tests/cli/test_all.py::TestRun::test_ci_lite -v -s -p no:warnings: 1 passed, using the mock model.make lint: passed.