How Hard to Think

Ask the haus council for the capital of France and it answers before you finish blinking. Ask it to settle a three-step proof in that same impatient breath, and the answer comes back fast, confident, and wrong. Same model. Same weights. The whole difference lives in the knobs.
The Smart Router settles the first question every request raises: which brain takes it. Behind that sits a second question the council went months without asking. How hard should that brain think?
The cost runs both ways. Make a 35B model grind through a chain-of-thought to recall “capital of France” and you have paid latency for nothing. Starve a real proof of reasoning and you get the confident wrongness above. The brain was never the bottleneck. The budget was.
A budget per question
Section titled “A budget per question”So the council allocates a thinking budget the way the router allocates a backend: cheapest match first, escalate only when the question earns it. A trivial lookup answers directly. That is the fast path, and it is where most haus traffic lives. A design tradeoff or a proof opens the model’s <think> block so it reasons before it speaks. Code gets greedy sampling, because one wrong-sampled token does not make a program slightly worse — it makes it not compile.
| Question looks like | Thinking | Temperature | Ensemble |
|---|---|---|---|
| Trivial lookup (“capital of…“) | off — direct answer | 0.5 | 1 |
| Normal request | off — direct answer | 0.5 | 1 |
| Insight / proof / design tradeoff | on — ~2048-token budget | 0.5 | 1 |
| Code | off — direct, greedy | 0.0 | 1 |
| High-stakes, offline | on — max budget | 0.5 | vote (k=3) |
Measured, not vibed
Section titled “Measured, not vibed”The numbers are not guesses. A parameter sweep of the local council found it thinks best calm, not hot. Cold (~0.5) wins. Heat destroys exact-answer reasoning. Insight needs roughly a 2048-token budget — at 512, a multi-step puzzle truncates mid-thought and hands you the setup with no punchline. Code cliffs hardest of all: above temperature 0, one unlucky token breaks the whole program, so code samples greedily.
The twist that makes it smart
Section titled “The twist that makes it smart”Plenty of systems adapt their effort. What makes the haus council’s allocation smart rather than merely adaptive is one dimension a cloud router never has to think about: is there anyone else to ask right now?
Offline, the local council is the last line of defense, so it spends everything — maximum thinking, an ensemble vote when it is unsure, the works. Online and clearly out of its depth, it does the opposite. It defers to Opus rather than burn compute losing a fight it was always going to lose. A cloud model never has to know whether it is the last resort. The council always knows, and it spends accordingly.
One knob, two speeds
Section titled “One knob, two speeds”Mechanically this is a single per-request flag on the cathedral. A thinking-mode model is primed with one of two openers: an empty <think></think> block, which Qwen3 reads as “no chain-of-thought today, answer now,” or an open <think>, which it fills before answering. Fast path versus deep path, one weight set, chosen per question by a difficulty read of the prompt — cheap keyword-and-length classification today, a draft-model difficulty oracle later.
When the deep path runs, the reasoning does not bleed into the answer. The cathedral splits the completion at the closing </think> and returns the chain-of-thought in a separate reasoning_content field, leaving content clean — the same shape reasoning models use elsewhere, so a caller can show the answer and tuck the thinking behind a fold. And if the budget runs out mid-thought before the block closes, the raw text passes through untouched rather than being mistaken for a finished answer.