DocsStart
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/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.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.
| Word | Meaning |
|---|---|
| state | the text the questions are about |
| question | one thing to decide about the state, typed as yes/no (noul), a choice among named options, or a score on an ordered scale |
| probability | how likely the model finds an option; a question’s probabilities add up to 1, and a yes/no gives the probability of yes |
| base | the model Decisio serves; one is chosen when the server starts |
1. Start a server
Section titled “1. Start a server”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/healthRun against the CPU stand-in at v0.11.1 on 2026-10-14.
2. Ask your question
Section titled “2. Ask your question”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.
3. See where the time went
Section titled “3. See where the time went”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 wentRun 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.
What next
Section titled “What next”- Your first decision: the request and its answer, line by line.
- Choose your machine: the paths that run the real bases, with what each needs.
- Choosing a base: the three models it serves, and when to choose each.