Repository navigation
[bitlane] Sync with upstream main 2026-10-21 (13 patches kept, 1 dropped: merged upstream) - #7
Draft
reyanshsolis wants to merge 198 commits into
Draft
reyanshsolis wants to merge 198 commits into
reyanshsolis wants to merge 198 commits into
Conversation
Signed-off-by: Iryna Boiko <iboiko@habana.ai> Signed-off-by: Iryna Boiko <iryna.boiko@intel.com> Co-authored-by: Kunshang Ji <kunshang.ji@intel.com> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: Li, Tianmu <tianmu.li@intel.com>
…llm-project#61836) Signed-off-by: wentian-byte <2990624738@qq.com> Co-authored-by: vllm-agent <claw@inferact.ai> Co-authored-by: Wentao Ye <44945378+yewentao256@users.noreply.github.com>
Signed-off-by: Li, Tianmu <tianmu.li@intel.com> Co-authored-by: Codex <noreply@openai.com>
…n Responses output parsing (vllm-project#58385) Signed-off-by: Luu Bao Long <longbaoluu68@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Isotr0py <Isotr0py@outlook.com> Co-authored-by: Xun Sun <UNIDY2002@outlook.com> Co-authored-by: Isotr0py <Isotr0py@outlook.com>
…llm-project#60792) Signed-off-by: ahmed xijiaat <52128022+xijiaat@users.noreply.github.com> Signed-off-by: Robert Shaw <robertgshaw2@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Robert Shaw <robertgshaw2@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…vllm-project#62375) Signed-off-by: Chaojun Zhang <chaojun.zhang@intel.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…th (vllm-project#61965) Signed-off-by: Harshal Adhav <harshal.adhav@amd.com>
… attention and mamba layers (vllm-project#61726) Signed-off-by: Jun Kang Chow <junkangchow@gmail.com> Signed-off-by: tjtanaa <tunjian.tan@embeddedllm.com> Co-authored-by: vllmellm <vllm.ellm@embeddedllm.com> Co-authored-by: Hongxia Yang <hongxia.yang@amd.com> Co-authored-by: TJian <tunjian.tan@embeddedllm.com>
…1488) Signed-off-by: aoshen02 <aoshen@inferact.ai> Signed-off-by: fh3 <a@b> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: fh3 <a@b> Co-authored-by: Kevin H. Luu <khluu000@gmail.com> Co-authored-by: vllm-agent <claw@inferact.ai> Co-authored-by: Nick Hill <nickhill123@gmail.com>
…m-project#62205) Signed-off-by: surajm20061998 <surajm20061998@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…epSeek-V4.1-Flash (vllm-project#62183) Signed-off-by: wangyicong <wangyicong@bytedance.com> Co-authored-by: OpenAI Codex <noreply@openai.com> Co-authored-by: Lucas Wilkinson <LucasWilkinson@users.noreply.github.com>
…llm-project#62010) Signed-off-by: bzsuni <bingzhe.sun@daocloud.io>
…draft-model speculative decoding (vllm-project#53987) Signed-off-by: eecspan <yudongpyd@163.com> Signed-off-by: yudong <yudong@minimax.com> Co-authored-by: yudong <yudong@minimax.com>
…#60118) Signed-off-by: Juntian Liu <Juntianl777@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oject#55537) Signed-off-by: jackLei0901 <42642542+jackLei0901@users.noreply.github.com>
… (thinking_token_budget + spec decode emits token 0) (vllm-project#58231) Signed-off-by: Gilad Zamoscinski <gilad.z@taboola.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: tomeras91 <57313761+tomeras91@users.noreply.github.com>
…vllm-project#60179) Signed-off-by: paul <paulqwer.cs13@nycu.edu.tw>
vllm-project#60553) Signed-off-by: Tianyu Guo <guoty@inferact.ai> Co-authored-by: vllm-agent <claw@inferact.ai>
…er (vllm-project#61943) Signed-off-by: whx-sjtu <56632993+whx-sjtu@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…uard (vllm-project#60816) Signed-off-by: Mikko Tukiainen <Mikko.Tukiainen@amd.com>
… on hybrid models (vllm-project#61192) Signed-off-by: SCcagg5 <sccagg5@gmail.com> Co-authored-by: Chauncey <chaunceyjiang@gmail.com>
Signed-off-by: Jee Jee Li <jeejeelee@inferact.ai> Signed-off-by: Jared Wen <jaredwen@inferact.ai> Signed-off-by: Dakai An <dakaian108@gmail.com> Co-authored-by: chensiyu <chensiyu@stepfun.com> Co-authored-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: Isotr0py <mozf@inferact.ai> Co-authored-by: Jared Wen <jaredwen@inferact.ai> Co-authored-by: Perkz Zheng <67892460+PerkzZheng@users.noreply.github.com> Co-authored-by: Dakai An <dakaian108@gmail.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Dakai An <77474977+andakai@users.noreply.github.com> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: Andreas Karatzas <akaratza@amd.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…e beam search (vllm-project#62253) Signed-off-by: Yuan Li <dskwelmcy@163.com> Co-authored-by: Hermes Agent <hermes@nousresearch.com> Co-authored-by: Hermes Agent <noreply@nousresearch.com>
…fusion (vllm-project#61345) Signed-off-by: Yanfei Wang <yanfei.wang@amd.com> Co-authored-by: Shanshan Shen <467638484@qq.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…unction (vllm-project#62206) Signed-off-by: Jared Wen <jaredwen@inferact.ai> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…l-call text that streaming returns (vllm-project#56270) Signed-off-by: Artem Perevedentsev <aperevedents@nvidia.com> Co-authored-by: Artem Perevedentsev <aperevedents@nvidia.com>
…-project#60994) Signed-off-by: bzsuni <bingzhe.sun@daocloud.io> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: Chaojun Zhang <chaojun.zhang@intel.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…oject#61354) Signed-off-by: Lai, Yejing <yejing.lai@intel.com> Co-authored-by: Kunshang Ji <kunshang.ji@intel.com> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: aoshen02 <281812371+aoshen02@users.noreply.github.com> Co-authored-by: aoshen02 <281812371+aoshen02@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tianyu Guo <guoty@inferact.ai>
…t only request templates (vllm-project#62374) Signed-off-by: ly989264 <ly989264@163.com> Signed-off-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…lm-project#62712) Signed-off-by: Micah Williamson <micah.williamson@amd.com> Signed-off-by: <> Signed-off-by: Fangzhou Ai <31551580+Fangzhou-Ai@users.noreply.github.com> Co-authored-by: Fangzhou Ai <31551580+Fangzhou-Ai@users.noreply.github.com>
…Triton, opt-in) (vllm-project#57832) Signed-off-by: Peyman Razaghi <prazaghi@amd.com> Co-authored-by: Cursor Grok 4.6 <noreply@cursor.com> Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com> Co-authored-by: Cursor Agent <agent@cursor.com> Co-authored-by: Douglas Lehr <91553416+dllehr-amd@users.noreply.github.com> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: lcskrishna <lollachaitanya@gmail.com> Signed-off-by: Tej Kiran <kiran.tej@amd.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Tej Kiran <kiran.tej@amd.com> Co-authored-by: avininjamay8 <avpaul@amd.com> Co-authored-by: Avinash Paul <Avinash.Paul@amd.com> Co-authored-by: Shanshan Shen <467638484@qq.com>
…der (vllm-project#62706) Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com> Co-authored-by: Cyrus Leung <tlleungac@connect.ust.hk>
…llm-project#52780) Signed-off-by: Roi Garnett <rgarnett@nvidia.com> Co-authored-by: vllm-agent <claw@inferact.ai> Co-authored-by: tomeras91 <57313761+tomeras91@users.noreply.github.com>
…roject#62741) Signed-off-by: Woosuk Kwon <woosuk@inferact.ai> Signed-off-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: vllm-agent <claw@inferact.ai>
…entions (vllm-project#62721) Signed-off-by: Bugen Zhao <i@bugenzhao.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: vllm-agent <claw@inferact.ai>
Signed-off-by: aoshen02 <281812371+aoshen02@users.noreply.github.com> Co-authored-by: aoshen02 <281812371+aoshen02@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: linitra24 <renshuang.zhou@daocloud.io>
Signed-off-by: khluu <khluu000@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oject#62869) Signed-off-by: Stefan Koncarevic <stefan.koncarevic@amd.com>
…roject#62535) What: upstream PR vllm-project#62535 (open, head 111bf7f) on base e68efc6. A batch with prefill tokens passes allow_full=False through dispatch_cg_and_sync_dp to CudaGraphManager.dispatch, which then skips FULL candidates. Python only (vllm/v1/worker/gpu/cudagraph_utils.py, dp_utils.py, model_runner.py); applied clean. Why: DSpark output corruption (vllm-project#62417): a short prefill was padded into an unconstrained FULL graph captured on a decode-shaped batch; the logits of its last position came out flat and every generated token was garbage. Chosen over vllm-project#59986 (attention builders to UNIFORM_BATCH): 8 lines, local to dispatch. DP check (our DEP files): the prefill rank now asks for PIECEWISE or NONE; the DP sync takes the minimum mode over ranks. NONE makes all ranks eager. PIECEWISE exists only when the mixed mode is PIECEWISE, and then no FULL graph is unconstrained in query length, so the synced re-dispatch (max_query_len=None) cannot land in FULL either. No DP change needed. Upstream: vllm-project#62535 (cherry picked from commit 8461147)
…kspace (vllm-project#60613) What: upstream PR vllm-project#60613 (open, head a54f4d5) on base e68efc6. combine_topk_swa_indices fills the caller's workspace with -1 before the kernel writes each row's valid prefix (the out=None path already allocates with -1). One line, Python only (vllm/models/deepseek_v41/common/ops/cache_utils.py); applied clean. Port of vllm-project#55299 (deepseek_v4). Why: the kernel stores only topk_len + swa_len entries per row, so FLASHMLA_MEGA_ATTN_DSV41 prefill (our backend) read stale indices from earlier batches in the shared workspace and produced NaN (first 127 tokens; rows after a bounded-replay start). Upstream: vllm-project#60613 (cherry picked from commit be7da5b)
…llm-project#62040) What: upstream PR vllm-project#62040 (open, head 9ae4c35) on base e68efc6. With one decode query length, a capture size rounded up to that length is clamped to max_num_reqs * decode_query_len, so the full batch gets a FULL graph. Python only (vllm/v1/worker/gpu/cudagraph_utils.py) plus its unit test; applied clean. Why: the DSpark draft decodes k tokens per request but its capture sizes follow the target's k + 1; rounding up can step over max_num_seqs * k, the full-batch graph is skipped and every full-batch draft step runs eagerly (PR: +4.4% decode tok/s at DEP4, GB200, vendor). Our B300 files (128 seqs, k5: full draft batch 640 tokens) are above the 512 capture cap, so it matters for the 768-cap A/B (N06 -arms), not the cap-512 files. Upstream: vllm-project#62040 (cherry picked from commit 35305fe)
What: upstream PR vllm-project#60995 (open, head e70e480) on base e68efc6. kernel_warmup runs deep_gemm_warmup on worker.get_draft_model() too, with the target's max_num_batched_tokens. Python only (vllm/model_executor/warmup/kernel_warmup.py, 3 lines) plus its unit test; applied clean (the PR's base predates vllm-project#55671, no overlap with its hunk). Why: the DSpark draft's DeepGEMM GEMMs were not warmed and JIT-compiled on the first requests (hot-path stall after every engine start; vllm-project#60929). Cost: a longer cold start (draft shapes only). Upstream: vllm-project#60995 (cherry picked from commit 454a71f)
…t#62218) What: upstream PR vllm-project#62218 (open, head 1e1840d) on base e68efc6. BaseRenderer.render_chat and render_chat_async raise VLLMValidationError (HTTP 400) when a conversation has no messages. Python only (vllm/renderers/base.py) plus its unit test; applied clean (squashed; the PR branch has a merge of main). Why: the HF tokenizer refuses an empty conversation, but renderers with their own encoder (tokenizer-mode deepseek_v41, our B300 files) rendered `messages: []` to a bare BOS prompt and answered 200 with a generated reply. The API contract wants a 400. Upstream: vllm-project#62218 (cherry picked from commit 4ef7202)
…ant turn open (wo_eos) What: when continue_final_message is set and the last message is from the assistant, the V4.1 tokenizer marks it wo_eos, so the encoder renders it without <|end▁of▁sentence|>. Python only (vllm/tokenizers/deepseek_v41.py, 4 lines) plus a unit test (chat and thinking mode; a final user message is unchanged). Why: the tokenizer ignored continue_final_message: a prefill request (assistant prefix to continue) ended with EOS, so the model was asked to continue after a closed turn. DeepSeek's reference encoding/encoding.py (DeepSeek-V4.1-Flash-1017@1bae0e10) renders the continued message with wo_eos. Found by the K2 encoder byte-diff (bitlane evidence/P3-proxy/k2-encoding: prefill_off, prefill_on). Upstream vllm-project#57882 covered this among other generation controls and was closed unmerged (2026-10-10); no open upstream PR fixes it for the Python V4.1 tokenizer. Bitlane-only: upstream encoder ignores continue_final_message; reference encoding.py@1bae0e10 uses wo_eos (cherry picked from commit 8c0acab)
…motion What: our pipeline, on bitlane/release-dev only (no upstream file changed): - .bitlane/check-stack.py: hygiene gate for BASE..HEAD (subject "[bitlane] ", an "Upstream: <vllm PR>" or "Bitlane-only: <reason>" line, overlay-only files unless "Binary-change: yes", no merges, upstream PR state); .bitlane/test_check_stack.py its self-check on a synthetic repo. - .github/workflows/bitlane-sync.yml: daily merge-upstream of main, rebase onto the newest upstream main commit with a nightly image and green buildkite/ci, gate, build, then release-dev moves (force-with-lease); else an issue. - .github/workflows/bitlane-build.yml: gate, then the image on the bitlane builder host over OIDC + SSM (.bitlane/builder.sh), CPU unit tests of the touched test files (.bitlane/cpu-skip: GPU-only ones), status bitlane/image = the digest. - .github/workflows/bitlane-release.yml: a push to bitlane/release-prod needs a fast-forward to a release-dev commit with statuses bitlane/image and bitlane/qualified; copies that image (same digest) to the release repository, tags bitlane/release-<series>.<N> and writes the GitHub release. Why: keep the stack rebased on upstream main with every commit justified, and make every image and release from one reproducible path. Design: bitlane docs/research/vllm-fork-ci.md. Bitlane-only: bitlane CI and release tooling (cherry picked from commit c64a887)
…roject#62095) What: upstream PR vllm-project#62095 (draft, head d5b4e80, author robertgshaw2-redhat) on base e68efc6. A ReasoningEndFinder in the detokenizer locates the end of reasoning in the output token ids with the request's own --reasoning-parser; while reasoning is open, client stop strings stay dormant, and afterwards check_stop_strings gets a search_start at the first content character. It arms only when the chat serving layer already resolved reasoning_ended=False (the signal structured outputs uses), so thinking-off requests, servers without a reasoning parser, /v1/completions, /v1/responses and offline LLM keep today's behaviour. Python only (vllm/v1/engine/{detokenizer,output_processor, async_llm,llm_engine}.py) plus its unit test; applied clean on our stack. Why: a client stop string matched inside the reasoning segment, so generation ended before </think>: the reasoning parser found no content and the customer got finish_reason "stop" with empty content and no answer. Measured on our hardware 2026-10-20: the conformance check stop_in_reasoning (qualify/conformance.py, stop ["10"], thinking on) failed identically on both DP4 nodes n18 and n19 with image bl0321, Qwen3.5-2B, data-parallel-size 4, reasoning-parser qwen3: "finish stop, content '', '10' in reasoning: False". The stop conformance check (same prompt, thinking off) passed before and after: stop strings still apply to content. Tests: tests/detokenizer/test_stop_string_while_stop_model_terminates.py, 3 new cases (8 with parameters) in the bl0322 image on CPU: 43 passed with the patch, 8 failed / 35 passed with the finder disabled. tests/detokenizer and tests/v1/engine/test_output_processor.py show the same pre-existing failures with and without the patch (gated HF repos, no GPU). Upstream: vllm-project#62095 (cherry picked from commit 765579d)
…stage reports a commit status What: our pipeline only (no upstream file changed). - bitlane-build.yml: on a push to bitlane/release-dev, after the image, job e2e runs bitlane control/e2e.sh on our dev environment (never prod) with that image, on the builder over SSM (.bitlane/e2e.sh -> node/fork-ci.sh e2e); timeout 170 min, concurrency group bitlane-dev-e2e, OIDC session 3 h (the build job too: a build may wait 2.5 h, the default session is 1 h). A rebased candidate from bitlane-sync gets its image only. - bitlane-release.yml: after the release copy (no rebuild: a rebuild is another digest than the one qualified), job e2e runs the release image on dev with its production run files (-bl<N>); PASS sets bitlane/promotable. A re-run of an existing release runs the e2e again. - Statuses: the first step of each run posts pending for every context it will set (bitlane/image and bitlane/e2e on release-dev; bitlane/release and bitlane/promotable on release-prod); one report job (if: always(), needs every job, statuses: write only, no AWS) posts the final state of each: success, failure, or error with "NOT RUN: <reason>" when the e2e did not run (no dev GPU node, a stage before it failed, cancelled). Never success for a run that did not happen. bitlane/image keeps the digest as its description (the release guard reads it); the per-step status write is gone. - .bitlane/test_workflows.py (stdlib, run by the gate): every workflow that sets statuses posts pending first, has a report job with if: always() that needs every job, and writes final states only there; a self-check on a synthetic workflow keeps it from going blind. Why: the commit page must always say pending, success or failure; before this a hygiene-gate failure posted no status at all and nothing showed during a 30 min build. The user asked for an automatic end-to-end test of every release-dev and release-prod image (2026-10-20). Design: bitlane docs/research/dev-prod-environments.md. Bitlane-only: bitlane CI and release tooling Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX (cherry picked from commit 45e653c)
The image's BITLANE_COMMIT and BITLANE_CHANNEL (set by bitlane's control/build-engine.sh) are printed before anything else: "bitlane dev release version 0.32.0.3 <commit>". A node's journal then proves which fork commit it runs, end to end from a merge to bitlane/release-dev through fork CI to a node. Bitlane-only: build identification for our overlay images; upstream has no such build variables. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX (cherry picked from commit 832984c)
…every commit they bring Merging PR #3 with the default button put a merge commit on release-dev, and the gate failed every build after it: no later PR could remove that commit. A 'Merge pull request #N from callgideon/...' commit is now a note; the PR's own commits are checked one by one as before, and bitlane-sync's daily rebase drops the merge. Bitlane-only: bitlane CI hygiene gate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX (cherry picked from commit 1aa9b4d)
…hen its key is set The report job edits a single comment on the commit's PR on every run: hygiene gate, image build, the image digest, the end-to-end result on dev, and the run link. It posts as the mumbo-bot GitHub App (app 5295930) when the fork has secret MUMBO_BOT_KEY, else as github-actions[bot]. No new action: the JWT is signed with openssl. Bitlane-only: bitlane CI reporting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RnyH1zonXmQe6FLxrbbpNX (cherry picked from commit 2dc423c)
…r ssh A trivial change to prove merge -> gate -> image -> dev e2e on the off-AWS H200s (bitlane evidence/offaws-pipeline). Bitlane-only: CI documentation, no engine change (cherry picked from commit 5abb127)
reyanshsolis
changed the base branch from
bitlane/release-dev
to
bitlane/release-exp
October 21, 2026 11:38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebases our patch stack from
bitlane/release-dev(1305335, on upstream e68efc6) onto current upstream main d7ada3a (185 upstream commits newer).Do not merge while release 0.32.0.4 is being cut: a merge to
bitlane/release-devtriggers the build and a ~1 h dev e2e.Conflicts: none. Checks run (no GPU):
.bitlane/check-stack.pyhygiene gate PASS,.bitlane/test_check_stack.pyandtest_workflows.pypass,py_compileof all 20 touched Python files. The engine tests in the patches (tests/tokenizers_/test_deepseek_v41.py etc.) need a full vLLM build; they run in this fork's CI image build + dev e2e after merge.Commits carry
-xcherry-pick lines naming the release-dev commit each one came from.