Skip to main content

reasoning_templates

Function reasoning_templates 

Source
fn reasoning_templates() -> Vec<InferenceProfile>
Expand description

One template per rung of the ReasoningEffort ladder.

§Why each rung sets both controls

reasoning_effort is a string a chat template may read at render time — and may equally ignore, in perfect silence (ADR 0007 finding 3). A profile that carried only the effort level would therefore do nothing at all on such a model, while reading in gglib config profile show as though it had. Pairing it with reasoning_budget_tokens — which llama.cpp itself enforces, whatever the template does — means the rung degrades to a narrower promise rather than to no promise: on a template that reads the variable the user gets both, and on one that does not they still get a thinking cap they chose.

§The budget ladder, and why these numbers

profileeffortbudgetwhat the budget is for
minimalminimal256a sentence or two of scratch work — an answer, not a deliberation
lowlow1024one short chain; enough to check an assumption
mediummedium4096the middle rung, and roughly what an untouched gpt-oss turn spends
highhigh16384multi-step work where the thinking is the point
xhighxhigh32768long deliberation, still bounded so a loop terminates
maxmax-1defer to the launch-time --reasoning-budget

Roughly a quadrupling per rung to 16384 and a doubling after, because the levels are not linear either: nothing in llama.cpp compares them and a template is free to treat two of them identically, so the ladder is spaced widely enough that adjacent rungs are distinguishable in practice rather than finely enough to imply a precision that does not exist. Nothing is measured here — these are starting points a user edits, and the one number that is not a guess is max’s -1, which declines to invent a ceiling and leaves the operator’s own launch default in charge.

§Only three are listed

Six listed variants per model would swamp the very model picker InferenceProfile::list_in_models exists to protect, so low, high and max — the ends and a usable middle — are the visible ones. The other three stay fully usable by name as <model>:minimal and friends.