Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
38168d5
[XPU] [Feature] Adding triton/sycl GDN toggle (#56835)
iboiko-habana Oct 19, 2026
dec6dda
[CPU] Optimize routed INT8 W8A8 MoE GEMM dispatch (#60740)
tianmu-li Oct 19, 2026
1aa5b6d
[BugFix][MyPy] Guard Linux-only mmap/fadvise calls with sys.platform …
wentian-byte Oct 19, 2026
93de77c
[CPU] Fix underflow in FP8 AMX attention (#61329)
tianmu-li Oct 19, 2026
573f2f9
[Frontend] Raise VLLMValidationError for an unknown Harmony channel i…
longluubao Oct 19, 2026
b9c48c9
[Fast Start] support ep (#55490)
liusy58 Oct 19, 2026
3c8245b
[Bugfix][Frontend] Align DeepSeek V4.1 images with rendered content (…
xijiaat Oct 19, 2026
3788269
[Benchmark][XPU] Support XPU in forward bench graph capture/profiling…
chaojun-zhang Oct 19, 2026
42472f9
[CPU][Bugfix] Flatten >2-D activations in the AMX int8 W8A8 linear pa…
harshaladhav-amd Oct 19, 2026
e7023e5
[Bugfix][ROCm][MoRIIO] Support heterogeneous TP in WRITE mode for all…
junkang1991 Oct 19, 2026
d5b3669
[Core] Reject new requests while generation is paused (#51488)
aoshen02 Oct 19, 2026
6af1e0a
[Bugfix][Frontend] Honor --enable-log-outputs on /v1/completions (#62…
surajm20061998 Oct 19, 2026
fc47cc8
[Feature][PCP] Support APC and encoder-side SWA bounded replay for De…
wangyicong52 Oct 19, 2026
10e8e92
[Bugfix][Frontend] Fix auto truncation without an output token limit …
bzsuni Oct 19, 2026
c1dc2e9
[Spec Decode][ROCm] Add FLy: entropy-gated deferred verification for …
eecspan Oct 19, 2026
018f5ff
[Perf][DSv4.1] MegaAttn: wo_a writes wo_b's MXFP8 input (#60118)
Juntian777 Oct 19, 2026
bbf59fb
[Kernel] Reject unsupported layouts in CUTLASS 3.x scaled_mm (#55537)
jackLei0901 Oct 19, 2026
852989f
[Bugfix][Sampler] Fix split top-p masking every token for huge logits…
zamog Oct 19, 2026
d46cb9a
[Bugfix][Weight Cache] Key non-MoE DP daemons as DP=1 like the engine…
nien-hui Oct 19, 2026
1641765
[Bugfix][Scheduler] Fix encoder cache deadlock with drafter look-ahea…
gty111 Oct 19, 2026
fb61ac0
[ROCm][Perf] Use AITER top-k for the DeepSeek-V3.2/GLM-5 sparse index…
whx-sjtu Oct 19, 2026
5bc2671
[ROCm][Qwen4Exp] Remove the Qwen3.8-Flash-Next TEP8 MXFP4 emulation g…
mjkvaak-amd Oct 19, 2026
ee22f68
[Frontend] systemone: prefill the shared prefix once before the reads…
SCcagg5 Oct 19, 2026
dde9aca
Add Step-5 Preview support (#61727)
jeejeelee Oct 19, 2026
3e96f9c
[ROCm][CI] Bump the ROCm 10 image to torch 2.13 (#62276)
AndreasKaratzas Oct 19, 2026
283d48f
[Bugfix][Frontend] Preserve scheduling priority for online and offlin…
dskwe Oct 19, 2026
ffa18e5
[ROCm][DSv4] Require explicit MXFP4 opt-in for MegaMoE shared-expert …
AMD-yanfeiwang Oct 19, 2026
a608b6e
[Bugfix][Core] Keep the EAGLE-reachable SWA tail at a shared-prefix j…
JaredforReal Oct 19, 2026
81f7c69
[Bugfix][Tool Calling] Tool parser non-streaming parse drops post-too…
Lucky-Lodhi2004 Oct 19, 2026
2aa5080
[Bugfix][Weight Cache] Include RoPE parameters in IPC cache key (#60994)
bzsuni Oct 19, 2026
973dbf8
[Doc][ROCm] Align Kimi-K3 MI355X recipe with InferenceX #4215 (#62273)
chunfangamd Oct 19, 2026
4bd75e9
[Bugfix][KV Offload][P2P] Report NIXL submission failures and escalat…
liranschour Oct 19, 2026
2cea893
[Bugfix][Rust Frontend] Match DeepSeek-V4.1 renderer to the 1017 refe…
robertgshaw2-redhat Oct 19, 2026
b29be52
[Perf][AuxOutput] Do not rescan referenced keys in the routed-experts…
aoshen02 Oct 19, 2026
b048630
[Bugfix] Size the HiSparse hot buffer from the rounded sparse top-k w…
qimcis Oct 19, 2026
ddefe40
[Bugfix][Frontend] Match DeepSeek-V4.1 encoder to the 1017 reference …
robertgshaw2-redhat Oct 19, 2026
3aad539
[Model] Support hotwords for MOSS-Transcribe-Diarize (#62329)
lzwwaylon Oct 19, 2026
afe2183
[KV Connector] Support sleep mode with the NIXL pull connector (#59635)
aoshen02 Oct 19, 2026
a3cee21
[Bugfix] Require cudnn-frontend >=1.31.0: cuDNN could replay an unloa…
PeganovAnton Oct 19, 2026
5caabdb
[Frontend] Consolidate startup utils. (#62390)
noooop Oct 19, 2026
e347836
[Bugfix][Tool Parser] Parse multi-line JSON arguments in the DeepSeek…
niansia Oct 19, 2026
a9104fd
[Pooling] Improve SPLADE throughput 3.6% to 7.8% (#62250)
taneem-ibrahim Oct 19, 2026
bde4d00
[Bugfix][Kernel] persistent_topk: don't select float4 tail lanes past…
simon-veitner-redhat Oct 19, 2026
aa3564c
[Bugfix][Test] Stop requesting capfd in the subprocess weight cache t…
stefankoncarevic Oct 19, 2026
3b05805
[Misc] Fix failing weight cache RoPE test on main (#62508)
Isotr0py Oct 19, 2026
c8fbb79
[ROCm][MoE] Add AITER MXFP4 W4A16/W4A4 modular-kernel test coverage (…
divakar-amd Oct 19, 2026
b439421
[CI][ROCm] Raise data_parallel_offline.py --timeout in AMD Torchrun +…
aarushjain29 Oct 19, 2026
3c9beb8
[Perf] Enable PDL for fused MoE top-k gating (#59737)
wolfcomos Oct 19, 2026
fdb9533
[CI][Unit Test] Patch MoE layer unit tests for Blackwell and Rubin (#…
johncalesp Oct 19, 2026
b188771
[Doc] Document Kimi-K3 GB300 disaggregated AgentX profile (#62528)
Ankur-singh Oct 19, 2026
b9df898
[CI][Tests] Add SM107a to DeepEP build (#61442)
johncalesp Oct 19, 2026
8a1c02e
[Bugfix][DeepSeek V4.1] Inject Engram at pipeline stage entry (#62208)
wangyicong52 Oct 19, 2026
b7701fc
[Bugfix][Test] Synchronise ranks before the profiled call in profile_…
x41lakazam Oct 19, 2026
e1f3141
[Bugfix][V1] Null sliding-window block-table entries below the window…
stu-cao Oct 19, 2026
3ff10dd
[Doc] Document DeepSeek-V4.1-Flash Dynamo sidecar serving / 记录 DeepSe…
RohitNagraj Oct 19, 2026
04631c4
[Security][CI/Build] Add pre-commit check for hardcoded trust_remote_…
mritunjaysharma394 Oct 19, 2026
5f446bf
docs: explain parser boundary tokens in custom grammars (#58219)
yuchenwang3 Oct 19, 2026
5fd6268
[Docs] Add Gemma-2, Granite SWA, Qwen3-0.6B to batch invariance valid…
yuvalluria Oct 19, 2026
0b7ae8f
[CI] Run the heaviest 4xL4 steps nightly only (#62564)
khluu Oct 19, 2026
8c60cf0
[CI] Keep the AMD mirrors of the nightly-only 4xL4 steps on PRs (#62567)
khluu Oct 19, 2026
53172fa
[CI] Bump Transformers version to 5.20.0 (#61983)
hmellor Oct 19, 2026
59a5125
[Perf][Spec Decode] Avoid target request padding in DP drafter (#58984)
wangyicong52 Oct 20, 2026
473cc8e
[Rust][Benchmark] Add openai-responses backend to vllm-bench (#59489)
QHarshil Oct 20, 2026
17dd7d8
[Bugfix][AuxOutput] Send routed-experts block hashes only for compute…
aoshen02 Oct 20, 2026
45ce405
[Bugfix][KV Connector][NIXL] Shard a GQA draft's KV by head under an …
stu-cao Oct 20, 2026
2296c12
[Doc] Document DeepSeek-V4.1-Flash B300 Dynamo disaggregated profile …
Ankur-singh Oct 20, 2026
e1faffb
[CI][XPU] Ignore test_weight_cache.py in Intel CI (#62422)
chaojun-zhang Oct 20, 2026
19997aa
[Chore] Port more vendored configs and processors to upstream Transfo…
hmellor Oct 20, 2026
1a74cc7
[ROCm][Perf][DSv4.1] Mono decode on MI300X and MI325X (gfx942) (#60731)
maeehart Oct 20, 2026
75eb034
[CI] Keep a per-PR 2-GPU core of the NIXL PD accuracy sweeps (#62579)
NickLucche Oct 20, 2026
083d616
[CI/Build] Drop CUDA 12.9 from the release pipeline (#62575)
khluu Oct 20, 2026
9499c94
[Quantizaiton][Feature] Pluggable KV Cache Data Types (#52670)
lcfenglinwan Oct 20, 2026
e10ecb6
[Bugfix][DCP] Support strided LSE in direct A2A reduction (#60373)
john-evan08 Oct 20, 2026
4e304b4
[CI] Move Multimodal Processor, KV Connectors, LoRA, Spec Decode Draf…
Thangnguyenvn98 Oct 20, 2026
143ee3b
[Misc] Fix pre-commit failure on main from conflicts between pluggabl…
Isotr0py Oct 20, 2026
3b51898
[Feature][Quantization] Gather MiMo fused-QKV FP8 rows exactly by def…
peperunas Oct 20, 2026
bc01c06
[Perf][Qwen4Exp] Internal prefill checkpoints for the PLE short conv …
ZJY0516 Oct 20, 2026
8dfbeee
[Frontend] Write run-batch responses incrementally instead of at the …
fangchenli Oct 20, 2026
5c399f2
[Doc] Add Kimi-K3 GB300 Dynamo disaggregated profile to the recipe se…
Ankur-singh Oct 20, 2026
34ac4f9
[Bugfix][KV Connector][Mooncake] Wait for all peers before completing…
zhou-yuhan Oct 20, 2026
df3bd09
[Bugfix][NIXL] Use XPU-compatible block size in sleep test (#62578)
chaojun-zhang Oct 20, 2026
3897f95
[Docs] Use probabilistic DSpark sampling in Kimi-K3 GB300 recipes / […
RohitNagraj Oct 20, 2026
b44446c
[Quantization] replace_parameter keeps the parameter object by defaul…
aoshen02 Oct 20, 2026
8612993
[Bugfix][LoRA] Restore LoRA state on wake-up from level-2 sleep (#62358)
HollowMan6 Oct 20, 2026
fce64bc
[RL] Send NCCL weight metadata once and reuse it (#35911)
S1ro1 Oct 20, 2026
d3c9c73
[Bugfix][Frontend] Return prompt token IDs from derender when request…
hickeyma Oct 20, 2026
f8e1e87
[CI][Bugfix] Skip the SmolVLM HF comparison on Transformers 5.20 (#62…
AndreasKaratzas Oct 20, 2026
428cd0c
[ROCm][Model] DeepSeek-V4.1 VL: stream language-model weights on ROCm…
AndreasKaratzas Oct 20, 2026
f85e39e
[ROCm][Quantization][MOE] Enable fused shared experts for MXFP8 check…
sshlyapn Oct 20, 2026
e4a676c
[Perf][Mamba] Reduce host overhead in the Mamba2 Triton SSD prefill p…
jhaotingc Oct 20, 2026
b9c8bd5
[CI] Shard MTEB, DFlash Nightly, MoE Refactor DP and Entrypoints LLM …
Thangnguyenvn98 Oct 20, 2026
87fa712
[CI] Shard (H200 MIG 35GB / MI355 DPX) Multimodal Models (Standard) 4…
Thangnguyenvn98 Oct 20, 2026
e2d2680
[CI] Shard E2E Scheduling, Benchmarks CLI and six AMD mirrors automat…
Thangnguyenvn98 Oct 20, 2026
0d00d8b
[CI][Bugfix] ColPali miss hidden_size (#62627)
wenjinhust Oct 20, 2026
39568e2
[Doc] Document DeepSeek-V4.1-Flash B300 aggregate AgentX config (#62670)
Juntian777 Oct 20, 2026
b8e9001
[Rust][Frontend] Return routed experts from the generate route (#61949)
aoshen02 Oct 20, 2026
8407bc0
[CI][LoRA] Release punica test GPU memory before later engine tests (…
khluu Oct 20, 2026
cc8a41f
[MyPy][4/N] Fix mypy errors in medium-hard tests/ dirs (#55485)
theSatvik Oct 20, 2026
e7e8deb
[Perf][Multimodal] Keep audio encoder padding masks broadcastable (#6…
Loken-Lau Oct 20, 2026
7921865
[Bugfix][Model] MiMo-V2: skip fused fp8 qkv_proj tensors for layers t…
jmeadlock Oct 20, 2026
5285b9b
[Bugfix][Model] Build Pixtral vision position ids on device (#62648)
JaredforReal Oct 20, 2026
a6c898e
[CI][AMD] Shard the MI300 V1 Spec Decode step (#62686)
stefankoncarevic Oct 20, 2026
f0c5014
[Bugfix][Pooling] Ignore token stream intervals for pooling (#55226)
bvolpato Oct 20, 2026
5528685
[Rust Frontend] Make unhandled `vllm serve` frontend flags explicit (…
BugenZhao Oct 20, 2026
29a26e5
[Rust Frontend] Support --trust-request-chat-template (#62673)
BugenZhao Oct 20, 2026
255e3a3
[Rust Frontend] Reject silently dropped request fields on chat, compl…
BugenZhao Oct 20, 2026
50e2296
[Rust Frontend] Clamp logit_bias to [-100, 100] (#62425)
BugenZhao Oct 20, 2026
1466f37
[Rust Frontend] Inherit presence and frequency penalties from generat…
BugenZhao Oct 20, 2026
52712d4
[Rust Frontend] Validate cache_salt like Python (#62427)
BugenZhao Oct 20, 2026
03dd81a
[Rust Frontend] Accept top_logprobs=0 without logprobs (#62428)
BugenZhao Oct 20, 2026
97a82d3
[Rust Frontend] Truncate prompts against max_model_len like Python (#…
BugenZhao Oct 20, 2026
68098c7
[Rust Frontend] Accept empty stream_options without streaming (#62643)
BugenZhao Oct 20, 2026
654f781
[Rust Frontend] Cap structured-output JSON nesting at 64 levels (#62661)
BugenZhao Oct 20, 2026
3eb3145
[Rust Frontend] Accept null for nullable request booleans (#62662)
BugenZhao Oct 20, 2026
3593d8e
[Rust Frontend] Emit transfer params at the top level of render outpu…
BugenZhao Oct 20, 2026
fbc3555
[Rust Frontend] Return 501 instead of 404 for Python-only routes (#62…
BugenZhao Oct 20, 2026
92e3790
[Rust Frontend] Cap request token histogram buckets at max_model_len …
BugenZhao Oct 20, 2026
c0fe6c4
[Model] Support updated Ling FP8 quantization exclusions and MLA gate…
zexplorerhj Oct 20, 2026
11a8d57
[CI][AMD] Deselect distributed tests in the MI300 Model Executor step…
stefankoncarevic Oct 20, 2026
4a30738
[ROCm][benchmark][perf] fix moe tuning script for RDNA (#41197)
amd-xavierwang Oct 20, 2026
82b7dad
[Test][UMBP][2/10] Add shared connector contract coverage (#61790)
charxwu Oct 20, 2026
4964e44
[Rust Frontend] Report error type and code like Python (#62663)
BugenZhao Oct 20, 2026
6e780d1
[CI][ROCm] Use AITER prebuilt fp8 MoE modules when inter dim is 256 a…
aarushjain29 Oct 20, 2026
165152f
[Doc] Fix Kimi-K3 GB300 disaggregated selector and guide gaps (#62710)
Ankur-singh Oct 20, 2026
b272cff
[Bugfix] Read ColPali hidden size from vlm_config (#62714)
hmellor Oct 20, 2026
0ca531b
[Perf][Model] Support torch.compile for the PaddleOCR-VL vision encod…
ssingh231219 Oct 20, 2026
76c9e23
[Docs] Use release tags for documentation source links (#62709)
stdlibstring Oct 20, 2026
f1dbfef
[Core] Don't apply spec decode async scheduling fallbacks with MRV2 (…
njhill Oct 20, 2026
88077b7
[Bugfix] Reject mixed structured output backends during validation (#…
QwertyJack Oct 20, 2026
8122776
[Bugfix][Distributed] Preserve symmetric collective outputs (#58154)
jeffnvidia Oct 20, 2026
7b569ec
[Attention] Use trtllm-gen for the FlashInfer DCP prefill context pas…
GagandeepKang-cohere Oct 20, 2026
005cef0
[CI][ROCm] Remove MI300 Model Runner V2 steps (#62731)
djramic Oct 20, 2026
6083fde
[Doc] Document the DeepSeek-V4.1-Flash B200 AgentX profile in the gui…
Ankur-singh Oct 20, 2026
70a609a
[Doc] Document MiniMax-M3 GB200 Dynamo AgentX profile (#62543)
Ankur-singh Oct 20, 2026
09fd027
[ROCm][Perf][Kimi-K3] Fuse the GLA gate GEMM and the MLA FP8 prefill …
omuhamma Oct 20, 2026
9da5f2d
[ROCm] Enable the rms_norm_gated custom op by default (Qwen3.8-27B) (…
eky-amd Oct 20, 2026
c693645
[CI] Add Nightly to optional Buildkite step labels (#61186)
khluu Oct 20, 2026
9d4192a
[Bugfix][DeepSeek V4] Load redundant EPLB expert slots (#59611)
simon-veitner-redhat Oct 20, 2026
56e67b4
[Doc] Sync Kimi-K3 GB200 AgentX profiles with InferenceX #4322 (#62761)
hshrivastava-droid Oct 20, 2026
af31693
[Distributed] Include NCCL's last error in pynccl error messages (#59…
roy6n23 Oct 20, 2026
0f30006
[ROCm][CI][Bug] Remove padding from AITER output for quantization/tes…
qli88 Oct 20, 2026
88262cf
[CI] Release the previous checkpoint's page cache between LM Eval mod…
stefankoncarevic Oct 20, 2026
612e928
[Bugfix] Make cooperative TopK exact on candidate overflow (#59645)
LopezCastroRoberto Oct 20, 2026
3a1bd83
[MyPy] Fix mypy errors in easy tests/v1/kv_connector files (kv-A) (#5…
nien-hui Oct 20, 2026
1e330b1
[MyPy][5/N] Fix mypy errors in hard tests/ dirs and enforce follow-im…
adarshxs Oct 20, 2026
b1ab16c
[ROCm] Bump AITER to v1.26.0 (#62486)
josh-schell-amd Oct 20, 2026
7e3d559
[Frontend] DiffusionGemma joint reads on /v1/systemone and /v1/decisi…
simon-veitner-redhat Oct 20, 2026
532a7d1
[MyPy] Fix mypy errors in KV connector tests (kv-B) (#55901)
ntu-b12505041 Oct 21, 2026
e632d66
[CI] Fix Buildkite path filters that point at moved or deleted files …
zydo Oct 21, 2026
c835207
[XPU][CI] Add kaldi-native-fbank to XPU test requirements (#62616)
chaojun-zhang Oct 21, 2026
27aadb3
[ROCm][Bugfix] Fix wrong output of the QK-norm + RoPE + KV-cache fusi…
jiaqiang-dot-liu Oct 21, 2026
2a1a3c5
[Feature][MoE] Add platform hook for routed-expert capture rows (#62624)
Ronald1995 Oct 21, 2026
aca5828
[CI][ROCm] Mirror the Distributed Preload group on MI355 (#62646)
AndreasKaratzas Oct 21, 2026
d6d5412
[XPU][Attention] Route multimodal prefix masks through the Triton/Fla…
mganczarenko Oct 21, 2026
c2861f7
[CI][KV Offload] Signal async lookup results once they can be drained…
AndreasKaratzas Oct 21, 2026
b304781
[Docs] Add @TheEpicDolphin as codeowner for spec decode (#62742)
TheEpicDolphin Oct 21, 2026
979be69
[Bugfix] Include KV cache quantization settings in IPC weight cache k…
bzsuni Oct 21, 2026
0495a3d
[XPU][CI] Skip test_deep_sleep_lora_tp2 on non-CUDA platforms (#62679)
chaojun-zhang Oct 21, 2026
e8ae84b
[ROCm][Build] Compile paged attention kernels in parallel (7.6x faste…
fxmarty-amd Oct 21, 2026
9008280
[CPU] Improve long-context MTP attention scheduling on AMX (#59082)
tianmu-li Oct 21, 2026
8e2beaa
[Doc] Kimi-K3: DCP selector and TOKENSPEED_MLA draft backend on GB200…
hshrivastava-droid Oct 21, 2026
81c2bd7
[Perf] Optimize Molmo2 pooling preparation (#57101)
Levius-Fubuki Oct 21, 2026
52a65d7
[Model] Add Nemotron Parse 3.5 serving and MTP support (#61651)
DenisOvchinnikov93 Oct 21, 2026
8855927
[CI] Assert CPU scheduler metadata is present in group-head test (#62…
Fangzhou-Ai Oct 21, 2026
6af9fc2
[Bugfix][KV Offload] Capture event metadata for pending promotions (#…
karya0 Oct 21, 2026
70806b6
[Bugfix] Fix multimodal sender-cache invalidation race with queued re…
YueshenZ Oct 21, 2026
a9bf45e
[ROCm][Perf][Kimi-K3] Specialized decode for Kimi-K3 on MI355X (#60683)
hyukjlee Oct 21, 2026
e2d3340
[LoRA][Step5] Support LoRA for Step5 (#62498)
aoshen02 Oct 21, 2026
fc377f7
[Quantization] Use replace_parameter for params re-created in process…
aoshen02 Oct 21, 2026
f4c07f3
[XPU][CI] Skip test_bench_forward on XPU (#62829)
chaojun-zhang Oct 21, 2026
9353ea5
[Bugfix][XPU] Fix INC ARK weight loading for small TP shards (#61354)
Yejing-Lai Oct 21, 2026
e410466
[Doc] Require docs for user-visible changes (#62599)
aoshen02 Oct 21, 2026
dc61c6d
[EPD] Support metadata-only audio-in-video requests (#62573)
gty111 Oct 21, 2026
1f5514e
[Bugfix][Rust Frontend] Fix HTTP 500 on long conversations: fuel-limi…
ly989264 Oct 21, 2026
385d1da
[ROCm][Perf][MiniMax-M3] MonoKernel decode for M3 MXFP4 on MI355X (#6…
micah-wil Oct 21, 2026
153b76b
[ROCm][Model][MiniMax-M3] Context-parallel sparse lightning indexer (…
peymanr Oct 21, 2026
64c5f14
[ROCm][DI][CI] Enable WideEP EP16/DP16 tests (#59266)
lcskrishna Oct 21, 2026
5ea2c7f
[Frontend] Share ChatStreamProcessor between chat streaming and deren…
hickeyma Oct 21, 2026
b0e1f80
[Bugfix][MoE] Support simulated routing in monolithic MoE backends (#…
roigarnettNvidia Oct 21, 2026
6ae1051
[Rust Frontend] Support --exclude-tools-when-tool-choice-none (#62741)
WoosukKwon Oct 21, 2026
e9cc624
[Rust Frontend] Refresh rust/AGENTS.md with ownership and design conv…
BugenZhao Oct 21, 2026
9db0da8
[Doc] Raise the bar for agent-written tests (#62601)
aoshen02 Oct 21, 2026
e8e43c6
[LoRA] Support BERT token classification heads (#61391)
linitra24 Oct 21, 2026
96e59c6
[CI] Run the remaining 4xL4 steps nightly only (#62883)
khluu Oct 21, 2026
d7ada3a
[CI][ROCm] Give the M3 embed-sharing fixture a kernel_config (#62869)
stefankoncarevic Oct 21, 2026
f7b2363
[bitlane] Keep prefill-bearing batches out of FULL cudagraphs (#62535)
xzwgit Oct 20, 2026
de36c15
[bitlane] Seed the -1 sentinel in the DSv4.1 prefill sparse index wor…
xqoasis Oct 20, 2026
c13f001
[bitlane] Keep a full uniform-decode batch reachable by FULL graphs (…
abmfy Oct 20, 2026
0e41e58
[bitlane] Include draft models in DeepGEMM warmup (#60995)
DGlan Oct 20, 2026
4e6ccf8
[bitlane] Reject an empty conversation in every renderer (#62218)
albertoperdomo2 Oct 20, 2026
6f6a847
[bitlane] DeepSeek-V4.1: continue_final_message keeps the last assist…
reyanshsolis Oct 20, 2026
6f0d420
[bitlane] CI: daily rebase, hygiene gate, image build, release on pro…
reyanshsolis Oct 20, 2026
cfaff98
[bitlane] Apply client stop strings only after reasoning ends (#62095)
Oct 20, 2026
76bb10f
[bitlane] CI: end to end on dev after every build and release, every …
Oct 20, 2026
57b95c6
[bitlane] Print the bitlane build as the first engine log line
Oct 20, 2026
41d412f
[bitlane] Hygiene gate: allow GitHub's PR merge commits, still check …
Oct 20, 2026
c64a25f
[bitlane] CI: one deployment report comment on the PR, as mumbo-bot w…
Oct 20, 2026
6302ab2
[bitlane] builder.sh: note that the e2e reaches off-AWS dev nodes ove…
reyanshsolis Oct 21, 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
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .agents/skills/pr-checklist/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ When adding or modifying tests, consider both the coverage and the effectiveness

Assess whether the included test cases are meaningful, concise, and maintainable. Testing should not be exhaustive: local validation is typically sufficient to ensure a baseline correctness of the change. Contributed tests should focus exclusively on areas that are deemed prone to errors, regressions, or complex interactions within the codebase. Recommend deletion of redundant, trivial, or otherwise unnecessary tests: this is one of the most common complaints raised during code reviews.

Check added and changed tests against [`tests/AGENTS.md`](../../../tests/AGENTS.md). For reproducible bugs, the PR must show the new test failing without the fix and passing with it.

Verify that testing actually exercises the new path, rather than passing through an unchanged path or fallback. Ensure added speculative decoding correctness tests assert nonzero acceptance rate, selection tests identify the desired backend, etc.

Aim to write tests that are meaningful, targeted, and maintainable. Avoid redundant or trivial tests that do not contribute to the overall reliability of the test suite. Avoid using mock objects, especially when highly coupled with internal logic.
Expand Down Expand Up @@ -135,7 +137,7 @@ For bug fixes, there is no need to include details of the original bug and expla

#### 3.2: Documentation and Examples

Ensure that any new features, changes, or public APIs are properly documented. This includes updating relevant documentation files under `docs/` and providing usage examples where applicable. Refer to `supported_models.md` for new models and `examples/` for usage examples.
User-visible changes need docs in the same PR, placed and checked per [Documenting User-Visible Changes](../../../docs/contributing/README.md#documenting-user-visible-changes); missing or unfindable docs are blocking. Add usage examples under `examples/` where applicable.

#### 3.3: Helper Functions

Expand Down
8 changes: 5 additions & 3 deletions .agents/skills/transformers-upgrade/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ A version change is one of two jobs, and they usually come as a pair:
2. Read the release notes for config validation changes, renamed auto-mapping
formats, and removed attributes; these are what break vLLM.
3. Search `tests/` for `min_transformers_version` and skip markers naming the
new version, and un-gate them.
new version, and run those tests on the new pin. Keep the gates: older
versions in the supported range still lack the feature, so a gate goes
only when the floor reaches it.
4. Run the suites in [Testing](#testing) and fix what breaks. Mark every
shim with a `# Transformers >= X` comment so the next floor raise finds it.

Done when the [Testing](#testing) suites pass on the new pin and every test
waiting on this version is un-gated.
Done when the [Testing](#testing) suites and every test gated on this
version pass on the new pin.

## Raise the floor (unvendoring pass)

Expand Down
18 changes: 18 additions & 0 deletions .bitlane/builder.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env bash
# usage: .bitlane/builder.sh 'shell' In a workflow, after the OIDC role: runs the shell as root on the bitlane
# builder host over SSM (instance id in SSM parameter /bitlane/builder_id), waits, prints its output. Exit 1 unless
# the command succeeded. A person starts the builder (bitlane node/launch.sh), never CI.
# The e2e it starts reaches off-AWS dev nodes (bitlane control/hosts.yaml) over ssh from the builder.
set -euo pipefail
ID=$(aws ssm get-parameter --name /bitlane/builder_id --query Parameter.Value --output text)
CID=$(aws ssm send-command --instance-ids "$ID" --document-name AWS-RunShellScript --timeout-seconds 600 \
--parameters "$(jq -nc --arg c "$1" '{commands: [$c], executionTimeout: ["9000"]}')" \
--query Command.CommandId --output text) \
|| { echo "::error::builder $ID unreachable: is it running? (bitlane docs/operations.md, Fork workflow)"; exit 1; }
while sleep 20; do
S=$(aws ssm get-command-invocation --command-id "$CID" --instance-id "$ID" --query Status --output text 2>/dev/null || echo Pending)
case $S in Pending|InProgress|Delayed) ;; *) break ;; esac
done
aws ssm get-command-invocation --command-id "$CID" --instance-id "$ID" \
--query '[StandardOutputContent,StandardErrorContent]' --output text
[ "$S" = Success ] || { echo "::error::builder command $CID: $S"; exit 1; }
113 changes: 113 additions & 0 deletions .bitlane/check-stack.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/usr/bin/env python3
"""Hygiene gate for the bitlane patch stack: python3 .bitlane/check-stack.py BASE [HEAD] [--prs]

BASE is the upstream main commit the stack sits on (git merge-base HEAD upstream/main). Every commit in BASE..HEAD:
- is not a merge commit
- has a subject "[bitlane] ..."
- has a body line "Upstream: https://github.com/vllm-project/vllm/pull/N" or "Bitlane-only: <reason>"
- changes only files an overlay build can carry (vllm/**.py, tests, docs, ...; .bitlane/ and our bitlane-*
workflows), unless it has "Binary-change: yes", which needs a full build: not supported yet, so it fails
--prs: also the state of each Upstream PR (GitHub API; GITHUB_TOKEN if set). Merged with its merge commit already in
BASE = the patch should have dropped at the rebase: error. Merged after BASE: drops at the next rebase. Closed
unmerged: flagged. Prints a Markdown report (CI summary, release notes); exit 1 on any error. Stdlib only.
"""
import json, os, re, subprocess, sys, urllib.request

PR = re.compile(r"^https://github\.com/vllm-project/vllm/pull/(\d+)$")
OVERLAY = re.compile(r"^(vllm/.*\.py|tests/.*|docs/.*|benchmarks/.*|examples/.*|\.buildkite/.*"
r"|\.bitlane/.*|\.github/workflows/bitlane-[^/]*)$")


def git(*a):
return subprocess.run(["git", *a], check=True, capture_output=True, text=True).stdout


TRAILER = re.compile(r"^(Upstream|Bitlane-only|Binary-change):[ \t]*(\S.*)$", re.M)


def trailers(sha): # "Key: value" lines in the body. git's own trailer parser misses them when the last paragraph
# also holds What:/Why: prose (the v0.32.0.x commits). The first of each key counts.
return {k.lower(): v.strip() for k, v in reversed(TRAILER.findall(git("log", "-1", "--format=%b", sha)))}


def pr_state(n): # "open" | "closed" | ("merged", merge sha)
req = urllib.request.Request(f"https://api.github.com/repos/vllm-project/vllm/pulls/{n}",
headers={"Accept": "application/vnd.github+json"})
if os.environ.get("GITHUB_TOKEN"):
req.add_header("Authorization", f"Bearer {os.environ['GITHUB_TOKEN']}")
with urllib.request.urlopen(req, timeout=30) as r:
d = json.load(r)
return ("merged", d["merge_commit_sha"]) if d.get("merged_at") else (d["state"], None)


def in_base(sha, base):
if not sha:
return None
r = subprocess.run(["git", "merge-base", "--is-ancestor", sha, base], capture_output=True)
return {0: True, 1: False}.get(r.returncode) # 128: commit not here: unknown


GH_MERGE = re.compile(r"^Merge pull request #\d+ from callgideon/")


def check(base, head, prs):
errors, notes, rows = [], [], []
for line in git("rev-list", "--reverse", "--parents", f"{base}..{head}").splitlines():
sha, *parents = line.split()
s, subject = sha[:12], git("log", "-1", "--format=%s", sha).strip()
t = trailers(sha)
if len(parents) > 1:
# GitHub's "Merge pull request" button: allowed, its commits are checked one by one in this same loop;
# bitlane-sync's daily rebase drops it. Any other merge breaks the linear stack.
if GH_MERGE.match(subject):
notes.append(f"{s}: {subject} (a PR merge: its commits are checked on their own)")
continue
errors.append(f"{s}: merge commit (the stack is linear: rebase, never merge)")
if not subject.startswith("[bitlane] "):
errors.append(f"{s}: subject must start with '[bitlane] ': {subject!r}")
up, only = t.get("upstream", ""), t.get("bitlane-only", "")
m = PR.match(up)
if not m and not only:
errors.append(f"{s}: needs a trailer 'Upstream: https://github.com/vllm-project/vllm/pull/N' or 'Bitlane-only: <reason>'")
if up and not m:
errors.append(f"{s}: Upstream must be a vllm-project/vllm PR url, not {up!r}")
files = git("diff-tree", "--no-commit-id", "--name-only", "-r", "--no-renames", sha).split()
bad = [f for f in files if not OVERLAY.match(f)]
if t.get("binary-change", "").lower() == "yes":
errors.append(f"{s}: Binary-change: yes needs a full vLLM build; the pipeline builds Python overlays only")
elif bad:
errors.append(f"{s}: changes {', '.join(bad[:5])}: not an overlay file (csrc, build, requirements, data "
"under vllm/); a binary change needs 'Binary-change: yes' and a full build")
state = "-"
if m:
state = "not checked"
if prs:
st, merge = pr_state(m.group(1))
state = st
if st == "merged":
ib = in_base(merge, base)
state = f"merged {merge[:12]}" + {True: " (in base)", False: " (after base)", None: ""}[ib]
if ib:
errors.append(f"{s}: #{m.group(1)} is merged in the base ({merge[:12]}) and the patch did not "
"drop: drop it, or keep the difference as a Bitlane-only commit")
else:
notes.append(f"{s}: #{m.group(1)} merged upstream: drops at the next rebase past {merge[:12]}")
elif st == "closed":
notes.append(f"{s}: #{m.group(1)} closed without merge: carry it as Bitlane-only or drop it")
link = f"[#{m.group(1)}]({up})" if m else f"Bitlane-only: {only}" if only else "?"
rows.append(f"| `{s}` | {subject.removeprefix('[bitlane] ')} | {link} | {state} | {len(files)} |")
out = [f"Stack: {len(rows)} commits on upstream `{base[:12]}`", "",
"| Commit | Subject | Upstream | State | Files |", "|---|---|---|---|---|", *rows, ""]
out += [f"- note: {n}" for n in notes] + [f"- **error**: {e}" for e in errors]
out.append("" if errors else "Hygiene: PASS")
return "\n".join(out), not errors


if __name__ == "__main__":
args = [a for a in sys.argv[1:] if a != "--prs"]
if not 1 <= len(args) <= 2:
sys.exit(__doc__)
report, ok = check(git("rev-parse", args[0]).strip(), git("rev-parse", args[1] if len(args) > 1 else "HEAD").strip(),
"--prs" in sys.argv)
print(report)
sys.exit(0 if ok else 1)
4 changes: 4 additions & 0 deletions .bitlane/cpu-skip
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# pytest node ids the CPU test run deselects (bitlane control/build-engine.sh TEST=1): upstream tests in files our
# stack touches that need a GPU. One per line, each with its reason above it.
# upstream test, needs a CUDA stream ("current platform may not support current_stream")
tests/v1/cudagraph/test_cudagraph_manager.py::test_full_capture_sets_graph_pool_id_before_cuda_graph
21 changes: 21 additions & 0 deletions .bitlane/e2e.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# usage: .bitlane/e2e.sh IMAGE NAME In a workflow, after the OIDC role: bitlane control/e2e.sh on the dev environment
# (never prod) with IMAGE and run-file suffix NAME, run on the builder (node/fork-ci.sh e2e, over SSM by builder.sh).
# Step outputs for the report job: state (success = PASS, failure = FAIL, error = NOT RUN or no result) and desc
# (<= 140 characters; a NOT RUN starts "NOT RUN:"). Exit 1 on FAIL or no result; NOT RUN exits 0 (the status says it).
set -uo pipefail
IMAGE=$1 NAME=$2
.bitlane/builder.sh "/opt/bitlane/current/node/fork-ci.sh e2e $IMAGE $NAME" > out.txt 2>&1
cat out.txt
J=$(grep -E '^\{"result": ' out.txt | tail -1)
R=$(jq -r '.result // empty' <<<"$J" 2>/dev/null) WHY=$(jq -r '.reason // empty' <<<"$J" 2>/dev/null)
case $R in
PASS) S=success D="PASS $(jq -r '.run' <<<"$J")" ;;
FAIL) S=failure D="FAIL: $WHY" ;;
"NOT RUN") S=error D=$WHY ;;
*) S=error D="NOT RUN: no result from the builder: $(grep -m1 -E '::error::|usage:|ssm ' out.txt | cut -c1-80)" ;;
esac
D=${D//$'\n'/ }
{ echo "state=$S"; echo "desc=${D:0:140}"; } >> "${GITHUB_OUTPUT:-/dev/stdout}"
echo "bitlane/e2e on dev: $S, $D" >> "${GITHUB_STEP_SUMMARY:-/dev/null}"
[ "$S" = success ] || [ "$R" = "NOT RUN" ]
80 changes: 80 additions & 0 deletions .bitlane/test_check_stack.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/usr/bin/env python3
"""Self-check of check-stack.py on a synthetic git repo: python3 .bitlane/test_check_stack.py (no network)."""
import importlib.util, os, pathlib, subprocess, tempfile

spec = importlib.util.spec_from_file_location("cs", pathlib.Path(__file__).with_name("check-stack.py"))
cs = importlib.util.module_from_spec(spec)
spec.loader.exec_module(cs)


def sh(*a):
return subprocess.run(a, check=True, capture_output=True, text=True).stdout.strip()


def commit(path, msg):
p = pathlib.Path(path)
p.parent.mkdir(parents=True, exist_ok=True)
p.write_text(p.read_text() + "x\n" if p.exists() else "x\n")
sh("git", "add", "-A")
sh("git", "commit", "-q", "-m", msg)
return sh("git", "rev-parse", "HEAD")


def errors(base):
report, ok = cs.check(base, sh("git", "rev-parse", "HEAD"), prs=False)
return ok, report


with tempfile.TemporaryDirectory() as d:
os.chdir(d)
sh("git", "init", "-q", "-b", "main")
sh("git", "config", "user.email", "t@t"), sh("git", "config", "user.name", "t")
base = commit("vllm/a.py", "upstream")
commit("vllm/b.py", "[bitlane] fix b\n\nUpstream: https://github.com/vllm-project/vllm/pull/1")
commit(".bitlane/x.py", "[bitlane] ci\n\nBitlane-only: our CI")
commit("tests/test_b.py", "[bitlane] test\n\nWhy: x\nUpstream: https://github.com/vllm-project/vllm/pull/2")
ok, report = errors(base)
assert ok and "Stack: 3 commits" in report and "Hygiene: PASS" in report, report

for path, msg, expect in [
("vllm/c.py", "fix c\n\nBitlane-only: x", "subject must start"),
("vllm/c.py", "[bitlane] fix c", "needs a trailer"),
("vllm/c.py", "[bitlane] fix c\n\nUpstream: https://github.com/other/repo/pull/3", "must be a vllm-project"),
("csrc/k.cu", "[bitlane] kernel\n\nBitlane-only: x", "not an overlay file"),
("vllm/data.json", "[bitlane] data\n\nBitlane-only: x", "not an overlay file"),
("csrc/k.cu", "[bitlane] kernel\n\nBitlane-only: x\nBinary-change: yes", "needs a full vLLM build"),
(".github/workflows/upstream.yml", "[bitlane] ci\n\nBitlane-only: x", "not an overlay file"),
]:
top = sh("git", "rev-parse", "HEAD")
commit(path, msg)
ok, report = errors(base)
assert not ok and expect in report, (msg, report)
sh("git", "reset", "-q", "--hard", top)

top = sh("git", "rev-parse", "HEAD") # a merge commit in the stack
sh("git", "checkout", "-q", "-b", "side", base)
commit("vllm/s.py", "[bitlane] side\n\nBitlane-only: x")
sh("git", "checkout", "-q", "main")
sh("git", "merge", "-q", "--no-ff", "-m", "[bitlane] merge\n\nBitlane-only: x", "side")
ok, report = errors(base)
assert not ok and "merge commit" in report, report
sh("git", "reset", "-q", "--hard", top)

# GitHub's PR merge commit: allowed, but the PR's own commits still pass or fail on their own (PR #3, 2026-10-20)
for side_msg, ok_want in [("[bitlane] side\n\nBitlane-only: x", True), ("side without trailer", False)]:
sh("git", "checkout", "-q", "-B", "side", base)
commit("vllm/s.py", side_msg)
sh("git", "checkout", "-q", "main")
sh("git", "merge", "-q", "--no-ff", "-m", "Merge pull request #3 from callgideon/side", "side")
ok, report = errors(base)
assert ok == ok_want, (side_msg, report)
sh("git", "reset", "-q", "--hard", top)

# merged upstream and already in the base: the patch should have dropped
cs.pr_state = lambda n: ("merged", base)
report, ok = cs.check(base, top, prs=True)
assert not ok and "is merged in the base" in report, report
cs.pr_state = lambda n: ("closed", None)
report, ok = cs.check(base, top, prs=True)
assert ok and "closed without merge" in report, report
print("check-stack self-check: OK")
83 changes: 83 additions & 0 deletions .bitlane/test_workflows.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/usr/bin/env python3
"""Every bitlane workflow that sets commit statuses reports every stage, even when one fails:
python3 .bitlane/test_workflows.py (stdlib only; run by the gate). Checked on our own files' layout:
- the first step of the first job posts state=pending (GitHub shows a running build, not nothing);
- a job named report has `if: always()` and needs every other job (a job added later cannot skip its status:
before 2026-10-20 a hygiene-gate failure posted no status at all);
- no other job writes a final state (one writer: only state=pending outside report)."""
import pathlib, re

JOB = re.compile(r"^ ([A-Za-z0-9_-]+):")


def jobs(text):
"""{job: [its lines]} of the top-level `jobs:` map, in order."""
out, cur, inside = {}, None, False
for line in text.splitlines():
if not line.startswith(" ") and line.strip():
inside = line.startswith("jobs:")
continue
if inside and (m := JOB.match(line)):
cur = out.setdefault(m[1], [])
elif inside and cur is not None:
cur.append(line)
return out


def first_step(lines):
"""The lines of a job's first step: from its first `- ` to the next `- ` at the same indent."""
starts = [i for i, l in enumerate(lines) if l.lstrip().startswith("- ")]
if not starts:
return ""
indent = len(lines[starts[0]]) - len(lines[starts[0]].lstrip())
end = next((i for i in starts[1:] if len(lines[i]) - len(lines[i].lstrip()) == indent), len(lines))
return "\n".join(lines[starts[0]:end])


def problems(text):
j = jobs(text)
if not any("/statuses/" in l for lines in j.values() for l in lines):
return [] # sets no status (bitlane-sync: its build job's workflow does)
bad = []
if "state=pending" not in first_step(next(iter(j.values()))):
bad.append("the first step of the first job does not post state=pending")
rep = j.get("report")
if rep is None:
return bad + ["no report job"]
if not any(l.strip() == "if: always()" for l in rep):
bad.append("report has no `if: always()`")
needs = next((l for l in rep if l.strip().startswith("needs:")), "")
missing = [n for n in j if n != "report" and not re.search(rf"[\[\s,]{re.escape(n)}[\],\s]", needs + " ")]
if missing:
bad.append(f"report does not need {missing}")
for name, lines in j.items():
bad += [f"{name} writes a final status: {l.strip()[:60]}" for l in lines
if name != "report" and "/statuses/" in l and "state=pending" not in l]
return bad


GOOD = """on: push
jobs:
gate:
steps:
- run: gh api repos/x/statuses/$SHA -f state=pending
- run: true
build:
needs: gate
report:
needs: [gate, build]
if: always()
steps:
- run: gh api repos/x/statuses/$SHA -f state=success
"""
assert problems(GOOD) == [], problems(GOOD)
assert problems(GOOD.replace(" if: always()\n", "")) == ["report has no `if: always()`"]
assert problems(GOOD.replace("[gate, build]", "[gate]")) == ["report does not need ['build']"]
assert problems(GOOD.replace(" build:\n needs: gate\n", " build:\n steps:\n - run: gh api repos/x/statuses/$SHA -f state=failure\n"))
assert "the first step of the first job does not post state=pending" in problems(GOOD.replace("state=pending", "state=x"))

flows = sorted(pathlib.Path(__file__).parent.parent.glob(".github/workflows/bitlane-*.yml"))
assert flows, "no bitlane workflows found"
for f in flows:
assert not (p := problems(f.read_text())), f"{f.name}: {p}"
print(f"workflow status check: OK ({', '.join(f.name for f in flows)})")
Loading
Loading