2026-10-12
A lot of LLM calls in my code are not really "chat". They are small decisions: which branch, which category, is this urgent, yes or no. For that I usually ask a big model to answer in JSON and then hope the JSON is valid. So the question is simple: is a model that only makes typed decisions a better tool for these small steps than a general LLM?
A decision model does not write free text. You give it a state and some typed questions. It returns typed answers with probabilities.
| Chat API | Decision API | |
|---|---|---|
| Input | messages | state + named questions |
| Output | text (maybe JSON, if the model behaves) | one of the predefined values + probabilities |
| Use in code | parse, validate, retry | if answer.choice == "shipping": ... |
The idea comes from Daniel Kahneman: System 1 is fast and intuitive thinking, System 2 is slow and deliberate. A decision model is the System 1 part: fast, cheap, no reasoning text.
There are three types. One request can mix them, and each question is answered against the same state.
| Type | Asks | Returns |
|---|---|---|
| choice | pick one option | option + probability per option |
| score | rate on an ordered scale | value on the scale (also between levels) + probability per level |
| yes/no | is this statement true? | value between 0 and 1 |
A support ticket as example. The request (shortened):
{
"state": "My order arrived damaged and nobody replied for a week.",
"questions": {
"department": {
"type": "choice",
"criteria": {
"billing": "Payment or subscription issues",
"shipping": "Delivery or product condition problems",
"sales": "Pricing or account questions"
}
},
"is_urgent": {
"type": "yes/no",
"instructions": "The message conveys urgency"
}
}
}
The answer:
{
"department": {
"choice": "shipping",
"probabilities": { "billing": 0.05, "shipping": 0.82, "sales": 0.13 }
},
"is_urgent": 0.95
}
The exact field names differ from provider to provider. The shape is the same.
The calibrated probability is the interesting part. The code can decide by itself when the small model is good enough.
+-----------+ state + questions +----------------+
| your code | ------------------> | decision model |
+-----------+ +----------------+
|
v
+----------------+
| confidence |
| high enough? |
+----------------+
| |
yes | | no
v v
+------------+ +-----------------+
| use the | | ask a large LLM |
| answer | | or a human |
+------------+ +-----------------+
Figure 1: Escalation by confidence
Most cases stay fast and cheap. Only the unclear ones go to the slow, expensive path.
Good fit: routing, classification, scoring, yes/no checks. Not a fit: anything that needs generated text or code.
A general LLM can do part of this today:
enum in the JSON schema forces one of the allowed values.But these probabilities are not trained to be calibrated. And the model still generates text, so it is slower.
I sent 12 support tickets to Jev via OpenRouter, each with four questions: team, urgency, is it a bug, churn risk. Thresholds in my own code decide the queue. All 12 took 600 ms in parallel and cost $0.0003 in total.

Ticket T08 threatens to switch to a competitor and complains about a slow dashboard. Jev is unsure about the team (0.39), so my code sends it to a human. This is Figure 1 with real data.
What I learned:
technical with 0.95. Without a fitting option, the model is sure about a wrong answer./v1/decisions): followed a few weeks later, same three question types.