Repository navigation
Conversation
An agentic episode whose hosted environment never opened comes back ABORTED with reward None (generate_hub.agentic_tool_call); _compute_zero_std_metrics rounded that None and the whole eval raised. A group with a None reward is neither all-easy nor all-hard, so it is left out of the count. (cherry picked from commit bd9ad97)
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.
Problem. An agentic episode whose environment never opened comes back
ABORTEDwith rewardNone._compute_zero_std_metricsrounds each group's reward to build its count key, so one such group raisesTypeErrorand the whole eval pass fails.Fix.
_is_zero_stdreturns False for a group that has aNonereward, so the group is left out of the count.def _is_zero_std(samples: list[Sample]): rewards = [sample.get_reward_value(args) for sample in samples] + if any(reward is None for reward in rewards): + return False return len(rewards) == 0 or all(rewards[0] == r for r in rewards)Tests.
tests/fast/ray/rollout/test_metrics.py::test_zero_std_metrics_skip_a_group_whose_episode_aborted.Without the fix, the new test fails with
TypeError: type NoneType doesn't define __round__ methodatmiles/ray/rollout/metrics.py:324. On CPU,tests/fast/ray/rollouthas 0 new failures against main (the same 5 tests fail on both: 2 intest_engine_addressing.py, 3 intest_inference_runtime_topology.py).Not yet proven in a run: no run so far had an aborted group reach eval scoring with this change.
🤖 Generated with Claude Code
Verified on GPU (2026-10-31)
Qwen3.8-27B VL on Megatron, 4 nodes of 8x B300, computer-use episodes through the TITO session server (screenshots, context folding on), 3 train steps with an eval pass between steps: all 3 eval passes completed (32 episodes each). Group cancel fired twice during training ("cancelled 4 running sibling episode(s)" and 7), but no eval group held a cancelled episode, so the case this PR fixes was not exercised. Not yet verified on GPU; the CPU tests cover it.