A classifier node routes on what a request is about, such as its intent,
topic, or complexity, which an If / Else condition can’t express. You
describe up to ten cases in plain words. On every request, a model reads the
user’s message, picks the case it belongs to, and the route follows that
case’s branch: short, simple requests to a fast, cheap model, and multi-step
work to a frontier model.
By default, the model that decides is a
decision model. It answers with a
probability for each case instead of writing text, which keeps the
classification fast enough to run in front of every request.
Add a classifier
Click the + on an edge and choose Classifier. Give each case:
- A name, which is the answer the model gives. Names must be unique,
ignoring case.
- A description of the requests that belong to it, such as “Multi-step
reasoning, code generation, or long-form work.”
Then connect each case to the node that should answer it: a model, a pool,
or another If / Else, split, or classifier. Each case needs a node of its
own, because a node takes only one incoming edge. A classifier needs at
least two cases and takes up to ten.
Context is optional. Use it to say what the route serves, such as “This
route serves a customer support assistant,” so that similar cases are
easier to tell apart.
Try a message
Once two cases have names, type a message below them to see which case it
lands in. With a decision model, every case also shows its probability, so
you can see how close the call was and sharpen a description before you
publish. Trying a message uses the node as you are editing it, unsaved
changes included, and is neither billed nor recorded.
Choose the model
The Model setting picks which model classifies.
Automatic, the default, tries a decision model first. If that call is
refused or fails, it moves on to general chat models, for example when your
model access rules exclude the
decision model by provider or by location. Hover the setting to see the
models it tries, in order. Opper may update that list, and a route on
Automatic follows it without being republished.
To pin a model, pick it in the Model setting: any decision model or chat
model your rules allow, such as a newer decision model you have tried on
your own messages. A pinned model has no fallback: if it fails, is retired,
or is denied by your rules, the classifier fails. Choose Automatic again
to go back.
On the free plan, decision models and the chat models Automatic falls back
to all need a paid plan, so a classifier on Automatic fails. Pin a free chat
model instead.
To list the decision models, call
GET /v3/models?type=evaluation.
Add &include=policy to see which of them your rules allow.
Each classification is a call of its own, billed alongside the answer. On a
decision model, it is recorded and billed like a call to
/v3/compat/decisions.
What the classifier reads
The classifier reads the text of the latest user message that has text, up
to its first 4,000 bytes (about 4,000 characters of English). Earlier turns,
the system prompt, images, and tool results are not part of the decision, so
in a conversation each turn is routed on what the user just said.
It runs after your checks on input. A call
they block never reaches it, and it reads the text a redaction left.
When classification fails
A classifier has no default branch. If every model it tries fails, or the
answer matches none of your cases, the route returns 502 with the code
route_classifier_failed instead of guessing a branch. Put the safety net
on the nodes that answer: a model’s fallbacks, or a pool’s fallback edge.
There is no confidence threshold. The case the model picks wins, however
close the call. The probabilities are there for you to inspect.
The call’s trace records each classification: the case chosen, the model
that decided, how long it took, and, from a decision model, every case’s
probability.
From the API
In a graph sent through the
Management API,
a classifier node looks like this:
A case’s label is its name and instructions its description. Each case
id needs an output of the same name.
With no model, the node is on Automatic.
Listing your routes
returns meta.default_classifier_chain, the models Automatic tries. To pin
a decision model, set model to its full catalog ID, such as
typesafe/jev-1.14.0. Unlike on the decision endpoints, a bare name such as
jev-1.14.0 does not work here: the route deploys, but every request fails
to classify. Last modified on November 10, 2026