Skip to content

fix(arena): propagate judge outages and cancel sibling calls - #5073

Merged
AdamRajfer merged 3 commits into
mainfrom
arajfer/saved-state-recovery
Oct 27, 2026
Merged

AdamRajfer merged 3 commits into
mainfrom
arajfer/saved-state-recovery

Conversation

@AdamRajfer

@AdamRajfer AdamRajfer commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

When either Arena judge request fails, propagate the outage through existing judge-failure handling and cancel and await its sibling request. Check HTTP status before parsing the response so an HTTP error retains its actual status. Preserve the saved answer, native verdict scoring, parsing and retry limits.

flowchart LR
    A[Saved answers] --> B[Two judge orderings]
    B --> C[Both succeed: native score]
    B --> D[Either fails: cancel and await sibling]
    D --> E[Existing masked judge failure]
Loading

The LMArena v2/v3 configs set the shared non-final failure limit to 1%, and Vision Arena to 5%. The README distinguishes judge outages in the failures sidecar from missing or unparseable judgments counted by Arena's aggregation guard. Shared health marks an above-limit run unhealthy but still publishes its score; withholding that score is a separate follow-up. The existing aggregation guard is unchanged.

This PR stands on main and changes only Arena and its benchmark configs. Shared run state, latest-attempt selection and saved-answer reverification belong to #3302 and #3879.

Validation: 183 Arena tests and 50 health-limit tests pass. Actual benchmark config resolution reaches the collector with limits of 1%, 1% and 5%. Changed-path hooks pass. No model benchmark score is claimed.

@AdamRajfer AdamRajfer self-assigned this Oct 26, 2026
@nemo-automation-bot
nemo-automation-bot Bot requested review from a team October 26, 2026 01:17
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

@svcnvidia-nemo-ci svcnvidia-nemo-ci added area:evaluation Evaluation, rollout collection, reward profiling, comparison, and exporters feature New capabilities, enhancements, or enablement work labels Oct 26, 2026
@AdamRajfer
AdamRajfer force-pushed the arajfer/failure-reporting branch from ad23cee to c9b4f06 Compare October 26, 2026 01:37
@AdamRajfer
AdamRajfer force-pushed the arajfer/saved-state-recovery branch from 3afbdf4 to 723ad7d Compare October 26, 2026 01:37
@svcnvidia-nemo-ci svcnvidia-nemo-ci added the needs-review PR is ready for code review and waiting on a reviewer label Oct 26, 2026
@AdamRajfer
AdamRajfer force-pushed the arajfer/failure-reporting branch from c9b4f06 to 648613e Compare October 26, 2026 01:48
@AdamRajfer
AdamRajfer force-pushed the arajfer/saved-state-recovery branch from 723ad7d to ad7771d Compare October 26, 2026 01:48
@AdamRajfer
AdamRajfer force-pushed the arajfer/saved-state-recovery branch from ad7771d to eadec35 Compare October 26, 2026 03:42
@AdamRajfer
AdamRajfer force-pushed the arajfer/failure-reporting branch from 648613e to ee65dce Compare October 26, 2026 03:42
@AdamRajfer AdamRajfer changed the title fix(eval): reverify saved Arena answers after judge failures fix(arena): propagate judge outages and cancel sibling calls Oct 26, 2026
Signed-off-by: Adam Rajfer <arajfer@nvidia.com>
@AdamRajfer
AdamRajfer force-pushed the arajfer/saved-state-recovery branch from 3612b3e to 2ad82a3 Compare October 26, 2026 19:39
@AdamRajfer
AdamRajfer requested a review from a team as a code owner October 26, 2026 19:39
@AdamRajfer
AdamRajfer changed the base branch from arajfer/failure-reporting to main October 26, 2026 19:39

@yuhezhang-ai yuhezhang-ai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Adam, this matches the split we discussed: Arena only, with the shared recovery left to #3302 and #3879. The cancel-and-await logic looks right, and the 182 Arena tests pass for me locally. Two things before merging:

Comment thread resources_servers/arena/README.md Resolved
Comment thread resources_servers/arena/app.py Resolved
Preserve the actual judge HTTP error before decoding its response. Cover HTTP 500 with rate-limit text through the real HTTP response and judge failure wrapper.

Signed-off-by: Adam Rajfer <arajfer@nvidia.com>
Signed-off-by: Adam Rajfer <arajfer@nvidia.com>

@yuhezhang-ai yuhezhang-ai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Adam, both points are addressed. The judge's HTTP status is checked before parsing, and the Arena configs set the health limits, with the README saying what is and isn't counted. The 183 Arena tests pass for me on 69b605f.

One note for me, not for this PR: with #3302, an outage that has used up its retries counts as a final failure, so the not-final limit would stop catching it. I'll add the matching final limit to these three configs in #3302.

Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

🔄 Merge queue validation started! You can track the progress here: https://github.com/NVIDIA-NeMo/Gym/actions/runs/40471986253

This branch was previously deployed

1 inactive deployment
public — 69b605ff Deployed Oct 26, 2026 by copy-pr-bot[bot] via release / finalize / notify #7458
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:evaluation Evaluation, rollout collection, reward profiling, comparison, and exporters feature New capabilities, enhancements, or enablement work needs-review PR is ready for code review and waiting on a reviewer

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants