DocsGet started
Get started
Run decisio and get your first answer in about five minutes. A text and questions go in; a probability for every option comes out, in one call.
Four steps: pick your machine, start a server, ask a question and read the answer.
Figure · Request flow
The text is read once; every question is answered from that one read.
One request, three questions, 79.1 ms on the server. Each bar is the likeliest option's probability.
Recorded decision: Gemma 4 31B, decisio 0.17.0, RTX PRO 6000 at 600 W, 2026-10-19, on the plain layout; record 1 of 60 of decisio-examples' support-routing run, sent again on that release; the probabilities are rounded to two places.
1. Pick your machine
Section titled “1. Pick your machine”| Your machine | Its guide |
|---|---|
| Linux with an NVIDIA card | On a cloud GPU |
| Linux with an NVIDIA card and Docker | With Docker |
| Mac with Apple silicon | On a Mac |
| Mac, Linux or Windows with Ollama 0.35.1 to 0.40.3 | With Ollama |
| Any machine, for development | For development |
The memory and card each machine needs are on Requirements and limits. The steps below use the CPU stand-in, which runs on any machine. On any other machine, start the server as its guide says and go on from step 3.
2. Start a server
Section titled “2. Start a server”You need Python 3.12, uv and git.
The first start downloads a small model from Hugging Face.
git clone --branch v0.35.0 https://github.com/aminry/decisiocd decisiouv sync --extra dev --frozenuv run python -m decisio.serve.vllm_engine --backend hf --model Qwen/Qwen3-0.6B-BaseRun against the CPU stand-in at v0.35.0 on 2026-10-26: the clone is the pinned release, as the check has it; the install and the server start.
The server listens on http://127.0.0.1:8000.
It is ready when /health answers:
curl -s http://127.0.0.1:8000/healthRun against the CPU stand-in at v0.35.0 on 2026-10-26. It printed, trimmed to the fields this page uses:
{
"ok": true,
"base": "qwen3.6-35b-a3b"
}
This small model is for development, so its probabilities are not the default model’s. The answer in step 4 is the default model’s, Gemma 4 31B.
3. Ask your first question
Section titled “3. Ask your first question”One POST to /v1/systemone: the text goes in state, and each question has a name you choose, a type and instructions.
curl http://127.0.0.1:8000/v1/systemone \ -H 'Content-Type: application/json' \ -d '{ "state": "I was charged twice for October. Both charges are 49.00 EUR, same day. Please refund one.", "questions": { "urgent": { "type": "noul", "instructions": "Does this ticket need a response within the hour?" }, "queue": { "type": "choice", "instructions": "Which team should handle this ticket?", "criteria": { "billing": "Invoices, payments, refunds, prices, VAT", "access": "Login, passwords, two-factor, SSO, permissions, invitations, account security", "bug": "The product behaves wrongly: errors, crashes, wrong numbers, lost data", "feature": "A request for something the product does not do yet", "cancellation": "Cancelling, pausing or closing an account, deleting data", "other": "Press, partners, jobs, sales pitches, wrong address, thanks, general questions" } }, "impact": { "type": "score", "instructions": "Rate the business impact using only the reported facts.", "criteria": [ "No function impaired", "One user impaired, with a workaround", "Many users blocked from a core function", "Data loss or legal exposure" ] } }}'Run against the CPU stand-in at v0.35.0 on 2026-10-26: the answers are the stand-in's, not the default model's.
noulis a yes or no question; its answer is the probability of yes.choicepicks among named options, up to 255; the options are itscriteria.scorepicks a level on a scale, listed lowest first.
4. Read the answer
Section titled “4. Read the answer”Each question comes back under its own name. A choice gives its likeliest option and the probability of every option, so you see how sure it is as well as what it picked.
Figure · The request and its response
Every question gets its own answer, with a probability for every option.
Request
{
"state": "I was charged twice for October. Both charges are 49.00 EUR, same day. Please refund one.",
"questions": {
"urgent": {
"type": "noul",
"instructions": "Does this ticket need a response within the hour?"
},
"queue": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"billing": "Invoices, payments, refunds, prices, VAT",
"access": "Login, passwords, two-factor, SSO, permissions, invitations, account security",
"bug": "The product behaves wrongly: errors, crashes, wrong numbers, lost data",
"feature": "A request for something the product does not do yet",
"cancellation": "Cancelling, pausing or closing an account, deleting data",
"other": "Press, partners, jobs, sales pitches, wrong address, thanks, general questions"
}
},
"impact": {
"type": "score",
"instructions": "Rate the business impact using only the reported facts.",
"criteria": [
"No function impaired",
"One user impaired, with a workaround",
"Many users blocked from a core function",
"Data loss or legal exposure"
]
}
}
}Response (abridged)
{
"answers": {
"urgent": {
"type": "noul",
"noul": 0.159
},
"queue": {
"type": "choice",
"choice": "billing",
"probabilities": {
"billing": 0.962,
"access": 0.011,
"bug": 0.016,
"feature": 0.004,
"cancellation": 0.005,
"other": 0.003
}
},
"impact": {
"type": "score",
"probabilities": {
"0": 0.256,
"1": 0.648,
"2": 0.053,
"3": 0.042
}
}
}
}Hover or focus a line: its partner on the other side lights up, and what it is appears here.The text the questions are about. It is read once; every question below reads it from that one read (79.1 ms on the server for the three)."urgent": a yes/no question. The answer is one number, the probability of yes: 0.159.noul is the wire format's name for a yes/no question."queue": a choice among 6 named options. The answer names the likeliest, billing, and gives every option's probability; they add up to 1.The question's type: choice.Option billing (Invoices, payments, refunds, prices, VAT): probability 0.962.Option access (Login, passwords, two-factor, SSO, permissions, invitations, account security): probability 0.011.Option bug (The product behaves wrongly: errors, crashes, wrong numbers, lost data): probability 0.016.Option feature (A request for something the product does not do yet): probability 0.004.Option cancellation (Cancelling, pausing or closing an account, deleting data): probability 0.005.Option other (Press, partners, jobs, sales pitches, wrong address, thanks, general questions): probability 0.003."impact": a score on an ordered scale of 4 levels, lowest first. The answer is a probability for each level; level 1 is the likeliest, at 0.648.The question's type: score.Level 0 (No function impaired): probability 0.256.Level 1 (One user impaired, with a workaround): probability 0.648.Level 2 (Many users blocked from a core function): probability 0.053.Level 3 (Data loss or legal exposure): probability 0.042.
Recorded decision: Gemma 4 31B, decisio 0.17.0, RTX PRO 6000 at 600 W, 2026-10-19, on the plain layout; record 1 of 60 of decisio-examples' support-routing run, sent again on that release; the response is abridged and its probabilities are rounded to three places.
Good to know:
- A request the server cannot read gets status 422, with a
detailthat names what is wrong. - The
modelfield does not choose a model: a server serves the one model it was started with.
What next
Section titled “What next”- Call it from your code: the same request from Python, JavaScript and TypeScript, and the frameworks.
- On a cloud GPU: run the default model, Gemma 4 31B, on your own card.
- Teach a task: teach a question you ask again and again, and certify its answers.