Open-source decision model

A decision model for your application.

Send text, a question and its options. Get a choice, yes/no answer or score, with probabilities. Run it on your own hardware.

Your model returns a decision. Your backend decides what happens next.

Real questions. Typed answers.Recorded output
ChoiceYes/noScore
Choice · example 1 / 4

I was charged twice for October. Both charges are 49.00 EUR, same day. Please refund one.

DecisioWhich team should handle this ticket?billing · access · bug · +3
Returned choice
billing0.962Option probability
79.1msRecorded server timeWhole 3-question request
Gemma 4 31B, decisio 0.17.0, RTX PRO 6000 at 600 W, 2026-10-19, plain layout. One result shown per recorded request; timing includes all its questions. Playback pauses to explain the result; no live inference. Request and response.
Text + question + optionsDecisioTyped answer + probabilitiesHow the model works

Decisions your backend already makes.

One question, asked of each new item. Put the answer to work in your routing, policy or approval logic.

Route a ticket

I was charged twice for my order.

Decisionbilling

Send requests to the right team.

Apply a policy

Buy followers now. Visit our discount site.

Decisionblock

Make a consistent moderation choice.

Check eligibility

Home item. Delivered 12 days ago. Unopened.

Decisionyes

Evaluate new facts against shared rules.

Gate an agent action

An agent proposes a shell command.

Decisionallow / ask / block

Let your backend enforce its action policy.

Illustrative jobs and outcomes. Explore issue triage, RAG gates and all recipes.

Teach & Certify

Teach your task.
Choose what gets automated.

Your labels teach decisio what your categories mean. For tasks with at least 10 options and enough examples, it can fit a small task head on the model’s representation; the base weights stay fixed.

Task tuning adapts the choices and calibrates their probabilities. Choose an error target. Separate examples check which predictions qualify; your application routes those and sends the rest for review.

Teach. Check. Use in your app.Recorded cases
  1. 01Learn your task
  2. 02Certify separately
  3. 03Use the answer
Your labelled messages
Message + correct categorycard arrival
Message + correct categoryexchange rate
Message + correct categorylost or stolen card
770 examples · 77 categories
Base modelBase weights stay fixed
Small task headFits your categories
Recorded test accuracy+6.6 points
Before teaching77.6%
After teaching84.2%
Separate examples check the certificateNever used for task tuning. Error target: 5%.
Checked
Selected case 1 / 3

When should I receive my virtual card?

Predicted categoryGetting a virtual card
Qualifying predictionRoute automaticallyApplication accepts the category
Other predictionsHuman reviewKeep the model’s suggestion

Correctness certificate qualifies. Your backend can route.

BANKING77, 10 teaching examples per category. Recorded accuracy and selected cases: Gemma 4 31B FP8, RTX PRO 6000 Blackwell, decisio 0.14.0, 2026-10-16. Default 90% confidence. Learning flow is schematic. A certified prediction can still be wrong; this test prediction was right. Dataset credits.

The certificate concerns the error rate across certified answers on traffic like your examples. If traffic changes, predictions continue while certification can pause.

Decision fast path

Familiar decisions.
A much shorter route.

A small CPU classifier learns recurring choices. Eligible requests get an answer without another model read; decisio handles the requests passed on.

Store shared rules once as context. Send only the changing facts as state. The CPU reads the facts; the model still gets both.

One task. Two answer routes.Illustration
Shared context stays fixed

Billing: payments and invoices. Access: sign-in problems.

New facts 1 / 4

I was charged twice for the same order.

CPU fast path checks the factsAPI option: fast_table
CPU fast answer~50 µsbillingStatic short-text component cost
decisio model~50 msRead avoidedIllustrative model budget

Model read skipped for this request.

Illustrative flow, slowed for clarity. Static short-text p50 on Apple M5 Pro, median 22 tokens; longer texts cost more. Network and queueing excluded. Scope and timing details.

For choice and yes/no text tasks. A learned table can match the model’s mistakes; model agreement differs from correctness checked against labels.

Get started

Run it. Ask one question.

Choose where the model runs, start the server, then send your first decision request.

Linux with one NVIDIA GPU. The first start downloads the model.

python3.12 -m venv .venv && . .venv/bin/activate
pip install "decisio[serve]==0.46.0"
python -m decisio.serve.vllm_engine          # serves Gemma 4 31B; the first start downloads about 31 GB
curl -s http://127.0.0.1:8000/health         # answers once it is ready

Apple silicon. Choose a model that fits your memory in the MLX guide.

git clone --branch v0.46.0 https://github.com/aminry/decisio
cd decisio
uv sync --extra mlx
uv run python -m decisio.serve.vllm_engine --backend mlx --base gemma-4-31b --model mlx-community/gemma-4-31b-it-6bit

Local Ollama. Its request below uses port 11434 and names the pulled model.

ollama pull aminroudaki/decisio-gemma    # the Gemma 4 12B base, for 16 GB laptops
ollama pull aminroudaki/decisio          # the Qwen base
curl http://localhost:11434/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "aminroudaki/decisio-gemma",
  "state": "Hi, since this morning none of our 40 staff can log in to the dashboard. We get \"session expired\" right after entering the password. Payroll is due today.",
  "questions": {
    "urgent": {
      "type": "noul",
      "instructions": "Does this ticket need a response within the hour?"
    },
    "category": {
      "type": "choice",
      "instructions": "Which team should handle this ticket?",
      "criteria": {
        "billing": "Invoices, payments, refunds",
        "access": "Login, passwords, permissions",
        "bug": "The product behaves wrongly",
        "other": null
      }
    },
    "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"
      ]
    }
  }
}'

Send a choice request

For the GPU or Mac (MLX) server on port 8000. For Ollama, use its model-specific request in the Ollama tab.

curl --fail-with-body -sS --max-time 60 http://127.0.0.1:8000/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{
  "state": "My card keeps getting declined when I renew.",
  "questions": {
    "category": {
      "type": "choice",
      "instructions": "Which team should handle this ticket?",
      "criteria": {
        "billing": "Invoices, payments and refunds",
        "access": "Login, passwords and permissions",
        "bug": "The product behaves wrongly"
      }
    }
  }
}'

The returned answers.category contains the chosen category and a probability for every option. Read the response fields.

Good to know.

  • Structured decisions for your application: choices, yes/no answers and scores.
  • A certificate covers one task on one serving setup, for traffic like your examples.
  • Ollama builds its own prompt and applies no calibration. Check the requirements for your backend.

Requirements and limits · Teaching and example requirements

Explore the evidence.

Recorded task results, model measurements and complete conditions are available in the demos and benchmarks.

On JevBench v1.6.1 (the board's file, October 2026), Decisio 31B scored 71.69 on the composite (95% interval 69.86 to 72.81) and Jev 1.13.0 scored 71.49 (69.14 to 72.40); the two intervals overlap.

Source: JevBench v1.6.1 file, read 2026-10-09; its Decisio 31B row is decisio v0.8.0.

Measurements and methods · Public board