Let a model think harder, or hand the conversation to a different one
Two skills that belong together. Some models spend extra computation before answering — slower, dearer, sometimes worth it. And you can swap the model mid-conversation without losing a word of it. This article covers when the extra thinking earns its cost, what a switch really does, and the bill that arrives quietly if you switch too often.
Some models answer. Some plan before they answer.
In Part 5 you saw the collapsible block that sometimes appears above an answer. It is the visible edge of a real difference in how a model works.
It is the difference between remembering a phone number and planning a route across town. One you say straight out. The other you work through first — and the working takes time you would never spend on the phone number.
- A general model answers directly. Good for a short lookup, a simple rewrite, one tool call.
- A reasoning model spends extra computation planning or checking first. That can help with an automation spanning several rooms, devices and time periods.
Two consequences follow. Usage: some providers bill reasoning as output, others as a separate category — accounting depends on model and route. Latency: it may take longer to answer, with no universal delay and no guarantee.
The one setting that trips people up
The Add Model dialog has a field called thinkingFormat. It tells Pi Agent how a route represents reasoning data; it does not make a model reason.
| Value | Set it when |
|---|---|
zai | A compatible GLM direct route, which may use <think>…</think>, reasoning_content or another documented field. Verify the endpoint |
deepseek | DeepSeek-style reasoning, which arrives in message.reasoning_content, separate from message.content |
| Blank | Anthropic direct, or any route with no parser requirement |
native or none here. For Anthropic direct, choose anthropic-messages and leave the field blank. Use openrouter only when an OpenRouter route documents it. A mismatch is why a raw <think> tag sometimes appears inline.Deciding which jobs deserve the extra thinking
One rule covers most cases: use a general model when the result is easy to verify and the downside small. Use reasoning when several constraints must be balanced, or an error would be expensive.
flowchart TD
A["A task"] --> B{"Can you check the
answer in a minute?"}
B -->|"yes"| C["General model"]
B -->|"no"| D{"Would being wrong
cost money or comfort?"}
D -->|"no"| C
D -->|"yes"| E{"Several constraints
at once?"}
E -->|"no"| C
E -->|"yes"| F["Reasoning model,
then verify anyway"]
Against real tasks:
| Task | Reasoning? | Why |
|---|---|---|
| Look up a living-room entity ID | Usually no | Retrieval, not thought |
| Convert YAML from one format to another | Usually no | Mechanical. A general model, then validate |
| Debug an automation that fails at night | Often useful | Several possible causes to weigh against each other |
| Plan schedules across rooms, devices and tariff periods | Useful | Many constraints at once, plus professional verification |
Where model and route support it, you get a dial rather than an on/off switch.
- auto hands the decision to the route; off asks for none at all. medium carries the tick here.
- high, xhigh, max buy more thinking, more waiting and more usage in one move.
- These controls are model-specific. A route may not honor every level, so check the answer rather than assume the dial did something.
To genuinely cut reasoning usage, choose a documented non-reasoning model, or use a supported control for that exact model. Do not invent parameters.
Some versions of the workspace collapse or hide the reasoning block. That changes what you see, not what the provider did. Hiding the receipt does not make the meal free — the model still reasons, and you can still be billed for it.
Changing model without starting over
The selector sits in the toolbar below the composer — the text box. It is a button with a small arrow showing the current model name. Its position moves around, because the toolbar order is configurable, so look for the name, not a fixed spot.
It works by mouse or keyboard. The search field at the top filters the list by any part of a model name — typing sol leaves GPT-5.6 Sol — and Enter selects the match. Handy once several providers fill it up.
- The tick beside GPT-5.6 Sol marks the model that answers your next message.
- Every name here is a GPT model, GPT-5.3 Codex Spark down to GPT-6 Astra. A provider missing entirely was never saved in the Models panel.
- The model button under the message box repeats the current name, GPT-5.6 Sol.
Two details are worth getting straight, because almost every later surprise comes from one.
- It takes effect immediately, but nothing is rerun. The new model answers your next message. Earlier messages are not resubmitted and earlier answers do not disappear, so nothing already paid for is charged again.
- The new model receives the whole conversation. On its first message it reads the entire Session, first line to last, as input tokens. That is how it follows the topic — and it is the cost below.
The pattern most people end up using every day
This assumes two models are available: one fast and cheap, one stronger. The example uses glm-4-flash and claude-sonnet-4-5; any pair of that shape works.
-
Step 1
Start a new Session and pick the cheap model
Select + New session at the top left. Open the model button below the composer, find the GLM group and choose
glm-4-flash. The label changes. -
Step 2
Ask for the draft
Send: “Write a Home Assistant automation that turns off every light in the living room at 11:30 p.m. If someone is still in the living room at that time, wait 10 minutes before turning them off.” Expect YAML in roughly 20-40 seconds.
-
Step 3
Switch to the stronger model — without clearing anything
Stay in the same conversation; do not start a new Session. Open the selector and choose
claude-sonnet-4-5under Anthropic. The label changes. -
Step 4
Ask it to review what is already on screen
Send: “Please review the automation above. Does it have any logic errors or common HA pitfalls, such as the device_id trap, the wrong mode, or failure to detect a nonexistent entity_id?” It reads the whole conversation, YAML included.
-
Step 5
Switch back and let the cheap model apply the notes
Return to
glm-4-flashand ask it to rewrite the YAML using the feedback above. Applying a list of corrections does not need the expensive model.
The expensive model handles one message in three: the one where judgment is the product. A review typically turns up device_id where entity_id belongs, a mode that should be restart not the default single, or triggers and conditions in the older singular form. The saving over using the strong model throughout is commonly observed at 50-80%; an earlier passage in the same source says 60-80%. Both depend on prompt length and model choice, so treat either as a rough shape rather than a quote.
Every switch makes someone read the transcript again
This is what surprises people when the first invoice arrives.
A colleague joins a meeting halfway through and reads the whole set of minutes before saying anything useful. Then a second joins and reads them too, from the top, including the first colleague's contribution. Nobody remembers being there earlier. Every arrival pays for the reading.
As numbers. A conversation has built up 5,000 tokens, roughly 15-20 exchanges, and you switch four times:
| Action | Conversation so far | Input reread | Note |
|---|---|---|---|
| Switch 1: Flash to Sonnet | 5,000 | 5,000 | Sonnet takes over |
| Sonnet answers, switch back to Flash | 5,500 | 5,500 | Flash reads from the top too. It does not remember speaking earlier |
| Flash answers, switch to GPT-4o | 5,900 | 5,900 | Another full round of input |
| GPT answers, switch back to Sonnet | 6,500 | 6,500 | Sonnet spoke earlier, but is not made to remember it |
| Total | — | 22,900 input tokens | Output is on top of this |
Stay on one model and input still grows with each turn, but none of this rereading happens. That gap is the whole cost of switching. And you can watch it, because the workspace prints the meter under every answer:
- 1,094 in against 53 out. Input is already the large half on a short exchange, and only grows.
- Watch this line after a switch. Input is the number that jumps, not output.
- $0.0071 is nothing once. Multiplied by a long Session and four switches, it stops being nothing.
Three ways to hand work over, and one that fails quietly
The selector is not your only option. Three actions exist and they do different jobs. Say Flash has just recommended a 1 ton air conditioner for your living room:
Switch models
The conversation stays in one Session and the new model reads all of it. You switch to Claude and ask it to review that recommendation right there.
Start a new Session
The old conversation stays in the list on the left; the new one is blank. Three days later you want to ask about air-conditioner noise — unrelated, so start clean.
Fork the Session
A complete copy branches from the current message, carrying everything before it. You want both models' view on the 1 ton question without losing either.
Three patterns are worth switching for: draft-then-review, zooming in on one hard point before returning to the cheap model, and A/B comparison — which is really a fork. A switch fitting none of them is probably costing you a reread for nothing.
The switch that fails silently
Claude represents reasoning as native structured blocks, not plain text. OpenAI-compatible providers — GLM, DeepSeek, Groq, OpenRouter — do not use that structure.
Someone takes notes in a private shorthand. Hand the folder to a colleague who cannot read it and those pages either fall out or read as scribble. Nothing tears, nothing beeps. You notice only when the answer does not match the question.
So those blocks cannot enter the new provider's messages array in their original form. Depending on the version they are discarded or flattened into plain text; both have happened. If your next message says “continue with the steps you just considered,” the new model may not have them.
I picked a new model and the old one still answered
models.json parse error, meaning the config file is invalid; save it again from the Models panel.After switching, it replied in a different language
402 Payment Required, or insufficient balance
anthropic: insufficient credits. Add credit in its dashboard, or switch back to one that still has some. Your conversation is intact; resend the message that failed. Earlier messages are not charged again.Can Pi Agent pick the model for me?
defaultModel and defaultProvider in ~/.pi/agent/settings.json, or from PI_WEB_DEFAULT_MODEL; there is no “Set as default” button, so edit the file, then refresh.The list has too many models in it
hiddenModels list, or set PI_WEB_HIDE_PROVIDERS in the environment. Shortening the name field in ~/.pi/agent/models.json also works — rename “Claude Sonnet 4.5” to “deep” and that is what the selector shows.Where to go from here
You can now put the right model on the right message.
That finishes the section on using several AIs. Part 9 moves to Skills — teaching the agent a procedure once so it follows the same steps every time, instead of explaining them again in every conversation.
Open the full guidePart 8 of the Pi Agent Onboarding Guide series, published by WoowTech.
Based on the Woow HA Pi Agent Onboarding Guide, produced by WoowTech and released under CC BY 4.0.
The Smart Space Solution · 智慧空間解決方案 · © 2026 WOOW Technology Co., Ltd.