Skip to content

Prompting

Flag Env Default Meaning
--model-enable-thinking <bool> IGNIS_MODEL_ENABLE_THINKING true The server-wide default for enable_thinking.
--model-reasoning-effort <value> IGNIS_MODEL_REASONING_EFFORT template default The server-wide default reasoning_effort. An effort the template does not take is rounded up to one it does (Qwen3.8: high and max are xhigh, minimal is low), the same as a per-request one.
--model-thinking-budget <n|off> IGNIS_MODEL_THINKING_BUDGET 32768 The server-wide thinking budget: after n reasoning tokens with the block still open, or 2,048 tokens before the request’s max_tokens if that comes first, a close (My thinking time is over. I must now write the complete final answer from what I already have, without calling any more tools.\n</think>) is forced and the model answers. off = no default budget. A request’s thinking_budget overrides it, and reasoning_effort: max runs without one. Set with a tokenizer that has no single-token </think>, the server refuses to start.
--model-loop-guard <off|log|rewind> IGNIS_MODEL_LOOP_GUARD rewind The reasoning-loop guard (ADR 0052), on chat completions and /v1/responses. rewind: a loop in a request’s reasoning is taken back, the model is nudged in its own words and the generation goes on in the same response; after --model-loop-guard-retries nudges the next loop closes the reasoning instead. The reasoning shows a tag, [LOOP DETECTED, REWINDING n TOKENS / m CHARS · h], after the m characters taken back (the Playground strikes them through), and the usage reports them as rewound_tokens. A reasoning sent back with its tags is repaired before the next prompt, whatever this flag says. log only logs a loop; off is no guard, what a measurement runs. A request with images is never rewound. Patchable live. (make knob LOOP_GUARD.)
--model-loop-guard-holdback <chars> IGNIS_MODEL_LOOP_GUARD_HOLDBACK 0 (max 100000) In rewind mode, the characters of reasoning held back from the client: a rewind whose cut falls in them reaches it with no tag and none of the loop. The client sees the reasoning that much later; under about 2,000 it hides almost no rewind. 0 holds nothing back. Patchable live.
--model-loop-guard-ratio, -window, -normalize, -raw-gate, -clean, -margin, -retries IGNIS_MODEL_LOOP_GUARD_* 265, 1000, on, 300, 400, 0, 2 The detector: every check-every characters of reasoning, a window of the last window characters, with code taken out and digit runs folded when normalize is on, is a loop when it compresses under ratio thousandths and its raw text under raw-gate (0 = no gate). A rewind goes back to the start of the last window at or over clean, margin characters earlier, and retries nudges come before a close. Each is patchable live.
--model-loop-guard-persist, -min-kept IGNIS_MODEL_LOOP_GUARD_* 4, 1 When the guard acts (ADR 0053): only after persist checks in a row score a loop (1 = at the first), since a loop persists and a list or a log transcribed into the reasoning ends with its content; and a rewind that would keep fewer than min-kept characters of reasoning is only logged, so a reasoning that opens in a loop is never dropped whole (0 = always rewind). Each is patchable live.
--model-loop-guard-nudge, -nudge-again IGNIS_MODEL_LOOP_GUARD_NUDGE, _NUDGE_AGAIN the model’s own words The sentence a rewind puts in the reasoning before it goes on: nudge on the first rewind (“Wait, I’m starting to repeat myself. Let me stop and move on with what I already have.”), nudge-again on each one after it. Patchable live.
--model-loop-guard-check-every, -snap, -min-continuation, -submit-wait IGNIS_MODEL_LOOP_GUARD_* 250, 300, 512, 60 The guard’s cadence and limits: the window is scored every check-every characters of reasoning (at least 1); a rewind’s cut moves back to a line break within snap characters (0 = never); a loop with fewer than min-continuation tokens of max_tokens left after the cut is only logged; a continuation the engine finds full waits up to submit-wait seconds for room (0 = tried once, max 3600), then the loop is left as it is. On the Responses WebSocket a continuation waits in the socket’s queue instead, as its requests do. Each is patchable live.
--server-system-message-policy <p> IGNIS_SERVER_SYSTEM_MESSAGE_POLICY merge merge: a leading run of system messages joins the system prompt, a later one is its own block in place. strict: a system message that is not first is a 400.
--server-developer-message-policy <p> IGNIS_SERVER_DEVELOPER_MESSAGE_POLICY inplace One of inplace, into-system, after-system, one-after-system, reject. A leading developer message is the system prompt except under reject.