# Get started

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

Source: https://opendecisio.com/docs/

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](https://opendecisio.com/docs/quickstart/) has the paths that run the real bases.

 

[Figure: The text is read once; every question is answered from that one read. A support ticket goes into Decisio, which reads it once in 91.2 milliseconds. Three questions fan out of that read: urgent (yes/no) answers yes at 0.16; queue (choice) answers billing at 0.96; impact (score) answers level 1 at 0.65.]

 

## TL;DR

 

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.

  

| 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

 

You need [uv](https://docs.astral.sh/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.

 

Common mistake

“Connection refused” means the server is still starting. Wait until `/health` answers, then send the request.

 

## 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](https://opendecisio.com/docs/first-request/) takes the request and its answer apart line by line.

 

Common mistake

A request the server cannot read gets status 422 and a `detail` that names what is wrong; read it before changing anything else. The `model` field does not choose a model: a server serves the one base it was started with.

 

## 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 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.

 

## What next

 

- [Your first decision](https://opendecisio.com/docs/first-request/): the request and its answer, line by line.
- [Choose your machine](https://opendecisio.com/docs/quickstart/): the paths that run the real bases, with what each needs.
- [Choosing a base](https://opendecisio.com/docs/bases/): the three models it serves, and when to choose each.
