New release: v22.2 (Qwen 3.8 support, reasoning effort steering, and engine fixes)

#68
by froggeric - opened

Hey everyone,

Version 22.2 is live!

What is included:

  • Full Qwen 3.x model support: Single template covering all 3.5, 3.6, and 3.8 variants.
  • Safe default reasoning baseline (medium): Official 3.8 defaults reasoning_effort to xhigh, which often burns through the full token budget before returning any content. Default is now medium
  • Prompt-steered reasoning effort: Pass reasoning_effort as "xhigh", "low", or "medium". Client and agent aliases ("high", "max", "ultracode", "extreme", "minimal", "none", "off") are mapped automatically for OpenAI, Claude Code, Cursor, and Cline compatibility.
  • Inline chat tags for per-turn steering: You can change reasoning depth directly in your prompts using <|think_low|>, <|think_medium|>, <|think_xhigh|>, <|think_ultracode|>, or <|think_off|>.
  • Restored fast non-reasoning mode: Official 3.8 throws a fatal runtime exception if you pass enable_thinking=false. This has been removed so you can disable thinking globally or per request without errors.
  • Cured official 3.8 empty think bug: Official 3.8 removes the in-content thinking parser, prepending blank <think></think> blocks to real thoughts in chat history. This template normalises reasoning cleanly across OpenAI (reasoning_content), Anthropic (thinking), and in-content tags without duplicating tags.
  • Multi-system message consolidation: Merges consecutive leading system and developer messages into a single system turn joined by double newlines, whilst preserving mid-conversation system injections at their exact turn position.
  • Grep and code search error disambiguation: Narrowed the consecutive tool error heuristic to exclude source code matches (such as throw new Error or console.error) so search tools do not trigger false failure warnings during codebase audits.
  • Safe XML parameter serialisation: Non-string XML parameter values (booleans, nulls, numbers) are formatted as standard true, false, and null instead of leaking Python representations (True, False, None).
  • llama.cpp --reasoning-preserve alias: Native support for preserve_reasoning alongside preserve_thinking for 100% prefix KV cache hit rates.

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.

大佬,有针对sglang进行优化嘛?sglang会出现一直思考,不返回sse的情况,不知道是不是模板导致的.

froggeric changed discussion title from New release: v22 (Qwen 3.8 support, reasoning effort steering, and engine fixes) to New release: v22.2 (Qwen 3.8 support, reasoning effort steering, and engine fixes)

Closing this release thread as superseded by v22.4.

froggeric changed discussion status to closed

Sign up or log in to comment