Skip to content

feat(orchestrator): retire the filter pipeline - #3264

Merged
hallerite merged 1 commit into
feat/task-sampler-skeletonfrom
feat/retire-filter-pipeline
Aug 13, 2026
Merged

feat(orchestrator): retire the filter pipeline#3264
hallerite merged 1 commit into
feat/task-sampler-skeletonfrom
feat/retire-filter-pipeline

Conversation

@hallerite

@hallerite hallerite commented Aug 13, 2026

Copy link
Copy Markdown
Member

PR 3 of the TaskSampler stack (#3261#3262 ← this; retarget to main as the stack merges).

The filter subsystem served exactly three detectors; each gets a proper home and the pipeline itself — both config slots, the double apply_filters pass, the RolloutFilter protocol — is deleted.

Zero-advantage splits into its three roles

  • Evidence: finalized groups already feed the task sampler (feat(orchestrator): task sampler skeleton #3262).
  • Admission: [orchestrator.sampler] drop_degenerate_groups = true drops zero-signal groups at finalization so the batch backfills — the old pre-batch enforce=true + oversampling_factor recipe.
  • Ship rule: Algorithm.trains_on_zero_advantage (default False, echo True). MaxRL's all-zero discard sentinel stops depending on a filter being configured; echo's exception becomes automatic and per-env instead of a run-wide enforce=false. advantages=None (opd/opsd/sft) always ships.

Gibberish/repetition become rollout-level detections ([[orchestrator.detections]]): rollout-granularity predicates over the rollout's own branches, evaluated once at group finalization — the pipeline's single decision point — replacing both slots. An enforced detection ships no samples and never occupies a batch slot (backfill); its reward still counts toward the group baseline.

Renames/migrations, no shim: Rollout.filter_results/is_filtereddetections/is_excluded; pre_filters/* metrics → detections/*; gate drops surface as sampler/{env}/dropped_degenerate_groups; five tracked configs migrated; docs Filters section rewritten as Detections. Defaults map 1:1. One deliberate metrics change: zero-advantage rollouts stay in the effective subset — an all-correct group is a real outcome, and excluding it clipped reward stats.

Design doc: design/task-sampler.md §3.5.

Verified: 143 unit tests pass (orchestrator + configs), including the rewritten test_detections.py.

🤖 Generated with Claude Code

The filter subsystem served three detectors; each now has a proper home and
the pipeline itself (pre/post batch slots, double apply pass, RolloutFilter)
is gone:

- Zero-advantage splits into its three roles. Evidence: every finalized group
  already feeds the task sampler. Admission: [orchestrator.sampler]
  drop_degenerate_groups drops zero-signal groups at group finalization so
  the batch backfills (the old pre-batch enforce + oversampling recipe).
  Ship rule: Algorithm.trains_on_zero_advantage — a class declaration, not a
  run-level knob. MaxRL's all-zero sentinel stops depending on a filter being
  configured; echo's exception (observation CE trains through collapsed
  advantages) becomes automatic and per-env instead of a global enforce=false.
- Gibberish/repetition demote to arrival-time detections ([[orchestrator.detections]]):
  each reads only the rollout's own branches, so one pass at tokenization
  replaces both slots. One drop semantic replaces pre-vs-post: an enforced
  detection ships no samples and never occupies a batch slot (backfill), while
  the reward still counts toward the group baseline.

Rollout.filter_results/is_filtered become detections/is_excluded;
pre_filters/* metrics become detections/*; degenerate-group drops surface as
sampler/{env}/dropped_degenerate_groups. Default behavior is preserved: the
old post-batch enforcing zero_advantage maps 1:1 onto the ship rule, and
gibberish/repetition still default to monitoring. Tracked configs migrated in
place, no shim. One deliberate metrics change: zero-advantage rollouts now
stay in the effective subset — an all-correct group is a real outcome, and
excluding it clipped reward stats.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hallerite
hallerite force-pushed the feat/retire-filter-pipeline branch from fd76931 to c1053d5 Compare August 13, 2026 15:38
@hallerite
hallerite merged commit c1053d5 into main Aug 13, 2026
8 checks passed
@hallerite
hallerite deleted the feat/retire-filter-pipeline branch August 13, 2026 15:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant