← Back to the full write-up on hijoseromero.com
One model, one file, Qwen 3.8-27B at 4-bit (Unsloth UD-Q4_K_XL, 17.9 GB), four positions of the reasoning dial: OFF (the instruct baseline from the quant video), LOW, MEDIUM, and XHIGH, which is what Qwen ships as the default. Same four one-shot tests, tools off, no retries.
| One variable | All thinking runs are identical, same file, same seed (42), same
official thinking samplers from the
Qwen 3.8 model card
(temperature 1.0, top_p 0.95, top_k 20, presence 0), except the reasoning_effort value, which the
Unsloth server only accepts at launch, so each level got its own fresh server. |
|---|---|
| The baseline | The instruct column is the same physical file run with thinking disabled
(enable_thinking: false) at the card's instruct samplers, from the quant-ladder video, same
prompts, same protocol. Its outputs contained 0 thinking tokens, verified. |
| No truncation | Output budget 120,000 tokens inside a 131,072-token context, roughly double the longest thinking binge ever observed, so no answer was cut off by our limits. (The default level came close to needing it: one test produced 53,491 tokens.) |
| Tools + attempts | Tools disabled. One prompt, one shot, no retries. Machine idle during the whole run. MTP/speculative decoding is part of the stock Unsloth build and identical across every run. |
| The rig (a floor, not a ceiling) | GMKtec EVO-X2 mini PC: Ryzen AI Max+ 395 (Strix Halo), 128 GB unified LPDDR5X-8000 on a 256-bit bus (256 GB/s spec, ~215 GB/s measured), running CachyOS Linux as a normal desktop, not a dedicated inference box. Everything ran on Unsloth's stock llama.cpp build with default flags: no bandwidth tuning, no custom batch/ubatch sizing, no dedicated-GPU offload games. The tok/s you see is what this setup produces out of the box; a tuned llama.cpp configuration on the same silicon can go faster. These numbers are honest, not maximal. |
| Instruct (OFF) | LOW | MEDIUM | XHIGH (default) | |
|---|---|---|---|---|
| Model file on disk | the SAME Qwen3.8-27B-UD-Q4_K_XL.gguf, 17.9 GB, for all four columns | |||
| Parameter that sets this mode | enable_thinking: false |
reasoning_effort: "low" |
reasoning_effort: "medium" |
reasoning_effort: "xhigh" |
| Qwen's own description (card) | direct response, no thinking | "efficient reasoning optimizing for speed and cost" | "balancing accuracy and speed" | "for complex tasks demanding thorough analysis" |
| Whole exam | 24m 23s | 29m 03s | 21m 57s | 156m 13s |
| Of which spent thinking* | 0m (off) | 13m 55s | 7m 43s | 123m 38s |
| Total input tokens (4 prompts) | 1,806 | 1,918 | 1,798 | 1,966 |
| Total output tokens | 29,621 | 33,668 | 25,676 | 160,571 |
| Thinking share of output | 0% (verified off) | 30-59% | 1-53% | 73-81% |
| Generation speed | 20.2 tok/s | 19.7 tok/s | 19.9 tok/s | 17.2 tok/s |
| Load time | 14.0 s | 9.0 s | 9.0 s | 9.0 s |
| Peak memory in use during run | 39 GB | 40 GB | 38 GB | 44 GB |
| Signed the SVG | “Qwen” ✓ | “Claude” | “Gemini” | “Claude” |
Peak memory = total system RAM at the highest point of that run (sampled every 5s). This rig has unified memory, CPU and GPU share one 128 GB pool, so there is no separate VRAM number; the ~9 GB OS baseline is included, which is why it runs higher than the file size. XHIGH peaks highest because its giant thinking transcripts inflate the context cache. The input tokens also differ slightly per column despite identical test prompts, explained in the highlighted section below.
These preambles are NOT sent by the benchmark. Every request contained only the
test prompt plus the reasoning_effort value. The sentences below are added by the chat template
embedded inside the model file itself, server-side, before the model runs, quoted verbatim from the template:
XHIGH injects: "Reasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer."
LOW injects: "Reasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration."
MEDIUM injects nothing at all. The template has no medium branch: thinking on, zero coaching, which goes a long way toward explaining its one-sentence Blockfall thought.
So the reasoning dial is not a compute budget or a special decoding mode. It is prompt engineering baked into the model file: a few injected words are the entire difference between the 22-minute exam and the 156-minute one. This is also why input tokens differ slightly per column (each preamble has its own length; the instruct column sits a few tokens above medium because disabling thinking pre-fills an empty think block each turn). Receipts: the extracted template.
One caveat straight from Qwen's card, quoted because it cuts against this page's speed story: "In multi-turn agentic tasks, lower reasoning effort does not always reduce overall task completion time. Although it may produce faster per-turn responses, it can also lead to insufficient analysis, more failures, and repeated retries, which may increase total latency and token consumption." These one-shot tests measure single-turn behavior; agent workloads can flip the economics.
About that signature row: the drawing test asks each model to sign the artwork with its own model name. Four runs of the same 17.9 GB file produced three different identities, and only the no-thinking run signed "Qwen". The other signatures point to Claude- and Gemini-generated text in the training data, which is common in how open models are trained; it just rarely shows up this visibly.
Thinking mode makes the model write out its reasoning in a hidden scratchpad before answering, and
reasoning_effort sets how much scratchpad it is allowed to fill. More thinking costs real time
because every thinking token is generated at the same speed as answer tokens: at ~18 tok/s, a 120,000-character
think-first session is most of an hour before the first line of your actual answer exists. The question this page
answers: what does each dial position buy, and what does it cost?
Unsloth's docs and the Studio dropdown both show a fourth level, "none". I ran it as the fourth rung of this ladder. Every request failed with HTTP 500, and the model's own chat template says why:
Jinja Exception: Unexpected reasoning effort none. Supported types are xhigh (default), medium, and low.
The template accepts exactly three levels. The "None" toggle in the app must flip the separate
enable_thinking: false switch instead, which is the instruct baseline you see on this page. So the
off switch is real, it is just not a reasoning_effort value, and the docs listing it as one is an
Unsloth docs bug as of tonight.
And one more twist found while reading the template itself: it silently accepts a fourth
spelling, "high", and quietly rewrites it to xhigh
(if resolved_reasoning_effort == 'high' set resolved_reasoning_effort = 'xhigh'). So the error
message says three levels exist, and the template's own code honors a fourth word. Receipts below.
*Thinking time and answer time are derived: the server reports total time per request, and since thinking tokens and answer tokens generate at the same decode rate, the total splits proportionally to each run's measured thinking share (prompt processing takes only a couple of seconds and is included in the answer side). Total time is measured directly.
| Claim on this page | Direct source |
|---|---|
| Thinking is Qwen 3.8's default mode; how to disable it; official sampler settings for both modes | Official Qwen 3.8-27B model card |
enable_thinking / reasoning_effort behavior, the GROUND TRUTH: the chat
template embedded in the model file, extracted verbatim from the GGUF on this machine (includes the
enable_thinking is undefined or true branch, the xhigh default, and the hidden
high → xhigh alias) |
chat-template-extracted-from-gguf.txt |
| The exact file every column ran | Qwen3.8-27B-UD-Q4_K_XL.gguf on Hugging Face |
| Unsloth's reasoning_effort documentation (the page that lists "none", the docs bug this run exposed) | unsloth.ai/docs/models/qwen3.8 |
| The "none" rejection: full server traceback + reproduction notes | q4-effort-none/EVIDENCE.md |
| Community testing of the effort levels (only low/medium/xhigh work; per-request behavior on other servers) | HF discussion #113, "This model cannot stop thinking" |
| The instruct baseline's raw data (from the quant-ladder video, same protocol) | q4-instruct-baseline/results.json |
| Every number in every table above: the raw per-run metrics | low · medium · xhigh |
These are affiliate links. If you buy through them I may earn a small commission at no extra cost to you. As an Amazon Associate I earn from qualifying purchases.