Certo Unified 4B
One model, one endpoint, three decision primitives — with calibrated probabilities as the primary output.
Certo Unified reads a state and a set of options and returns a probability distribution, not just a label. A single scoring head serves all three decision shapes:
- Choice — pick one of many options → per-option probabilities + confidence
- Score — rate on an ordinal scale → distribution over levels + expected level
- Noul — yes/no on a proposition → P(yes)
The head reads the backbone at the last prompt token (a cheap fast path) or after a short rationale (a reasoning path); both return a calibrated distribution, so reasoning improves the answer without giving up trustworthy confidence. Software assembles the typed response.
Built on Qwen/Qwen3-4B (Apache-2.0) via Certo's soft-target / proper-score recipe. Research preview.
Usage
from certo_unified_infer import UnifiedCerto # bundled in this repo
m = UnifiedCerto.load("altslate/certo-unified-4b") # or a local path
m.decide(
state="Customer was charged twice for one order and wants it fixed.",
options=[{"id": "duplicate_charge", "desc": "dispute a duplicate/double charge"},
{"id": "new_card", "desc": "request a new physical card"},
{"id": "change_pin", "desc": "change the account PIN"}],
instructions="Which intent best matches the message?",
qtype="choice", mode="auto")
# -> {"answer": "duplicate_charge", "probs": {...}, "confidence": 0.99, "mode": "fast"}
qtype is choice / score / noul; mode is fast / reason / auto (fast, escalating to reasoning when
unsure). For Noul use option ids no/yes; for Score pass ordinal levels.
What it's good at (held-out; temperatures fit on a separate split)
| capability | result |
|---|---|
| Choice — trained + unseen domain | acc 0.93–0.97 · ECE 0.02–0.04 |
| Choice over described options — zero-shot to a new source (tool selection) | acc 0.99 |
| Noul | acc 0.88–0.92 · ECE 0.008–0.03 |
| Score — on a trained rubric | acc up to 1.00 · ECE 0.05 |
| a new decision type, once given examples (e.g. "call a tool now vs ask?") | 0.57 → 0.88 (calibrated) |
Its strength is calibrated, probabilities-first decisions on the decision types it's trained for, and Choice over described options generalizes to unseen domains and even a different source zero-shot.
Honest limitations
This model learns the decision types you give it examples of — it does not zero-shot generalize to arbitrary new specifications. Established across four independent training regimes:
- Score on an unseen rubric (a rubric structure not in training): ~0.46 — no zero-shot transfer.
- Score from a different source (e.g. product-review stars): ~0.61.
- A novel decision type it never saw: near-chance zero-shot until trained on examples.
- Different-source overall (JevBench public 231): acc 0.71 · ECE 0.22 — a genuine distribution-shift gap.
- Not a general world-knowledge model (multiple-choice science ~0.6–0.8).
- Calibration transfers only when the calibration data matches deployment; on a very different source it degrades.
How to use it well: fine-tune / train it on your decision types (routing, triage, intent, eligibility, ordinal scoring, verification, tool selection). There it is accurate and its probabilities are trustworthy — which is what lets you abstain, escalate, or trade quality against cost.
Related
Part of certo — calibrated decision models. See also the concise
reasoner altslate/certo-r1-qwen3-4b and the encoder
altslate/certo-decision-model.
Inspired by Jev / "System-1" decision models. Independent project — not affiliated with TypeSafe.