Model Routing
Pick a model per tier — four named (balanced, smart, coding, deep) plus five custom slots — and let the bot route each turn to the right one, with overrides for skills, commands, and webhooks.
What model routing does
Requires at least one model in Model Catalog
The Model Router only lets you point tiers at models that already exist in Settings → Model Catalog. If a tier dropdown is empty, add the model there first (see Quickstart for the provider → catalog → router flow).
GolemCore Bot does not pin one model to the whole runtime. Instead it picks a model for each turn from a small set of named tiers. The tiers describe what kind of work the bot is doing — quick chat, careful reasoning, code, deep analysis — and you decide which real model to point each tier at.
The win: when you want to try a new model, you change one setting in Settings → Model Router and every skill, every command, and every chat turn that asks for that tier picks it up. You never have to hunt through code or skill files.
If you followed Quickstart, you already pointed the balanced tier at one model. This page is the full picture: what the other tiers are for, how the bot chooses between them, and when to fill them in.
The four named tiers
Four named tiers cover the space of work the bot does. Most turns land on balanced; the others kick in when a skill, a command, or the bot itself asks for them.
balanced
General chat and ordinary tasks. The fallback when nothing else is requested. Cheap and fast — target a mid-sized general model. Most turns land here.
Default
smart
Multi-step reasoning, planning, cross-file thinking. Costs more per turn — target a reasoning-tuned model. Used when balanced would not be enough.
Reasoning
coding
Code generation, refactoring, debugging. Point at a code-specialized model when one is available; otherwise reuse your balanced model.
Code
deep
Long, careful analysis. Research-style problems and tasks that benefit from extended thinking. The most expensive tier — leave blank until you have a concrete use case.
Analysis
Special slots (special1–special5)
On top of the four named tiers, the router exposes five extra slots: special1, special2, special3, special4, special5. They behave exactly like the named tiers — you set them in Settings → Model Router, skills can reference them, and the /tier command accepts them — but they carry no semantic meaning, so the bot never auto-picks a special slot. It uses one only when something explicitly asks for it.
Their purpose is to hold specialized models that you want to reserve for specific flows — skills, webhooks, scheduled automations, and other special cases. That is the canonical use. Typical examples:
- A skill that needs a specific model regardless of your global setup — declare
model_tier: special1in its frontmatter and pinspecial1to that model. - A webhook mapping that must run on a specific model for cost or compliance reasons.
- A second provider running in parallel with your primary one, for A/B comparison or fallback during an outage.
Nothing stops you from using a special slot in an ordinary chat session — type /tier special1 and the rest of your conversation will run on whatever model you pinned to that slot. But that is the exception; the canonical use is binding specialized models to specific flows.
Unset special slots fall through to balanced, same as unset named tiers.
How the bot picks a tier
Several things can ask for a tier on the same turn. The bot resolves them in this priority order — the first one that has an opinion wins:
- Inbound webhook override. If the turn came from a webhook whose mapping sets a tier, that wins. Relevant only if you configured a webhook; see Webhooks.
- Forced tier (user lock). If you ran
/tier coding forceor toggled Tier force in Settings, the tier is locked. Skills, the classifier, and theset_tiertool all defer to the lock until you release it. - Active skill request. An active skill whose frontmatter declares
model_tier: <name>gets its requested tier for as long as the skill is active. - Soft preference. The
/tier codingcommand without theforcekeyword is a suggestion. It loses to an active skill that asks for a different tier, but wins over the default. - Default. The bot falls back to
balanced.
Initial resolution happens once, on the first iteration of the turn. On subsequent iterations a separate step called dynamic upgrade can promote the turn to the coding tier if it detects code activity — filesystem operations on code files, shell commands like python/npm/mvn/cargo, or stack traces in tool output. It is a lightweight pattern match over tool calls and results (no extra model call), it only ever upgrades to coding (never smartor deep), it never downgrades, and it is skipped entirely when the tier is forced. You can turn it off in Settings → Model Router.
Dynamic upgrade requires coding to be configured
If dynamic upgrade switches the turn to coding but that tier has no model bound, the next LLM call fails with “Tier ‘coding’ is not configured”. Either bind a model to coding or turn dynamic upgrade off.
Seeing what the bot picked
Use /status in chat to see the current tier and the concrete model behind it. The Sessions page records the tier and model for every turn, so you can audit decisions after the fact.
Setting up the tiers
Open Settings → Model Router. You see one row per tier — four named plus five special slots — with a model picker on each row. The dropdowns show the models you added in Settings → Model Catalog; if a dropdown is empty, add the model there first.
Below the tier rows you will find two more controls:
- Dynamic upgrade — the toggle for the mid-turn classifier described above. On by default.
- Global temperature — a slider that applies to every tier. Leave at the default unless you have a specific reason to nudge the bot toward more deterministic (lower) or more varied (higher) output. Skills that need a different temperature should set it in their own configuration.
Blank named tiers do not fall back
There is no chain between the four named tiers. If something explicitly requests smart, coding, or deepand that tier has no model bound, the turn fails with “Tier is not configured”. The only implicit fallback is for turns that ask for no tier at all — those resolve to balanced. For a safe first run, bind a model to all four named tiers (the same model is fine). The five special1–special5 slots can stay empty because nothing picks them implicitly — they only resolve when explicitly named.
Recommended setup
If you are setting this up for the first time and do not yet know what your usage looks like, this is the safe shape:
balanced— a mid-sized general model from your primary provider (for examplegpt-5.1). Most turns land here.coding— a code-specialized model from the same provider if you have one; otherwise reuse the balanced model. Do not leave blank if dynamic upgrade is on — the first code-related turn will fail otherwise.smart— reuse the balanced model to start. Point it at a reasoning-tuned model later, once you have skills or commands that explicitly requestsmart. Leaving it blank only works if nothing ever requests it.deep— reuse the balanced model to start. Swap in a reasoning-optimized model when you have a concrete use case (a research skill, a long auto-mode session). Same rule: blank is only safe while nothing requests it.special1–special5— leave blank until a skill, webhook, or automation asks for one. These are the only slots where “blank” is genuinely safe by default, because nothing picks them implicitly.- Dynamic upgrade — leave it on if
codingis bound to a model. Turn it off if you want strict cost control, or if you decided to leavecodingblank.
When to deviate
- Regulated or single-provider environment — point all tiers at models from the one approved provider.
- Strict cost control — turn off dynamic upgrade and size every tier at the cheapest model that gets the job done.
- Research workloads — point
deepat a reasoning-optimized model and call it explicitly from your skills. - A/B comparison — pin
special1to the candidate model and route a subset of skills or webhooks through it.
What to do next
Dashboard tour
See where Model Router lives in the Settings layout and what the other Settings pages do.
Skills and tiers
Learn how a skill declares a tier in its frontmatter and how sticky activation interacts with tier resolution.
Webhook tier mapping
Route specific webhook flows to a chosen tier or special slot for per-endpoint model control.
Related pages
User Guide
Memory Tuning
Every memory parameter, what it does, what each preset sets it to, and recipes for tuning your own.
Reference
Glossary
One-line definitions for the terms that appear across the documentation. Use this when a word seems to mean something specific and you want the canonical meaning.