OD-1 Nano (typed-decisions fine-tune)
OD-1 is an open System One decision model: give it a state (text or JSON) and typed questions (choice, noul = yes/no, score = ordinal) and it returns every answer from one forward pass, with full probability distributions including an explicit NOT_ANSWERABLE outcome. The request/response shape follows the Jev / TypeSafe /v1/systemone wire format.
Backbone: Qwen/Qwen3.5-0.8B (Apache-2.0) with typed answer heads read at marker tokens, early-exit heads (layers 6/12/18), and a CLM-style contrastive shortlist head for questions with more than 24 options. Trained with SFT + distillation from Qwen3.5-27B-FP8 (never a compared system), RLCD-style proper-score calibration, an abstention utility, option-order consistency and three adversarial hard-negative rounds; see sources.csv for every training dataset, revision and license.
This checkpoint is the zero-shot Nano further fine-tuned on the typed-decisions TRAIN split (1,080 records; 120 held out for early stopping). Compare it with other fine-tuned systems (e.g. Laya's typed-decisions checkpoint), not with zero-shot ones.
Intended use and an important limitation
Use it for workflows like the typed-decisions benchmark (agent traces, customer service, invoice processing, security incidents). Outside that domain use the zero-shot Nano's guidance.
Results on held-out test sets
All systems answered the same fixed samples (≤ 2,000 decisions per set, seed 0; typed-decisions: all 2,000 decisions of its test split) on 2026-09-25. Baselines were called through one shared interface: each question as one choice over its options (2–24 options), so sets with more options are n/a for them. Jev 1.13 = jev-1.13.0; Laya = convaiinnovations/laya (base and typed-decisions subfolder). Numbers are accuracy.
| typed-decisions test (2,000 decisions) |
accuracy |
ECE |
| this model |
0.751 |
0.130 |
| this model, excluding test states that near-duplicate a train state (306 of 400 records kept) |
0.776 |
– |
| Laya typed-decisions (native typed call) |
0.769 |
0.216 |
| Jev 1.13 (choice-wrapped) |
0.741 |
0.054 |
| Tev1-4B (choice-wrapped) |
0.690 |
0.039 |
| Laya typed-decisions (choice-wrapped) |
0.737 |
0.242 |
Caveat: 94 of the 400 typed-decisions test states have ≥ 50% 13-gram overlap with a train state (the benchmark's own templated split); the row above excludes them.
Speed (H100, batch-1 requests, CUDA graphs, p50 ms per request)
| state / questions |
this model |
Laya typed-decisions (all questions in one call) |
| short (≤ 64 tokens) / 1 |
5.7 |
15.9 |
| short (≤ 64 tokens) / 5 |
10.8 |
17.9 |
| short (≤ 64 tokens) / 20 |
33.8 |
21.4 |
| medium (200–400 tokens) / 1 |
7.8 |
16.9 |
| medium (200–400 tokens) / 5 |
24.5 |
17.7 |
| medium (200–400 tokens) / 20 |
88.8 |
41.4 |
Many questions over a long state are slower than Laya with this one-pass route (it re-reads the state per question); a read-once route is used for large requests in the next release.
Usage
pip install torch transformers huggingface_hub
from huggingface_hub import snapshot_download
path = snapshot_download('mvbalaji/od1-nano-typed-decisions')
import sys; sys.path.insert(0, path)
from od1.model import OD1Model
m = OD1Model.load(path, dtype='bf16', device='cuda')
m.enable_cuda_graphs() # optional, GPU
answers = m.answer(state_text_or_json_string, {
'route': {'type': 'choice', 'instructions': 'Which team?', 'criteria': {'billing': 'payments', 'tech': 'bugs'}},
'refund': {'type': 'noul', 'instructions': 'Is the customer asking for a refund?'},
'urgency': {'type': 'score', 'instructions': 'How urgent?', 'criteria': ['low', 'medium', 'high']}})
Smoke-test output of example.py for this checkpoint: {"route": {"answer": "billing", "confidence": 0.945}, "refund": {"answer": 0.8951218522657585, "confidence": 0.895}, "urgency": {"answer": 2, "confidence": 0.561}}
Training data and licenses
Open datasets with licenses permitting training (see sources.csv for dataset, revision, license, split and counts), project-generated synthetic policy checks, and teacher labels from Qwen3.5-27B-FP8. Held-out evaluation datasets were never trained on; 13-gram deduplication against every test set found no leaks after filtering.
Citation
Paper in preparation (OpenDecide-1).