Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
476 commits
Select commit Hold shift + click to select a range
46f26ce
chore: move env packages to dedicated envs extras group (#1993)
mikasenghaas Mar 9, 2026
2041d93
feat: fused linear cross-entropy loss for SFT (#1958)
samsja Mar 9, 2026
bcb504b
chore: add Claude Code review GitHub Action (#2000)
samsja Mar 9, 2026
8eecadc
fix: use pydantic-config dict coercion instead of local workaround (#…
samsja Mar 9, 2026
3639f0a
fix _tied_weights_keys for transformers v5 compat (#1998)
JannikSt Mar 9, 2026
7994d6c
fix: filter empty trajectory rollouts in scheduler (#2003)
mikasenghaas Mar 10, 2026
aa432f2
fix: patch HF tokenizer 'Already borrowed' crash under concurrent loa…
hallerite Mar 10, 2026
447cafe
Add SFT validation eval with val_data (#1850)
philippnormann Mar 10, 2026
00778b5
feat: disk-backed image offloading for VLM memory (#2006)
cdreetz Mar 10, 2026
93cd1fa
feature: switch fused lm head to sequence chunking (#1987)
samsja Mar 10, 2026
51bd1ad
disinguish `is_truncated` and log `stop_condition`s (#2009)
rasdani Mar 10, 2026
fa95af1
Revert "chore: add Claude Code review GitHub Action (#2000)" (#2015)
hallerite Mar 11, 2026
00a4752
fix: re-schedule empty trajectories instead of filtering after group …
mikasenghaas Mar 11, 2026
a7db217
feat: per-env metrics logging (#1989)
mikasenghaas Mar 11, 2026
051c8ba
feat: allow num_infer_nodes=0 with fake data in multi-node SLURM RL (…
samsja Mar 11, 2026
74a13f0
add zero grad tracking (#1966)
faresobeid Mar 11, 2026
51fcbae
fix: re-schedule errored rollouts (#2016)
mikasenghaas Mar 11, 2026
be9f9f8
add monkeypatch for qwen3.5 lora (#2019)
hallerite Mar 11, 2026
9b2fb9a
feat: save checkpoints and weights to separate path (#2018)
rasdani Mar 11, 2026
2759143
make httpx connect timout configurable (#2017)
rasdani Mar 11, 2026
cab621f
fix: improve rollout error logging and normalize error/empty metrics …
mikasenghaas Mar 12, 2026
67de232
fix: avoid duplicate policy updates during scheduler cancellation (#2…
samsja Mar 12, 2026
7694668
add Qwen 3.5 MoE model support with EP and VLM weight broadcast (#2026)
hallerite Mar 13, 2026
8fa0dde
feat: make max_retries configurable per training env (#2025)
mikasenghaas Mar 13, 2026
33d266b
fix: patch sharded LoRA slice_lora_a for Qwen3.5 MoE (#2027)
hallerite Mar 13, 2026
6c55a9a
make the loss equal weight per unmaked token (#1961)
sapiosaturn Mar 16, 2026
7e06730
fix: use token-level loss normalization for all loss types (#2034)
mikasenghaas Mar 17, 2026
eba667d
bump verifiers (#2036)
rasdani Mar 17, 2026
d1c36af
fix: handle DTensor weights in MultiLoRAGroupedExperts for EP (#2035)
hallerite Mar 18, 2026
bd110a1
fix: cleanup env subprocesses on orchestrator crash (#2028)
JannikSt Mar 18, 2026
f7192e1
Add sample_ratio to LogExtrasConfig for gradual rollout data control …
shayonj Mar 18, 2026
0f236d3
shared wandb mode (#2044)
mikasenghaas Mar 18, 2026
f399e26
add weights-only checkpointing (#2033)
hallerite Mar 18, 2026
c1bbbf9
add Group Relative Reward Rescaling as length penalty (#2029)
rasdani Mar 19, 2026
1f6de8f
chore: bump verifiers to 1960e77 (#2051)
mikasenghaas Mar 19, 2026
47f6bb8
fix: remove misleading orchestrator throughput metric (#2048)
samsja Mar 19, 2026
58f4b37
Add router_url support for elastic inference pool (#2049)
JannikSt Mar 20, 2026
3dcff28
fix: use mean().mean() for console metrics to match wandb (#2056)
mikasenghaas Mar 20, 2026
d5c7240
Feature: Add platform integration. (#1896)
d42me Mar 20, 2026
fc6fd48
Fix: typo in comment for sample_ratio (#2058)
shayonj Mar 20, 2026
4875c10
Add SFT LoRA support (#1849)
philippnormann Mar 21, 2026
1bc1021
validate VLM dtype in configs (#2060)
rasdani Mar 21, 2026
bb4c23b
breakdown difficulty pool metrics per env (#2070)
rasdani Mar 21, 2026
40da51a
SFT distillation: bug fixes, VLM support, and pretokenization optimiz…
eligotts Mar 22, 2026
3dd48be
feat: integrate FP8 weight transfer format (#2038)
S1ro1 Mar 22, 2026
9c25ce2
feat: GPT-OSS support with LoRA + DP fixes (#2073)
eligotts Mar 23, 2026
7e85319
fix: scheduler test fixture drift after `enable_policy_updates` (#2078)
rasdani Mar 23, 2026
7ef29a7
feat: accept `messages` column for SFT (#2074)
rasdani Mar 23, 2026
19511dc
fix: don't constrain VLM dtype for SFT (#2079)
rasdani Mar 24, 2026
d803065
feat: add explicit vlm config flag for VLM detection (#2063)
hallerite Mar 24, 2026
60f01a0
Feat: skip optimizer load (#2087)
S1ro1 Mar 24, 2026
f414d9a
fix: handle eval rollout failures without crashing the orchestrator (…
mikasenghaas Mar 24, 2026
c2dfc33
feat: add NemotronH (Nemotron-3-Super-120B-A12B) model support (#2046)
samsja Mar 24, 2026
53a8b45
feat: hybrid CP for Qwen3.5 MoE (DeltaNet + attention) (#2080)
samsja Mar 24, 2026
2ddb1c8
feat: add NemotronH models to tool call parser map (#2089)
samsja Mar 24, 2026
692dfc8
fix mamba-ssm build by using CUDA torch in build env (#2091)
JannikSt Mar 25, 2026
a25b3e7
Enable none in config (#2093)
S1ro1 Mar 25, 2026
4f61260
Fix/none in list (#2094)
S1ro1 Mar 25, 2026
e7adec3
Revert exclude none (#2095)
S1ro1 Mar 25, 2026
b7afd84
perf: run VLM image preprocessing in thread to unblock event loop (#2…
hallerite Mar 25, 2026
27c35b1
fix: hybrid CP for Qwen3.5 MoE (DeltaNet + attention) (#2097)
rasdani Mar 25, 2026
381733e
fix: terminate process on fatal orchestrator error (#2092)
JannikSt Mar 25, 2026
ecd0809
feat: disaggregated prefill-decode inference with multi-replica suppo…
samsja Mar 25, 2026
c2b99e6
refactor: use `AutoModelForImageTextToText` to configure VLMs (#2098)
rasdani Mar 25, 2026
b92c212
Feat: add weigh transfer fix (#2099)
S1ro1 Mar 25, 2026
f725629
fix: mito rl training (#2100)
mikasenghaas Mar 25, 2026
801995a
fix: skip vllm-router on arm64 (x86_64-only wheel) (#2103)
JannikSt Mar 25, 2026
14c0a02
feat: multi env worker (#2083)
mikasenghaas Mar 25, 2026
1203438
fix: default env server num_workers to 1 instead of erroring on auto …
mikasenghaas Mar 25, 2026
80a5289
fix: exclude disagg extras from image build (requires CUDA 13) (#2108)
JannikSt Mar 26, 2026
effa509
remove tp trainer option (#2109)
faresobeid Mar 26, 2026
d7afbaa
Selective activation checkpointing (#2055)
faresobeid Mar 26, 2026
8a6f4ef
use quack for rms norm and sft loss (#2102)
faresobeid Mar 26, 2026
6cae5cc
fix: Nemotron-H Mamba layer dimension mismatch for non-120B models (#…
faresobeid Mar 26, 2026
dec92c1
fix: add weights_only=False to torch.load for checkpoint resume (#2112)
JannikSt Mar 27, 2026
714d0ea
comment out patch (#2114)
Jackmin801 Mar 28, 2026
18594ab
add `eval/samples` table (#2124)
rasdani Mar 30, 2026
f090c3e
feat: log `eval/{env}/failed_rollouts` metric to W&B (#2123)
rasdani Mar 30, 2026
907f301
fix: remove flaky grad norm check from test_nemotron_h (#2129)
samsja Mar 30, 2026
63331ad
revamp docs and readme (#2116)
samsja Mar 30, 2026
44c4f4d
Feat: lower to info for router (#2133)
samsja Mar 30, 2026
23e3791
tmp: consistent hash (#2134)
samsja Mar 30, 2026
07411f3
fix: log chat templated messages to `eval/samples` Table (#2143)
rasdani Mar 31, 2026
a30d417
Add new selective AC targets (#2120)
faresobeid Mar 31, 2026
5a68acc
chore: overhaul skills and clean up AGENTS.md (#2149)
mikasenghaas Mar 31, 2026
846f18a
feat: deterministic GC to avoid distributed stragglers (#2145)
samsja Mar 31, 2026
21e6b54
Feat: multi replica support (#2137)
S1ro1 Mar 31, 2026
377b15a
Log full rollout batches to monitoring backends (#2118)
d42me Mar 31, 2026
1f3e539
chore: pr guidelines for agents (#2151)
mikasenghaas Mar 31, 2026
fd0f4fd
chore: bump verifiers to e305f64 (#2135)
samsja Mar 31, 2026
1692a67
chore: unify log directories (#2150)
mikasenghaas Mar 31, 2026
2a7bf99
deepEP (#2119)
faresobeid Mar 31, 2026
a2ea091
vllm 0.18.0 (#2141)
faresobeid Mar 31, 2026
798fb82
feat: add signsgd memory-efficient optimizers (#2148)
samsja Mar 31, 2026
58fc060
Add watchdog to packer to detect silent hangs (#2142)
JannikSt Mar 31, 2026
e10b4de
fix: seed RNG in nemotron_h mamba_moe_only test to prevent flakiness …
mikasenghaas Mar 31, 2026
6606330
feat: make vision encoder optionally trainable (#2066)
hallerite Mar 31, 2026
8304f1e
chore: bump verifiers to 5d75d97 (#2156)
mikasenghaas Mar 31, 2026
06c54dd
feat: set process titles on all entrypoints (#2159)
mikasenghaas Apr 1, 2026
a12f5d5
fix: kill full process trees on rl cleanup (#2158)
mikasenghaas Apr 1, 2026
a0b6a91
chore: simplify tmux script windows (#2170)
samsja Apr 1, 2026
b1d37e9
Point vllm-router at PrimeIntellect-ai/router v0.1.13 (#2167)
JannikSt Apr 1, 2026
6fa776d
fix: update CI Docker image to CUDA 13.0 for deep-gemm compatibility …
mikasenghaas Apr 1, 2026
d79bd4f
Another iteration on the DP hang (#2168)
samsja Apr 1, 2026
78b0df8
fix: increase env server shutdown timeout for sandbox cleanup (#2175)
hallerite Apr 1, 2026
efade1b
Revert "vllm 0.18.0 (#2141)" (#2177)
samsja Apr 1, 2026
f4b8129
Context parallel for DSA (#2173)
samsja Apr 1, 2026
27645f3
clean up some metrics (#2163)
faresobeid Apr 1, 2026
adbf84a
feat: improve monitor-run skill (#2179)
mikasenghaas Apr 2, 2026
f24d10e
fix: always log per-task error and empty rollout metrics (even when 0…
hallerite Apr 2, 2026
ed2ad8c
add `all` optional-dependency group that combines all extras (#2184)
samsja Apr 2, 2026
bffd310
chore: bump verifiers to latest main (d3c830c) (#2186)
mikasenghaas Apr 2, 2026
1b62360
Add qwen3_vl_moe to VLM registry (#2196)
JannikSt Apr 4, 2026
839dacc
feat: bump vLLM to 0.19.0 and transformers to 5.5.0 (#2197)
hallerite Apr 6, 2026
ecf1ae2
chore: scope changelog + bugbot rule to breaking changes only (#2191)
mikasenghaas Apr 6, 2026
4b0fc35
Add max_total_completion_tokens to EnvConfig (#2206)
snimu Apr 6, 2026
09293f3
strip [default0] prefix from trainer logs (#2180)
mikasenghaas Apr 6, 2026
ff4b125
feat: update default loss to dppo+kl (#2187)
mikasenghaas Apr 6, 2026
6189e0c
fix docs (#2218)
faresobeid Apr 7, 2026
625e05f
fix: respect existing WANDB_SHARED_RUN_ID env var for run resumption …
mikasenghaas Apr 7, 2026
eed10dc
fix: auto-infer DP and fix inference_world_size for multi-node NCCL b…
hallerite Apr 7, 2026
04da032
fix: set api_server_count to match DP for single-node NCCL broadcast …
hallerite Apr 7, 2026
355956e
fix: reclaim GPU memory after checkpoint load with CPU optimizer offl…
samsja Apr 7, 2026
2648c19
fix: restore multi-API-server monkey patch for custom routes (#2228)
hallerite Apr 8, 2026
29a9a1c
VLLM 0.19.0 GLM5 + dbo + cpu kv cache offloading (#2225)
S1ro1 Apr 8, 2026
0216d2c
Bound orchestrator post-training cleanup with hard timeout (#2229)
JannikSt Apr 8, 2026
8b3faf4
Add training token usage reporting (#2210)
JannikSt Apr 8, 2026
43ba157
Bound admin client timeouts so a stuck inference server cannot wedge …
JannikSt Apr 8, 2026
6fba6cb
feat: make gradient clipping optional, error with DeepEP (#2214)
samsja Apr 9, 2026
d7770a6
[feat] attn only lora (#2233)
Jackmin801 Apr 9, 2026
faa0b56
update deps (#2234)
samsja Apr 9, 2026
d4f10c5
fix: auto-disable NCCL P2P/SHM transports when NVLink is unavailable
mikasenghaas Apr 9, 2026
44c3ee3
fix: add nvidia-ml-py dep and improve NCCL P2P warning message
mikasenghaas Apr 9, 2026
02d6487
fix: skip NCCL P2P warning when env vars are already set
mikasenghaas Apr 9, 2026
f0485ff
feat: clean stale artifacts on resume (#2219)
mikasenghaas Apr 9, 2026
7e456ac
fix: use device index for NCCL worker rank instead of dp_group (#2237)
hallerite Apr 9, 2026
1a1a396
chore: refactor env groups + a bunch of deprecations (#2193)
mikasenghaas Apr 9, 2026
f07543e
fix: unwrap list pad_token_id before huggingface_hub strict setter (#…
JannikSt Apr 9, 2026
9b01fa9
fix: let validation errors propagate as 400 on token route (#2241)
mikasenghaas Apr 9, 2026
f412e6d
fix: prepend base_model.model. prefix to broadcast LoRA keys (#2242)
JannikSt Apr 10, 2026
d04d7f5
Fix/gpt oss kernels (#2201)
JohannesHa Apr 10, 2026
07eb646
feat: more per-env configs (#2238)
mikasenghaas Apr 10, 2026
9615fe7
feat: separate eval client type from training (#2247)
mikasenghaas Apr 10, 2026
11880ce
fix: handle chat template errors in eval sample logging (#2198)
eligotts Apr 10, 2026
fd1a68d
Make matmul_precision configurable in trainer config (#2235)
dzautner Apr 10, 2026
b194a6e
feat: save train and eval rollouts in verifiers format (#2248)
mikasenghaas Apr 10, 2026
7bba60f
feat: zero advantage filtering (#2192)
samsja Apr 10, 2026
2d577a4
fix vlm missing arg (#2021)
leopold-tzafon Apr 10, 2026
833920a
feat: make vllm-router policy configurable (#2255)
mikasenghaas Apr 11, 2026
37cfd0c
feat: support file paths for chat_template config (#2258)
hallerite Apr 12, 2026
b6a920f
allow setting log level from env var (#2260)
Jackmin801 Apr 12, 2026
40bcabb
fix: skip samples with unstable incremental tokenization (#2261)
hallerite Apr 13, 2026
6fa4296
feat: shared tokenizer config and chat_template support for RL (#2264)
mikasenghaas Apr 13, 2026
c857876
feat: VLLM QoL - new A2A backends, KV cache offloading, DBO, cleanup …
S1ro1 Apr 13, 2026
f8a1460
feat: correctness-gated efficiency length shaping (#2265)
hallerite Apr 13, 2026
fa63a5a
bump vllm-router to 0.1.20 (#2269)
JannikSt Apr 13, 2026
8c1e650
Add experimental subconfig to user-facing configs (#2272)
samsja Apr 14, 2026
f2e97b2
feat: collect per-engine inference server metrics (#2257)
samsja Apr 14, 2026
bc34bae
feat: add GLM-5.1 to tool call parser auto-detection (#2275)
samsja Apr 14, 2026
3cd6332
feat: add config to disable prefix cache reset after weight updates (…
samsja Apr 14, 2026
52b1ae1
[fix] add gpt-oss extra to Dockerfile uv sync and fix meta buffers (#…
Jackmin801 Apr 15, 2026
67783e4
chore: drop trajectory from saved rollout JSONL files (#2281)
mikasenghaas Apr 15, 2026
fde3006
Add env_install_prerelease config option (#2279)
rasdani Apr 15, 2026
8c5aa67
fix 2.5 -> qwen (#2286)
samsja Apr 15, 2026
ad3134a
fix 32-> 30 (#2287)
samsja Apr 15, 2026
4dcf86f
feat: set tool_call_parser default to 'auto' (#2285)
samsja Apr 16, 2026
56cdd2c
feat: pre-download model weights in launcher (#2282)
mikasenghaas Apr 16, 2026
2d659ee
feat: context parallelism for NemotronH Mamba layers (#2231)
hallerite Apr 16, 2026
ba86b9b
Support runtime verifiers version override (#2274)
JannikSt Apr 16, 2026
3a6b461
fix: always ensure X-Session-ID and propagate extra_headers_from_stat…
samsja Apr 16, 2026
2c54d5c
Feat: fix cpu offloading patch to match upstream and remove a segfaul…
S1ro1 Apr 17, 2026
18e8956
accept fully-qualified expert names in lora check (#2301)
JannikSt Apr 17, 2026
586e0f8
fix: work around transformers lazy_load_kernel offline regression (#2…
hallerite Apr 17, 2026
6bf14b8
vf bump (#2302)
samsja Apr 17, 2026
d4bddba
fix: clean stale rollouts and broadcasts on fresh runs (#2304)
mikasenghaas Apr 17, 2026
26ea8df
chore: bump vllm-router to v0.1.22 (#2292)
mikasenghaas Apr 17, 2026
1ade129
fix: check rollout error before empty trajectory in scheduler (#2308)
rasdani Apr 17, 2026
82fa41f
fix: serialize env server spawn to avoid port race (#2310)
samsja Apr 17, 2026
bb7449c
Add FA4 (flash_attn.cute) support to ring attention, enabling context…
jupiterepoch Apr 18, 2026
f29e947
Fix Prime monitor public API flow (#2205)
d42me Apr 18, 2026
03689b8
chore: remove prefix-cache-salt and reset-prefix-cache config flags (…
samsja Apr 18, 2026
9eeffdb
feat: drop filtered rollouts instead of masking (#2277)
mikasenghaas Apr 18, 2026
d49f393
update dependency (#2317)
samsja Apr 18, 2026
d2718f5
chore: rename deprecated orchestrator config keys (#2327)
mikasenghaas Apr 19, 2026
c3a24c3
feat(slurm): cleanup stale node-local state before launch (#2331)
mikasenghaas Apr 19, 2026
e8abfa2
chore: add conservative testing guidelines to AGENTS.md (#2330)
samsja Apr 20, 2026
a6a6441
fix(ci): bump nightly test container /dev/shm to 16g (#2339)
hallerite Apr 22, 2026
9bbed30
[Fix] nemotron fixes (#2338)
Jackmin801 Apr 22, 2026
f1bbdf9
missed patch for nemotron state dict (#2340)
Jackmin801 Apr 23, 2026
b0a7cad
[fix] patch gdn with varlen for qwen (#2346)
Jackmin801 Apr 23, 2026
4a42aa0
fix(trainer): wait for NCCL_READY on all ranks before broadcast (#2337)
mikasenghaas Apr 23, 2026
20454ec
fix(ring_attn): adapt FA3 varlen wrappers to flash_attn_3 3.0.0 kwarg…
hallerite Apr 24, 2026
8342ccd
feat: add entity, group, and tags to wandb config (#2350)
warner-benjamin Apr 25, 2026
24a2af0
patch warnings and turn off 3d for qwen (#2356)
Jackmin801 Apr 26, 2026
0fca0d1
fix(models): document cache_position to silence auto_docstring warnin…
hallerite Apr 27, 2026
2566de0
chore: bump prime to >=0.5.73 (#2367)
mikasenghaas Apr 27, 2026
d2f36c9
feat: per-batch loss type override for hosted SFT hard distill (#2271)
eligotts Apr 27, 2026
273524e
chore: remove async level from orch step log (#2361)
samsja Apr 27, 2026
8457b60
[Fix] gpt oss (#2365)
Jackmin801 Apr 27, 2026
4e4390b
feat: debug.force_balanced_routing for MoE smoke tests (#2368)
mikasenghaas Apr 28, 2026
93cbc75
feat(orchestrator): make inference pool startup timeout configurable …
JohannesHa Apr 28, 2026
3719abc
feat: rollout timeout config + verifiers 0.1.13.dev8 (#2371)
mikasenghaas Apr 28, 2026
daedc1d
fix(orchestrator): scope example_id by env_name to prevent cross-env …
mikasenghaas Apr 28, 2026
e75d8ca
GlmMoeDsa - better CP implementation (#2372)
S1ro1 Apr 28, 2026
a8575d6
fix(orchestrator): bound monitor history and drop duplicate samples l…
samsja Apr 28, 2026
5061b8d
up fa4 version (#2369)
Jackmin801 Apr 29, 2026
a87badd
feat(inference): vllm engine liveness probe (#2375)
eexwhyzee Apr 29, 2026
af17a55
fix(qwen3.5-moe): align _compute_attention with FA4 kwarg-based cu_se…
Jackmin801 Apr 29, 2026
b1e9c7b
feat(trainer): add single-point TPS/MFU API for RL (#2376)
samsja Apr 30, 2026
c37e2ca
feat(orchestrator): bump verifiers to 3b77145, log per-turn timings (…
mikasenghaas Apr 30, 2026
ca5e02c
fix(monitor): retry wandb.init on transient CommError + bump wandb (#…
mikasenghaas Apr 30, 2026
0b8c35e
feat: per-model client-side renderers for RL rollouts (+ /v1/generate…
hallerite Apr 30, 2026
0403c09
flash-attn-cute -> flash-attn-4 (#2381)
eexwhyzee Apr 30, 2026
a50b407
chore: add 7-day supply chain cooldown via exclude-newer (#2382)
hallerite May 1, 2026
d8d214c
chore(agents): require keeping PR descriptions in sync with pushes (#…
samsja May 1, 2026
7d7bd92
Fix CP-local cu_seqlens from position ids (#2392)
rasdani May 2, 2026
5e6f7eb
feat(advantage): add num_turns option to efficiency shaping (#2384)
samsja May 2, 2026
2ff21d9
chore(agents): forbid editing .venv/ (#2400)
samsja May 3, 2026
0660a9b
Pin Triton JIT cache to node-local /tmp per job (#2305)
rasdani May 3, 2026
4be61bb
chore(deps): host disagg wheels on prime-rl release instead of samsja…
hallerite May 4, 2026
0deb4ab
fix(ring_attn): make FA3 causal/window_size kwargs version-agnostic (…
samsja May 5, 2026
31591b7
docker: drop deadsnakes in build stage (#2421)
eexwhyzee May 5, 2026
f7a27f6
fix(sft): don't divide reported throughput by cp (#2424)
samsja May 6, 2026
bcac552
chore: bump vllm 0.20.1 + migrate cu128 → cu130 (#2403)
hallerite May 6, 2026
edf4111
Revert "chore: bump vllm 0.20.1 + migrate cu128 → cu130 (#2403)" (#2426)
Jackmin801 May 6, 2026
d62c753
feat: split prime-rl-configs into separate workspace package (#2416)
samsja May 6, 2026
38b5249
fix(configs): use FutureWarning so config deprecations are visible (#…
samsja May 6, 2026
3b01ce9
bump vllm version (#2427)
Jackmin801 May 6, 2026
1e9a3e9
fix: exit early for unsupported platforms on `install.sh` (#2431)
eexwhyzee May 6, 2026
229391f
Feat: deep-gemm-fp8 (#2166)
S1ro1 May 6, 2026
d7b3ae2
feat: agentic length-penalty ablations — weighted shaping over tool-r…
hallerite May 6, 2026
95af011
feat(cp): add ulysses all-to-all CP path alongside ring (#2418)
samsja May 6, 2026
bb522cc
Revert "bump vllm version (#2427)" (#2437)
samsja May 8, 2026
c0d896f
fix(gpt-oss): document `temperature` arg in `GptOssForCausalLM.forwar…
samsja May 8, 2026
5f2c004
feat(inference): fp32 lm_head via native bf16xbf16 -> fp32 mm (#2441)
samsja May 8, 2026
7da26cd
fix(trainer): escape dots in FP8 ignore patterns (#2442)
samsja May 8, 2026
09e403b
Revert "Revert "bump vllm version (#2427)" (#2437)" (#2448)
samsja May 8, 2026
84ccb95
fix(inference): make liveness timeout configurable with a 30s default…
eexwhyzee May 8, 2026
0fe673c
pin vllm down to cu129 (#2450)
Jackmin801 May 9, 2026
7b7bde1
drop ampere in fa4 (#2452)
Jackmin801 May 9, 2026
2171368
[FP8]: Upcast addresses to int64 to avoid overflow (#2453)
S1ro1 May 9, 2026
efb874b
[Inference]: vLLM 20 + Prod Run compat (#2456)
S1ro1 May 9, 2026
429c1bb
Nit: pass hybrid lb for non-pd DP case (#2455)
S1ro1 May 9, 2026
a252057
[Weight Transfer]: Support quantize_in_weight_transfer + EPLB (#2454)
S1ro1 May 9, 2026
c9a4b3b
Feat: kv offload for non-PD (#2457)
S1ro1 May 9, 2026
d11fc90
Fix: third_party to .gitignore (#2463)
S1ro1 May 9, 2026
319af10
Fix: add layerwise as default (#2467)
S1ro1 May 10, 2026
469a4e6
chore: bump vllm to 0.20.2 (#2468)
hallerite May 10, 2026
7c434ec
feat: unify renderer + teacher endpoints onto vLLM 0.20 /inference/v1…
hallerite May 11, 2026
505e033
Convert pyproject.toml from CUDA to ROCm dependencies
May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .claude/skills
16 changes: 11 additions & 5 deletions .cursor/BUGBOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,16 @@

## Changelog Enforcement

Any PR that modifies configuration structures or usage patterns must update `CHANGELOG.md`. This includes changes to config fields (added, removed, renamed, moved, or default value changes) in:
Any PR that introduces **breaking** configuration changes must update `CHANGELOG.md`. Breaking changes are those that require users to update existing configs:

- `src/prime_rl/*/config.py`
- `src/prime_rl/rl.py`
- `src/prime_rl/utils/config.py`
- **Renamed** config fields (old name no longer accepted)
- **Removed** config fields (field deleted or moved to a different path)
- **Moved** config fields (field relocated in the config hierarchy)

If such changes are detected without a corresponding `CHANGELOG.md` update, request that the author add an entry.
Additive changes (new fields with defaults, new optional features) and default value changes do **not** require a changelog entry.

Config files live in:

- `src/prime_rl/configs/`

If breaking changes are detected without a corresponding `CHANGELOG.md` update, request that the author add an entry.
68 changes: 46 additions & 22 deletions .github/workflows/cpu_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,34 +39,58 @@ jobs:
- name: Cleanup output_dir
run: rm -rf /tmp/outputs

integration-tests:
name: Integration tests
slim-configs-install:
name: Slim install (prime-rl-configs only)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: true
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
- name: Install dependencies
run: uv sync --all-extras --locked
- name: Run tests
env:
USERNAME_CI: CI_RUNNER
WANDB_API_KEY: ${{ secrets.WANDB_API_KEY }}
# Set WANDB_MODE to online only if WANDB_API_KEY is available, otherwise set to offline
# This is to allow running tests on forks without WANDB_API_KEY
WANDB_MODE: ${{ secrets.WANDB_API_KEY && 'online' || 'offline' }}
HF_TOKEN: ${{ secrets.HF_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
PRIME_API_KEY: ${{ secrets.PRIME_API_KEY }}
GITHUB_REF_NAME: ${{ github.ref_name }}
GITHUB_HEAD_REF: ${{ github.head_ref }}
PYTEST_OUTPUT_DIR: /tmp/outputs
run: PYTEST_OUTPUT_DIR=/tmp/outputs uv run pytest tests/integration -m "not gpu"
- name: Cleanup output_dir
run: rm -rf /tmp/outputs
- name: Build the slim wheel
run: uv build --wheel ./packages/prime-rl-configs --out-dir /tmp/slim-wheel
- name: Install slim wheel from a directory with no workspace context
# Build the wheel and install it from /tmp so uv can't discover the
# repo's root pyproject.toml [tool.uv.sources] and silently apply
# them. This mirrors what an external pip-only user gets.
run: |
uv venv --python 3.12 /tmp/slim
cd /tmp && uv pip install --python /tmp/slim/bin/python /tmp/slim-wheel/*.whl
- name: Verify configs import without heavy deps
run: |
/tmp/slim/bin/python - <<'PY'
import sys

from prime_rl.configs.rl import RLConfig
from prime_rl.configs.sft import SFTConfig
from prime_rl.configs.inference import InferenceConfig
from prime_rl.configs.orchestrator import OrchestratorConfig
from prime_rl.configs.trainer import TrainerConfig
from prime_rl.configs.env_server import EnvServerConfig
from prime_rl.utils.config import BaseConfig, find_package_resource, rgetattr, rsetattr
from prime_rl.utils.validation import validate_shared_ckpt_config

forbidden = ["torch", "transformers", "vllm", "wandb", "ring_flash_attn",
"verifiers", "prime", "datasets", "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}")

# Slim wheel does not ship the templates/ data dir; resolver returns None.
assert find_package_resource("templates") is None, "templates should not be in slim wheel"
print("slim install OK — configs import with no heavy deps loaded")
PY
- name: Verify a real config (with [slurm]) parses on slim install
run: |
/tmp/slim/bin/python - <<'PY'
from pydantic_config import cli
from prime_rl.configs.rl import RLConfig
rl = cli(RLConfig, args=["@", "examples/Intellect-3.1/rl.toml"])
assert rl.slurm is not None, "expected [slurm] in example config"
# On slim, template_path can't be auto-resolved (heavy wheel absent) — must stay None.
assert rl.slurm.template_path is None, f"unexpected template_path on slim: {rl.slurm.template_path}"
print("slim parse OK")
PY
94 changes: 94 additions & 0 deletions .github/workflows/devx_tag.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: DevX Tag

on:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false

jobs:
create-dev-tag:
name: Create .dev tag
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Create next .dev tag from latest release
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;
const sha = context.sha;

let latestTag;
try {
const latestRelease = await github.rest.repos.getLatestRelease({ owner, repo });
latestTag = latestRelease.data.tag_name;
} catch (error) {
if (error.status === 404) {
core.notice("No releases found. Skipping .dev tag creation.");
return;
}
throw error;
}

const semverMatch = /^(v?)(\d+)\.(\d+)(?:\.(\d+))?$/.exec(latestTag);
if (!semverMatch) {
core.setFailed(`Latest release tag '${latestTag}' is not semver-like.`);
return;
}

const [, versionPrefix, majorRaw, minorRaw, patchRaw] = semverMatch;
const major = Number.parseInt(majorRaw, 10);
const minor = Number.parseInt(minorRaw, 10);
const patch = Number.parseInt(patchRaw ?? "0", 10) + 1;
const baseTag = `${versionPrefix}${major}.${minor}.${patch}`;

const prefix = `${baseTag}.dev`;
const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const pattern = new RegExp(`^refs/tags/${escapeRegex(baseTag)}\\.dev(\\d+)$`);

for (let attempt = 0; attempt < 5; attempt += 1) {
const refs = await github.paginate(github.rest.git.listMatchingRefs, {
owner,
repo,
ref: `tags/${prefix}`,
});

let maxVersion = 0;
for (const ref of refs) {
const match = pattern.exec(ref.ref);
if (match) {
const version = Number.parseInt(match[1], 10);
if (version > maxVersion) {
maxVersion = version;
}
}
}

const tag = `${prefix}${maxVersion + 1}`;

try {
await github.rest.git.createRef({
owner,
repo,
ref: `refs/tags/${tag}`,
sha,
});
core.notice(`Created tag ${tag} at ${sha}`);
return;
} catch (error) {
if (error.status === 422) {
core.warning(`Tag ${tag} already exists, retrying...`);
continue;
}
throw error;
}
}

core.setFailed("Could not create a unique .dev tag after retries.");
20 changes: 16 additions & 4 deletions .github/workflows/gpu_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
name: Unit tests
runs-on: vm
container:
image: pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
image: pytorch/pytorch:2.10.0-cuda13.0-cudnn9-devel
options: --gpus all
timeout-minutes: 45
if: github.event_name == 'push' || github.event.pull_request.draft == false
Expand Down Expand Up @@ -53,9 +53,9 @@ jobs:

integration-tests:
name: Integration tests (${{ matrix.test }})
runs-on: vm
runs-on: ${{ matrix.runner }}
container:
image: pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
image: pytorch/pytorch:2.10.0-cuda13.0-cudnn9-devel
options: --gpus all
timeout-minutes: 60
if: github.event_name == 'push' || github.event.pull_request.draft == false
Expand All @@ -64,11 +64,20 @@ jobs:
matrix:
include:
- test: base
pytest_args: "tests/integration -m gpu --ignore=tests/integration/test_rl_lora.py --ignore=tests/integration/test_rl_multi_run_lora.py"
runner: vm
pytest_args: "tests/integration -m gpu --ignore=tests/integration/test_rl_lora.py --ignore=tests/integration/test_rl_multi_run_lora.py --ignore=tests/integration/test_benchmark_regression.py --ignore=tests/integration/test_alphabet_sort.py"
- test: rl_lora
runner: vm
pytest_args: "tests/integration/test_rl_lora.py -m gpu"
- test: alphabet_sort
runner: vm
pytest_args: "tests/integration/test_alphabet_sort.py -m gpu"
- test: rl_multi_run
runner: 4xa6000
pytest_args: "tests/integration/test_rl_multi_run_lora.py -m gpu"
- test: benchmark_regression
runner: 4xa6000
pytest_args: "tests/integration/test_benchmark_regression.py -m gpu"
steps:
- name: Install Git
run: |
Expand Down Expand Up @@ -96,7 +105,10 @@ jobs:
HF_TOKEN: ${{ secrets.HF_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
PRIME_API_KEY: ${{ secrets.PRIME_API_KEY }}
PRIME_BASE_URL: ${{ secrets.PRIME_BASE_URL }}
PRIME_TEAM_ID: ${{ secrets.PRIME_TEAM_ID }}
GITHUB_REF_NAME: ${{ github.ref_name }}
GITHUB_HEAD_REF: ${{ github.head_ref }}
PYTEST_OUTPUT_DIR: /tmp/outputs
VLLM_WORKER_MULTIPROC_METHOD: spawn
run: uv run pytest ${{ matrix.pytest_args }}
7 changes: 5 additions & 2 deletions .github/workflows/nightly_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,11 @@ jobs:
needs: discover-experiments
runs-on: research-cluster
container:
image: pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
options: --gpus all
image: pytorch/pytorch:2.10.0-cuda13.0-cudnn9-devel
# --shm-size: vLLM V1's DP engine/API-server IPC uses POSIX shm-backed
# MessageQueue (~160MB per queue); Docker's default 64MB /dev/shm triggers
# SIGBUS in DP engine cores on VLM runs (mm data overflows tmpfs).
options: --gpus all --shm-size=16g
timeout-minutes: 1440 # 24 hours
strategy:
fail-fast: false
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/style.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,11 @@ jobs:
submodules: true
- name: Run ruff
uses: astral-sh/ruff-action@v3
with:
version: "0.13.0"
args: "check --config=pyproject.toml"
- name: Run ruff format (check)
uses: astral-sh/ruff-action@v3
with:
version: "0.13.0"
args: "format --check --config=pyproject.toml"
33 changes: 33 additions & 0 deletions .github/workflows/sync-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,39 @@ jobs:
trigger-docs-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Validate mint.json pages exist
run: |
missing=()
pages=$(python3 -c "
import json, sys
data = json.load(open('docs/mint.json'))
pages = []
def collect(obj):
if isinstance(obj, list):
for item in obj: collect(item)
elif isinstance(obj, dict):
if 'pages' in obj: collect(obj['pages'])
if 'groups' in obj: collect(obj['groups'])
elif isinstance(obj, str):
pages.append(obj)
collect(data.get('navigation', []))
print('\n'.join(pages))
")
while IFS= read -r page; do
[ -z "$page" ] && continue
if [ ! -f "docs/${page}.md" ] && [ ! -f "docs/${page}.mdx" ]; then
missing+=("${page}")
fi
done <<< "$pages"
if [ ${#missing[@]} -gt 0 ]; then
echo "ERROR: The following pages listed in mint.json do not exist in docs/:"
printf ' - %s\n' "${missing[@]}"
exit 1
fi
echo "All mint.json pages verified."

- name: Trigger public-docs workflow
uses: peter-evans/repository-dispatch@v3
with:
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ configs/endpoints.py

# Artifacts
**/slurm
!src/prime_rl/slurm
!examples/slurm
!docs/slurm.md
**/torchrun
**/weights
**/checkpoints
Expand Down Expand Up @@ -196,3 +199,5 @@ debug_I2_zero_band
.idea

outputs/

third_party/
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.9.3
rev: v0.13.0
hooks:
# Run the linter.
- id: ruff
- id: ruff-check
args: [ --fix, --config=pyproject.toml ]
# Run the formatter.
- id: ruff-format
Expand Down
Loading
Loading