Files
ThothII/docs/research/2026-09-21-pi-qwen-compatibility.md
T
Codex 23e52c80de
Publish documentation / publish (push) Successful in 23s
Record verified Qwen documentation publication
2026-09-21 16:27:10 +02:00

80 lines
4.6 KiB
Markdown

# Qwen 3.6: session tool-call failure and correction
Date: 2026-09-21. Verified runtime: Pi coding agent and Pi AI 0.80.3.
## Cause and correction
Interactive sessions returned text resembling a bash call and stopped before the
first review widget. The Evidence-only extension `tht-evidence-json-mode.ts` lived
under `.pi/extensions`, so Pi automatically loaded it into interactive sessions.
Its `before_provider_request` hook imposed `response_format: {type: "json_object"}`
and temperature zero on every request.
Replaying the captured startup request, with all original hooks preserved, isolated
the cause. With JSON response format, Qwen returned the command as text and finish
reason `stop`. Removing only that field produced a native `bash` call and finish
reason `tool_calls`. Both requests contained the same 15 tools and used High thinking.
The extension now lives in `.pi/evidence-extensions` and is loaded explicitly by
`PiEvidenceRestructurer`. Evidence retains JSON output. Interactive sessions retain
native tool calls. No changes to the remote Qwen server were required.
Earlier SDK probes replaced `session.agent.onPayload`, inadvertently bypassing the
extension hooks. Their success did not reproduce the application path and did not
establish a model or server fault.
## Model configuration
The installation catalog now accepts optional `session.compatibility.thinkingFormat`
values `qwen` and `qwen-chat-template`, requiring `reasoning: true`. Go validation,
the backend schema, and generated catalog/Pi projections preserve this setting.
It controls thinking; it was not the cause or correction of the tool-call failure.
For the verified endpoint, `qwen-chat-template` sends `enable_thinking` and
`preserve_thinking` inside `chat_template_kwargs`. Selecting Off explicitly disables
thinking. Declaring `reasoning: false` alone does not disable thinking on the server.
See the [operator configuration](../general/pi-configuration.md#qwen-36-sessions-and-thinking-controls)
and [Pi 0.80.3 model documentation](https://github.com/earendil-works/pi/blob/v0.80.3/packages/coding-agent/docs/models.md#openai-compatibility).
## Validation and local delivery
- Catalog and projection regression tests failed before the compatibility change,
then passed. Go config/modelprojection/CLI tests, 84 targeted backend tests,
TypeScript checking, and the strict documentation build passed.
- The extension-isolation regression failed before relocation. All 46 Evidence
authoring/restructurer tests and Ruff checks on changed Python files passed.
- The rebuilt local core image has digest
`sha256:9cd593d7362dcbefe177f1b9eb4b9ffdf3010ced7bd7efc8fc3fdcd288f24579`.
Core/frontend were recreated, healthy, and returned HTTP 200.
- A real `pi --mode rpc --no-session` probe with Qwen and High thinking executed
`tht session show` successfully and reached the first clarification widget.
The probe allowed only that read and `reviewer_select`; it stopped without
submitting a human response or recording decisions. Its temporary configuration
referenced the mounted credential because the original runtime lease had expired.
- The user subsequently confirmed that the application now works.
This verifies recovery from the startup failure. It does not certify every workflow
phase or the separate LiteLLM metadata-generation path.
## Public manual publication
- Source: `84084bba37d4985658174db04f8e9195c0435d72`, pushed to Gitea `main`.
- Actions generated `pages` commit `1fe88f99228e06d10e8ecd92556c1ef0d52526e8`
for that exact source revision.
- Live release: `20260921T142437Z-84084bba`; previous release retained for rollback:
`20260916-css-b1c510a0`.
- Built from a clean checkout with the locked strict MkDocs build and all four
authentication documentation verification scripts passing. The public boundary
contains exactly 20 pages. The committed Go tests, Evidence tests, targeted
backend tests, and TypeScript check also passed from that checkout.
- Recreated only the `thothii-docs` Compose service. It is healthy, its mounted
`current` release is correct, and `nginx -t` passed.
- Anonymous requests to home, search, both installation manuals, and the model
configuration page returned 200 with bytes matching the clean build. Styles,
scripts, and referenced fonts returned 200 with the expected content types.
The retired/internal overview, memory-plan, and Compose-reference paths returned 404.
- Browser checks of both installation manuals and the Qwen section confirmed
loaded stylesheets and styled, readable layouts.
Published page: [Qwen 3.6 configuration](https://git.tylconsulting.it/thothii-docs/general/pi-configuration/#qwen-36-sessions-and-thinking-controls).