Can't go off-label
A pointer head scores only the options you list. There is no text to generate, so there is no way to answer with something else.
TL-Decision (Trillion Labs Decision) reads a message, a document or an agent log and answers typed questions: yes/no, pick one, or a score. Every allowed answer gets a calibrated probability. It never writes text, so it can't answer outside the options.
Send the state once with as many questions as you need. They share the text but can't read each other's answers.
{
"state": "Subject: Site down? ... none of our team can
log in, the dashboard shows a 502 ...",
"questions": {
"urgent": { "type": "noul",
"instructions": "Does the customer need a reply within the hour?" },
"team": { "type": "choice",
"instructions": "Which team should handle it?",
"criteria": { "outage": "service down",
"billing": "charges, refunds",
"feature": "requests, how-to" } },
"tone": { "type": "score",
"instructions": "How upset is the customer?",
"criteria": ["calm", "annoyed", "furious"] }
}
}
The request is the example from the TL-Decision-4B model card. The probabilities shown illustrate the response shape only; they are not a recorded model output.
Software can branch on these answers directly. Nothing to parse, nothing to retry.
A pointer head scores only the options you list. There is no text to generate, so there is no way to answer with something else.
Each checkpoint ships with a fitted temperature, so 0.9 means roughly 90%. Expected calibration error is 0.018 on transfer-v4.
Same request and response format as TypeSafe's Jev, through the open kev project. Point an existing client at a TL-Decision server.
Fine-tuning the Trida2.0-4B backbone for typed decisions, scored with kev's own harness.
hard-v1 · 1,083 questions
The same backbone answering through a prompt scores 0.476.
transfer-v4 · 656 questions
On par with Kev-4B (0.817), with lower calibration error (0.018 vs 0.042).
| Suite | TL-Decision-4B | Kev-4B | Trida2.0-4B, prompted |
|---|---|---|---|
| transfer-v4never-trained sources, 656 q | 0.822 | 0.817 | 0.692 |
| transfer-v9MMLU-Pro, evidence removed, 1,046 q | 0.784 | — | 0.653 |
| decision-v7 †kev's decision distribution, 1,184 q | 0.861 | 0.871 | 0.751 |
| hard-v1long policies, multi-hop, 1,083 q | 0.867 | — | 0.476 |
| devtools-v1code review, commit, safety, 1,074 q | 0.745 | — | 0.585 |
| documents-v1consumer complaints, 920 q | 0.891 | — | 0.775 |
| SemIfhand-authored, 144 q | 0.903 | — | 0.757 |
Accuracy on kev's development splits at TL-Decision's shipped temperature (T = 1.823). † Without Banking77 questions with more than 26 options. Kev-4B was scored with the same harness on the same items where shown.
| Suite | Trida2.1-4Bcoming soon | TL-Decision-4B | Kev-4B |
|---|---|---|---|
| KMMLU-Pro2,822 q | 0.466 | 0.418 | 0.417 |
| CLIcK1,995 q | 0.617 | 0.584 | 0.572 |
| KorNAT common knowledge6,007 q | 0.671 | 0.666 | 0.597 |
| KorNAT social values4,000 q | 0.447 | 0.485 | 0.537 |
| typed-decisions test2,000 q | 0.762 | 0.654 | 0.666 |
Trida2.1-4B (coming soon) has its own typed-decision head on a model that also writes text, scored at its fitted calibration temperature. Test items were screened for overlap with training data.
TL-Decision-4B runs on the open kev server and benchmark harness. A single CUDA GPU is enough.
# kev is not on PyPI; install from source (Python 3.12/3.13, uv)
git clone https://github.com/jaredpalmer/kev.git && cd kev
uv sync --extra serve
uv run --extra serve python -m kev.serve \
--run trillionlabs/TL-Decision-4B --port 8009
# → POST /v1/systemone
uv run python -m kev.benchmark --run trillionlabs/TL-Decision-4B \
--suite evals/v4/transfer-v4
curl -s localhost:8009/v1/systemone \
-H 'Content-Type: application/json' \
-d '{"state": "Refund still missing after 10 days.",
"questions": {
"team": {"type": "choice",
"instructions": "Which team should handle it?",
"criteria": {"billing": "charges, refunds",
"outage": "service down"}}}}'
The calibration temperature is stored in head.pt and applied by default.
Set KEV_TEMPERATURE=1.0 for raw probabilities. TypeSafe's Python SDK works against the same endpoint.
Need text generation as well? Trida2.1-4B (coming soon) is a Trida model with typed decisions built in: one set of weights writes text and makes typed decisions.
A model that returns a probability for each allowed answer instead of generating text. It is built for the decisions software makes all day: routing, triage, risk scoring, guardrails.
No. Jev is TypeSafe's hosted model. TL-Decision uses the same request and response format, as implemented by the open kev project, and is not affiliated with TypeSafe.
Trillion Labs' Trida2.0-4B backbone (Qwen3.5-4B architecture: 32 layers, 24 Gated DeltaNet and 8 full-attention), fully fine-tuned, with a pointer head trained from scratch.
Each question becomes its own causal row: the state, the instructions, each option, then a decide token. The head scores each option's hidden state against the decide token, and a softmax over the options gives the probabilities. This is kev's encoding, byte for byte.