Skip to content

v0.13.1: don't tell a non-reasoning model it always reasons

Choose a tag to compare

@Helldez Helldez released this 19 Jul 19:40

A correctness fix to the think_ctl verdict introduced in v0.13.0.

The bug. llama.cpp's LFM2 handler publishes <think>/</think> for the whole family, whether
or not a given model reasons. Combined with "this template ignores enable_thinking", that made
every LFM model report none — including the ones that never reason. The app then disabled their
Thinking switch and explained it with "this model always reasons — it offers no way to turn thinking
off"
, which was false, and took away a control that had merely been moot.

template uses <think> reasons v0.13.0 v0.13.1
LFM2.5-8B-A1B yes yes none none
LFM2-8B-A1B no no none template
LFM2.5-Instruct no no none template

The fix. none now requires positive evidence of both halves: the model declares a reasoning
span and its template actually uses it — the same test llama.cpp applies before wiring up
reasoning extraction. A second path had the same flaw (a template where the continuation hook does
nothing also landed in none, catching any plain non-reasoning template), so the probe is reordered
and none is reachable only through the span question. Anything with nothing to suppress reports
template: what those models did before any of this existed.

LFM2.5-8B-A1B still reports none on-device — the case v0.13.0 exists for does not regress. No
behaviour change for any model in the app catalog; this is visible only on LFM2 variants loaded by
hand. Streaming, benchmarks and published numbers are unchanged.