Route picks the model used when a caller doesn’t pass one. Define it once, change it without touching code.
A typical use: your app runs on openai/gpt-5-mini everywhere, then you switch a single high-stakes project to anthropic/claude-opus-4-7 by editing one rule.
Set up a rule
Open Controls → Route in platform.opper.ai. Each rule has one setting: the default model for that scope.
| Scope | Applies to |
|---|
| Organization | Every call in your org. |
| Project | Calls in one or more projects. |
The most specific rule wins. A project-level default overrides org-level.
The model picker only shows models allowed by Comply at the same scope. If your allowlist denies every model, you’ll see a prompt to broaden it first.
Leave the default blank (“Auto”) and Opper picks based on the call’s hints (prefer: fast | cheap | quality | balanced).
Callers can still pick a model
Passing an explicit model works as long as Comply allows it. Use this for per-call trade-offs: cheaper models for background jobs, higher-quality ones for user-facing replies.
If the requested model isn’t allowed, the call fails with a clear error. It doesn’t silently fall back to the default.
Where you see the result
A Route event appears on the trace span with a Compass icon, status Applied, the rule name, and a scope badge. The model that actually ran shows in the span’s Model field.
In the playground, the model picker is the per-call equivalent of a Route rule. Use Compare models to run the same input across several models in parallel before you change a rule. Turn on Project controls to test against your real allowlist.
Keep model names out of application code. Pin defaults per scope and switch models by editing the rule.