Auto Mode
Letting the platform choose the model for a request, and the two-part guarantee that keeps a delegated choice inside your allowlist.
Auto Mode
In auto mode the model is chosen for the request rather than named by it.
Auto is profile-enabled and then callable. The profile carries three things:
| Setting | Meaning |
|---|---|
| An enable flag | Whether auto may be used at all in this scope. |
| A cost/quality dial | 0 means quality, 10 means cost. |
| Allow and exclude model patterns | Which models the resolver may pick from. |
An enabled caller invokes it with the reserved model name auto, or by having
auto as its resolved default.
{
"model": "auto",
"messages": [{ "role": "user", "content": "Hello" }]
}Sending auto with no rung enabling it is 400 auto_not_enabled, never a
silent platform default. Configuration is consent.
How the gate still binds
A governance allowlist normally binds the decided model. A delegated request has no decided model for it to bind, so the guarantee splits in two.
Before forwarding, the gate verifies statically that the profile's allowed set is a provable subset of the guardrail's model allowlist. A wildcard under a non-empty allowlist is refused, because it admits models nobody has approved.
After the response, the served model is verified against the same sets. A violation is recorded and logged -- but by then the response exists, so this half is a signal rather than an enforcement.
If you run auto mode under a non-empty model allowlist, keep the profile's allowed set explicit. That is the half that is enforced rather than observed.
Caching and cost
Delegated turns bypass the exact and semantic caches. Both caches are keyed
on the decided model, and a delegated turn's decided model is the literal
auto -- a decided model that names no answer -- so an entry written under it
could be served to a request the resolver would have routed elsewhere.
The session pin then turns the first pick into the session's decided model, so every later turn gates and caches normally. Auto costs one uncached turn per session, not an uncached conversation.
Each row records which of the two it was: a delegated turn or a pinned one.
What auto delegates today
The pick is currently delegated to the serving upstream's own auto-router. That is an implementation property held entirely inside the connector: the resolver is swappable without changing a stored profile or an API field.
One consequence is visible to you: an upstream that cannot express auto refuses the request rather than degrading. Unlike a provider ranking, a delegated decision carries no model to fall back to, so there is nothing to proceed with.
Per-request dials
A caller may pass per-request auto dials through the
dz_router override under its auto field.
That is steering inside a mode the profile enabled; an override that tries to
enable auto is refused with routing_override_not_permitted.