Decision in, probabilities out.
Deqio is a local server for decision models — small language models trained to answer a typed question about a piece of text with a constrained, probabilistic answer instead of free-form prose. You send a state (text or JSON) and a question; you get back a yes/no, exactly one option, an ordered score, a set of labels or a cost-aware action — always with the probability of every allowed answer.
A generative model might answer:
"I think the refund should probably be approved."
A decision model answers:
{"choice": "approve", "probabilities": {"approve": 0.91, "review": 0.07, "reject": 0.02}}That makes Deqio useful wherever the allowed answers are known in advance and a large LLM would be slow, expensive or unpredictable: routing and triage, policy checks and guardrails, agent checkpoints (next step, stop or continue, ask a human), scoring and classification. Deqio keeps the differences between model families and runtimes behind one HTTP API, records provenance for every answer, and ships a browser UI, a live request view, a benchmark runner and a Python client. Everything runs on your machine; the two remote decision APIs are optional catalog entries.
Install uv if you do not have it, then Deqio:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install deqioPick a workspace directory, install a model and start the server:
mkdir -p deqio-work && cd deqio-work
deqio models setup # backend → model → token budget → download, install and probe
deqio serve # http://127.0.0.1:8787Then open the dashboard at http://127.0.0.1:8787/ui, the live request view at /ui/watch and the API
documentation at /docs. Deqio binds to 127.0.0.1 and keeps its state in the workspace (.deqio/,
.model-runtimes/, models/, config.json).
Supported platforms: macOS on Apple Silicon (MLX and GGUF backends) and Linux (CUDA with an NVIDIA GPU, GGUF). Python 3.10 and 3.12 are tested in CI. Windows is not supported.
Every model profile in the Deqio 0.6.5 catalog (31 models). A check mark means Deqio has a profile for that
model/backend combination; availability on your machine still depends on the operating system, accelerator and
memory. deqio models list prints the catalog for your host, deqio models installed what is ready to use.
| Model | Model ID | MLX | CUDA | GGUF | Remote |
|---|---|---|---|---|---|
| SemIf / Qwen3.5 4B | semif-qwen3.5-4b |
✓ 8-bit | ✓ | — | — |
| Decision 3.0 d3 26B | d3 |
— | ✓ | ✓ Q8_0 | — |
| Decision 3.0 d3-flash 8B | d3-flash |
— | ✓ | ✓ Q8_0 | — |
| Decision 3.0 d3-mini 4.5B | d3-mini |
— | ✓ | ✓ Q8_0 | — |
| Decision 3.0 d3-nano 2.2B | d3-nano |
— | ✓ | ✓ Q8_0 | — |
| Decision 3.0 d3-lite 0.85B | d3-lite |
— | ✓ | ✓ Q8_0 | — |
| Kev 0.8B | kev-0.8b |
✓ | ✓ | ✓ Q8_0 | — |
| Kev 4B | kev-4b |
✓ | ✓ | ✓ Q8_0 | — |
| Kev 9B | kev-9b |
✓ | ✓ | ✓ Q8_0 | — |
| Kev 27B | kev-27b |
— | ✓ | — | — |
| JevK5 4B | jevk5-4b |
— | ✓ | ✓ Q8_0 | — |
| JevK5 9B | jevk5-9b |
— | ✓ | ✓ Q8_0 | — |
| Open-Jev 2B | open-jev-2b |
— | ✓ | — | — |
| Open-Jev 9B | open-jev-9b |
— | ✓ | — | — |
| Open-Jev 27B v1.1 | open-jev-27b-v1.1 |
— | ✓ | — | — |
| CLM 8B | clm-8b |
— | ✓ | — | — |
| Basal 2.0 Mini — 1.5B | basal-2.0-mini |
✓ 8-bit | — | ✓ Q8_0 | — |
| Basal 2.0 — 4.5B | basal-2.0-main |
✓ 8-bit | — | ✓ Q8_0 | — |
| Basal 2.0 Max — 11B | basal-2.0-max |
✓ 8-bit | — | ✓ Q8_0 | — |
| Clef Flash 9B | clef-flash |
✓ 8-bit | — | ✓ Q8_0 | — |
| Clef 27B | clef |
✓ 8-bit | — | ✓ Q8_0 | — |
| Decider 0.8B | decider-0.8b |
— | ✓ | — | — |
| Decider 2B | decider-2b |
— | ✓ | ✓ Q8_0 | — |
| Decider 4B | decider-4b |
— | ✓ | ✓ Q8_0 | — |
| Laya English 421M | laya-english |
✓ | ✓ | ✓ Q8_0 | — |
| Laya Multilingual 322M | laya-multilingual |
✓ | ✓ | — | — |
| Laya Typed Decisions 421M | laya-typed-decisions |
✓ | ✓ | — | — |
| Von | von |
— | ✓ | — | — |
| Bespoke Nimble 9B | nimble-9b |
✓ | ✓ | — | — |
| TypeSafe Jev (remote) | typesafe-jev |
— | — | — | ✓ |
| OpenAI Decisions API (remote) | openai-decisions |
— | — | — | ✓ |
✓ 8-bitis the author's MLX 8-bit checkpoint,✓ Q8_0the official GGUF Q8_0 file through the pinned llama.cpp or the engine's own GGUF sidecar,✓underRemotea remote decision API (no weights; the API key lives in the OS keychain).- Every engine runs in its own isolated environment with every runtime package and model revision pinned; every
profile is labelled
officialorcommunity. - Capabilities differ by model: Choice, Noul and Score are native everywhere; Multi is native on Basal 2.0 and
emulated on every other profile (
multi_emulated— one yes/no branch per label in one engine request); Act, Facts and option keys are Basal 2.0 features. Unsupported features are refused explicitly, never silently ignored. - Backends and model families in detail, remote API setup, token budgets and the
deqio modelscommands: docs/MODELS.md.
Deqio ships two editable benchmark suites — ENG Bench (deqio-basic-220: 55 Noul, 55 Choice, 55 Shared and
55 Multi cases) and PL Bench (deqio-pl-120: 30 of each, Polish-native, not a translation) — covering customer
service, retail, security triage, AI-agent checkpoints, office administration, politics and world news. Run them
against your installed models with:
deqio benchmark # choose a suite and the profiles interactively
deqio benchmark --all # every installed profile; results under .deqio/benchmarks/<timestamp>
deqio benchmark compare # two completed runs side by sideHow to read the tables: Accuracy is the share of whole cases answered exactly right; Decision accuracy scores
every decision — each Shared decision and each Multi label counts once. A Multi case passes only when all of its 6–8
labels are right, so its case accuracy is roughly the label accuracy to the 7th power; compare models on Multi
label accuracy. Latencies are per request on one Apple Silicon laptop with one model resident at a time; smaller
groups ran separately from larger ones. The two runtime errors in the above-3B ENG run are two SemIf cases refused
by its upstream shared-state prefix check, reported as errors, not worked around. Everything else about the suites,
the scoring and the tables is in docs/BENCHMARKS.md; the complete reports with the previous
snapshots are benchmarks/summary_eng.md and
benchmarks/summary_pl.md.
Three groups measured on PL Bench and ENG Bench with Deqio 0.6.4 on 2026-10-18 (0.6.5 is the same code, published
after the interrupted 0.6.4 upload): models up to 1B (d3-lite GGUF,
Kev 0.8B, Laya English), models from 1B to 3B (d3-nano GGUF, Decider 2B, Basal 2.0 Mini) and models above 3B
(d3-mini GGUF, Decider 4B, Basal 2.0 on GGUF and on MLX, JevK5 4B, Kev 4B, SemIf). The tables are rendered by
deqio benchmark tables from the committed runs/<group>-<lang>/summary.json files; the remote decision APIs were
last measured on the v1 PL suite (see the PL report).
20261018T080338Z· suitedeqio-pl-120— 120 cases / 344 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 0
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | 68.3% | 82.8% | 83.3% | 80.0% | 76.7% | 33.3% | 91.6% | 79.6% |
| Kev 0.8B | MLX | 52.5% | 78.5% | 66.7% | 66.7% | 56.7% | 20.0% | 83.1% | 80.1% |
| Laya English 421M | MLX | 26.7% | 56.1% | 46.7% | 43.3% | 13.3% | 3.3% | 57.8% | 58.7% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | 135.9 ms | 592.7 ms | 11.60/s | — |
| Kev 0.8B | MLX | 86.2 ms | 171.0 ms | 29.94/s | — |
| Laya English 421M | MLX | 67.8 ms | 285.6 ms | 23.84/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-lite-GGUF |
a1f9fa12 |
| Kev 0.8B | MLX | kev | — | — | official | jaredpalmer/kev-0.8b@bf75a6a8848ea6960ff2ed108d9ed44c2941174f |
bf75a6a8 |
| Laya English 421M | MLX | laya | — | — | community | aac6fef/laya-mlx |
04767856 |
20261018T080133Z· suitedeqio-basic-220— 220 cases / 652 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 0
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | 75.0% | 86.2% | 92.7% | 94.5% | 70.9% | 41.8% | 88.4% | 83.1% |
| Kev 0.8B | MLX | 61.8% | 80.8% | 81.8% | 87.3% | 58.2% | 20.0% | 82.9% | 78.8% |
| Laya English 421M | MLX | 45.9% | 73.5% | 63.6% | 65.5% | 27.3% | 27.3% | 65.9% | 79.4% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | 137.1 ms | 546.6 ms | 13.55/s | — |
| Kev 0.8B | MLX | 75.0 ms | 144.4 ms | 36.45/s | — |
| Laya English 421M | MLX | 47.1 ms | 166.7 ms | 41.01/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-lite 0.85B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-lite-GGUF |
a1f9fa12 |
| Kev 0.8B | MLX | kev | — | — | official | jaredpalmer/kev-0.8b@bf75a6a8848ea6960ff2ed108d9ed44c2941174f |
bf75a6a8 |
| Laya English 421M | MLX | laya | — | — | community | aac6fef/laya-mlx |
04767856 |
20261018T082457Z· suitedeqio-pl-120— 120 cases / 344 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 0
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | 78.3% | 89.0% | 93.3% | 93.3% | 86.7% | 40.0% | 95.2% | 85.1% |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | 75.8% | 87.8% | 83.3% | 90.0% | 86.7% | 43.3% | 95.2% | 85.1% |
| Decider 2B | GGUF Q8_0 | 74.2% | 87.5% | 90.0% | 90.0% | 83.3% | 33.3% | 92.8% | 84.6% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | 320.7 ms | 1,420.1 ms | 4.86/s | — |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | 232.3 ms | 496.2 ms | 10.24/s | — |
| Decider 2B | GGUF Q8_0 | 225.9 ms | 878.9 ms | 7.83/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-nano-GGUF |
67baf946 |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | basal | basal-2.0-mlx 2.0.0 | mlx-8bit | official | Remek/basal-2.0-mini-MLX-8bit |
f26d1e2d |
| Decider 2B | GGUF Q8_0 | decider | decider-gguf-native | q8_0 | official | Mapika/decider-2b-GGUF |
ff2e5e68 |
20261018T081947Z· suitedeqio-basic-220— 220 cases / 652 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 0
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | 80.0% | 90.5% | 96.4% | 90.9% | 81.8% | 50.9% | 92.7% | 88.6% |
| Decider 2B | GGUF Q8_0 | 79.5% | 90.5% | 90.9% | 92.7% | 83.6% | 50.9% | 93.9% | 88.6% |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | 73.6% | 87.9% | 78.2% | 92.7% | 69.1% | 54.5% | 85.4% | 89.7% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | 333.5 ms | 1,394.1 ms | 5.58/s | — |
| Decider 2B | GGUF Q8_0 | 213.8 ms | 796.7 ms | 9.79/s | — |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | 314.2 ms | 629.8 ms | 8.41/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-nano 2.2B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-nano-GGUF |
67baf946 |
| Decider 2B | GGUF Q8_0 | decider | decider-gguf-native | q8_0 | official | Mapika/decider-2b-GGUF |
ff2e5e68 |
| Basal 2.0 Mini — 1.5B | MLX 8-bit | basal | basal-2.0-mlx 2.0.0 | mlx-8bit | official | Remek/basal-2.0-mini-MLX-8bit |
f26d1e2d |
20261018T093333Z· suitedeqio-pl-120— 120 cases / 344 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 0
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decider 4B | GGUF Q8_0 | 80.8% | 92.4% | 93.3% | 93.3% | 96.7% | 40.0% | 98.8% | 89.6% |
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | 82.5% | 92.2% | 96.7% | 96.7% | 93.3% | 43.3% | 97.6% | 88.6% |
| Basal 2.0 — 4.5B | MLX 8-bit | 80.0% | 91.6% | 90.0% | 93.3% | 83.3% | 53.3% | 92.8% | 91.0% |
| JevK5 4B | GGUF Q8_0 | 82.5% | 90.4% | 96.7% | 96.7% | 96.7% | 40.0% | 98.8% | 85.1% |
| SemIf / Qwen3.5 4B | MLX | 80.8% | 89.8% | 96.7% | 96.7% | 90.0% | 40.0% | 96.4% | 85.1% |
| Kev 4B | GGUF Q8_0 | 75.0% | 82.8% | 93.3% | 96.7% | 93.3% | 16.7% | 97.6% | 73.1% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decider 4B | GGUF Q8_0 | 560.5 ms | 2,299.8 ms | 3.12/s | — |
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | 1,031.1 ms | 4,694.0 ms | 1.56/s | — |
| Basal 2.0 — 4.5B | MLX 8-bit | 953.5 ms | 1,964.7 ms | 2.62/s | — |
| JevK5 4B | GGUF Q8_0 | 1,188.2 ms | 5,235.8 ms | 1.39/s | — |
| SemIf / Qwen3.5 4B | MLX | 968.1 ms | 3,005.5 ms | 2.03/s | — |
| Kev 4B | GGUF Q8_0 | 713.4 ms | 1,672.9 ms | 3.54/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decider 4B | GGUF Q8_0 | decider | decider-gguf-native | q8_0 | official | Mapika/decider-4b-GGUF |
b79f09d9 |
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-mini-GGUF |
c03ac9c3 |
| Basal 2.0 — 4.5B | MLX 8-bit | basal | basal-2.0-mlx 2.0.0 | mlx-8bit | official | Remek/basal-2.0-4.5B-MLX-8bit |
77d3b723 |
| JevK5 4B | GGUF Q8_0 | jevk5 | jevk5-gguf-native | q8_0 | official | alibiserikbay/JevK5-GGUF |
ec67b0bf |
| SemIf / Qwen3.5 4B | MLX | semif | — | — | official | Qwen/Qwen3.5-4B |
851bf6e8 |
| Kev 4B | GGUF Q8_0 | kev | llama.cpp-systemone | q8_0 | official | ggml-org/Kev-4B-GGUF |
d924f2e2 |
20261018T085501Z· suitedeqio-basic-220— 220 cases / 652 scored decisions · Deqio 0.6.4 · 2026-10-18- runtime errors across the listed profiles: 2
Accuracy is whole-case accuracy; Decision accuracy scores every decision/assertion (a Shared case holds several; a Multi case scores every label as present or absent).
| Model | Backend | Accuracy | Decision accuracy | Noul | Choice | Shared | Multi | Shared decision accuracy | Multi label accuracy |
|---|---|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | 89.1% | 95.7% | 96.4% | 100.0% | 96.4% | 63.6% | 98.8% | 93.7% |
| Decider 4B | GGUF Q8_0 | 86.8% | 94.6% | 98.2% | 98.2% | 90.9% | 60.0% | 97.0% | 92.6% |
| Basal 2.0 — 4.5B | GGUF Q8_0 | 85.5% | 94.2% | 89.1% | 96.4% | 89.1% | 67.3% | 96.3% | 93.7% |
| Basal 2.0 — 4.5B | MLX 8-bit | 85.5% | 94.2% | 89.1% | 96.4% | 90.9% | 65.5% | 97.0% | 93.4% |
| JevK5 4B | GGUF Q8_0 | 85.5% | 92.9% | 96.4% | 98.2% | 96.4% | 50.9% | 98.8% | 89.2% |
| Kev 4B | GGUF Q8_0 | 80.5% | 91.7% | 96.4% | 100.0% | 78.2% | 47.3% | 92.1% | 89.7% |
| SemIf / Qwen3.5 4B | MLX | 80.5% | 88.2% | 98.2% | 96.4% | 87.3% | 40.0% | 95.1% | 82.5% |
Median and P95 are per-request latencies; throughput is scored decisions per second over the whole run; cost is the estimated USD per 1 000 scored decisions from the API's reported input tokens and its published input price (remote profiles only; an estimate, not a bill).
| Model | Backend | Median | P95 | Throughput | Cost / 1k decisions |
|---|---|---|---|---|---|
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | 1,096.4 ms | 5,012.8 ms | 1.61/s | — |
| Decider 4B | GGUF Q8_0 | 525.7 ms | 2,068.8 ms | 3.91/s | — |
| Basal 2.0 — 4.5B | GGUF Q8_0 | 1,243.1 ms | 2,059.4 ms | 2.43/s | — |
| Basal 2.0 — 4.5B | MLX 8-bit | 1,248.9 ms | 2,481.6 ms | 2.13/s | — |
| JevK5 4B | GGUF Q8_0 | 1,491.3 ms | 5,341.8 ms | 1.40/s | — |
| Kev 4B | GGUF Q8_0 | 663.7 ms | 1,576.8 ms | 3.90/s | — |
| SemIf / Qwen3.5 4B | MLX | 1,092.7 ms | 3,165.8 ms | 2.07/s | — |
| Model | Backend | Engine | Runtime | Precision | Source | Model / endpoint | Revision |
|---|---|---|---|---|---|---|---|
| Decision 3.0 d3-mini 4.5B | GGUF Q8_0 | decision3 | llama.cpp-systemone | q8_0 | official | ggml-org/vllm-d3-mini-GGUF |
c03ac9c3 |
| Decider 4B | GGUF Q8_0 | decider | decider-gguf-native | q8_0 | official | Mapika/decider-4b-GGUF |
b79f09d9 |
| Basal 2.0 — 4.5B | GGUF Q8_0 | basal | basal-2.0-gguf 2.0.0 | q8_0 | official | Remek/basal-2.0-4.5B |
e5ba9149, 237294ca |
| Basal 2.0 — 4.5B | MLX 8-bit | basal | basal-2.0-mlx 2.0.0 | mlx-8bit | official | Remek/basal-2.0-4.5B-MLX-8bit |
77d3b723 |
| JevK5 4B | GGUF Q8_0 | jevk5 | jevk5-gguf-native | q8_0 | official | alibiserikbay/JevK5-GGUF |
ec67b0bf |
| Kev 4B | GGUF Q8_0 | kev | llama.cpp-systemone | q8_0 | official | ggml-org/Kev-4B-GGUF |
d924f2e2 |
| SemIf / Qwen3.5 4B | MLX | semif | — | — | official | Qwen/Qwen3.5-4B |
851bf6e8 |
git clone https://github.com/ILuce/deqio.git && cd deqio
uv sync --frozen --extra dev # Deqio core + the deqio-client SDK (workspace member)
uv run ruff check src tests clients
uv run pytest
uv run deqio models setup
uv run deqio serveCI (.github/workflows/ci.yml) runs the same lint, byte-compile and test steps with Python 3.10 and 3.12. Release
notes: CHANGELOG.md; release procedure: docs/RELEASE_CHECKLIST.md;
security reporting: SECURITY.md; the engineering rules of the project: AGENTS.md.
The server listens on http://127.0.0.1:8787. Every route takes and returns JSON; the full reference with an
example per route is docs/API.md, and /docs renders the OpenAPI document of the running server.
| Route | Answers | Use it for |
|---|---|---|
POST /v1/noul |
yes / no with probabilities | true/false checks, guardrails |
POST /v1/choice |
exactly one option | routing, classification, triage (/v1/decision is an alias) |
POST /v1/shared |
several decisions over one state, one engine call | checklists, multi-view validation |
POST /v1/score |
one level of an ordered scale | severity, risk, urgency |
POST /v1/multi |
a set of labels, one probability each | tagging, multi-label classification |
POST /v1/act |
the action with the lowest expected cost | decisions where mistakes have different prices |
POST /v1/soam |
one state, many typed questions, one native request | agent checkpoints, release validation |
POST /v1/systemone |
the same, in the raw System One contract | low-level integrations, adapters |
noul, choice and shared are the portable routes: the same request and response on every model. score,
multi, act, soam and systemone are the native typed routes: they forward the model's own System One
contract and are available when the active profile supports them — deqio models installed shows the capability
matrix, and a feature the model lacks is refused with 422, never silently ignored.
A yes/no question:
curl -s http://127.0.0.1:8787/v1/noul -H 'content-type: application/json' -d '{
"state": "The patch changed authentication code. Unit tests passed but integration tests have not run.",
"question": "Should integration tests run before release?"
}'Exactly one option:
curl -s http://127.0.0.1:8787/v1/choice -H 'content-type: application/json' -d '{
"state": "A customer was charged twice for one subscription renewal.",
"question": "Which team should handle this request?",
"options": [
{"id": "billing", "description": "Payments, refunds and invoices."},
{"id": "support", "description": "Product and account support."},
{"id": "sales", "description": "New purchases and upgrades."}
]
}'One state, several typed questions in one native request:
curl -s http://127.0.0.1:8787/v1/soam -H 'content-type: application/json' -d '{
"state": "The laptop arrived with a cracked screen and the customer requests a refund.",
"questions": {
"route": {"type": "choice", "instructions": "Which workflow handles this?",
"criteria": {"refund": "Refund workflow.", "repair": "Repair workflow.", "review": "Human review."}},
"damaged": {"type": "noul", "instructions": "Is the item damaged?"},
"severity": {"type": "score", "instructions": "Rate severity.", "criteria": ["low", "medium", "high"]}
}
}'Every answer carries probabilities and a provenance block (engine, model, backend, pinned revisions, and the
provider, request id and cost estimate for a remote profile), so a decision can always be tied to the exact model
that made it. Operational routes: /health, /v1/models, /v1/models/installed, /v1/models/activate,
/v1/recent, /v1/watch.
deqio-client is a dependency-free Python SDK, installed together with Deqio (or alone with
pip install deqio-client). One method per route; every method returns the server's JSON unchanged and raises
DeqioError with the status and detail when the server rejects the request:
from deqio_client import DeqioClient, DeqioError
client = DeqioClient("http://127.0.0.1:8787")
degraded = client.noul("Checkout works after retry, but payment latency is elevated.", "Is checkout degraded?")
report = client.choice("The API returns HTTP 500 after the latest deployment.", "Classify the report.",
{"bug": "An existing function no longer works", "feature": "A request for new functionality"})
severity = client.score("Payment latency is elevated for some customers.",
{"instructions": "Rate the operational severity.", "criteria": ["low", "medium", "high", "critical"]})
views = client.soam("One confirmed state.", {"ok": {"type": "noul", "instructions": "Is it fine?"},
"kind": {"type": "choice", "criteria": {"a": "A", "b": "B"}}})
print(report["decision"], report["probabilities"])
print(severity["answers"]["decision"], degraded["provenance"]["engine"])client.shared, client.multi, client.act and client.systemone cover the remaining routes; contract=True
negotiates the fail-closed input-completeness contract on the portable routes. The same calls are available from the
shell through the SDK:
deqio decide noul --state "Payment latency is elevated." --question "Is checkout degraded?"
deqio decide choice --state "API returns 500 after deploy." --question "Classify." --option bug="Broken function" --option feature="New request"
deqio decide multi --state "Cracked screen, damaged box, refund asked." --criterion damage="Product damage" --criterion refund="Refund requested"
deqio decide soam --state-file state.txt --questions-json @questions.json --jsonDeqio turns a decision model into a local service: one API for yes/no, single-choice, scored, multi-label and
cost-aware decisions, 31 models from 322M to 27B parameters on MLX, GGUF and CUDA plus two remote APIs, every answer
with probabilities and provenance, a browser dashboard and live request view, and benchmark suites in English and
Polish whose current results you have just read. Install it with uv tool install deqio, pick a model with
deqio models setup, and start with /v1/choice or the Python client. Operational details live in
docs/API.md, docs/MODELS.md and docs/BENCHMARKS.md.
MIT. See LICENSE.