Add README: product/launch tone, model family + lineage, compact results
Browse files
README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
base_model: Qwen/Qwen3-4B-Base
|
| 4 |
+
library_name: pytorch
|
| 5 |
+
tags:
|
| 6 |
+
- decision-model
|
| 7 |
+
- system-one
|
| 8 |
+
- calibrated-probabilities
|
| 9 |
+
- typed-decisions
|
| 10 |
+
- jev-like
|
| 11 |
+
pipeline_tag: text-classification
|
| 12 |
+
datasets:
|
| 13 |
+
- stanfordnlp/snli
|
| 14 |
+
- nyu-mll/multi_nli
|
| 15 |
+
- facebook/anli
|
| 16 |
+
- google/boolq
|
| 17 |
+
- cais/mmlu
|
| 18 |
+
- allenai/ai2_arc
|
| 19 |
+
- allenai/openbookqa
|
| 20 |
+
- tau/commonsense_qa
|
| 21 |
+
- allenai/sciq
|
| 22 |
+
- allenai/qasc
|
| 23 |
+
- jeggers/logiqa2_formatted
|
| 24 |
+
- deepmind/aqua_rat
|
| 25 |
+
- openlifescienceai/medmcqa
|
| 26 |
+
- cua-ai/cua-s1-forms
|
| 27 |
+
- dwidlee/systemone-lite-general
|
| 28 |
+
- MagaBitmex/jev-4b-distill-data
|
| 29 |
+
- Zhengping/UNLI
|
| 30 |
+
- metaeval/ambient
|
| 31 |
+
---
|
| 32 |
+
|
| 33 |
+
# typical-medium
|
| 34 |
+
|
| 35 |
+
**Typical is an open System-One decision model family, built by OzLabs.**
|
| 36 |
+
|
| 37 |
+
Give it a state β a support ticket, a document, a form, a log line, any text β a question with its
|
| 38 |
+
rubric, and a label set defined at runtime, and it returns a calibrated probability over those
|
| 39 |
+
labels plus an explicit abstain option. One forward pass, no generated text to parse, about 57 ms
|
| 40 |
+
per decision on an H100. Every decision is one of three typed primitives: **Choice** (categorical),
|
| 41 |
+
**Score** (ordinal), **Noul** (yes/no, exactly order-invariant).
|
| 42 |
+
|
| 43 |
+
`typical-medium` is **Release 1 at 4B** (checkpoint `tm1b`): the same recipe as
|
| 44 |
+
[`typical-small`](https://huggingface.co/OzLabs/typical-small) β dedicated Score and Noul heads, the
|
| 45 |
+
hard curriculum, 1,024-token states β on a larger backbone. It is the knee of capability per
|
| 46 |
+
millisecond in the release ladder: +11 points of JevBench standard and +11 points of MMLU-Pro
|
| 47 |
+
among-K over `typical-small`, at 1.25x the per-decision latency.
|
| 48 |
+
|
| 49 |
+
## Why it's different
|
| 50 |
+
|
| 51 |
+
- **The decision is read directly from the model's own candidate-conditioned computation.** The
|
| 52 |
+
state and candidates are encoded once; the answer is read off that computation instead of being
|
| 53 |
+
sampled one token at a time.
|
| 54 |
+
- **The state is KV-cached**, so asking many questions about one state is cheap β each additional
|
| 55 |
+
question is a short suffix against a cache that's already built.
|
| 56 |
+
- **Latency is flat up to ~64 options** (57 ms at K = 2, 58 ms at K = 32); 96 ms at K = 256 β the
|
| 57 |
+
state dominates until the rendered option list does.
|
| 58 |
+
- **Abstention is a first-class output**, not a parsed refusal: every decision carries a calibrated
|
| 59 |
+
P(β
) alongside the label probabilities.
|
| 60 |
+
- **Probabilities, not verbalized confidence.** No "I'm 80% sure" string to parse β an actual
|
| 61 |
+
calibrated number.
|
| 62 |
+
|
| 63 |
+
## Model family
|
| 64 |
+
|
| 65 |
+
| | [`typical-small-preview`](https://huggingface.co/OzLabs/typical-small-preview) | [`typical-small`](https://huggingface.co/OzLabs/typical-small) | **`typical-medium`** |
|
| 66 |
+
|---|---|---|---|
|
| 67 |
+
| Backbone | Qwen3-1.7B-Base | Qwen3-1.7B-Base | Qwen3-4B-Base |
|
| 68 |
+
| Tap layer | 20 / 28 | 20 / 28 | 26 / 36 |
|
| 69 |
+
| Per-decision latency, K=2 (one H100) | 45 ms | 45 ms | 57 ms |
|
| 70 |
+
| Peak memory, K=2 | 6.4 GB | 6.4 GB | 14.6 GB |
|
| 71 |
+
| JevBench standard / easy / hard | .750 / 1.00 / .387 | .694 / 1.00 / .432 | .806 / 1.00 / .423 |
|
| 72 |
+
| MMLU-Pro among-K | .330 | .343 | .458 |
|
| 73 |
+
| Held-out workflow noul / score | .699 / .498 | .715 / .520 | .811 / .528 |
|
| 74 |
+
| Calibration (typed-decisions NLL) | 2.06 | 1.25 | **1.18** |
|
| 75 |
+
|
| 76 |
+
Full ablations and matched-baseline tables: REPORT.md Β§3af.
|
| 77 |
+
|
| 78 |
+
## Results
|
| 79 |
+
|
| 80 |
+
| | `typical-medium` (`tm1b`) |
|
| 81 |
+
|---|---|
|
| 82 |
+
| SNLI / MNLI / BoolQ / ANLI | .909 / .861 / .843 / .544 |
|
| 83 |
+
| CLINC-150 / TREC-fine / HWU64 / 20NG | .847 / .414 / .769 / .588 |
|
| 84 |
+
| Held-out workflow: noul / score / style | .811 / .528 / .859 |
|
| 85 |
+
| External floor: PagerDuty (floor .792) | **.838** |
|
| 86 |
+
| JevBench standard / easy / hard (Brier std / hard; ECE std) | .806 / 1.00 / .423 (.30 / .77; **.09**) |
|
| 87 |
+
|
| 88 |
+
**JevBench standard, same 231 public ids, next to the open field:**
|
| 89 |
+
|
| 90 |
+
| jeff (GLiFormer 400M) | Laya (ModernBERT) | **typical-medium** | open-alternative-jev (Qwen3.5-4B) | system-one-open (Gemma E2B LoRA) |
|
| 91 |
+
|---|---|---|---|---|
|
| 92 |
+
| .750 | .694 | **.806** | .833 | .931 |
|
| 93 |
+
|
| 94 |
+
Public-subset per-item comparison on the 231 public ids; not a ranked leaderboard entry.
|
| 95 |
+
|
| 96 |
+
## Quickstart
|
| 97 |
+
|
| 98 |
+
```bash
|
| 99 |
+
huggingface-cli download OzLabs/typical-medium --include "inference/*" --local-dir typical-medium
|
| 100 |
+
pip install -r typical-medium/inference/requirements.txt
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
```python
|
| 104 |
+
import sys; sys.path.insert(0, "typical-medium/inference")
|
| 105 |
+
from typical import Typical
|
| 106 |
+
|
| 107 |
+
m = Typical.from_pretrained("OzLabs/typical-medium", device="auto")
|
| 108 |
+
|
| 109 |
+
ticket = ("Customer reports repeated 500 errors on checkout after the last deploy; "
|
| 110 |
+
"asking for a refund.")
|
| 111 |
+
m.choice(ticket, "Which team should handle this?", ["billing", "infra", "support", "security"])
|
| 112 |
+
m.score(ticket, "How severe is this ticket?", ["1", "2", "3", "4"])
|
| 113 |
+
m.noul(ticket, "Does this ticket violate the refund-abuse policy (3+ refunds in 30 days)?")
|
| 114 |
+
```
|
| 115 |
+
|
| 116 |
+
Verified: this exact sequence (download, install, run) works on CPU (checked against `typical-small`'s
|
| 117 |
+
identical inference package; `typical-medium` uses the same code path on a larger backbone).
|
| 118 |
+
|
| 119 |
+
`choice`/`score` return `{label: probability, ...}` plus `p_null`; `noul` returns `P(yes)`. `decide`
|
| 120 |
+
mirrors the internal `PCDMDecider.decide` exactly, including the runtime block (latency, `p_null`,
|
| 121 |
+
truncation flags) β see `inference/README.md` for the full API and `inference/example.py` for a
|
| 122 |
+
runnable script.
|
| 123 |
+
|
| 124 |
+
## Training recipe
|
| 125 |
+
|
| 126 |
+
- **Data mix** E .40 / K .15 / W .35 / U .10 of every batch (evidence, knowledge-MCQ, rubric-
|
| 127 |
+
conditioned workflow, soft-target uncertainty), plus 15β20% null augmentation on W rows
|
| 128 |
+
(`--null_aug W:0.20`) so the model learns to abstain, not just choose.
|
| 129 |
+
- **1,024-token decision states**, so policy documents and multi-hop states are in-distribution.
|
| 130 |
+
- **Typed heads:** Score is K-way Choice trained with ordinal-smoothed targets (Ο = 0.7, zero head
|
| 131 |
+
code); Noul is a dedicated Bernoulli head, routed per row β only rows whose candidates are exactly
|
| 132 |
+
`{yes, no}` use it, every other 2-way set scores as ordinary Choice.
|
| 133 |
+
- **12,000 steps, effective batch 64** (`bs 64`, `grad_accum 4`), LoRA rank 16 on the top 8 layers of
|
| 134 |
+
a 26-of-36-layer truncated backbone.
|
| 135 |
+
- **Held-out by construction:** one rubric style and three whole domains of the hard curriculum
|
| 136 |
+
(`data_wh`), plus temporal/numeric/probability/trade-off composition (level 7), are eval-only β
|
| 137 |
+
never trained on.
|
| 138 |
+
|
| 139 |
+
**Data sources and licenses:**
|
| 140 |
+
|
| 141 |
+
| Source | Role | License |
|
| 142 |
+
|---|---|---|
|
| 143 |
+
| SNLI, MultiNLI, ANLI, BoolQ, MMLU-aux, ARC, OpenBookQA, CommonsenseQA, SciQ, QASC, LogiQA2, AQuA-RAT, MedMCQA | evidence + knowledge-MCQ | permissive research licenses (CC-BY-SA / MIT / Apache-2.0 family) |
|
| 144 |
+
| `cua-ai/cua-s1-forms` | workflow (GUI-form synth) | MIT |
|
| 145 |
+
| `dwidlee/systemone-lite-general` | workflow (rule-labeled typed decisions) | MIT |
|
| 146 |
+
| `MagaBitmex/jev-4b-distill-data` | workflow (programmatic gold) | Apache-2.0 |
|
| 147 |
+
| in-repo rubric-conditioned generator (`data_wf`, `data_wf_long`) | workflow | generated, no external license |
|
| 148 |
+
| in-repo rule-engine generator (`data_wh`, DecisionMix v2) | hard curriculum | generated, no external license |
|
| 149 |
+
| `Zhengping/UNLI` (validation split) | soft-target uncertainty | MIT |
|
| 150 |
+
| `metaeval/ambient` (ambiguous rows, trained on) | soft-target uncertainty | **license undeclared on its HF card β flagged, not asserted** |
|
| 151 |
+
| `metaeval/chaos-mnli-ambiguity` (eval-only, never trained on) | soft-target uncertainty | **license undeclared on its HF card β flagged, not asserted** |
|
| 152 |
+
|
| 153 |
+
Evaluation-only, never trained on: JevBench (public subset), `typed-decisions`, PagerDuty, tree-choice,
|
| 154 |
+
jevlogs (Loghub research license, caveated), Mind2Web.
|
| 155 |
+
|
| 156 |
+
## Limitations
|
| 157 |
+
|
| 158 |
+
- Hard tier is .423 (chance .336, SE β .045 at n = 111) β the least reliable tier; the open field's
|
| 159 |
+
best is .73. The long-policy slice specifically is .21 β the weakest single family.
|
| 160 |
+
- TREC-fine regresses 10 points vs. `ladder_4b`, the same backbone trained without typed heads or
|
| 161 |
+
DecisionMix v2 (K = 50 fine-grained topics) β the one clear regression at this size.
|
| 162 |
+
- Held-out rubric styles and Noul accuracy give back a few points vs. that same untyped 4B baseline,
|
| 163 |
+
in exchange for the calibration and external-floor gains above.
|
| 164 |
+
- Inference code is included in this repo; training code release to follow.
|
| 165 |
+
|
| 166 |
+
## License
|
| 167 |
+
|
| 168 |
+
Apache-2.0 (backbone `Qwen/Qwen3-4B-Base` is Apache-2.0; this release's weights are a LoRA adapter
|
| 169 |
+
plus small Choice/Score/Noul heads over that backbone). Training-data licenses above; JevBench
|
| 170 |
+
numbers are a public-subset run against `fstandhartinger/jevbench` v1.2.1, not a submitted or ranked
|
| 171 |
+
leaderboard entry.
|
| 172 |
+
|
| 173 |
+
## Files in this repository
|
| 174 |
+
|
| 175 |
+
- `best.pt` β this checkpoint (`tm1b`).
|
| 176 |
+
- `results.json` / `eval_wf_full.json` / `probe_results.json` / `jevbench_summary.json` β full eval
|
| 177 |
+
suite, post-hoc held-out/external eval, probe results, JevBench run summary.
|
| 178 |
+
- `inference/` β the self-contained `Typical` inference package (see Quickstart above).
|
| 179 |
+
- `MANIFEST.json` β checksum + provenance record for this release.
|
| 180 |
+
|
| 181 |
+
## Lineage
|
| 182 |
+
|
| 183 |
+
[`typical-small-preview`](https://huggingface.co/OzLabs/typical-small-preview) (Release 0) β
|
| 184 |
+
[`typical-small`](https://huggingface.co/OzLabs/typical-small) (Release 1 at 1.7B) β
|
| 185 |
+
**`typical-medium`** (Release 1 at 4B, this repo).
|
| 186 |
+
|
| 187 |
+
Coming: `typical-large` β a 14B ladder checkpoint scores JevBench .875/.468 (standard/hard), but
|
| 188 |
+
probability calibration at that size is not yet fixed (Β§3ab). Trained, not released.
|
| 189 |
+
|
| 190 |
+
Typical is built by [OzLabs](https://huggingface.co/OzLabs).
|