v22.3 release notes

#85
by froggeric - opened

Hey everyone,

Version 22.3 is live!

Huge thanks to Juan Calderon-Perez (@g-a-b-y ) for their massive contributions to this release, including the two-tier error signal architecture, test suite expansion, and the new property-based fuzzer.

What is new in v22.3:

  • Two-tier tool error detection: Error detection is now split into strong and weak signal tiers. Structural error markers (like stack traces and uncaught exceptions) now trigger warnings regardless of payload length. Previous length limits and command-echo exclusions that suppressed long tracebacks have been fixed, while clean exit codes (Exit code: 0) and JSON success payloads ("error": null) are explicitly excluded.
  • Reasoning deduplication: When a client sends both reasoning_content (or thinking) and a leading <think> block in content, the duplicate tag is stripped cleanly. Literal think tags later in the answer (such as inside code blocks) are preserved verbatim.
  • Single-line think block extraction: Single-line <think>...</think> tags without surrounding newlines are now extracted properly instead of leaking raw tags into rendered chat history.
  • Universal tool argument serialisation: Scalar and list arguments now serialise properly via JSON formatting across both XML and JSON wire formats instead of being dropped.
  • KV cache prefix invariance: History reconstruction synchronises with generation prompt output under non-thinking modes, keeping prefix KV caching stable across multi-turn agent sessions.
  • Test suite expanded from 44 to 101 tests: Full coverage added for edge cases, error escalation paths, vision payloads, wire format variations, and minified oneline template parity.
  • Property-based fuzz harness (scripts/fuzz_template.py): Added a deterministic fuzzer that validates structural invariants (render integrity, token balance, XML/JSON validity, prefix cache stability, and tag stripping) across thousands of generated multi-turn sessions.

Recommended llama-server flags:

If you are running coding agents (like OpenCode, Claude Code, or Pi.dev), launch with:

llama-server -m your_model.gguf --jinja --chat-template-file chat_template.jinja --reasoning-format deepseek

--reasoning-format deepseek splits <think> into the dedicated OpenAI reasoning_content field so tools do not stall on raw thinking tokens.

what reasoning format would be used in vLLM?

vllm offers deepseek_v3 and deepseek_v4 reasoning formats, which should we use?

Reasoning parser for vLLM should be qwen3 as stated in the official recipe: https://recipes.vllm.ai/Qwen/Qwen3.8-27B

From the README
image

The question was for frogger.

Nice to have statements but is it tested? There is also a qwen3_xml that is official. Will that work with the template ? Same results?

Sign up or log in to comment