Repository navigation
fix: reject null or non-numeric gated accuracy metrics - #184
Open
anandhu-eng wants to merge 1 commit into
Open
anandhu-eng wants to merge 1 commit into
anandhu-eng wants to merge 1 commit into
Conversation
metric_scores() skips a metric it cannot convert to a number, so
"score": {"exact_match": null}, a null metric on a legacy entry, or a
scalar like "N/A" dropped the dataset out of the mean with no error.
The single-turn gate now reports each such metric when it is gated (a
threshold metric, or the scalar score) and does not compute the
aggregate. Other fields are ignored, since a legacy entry's extra
fields may be bookkeeping. AccuracyResult.unreadable_metrics() shares
the metric lookup with metric_scores().
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
MLCommons CLA bot All contributors have signed the MLCommons CLA ✍️ ✅ |
There was a problem hiding this comment.
🟢 Approval recommended
No active review issues block the change to reject unreadable gated accuracy metrics before aggregation.
No open issues 🎉
What changed in this PR
Addresses #178 by rejecting null or non-numeric gated accuracy metrics before computing an aggregate, preventing datasets with unreadable scores from silently dropping out of the mean.
Changes:
- Shares metric lookup between numeric score extraction and unreadable-metric detection.
- Adds an accuracy-gate error for unreadable gated metrics while preserving exclusions for inline entries and ungated fields.
- Adds regression tests for named, scalar, and legacy metric formats and the intended exclusions.
| File | Description |
|---|---|
tests/submission_checker/test_checks_file.py |
Tests unreadable-metric detection alongside numeric score extraction. |
tests/submission_checker/test_checks_aggregate.py |
Tests gate rejection and exclusions across supported report formats. |
src/submission_checker/models/file/accuracy.py |
Adds unreadable-metric detection using shared metric lookup. |
src/submission_checker/models/aggregate/context.py |
Blocks aggregation when gated metrics are unreadable. |
src/submission_checker/data/messages.yaml |
Adds the unreadable-metric error and remediation guidance. |
Review effort: Balanced
pgmpablo157321
approved these changes
Nov 13, 2026
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.
Fixes #178. Stacked on #183.
metric_scores()skips any metric it cannot convert to a number. So"score": {"exact_match": null}, a null metric on a legacy entry with noscorekey, or a scalar like"N/A"dropped that dataset out of the mean with no error. Only a top-levelscore: nullwas reported._gate_accuracynow reports each such metric (accuracy-gate / unreadable-metrics, e.g.livecodebench::gptoss (exact_match=null)) and does not compute the aggregate.score. A null field that is not gated is ignored, since a legacy entry's extra fields may be bookkeeping.AccuracyResult.unreadable_metrics()uses the same metric lookup asmetric_scores(), so the two cannot disagree on which fields are metrics.score, which fix: reject a null SWE-bench score in a mandatory band #181 (null) and fix: reject non-finite accuracy scores in the single-turn gate #183 (non-finite) already cover.Tests:
unreadable_metrics().The four rejection tests fail without the gate change. Full suite: 1,848 passed. Ruff and mypy pass.
🤖 Generated with Claude Code