Views
No views yet
low reasoning effort is tuned for concise completion instead of full-history
reconstruction.Status:v0.1.0-beta. Validated on SGLang with Qwen3.8-27B NVFP4, DFlash2 speculative decoding, OpenCode, and 2× DGX Spark TP2. Treat the results below as an operational regression test, not a model-quality benchmark.
reasoning_effort
is a soft instruction rather than a hard token budget: an ambiguous follow-up can
spend the entire output allowance on reasoning and return no final text.preserve_thinking=true still restores full-history behavior;minimal → low, high/max → xhigh aliases improve harness compatibility;low focuses on the latest request, asks a concise clarifying question when the
request is ambiguous, targets a short reasoning pass, and requests non-empty
final text unless a tool call is required;chat_template.jinja, then launch SGLang with:1python -m sglang.launch_server \
2 --model-path Qwen/Qwen3.8-27B \
3 --chat-template ./chat_template.jinja \
4 --reasoning-parser qwen3 \
5 --tool-call-parser qwen3_coder \
6 --enable-multimodal \
7 --host 0.0.0.0 \
8 --port 300001from openai import OpenAI
2
3client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY")
4response = client.chat.completions.create(
5 model="qwen3.8-27b",
6 messages=[{"role": "user", "content": "Explain the failure briefly."}],
7 reasoning_effort="low",
8 max_tokens=16384,
9 extra_body={
10 "chat_template_kwargs": {
11 "preserve_thinking": False,
12 "enable_thinking": True,
13 }
14 },
15)preserve_thinking=False is already the template default. Passing it explicitly
is useful when a gateway may inject its own defaults.{"chat_template_kwargs": {"preserve_thinking": true}}examples/opencode.json. The important fields are:1{
2 "reasoning": true,
3 "interleaved": {"field": "reasoning_content"},
4 "options": {"reasoningEffort": "low"},
5 "limit": {"context": 262144, "output": 16384}
6}reasoning_content must be declared as interleaved reasoning so it survives
assistant/tool round trips without being merged into visible text.| Client value | Template policy |
|---|---|
minimal | alias of low |
low | scoped-terse policy |
medium | neutral; no extra steering sentence |
high | alias of xhigh |
xhigh | careful-analysis policy |
max | alias of xhigh |
| Result | Previous low policy | Scoped-terse v3 |
|---|---|---|
| Prompt context | ~143.7K tokens | ~148.2K tokens |
| Output tokens | 8,192 | 475 |
| Finish reason | length | stop |
| Final text | No | Yes, concise clarification |
preserve_thinking on/off, and all reasoning-level aliases. See
benchmarks/dgx-spark-regression.json.1python -m pip install jinja2
2python tests/test_chat_template.py chat_template.jinjalow is instruction-level steering, not a hard runtime
budget. Configure a reasonable total output limit and handle finish_reason=length.LICENSE.