Decision models
Models that answer typed questions instead of generating text, and how to configure one
Overview
A decision model answers typed questions about a piece of text. It does not generate prose. You give it a short description of the situation and a set of questions, and it returns structured answers:
- a probability between 0 and 1 for a yes/no question
- a choice of exactly one named option, with the probability of every option
- a score, which is a position on an ordered scale you define
This is what the Decision node calls. A decision model is also useful on its own as a classifier or a router, because the answer is a value you can branch on directly rather than text you have to parse.
Use a decision model when you need a value. Use a chat model when you need words.
A chat model can be prompted to return JSON, but nothing guarantees the shape, and a malformed reply becomes a parsing problem inside your workflow. A decision model returns a typed answer that MagOneAI validates against the questions you asked before the workflow sees it.
Answering decisions is a capability, not a model type
MagOneAI treats decision support as an independent flag on an LLM configuration, exactly like vision and audio support.
One configuration can have several capabilities at once. A configuration may serve chat and answer decisions, and neither excludes the other. A decision configuration can also be the organization default.
| Flag | What it means |
|---|---|
supports_vision | The model accepts image inputs |
supports_audio | The model can transcribe audio |
supports_decision | The model can answer typed decision questions |
MagOneAI decides whether a configuration can answer decisions from the stored flag, never from the model name. A decision model can be served under any alias or model ID a provider chooses, so a name-based rule would silently miss one.
See Model capabilities for the full set of flags.
The decision endpoint
The decisions route is not the chat route, and providers serve it on different paths. There is no default path MagOneAI can append to the chat endpoint.
A decision configuration therefore carries a Decision endpoint of its own: a full URL, not a path fragment.
Ticking Supports Decisions without giving a decision endpoint is refused with a 422. There is nothing to fall back on, so the configuration would fail on its first call.
A configuration that serves both call shapes keeps both URLs:
| Field | Carries |
|---|---|
| Endpoint | The chat base URL, used for ordinary completions |
| Decision endpoint | The full decisions URL, used for typed questions |
Setup steps
Get a decision endpoint from your provider
Ask your model provider for the decisions URL and the model identifier it serves. If you run the model yourself, this is the route your server exposes for typed decision calls.
Add or edit an LLM configuration
Open LLM configurations for the organization. Create a new configuration, or edit an existing one that you also want to answer decisions.
Tick Supports Decisions
Turn on Supports Decisions in the capabilities area of the panel.
Enter the decision endpoint
Paste the full decisions URL into Decision endpoint. Keep the ordinary Endpoint field pointed at the chat base URL if this configuration also serves chat.
Set the cost per 1K tokens
Set the input and output cost so decision usage is priced in the usage dashboards.
MagOneAI prefers the cost the provider reports on the response when there is one, because that is the billed truth whatever the provider's pricing model. Your per-1,000-token rates are the fallback for an endpoint that does not report cost.
Save
Click Save. The configuration now appears in the model picker on a Decision node.
Reasoning / thinking does not apply. A decision call never streams a chat reasoning trace, so the panel hides the thinking selector for a decision-only configuration. Extra parameters still apply.
Question types
A decision call carries a state, which is the text being decided about, and up to 32 questions. Each question has a key, instructions, and criteria. The key becomes the output field name, so it must be lowercase snake_case.
Criteria are two labels, true and false, saying what a yes and a no mean.
{
"type": "probability",
"instructions": "Does this message convey urgency?",
"criteria": {
"true": "Explicitly time-sensitive or escalating",
"false": "No urgency expressed"
}
}Answer: probability, a number from 0 to 1. A value of 1 means the true criterion fully applies.
Criteria are a map of option key to what that option means. You need 2 to 255 options, and each key is 1 to 64 characters.
{
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments, refunds, invoices",
"technical": "Bugs, outages, integration errors",
"sales": "Pricing questions and new business"
}
}Answer: choice, which is always one of your option keys, plus probabilities for every option and a confidence value.
Criteria are a list of scale labels, lowest to highest. You need 2 to 255 labels.
{
"type": "score",
"instructions": "How frustrated does the customer sound?",
"criteria": ["Calm", "Mildly annoyed", "Frustrated", "Very angry"]
}Answer: score, a fractional index into the scale where 0 is the first label, plus a legend mapping indices to labels, probabilities, and a confidence value.
Limits
| Limit | Value |
|---|---|
| Questions per call | 32 |
| Question key format | Lowercase letter, then lowercase letters, digits or underscores, up to 64 characters |
Options per choice, labels per score | 2 to 255 |
| Option key length | 64 characters |
| Instructions length | 2,000 characters |
| One criterion length | 1,000 characters |
| State length | 20,000 characters |
The same rules validate a Decision node when you save it and the gateway input when it runs. A question that saves is a question the API accepts.
How answers are validated
MagOneAI checks the contract your workflow depends on before the answer reaches the node:
- Every question you asked has an answer.
- Each answer has the same type as its question. A
probabilityquestion cannot come back as achoice. - A
choiceanswer is one of the options you offered.
If a provider returns an option you did not offer, MagOneAI fails the call rather than passing the value through. Otherwise a later Condition node would silently fall to its default branch on a value it could never match.
Fields a provider adds beyond the contract are kept and flow through to the node output untouched.
Usage and cost
Decision calls are recorded in usage with a source type of decision, so you can see decision spend separately from chat spend in the usage dashboards.
Each call records input tokens, output tokens, latency and cost. See Usage and quotas.
Troubleshooting
Cause: Supports Decisions is ticked but Decision endpoint is empty.
Fix: Enter the full decisions URL, or untick the capability.
Cause: The configuration selected on the node does not have Supports Decisions turned on. Chat-only configurations are refused at run time, not silently used.
Fix: Turn on the capability and add a decision endpoint, or pick a different configuration on the node.
Cause: The endpoint answered with 2xx but the body is not in the decisions response shape. A common cause is pointing Decision endpoint at the chat completions URL.
Fix: Check the URL with your provider.
Cause: The model returned a choice outside your criteria keys.
Fix: Make the option keys and their meanings clearer and more distinct. Very similar option meanings make this more likely.
Cause: The endpoint does not report cost on the response, and the configuration has no per-1,000-token rates set.
Fix: Fill in Advanced → Cost (USD per 1K tokens) on the configuration, for both Input and Output.