File size: 9,257 Bytes
1d2b62a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4649798
1d2b62a
 
 
 
 
 
 
 
4649798
 
 
 
1d2b62a
 
 
 
 
4649798
 
1d2b62a
4649798
 
 
 
 
 
 
1d2b62a
 
 
4649798
 
 
 
 
 
1d2b62a
4649798
1d2b62a
86214d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1d2b62a
 
4649798
 
 
1d2b62a
 
 
 
 
 
 
4649798
 
 
 
c99027d
1d2b62a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aa0e5a9
 
1d2b62a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4649798
 
1d2b62a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
---

license: apache-2.0
language:
- en
library_name: pytorch
pipeline_tag: text-classification
base_model:
- Qwen/Qwen3-1.7B
- Hanno-Labs/bosun-v3.1-1.7b
datasets:
- LocalLLaMA/typed-decisions
- SargeDev/jev-distill-corpus-v3
tags:
- decision-model
- system-one
- calibrated-decisions
- typed-decisions
- choice
- noul
- score
- qwen3
- bosun
- safetensors
- pytorch
model-index:
- name: Pluto-2.1-1.7B
  results:
  - task:
      type: text-classification
      name: Typed Decisions
    dataset:
      name: LocalLLaMA/typed-decisions
      type: LocalLLaMA/typed-decisions
    metrics:
    - type: accuracy
      name: Accuracy
      value: 0.6695
    - type: brier
      name: Brier
      value: 0.1261
    - type: kl
      name: KL
      value: 0.2139
  - task:
      type: text-classification
      name: DecisionBench matched subset
    dataset:
      name: Hanno-Labs/decision-bench
      type: Hanno-Labs/decision-bench
    metrics:
    - type: accuracy
      name: Accuracy
      value: 0.7208
    - type: brier
      name: Brier
      value: 0.3730
    - type: nll
      name: NLL
      value: 0.7439
---


# Pluto-2.1

### A 1.7B decision model that clears both d1 checkpoints and owns the balance.

Pluto-2.1 reads a state and typed questions, then returns a calibrated probability
distribution for every candidate. It does not generate an answer, so there is
nothing to parse, nothing to retry, and nothing to hallucinate.

Built solo on one **RTX 5060 Ti 16GB**.

**Headline:** **0.6695** on Typed Decisions and **0.7208** on the matched
DecisionBench comparison. It clears both d1-2B and d1-3B on both suites and posts
the **highest mean accuracy** in the comparison at **0.6952** — from a 1.738B
standalone checkpoint with **2–255 candidates**, **choice / noul / score**, and
**Apache-2.0** weights.

---

## The receipts

Same rows and same scorer for every locally measured model. Mean is the mean of
Typed Decisions and DecisionBench matched accuracy.

| Model | Params | Typed Decisions | DecisionBench matched | Mean |
|---|---:|---:|---:|---:|
| **Pluto-2.1** | **1.738B** | **0.6695** | **0.7208** | **0.6952** |
| Pluto-2 400M | 0.397B | **0.7835** | 0.5789 | 0.6812 |
| Bosun 3.1 1.7B (initializer) | 1.738B | 0.4980 | **0.8288** | 0.6634 |
| d1-3B | 3.123B | 0.6495 | 0.6486 | 0.6490 |
| d1-2B | 1.918B | 0.6325 | 0.6339 | 0.6332 |

**What this means**

- **+3.7 points** over d1-2B and **+2.0 points** over d1-3B on Typed Decisions.
- **+8.7 points** over d1-2B and **+7.2 points** over d1-3B on DecisionBench.
- **Highest mean accuracy** across the two suites.
- **1.738B**: 9.4% smaller than d1-2B and 44% smaller than d1-3B.
- **Sharper distributions** than both d1 checkpoints: lower Typed Brier and KL,
  lower DecisionBench NLL and Brier.
- **One forward pass.** No autoregressive decoding and no token bill.
- **Bosun leads broad-only; Pluto-2 leads Typed-only; Pluto-2.1 owns the balance.**

### Typed Decisions — full 2,000-decision board

| Model | Params | Mode | Primary accuracy | ECE | Brier | KL | Coverage |
|---|---:|---|---:|---:|---:|---:|---:|
| Pluto-2 Typed | 395.8M | fitted | **80.30%** | 7.48% | 6.72% | 0.119 | 100% |
| OpenDecider-nano | 394.8M | fitted | 79.30% | 16.09% | **4.28%** | **0.079** | 100% |
| Pluto-2 | 397.4M | fitted | 78.35% | 11.80% | 5.32% | 0.097 | 100% |
| Laya-typed | 421.3M | fitted | 76.80% | 21.52% | 6.15% | 0.117 | 100% |
| Pluto-1 | 332.8M | fitted | 75.15% | 14.00% | 6.49% | 0.118 | 100% |
| Jev 1.13 | ~27B | published | 72.70% | 14.40% | 14.80% | 1.442 | — |
| **Pluto-2.1** | **1.738B** | fine-tuned | **66.95%** | **5.56%** | 12.61% | 0.214 | 100% |
| d1-3B | 3.123B | zero-shot | 64.95% | 3.43% | 14.16% | 0.285 | 100% |
| d1-2B | 1.918B | zero-shot | 63.25% | 3.90% | 14.40% | 0.296 | 100% |
| Bosun 3.1 1.7B | 1.738B | zero-shot | 49.80% | 18.48% | 30.15% | 0.590 | 100% |

### DecisionBench — 1,565-row matched board

| Model | Params | Primary accuracy | ECE | NLL | Brier | Coverage |
|---|---:|---:|---:|---:|---:|---:|
| Bosun 3.1 1.7B | 1.738B | **82.88%** | 6.10% | **0.468** | **22.88%** | 100% |
| **Pluto-2.1** | **1.738B** | **72.08%** | **5.86%** | **0.744** | **37.30%** | **100%** |
| d1-3B | 3.123B | 64.86% | 11.74% | 1.034 | 49.37% | 100% |
| d1-2B | 1.918B | 63.39% | 4.48% | 0.933 | 45.10% | 100% |
| Pluto-2 400M | 397.4M | 57.89% | 3.04% | 1.087 | 54.77% | 100% |

Coverage is `2,000/2,000` on Typed Decisions and `1,565/1,565` of the
DecisionBench matched subset, which is 6.55% of the full 23,900-row suite.
Jev's published card does not report coverage, so it is marked `-`. The matched
subset is the shared accessibility slice, not the full suite.

**Two tracks.** Pluto-2.1 is the balanced generalist. The 400M Pluto-2 Typed checkpoint is the raw Typed specialist and beats every fitted specialist above.

![Accuracy](assets/benchmark_accuracy.png)

![Mean accuracy](assets/average_accuracy.png)

![Balance](assets/balance.png)

![Calibration](assets/calibration.png)

![Parameters](assets/parameters.png)

### Comparison hygiene

The Typed Decisions result is the full 2,000-decision test split. The
DecisionBench result is the 1,565-row matched subset used for every model in the
table: ≤16 candidates and ≤2,048-token prompts, not the full 23,900-row suite.
Bosun, Pluto-2, d1-2B, and d1-3B were all run locally on the same rows and
scored with the same code. Raw summaries are in benchmarks/. The full DecisionBench suite is not claimed.

---

## Architecture

![Architecture](assets/architecture.png)

- Qwen3-1.7B backbone with 256 stable decision-token slots.
- The fine-tuned adapter is merged into the base; this repository is self-contained.
- One forward pass scores every presented candidate.
- Up to 255 runtime choices per question.
- No d1 weights, no d1-generated training targets, no ensemble, and no runtime
  dependency on another model service.

**Lineage:** Qwen3-1.7B → Hanno-Labs Bosun 3.1 1.7B → Pluto-2.1 2,000-step
fine-tune → merged standalone checkpoint. Pluto-2.1 is self-contained at
inference: no adapter files are needed and no base model is downloaded at runtime.

---

## Quickstart

```bash

git clone https://huggingface.co/omida-ai/pluto-2.1

pip install -e "pluto-2.1/code"

```

```python

from pluto21 import Pluto21



model = Pluto21("pluto-2.1")

out = model.predict(

    state={"transaction": "Duplicate charge confirmed by the bank."},

    instructions="Was the duplicate charge confirmed?",

    candidates=[

        {"id": "yes", "label": "Yes"},

        {"id": "no", "label": "No"},

    ],

    decision_type="noul",

    row_id="demo-1",

)

print(out["probabilities"])

```

```python

out = model.predict(

    state={"ticket": "Customer was charged twice and the parcel is late."},

    instructions="Which team should handle this?",

    candidates=[

        {"id": "billing", "label": "Billing", "description": "Charges and refunds"},

        {"id": "shipping", "label": "Shipping", "description": "Delivery and parcels"},

        {"id": "technical", "label": "Technical", "description": "App or site faults"},

    ],

    decision_type="choice",

    row_id="demo-2",

)

print(out["probabilities"])

```

The runtime returns candidate-aligned probabilities. It never generates text.

---

## Model details

| | |
|---|---|
| Parameters | **1,737,985,024** (1.738B) |
| Backbone | Qwen3-1.7B, 28 layers, 40,960-token context |
| Decision interface | 256 stable decision-token slots |
| Candidates | 2–255 per question |
| Outputs | `choice`, `noul`, `score` distributions |
| Weights | BF16, 3.44GB |
| License | Apache-2.0 |
| Initialization | Bosun 3.1 1.7B (Apache-2.0) |
| Base | Qwen3-1.7B |
| Runtime | `pluto21`, PyTorch + Transformers |

## Training

- 2,000 LoRA steps on Pluto’s Typed Decisions and JEV decision data.
- Selected checkpoint: 2,000 steps, the only tested checkpoint that clears both
  d1-2B and d1-3B on both measured benchmarks.
- Trained and merged on one 16GB consumer GPU.
- The adapter is merged into the base; no PEFT dependency at inference.
- The Typed Decisions test split was never used for training or checkpoint
  selection.

## Scope

Pluto-2.1 is a decision model, not a chat or reasoning model. The DecisionBench
comparison is the matched accessibility subset; the full 23,900-row suite is not
claimed. As with any benchmark, validate on your own data before high-stakes use.

## License and attribution

Pluto-2.1 weights and runtime are released under **Apache-2.0**. Upstream
components remain under their original licenses:

- Qwen3-1.7B, Apache-2.0
- Hanno-Labs Bosun 3.1 1.7B, Apache-2.0

See `LICENSE`, `NOTICE`, and `serving.json`. No d1 weights or outputs are
included, and d1 is not required at inference.

## Citation

```bibtex

@misc{omida2026pluto21,

  title  = {Pluto-2.1: A 1.7B Standalone Decision Model},

  author = {Omida AI},

  year   = {2026},

  url    = {https://huggingface.co/omida-ai/pluto-2.1}

}

```

Built by **Omida AI** on one 16GB consumer GPU.