Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
624 commits
Select commit Hold shift + click to select a range
7173c64
[Security] Bound decoded and downloaded media per request (#61226)
jperezdealgaba Oct 13, 2026
54db759
[Bugfix][Structured Output] Reject structural_tag and unhandled specs…
samayp01 Oct 13, 2026
426f3bd
[Bugfix][Model][Rust Frontend] Qwen3_ASR: Handle ragged Qwen audio ba…
noone-zhhh Oct 13, 2026
e6e84f3
[Feature][Pooling] Add offline fixed-length late chunking (#60164)
LinzeShi Oct 13, 2026
cd7517f
[Bugfix] Fix ReplaySSM ring shape assertion when TP does not divide M…
vadiklyutiy Oct 13, 2026
818f70c
[Bugfix] Mask special added tokens in xgrammar JSON, regex and EBNF g…
vadiklyutiy Oct 13, 2026
d9a543c
[Bugfix][Frontend] Forward --enable-log-outputs to the Cohere Chat v2…
adtygan Oct 13, 2026
253e02b
[Perf] Warm up DeepGEMM MegaMoE kernels before serving (#60468)
simon-veitner-redhat Oct 13, 2026
7342dc0
[MoRIIO] Require pending remote prefill for READ cache hits (#60638)
whx-sjtu Oct 13, 2026
0838cd6
[Bugfix] Load and apply Nemotron Super final vision LayerNorm (#61401)
natsala13 Oct 13, 2026
31e90ac
[Attention] Enable FA4 sparse MQA decode on Blackwell (#55866)
simon-veitner-redhat Oct 13, 2026
0fae39a
[Perf] per_token_group_quant_8bit: multiply by reciprocal instead of …
gau-nernst Oct 13, 2026
de8291e
[Core] Add lifecycle hooks for worker extensions (#59463)
andakai Oct 13, 2026
61d9c77
[CI] Run the Clef pooler test on GPU (#61409)
ZJY0516 Oct 13, 2026
f5fefbf
[Build] DeepGEMM migration to torch Stable ABI (#59482)
cleonard530 Oct 13, 2026
f395a6b
[ROCM][Bugfix] Deferring to TRITON_ATTN backend for Prefix lm models …
GodRishUniverse Oct 13, 2026
669f85e
[Misc] Break chat_utils into more maintainable modules. (#60972)
noooop Oct 13, 2026
b9b401b
[Kernel] Fuse DeepEP-v2 decode globalize+align into one launch (#53911)
elvircrn Oct 13, 2026
12b005e
[Bugfix] Don't split a multimodal item that a prefill chunk starts ex…
chessing234 Oct 13, 2026
ac71b17
[Model Loader] Keep norm layers neutral under dummy weight init (#61323)
WoosukKwon Oct 13, 2026
6849ca6
[Quantization] Add ModelOpt IQ2_XS, IQ2_XXS, and Q8_0 support via b12…
askliar Oct 13, 2026
7fad7db
[Perf][Feat] Add generic cuteDSL LL FP32 router (GEMM) (#44343)
LopezCastroRoberto Oct 13, 2026
e832223
[ROCm][Perf] W4A16: speed up skinny GEMM decode, including speculativ…
roberteg16 Oct 13, 2026
624a5dd
[Attention] Fetch MLA prefill workspace at use instead of init (#60654)
MatthewBonanni Oct 13, 2026
c5bda65
[Model][MoE] Load MegaMoE experts directly into the DeepGEMM layout (…
aoshen02 Oct 13, 2026
6d1daa9
[Bugfix][Frontend] Expose completion response schemas in OpenAPI (#60…
GuanLuo Oct 13, 2026
3f55012
[Perf][Attention][MiniMax-M3] Select CUTLASS MSA by EAGLE3 decode sha…
anish-shanbhag Oct 13, 2026
c068db0
[Bugfix][Compile] Replace Transformers AOT caching with graph caching…
Taimys Oct 13, 2026
483e0c2
[KV Offload] Split replicated-layout pre-faulting across workers (#59…
Etelis Oct 13, 2026
2f18d13
[GLM5.3 Perf] Enable fp8 kv cache for GLM5.3 Flash by default, 9.8% E…
yewentao256 Oct 13, 2026
b33cb81
[Bugfix] Keep compressed-tensors wNa16 linear layers batch invariant …
yifanFengg Oct 13, 2026
68fc395
[Bugfix] Keep GateLinear batch invariant under VLLM_BATCH_INVARIANT (…
yifanFengg Oct 13, 2026
a31054f
[NIXL] Bump CUDA 12 NIXL to 1.5.0 (#60428)
Etelis Oct 13, 2026
93d0bd9
[ROCm][CI] Drop the -inf padding check from the AITER MQA logits test…
djramic Oct 13, 2026
67516b6
[Bugfix][ROCm][Kimi-K3] Stage fused KDA decode weights after loading …
AndreasKaratzas Oct 13, 2026
c19c263
[GLM 5.3 Perf] Handle two elements at the same time for per token gro…
yewentao256 Oct 13, 2026
292da21
[HiSparse] Read GPU-resident KV directly for mixed and BF16 prefills …
MatthewBonanni Oct 13, 2026
e90158d
[Bugfix][MoE] Clamp BLOCK_SIZE_K to the FP8 quantization block in the…
aniravich Oct 13, 2026
698e79f
[Model] Kolibri 1 via the Transformers modeling backend (#60827)
lucamotz Oct 13, 2026
6463d04
Fix write-after-write hazard in xpu KV RoPE triton kernel (#46685)
wenbinc-Bin Oct 13, 2026
78b32b3
Revert "[Build] DeepGEMM migration to torch Stable ABI (#59482)" (#61…
njhill Oct 13, 2026
96fc2da
[Perf][Qwen4Exp] Add SM121 TP=2 merged QSA projection plans (#61437)
TimRen01 Oct 13, 2026
8082b62
[Mooncake] Allow Mamba cache mode `none` for capacity-only workers (#…
wzhao18 Oct 13, 2026
0da66a6
[CI] Shard batch invariance, Kimi prefix cache, EP eval and generate …
khluu Oct 13, 2026
6a03954
[CI] Shard quantization, pooling, multimodal APIs, core kernels and P…
khluu Oct 13, 2026
791f921
[Attention] Set ALWAYS cudagraph support for FA4 (#60908)
TheEpicDolphin Oct 13, 2026
ad8d39c
[Bugfix] Fix DSpark graph-padding handling in the DeepSeek-V4.1 MoE f…
chaunceyjiang Oct 13, 2026
c923e77
[Feat] Add text-only OpenAI Decisions API MVP (#60465)
franciscojavierarceo Oct 13, 2026
7a9d3db
[ROCm] Bump ROCm base images to AITER v1.25.0 (#61230)
josh-schell-amd Oct 13, 2026
f43d7e1
[CI][AMD] Gate Aiter MHA FA on dtype (#60679)
rjrock Oct 13, 2026
87e7dce
[MRV2] Keep warmup out of the EPLB load stats (#56716)
almogtavor Oct 14, 2026
4e0681e
[Quantization] Support packed NVFP4 Qwen4Exp PLE embeddings (#56273)
stecasta Oct 14, 2026
d5e6262
[CI] Shard chat APIs, model evals and model tests automatically (#61475)
khluu Oct 14, 2026
449c05a
[CI][Tests] Upgrade torch version for Rubin prerelease (#61468)
johncalesp Oct 14, 2026
a1f51a0
[ROCm][MLA] Route gfx942 DCP causal multi-token verify to Triton spli…
xaguilar-amd Oct 14, 2026
2308b6f
[Perf][MoE] Cheaper triton_kernels 3.8 routing build in the OAI Trito…
ZhengGong-amd Oct 14, 2026
2521446
[ROCm][Perf] Enqueue the default chain first in CSA/HCA at small batc…
shen-shanshan Oct 14, 2026
f4b8d43
[Bugfix] Keep force-killing the process tree when a child exits mid-w…
liulanze Oct 14, 2026
3ccc0a9
[KV Connector] Support sleep mode with MooncakeConnector over RDMA (#…
aoshen02 Oct 14, 2026
a78d050
[Bugfix] Bump tokenspeed-mla to 2.0.2 to fix nanobind conflict with T…
warrendeng Oct 14, 2026
02d69c6
[Bugfix][Benchmark] Preserve SSE output across transport chunk bounda…
akshan-main Oct 14, 2026
77154ca
[Perf][Model][Qwen4Exp] QSA: decode four FP8 e4m3 bytes per register …
kimseunghyun-kr Oct 14, 2026
a2fb482
[KVConnector][P2P] Register peers off the scheduler thread (#57139)
liranschour Oct 14, 2026
badfcdb
[Perf][GDN] Internal prefill checkpoints for the FlashInfer GDN prefi…
ZJY0516 Oct 14, 2026
ec317a4
[CI] Keep vLLM log propagation on through the first LLM init in caplo…
khluu Oct 14, 2026
30e79c3
[Core] Update PyTorch to 2.14.0, torchvision to 0.29.0, triton to 3.8…
atalman Oct 14, 2026
ec8a372
[ROCm][Bugfix] Pin AITER back to v0.1.24.post1 for DSv4.1 mono decode…
Ronald1995 Oct 14, 2026
4dc5add
[XPU] [Linear] [MXFP8] enable torch as mxfp8 linear backend (#51933)
zufangzhu Oct 14, 2026
e1726d9
[Frontend] Add cache salt and tracing to openai decisions (#61550)
chaunceyjiang Oct 14, 2026
c9bfa57
[Online quantization] Extend re-quantization API to MOE (showcase `NV…
fxmarty-amd Oct 14, 2026
aa0c433
[Frontend] Accept `--reasoning-parser none` as the unset default (#61…
alec-flowers Oct 14, 2026
467b024
[Rust Frontend] Report vllm-proto schema version in ServerInfo (#61533)
alec-flowers Oct 14, 2026
bb1438a
[CI] Fix Unlimited-OCR loading after upstream `model_type` rename (#6…
arpera Oct 14, 2026
d36158f
[CI] Merge the target branch into stale PRs on /ci run (#61592)
khluu Oct 14, 2026
937d6c1
[Perf][GDN] Skip FLA chunk metadata when FlashInfer GDN prefill is ac…
gau-nernst Oct 14, 2026
be4ce2e
[Bugfix] Share PCP-aware local GPU indexing for NUMA binding (#61237)
SherifWaly Oct 14, 2026
8a8e2ba
[Bugfix][Rust Frontend] Inject VLLM_USE_RUST_FRONTEND=1 into `vllm-rs…
Isotr0py Oct 14, 2026
3f466c8
[Bugfix][Parser] Recover genuine tool calls after unclosed Qwen3 <fun…
abhayjoshi201 Oct 14, 2026
f9b65c3
[ROCm][Perf] Make AITER FlyDSL GDN prefill default on gfx942/gfx950 (…
mjkvaak-amd Oct 14, 2026
19aba3e
[Bugfix][RL] Load attention sinks through weight_loader for layerwise…
Ronald1995 Oct 14, 2026
6ecb39e
[Docs] Update structured decisions docs. (#61588)
noooop Oct 14, 2026
c67c69e
[Bugfix][KV Offload] Track allocated block IDs when num_external_toke…
linshi-w Oct 14, 2026
8150355
[ROCm] Disable AITER FP8/FP4 BMM for MLA by default (#53123)
xuebwang Oct 14, 2026
23fbc2e
[Model] Support precomputed image embeddings for LightOnOCR (#61585)
Rapisurazurite Oct 14, 2026
d39c2fb
[Bugfix][Gemma4] Quantize audio towers independently (#59935)
sudhanshu112233shukla Oct 14, 2026
3a5a6b1
[Perf][Model] Batch PaddleOCR-VL vision encoder and projector (#61458)
ssingh231219 Oct 14, 2026
775fefa
[Metrics][KV Offload] Add vllm:kv_offload_config_info - generic info …
amirfr3 Oct 14, 2026
a68dbba
[Bugfix][KV Offload] Retain offload mappings after unsafe KVCR startu…
karya0 Oct 14, 2026
2631afd
[Bugfix][Platform] Fall back to torch when device-level NVML memory i…
hclsys Oct 14, 2026
3723a1e
[Bugfix][Transformers backend] Fix CUDA graph capture for dynamic-rop…
YongfengX Oct 14, 2026
2d09fdc
[Quantization] Auto-disable DeepGEMM for Kolibri 1 on SM12x (#61274)
lucamotz Oct 14, 2026
7115b70
[Bugfix][KV Offload][P2P] Drop a timed-out store job's blocks from th…
sohom-cs Oct 14, 2026
b4b7eca
[Bugfix][Quantization] Clamp FP8 scales before UE8M0 rounding (#58032)
rao-ashish Oct 14, 2026
02653fa
[Bugfix][KV Offload] Fix inaccurate proportional store dropping (#59140)
thuongvu Oct 14, 2026
efad400
[HiSparse] Prefault the shared host pool in parallel (#60869)
Etelis Oct 14, 2026
bf6c80c
[Misc] Remove tool name from warn logs (#59294)
sfbemerk Oct 14, 2026
5d88c03
[Security] Reject local verifier references in Speculators metadata (…
jperezdealgaba Oct 14, 2026
e2aabc8
[Bugfix][KV Offload][P2P] Keep store pins and AbortAck until NIXL tra…
apex-mochen Oct 14, 2026
9e2b579
[Model] Support EAGLE3/DFlash aux hidden states for GraniteMoe and Gr…
ZN1010 Oct 14, 2026
eaf25f6
[NIXL] Prepare KV transfer descriptors as NIXL 1.5 strided lists (#61…
njhill Oct 14, 2026
13dbf96
[Model Loader] Apply EP weight filtering in InstantTensor (#61167)
Etelis Oct 14, 2026
355553a
[ROCm][Perf] Drop two dead per-step ops from the AITER sparse MLA met…
ZhengGong-amd Oct 14, 2026
3e851a7
[Bugfix][Attention] Make the query contiguous for TRTLLM ragged MLA p…
hmellor Oct 14, 2026
e2e3e2b
[CI] Use an ungated model in the DGX Spark XQA test (#61416)
lesj0610 Oct 14, 2026
3895a8b
[Bugfix] Fix TP loading of small block-FP8 MLA gates in BailingMoeV3 …
zexplorerhj Oct 14, 2026
89cab55
[Model] Support Decision 3.0 decision models (vllm-sr/d3) (#61565)
Xunzhuo Oct 14, 2026
2c74fd1
[Model Runner V2] Enable batch-sharded sampling for GPT-OSS (#61257)
Taimys Oct 14, 2026
9d3dfa2
[Benchmark] Add vllm bench forward: exact-shape forward timing (#61339)
WoosukKwon Oct 14, 2026
52a8cc5
[ROCm][CI] Add dtype to the KDA metadata test's fake model config (#6…
Rohan138 Oct 14, 2026
47232f3
[Bugfix][CI] Fix renderers tests broken by tool name removal from war…
ganeshr10 Oct 14, 2026
d3f6b2a
[Frontend] Clean Client Facing 500 Report (#58043)
robertgshaw2-redhat Oct 14, 2026
0b6d07c
[CI/Build] Use FileStore for DeepEP test rendezvous (#56595)
khluu Oct 14, 2026
d1d8e6c
[Perf][Nemotron-Parse] Do image rescale/normalize on the device (#60500)
HangruiCao2000 Oct 14, 2026
e534024
[ROCm][Bugfix][MLA] Fix FP8 MLA prefill unpad for interleave-padded h…
lucas-santos-amd Oct 14, 2026
3f729da
[Perf][ROCm][GLM-5.3-Flash] AITER prefill indexer topk (#60753)
simondanielsson Oct 14, 2026
ae94e9c
[Bugfix] Don't crash DeepGEMM MegaMoE warmup when get_bf16_mega_gate_…
simon-veitner-redhat Oct 14, 2026
c1407a7
[Spec Decode][MRV2] Warm up top-k/top-p and greedy rejection kernels …
zixi-qi Oct 14, 2026
857ddac
[Perf][MRV2] Skip empty draft-token resets on request admission (#61640)
jzakrzew Oct 14, 2026
06265be
[ROCm] Enable fp8 query for Triton attention (#60296)
amd-xavierwang Oct 14, 2026
21e207e
[Bugfix][MRV2][Spec Decode] Honor EAGLE3 single-state draft configura…
sragrawal Oct 14, 2026
e96c822
[Bugfix][ROCm][MiniMax-M3] Reject unbuilt index-head counts in the AI…
AndreasKaratzas Oct 14, 2026
222e00f
[CI/Build] Fix test_deepseek_v41_mxfp8_scale_loading after #57797 (#6…
stecasta Oct 14, 2026
9b5c670
[Bugfix][MRV2] Capture DCP FULL cudagraphs with KV context (#61496)
ayush1399 Oct 14, 2026
4975fda
[Dependency] Upgrade FlashInfer to 0.7.1 (#60948)
wzhao18 Oct 14, 2026
388a610
[Perf][DFlash] Capture context combine and anchor in the draft CUDA g…
Juntian777 Oct 14, 2026
ded7ae3
[Build] Update deep_gemm git tag for locality_domain update (#61491)
cleonard530 Oct 14, 2026
e73fa00
[Bugfix][Frontend] Apply the JSON schema in Cohere Chat v2 response_f…
mottopanikeiku Oct 14, 2026
2622ee2
[ROCm][BugFix] Don't use AITER rms_norm as an IR OP on gfx90a when AI…
rasmith Oct 14, 2026
7c3f7e5
[Perf][DSv4.1] Length-aware candidate block selection in the decode i…
Juntian777 Oct 14, 2026
2e8a593
[Benchmark] Remove the temporary bench forward dummy loader (#61676)
WoosukKwon Oct 14, 2026
fe98d90
[Dependency] Update Humming and remove NVFP4 scale workaround (#61556)
jinzhen-lin Oct 14, 2026
984c242
[Quantization] Support compressed-tensors MXFP4 MoE with FP8 activati…
mgoin Oct 14, 2026
4c5ea86
[Bugfix][Parser] Stream Gemma4 string tool arguments incrementally (#…
bbrowning Oct 14, 2026
9a648b4
[ROCm][Kimi-K3] Don't read W_UK_T before weight loading in the MLA wr…
Rohan138 Oct 14, 2026
a4d553a
Revert "[Build] Update deep_gemm git tag for locality_domain update" …
micah-wil Oct 14, 2026
4b61f30
[CI] Fix /ci run reporting a failed merge on fork PRs (#61684)
khluu Oct 14, 2026
7840bed
[ROCm][CI] Add AMD jobs for test groups that only exist in tes… (#59678)
aarushjain29 Oct 14, 2026
273a049
[ROCm] Bump AITER to v0.1.25 and relax the DSv4.1 mono MoE tolerance …
josh-schell-amd Oct 14, 2026
8530aed
[Spec Decode] Remove Medusa and MLP speculator support (#61701)
WoosukKwon Oct 15, 2026
bfdbfa1
[Bugfix][PCP] Align MoE routing padding with gathered tokens (#60946)
wangyicong52 Oct 15, 2026
e57bb4a
[Core] Remove the legacy Ray compiled-graph executor (#61712)
WoosukKwon Oct 15, 2026
2abd479
[ROCm][CI] Add AMD job for DeepSeek-V4.1 Mono Decode Numerics (#61720)
aarushjain29 Oct 15, 2026
de2b869
[Bugfix][Kernel] Register int8 scaled_mm as a custom op (#57331)
limkcreply Oct 15, 2026
429a3da
[Bugfix][ROCm][Disagg] Allow MoRIIO HMA per-layer block_len (#58585)
avininjamay8 Oct 15, 2026
5d5c3d7
[Bugfix] Preserve padding token types for cross encoders (#58143)
XFDG Oct 15, 2026
f46021a
[ROCm][Perf] Enable DPA+ETP prefill compute/comm dual-batch-overlap f…
shen-shanshan Oct 15, 2026
10d2c60
[ROCm][DSv4.1] Enable DSpark adaptive verification (#58151)
tuukkjs Oct 15, 2026
833665c
[ROCm][DI] Enable MoRI FP4 dispatch for mxfp4 w4a4 moe (#59596)
lcskrishna Oct 15, 2026
ff5a91a
[Feature][Model Loader] Apply model-owned MTP shard selection to RunA…
zhy76 Oct 15, 2026
96b5b0e
[Model] Enable torch.compile and CUDA graphs for EmbeddingGemma2 (#61…
Vivaansharma2003 Oct 15, 2026
81e1c3f
[XPU][MLA] Integrate XPU MLA support into the existing FLASH_ATTN_MLA…
ZhouXiaoya25 Oct 15, 2026
3f1bcfd
[Bugfix][KV Offload] Bound unanswered P2P lookup waits (#56836)
jacklin78911-collab Oct 15, 2026
a400804
[CI] Relax MTP sharded sampling cross-boot noise bound (#57026)
khluu Oct 15, 2026
6605802
[Perf][KV Connector][Mooncake] Send the KV layout once per peer (#59825)
staryxchen Oct 15, 2026
5341b5b
[KV Offload] Pin only each worker's own offload slots (#59544)
Etelis Oct 15, 2026
c54dca9
[Bugfix][Benchmark] Fix probe latency and duration in bench serve (#6…
QHarshil Oct 15, 2026
c5f8adc
[KV Offload] Expose OffloadingManager.lock()/unlock() and service the…
liranschour Oct 15, 2026
a9fe30e
[Bugfix][Multimodal] Recover PyNvVideoCodec decoder slots after failu…
danielafrimi Oct 15, 2026
ab59367
[CI][XPU] Ignore test_reload.py on Intel CI (#61740)
chaojun-zhang Oct 15, 2026
32feecd
[CI] Pin DeepSeek-V4.1-Flash-NVFP4 eval to its FP8-Engram revision (#…
khluu Oct 15, 2026
8f111b2
[CI] Run 4xB200 steps nightly only (#61541)
khluu Oct 15, 2026
85c94c1
[Tests][XPU] Skip modelopt_fp4 online MoE re-quantization test on XPU…
chaojun-zhang Oct 15, 2026
91ed285
[CPU][Zen] Update zentorch to 2.14.0.1 & enable float16 on Venice and…
ganeshr10 Oct 15, 2026
8fa5ae8
[Frontend] Let an unset `--tool-strict-level` fall back to the tool p…
BugenZhao Oct 15, 2026
fc8e08a
[Bugfix][KV Offload] Do not let mark_miss() flip a pending or in-flig…
sohom-cs Oct 15, 2026
48f17b7
[Bugfix] Reject mismatched float16/bfloat16 KV cache dtype (#60885)
cipheraxat Oct 15, 2026
1c4c319
[Frontend] Advertise `--enable-x`/`--disable-x` for boolean CLI flags…
mgoin Oct 15, 2026
b965ee5
[Chore] Use upstream Transformers DeepseekV4Config (#61392)
hmellor Oct 15, 2026
0f0bc4d
[Test] Split the chat_utils tests. (#61765)
noooop Oct 15, 2026
7f730b4
[CI] Run 4xH100 steps nightly only (#61782)
khluu Oct 15, 2026
427915b
[Build][CPU] Install Run:ai Model Streamer in vllm-openai-cpu image (…
dkhachyan Oct 15, 2026
80dd705
[Frontend] Make finish_reason and Responses item status truthful (#59…
sfeng33 Oct 15, 2026
7020600
[KV Connector][NIXL] Register packed MLA KV rows as a single region (…
NickLucche Oct 15, 2026
716c522
[Model] Add AliceAI support (#57963)
timka-byzov Oct 15, 2026
6fe7401
[Perf] Read VLLM_COMPUTE_NANS_IN_LOGITS once per IterationStats (#61710)
peilii Oct 15, 2026
e10c10a
[Core] Add PROMOTION_LATENCY histogram metric for tiering offload (#5…
zdtsw Oct 15, 2026
365aaa7
[Bugfix][DSv4] Remap Quark MTP layer_quant_config onto draft prefixes…
jimmy-adams Oct 15, 2026
81e42c9
[Feature][Frontend] Control the log level of request JSON body using …
talorabr Oct 15, 2026
8b27d27
[Bugfix][KV Offload] Always attempt NIXL agent removal during peer te…
nej1gotnochill Oct 15, 2026
e8e1e96
[ROCm][DSv4] AITER MegaMoE Fixed-Slot Dispatch For DeepSeek-V4 (#61262)
micah-wil Oct 15, 2026
c6b772c
[Bugfix][Frontend] Emit kv/ec transfer params at the top level of ren…
hickeyma Oct 15, 2026
252be28
[Frontend] Replace return_mm_kwargs with an mm_payload enum on render…
hickeyma Oct 15, 2026
9cede34
[Bugfix] Create cuBLAS handles before memory profiling to avoid OOM (…
laithsakka Oct 15, 2026
766c837
[Model] Support every Decision 3.0 size (d3-flash, d3-mini, d3-nano, …
Xunzhuo Oct 15, 2026
1463501
[Bugfix] Terminate streaming sessions on ABORT/ERROR and prevent zomb…
sawsa307 Oct 15, 2026
0951fc1
[ROCm][DSv4.1] Disambiguate ROCm attention class names (#58689)
tuukkjs Oct 15, 2026
71536bd
[MM][CG] Support ViT full CUDA graph for DeepSeek-VL2 (#46005)
littlecircle0730 Oct 15, 2026
b7b20b1
[Bugfix][Frontend] Leave the final stop token out of chat derender te…
khluu Oct 15, 2026
6942584
[Bugfix][CPU] Report the real cause when the worker outgrows its memo…
mosafariuk Oct 15, 2026
24f632c
[Bugfix] Engage indexer TP row sharding on total rows, not per-rank r…
zigzagcai Oct 15, 2026
d12d546
[Bugfix][MoE] Keep routing rows during DeepSeek V4.1 decoder replay (…
Ronald1995 Oct 15, 2026
011fa68
[ROCm][Perf] Pad fp16/bf16 GEMM weight row stride for L2 cache (#55090)
mgehre-amd Oct 15, 2026
3dcfaeb
[Frontend] Apply each endpoint's top_logprobs cut in derender (#59518)
yinli-systems Oct 15, 2026
a97d19d
[UMBP][1/10] Add shared connector, runtime contracts, and request lif…
charxwu Oct 15, 2026
c825e1d
[Perf] Fuse the mamba align block-table gather into one Triton kernel…
fululi12 Oct 15, 2026
ed3050a
[Core] Apply prefill_schedule_interval outside data parallelism (#54627)
fululi12 Oct 15, 2026
d6f0b7a
[CI] Skip exited descendants when finding the worker in the FT e2e te…
okorzh-amd Oct 15, 2026
a9e90b9
[Bugfix][Frontend] Reject Cohere REQUIRED tool choice without tools (…
KuanJia Oct 15, 2026
957d512
[Bugfix][Frontend] Preserve streaming chunk boundaries in RequestOutp…
sawsa307 Oct 15, 2026
338dab0
[Bugfix] Fix Apertus streaming scientific notation (#61812)
bzsuni Oct 15, 2026
7cd7982
[Spec Decode] Don't reserve DFlash/DSpark draft slots in the schedule…
zixi-qi Oct 15, 2026
4f49b55
[MoE] Shape-based padding for FlashInfer TRT-LLM MXFP8 experts (gated…
jhaotingc Oct 15, 2026
47fd76e
[ROCm][Perf] Route softmax MoE top-k, including fused shared-expert s…
mjkvaak-amd Oct 15, 2026
4d9a8d6
[Bugfix] Make Humming DeviceInfo lookups traceable under torch.compil…
mgoin Oct 15, 2026
4d58fa2
[MoE] Unify DeepGEMM MegaMoE experts behind one feature-matrix layer;…
zyongye Oct 15, 2026
82b9cca
[Perf][MoE] Skip the TRTLLM fp8-block activation-scale transpose copy…
gau-nernst Oct 15, 2026
105605b
[ROCm] Support DeepSeek-V4 hash routing in AITER Triton W4A16 MoE (#6…
Rohan138 Oct 15, 2026
49f944b
[Perf][HiSparse] Reuse pinned host pool after graph profiling (#61668)
Etelis Oct 15, 2026
d486219
[Bugfix][Core] Uncount stop-trimmed spec tokens from num_computed_tok…
sawsa307 Oct 15, 2026
d12ea8e
[Bugfix][MRV2] Keep input_ids on later PP stages for raw-token models…
booth-algo Oct 15, 2026
1653287
[CI] Shard four more AMD mirrors automatically (#61860)
Thangnguyenvn98 Oct 15, 2026
21f4b6d
[KV Offload] Split the CPU offload region across shm files (#59546)
Etelis Oct 15, 2026
ee8c479
[CI] Use an ungated model as the attention test config default (#61732)
lesj0610 Oct 15, 2026
54d9b1c
[GLM5.3 Perf] Inplace update draft decode metadata, 1.7% E2E Throughp…
yewentao256 Oct 15, 2026
c414bf0
[CI] Shard four AMD mirrors automatically (#61817)
Thangnguyenvn98 Oct 15, 2026
33212db
[KV Connector][NIXL] Reject NVFP4 KV cache with heterogeneous TP head…
NickLucche Oct 15, 2026
f8460ef
[Kernel][DSv4.1] Bump FlashMLA to the 2026.09.30 release and its inte…
Juntian777 Oct 15, 2026
0c25849
[ROCm][Perf][Bugfix] Probe the preshuffled FP4 GEMM config by logical…
mjkvaak-amd Oct 15, 2026
9edcc7f
[Bugfix][Spec Decode] Avoid reusing random draws across block verific…
DimensionSTP Oct 15, 2026
9b99ccb
[CI] Shard the AMD mirrors of the DP, RayExecutorV2 and batch invaria…
Thangnguyenvn98 Oct 15, 2026
e711723
[ROCm] gfx1250 optimizations and model enablement (#58800)
jpvillam-amd Oct 15, 2026
d92a4f2
[watermarking] Add DFlash support to dual-key gumbel-max watermarking…
shernshiou Oct 15, 2026
784d1ff
[MRV2][Spec Decode] Quantized draft lm_head for drafters that share t…
stecasta Oct 15, 2026
de7d706
[Perf] Low-latency CPU all-reduce for DP metadata syncs (#61767)
njhill Oct 15, 2026
3f1e572
[ROCm][Perf][Kimi-K3] Use AITER Gluon KDA kernels for decode and spec…
omuhamma Oct 15, 2026
4a89316
[Core] Drop the Ray driver-node GPU pin left over from the legacy exe…
WoosukKwon Oct 15, 2026
19b0efc
[Perf][Core] Skip the null head of sliding-window block tables (#61724)
Juntian777 Oct 15, 2026
af28c17
[Dependency] Upgrade FlashInfer to 0.7.2 and restore KDA auto backend…
Anerudhan Oct 16, 2026
ef38e8d
[Model][Hardware][AMD][Kernel] Part 2/2 -> Enable e2e QK Norm + RoPE …
jhu960213 Oct 16, 2026
a8be150
[Bugfix][MoE] Restore TP-sharded routed-expert capture for DP=1 (#61388)
Ronald1995 Oct 16, 2026
8f93c64
[Bugfix] remove duplicate hash-routing capability method (#61924)
tessapham Oct 16, 2026
bee9514
Update DeepGEMM commit (#61744)
jeejeelee Oct 16, 2026
a956a81
[Bugfix][MoE] Keep the gate's hash_indices_table out of RoutedExperts…
khluu Oct 16, 2026
29345f4
[ROCm][Qwen4Exp] Support HC and MoE sequence parallelism on ROCm (#61…
AndreasKaratzas Oct 16, 2026
fb3fec9
[Bugfix][Kernel] silu_and_mul_quant: run the vectorized loop (#61716)
Monishver11 Oct 16, 2026
dd9e07a
[Feature] Add External LB Mode Support for Elastic EP Scaling (#43202)
fangyuchu Oct 16, 2026
05ad0a8
[Perf][DSv4.1] Split fused_wqa_wkv by token across TP ranks on SM90 (…
ShuoleiWang Oct 16, 2026
3ddc670
[XPU][Docker] Bump nixl to 1.5.0 (#60356)
sandeep-maddipatla Oct 16, 2026
642c18d
[Perf] Kimi K3 Specialized Decode: CuTeDSL Optimized GB300 (1.5-2x) (…
benchislett Oct 16, 2026
b466fba
[ROCm][Perf] Any-shape low-latency MoE router GEMM on MI355 (#61895)
AndreasKaratzas Oct 16, 2026
92dc3dd
[Bugfix] Honor OPT token embedding width for prompt embeddings (#61736)
maithilijoshi20 Oct 16, 2026
4ac1f8d
[Bugfix][Structured Output] Mask grammar-invalid implicit reasoning e…
vMaroon Oct 16, 2026
49cb2bb
[Bugfix] Honor code_revision in config-based tokenizer loading (#61611)
dskwe Oct 16, 2026
e365792
[Dependency] Upgrade TokenSpeed MLA to 2.0.3 (#61689)
wzhao18 Oct 16, 2026
074c83a
[CI][Intel] Skip ROCm-only test_topk_gating_enabled_by_cdna on XPU (#…
chaojun-zhang Oct 16, 2026
fa75d34
[Feature][PCP] Add DeepSeek-V4.1-Flash support (#59857)
wangyicong52 Oct 16, 2026
bb408ec
[Frontend][Multimodal] Accept features together with content_parts in…
aoshen02 Oct 6, 2026
4ab1359
[Docs] Document multimodal inputs on /inference/v1/generate
aoshen02 Oct 6, 2026
7e80eab
Return 400 when a placeholder cannot be matched to its item
aoshen02 Oct 6, 2026
86ed29b
Address review: clearer ordering error, no request mutation, cache test
aoshen02 Oct 16, 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
  •  
  •  
  •  
72 changes: 72 additions & 0 deletions .agents/skills/model-microbenchmark/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
name: model-microbenchmark
description: Time a vLLM model's forward pass on exact batch shapes (decode, prefill, chunked prefill, prefix hit, spec-decode verify, or mixes) with `vllm bench forward`, single-GPU or DP/TP/EP across nodes. Use for per-step model latency, layout/parallelism comparisons, and checking a model-level optimization. Not for single kernels (use kernel-microbenchmark) or end-to-end serving (use `vllm bench serve`).
---

# Model Microbenchmark (`vllm bench forward`)

Builds the batch without the scheduler, runs it through MRV2's real
`execute_model`, and times the forward as a one-shot CUDA graph (prefill
included). Sampling, the speculator, and CPU step overhead are excluded, so
expect results somewhat below a serving step.

## Usage

```bash
vllm bench forward --model deepseek-ai/DeepSeek-V4-Flash \
--case decode=64*1@8192 --case prefill=8192 --case mix=4096,32*1@8192

# DP/TP/EP: one process per GPU (multi-node: add --nnodes/--node-rank/--master-addr)
torchrun --nproc-per-node=4 -m vllm.entrypoints.cli.main bench forward \
--model ... -dp 4 --enable-expert-parallel --case decode=128*1@100000
```

Requests: `[N*]Q[@K][c][:D]`, comma-separated, per DP rank.

| Form | Meaning |
| --- | --- |
| `8192` | fresh prefill, 8192 tokens |
| `32*1@8192` | 32 decodes, KV length 8192 (KV length **includes** the query) |
| `4@4096:3` | spec-decode verify, 3 draft tokens |
| `2048@10240` | prefill after an 8192-token prefix-cache hit |
| `2048@10240c` | chunked prefill: the prefix came from earlier chunks |

Hit vs chunk only differs on models with SWA bounded replay (DSV4.1): a hit
also recomputes the last window (128 tokens) of the prefix.

Or `--shapes file.json|yaml`:
`{"cases": [{"name": ..., "requests": [{"query_len", "kv_len", "num_draft_tokens", "chunked", "count"}]}]}`.

Key flags (plus all `EngineArgs`):

- `--kv-len-jitter 0.5` (default): prefixes drawn within ±50%, same on every
DP rank, capped at `max_model_len`. Use `0` for exact lengths.
- `--routing auto|real|balanced`: `auto` = balanced with dummy weights.
- `--iters 20 --samples 5`, `--output-json out.json` (per-rank latency stats,
`samples_us`, graph-vs-eager check).
- Defaults: `--load-format dummy`, prefix caching off, no torch.compile.

Read `median_us` (each replay is already the max over ranks).

## Caveats

- **Dummy weights lie for data-dependent kernels.** Dummy gates route every
token to the same experts (hence balanced routing). Cross-check suspicious
kernels with real weights.
- **torch.compile models (e.g. Qwen3/3.5) look slow**: no compile here. Use
them for correctness only; trust perf for models under `vllm/models/`.
- `sample spread > 0.5%` warns of unstable timing. DSV4.1 DEP prefill is
inherently ~0.5–1% (MegaMoE cross-rank sync, host engram reads).
- `graph_vs_eager` may be nonzero for small batches where models branch on
`is_current_stream_capturing()`; that's expected, not a bug.
- KV cache is zero-initialized (`--kv-init zeros`); random KV was within 3%.
- Uniform DP only: every rank gets the same case; no idle ranks.
- CUDA only: it hangs on ROCm (untested cause: likely the in-graph timing
events).
- Large prefills/prefix hits need room: raise `--max-num-batched-tokens` /
`--max-model-len` / `--gpu-memory-utilization` if build fails on KV blocks.
- Startup cost is JIT/autotune, not the bench: install FlashInfer jit-cache
and cubin; DeepGEMM warmup is skipped (each case's eager pass compiles its
own shapes).
- To compare against serving decode: `vllm bench latency` with 65- vs
1-token outputs, divided by 64, with a FULL decode graph.
2 changes: 2 additions & 0 deletions .agents/skills/pr-checklist/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ Summarize model evaluations and benchmarks in compact tables with the configurat

When fixing bugs or issues, provide a clear root-cause analysis. Explain what caused the problem, how it was identified, and why the chosen solution effectively addresses it. A patch which resolves the issue without a proper root-cause analysis may lead to recurring problems and increased maintenance overhead.

For fixes that involve disaggregated prefill/decode (PD) logic, such as the NIXL connector (`vllm/distributed/kv_transfer/kv_connector/v1/nixl/`), make a best effort to include a minimal example of the flow being changed and/or the initial flow that caused the failure. A short numbered sequence (or diagram) of a request's path across the P and D instances, e.g. scheduler admission, prefill execution, KV transfer registration and write, decode-side read, token generation, lets reviewers trace the root cause and the fix without reconstructing the distributed flow from the diff. Keep the example minimal: only the steps and components involved in the change. See the [disaggregated prefill](../../../docs/features/disagg_prefill.md), [NIXL KV push](../../../docs/design/nixl_kv_push_connector.md), and [NIXL KV cache lease](../../../docs/design/nixl_kv_cache_lease.md) docs for the flows involved.

#### 4.4: Implementation Details

Provide a detailed explanation of the implementation, including design decisions, trade-offs, and any relevant technical details. Highlight any non-obvious choices, tradeoffs, potential limitations, and areas where maintainer attention is required.
Expand Down
191 changes: 191 additions & 0 deletions .agents/skills/transformers-upgrade/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
---
name: transformers-upgrade
description: "Playbook for changing vLLM's Transformers version bounds. Use when bumping the pinned or maximum Transformers version, raising the minimum Transformers version, or deleting vendored configs, processors, or compat shims that upstream Transformers now provides."
---

# Upgrading Transformers

The supported range lives in `requirements/common.txt`. CI pins one exact
version in `requirements/test/*.in` and the compiled `requirements/test/*.txt`.
A version change is one of two jobs, and they usually come as a pair:

- **Bump the pin**: a new Transformers release becomes the CI version and
the upper bound. vLLM grows compat code for it.
- **Raise the floor**: the minimum moves up. That compat code, and every
vendored config or processor upstream now ships, becomes dead weight.
Every floor raise ends with an **unvendoring pass**.

## Bump the pin

1. Edit the pin line in each `requirements/test/*.in` and `*.txt` and the
upper bound in `requirements/common.txt`. Past bumps edit only the pin
line in the compiled files; see `git log -- requirements/common.txt`.
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.
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.

## Raise the floor (unvendoring pass)

### 1. Inventory

Inventory candidates with the floor version installed (no vLLM install needed):

```bash
uv run --no-project --with transformers==<floor> \
python .agents/skills/transformers-upgrade/scripts/find_upstreamed.py
```

It lists:

- vendored configs whose `model_type` upstream now owns;
- `_CONFIG_REGISTRY` overrides of upstream types;
- registered processors that collide with upstream class names or models;
- version-gated code at or below the floor;
- code that reads the installed Transformers version, whatever its threshold;
- patches citing a Transformers issue or PR (with whether a referenced PR is
in the floor release) or a future minimum version.

It finds candidates by name only. Every hit still needs a verdict.

### 2. Port each candidate to upstream

Every hit is deleted by default. A vendored copy is a liability: it drifts
from upstream, hides upstream fixes, and shadows the native class. Port the
vLLM model code to the upstream schema instead, renaming attribute reads and
deriving values from upstream fields.

Fan candidates out to parallel subagents. Each one compares the vendored and
upstream classes, then greps every attribute the vLLM model code reads.
[Upstreaming hazards](#upstreaming-hazards) lists the usual fixes.

Keep a vendored class only when upstream cannot load a checkpoint vLLM must
keep serving, and record why in the PR description. A different upstream
schema, a model-code rewrite, or a needed eval is work for the PR, not a
reason to keep.

### 3. Prove it on real checkpoints

For every checkpoint in `tests/models/registry.py` that uses a ported
config, dump what vLLM builds before and after the change, then diff the two.
Run both dumps; each catches what the other misses:

- `dump_configs.py`: the resolved config, attribute by attribute.
- `dump_model.py`: the model built on the meta device with no GPU or weights.
It records ModelConfig sizes, every parameter shape, and every module's
scalar attributes (`head_dim`, `num_kv_heads`, `scaling`, ...). Missing
fields that are read with defaults only show up here.

```bash
git worktree add --detach <scratch>/vllm-base upstream/main
S=.agents/skills/transformers-upgrade/scripts
for dump in dump_configs dump_model; do
PYTHONPATH=<scratch>/vllm-base .venv/bin/python $S/$dump.py before.jsonl <repos>
PYTHONPATH=$PWD .venv/bin/python $S/$dump.py after.jsonl <repos>
.venv/bin/python $S/diff_dumps.py before.jsonl after.jsonl
done
```

Add `--trust-remote-code` for checkpoints whose `config.json` has an
`auto_map`, and dump both ways.

How to read the diffs:

- **A `<MISSING>` config field the model reads:** this crashes or silently
falls back to a default. Port the model code to the upstream field.
- **New upstream-only defaults** (`attention_bias=False`,
`pad_token_id=None`): usually benign. A model diff of 0 confirms it.
- **Any model diff:** this is a numerics change, and the PR needs a model
eval. For example, A.X-K1 gained the checkpoint's YaRN rope scaling, which
the vendored class had been dropping; it shows up as
`layers.*.self_attn.scaling (x61)`.

### 4. Delete

For each deleted config:

- Delete the file.
- Remove its entries from `_CLASS_TO_MODULE` and `__all__` in
`vllm/transformers_utils/configs/__init__.py`.
- Remove its entries from `_CONFIG_REGISTRY` in
`vllm/transformers_utils/config.py`.
- Switch every importer, including tests, to `from transformers import ...`.
- Remove the `source_file_dependencies` lines naming the file from
`.buildkite/`.

Deleted processors follow the same steps in
`vllm/transformers_utils/processors/__init__.py`.

Before merging, rebase and grep again for the old field names: PRs that land
in between still read them.

Done when every line of the inventory output is deleted, or kept with a
reason that meets the bar in step 2. The PR also carries the config diff
results and evals for any changed values.

## Upstreaming hazards

Upstream configs are `@strict` dataclasses. Checkpoint keys upstream does not
declare survive as plain attributes, but only when the checkpoint sets them.
Defaults that only vLLM sets, and values vLLM derives, vanish.

| Hazard | Signal | Fix |
| --- | --- | --- |
| Upstream consumes legacy keys | `__post_init__` pops keys the model reads (`deepseek_v4` `compress_ratios`) | Read the upstream replacement (`layer_types`, `mlp_layer_types`, per-layer `rope_parameters`) |
| Renamed or dropped fields | Diff shows `<MISSING>` for a field the model reads | Read the upstream name; derive dropped flags from what implies them (`enable_moe_block` from `num_experts`) |
| Undeclared field without a default | `config.x` raises `AttributeError` for configs that omit `x`, e.g. minimal test configs (A.X-K1 `scoring_func`). Dumps of real checkpoints miss it | Upstream ignoring `x` usually means vLLM can stop reading it; if vLLM truly needs it, read `getattr(config, "x", <old default>)` |
| Top-level config stops forwarding | The vendored top-level config forwarded reads to `text_config`; upstream does not. `getattr(config, "x", default)` silently takes the default, e.g. on MTP draft configs from `SpeculativeConfig.hf_config_override`, which the dumps do not build | Read from `get_text_config()`; grep `getattr` reads of every field, including speculative-decoding paths |
| Type check on the config | `ctx.get_hf_config(SomeConfig)` relies on the vendored base class | Accept the upstream class too, e.g. a `Cosmos3ProcessingInfo` overriding `get_hf_config` |
| Remote code takes over | Checkpoint `config.json` has `auto_map`; with `--trust-remote-code`, the hub class replaces the native one once vLLM stops registering its own | Check the remote class loads; if not, register the upstream class for that `model_type` |
| Read-only upstream fields | Properties or derived fields break subclasses and `hf_overrides` (`nemotron_h` `hybrid_override_pattern`) | Override the source field (`layers_block_type`) instead |
| Behavioural rewrite | Upstream derives fields differently (`diffusion_gemma` `sliding_window`) | Upstream matches the reference implementation; verify with an eval |
| Original checkpoint format | Upstream targets `-hf` conversions; vLLM serves the originals (`qwen3_asr`, `qianfan_ocr`) | Keep only if upstream cannot load the original at all |
| Processor output contract | Model code consumes keys upstream does not emit | Port the model to upstream's keys |
| Name collision | A registered vendored processor shares an upstream class name and hijacks `get_processor` (`InternVLProcessor`) | Drop the registry entry |

Version gates from the inventory need a decision:

- **Code** only reachable below the floor is deleted. This covers:
- comparisons against `TRANSFORMERS_VERSION`;
- branches labelled `# Transformers < X`;
- fallbacks for fields that upstream configs now always set, e.g.
`mlp_layer_types`, `per_layer_config` or legacy `layer_types` names.

A `skipif` whose condition is now always true becomes an unconditional
`skip` with the same reason.
- **`min_transformers_version`** at or below the floor is removed.
- **`max_transformers_version`** below the floor means CI never tests that
model; report it rather than deleting it silently.
- **Patches citing a Transformers issue or PR:**
- Delete the patch when its fix is in the floor release.
- For an issue, find the PR that closed it and check that PR. A closed
issue is not a fixed one: issues get closed while the bug is still in
the release.
- Re-run the patched behaviour before deleting. A fix in the release does
not always cover vLLM's path: Emu3's processor gained BOS upstream, but
vLLM tokenizes without the processor.
- Links that only explain a design choice (e.g. a float32 RoPE note) are
not patches; leave them.

## Testing

```bash
.venv/bin/python -m pytest tests/transformers_utils tests/config tests/tokenizers_
.venv/bin/python -m pytest tests/models/multimodal/processing/test_common.py -k "<models>"
```

Add `tests/models/test_initialization.py -k "<archs>"` where a GPU is
available, and a model eval for any model whose resolved config changed.

Models in `vllm/models/` are high priority: whenever their config or model
code changes, run GSM8k (`tests/evals/gsm8k/`) and GPQA Diamond
(`tests/evals/gpt_oss/`) on `main` and the branch, even when the dumps show
no diff, and put both scores in the PR. FlashInfer autotuning picks kernel
tactics afresh on every server start, which moved DeepSeek-V4-Flash GSM8k by
about 1 point; pass `--kernel-config '{"enable_flashinfer_autotune": false}'`
to both servers so greedy outputs are comparable.
4 changes: 4 additions & 0 deletions .agents/skills/transformers-upgrade/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Transformers Upgrade"
short_description: "Bump vLLM's Transformers version and delete vendored code upstream now provides."
default_prompt: "Use $transformers-upgrade to raise the minimum Transformers version and remove vendored configs, processors, and shims it makes redundant."
51 changes: 51 additions & 0 deletions .agents/skills/transformers-upgrade/scripts/diff_dumps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Diff two dump_configs.py or dump_model.py outputs, per repo.
python diff_dumps.py before.jsonl after.jsonl
"""

import json
import sys
from collections import Counter

import regex as re

IGNORED = {"transformers_version", "_name_or_path", "architectures", "auto_map"}


def load(path: str) -> dict[str, dict]:
with open(path) as f:
return {record["repo"]: record for record in map(json.loads, f)}


def diff(before: dict, after: dict, prefix: str = ""):
for key in sorted(set(before) | set(after)):
if key in IGNORED:
continue
old, new = before.get(key, "<MISSING>"), after.get(key, "<MISSING>")
if isinstance(old, dict) and isinstance(new, dict) and key != "rope_parameters":
yield from diff(old, new, f"{prefix}{key}.")
elif old != new:
yield f"{prefix}{key}", json.dumps(old), json.dumps(new)


def collapse(diffs) -> Counter:
"""Merge diffs that differ only by layer index, e.g. `layers.*.scaling`."""
return Counter(
(re.sub(r"\.\d+\.", ".*.", path), old, new) for path, old, new in diffs
)


before, after = load(sys.argv[1]), load(sys.argv[2])
for repo, old in before.items():
new = after.get(repo, {"error": "missing from after"})
if "error" in old or "error" in new:
print(f"== {repo}\n before: {old.get('error', 'ok')}")
print(f" after: {new.get('error', 'ok')}")
continue
diffs = collapse(diff(old["cfg"], new["cfg"]))
print(f"== {repo}: {old['cls']} -> {new['cls']} ({sum(diffs.values())} diffs)")
for (path, old_value, new_value), count in diffs.items():
times = f" (x{count})" if count > 1 else ""
print(f" {path}{times}: before={old_value} after={new_value}")
30 changes: 30 additions & 0 deletions .agents/skills/transformers-upgrade/scripts/dump_configs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
"""Dump the config vLLM resolves for each checkpoint, one JSON line per repo.
Run once per vLLM tree (before and after a change), then compare the two
outputs with diff_dumps.py:
PYTHONPATH=<vllm tree> .venv/bin/python dump_configs.py out.jsonl <repo>...
Pass --trust-remote-code to resolve checkpoints the way users who set it do.
"""

import json
import sys

from vllm.transformers_utils.config import get_config

out, *args = sys.argv[1:]
trust_remote_code = "--trust-remote-code" in args
with open(out, "w") as f:
for repo in (arg for arg in args if arg != "--trust-remote-code"):
try:
config = get_config(repo, trust_remote_code=trust_remote_code)
cls = f"{type(config).__module__}.{type(config).__name__}"
record = {"repo": repo, "cls": cls, "cfg": config.to_dict()}
except Exception as e:
error = f"{type(e).__name__}: {e}".splitlines()[0]
record = {"repo": repo, "error": error}
f.write(json.dumps(record, default=str, sort_keys=True) + "\n")
f.flush()
Loading
Loading