Skip to content

DocsStart

4 min read · updated

Get started

Send a typed question to a Decisio server and read the probability it gives for every option.

Decisio is a server that answers typed questions about a piece of text. You send the text and the questions; for each question it gives a probability for every option, from one forward pass and no generated text. These pages are built from the decisio repository at the release named in the footer, so they describe exactly that release.

This page takes you from nothing to your first answer, on any machine, with the CPU stand-in: a small model that serves the same routes. Its answers are for development, not the measured system’s; Choose your machine has the paths that run the real bases.

Figure · Request flow

The text is read once; every question is answered from that one read.

One request, three questions, 91.2 ms on the server. Each bar is the likeliest option's probability.

Recorded decision: Gemma 4 31B, decisio 0.9.0, RTX PRO 6000 at 600 W, 2026-10-08; record 1 of 60 of decisio-examples' support-routing run; the probabilities are rounded to two places.

In one terminal, start a server (the first start downloads a small model from Hugging Face):

git clone https://github.com/aminry/decisio
cd decisio
uv sync --extra dev --frozen
uv run python -m decisio.serve.vllm_engine --backend hf --model Qwen/Qwen3-0.6B-Base

Run against the CPU stand-in at v0.11.1 on 2026-10-14: the clone is the pinned release, as the check has it; the install and the server start.

In a second terminal, send one text with three questions about it:

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.11.1 on 2026-10-14: the answers are the stand-in's, not the measured system's.

The measured system, Gemma 4 31B, answered that request like this:

{
"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
}
}
}
}

Recorded output.

Recorded decision: Gemma 4 31B, decisio 0.9.0, RTX PRO 6000 at 600 W, 2026-10-08; record 1 of 60 of decisio-examples' support-routing run; the response is abridged and its probabilities are rounded to three places.

The stand-in answers with the same fields and other numbers.

WordMeaning
statethe text the questions are about
questionone thing to decide about the state, typed as yes/no (noul), a choice among named options, or a score on an ordered scale
probabilityhow likely the model finds an option; a question’s probabilities add up to 1, and a yes/no gives the probability of yes
basethe model Decisio serves; one is chosen when the server starts

You need uv and git. The commands above clone the repository, install it with its development tools and serve the routes from Qwen/Qwen3-0.6B-Base on the CPU. The server listens on http://127.0.0.1:8000; the first start downloads the model, and GET /health answers once it is ready:

curl -s http://127.0.0.1:8000/health

Run against the CPU stand-in at v0.11.1 on 2026-10-14.

The request is one POST to /v1/systemone, with the text as state and each question under a name you choose. Every question has a type and its instructions; a choice lists its options as criteria, a score lists its levels from lowest to highest. Your first decision takes the request and its answer apart line by line.

Every response carries headers. Ask a single question, with the default instructions for its type, and print them:

curl -s -D - -o /dev/null http://127.0.0.1:8000/v1/systemone \
-H 'Content-Type: application/json' \
-d '{"state": "Both charges are 49.00 EUR, same day. Please refund one.", "questions": {"urgent": {"type": "noul"}}}' \
| grep -i '^x-decisio'
# x-decisio-server-ms: the server's time for the request
# x-decisio-route: the route that served it (text or image)
# x-decisio-stages: where the engine's time went

Run against the CPU stand-in at v0.11.1 on 2026-10-14.

The lines it prints are those headers with their values; the values depend on the machine.