Measured 22 October 2026

Strict-tool behavior changed.

In this public vLLM test, the strict structural tag was present on 0.27.1 and absent on 0.28.0. All eight GPU requests still completed with schema-valid arguments.

INVESTIGATE: the listed parser check

Successful requests did not tell the whole story.

The qwen3 reasoning parser and qwen3_coder tool parser lost their structural tag in an unmocked parser-adjustment probe. Required-mode GPU requests also showed a change in sampled masked-token entries.

This is a minimal reproduction of the mechanism reported in vLLM issue #53745. The issue was already closed when checked. It is not a claim about the latest release or a customer's service.

Limits matter

We did not observe malformed argument keys on this short prompt. This does not certify answer quality or release safety. Speed is not calibrated.

What changed

Strict tag: present, then absent

With qwen3 reasoning plus qwen3_coder tools, the parser probe attached a structural tag for both auto and required tool choice on 0.27.1. Neither had a tag on 0.28.0.

The contrast probe, deepseek_r1 reasoning plus qwen3_coder tools, retained the tag in both versions. This contrast was a parser probe, not an additional model run.

Eight completed GPU requests

Four requests per version: auto and required, each repeated twice. Every observed tool argument matched the declared schema.

In required mode, sampled top-five alternatives contained 53 masked entries in each baseline repeat and zero in each candidate repeat. This is not a count of all masked vocabulary tokens.

Outputs compared, not just status codes

After removing response metadata and generated tool-call IDs, repeats matched within each version. Auto-mode outputs matched across versions. Required mode changed from two identical assign calls to one.

We do not attribute that duplicate-call difference to the strict-tag defect.

A limited release boundary

0.27.1 was the last good stable release tested for this tag check; the next stable release, 0.28.0, was the first bad version tested. No commit bisection was performed. Later releases were not checked.

The setup

One physical NVIDIA H100 NVL, 94 GB, driver 595.91.07, for both versions. The same pinned public Qwen3-Coder-30B-A3B-Instruct-FP8 model and tokenizer revision were used.

Both servers used eager execution, one GPU, a 4,096-token context limit, one concurrent sequence and explicit Triton linear and MoE backends. Requests used temperature 0, at most 96 output tokens and thinking disabled.

The release images bundled PyTorch 2.13.0+cu130 in both arms. Transformers differed: 5.15.0 versus 5.15.1. These are release-environment comparisons, not a claim that every dependency was identical.

The test follows the public issue's strict-tool parser combination. Our short prompt and single-GPU configuration are a minimal adaptation, not the reporter's production workload.

Inspect the recorded result

Read the immutable result JSON for the model revision, exact launch flags, comparison method, checks and hashes of retained evidence.

Full requests, responses and environment records remain in the evidence archive. This public summary omits literal fixture values, host identifiers and operational paths; it is not a verbatim request transcript.

Two earlier allocations failed in our result serializer and in default FP8 kernel warmup. They are retained as failed attempts. All three dedicated GPU allocations were deleted. Final attributable provider usage is pending; no finalized cost is claimed here.

Back to the reports or contact us about a supported check.