feat: hardcode rollout filters and zero-advantage drop - #3254
Draft
mikasenghaas wants to merge 4 commits into
Draft
feat: hardcode rollout filters and zero-advantage drop#3254mikasenghaas wants to merge 4 commits into
mikasenghaas wants to merge 4 commits into
Conversation
Replace the composable pre/post-batch filter config with hardcoded checks: gibberish and repetition detection are monitor-only metrics, and zero-advantage rollouts drop before they consume batch budget. Algorithms that train without credit (echo) declare trains_on_zero_advantage to keep their rollouts; count_zero_advantage_in_batch opts back into the fixed sampling budget of the old default. Remove rollout-based batching (batch_size, oversampling_factor): a rollout is an arbitrary unit of learning signal — the same batch size means very different step sizes across envs. token_batch_size is now the only batching mode. Checked-in configs are converted as batch_size x measured average tokens per rollout (from recent nightly/ablation W&B runs; estimated where no runs exist). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drop the per-config derivation comments and write the large ints with underscore separators. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
batch_size and group_size stay the only batching knobs. Also drop oversampling_factor: max_inflight_episodes defaults to batch_size, and configs that oversampled now set it explicitly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The check verdicts log as {scope}/{subset}/{agent}/<name>/mean,
next to the other per-trace verdicts (is_trainable, is_filtered).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mikasenghaas
requested review from
faresobeid,
hallerite and
samsja
and removed request for
samsja
August 12, 2026 20:02
This was referenced Aug 13, 2026
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.
Summary
Orchestrator cleanup: batching stays
batch_size+group_size, and everything between scoring and training is hardcoded.pre_batch_filters/post_batch_filters, discriminatedFilterConfigunion, per-slotenforce) is gone.filters.pyis now three hardcoded checks with the old default thresholds as module constants. Gibberish and repetition detection are monitor-only: tracked per rollout in metrics, never dropped.batch_sizeinformative samples: the trained-on batch is predictable, and the per-step sampling time varies with the zero-advantage rate.orchestrator.count_zero_advantage_in_batch = trueopts back into the old accounting (dropped rollouts still count towardbatch_size— fixed sampling effort per step, variable trained-on samples). Echo keeps its zero-advantage rollouts via a newAlgorithm.trains_on_zero_advantageclass flag (itscecomponent trains observation tokens regardless of credit); opd/opsd assign no advantage and never match. The sink warns every 25 consecutive all-zero-advantage groups so a stalled batch fill is visible.token_batch_size(the alternative rollout-count-free mode) andoversampling_factor(amax_inflight_episodesderivation) are removed.max_inflight_episodesdefaults tobatch_size; set it explicitly to oversample — configs that used a factor now carry the resolved value.{scope}/{subset}/{agent}/filters/<name>/mean→{scope}/{subset}/{agent}/<name>/mean, next to the other per-trace verdicts (is_trainable,is_filtered).Breaking
orchestrator.pre_batch_filters/orchestrator.post_batch_filtersare removed. Gibberish/repetition run always in monitor mode; enforcement is no longer available (examples/advanced/glm-5.2/swe.tomlpreviously enforced gibberish and now only monitors it). Zero-advantage dropping is always on; the old default budget accounting is available viacount_zero_advantage_in_batch = true. Echo no longer needs a filter override.batch_sizeinformative samples.orchestrator.token_batch_sizeis removed;batch_sizeis the only batching unit.orchestrator.oversampling_factoris removed. Setmax_inflight_episodes = batch_size x factorexplicitly instead.pre_filters/all/dropped_rateandpre_filters/all/<name>/rateare gone, and the check verdicts drop theirfilters/segment (.../filters/gibberish/mean→.../gibberish/mean).Verification
tests/unit(configs incl. parsing every checked-in TOML, orchestrator, utils) passes;test_qwen3_vl_e2efails identically onmain(pre-existing).configs/ci/integration/reverse-text/start.tomlon 2 GPUs: full 128-rollout batches every step, reward improves 0.13 → 0.25, no errors, clean exit.🤖 Generated with Claude Code