共 50 个 commit,涉及 221 个文件,+6986/-3505 行变动。
概要
| 统计项 | 数值 |
|---|---|
| Commit 数 | 50 |
| 变更文件 | 221 |
| 新增行数 | +6986 |
| 删除行数 | -3505 |
Commit 列表
📦 Other
- c227aaa #47419 — [ROCm] Enable DeepSeek-V4 DSpark speculative decoding on AMD (MI350X / MI355X, gfx950) (#47419)
- 作者: larryli2-amd | +586/-14 | 6 个文件
DSpark speculative decoding for DeepSeek-V4-Pro (1.6T) was previously NVIDIA-only in vLLM: vllm/models/deepseek_v4/init.py sets DSparkDeepseekV4ForCausalLM = None on ROCm, so –speculative-config ‘{“method”:“dspark”,…}’ fails at model-load time on AMD GPUs. This PR enables DSpark on ROCm by porting the draft model to the AMD subpackage and wiring the two pieces the draft depends on t…
- 08dfd68 #47857 — [Model] Add LongCat-Flash-Lite (n-gram embedding) (#47857)
- 作者: Michael Goin | +630/-12 | 16 个文件
Adds LongcatFlashNgramForCausalLM, the n-gram-embedding variant of LongCat-Flash, as a Model-Runner-V2 model. The n-gram input layer’s per-request token history is isolated in a ModelState (rather than threaded through the shared runner, as the abandoned #33611 attempt did), and the n-gram id hashing runs in a small CUDA kernel adapted from SGLang. The model auto-selects the V2 runner and a no-com…
- 978a6df #48041 — [Build/CI] Build arm64 PR and postmerge image builds for Blackwell SM10x and SM110 (#48041)
- 作者: Tyler Michael Smith | +3/-2 | 1 个文件
The main benefit here is to deploy an image built in CI for a pull request directly onto a GB200 or GB300, which is not possible today.
- 85c09e9 #41811 — fix: correct load_weights track logic and enable weight integrity for… (#41811)
- 作者: HuYiPeng | +87/-0 | 2 个文件
Problem Description ### Purpose 1. Fix the weight file missing detection vulnerability in filter_duplicate_safetensors_files() - Add disk file existence validation before intersection check - Detect weight files referenced in index.json but actually missing - Raise FileNotFoundError directly - Cover all model scenarios with index files 2. Fix the issue of no notification for quantized model wei…
- fabec87 #48153 — [Model] Migrate MistralLarge3ForCausalLM to AutoWeightsLoader (#48153)
- 作者: FAN YUCHEN | +89/-57 | 2 个文件
[Model] Migrate MistralLarge3ForCausalLM to AutoWeightsLoader Migrates MistralLarge3ForCausalLM from manual load_weights to AutoWeightsLoader + WeightsMapper, addressing part of #15697. Changes: - Replaced the 22-entry remapping dict + _remap_mistral_to_ds method with a WeightsMapper using start/end-anchored regex patterns - Also migrated EagleMistralLarge3ForCausalLM using WeightsMapper.or() …
- c241c7a #47883 — [Rust Frontend] Add roundtrip fixtures for more chat parsers (#47883)
- 作者: Reid | +42/-0 | 1 个文件
Add Rust chat roundtrip coverage for additional existing parser routes: - MiniMaxAI/MiniMax-M3: reasoning + tool calls - zai-org/GLM-4.5: reasoning + tool calls - zai-org/GLM-4.6: reasoning + tool calls - nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16: reasoning ## Test Result —
- e23b193 #42424 — Deepstream video backend (#42424)
- 作者: ViranjanPagar | +212/-11 | 3 个文件
Adds a DeepStream-based video loader backend (VLLM_VIDEO_LOADER_BACKEND=deepstream) for GPU-resident NVDEC video decode, plus streaming chat-completion endpoints for live RTSP captioning. Implements RFC #41843. What this enables: - File input — decode H.264 / H.265 video files on GPU via NVDEC + GStreamer instead of OpenCV/PyAV (CPU). Chunks decode in parallel through a pool of GStreamer p…
- 424df4f #48211 — [Model][CI/Build] Cosmos3: enable registry tests and register Cosmos3-Super (#48211)
- 作者: Mingfei Guo | +8/-2 | 3 个文件
is_available_online=False was set on the Cosmos3 registry entry in #43356 because the checkpoint wasn’t published yet. nvidia/Cosmos3-Nano went public days after the merge, but the flag stayed, so the registry-driven tests (initialization, multimodal processing, tensor schema) still skip this architecture. This PR: - Removes the stale flag. - Registers nvidia/Cosmos3-Super as an extras model and l…
- 074bdd0 #47959 — [Rust Frontend] Integrate MM video support (#47959)
- 作者: Bugen Zhao | +1571/-516 | 16 个文件
#47530 has bumped the version of llm-multimodal where basic video support was included. This PR adds support for OpenAI-style video_url chat content and reshapes the existing multimodal path from image-specific code into per-modality preparation, so that it will also be easier for us to add more modality in the future. Note that the current video path uses the existing llm-multimodal ffmpeg-backed…
- 216ee58 #48126 — Add XPU nightly and release image publishing to DockerHub (#48126)
- 作者: wenjun liu | +55/-0 | 3 个文件
What changed Add a nightly Buildkite step to publish XPU images after the XPU manifest is created in release-pipeline.yaml. Add a dedicated XPU nightly publish script in push-nightly-builds-xpu.sh. Extend the release image publishing flow in publish-release-images.sh to publish XPU release tags and push manifest tags. ## Test Result —
- 28eaf05 #44472 — [XPU] Enable v1/sample tests on XPU CI (#44472)
- 作者: Chaojun Zhang | +1/-3 | 1 个文件
Enable the full v1/sample test suite on XPU CI.
- e5588e4 #45261 — [Core][KV events] Report prefix-cache-reused blocks in full report mode (#45261)
- 作者: GongLei-HW | +270/-25 | 5 个文件
vLLM’s KV cache event publisher (enable_kv_cache_events) emits BlockStored from cache_full_blocks() — i.e. only for newly allocated blocks. Blocks reused from the prefix cache are never reported, because they are not freshly allocated. External consumers that build a global prefix tree for KV-aware routing (e.g. Dynamo, llm-d, custom gateways) therefore lose visibility into reused prefixes…
- 95ed0fe #40996 — DCP supports hybrid attention (#40996)
- 作者: Yan Xu | +785/-127 | 26 个文件
Add DCP support for hybrid-attention models. Hybrid-attention models such as Qwen/Qwen3.5-0.8B contain both DCP-capable full-attention layers and non-DCP layers. This PR enables DCP for supported attention groups without globally blocking hybrid-attention DCP, while keeping non-DCP groups on local cache/state handling. Run focused hybrid-attention DCP validation with tests/distributed/test_context…
- 2d814a0 #47923 — [kv_offload] Emit tier-owned BlockStored events from FS/OBJ secondary tiers (#47923)
- 作者: Chang Guo | +433/-9 | 6 个文件
Follow-up to #46544, implementing the direction confirmed there by @orozery: each tier is fully responsible for its own KV events, and “actual secondary tier event implementations should be on a follow-up”. - The fs and obj secondary tiers each own an event buffer and override SecondaryTierManager.take_events() (the hook added in #46544), using the same events/take_events pattern as CPUOffloadingM…
- 88e5e2c #47366 — [CI/Build][AMD] Fix ROCm OOM in eagle_correctness_heavy by reserving CUDA graph memory (#47366)
- 作者: peizhang56 | +14/-5 | 2 个文件
test_eagle_correctness_heavy builds a reference engine and a speculative engine back to back in one process, and its parametrized cases run sequentially. On the AMD “V1 e2e (4 GPUs)” step the TRITON_ATTN Llama-4-Scout cases (llama4_eagle, llama4_eagle_mm) aborted at engine init with HSA_STATUS_ERROR_OUT_OF_RESOURCES (“Available Free mem : 0 MB”) right after CUDA graph capture, while the same model…
- f1a5add #48144 — update marlin M size for EP (#48144)
- 作者: gnovack | +7/-2 | 1 个文件
Updates the Marlin MoE M dimension size to estimate the number of valid tokens per rank. When using DP/EP, the hidden_states.shape[0] dimension is padded to max_tokens_per_rank * num_ranks. Scaling this by num_experts / num_global_experts recovers an estimated number of valid (i.e. non-padding) tokens per rank. ### Benchmark results Benchmarked deepseek-ai/DeepSeek-V4-Flash on 8xH200 with DP/EP=8 …
- cac3e70 #43896 — Correct model layer aliasing for Bert style models (#43896)
- 作者: ap9272 | +9/-4 | 2 个文件
Correct model layer aliasing for Bert and ModernBert style models. When loading Hugging Face checkpoints for BERT-style models (specifically ModernBertModel and BertModel), weight loading failed due to mismatched parameter names (aliasing) or unexpected task-specific weights in the checkpoint (e.g., Masked Language Modeling heads) that are not defined in the vLLM backbone model. This PR resolves t…
- 766469a #48154 — [ROCm] Revert Part of
[ROCm] Fix pooling startup workspace lock#47912 (#48154)- 作者: Micah Williamson | +3/-22 | 1 个文件
Revert part of [ROCm] Fix pooling startup workspace lock #47912 which is causing some failures in AMD CI, e.g. in Model Executor: (e.g. https://buildkite.com/vllm/ci/builds/77216/canvas?jid=019f4430-a977-4f4b-860d-01e2db3a0d16&tab=output)
- bbb0f94 #47404 — [ROCm] Synchronize sparse MLA metadata before graph replay (#47404)
- 作者: ZihaoMu | +128/-0 | 2 个文件
Fixes https://github.com/vllm-project/vllm/issues/47196 This patch orders ROCm AITER sparse MLA persistent metadata updates before graph replay consumes those metadata buffers. The sparse MLA backend precomputes persistent metadata with get_mla_metadata_v1(). The resulting buffers are later passed to the AITER sparse MLA decode kernel. When CUDA graph replay consumes those persistent buffers, the …
- 2ded1b2 #47317 — [KV Connector][Mooncake] Apply SWA lookup mask before hashing/key build (#47317)
- 作者: Zhewen Li | +64/-7 | 2 个文件
MooncakeStoreWorker._lookup_full builds its prefix-lookup candidate keys with for chunk_id, h in enumerate(group_hashes). Because group_hashes is a Sequence, that iteration performs a per-chunk getitem — a memoryview slice plus a BlockHash allocation — for every chunk, including the sparse-attention (SWA) chunks that lookup_mask discards one line later. On DeepSeek-V4-style hybrid configs …
- 2285cfc #46865 — [KVConnector] MultiConnector: give every sub-connector the request’s real blocks in
update_state_after_alloc(#46865)- 作者: weishu | +37/-27 | 4 个文件
MultiConnector[offload, transfer] — the documented way to run offload + P/D transfer together — is effectively a no-op for the offload tier. The offload connector silently stores almost nothing, because it only receives a request’s KV blocks when it “won” the external-cache lookup. Cold/first-time requests (exactly what the offload tier needs to populate) match no connector and are never stored. #…
- 753c503 #48056 — Pin PyNvVideoCodec to tested 2.0.4 wheel (#48056)
- 作者: Brandon Pelfrey | +1/-1 | 1 个文件
Pin PyNvVideoCodec to 2.0.4 in CUDA requirements. The CUDA dependency currently points at PyNvVideoCodec==2.1.0, which is blocking CI builds while the needed wheel availability catches up. 2.0.4 wheels are now published and we validated the vLLM PyNvVideoCodec video decode path with that version, so this adopts the tested wheel version to unblock CI while preserving the new video decode backend be…
- b83be00 #48100 — Migrate Olmo and Olmo2 to the Transformers modeling backend (#48100)
- 作者: Harry Mellor | +22/-400 | 4 个文件
Migrate support of Olmo and Olmo2 to use the Transformers modeling backend instead of having duplicated implementations in vLLM. These architectures are >1.5 years old. Olmo3 now takes full ownership of its native vLLM support.
- 412414d #48096 — Remove PersimmonForCausalLM and FuyuForCausalLM model architectures (#48096)
- 作者: Tiezhen WANG | +118/-1093 | 14 个文件
Removing the two as they’re low in usage ## Test Result —
- e875216 #46415 — Sanitize server file paths from validation error responses (#46415)
- 作者: Muhammad Fawaz | +114/-8 | 4 个文件
FastAPI’s ValidationException.str calls _format_endpoint_context(), which embeds the server’s absolute installed-package file path, line number, and function name into str(exc). validation_exception_handler was forwarding str(exc) to the client via the error response body, leaking server internals on every validation error across every endpoint (chat/completions, completions, tokenize, etc.). …
- 0206f10 #47880 — Add Intel XPU Docker release pipeline (#47880)
- 作者: wenjun liu | +42/-0 | 2 个文件
This PR adds Docker image release and nightly publishing support for Intel XPU. The main goal is to align XPU with the existing CUDA release flow where it makes sense, while publishing Intel XPU images to a dedicated DockerHub repository: - release images are published to vllm/vllm-openai-xpu - nightly images are also published to vllm/vllm-openai-xpu - XPU build/publish follows the same release b…
- ab7961a #47989 — Remove TeleChatForCausalLM (#47989)
- 作者: Tiezhen WANG | +1/-6 | 3 个文件
Remove TeleChatForCausalLM due to low usage (less than 10 hours in the past 3 months) ## Test Result —
- 1171467 #48073 — [CPU] Fix Qwen-Next SSM type for AMX GDN (#48073)
- 作者: Li, Jiang | +8/-0 | 1 个文件
AMX GDN requires SSM type ## Test Result —
🐛 Bug Fix
- b12cca6 #39988 — [Bugfix] Fix turboquant FP8 cast failure for BF16 models on Ampere GPUs (#39988)
- 作者: XuZhou | +1/-1 | 1 个文件
Fix turboquant attention backend crash when running BF16 models (e.g. Qwen2). Triton’s convert_custom_float8 only supports FP16/FP32 inputs. When the model’s KV dtype is BF16, the direct BF16 → FP8 cast in _tq_fused_store_fp8 triggers an AssertionError. Fix by casting to FP32 first, which is safe and lossless for all input dtypes (FP16, BF16, FP32). bash .venv/bin/python -m vllm.entrypoints.openai…
- 7614b88 #48113 — [Bugfix][Spec Decode] Fix DFlash draft/target layer-count mismatch (#48113)
- 作者: Nick Hill | +9/-1 | 2 个文件
The DFlashDraftModel test paired z-lab/Qwen3-4B-DFlash-b16 with Qwen/Qwen3.5-4B, but that drafter’s dflash_config.target_layer_ids ([1, 9, 17, 25, 33], resolved with +1 to aux layers (2, 10, 18, 26, 34)) require a target with at least 35 layers. Qwen3.5-4B has only 32, so the aux hidden state for layer 34 is never produced: the drafter’s fc is sized for 5 concatenated aux features but receives 4, …
- feb384a #48112 — [bugfix] bge-m3-sparse-plugin mismatch requests (#48112)
- 作者: Augusto Yao | +4/-48 | 1 个文件
Fix bugs in bge_m3_sparse_plugin. When serving bge-m3 with bge_m3_sparse_plugin, the plugin update pooling_parameters by request, and request is fetched via embed_request_queue.pop(0). 1. A bad request (e.g. request input exceeds model max context length) with embed_task set to dense arrived, the render returned an error, but there’s no chance to remove this request from embed_request_queue. 2. A …
- ff8d348 #48132 — [Bugfix][MRV2] Reset num_accepted_tokens on add_request in all modes (#48132)
- 作者: Nick Hill | +2/-1 | 1 个文件
Under P/D disaggregation a decode-role request’s prefill runs on the remote producer, so its first local step is a decode. The GDN/Mamba attention metadata reads num_accepted_tokens_gpu[req_index] before postprocess_state updates it, so without a reset the request inherits a stale value from the previous occupant of that batch slot, advancing the SSM state by the wrong number of tokens and corrupt…
- e08a915 #48135 — [Bugfix] Preserve tensor causal metadata for grouped attention (#48135)
- 作者: Lucas Wilkinson | +4/-2 | 1 个文件
Fix for nightly CI failure: Buildkite #77195, LM Eval Small Models Distributed (2xB200). - Preserve per-request torch.Tensor causal masks when grouped attention metadata is built. - Keep the per-KV-cache-group Mapping[int, bool] causal override path used by hybrid DFlash drafters. ## Regression - Breaking PR: [#47914 - [Spec Decode] Support hybrid (SWA + full attention) DFlash drafters](https://gi…
- 429f405 #47296 — [Bugfix] Guard CUDA-only rms_norm_per_block_quant in FUSED_OPS for non-CUDA builds (#47296)
- 作者: Tsvika Shapira | +7/-12 | 1 个文件
FUSED_OPS in vllm/compilation/passes/fusion/rms_quant_fusion.py dereferences torch.ops._C.rms_norm_per_block_quant.default at import time, but that is a CUDA-only custom op. On builds where it is not registered (e.g. VLLM_TARGET_DEVICE=tpu), merely importing this module raises AttributeError. Because the module is imported by pass_manager and several sibling fusion passes, this breaks importin…
- 85b3a72 #47381 — [Bugfix][Model Runner V2] Order uniform decodes first so spec decodes aren’t misclassified as prefills (#47381)
- 作者: Woosuk Kwon | +86/-3 | 3 个文件
Fixes #47239 (GLM-5.2 on Model Runner V2 + MTP: large TPOT fluctuations and low aa_lcr scores). split_decodes_and_prefills assumes the batch is ordered decode -> short_extend -> prefill (this contract is in its docstring; the V1 runner enforces it via reorder_batch_to_split_decodes_and_prefills). Model Runner V2 sorted requests purely by scheduled-token count. With spec decode (decode_query_len > …
- ae6170f #46694 — [P/D][Bugfix] Fix PD async KV load lookahead handling for MTP spec decode (#46694)
- 作者: Chauncey | +32/-7 | 2 个文件
Fix NIXL async KV load handling for speculative decoding by deferring lookahead slot allocation during remote KV receive. Previously, the P/D disaggregation path only disabled lookahead allocation for EAGLE during async KV load. MTP and other draft-model speculative decoding paths still allocated lookahead slots while receiving remote KV blocks, which could mismatch local and remote block usage an…
- 1cd75b3 #48085 — [Bugfix] Fix race condition in KVBlockZeroer (#48085)
- 作者: Benjamin Chislett | +83/-20 | 4 个文件
Causing a crash in MRV2 async scheduling + hybrid models + specdec ## Testing Included a test, and confirmed locally that it fixes the garbage outputs problem
- a07765c #42478 — [Bugfix] Fix Qwen3-ASR transcription streaming postprocessing (#42478)
- 作者: JooHo Lee | +207/-17 | 4 个文件
Fix Qwen3-ASR transcription streaming leaking raw ASR prefixes. Related to #35767. ### Why this is not a duplicate I checked the related open PRs and issues before opening this: - gh issue view 35767 –repo vllm-project/vllm –comments - Confirmed #35767 discusses the broader Qwen3-ASR realtime/raw-format leak problem and links adjacent work. - gh pr list –repo vllm-project/vllm –state open –se…
🔧 Refactor
- e257faf #48158 — [Refactor] Remove unused rocm kernel
combine_topk_swa_indices_ragged(#48158)- 作者: Wentao Ye | +0/-236 | 2 个文件
Remove unused rocm kernel combine_topk_swa_indices_ragged and related test
🔩 Misc
- 68ea76e #48220 — [Misc] Remove dead code in ViT functionality test (#48220)
- 作者: Isotr0py | +0/-438 | 1 个文件
- Remove tests/models/multimodal/generation/test_vit_backend_functionality.py which is always skipped, because we have already had tests/models/multimodal/generation/test_vit_cudagraph.py which also covered encoder CG. ## Test Result —
🧪 CI/Tests
- f36284a #47180 — [CI] Add TORCH_NIGHTLY=1 build mode (run full suite on torch nightly) (#47180)
- 作者: Andrey Talman | +82/-14 | 5 个文件
Add an opt-in path to build and run the existing vLLM CI suite against the latest PyTorch nightly wheels, to produce a continuous “vLLM vs torch nightly” signal (e.g. a daily Buildkite scheduled build). This is the clean replacement for the earlier draft #46510, which carried a stale description and a couple of bugs (fixed here). #46510 can be closed once this lands. ## Behavior When TORCH…
- 433f291 #48186 — [CI] Right-size test-area timeouts from nightly durations (#48186)
- 作者: Kevin H. Luu | +183/-183 | 30 个文件
Right-size timeout_in_minutes across all .buildkite/test_areas/*.yaml files based on the actual per-job runtimes observed in the nightly full CI run (build 77252, source: schedule, “Full CI run - nightly”). The nightly full run relaxes per-step timeouts and runs every job to completion, so it exposes true runtimes. Many premerge timeouts are either well below the real runtime (risking spurious…
- a0f6d76 #48169 — [ROCm][CI] Move remaining engine/samplers AMD steps to mi325_1 (#48169)
- 作者: peizhang56 | +3/-3 | 2 个文件
Three mirrored AMD CI steps in .buildkite/test_areas/ were still pinned to the mi250_1 agent pool (gfx90a): the async-scheduling e2e step and the general e2e step in engine.yaml, and the FlashInfer sampler step in samplers.yaml. Every other step under test_areas/ already runs on mi325_1, and these three were the only remaining mi250_1 references in that directory. This moves them onto mi325_1 so a…
- e12b91b #48170 — [CI] Fix cargo-deny config flag ordering (#48170)
- 作者: Lucas Wilkinson | +1/-1 | 1 个文件
Fixes the Rust frontend style job after the cargo-deny 0.20 CLI change. cargo-deny now treats –config as a top-level option. The Buildkite script installs cargo-deny without a version pin, so jobs that pick up cargo-deny v0.20.2 fail before clippy runs with: This moves –config rust/deny.toml before the check subcommand. Buildkite logs: - Branch failure: ci build 77375, Rust Frontend Cargo Style …
- ea0fa34 #48161 — [CI] Increase extract hidden states TP2 timeout (#48161)
- 作者: Lucas Wilkinson | +1/-1 | 1 个文件
Why test_extract_hidden_states_tp2 is timing out on Buildkite just above its CUDA 60s pytest timeout. The PR run for #41359 did execute Extract Hidden States Integration (2 GPUs) and passed, but only barely: 1 passed, 2 deselected, 17 warnings in 60.58s. Subsequent main runs fail around 62.6s with Failed: Timeout >60.0s. This bumps the CUDA timeout for that test from 60s to 120s while keeping t…
- 67e7ea8 #48146 — [ROCm][CI] Set all timeout_in_minutes to 180 (#48146)
- 作者: Charlie Fu | +27/-27 | 1 个文件
- 299d2b5 #48101 — [CI] Annotate built Docker image tags on the Buildkite build page (#48101)
- 作者: Kevin H. Luu | +124/-77 | 8 个文件
On a Buildkite build page (e.g. https://buildkite.com/vllm/ci/builds/77272) there is currently no way to see which Docker image tags an image-build step produced — you have to open the job’s logs and grep for the tag. This makes it painful to find the exact public.ecr.aws/…/vllm-ci-test-repo:
reference to pull for local repro. This PR surfaces the pushed image tags directly on the bu…
⚡ Performance
- 300e337 #46998 — [Perf] fuse more rmsnorm and all-reduce in qwen3.5 (#46998)
- 作者: Jiangyun Zhu | +21/-31 | 2 个文件
Qwen3NextDecoderLayer currently passes a preallocated output buffer into its attention submodules, which write their result via slice assignment: It prevents all reduce rmsnorm fusion PR main ## Test Result main |Tasks|Version| Filter |n-shot| Metric | |Value | |Stderr| |—–|——:|—————-|—–:|———–|—|—–:|—|—–:| |gsm8k| 3|flexible-extract| 5|exact_match|↑ |0.9310|± |…
- b0dec2a #45149 — [ROCM][DSV32][Perf][MTP] Enable UNIFORM_BATCH CG mode in rocm_aiter_mla_sparse (#45149)
- 作者: Teemu Virolainen | +4/-3 | 1 个文件
In order to improve performance especially in CPU bound cases when MTP is enabled UNIFORM_BATCH CG mode needs to be enabled in rocm_aiter_mla_sparse.py. It has not been enabled mostly due to testing reasons and lack of focus for MTP. Extensive testing of DeepSeekV3.2 with MTP on on MI350X and MI355X HW, both performance and lm_eval. Basically mostly on the “kicking the tires” style where various c…
✨ New Feature
- 5715fde #44301 — [Feature][Parser] Support include_reasoning param for non-Harmony models (#44301)
- 作者: alberto | +765/-26 | 13 个文件
Adds include_reasoning support for non-Harmony models across both the Responses API and the unified Parser interface. OpenAI’s include_reasoning parameter lets clients suppress reasoning content (e.g.,
… blocks) from the API response without affecting the model’s actual inference. The model still reasons, but the chain-of-thought is stripped before returning the response. This red…