Skip to content
Merged
Show file tree
Hide file tree
Changes from 189 commits
Commits
Show all changes
192 commits
Select commit Hold shift + click to select a range
43714c2
feat: add vf-nano as submodule
mikasenghaas Jun 8, 2026
4c6b282
chore: bump deps/vf-nano to feat/env-server (EnvServer)
mikasenghaas Jun 8, 2026
37d7f10
feat: run orchestrator on a vf-nano env server (reverse-text)
mikasenghaas Jun 8, 2026
0cd15df
feat: consume vf-nano Trace natively (branches→samples, shared render…
mikasenghaas Jun 8, 2026
65e1ff1
refactor: pass typed ClientConfig/SamplingConfig to the env client (n…
mikasenghaas Jun 8, 2026
daac755
refactor: orchestrator holds a typed vf.Trace[EnvTask] (no dicts)
mikasenghaas Jun 8, 2026
a71dfff
chore: depend on vf-nano[serve]; bump submodule
mikasenghaas Jun 8, 2026
525ced0
chore: bump vf-nano (client docstring cleanup)
mikasenghaas Jun 8, 2026
869665f
chore: drop redundant forward-ref quotes in advantage.py
mikasenghaas Jun 8, 2026
ef6fe5f
refactor: rename FinishedRollout.raw -> trace
mikasenghaas Jun 8, 2026
3b8210d
refactor: simplify FinishedRollout, read straight off the typed Trace
mikasenghaas Jun 8, 2026
671faee
refactor: spawn env server on an OS-assigned port, drop the startup poll
mikasenghaas Jun 8, 2026
ee01818
refactor: use vf.task_type instead of a local resolve_task_type
mikasenghaas Jun 8, 2026
3297663
feat: restore backfill_rollout_tokens for SFT (typed Trace)
mikasenghaas Jun 8, 2026
3079e02
fix: pass task_idx when building Cancelled traces on off-policy drop
mikasenghaas Jun 8, 2026
6382ec1
refactor: consume typed Trace[WireTask]; inline synthetic error traces
mikasenghaas Jun 8, 2026
0ea7584
feat: env-server file logging; align debug config batch/group to cano…
mikasenghaas Jun 8, 2026
67cbfd5
fix: don't double the envs/ segment in the env-server log path
mikasenghaas Jun 8, 2026
a1e9d5e
chore: bump vf-nano (Error.traceback str | None)
mikasenghaas Jun 8, 2026
5bb5d2e
chore: bump vf-nano (to_wire ordering)
mikasenghaas Jun 8, 2026
17c5611
feat: launch env servers as separate processes from the rl entrypoint
mikasenghaas Jun 8, 2026
50bf8f5
refactor: env servers use fixed configurable ports, not get_free_port
mikasenghaas Jun 8, 2026
e7cbdc9
refactor: separate train/eval env-server port blocks
mikasenghaas Jun 8, 2026
e30fc29
fix: env-server logs + sidecar queue cleanup; train-only debug config
mikasenghaas Jun 8, 2026
3f15d8c
chore: bump vf-nano (BaseRequest marker, no request_type field)
mikasenghaas Jun 8, 2026
5859660
chore: env client uses client= (was client_config=); bump vf-nano
mikasenghaas Jun 8, 2026
7a9651a
chore: bump vf-nano (drop renderers dep comment)
mikasenghaas Jun 8, 2026
614ab80
chore: bump vf-nano (configs/ + cli/ split, serve/ runtime-only)
mikasenghaas Jun 8, 2026
889d342
refactor: drop FinishedRollout.to_dict; serialize the Trace to disk d…
mikasenghaas Jun 8, 2026
69e41fb
refactor: track vf-nano agent->harness rename
mikasenghaas Jun 8, 2026
e3382ea
chore: track vf-nano plugin reorg (reverse-text path + bump)
mikasenghaas Jun 8, 2026
db83f08
feat: reuse vf.EnvConfig in the orchestrator (typed taskset/harness, …
mikasenghaas Jun 8, 2026
1e1b924
refactor: inherit vf's shared plugin resolution; trim dead EnvConfig …
mikasenghaas Jun 8, 2026
bad542c
refactor: require a configured taskset per env (no reverse-text default)
mikasenghaas Jun 8, 2026
c132ad4
chore: bump deps/vf-nano (dashboard taskset.id/harness.id fix)
mikasenghaas Jun 8, 2026
d9c5590
chore: bump deps/vf-nano (sampling max_tokens fix)
mikasenghaas Jun 8, 2026
f8c27e3
fix(env-server): require a configured env; build EnvServer from the E…
mikasenghaas Jun 9, 2026
f1f24a7
feat(nano): reverse-text uses default harness with enable_bash=false
mikasenghaas Jun 9, 2026
890f3c5
feat(nano): hendrycks-sanity config on the math-env taskset
mikasenghaas Jun 9, 2026
f72d41c
chore: bump deps/vf-nano to merged main (math/aime tasksets, fixes)
mikasenghaas Jun 9, 2026
e8616d1
chore: drop deps/verifiers, bump deps/vf-nano to merged main
mikasenghaas Jun 9, 2026
81b6beb
feat(nano): hendrycks-sanity mirrors examples/hendrycks_sanity + slur…
mikasenghaas Jun 9, 2026
ef82afc
chore(nano): fold wandb + slurm into hendrycks_sanity config
mikasenghaas Jun 9, 2026
4f75608
chore(nano): fold output_dir into hendrycks_sanity config, drop slurm…
mikasenghaas Jun 9, 2026
e8729da
feat(vf-v1): run on the unified verifiers package (v0 envs + v1=nano …
mikasenghaas Jun 9, 2026
8da314f
test(v0): wire alphabet-sort (multi-turn) + bump verifiers (State scrub)
mikasenghaas Jun 9, 2026
ded51b9
test(v0): wire wordle + add configs/wordle/rl.toml (2-GPU)
mikasenghaas Jun 9, 2026
6dd7c74
chore: bump deps/verifiers (v1 hygiene: init.py/tests/docs)
mikasenghaas Jun 9, 2026
414b803
refactor(v1): track de-vendored verifiers, rename nano -> v1
mikasenghaas Jun 9, 2026
6159f85
chore(v1): bump verifiers (eval/serve, v1 deps in base, bundled plugins)
mikasenghaas Jun 9, 2026
54751e5
chore(v1): bump verifiers (Task.system_prompt); write full rollout jsonl
mikasenghaas Jun 9, 2026
fb4b73f
chore: drop semgrep from uv.lock (verifiers retired the policy group)
mikasenghaas Jun 9, 2026
ede49bb
fix: pin the env-server renderer tokenizer to the base model for LoRA…
mikasenghaas Jun 9, 2026
5ce3bf6
feat(orchestrator): request vLLM token ids for MITO training (#2745)
mikasenghaas Jun 9, 2026
1827776
chore(v1): bump verifiers submodule; restore v0 env catalog + v1 -v1 …
mikasenghaas Jun 9, 2026
ac40f8e
chore(v1): bump verifiers submodule to feat/nano-as-v1 tip (textarena…
mikasenghaas Jun 9, 2026
e1912a9
chore(v1): bump verifiers submodule to feat/nano-as-v1 tip
mikasenghaas Jun 9, 2026
48dfa21
chore(v1): bump verifiers submodule to feat/nano-as-v1 tip
mikasenghaas Jun 10, 2026
193a69d
chore(v1): add v1 alphabet-sort debug config (port of examples/alphab…
mikasenghaas Jun 10, 2026
e6062e9
fix: forward extra_env_kwargs to v0 legacy envs; drop dead trajectory…
mikasenghaas Jun 10, 2026
0cb47b3
fix: install the bundled `tasksets` package (harbor-v1, textarena-v1)
mikasenghaas Jun 10, 2026
eb2c589
feat: consume the v1 message-graph trace (#2763)
mikasenghaas Jun 10, 2026
d6522de
chore(v1): bump verifiers submodule to feat/nano-as-v1 tip
mikasenghaas Jun 10, 2026
9b9f002
chore(v1): bump verifiers submodule to feat/nano-as-v1 tip
mikasenghaas Jun 10, 2026
3729338
chore(v1): fix stale sft.toml teacher comments
mikasenghaas Jun 10, 2026
7adb38e
chore(v1): bump verifiers (v0 eval chat-completions client)
mikasenghaas Jun 10, 2026
7677997
feat(v1): scaleswe configs + taskset registration (#2765)
mikasenghaas Jun 11, 2026
85b27cf
feat(v1): multimodal training through the message graph + color-codew…
mikasenghaas Jun 11, 2026
e4800fe
Revert "feat(v1): multimodal training through the message graph + col…
mikasenghaas Jun 11, 2026
7d44121
feat: multimodal training through the v1 message graph + color-codewo…
mikasenghaas Jun 11, 2026
2b9323e
feat: thread num_workers to the env-server worker pool (#2768)
mikasenghaas Jun 11, 2026
9b74f8b
chore(v1): bump verifiers to be76cbc3 (env-server worker pool)
mikasenghaas Jun 11, 2026
ff51b6a
feat(v1): register r2e-gym-v1 taskset
mikasenghaas Jun 11, 2026
b5062a1
chore(swe): use r2e-gym for rlm_swe configs (v0 + v1)
mikasenghaas Jun 11, 2026
7c4c359
chore(swe): point rlm_swe configs at r2e-gym (content)
mikasenghaas Jun 11, 2026
17d1ab5
fix(v1): restore env-server worker logs to the env log file (#2770)
mikasenghaas Jun 11, 2026
15c1856
chore(v1): bump verifiers to 955b6cdf (dashboard token usage fallback)
mikasenghaas Jun 11, 2026
6fba300
chore(v1): bump verifiers to 8e4ad735 (clean env-server teardown)
mikasenghaas Jun 11, 2026
1f64004
chore(deps): bump verifiers (renderers floor 0.1.8.dev40)
mikasenghaas Jun 11, 2026
77c75a9
chore(v1): bump verifiers to db82b38a (reap subprocess tree on cancel)
mikasenghaas Jun 11, 2026
a0ffc31
feat: elastic env-server pool (inherit static/elastic pool config) (#…
mikasenghaas Jun 11, 2026
01e3d27
chore(v1): bump verifiers to f404e97f (elastic env-server pool)
mikasenghaas Jun 11, 2026
9ae4ee3
chore(v1): bump verifiers to 88e9bedd
mikasenghaas Jun 11, 2026
911df77
chore(v1): bump verifiers to 40a2e89f (fix trace.timing.*.duration to…
S1ro1 Jun 11, 2026
123ebfb
chore(v1): bump verifiers to 5dc084f5
mikasenghaas Jun 11, 2026
cf0c966
chore(v1): bump verifiers to 472622ba
mikasenghaas Jun 11, 2026
33879bf
chore: stop importing env modules in the orchestrator (always Rollout…
mikasenghaas Jun 11, 2026
e52471c
chore(v1): bump verifiers to 7270e69b
mikasenghaas Jun 12, 2026
aa70aba
chore(v1): bump verifiers to 66c87d5b
mikasenghaas Jun 12, 2026
0fa5eb4
chore(v1): bump verifiers to ef45f720
mikasenghaas Jun 12, 2026
74835f7
chore(v1): bump verifiers pin (alphabet-sort host user sim, #1645)
mikasenghaas Jun 12, 2026
8cba109
chore(v1): bump verifiers pin (modal creates_per_sec 5 -> 40, #1646)
mikasenghaas Jun 12, 2026
f89d135
fix: cap v1 hendrycks-sanity scoring at 10s (#2790)
mikasenghaas Jun 12, 2026
59acf9c
chore(v1): bump verifiers (eval/train client rename) + adopt config i…
mikasenghaas Jun 12, 2026
fbc7f21
chore(v1): bump verifiers pin (subprocess cached-interpreter uv-scrip…
mikasenghaas Jun 12, 2026
403a855
chore(v1): bump verifiers pin (codex built-in harness, #1661)
mikasenghaas Jun 12, 2026
0960989
chore: track terminal-bench-2-v1 as a taskset dependency
mikasenghaas Jun 12, 2026
fa52d1f
fix(v1): keep multimodal tensors out of rollout dumps (#2794)
mikasenghaas Jun 12, 2026
44b8397
chore(v1): install all v1 example tasksets in prime-rl
mikasenghaas Jun 12, 2026
f899a76
chore(v1): install the compact example harness in prime-rl
mikasenghaas Jun 13, 2026
8d1bc0c
chore(v1): bump verifiers pin (v1 docs #1662 + Trace.info #1664)
mikasenghaas Jun 13, 2026
d8cb7f7
feat(v1): encode router-replay routed_experts into transport (#2808)
S1ro1 Jun 14, 2026
52e33a7
Merge origin/main into feat/nano-as-v1
mikasenghaas Jun 14, 2026
18964e6
fix(orchestrator): keep top-level advantage wiring after merge
mikasenghaas Jun 14, 2026
0d66c02
chore(v1): bump verifiers pin to merged main (1b7736a8)
mikasenghaas Jun 14, 2026
41df3e7
chore: bump pydantic-config submodule to main (single-dash short flags)
mikasenghaas Jun 14, 2026
af50f1b
chore(v1): bump verifiers pin to feat/nano-as-v1 tip (5fc0b295)
mikasenghaas Jun 14, 2026
cc0a1c7
chore(v1): bump verifiers pin to 3af08c9b
mikasenghaas Jun 15, 2026
243b49e
fix(orchestrator): trim glibc heap back to the OS each step (#2821)
mikasenghaas Jun 15, 2026
0d7544a
chore(v1): bump verifiers pin to 7862985b
mikasenghaas Jun 15, 2026
c68e201
feat: route consistent_hash on X-Session-ID for cross-turn prefix reu…
S1ro1 Jun 15, 2026
7740650
chore(v1): bump verifiers pin to 211faecb (session-affinity routing)
mikasenghaas Jun 15, 2026
820e067
chore(v1): bump verifiers pin to 3f45f73b (scaleswe-v1 image filter)
mikasenghaas Jun 15, 2026
218be18
chore(v1): bump verifiers pin to 44da378c (r2e-gym-v1 registry opt-in)
mikasenghaas Jun 15, 2026
d35513f
chore(v1): bump verifiers pin to a723977c (scaleswe-v1 image_url filter)
mikasenghaas Jun 15, 2026
180074a
chore(v1): bump verifiers pin to 0c8d0aa1 (rootless harness install)
mikasenghaas Jun 15, 2026
4789b8b
chore(v1): bump verifiers pin to d4b054e3 (skip region-limited e2e test)
mikasenghaas Jun 15, 2026
9ead973
chore: point verifiers env paths at the flattened environments/ dir (…
mikasenghaas Jun 16, 2026
45dc8c3
chore(v1): advance verifiers pin to feat/nano-as-v1 tip (Trace.state …
mikasenghaas Jun 16, 2026
6ca8a4a
chore(v1): bump verifiers pin to feat/nano-as-v1 tip (#1717 + #1719)
mikasenghaas Jun 17, 2026
e528900
chore(v1): bump verifiers pin to feat/nano-as-v1 tip (f7fa7482 -> bbf…
mikasenghaas Jun 17, 2026
56b4ed2
chore: verifiers #1732 companion (model_dump traces, Task.prompt rena…
mikasenghaas Jun 17, 2026
1984ea5
fix(v1): drop removed enable_bash from harness configs (verifiers #17…
mikasenghaas Jun 18, 2026
bfcc7ee
chore(v1): bump verifiers pin to feat/nano-as-v1 tip (caaf0ff3 -> cc4…
mikasenghaas Jun 18, 2026
4fe779d
feat(v1): add debug general-agent-v1 RL config + register the taskset
mikasenghaas Jun 18, 2026
ddade14
feat(v1): add scaleswe-v1 RL config (Qwen3.6-35B-A3B, 65k ctx)
mikasenghaas Jun 18, 2026
242c74d
chore(v1): bump verifiers pin (cc4afd52 -> 3c5f6586) + register swebe…
mikasenghaas Jun 18, 2026
8c00117
feat(v1): add SWE-Bench-Verified online eval to the scaleswe run (pri…
mikasenghaas Jun 18, 2026
12cda9b
fix(v1): use public images for the scaleswe SWE-Bench-Verified eval
mikasenghaas Jun 18, 2026
e7a80c2
chore(v1): bump verifiers pin + re-enable use_prime_registry for the …
mikasenghaas Jun 18, 2026
55c0e1a
chore(v1): cap hendrycks-sanity at 256 in-flight rollouts + 30s scori…
mikasenghaas Jun 18, 2026
4a74444
chore(v1): bump verifiers pin (general-agent-v1 colocated toolset fix)
mikasenghaas Jun 18, 2026
509c94f
chore(v1): bump hendrycks-sanity scoring timeout to 5min
mikasenghaas Jun 18, 2026
3b6a8cd
feat(orch): show avg branches next to turns in step + eval log lines
mikasenghaas Jun 18, 2026
c821bc2
chore(v1): update tmux + monitor-run skill for flattened env log paths
S1ro1 Jun 18, 2026
e680da0
chore(v1): bump verifiers pin (retry backoff + relay retries)
mikasenghaas Jun 18, 2026
e3b9be7
Fix routed SLURM inference DP rank client config (#2830)
rasdani Jun 17, 2026
621a0d5
chore(v1): scaleswe Qwen3.6 fixes — ulysses CP + qwen3_coder tool parser
S1ro1 Jun 18, 2026
0fd3d44
chore(v1): bump verifiers pin (usage tracking + Terminus 2 harness)
mikasenghaas Jun 18, 2026
dacc12a
chore(v1): scaleswe — drop eval, prime train runtime, dist_timeout 36…
S1ro1 Jun 18, 2026
6bb197c
chore(v1): bump verifiers pin (reuse pool tunnel for colocated state …
mikasenghaas Jun 18, 2026
76ce8a8
Merge remote-tracking branch 'origin/feat/nano-as-v1' into feat/nano-…
mikasenghaas Jun 18, 2026
b9820e4
chore(v1): bump verifiers pin (eval progress-bar reward/metric means)
mikasenghaas Jun 18, 2026
a526dde
chore(v1): bump verifiers pin (rollout error taxonomy + interception …
mikasenghaas Jun 19, 2026
4fc1a17
refactor(orch): record caught rollout exceptions via Trace.capture_error
mikasenghaas Jun 19, 2026
a4d53a6
chore(v1): bump verifiers pin (SDK-owned retries; merged worker-SIGTE…
mikasenghaas Jun 19, 2026
1accb8a
chore(v1): bump verifiers pin (interception env isolation + in-sandbo…
mikasenghaas Jun 19, 2026
a4f6231
chore(v1): bump verifiers pin (ModalRuntime read path fix)
mikasenghaas Jun 19, 2026
2ae8006
chore(v1): bump renderers pin to clean tag renderers-v0.1.8.dev49
S1ro1 Jun 19, 2026
352aa68
chore(v1): set partition=all + scaleswe prime-sandbox pre_run_command
S1ro1 Jun 19, 2026
96abe09
fix(v1): scaleswe deployment 2+2 nodes
S1ro1 Jun 19, 2026
3cbc884
chore(v1): hendrycks-sanity on modal runtime, 200 steps
S1ro1 Jun 19, 2026
e2869a8
chore(v1): bump verifiers pin to 94b7df1 (swebench /testbed workdir, …
mikasenghaas Jun 19, 2026
bbb8d0f
chore(v1): scaleswe on mini-swe-agent + SWE-Bench-Verified eval (100 …
mikasenghaas Jun 19, 2026
db269da
fix(rl): mkdir parent for namespaced env-server config path
S1ro1 Jun 19, 2026
b29b595
chore(v1): bump verifiers pin (sandbox lifetimes, reasoning state, ta…
mikasenghaas Jun 19, 2026
8cf05fe
chore(v1): lock the tau2-bench-v1 editable env from the verifiers bump
mikasenghaas Jun 19, 2026
8da8af0
chore(v1): bump verifiers (final touches #1770, v1 e2e CI green #1771)
mikasenghaas Jun 20, 2026
72aeb50
chore(v1): bump verifiers (ruff-format test_envs)
mikasenghaas Jun 20, 2026
ed8bf26
chore(v1): bump verifiers (drop feat/nano-as-v1 CI trigger)
mikasenghaas Jun 20, 2026
eb4bc6b
chore(v1): bump verifiers (test triggers → main only)
mikasenghaas Jun 20, 2026
3604a16
chore(v1): bump verifiers (code-golf-v1/aime24-v1 verifiers dep)
mikasenghaas Jun 20, 2026
664eeba
chore(v1): add gsm8k v1 config (train + test eval) under configs/debu…
mikasenghaas Jun 20, 2026
24ed9bd
chore(v1): bump verifiers to latest feat/nano-as-v1 (276ed743)
mikasenghaas Jun 22, 2026
6be912a
chore(v1): point verifiers submodule to main (post feat/nano-as-v1 me…
mikasenghaas Jun 22, 2026
a73f21b
Merge origin/main into feat/nano-as-v1
mikasenghaas Jun 22, 2026
6ed4e8d
fix(tests): migrate unit tests to the bumped verifiers v1 API
mikasenghaas Jun 22, 2026
190d453
feat(trainer): restore main's bin_cost FLOP-balanced packing
mikasenghaas Jun 23, 2026
32dd925
test(trainer): carry over main's bin_cost packing tests
mikasenghaas Jun 23, 2026
7b9941e
chore: drop deps/prime submodule, revert .gitmodules to main
mikasenghaas Jun 23, 2026
70aeb1f
chore: pin verifiers floor to dev357, drop compact env + narrating co…
mikasenghaas Jun 23, 2026
fcc65d4
chore: keep renderers/prime-pydantic-config sources below verifiers (…
mikasenghaas Jun 23, 2026
ff8c1b5
revert: drop merged gc.collect() in orchestrator trim_process_memory …
mikasenghaas Jun 23, 2026
ee31892
chore: unquote forward-ref type annotations + small cleanups
mikasenghaas Jun 23, 2026
7ea1b37
chore: drop EnvConfig docstring + redundant id/args fields
mikasenghaas Jun 23, 2026
3586473
feat(advantage): adopt main's per-env Linear advantage (adapted to vf…
mikasenghaas Jun 23, 2026
657b3da
chore(v1): relock flash-linear-attention to current HEAD
mikasenghaas Jun 23, 2026
cf01c09
Merge remote-tracking branch 'origin/main' into feat/nano-as-v1
mikasenghaas Jun 23, 2026
16c9bc2
fix(rl): address e2e review findings
mikasenghaas Jun 23, 2026
a709d24
chore(v1): bump verifiers submodule to main (b841e53a)
mikasenghaas Jun 23, 2026
625f484
fix(rl): correct gibberish/repetition filter logprob alignment
mikasenghaas Jun 23, 2026
60e8242
fix(rl): require at least one training env at config time
mikasenghaas Jun 23, 2026
420a0dc
feat(v1): scaleswe -> rlm harness + router replay
S1ro1 Jun 23, 2026
e6a454c
chore(v1): revert config-time train-env-required check (too broad)
mikasenghaas Jun 23, 2026
8b5f4ce
chore(v1): bump verifiers to latest main + drop stale prime-env TODO
mikasenghaas Jun 23, 2026
1eff2b9
chore(v1): remove dead prime-env-install path
mikasenghaas Jun 23, 2026
d775461
chore(v1): drop in-process env-server spawn, require address
mikasenghaas Jun 23, 2026
337931f
chore(v1): bump verifiers pin (dashboard per-rollout timer includes s…
mikasenghaas Jun 23, 2026
74a7d44
Revert "chore(v1): drop in-process env-server spawn, require address"
mikasenghaas Jun 23, 2026
19c88f5
chore(v1): orchestrator always spawns env servers in-process (mirror …
mikasenghaas Jun 23, 2026
4d5043c
fix(trainer): contiguous routed_experts slice for glm4_moe under comp…
S1ro1 Jun 24, 2026
5056e27
chore(v1): bump verifiers pin (robust _ENSURE_UV for old base images)
mikasenghaas Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/cpu_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,11 @@ jobs:
from prime_rl.utils.config import BaseConfig, find_package_resource, rgetattr, rsetattr
from prime_rl.utils.validation import validate_shared_ckpt_config

# `verifiers` (+ its `datasets` dep) is a declared slim dep: the v1 config types
# (EnvConfig, Task, ...) extend verifiers.v1, which is pure-pydantic and pulls no
# GPU/ML deps. We still forbid the actual heavy training deps below.
forbidden = ["torch", "transformers", "vllm", "wandb", "ring_flash_attn",
"verifiers", "prime", "datasets", "liger_kernel", "loguru"]
"prime", "liger_kernel", "loguru"]
leaked = [m for m in forbidden if m in sys.modules]
if leaked:
raise SystemExit(f"slim install leaked heavy deps into sys.modules: {leaked}")
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

Documenting **breaking** configuration changes — renamed, removed, or moved fields that require users to update existing configs.

- **verifiers v1 training integration** (collection of removals/renames). The orchestrator now trains against a v1 env server returning `vf.Trace` rollouts, renderer-only, with a unified token schema.
- **`[[orchestrator.train.env]]` is now a v1 `vf.EnvServerConfig`**: a v1 env is `taskset = { id = "<id>" }` + `harness = { id = "default", runtime = { type = "subprocess" } }`. A bare `id = "<id>"` (optionally with `args`) runs the v0 env through the verifiers legacy bridge — old flat `id`/`args`-only configs keep working as legacy envs; v1 envs must use the `taskset`/`harness` shape.
- **`orchestrator.train.env` no longer defaults to a `reverse-text` env**: the default is now empty (`[]`), so configs must declare `[[orchestrator.train.env]]` explicitly.
- **`...env[].num_workers` → `pool`**: per-env worker sizing moves to a `pool` config (`static`/`elastic`). Back-compat: `num_workers = N` maps to `pool = { type = "static", num_workers = N }` and `"auto"` to the default elastic pool; the group-level `orchestrator.train.num_workers` / `orchestrator.eval.num_workers` are removed.
- **`orchestrator.renderer` is now required (MITO removed)**: it was `RendererConfig | None`, where `renderer = None` selected the MITO path; training is now renderer-only, so `renderer` is non-optional. Drop `renderer = None` / `renderer = "None"`.
- **`...client.timeout` / `...client.connect_timeout` removed**: the v1 rollout client manages its own timeouts. Drop these from `[orchestrator.student.client]` and `[orchestrator.teacher.client]`. (2026-06-23)
- **`orchestrator.advantage` length-penalty overhaul + length-weighted baseline**: `length_penalty` is now a single shape — a linear penalty that subtracts `coef * pass_rate * (model completion tokens / orchestrator.seq_len)` from each reward before the baseline subtraction (`pass_rate` = group mean reward, so solved-often problems get the strongest concision pressure and never-solved groups get none), with an optional `gate_by_correctness` flag (default `false`) that restricts the penalty to correct rollouts (`reward == 1`). The previous discriminated `type = "tokens" | "turns"` efficiency-shaping variants and the per-penalty `max_length` field have been removed — configure `[orchestrator.advantage.length_penalty]` with `coef` (and optionally `gate_by_correctness`) instead; the denominator is always `orchestrator.seq_len`. Also adds `orchestrator.advantage.length_weighted_baseline` (default `false`): when enabled, the GRPO baseline is the token-length-weighted mean reward (`sum(len_i * reward_i) / sum(len_i)`) instead of the plain mean. (2026-06-03)
- **`trainer.experimental.token_export` removed → `trainer.enable_token_export`**: `TrainerExperimentalConfig` and the `[trainer.experimental] token_export = true` setting have been removed with no migration alias. Existing trainer configs must delete the `[trainer.experimental]` block and set the new top-level trainer flag instead: `enable_token_export = true` in a trainer config file, or `trainer.enable_token_export = true` when nested under `[trainer]` in an RL config. The trainer entrypoint CLI flag is `--enable-token-export`. (2026-06-10)
- **`inference.kv_cache_offload.cpu_bytes` removed → discriminated `type` config**: The flat `[inference.kv_cache_offload]` block with a single `cpu_bytes` field is replaced by a backend-discriminated union with composable `cpu`/`disk` tiers. Migrate native CPU offload from `[inference.kv_cache_offload]\ncpu_bytes = N` to `[inference.kv_cache_offload]\ntype = "native"` plus `[inference.kv_cache_offload.cpu]\nnum_bytes = N`. A `type = "mooncake"` backend (per-node distributed store; multi-node/SLURM only) and an optional `[inference.kv_cache_offload.disk]\npath = "..."` tier (layered behind cpu) are also available. `extra="forbid"` rejects the old `cpu_bytes` key, so existing configs must migrate. (2026-06-02)
Expand Down
4 changes: 4 additions & 0 deletions configs/ci/integration/reverse_text_rl_sft/start.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ training_mode = "sft"
batch_size = 128
group_size = 16

# Teacher rolls out over plain chat-completions (no tokens); the renderer backfills them.
[orchestrator.renderer]
name = "qwen3"

[orchestrator.train.sampling]
max_completion_tokens = 128

Expand Down
31 changes: 0 additions & 31 deletions configs/debug/reverse_text_v1.toml

This file was deleted.

7 changes: 1 addition & 6 deletions configs/debug/training_modes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@ Minimal end-to-end configs for the three training modes (`rl` / `opd` / `sft`) a
| `opd_lora.toml` | `opd` | local vLLM (`Qwen3-0.6B-Reverse-Text-RL`) | trains a LoRA adapter (rank 8) |
| `sft.toml` | `sft` | local vLLM (`Qwen3-0.6B-Reverse-Text-RL`) | |
| `sft_lora.toml` | `sft` | local vLLM (`Qwen3-0.6B-Reverse-Text-RL`) | trains a LoRA adapter (rank 8) |
| `sft_external.toml` | `sft` | PI inference (`openai/gpt-5-mini`) | external OAI endpoint; no local teacher |

The student inference server is auto-launched on GPU 0 at `http://localhost:8000/v1` with `gpu_memory_utilization=0.5`. The local teacher (used by everything except `rl.toml` and `sft_external.toml`) is **not** auto-launched — start it manually on GPU 1.
The student inference server is auto-launched on GPU 0 at `http://localhost:8000/v1` with `gpu_memory_utilization=0.5`. The local teacher (used by everything except `rl.toml`) is **not** auto-launched — start it manually on GPU 1.

## Start the local teacher

Expand All @@ -38,10 +37,6 @@ uv run rl @ configs/debug/training_modes/opd_lora.toml
# SFT hard distill (needs teacher on port 8001)
uv run rl @ configs/debug/training_modes/sft.toml
uv run rl @ configs/debug/training_modes/sft_lora.toml

# SFT hard distill from openai/gpt-5-mini via PI inference
# (requires PRIME_API_KEY + PRIME_TEAM_ID in env; no local teacher needed)
uv run rl @ configs/debug/training_modes/sft_external.toml
```

See [docs/training.md](../../docs/training.md#training-modes-rl--opd--sft-via-orchestrator) for what each mode does.
4 changes: 4 additions & 0 deletions configs/debug/training_modes/sft.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ training_mode = "sft"
batch_size = 128
group_size = 4

# Teacher rolls out over plain chat-completions (no tokens); the renderer backfills them.
[orchestrator.renderer]
name = "qwen3"

[orchestrator.train.sampling]
max_completion_tokens = 128

Expand Down
55 changes: 0 additions & 55 deletions configs/debug/training_modes/sft_external.toml

This file was deleted.

4 changes: 4 additions & 0 deletions configs/debug/training_modes/sft_lora.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ training_mode = "sft"
batch_size = 128
group_size = 4

# Teacher rolls out over plain chat-completions (no tokens); the renderer backfills them.
[orchestrator.renderer]
name = "qwen3"

[orchestrator.train.sampling]
max_completion_tokens = 128

Expand Down
42 changes: 42 additions & 0 deletions configs/debug/v1/alphabet_sort.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# v1 port of examples/alphabet_sort/rl.toml — identical except the env block, which loads
# the v1 `alphabet-sort-v1` taskset (multi-turn via a colocated vf.User) instead of the v0
# `primeintellect/alphabet-sort` env. Harness runs on the subprocess runtime.

max_steps = 200
seq_len = 2048

[ckpt] # Checkpoint at the end of training

[model]
name = "Qwen/Qwen3-4B-Instruct-2507"

[wandb]
project = "alphabet-sort"
name = "alphabet-sort"

[trainer.model]
impl = "auto"

[trainer.model.ac]
freq = 1

[trainer.model.lora]
rank = 32
alpha = 64

[trainer.optim]
lr = 1e-5

[orchestrator]
batch_size = 512
group_size = 8

[orchestrator.train.sampling]
max_completion_tokens = 768

[[orchestrator.train.env]]
name = "alphabet-sort"
taskset = { id = "alphabet-sort-v1", min_turns = 3, max_turns = 5, power_per_turn = false }
harness = { id = "default", runtime = { type = "subprocess" } }

[inference] # Default inference config
55 changes: 55 additions & 0 deletions configs/debug/v1/general_agent.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Debug v1 RL run: the v1 `general-agent-v1` taskset (GeneralAgentSolverTaskset) driven by the
# default harness, with the agent and its tool server colocated in a modal sandbox. Copied from
# configs/general_agent/rl_qwen3_4b.toml and rewired for v1 (taskset + harness + renderer; the
# v0 `id = "general-agent-solver-rlm"` env becomes the v1 taskset + a separate harness).

max_steps = 200
seq_len = 32768

[deployment]
num_train_gpus = 4
num_infer_gpus = 4

[wandb]
project = "general-agent-debug"
name = "qwen3-4b-v1"

[ckpt]
interval = 100
keep_last = 1

[model]
name = "Qwen/Qwen3-4B-Instruct-2507"

[trainer]

[trainer.model]
cp = 2

[trainer.model.ac]
freq = 1

[trainer.model.compile]

[orchestrator]
training_mode = "rl"
batch_size = 256
rollouts_per_example = 8
max_off_policy_steps = 32

[orchestrator.renderer]
name = "qwen3"

[[orchestrator.train.env]]
# v1 general-agent solver taskset; the tool server is colocated in the harness's modal sandbox.
taskset = { id = "general-agent-v1", tools = { colocated = true } }
harness = { id = "default", runtime = { type = "modal" } }

[inference]
gpu_memory_utilization = 0.85

[inference.model]
max_model_len = 32768

[inference.parallel]
dp = 4
42 changes: 42 additions & 0 deletions configs/debug/v1/gsm8k.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# GSM8K (v1) — the v1 port of configs/gsm8k/rl.toml. Trains Qwen3-0.6B on GSM8K through the
# v1 env server: the orchestrator spawns a v1 EnvServer for the gsm8k-v1 taskset and trains on
# the returned Traces. Runs on 2 GPUs (1 inference, 1 training):
# uv run inference --model.name PrimeIntellect/Qwen3-0.6B # Inference pane (GPU 0)
# uv run rl @ configs/debug/v1/gsm8k.toml --ckpt # Trainer pane (GPU 1)

max_steps = 100
seq_len = 2048

[wandb]
project = "gsm8k-debug"
name = "gsm8k-v1"

[model]
name = "Qwen/Qwen3-0.6B"

[orchestrator]
training_mode = "rl"
batch_size = 512
group_size = 16

[orchestrator.train.sampling]
max_completion_tokens = 2048

[[orchestrator.train.env]]
taskset = { id = "gsm8k-v1", split = "train" }
harness = { id = "default", runtime = { type = "subprocess" } }

[orchestrator.eval]
interval = 20
num_examples = 256

[orchestrator.eval.sampling]
max_completion_tokens = 2048

[[orchestrator.eval.env]]
taskset = { id = "gsm8k-v1", split = "test" }
harness = { id = "default", runtime = { type = "subprocess" } }

[trainer] # Default trainer config

[inference] # Default inference config
55 changes: 55 additions & 0 deletions configs/debug/v1/hendrycks_sanity.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# v1 analog of examples/hendrycks_sanity/rl.toml — identical config with only
# the env sections swapped to v1 taskset/harness syntax (math-env taskset,
# default harness, modal runtime). Submits to slurm by default; pass --no-slurm
# to run locally.

output_dir = "/beegfs/mika/hendrycks-sanity-v1"
max_steps = 200

[wandb]
project = "hendrycks-sanity"
name = "v1"

[deployment]
num_train_gpus = 4
num_infer_gpus = 4

[slurm]
job_name = "hendrycks-modal"
partition = "all"

[model]
name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"

[orchestrator]
batch_size = 512
group_size = 8
seq_len = 8192
max_inflight_rollouts = 256

[[orchestrator.train.env]]
name = "hendrycks-math"
taskset = { id = "math-env-v1", dataset_name = "mikasenghaas/Sanity-Test-R1D-1.5B", dataset_subset = "default" }
harness = { id = "default", runtime = { type = "modal" } }
timeout = { scoring = 300 }

[orchestrator.eval]
interval = 50

[[orchestrator.eval.env]]
name = "aime2024"
taskset = { id = "aime24-v1" }
harness = { id = "default", runtime = { type = "modal" } }
timeout = { scoring = 300 }
group_size = 32

[trainer.model]
seq_len = 16384

[inference.model]
max_model_len = 8192

# Model not in MODEL_RENDERER_MAP — opt into DefaultRenderer (apply_chat_template).
[orchestrator.renderer]
name = "default"
reasoning_parser = "think"
Loading
Loading