PARAS MADAN
All writing

Latest in AI

vLLM 0.32 Upgrade Guide: System One, HF Parsers and KV-Cache Tradeoffs

What to check before moving to vLLM 0.32.0, from Python and CORS changes to structured decisions, checkpoint parsers and low-precision KV caches.

vLLM 0.32.0 arrived on October 18 with a new structured-decision endpoint, checkpoint-driven output parsers and broader low-precision KV-cache support. For teams serving their own models, the immediate work is checking which defaults changed and which new capabilities fit their existing application contracts.

The release combines feature additions with migration changes. A successful upgrade should establish that the old workload still works before introducing a different parser or cache format.

Start with runtime and browser compatibility

Python 3.10 support is gone. The package now requires Python 3.11 through 3.14, so check base images, virtual environments and deployment jobs before changing the package pin. For container deployments, the release provides a versioned CUDA 13.0 image at vllm/vllm-openai:v0.32.0 and a CUDA 12.9 alternative ending in -cu129. Choose the build that matches your infrastructure rather than treating the default image as interchangeable with the previous one.

Browser clients need a separate check. The CORS change replaces the wildcard origin default with an empty allowlist in both Python and Rust frontends. An application that calls vLLM directly from a different browser origin may lose access even when command-line requests still work.

For the Python frontend, an explicit setting such as --allowed-origins '["https://app.example.com"]' permits the intended origin. Test the browser's preflight request as well as the inference request. Keep authentication in place: CORS controls browser access to responses and does not make a reachable inference server private.

Treat System One as a separate API contract

The tagged structured-decisions guide documents POST /v1/systemone. It accepts a state and typed questions, returning answer probabilities. The endpoint is available by default on generation models, but models without a supported read strategy return HTTP 501. The supported log-probability modes are raw_logprobs and processed_logprobs; there is no opt-in flag to add from the original implementation proposal.

The three question types have different meanings. choice selects among named options. noul returns the probability of yes. score returns an expected, zero-indexed level across an ordered scale, so it can be fractional. The documented limits are 64 questions, 26 options per choice and ten score levels.

A support-ticket router could ask for a destination team and urgency from the same state. Define the answer schema and fallback route before connecting those outputs to actions. The returned confidence accounts for probability assigned outside the allowed labels; it should not be treated as a measured probability of real-world correctness.

Test ambiguous examples and missing information, then choose thresholds from those results. Also check repeatability: the documentation warns that batching and prefix-cache hits can change probabilities. VLLM_BATCH_INVARIANT=1 trades throughput for repeatable reads.

Use the HF parser when the checkpoint supports it

The new checkpoint response-template parser reads response_template metadata from tokenizer_config.json. For compatible checkpoints, tool parsing uses --enable-auto-tool-choice --tool-call-parser hf; reasoning parsing uses --reasoning-parser hf. Either parser can be selected independently.

This can reduce model-specific integration work, but selecting hf is not an automatic migration for every deployment. Startup fails when the required metadata or selected fields are missing, and it cannot be mixed with another tool or reasoning parser.

There is also an application-level limitation: this parser rejects strict tools, required or named tool choice, and parallel_tool_calls=false. Streaming tool calls appear whole once their region parses. Check those assumptions against your client before switching, especially if your interface expects a tool name or partial arguments early in the stream. Keep the existing parser until the replacement passes those contract tests.

Measure the cache tradeoff on your actual model

Low-precision KV-cache coverage expands across several GPU paths, but support still depends on hardware, attention backend and model structure. A compatible FlashInfer deployment can select --attention-backend FLASHINFER --kv-cache-dtype nvfp4.

The v0.32.0 FlashInfer implementation still rejects NVFP4 combinations involving head size 64 or attention sinks on the SM8x, SM9x and SM12x paths. Decode context parallelism is also unsupported on that path. A supported GPU family alone is therefore insufficient evidence that your model configuration will run.

Defaults can move too. The GLM DSA configuration changes an automatic cache choice to FP8 E4M3 on CUDA SM10x hardware. The release reports roughly halved KV memory per rank and a 2.3% to 5.5% throughput improvement in its cited GLM benchmark, alongside a 7% to 11% time-to-first-token penalty. Those measurements describe a particular workload.

Record the resolved cache dtype, memory usage, first-token latency and sustained throughput. Run quality checks alongside load tests, especially on long-context cases where smaller caches are attractive.

Make the upgrade measurable

Keep a pinned rollback image and first replay representative traffic with the existing model, parser and workload. Introduce structured decisions, parser changes and cache compression separately so regressions have a clear cause.

The practical value of vLLM 0.32 is greater control over how a model's outputs become application behavior. Capturing that value depends on explicit request contracts and workload-specific measurements, particularly when a new default changes performance without changing your launch command.

I'm Paras. I work at the intersection of AI, engineering and distribution.

I help technical founders turn infrastructure releases and engineering changes into clear launch stories developers can understand and use.

Book a 30-minute call.