# Decision models (Jev)

Decision models answer typed questions about a `state` with probabilities instead of text. Use one where you would otherwise ask a chat model a narrow question and parse a label: gate a risky tool call, triage, classify, check a claim. Answers are free; input tokens are billed.

MCP tool `decide`, or `POST https://omnirail.org/api/v1/decisions` with `{ model, state, questions }` (nothing else) → `{ id, model, provider, answers, usage }`.

- `model`: `typesafe/jev-1.14` (pin it when you rely on thresholds) or `~typesafe/jev-latest`; `GET /models?kind=decision` lists them.
- `state`: what is going on: a string, a JSON object, or an array of strings and `image_url` parts (PNG or JPEG data URLs only).
- `questions`: keyed by ids you choose, each `{ type, instructions, criteria? }`:

| type | criteria | answer |
|---|---|---|
| `noul` | optional `{ "true": ..., "false": ... }` | `noul`: probability of yes (0 to 1) |
| `choice` | `{ option: description }`, 2 or more options | `choice`, `probabilities`, `confidence` |
| `score` | ordered levels, lowest first | `score` (position), `probabilities`, `legend` |
| `box` | none, `instructions` describe the target | `box: { top, bottom, left, right }` (fractions); needs an image |

Ask every question about the same state in one call. Branch on the probability with your own threshold, chosen on labelled examples; probabilities are not certainties. A scoped key needs the `decisions` modality. Details and a real call: https://omnirail.org/docs#decisions
