Route a ticket
I was charged twice for my order.
Send requests to the right team.
Open-source decision model
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.
I was charged twice for October. Both charges are 49.00 EUR, same day. Please refund one.
One question, asked of each new item. Put the answer to work in your routing, policy or approval logic.
I was charged twice for my order.
Send requests to the right team.
Buy followers now. Visit our discount site.
Make a consistent moderation choice.
Home item. Delivered 12 days ago. Unopened.
Evaluate new facts against shared rules.
An agent proposes a shell command.
Let your backend enforce its action policy.
Illustrative jobs and outcomes. Explore issue triage, RAG gates and all recipes.
Teach & Certify
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.
When should I receive my virtual card?
Correctness certificate qualifies. Your backend can route.
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
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.
Billing: payments and invoices. Access: sign-in problems.
I was charged twice for the same order.
Model read skipped for this request.
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
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 readyApple 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-6bitLocal 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 basecurl 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"
]
}
}
}'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.
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.