v0.13.1: don't tell a non-reasoning model it always reasons
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.