Upload folder using huggingface_hub
Browse files- README.md +185 -126
- manifest.json +1 -1
README.md
CHANGED
|
@@ -53,32 +53,50 @@ answer with calibrated probabilities, the parts of the context it relied on, and
|
|
| 53 |
certified signal for when to act and when to escalate. It never generates text, so there
|
| 54 |
is nothing to parse and nothing to hallucinate.
|
| 55 |
|
| 56 |
-
**419M parameters** — a ModernBERT-Large encoder plus a decision head
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
```bash
|
| 69 |
-
pip install "mimir-decisions[local]"
|
| 70 |
-
pip install "mimir-decisions[local-gpu]"
|
| 71 |
-
pip install mimir-decisions
|
| 72 |
```
|
| 73 |
|
| 74 |
-
Python 3.11 or later. The distribution is `mimir-decisions`; the import and the command
|
|
|
|
| 75 |
|
| 76 |
## Quickstart
|
| 77 |
|
| 78 |
```python
|
| 79 |
from mimir import Mimir
|
| 80 |
|
| 81 |
-
model = Mimir.from_pretrained("Mythologic/MIMIR-1") # downloads
|
| 82 |
|
| 83 |
result = model.choose(
|
| 84 |
"My card was charged twice for the same order.",
|
|
@@ -91,12 +109,21 @@ print(result.probabilities) # calibrated probability of each option
|
|
| 91 |
print(result.certificate) # the certified threshold the decision was checked against
|
| 92 |
```
|
| 93 |
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
|
| 101 |
## What it decides
|
| 102 |
|
|
@@ -110,22 +137,100 @@ print(result.certificate) # the certified threshold the decision was checked
|
|
| 110 |
| `rate` — rate on your ordered scale | a level id |
|
| 111 |
| `estimate` — estimate a number in `[low, high]` | a number with an interval |
|
| 112 |
|
| 113 |
-
Every result carries `status`, `confidence`, `relevant_context` (the context parts
|
| 114 |
-
the answer, most relevant first), `certificate`, `deferral` and `latency_ms`.
|
| 115 |
-
yes/no and verify results add `abstain_probability` and a conformal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
-
|
| 118 |
-
|
|
|
|
|
|
|
|
|
|
| 119 |
|
| 120 |
## Load paths
|
| 121 |
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
|
| 126 |
| Path | Format | Best at |
|
| 127 |
|---|---|---|
|
| 128 |
-
| **`Mythologic/MIMIR-1`** (
|
| 129 |
| **`Mythologic/MIMIR-1`, `subfolder="transformers"`** | same weights for plain `transformers` | research, custom runtimes |
|
| 130 |
|
| 131 |
### Package mode (recommended)
|
|
@@ -138,9 +243,9 @@ mimir serve # HTTP, configured decision endpoints
|
|
| 138 |
mimir mcp # MCP server: configured decision tools by default
|
| 139 |
```
|
| 140 |
|
| 141 |
-
Both serve the certified fp32 graph with the shipped policy, so the certificate
|
| 142 |
applies to what they return. Adapters for eight agent frameworks, worked examples and
|
| 143 |
-
the full API reference
|
| 144 |
|
| 145 |
### Transformers mode
|
| 146 |
|
|
@@ -158,114 +263,66 @@ outputs.utilities # [4 depths, records, candidates]: every depth's readouts
|
|
| 158 |
```
|
| 159 |
|
| 160 |
Load plus forward on pre-encoded batches only: text handling, calibration, the server
|
| 161 |
-
and MCP stay in `mimir-decisions`. The staged modelling code holds the inference-only
|
| 162 |
-
forward — no loss, no training machinery — the same computation the shipped
|
| 163 |
-
already carries.
|
| 164 |
-
|
| 165 |
-
## Evidence
|
| 166 |
-
|
| 167 |
-
Head-to-head against Laya (`convaiinnovations/laya`) and GLiNER2.5-Decide
|
| 168 |
-
(`fastino/GLiNER2.5-Decide`), each run by us on identical records with paired bootstrap
|
| 169 |
-
95% intervals. Exact-match accuracy at full coverage:
|
| 170 |
-
|
| 171 |
-
| Task | n | MIMIR | Laya | GLiNER | MIMIR − Laya |
|
| 172 |
-
|---|---|---|---|---|---|
|
| 173 |
-
| Banking77 | 3,076 | **0.883** | 0.335 | 0.706 | +0.547 [+0.530, +0.564] |
|
| 174 |
-
| MASSIVE en | 2,974 | **0.866** | 0.443 | 0.643 | +0.423 [+0.403, +0.443] |
|
| 175 |
-
| typed-decisions | 2,000 | **0.725** | 0.361 | 0.487 | +0.363 [+0.332, +0.394] |
|
| 176 |
-
| prompt-injections | 116 | **0.957** | 0.681 | 0.638 | +0.276 [+0.190, +0.362] |
|
| 177 |
-
| XNLI en | 4,995 | **0.828** | 0.676 | 0.398 | +0.152 [+0.137, +0.167] |
|
| 178 |
-
| BoolQ | 3,270 | **0.840** | 0.777 | 0.727 | +0.064 [+0.048, +0.080] |
|
| 179 |
-
| AG News | 7,600 | 0.921 | 0.926 | 0.735 | −0.005 [−0.011, +0.000] |
|
| 180 |
-
| SST-5 | 2,210 | 0.362 | 0.360 | 0.446 | +0.001 [−0.029, +0.033] |
|
| 181 |
-
| fast-decisions | 2,900 | 0.432 | 0.527 | 0.620 | −0.050 [−0.071, −0.030] |
|
| 182 |
-
| DAIR Emotion | 2,000 | 0.080 | 0.589 | 0.562 | −0.508 [−0.530, −0.485] |
|
| 183 |
-
|
| 184 |
-
MIMIR leads decisively on six tasks and ties Laya on AG News and SST-5; GLiNER leads on
|
| 185 |
-
its own fast-decisions showcase. DAIR Emotion is abstention, not error — the model answers
|
| 186 |
-
"none of the listed options" on 1,792 of 2,000 records (mean abstain mass 0.656); forced
|
| 187 |
-
to pick among the six emotions it scores 0.595, against Laya's 0.589.
|
| 188 |
-
|
| 189 |
-
## Certificate
|
| 190 |
-
|
| 191 |
-
The fp32 policy ships selective thresholds proven on 95,550 held-out records at four risk
|
| 192 |
-
levels (origin `custom` in `policy/fp32.json`):
|
| 193 |
-
|
| 194 |
-
| Type | 1% risk: taken | Errors |
|
| 195 |
-
|---|---|---|
|
| 196 |
-
| binary | 6,781 of 19,319 (35.1%) | 47 (0.69%) |
|
| 197 |
-
| categorical | 19,947 of 54,728 (36.4%) | 166 (0.83%) |
|
| 198 |
-
| ranking | 1,441 of 3,863 (37.3%) | 5 (0.35%) |
|
| 199 |
-
| ordinal, multilabel | defer every record | — |
|
| 200 |
-
|
| 201 |
-
Read the table as a contract: at 1% risk the model acts on about a third of binary,
|
| 202 |
-
categorical and ranking calls and its error rate on the acted calls stays under the risk.
|
| 203 |
-
Thresholds were fit on the PyTorch model's outputs and transferred to the graph, whose
|
| 204 |
-
outputs match the model on every decision over 312 verification records (max relative
|
| 205 |
-
readout gap 6.5e-5, zero decision differences). The release also ships a 200-record
|
| 206 |
-
equivalence set, so any CPU hardware replays the graph and must reproduce every shipped
|
| 207 |
-
decision. The certified configuration is CPU, ONNX Runtime 1.30.0. Other runtimes
|
| 208 |
-
calibrate their own policy from their own labels:
|
| 209 |
-
|
| 210 |
-
```python
|
| 211 |
-
from mimir import Mimir
|
| 212 |
-
from mimir.core.labels import LabelledDecision
|
| 213 |
-
from mimir.runtime.calibrate import calibrate
|
| 214 |
-
|
| 215 |
-
model = Mimir.from_pretrained("Mythologic/MIMIR-1")
|
| 216 |
-
labelled: list[LabelledDecision] = [...] # your context/decision/label triples
|
| 217 |
-
policy = calibrate(model, labelled, risk=0.01, confidence=0.95)
|
| 218 |
-
```
|
| 219 |
-
|
| 220 |
-
The fp16 graph ships without a policy; certify it the same way.
|
| 221 |
|
| 222 |
## Speed
|
| 223 |
|
| 224 |
-
About **1.7 decisions per second on an M4 CPU**, flat from 1 to 32 concurrent
|
| 225 |
-
the batching absorbs concurrency rather than queueing it. GPU throughput is
|
| 226 |
-
in this release.
|
| 227 |
|
| 228 |
## Architecture
|
| 229 |
|
| 230 |
-
- **Backbone:** ModernBERT-Large encoder plus a decision head trained from scratch:
|
| 231 |
question-conditioned state memory, a candidate set processor, and a shared reasoning
|
| 232 |
-
cell applied once per iteration. 419M total.
|
| 233 |
-
- **Typed readouts:** choice, multi-choice, yes/no, verification, ranking, rating
|
| 234 |
-
estimation
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
context behind every decision.
|
| 241 |
|
| 242 |
## Training
|
| 243 |
|
| 244 |
-
Training data and procedure are private.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 245 |
|
| 246 |
## FAQ
|
| 247 |
|
| 248 |
-
**
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
needs a label on every row, read the argmax over the options; if it needs honesty, read
|
| 252 |
-
the abstention.
|
| 253 |
|
| 254 |
**What do I do with ABSTAINED and DEFERRED?**
|
| 255 |
Route them to a person or a stronger check. Pipelines that treat every call as an answer
|
| 256 |
turn refusals into someone else's silent default.
|
| 257 |
|
| 258 |
-
**
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
**Why do ordinal and multilabel always defer?**
|
| 263 |
-
Their first testable thresholds fail on held-out data. Shipping them would be shipping an
|
| 264 |
-
unproven promise.
|
| 265 |
|
| 266 |
**How do I reproduce the numbers?**
|
| 267 |
The release carries a 200-record equivalence set: replay the graph on any CPU and every
|
| 268 |
-
shipped decision must match.
|
| 269 |
|
| 270 |
## Files
|
| 271 |
|
|
@@ -278,20 +335,22 @@ shipped decision must match.
|
|
| 278 |
| `transformers/modeling_mimir.py`, `transformers/configuration_mimir.py` | the architecture, `transformers` and `torch` only |
|
| 279 |
| `tokenizer.json` | the 50,368-entry vocabulary |
|
| 280 |
| `config.json` | variants, limits, layout and graph contract for `mimir-decisions` |
|
| 281 |
-
| `policy/fp32.json` (+ `.npz`) | the certified selective thresholds |
|
| 282 |
| `equivalence/` | 200 records with inputs, so any CPU replays the graph |
|
| 283 |
| `LICENSE` | the Mythologic Community Model License |
|
| 284 |
| `manifest.json` | SHA-256 of every file above |
|
| 285 |
-
|
| 286 |
-
No optimiser state, no scheduler state, no RNG. Training cannot be resumed from these files.
|
| 287 |
|
| 288 |
## Links
|
| 289 |
|
| 290 |
-
- Package: `mimir-decisions` on PyPI
|
| 291 |
-
- Code: [abderahmane-ai/mimir](https://github.com/abderahmane-ai/mimir) on GitHub
|
|
|
|
|
|
|
|
|
|
| 292 |
|
| 293 |
## Licence
|
| 294 |
|
| 295 |
-
Mythologic Community License (see `LICENSE`): free for research, personal use
|
| 296 |
-
organisations under $500K annual revenue; commercial use above that needs a
|
| 297 |
-
licence. Contact Mythologic for production, on-premises and indemnity terms.
|
|
|
|
| 53 |
certified signal for when to act and when to escalate. It never generates text, so there
|
| 54 |
is nothing to parse and nothing to hallucinate.
|
| 55 |
|
| 56 |
+
- **419M parameters** — a ModernBERT-Large encoder plus a decision head.
|
| 57 |
+
- **Certified, not vibes**: selective thresholds with finite-sample guarantees ship in
|
| 58 |
+
the box, so the model can tell you when its answer is safe to act on — and when it is
|
| 59 |
+
not.
|
| 60 |
+
- **Built for the decision layer under agents**: routing requests, gating tool calls,
|
| 61 |
+
verifying claims.
|
| 62 |
+
|
| 63 |
+
| | |
|
| 64 |
+
|---|---|
|
| 65 |
+
| Repository | `Mythologic/MIMIR-1` (this card) |
|
| 66 |
+
| Package | [`mimir-decisions` on PyPI](https://pypi.org/project/mimir-decisions/) — `pip install "mimir-decisions[local]"` |
|
| 67 |
+
| Code and docs | [abderahmane-ai/mimir](https://github.com/abderahmane-ai/mimir) |
|
| 68 |
+
| Licence | Mythologic Community License — free for research, personal use and organisations under $500K annual revenue; [full text](LICENSE) |
|
| 69 |
|
| 70 |
+
## Intended use and out of scope
|
| 71 |
+
|
| 72 |
+
**Use it for** structured decisions where the caller must be able to act or escalate on
|
| 73 |
+
the model's own terms: routing a ticket to a team, gating a refund tool call, verifying
|
| 74 |
+
a claim against evidence passages, ranking vendors against a requirement, rating an
|
| 75 |
+
incident on an ordered scale, estimating a bounded number with an interval.
|
| 76 |
|
| 77 |
+
**Do not use it for** anything that needs generated prose (it cannot produce text),
|
| 78 |
+
records that are not in English, or as the only reviewer of a decision whose options
|
| 79 |
+
were themselves wrong. Where the model cannot back an answer it returns `ABSTAINED` or
|
| 80 |
+
`DEFERRED` — route those to a person or a stronger check rather than reading them as a
|
| 81 |
+
vote against an option.
|
| 82 |
+
|
| 83 |
+
## Installation
|
| 84 |
|
| 85 |
```bash
|
| 86 |
+
pip install "mimir-decisions[local]" # CPU engine (certified configuration)
|
| 87 |
+
pip install "mimir-decisions[local-gpu]" # CUDA engine
|
| 88 |
+
pip install mimir-decisions # data models and HTTP client only
|
| 89 |
```
|
| 90 |
|
| 91 |
+
Python 3.11 or later. The distribution is `mimir-decisions`; the import and the command
|
| 92 |
+
line are both `mimir`.
|
| 93 |
|
| 94 |
## Quickstart
|
| 95 |
|
| 96 |
```python
|
| 97 |
from mimir import Mimir
|
| 98 |
|
| 99 |
+
model = Mimir.from_pretrained("Mythologic/MIMIR-1") # downloads and verifies on first use
|
| 100 |
|
| 101 |
result = model.choose(
|
| 102 |
"My card was charged twice for the same order.",
|
|
|
|
| 109 |
print(result.certificate) # the certified threshold the decision was checked against
|
| 110 |
```
|
| 111 |
|
| 112 |
+
### Three outcomes, not two
|
| 113 |
+
|
| 114 |
+
Every call ends `DECIDED`, `ABSTAINED` or `DEFERRED`.
|
| 115 |
+
|
| 116 |
+
- `DECIDED` — an option is chosen and certified to act on at your risk level.
|
| 117 |
+
- `ABSTAINED` — none of the listed options is supported; this is an answer, not a
|
| 118 |
+
failure.
|
| 119 |
+
- `DEFERRED` — the certificate does not cover this call; `result.deferral.reason` says
|
| 120 |
+
why: `below_threshold` (confidence missed the certified threshold),
|
| 121 |
+
`out_of_distribution` (the input sits outside what the thresholds were certified on)
|
| 122 |
+
or `no_certified_threshold` (nothing is certified for this decision type at this risk
|
| 123 |
+
level).
|
| 124 |
+
|
| 125 |
+
A decision layer that cannot refuse is a random generator with calibrated-looking
|
| 126 |
+
outputs. The refusal is the product.
|
| 127 |
|
| 128 |
## What it decides
|
| 129 |
|
|
|
|
| 137 |
| `rate` — rate on your ordered scale | a level id |
|
| 138 |
| `estimate` — estimate a number in `[low, high]` | a number with an interval |
|
| 139 |
|
| 140 |
+
Every result carries `status`, `confidence`, `relevant_context` (the context parts
|
| 141 |
+
behind the answer, most relevant first), `certificate`, `deferral` and `latency_ms`.
|
| 142 |
+
Choice, yes/no and verify results add `abstain_probability` and a conformal
|
| 143 |
+
`prediction_set`.
|
| 144 |
+
|
| 145 |
+
A context is a string, a list of passages, tables with typed numbers and dates, or a
|
| 146 |
+
JSON state. `decide_many` batches many decisions, and every method has an async form.
|
| 147 |
+
The answer space is defined at request time, so new option sets need no retraining.
|
| 148 |
+
|
| 149 |
+
## Benchmarks
|
| 150 |
+
|
| 151 |
+
Head-to-head against Laya (`convaiinnovations/laya`) and GLiNER2.5-Decide
|
| 152 |
+
(`fastino/GLiNER2.5-Decide`), each run by us on identical records with paired bootstrap
|
| 153 |
+
95% intervals. Exact-match accuracy at full coverage:
|
| 154 |
+
|
| 155 |
+
| Task | n | MIMIR | Laya | GLiNER | MIMIR − Laya |
|
| 156 |
+
|---|---|---|---|---|---|
|
| 157 |
+
| Banking77 | 3,076 | **0.883** | 0.335 | 0.706 | +0.547 [+0.530, +0.564] |
|
| 158 |
+
| MASSIVE en | 2,974 | **0.866** | 0.443 | 0.643 | +0.423 [+0.403, +0.443] |
|
| 159 |
+
| typed-decisions | 2,000 | **0.725** | 0.361 | 0.487 | +0.363 [+0.332, +0.394] |
|
| 160 |
+
| prompt-injections | 116 | **0.957** | 0.681 | 0.638 | +0.276 [+0.190, +0.362] |
|
| 161 |
+
| XNLI en | 4,995 | **0.828** | 0.676 | 0.398 | +0.152 [+0.137, +0.167] |
|
| 162 |
+
| BoolQ | 3,270 | **0.840** | 0.777 | 0.727 | +0.064 [+0.048, +0.080] |
|
| 163 |
+
| AG News | 7,600 | 0.921 | 0.926 | 0.735 | −0.005 [−0.011, +0.000] |
|
| 164 |
+
| SST-5 | 2,210 | 0.362 | 0.360 | 0.446 | +0.001 [−0.029, +0.033] |
|
| 165 |
+
| fast-decisions | 2,900 | 0.432 | 0.527 | 0.620 | −0.050 [−0.071, −0.030] |
|
| 166 |
+
| DAIR Emotion | 2,000 | 0.080 | 0.589 | 0.562 | −0.508 [−0.530, −0.485] |
|
| 167 |
+
|
| 168 |
+
MIMIR leads decisively on six tasks and ties Laya on AG News and SST-5; GLiNER leads on
|
| 169 |
+
its own fast-decisions showcase. The DAIR row is abstention, not error: the model
|
| 170 |
+
answers "none of the listed options" on 1,792 of 2,000 records (mean abstain mass
|
| 171 |
+
0.656), because none of the six listed emotions is supported at its calibrated
|
| 172 |
+
abstention level. Forced to pick among the six it scores 0.595, above Laya's 0.589. If
|
| 173 |
+
your pipeline needs a label on every row, read the argmax over the options; if it needs
|
| 174 |
+
honesty, read the abstention.
|
| 175 |
+
|
| 176 |
+
## The certificate
|
| 177 |
+
|
| 178 |
+
The shipped fp32 policy carries selective thresholds proven on 95,550 held-out records
|
| 179 |
+
at four risk levels, at confidence 0.95. Read the table as a contract: at each risk
|
| 180 |
+
level, on the calls the model chooses to take, its observed error stays under the risk.
|
| 181 |
+
|
| 182 |
+
**Binary, categorical and ranking** (taken / evaluated, observed error on taken calls):
|
| 183 |
+
|
| 184 |
+
| Risk level | Binary | Categorical | Ranking |
|
| 185 |
+
|---|---|---|---|
|
| 186 |
+
| 0.5% | 2,909 of 19,319 (15.1%) · 0.17% err | 15,171 of 54,728 (27.7%) · 0.36% err | defers |
|
| 187 |
+
| 1% | 6,781 of 19,319 (35.1%) · 0.69% err | 19,947 of 54,728 (36.4%) · 0.83% err | 1,441 of 3,863 (37.3%) · 0.35% err |
|
| 188 |
+
| 2% | 8,903 of 19,319 (46.1%) · 1.63% err | 25,917 of 54,728 (47.4%) · 1.76% err | 2,339 of 3,863 (60.5%) · 1.28% err |
|
| 189 |
+
| 5% | 11,173 of 19,319 (57.8%) · 4.45% err | 35,761 of 54,728 (65.3%) · 4.68% err | 3,422 of 3,863 (88.6%) · 1.52% err |
|
| 190 |
+
|
| 191 |
+
**Ordinal** defers at 0.5%, 1% and 2% risk; at 5% it takes 192 of 14,160 records
|
| 192 |
+
(1.04% error). **Multilabel and continuous** defer at every risk level in this release —
|
| 193 |
+
their first testable thresholds fail on held-out data, and shipping them would be
|
| 194 |
+
shipping an unproven promise. The package's default risk level is 1%.
|
| 195 |
+
|
| 196 |
+
Thresholds were fit on the PyTorch model's outputs and transferred to the ONNX graph,
|
| 197 |
+
whose outputs match the model on every decision over 312 verification records (max
|
| 198 |
+
relative readout gap 6.5e-5, zero decision differences).
|
| 199 |
+
|
| 200 |
+
**On your own data and hardware.** The certified configuration is CPU with ONNX Runtime
|
| 201 |
+
1.30.0. On other runtimes or hardware, either run the shipped 200-record equivalence set
|
| 202 |
+
(the first load does this automatically and requires every decision to match) or
|
| 203 |
+
calibrate your own policy from your own labels:
|
| 204 |
+
|
| 205 |
+
```python
|
| 206 |
+
from mimir import Mimir
|
| 207 |
+
from mimir.core.labels import LabelledDecision
|
| 208 |
+
from mimir.runtime.calibrate import calibrate
|
| 209 |
+
|
| 210 |
+
model = Mimir.from_pretrained("Mythologic/MIMIR-1")
|
| 211 |
+
labelled: list[LabelledDecision] = [...] # your context/decision/label triples
|
| 212 |
+
policy = calibrate(model, labelled, risk=0.01, confidence=0.95)
|
| 213 |
+
```
|
| 214 |
+
|
| 215 |
+
`mimir doctor --verify` runs the same equivalence check on demand.
|
| 216 |
+
|
| 217 |
+
## Integrity
|
| 218 |
|
| 219 |
+
Before any model file is read, the package verifies the manifest's Sigstore signature
|
| 220 |
+
against the `abderahmane-ai/mimir` release workflow, checks every file's SHA-256 against
|
| 221 |
+
the manifest, and checks the ONNX graph against its operator allowlist. No pickle is
|
| 222 |
+
used anywhere. The manifest and its signature cover every file below, including the
|
| 223 |
+
licence.
|
| 224 |
|
| 225 |
## Load paths
|
| 226 |
|
| 227 |
+
The release root is the `mimir-decisions` contract (ONNX graphs plus certified policy);
|
| 228 |
+
the same weights ship as plain `transformers` under a subfolder. Only what you load is
|
| 229 |
+
downloaded.
|
| 230 |
|
| 231 |
| Path | Format | Best at |
|
| 232 |
|---|---|---|
|
| 233 |
+
| **`Mythologic/MIMIR-1`** (repo root) | ONNX graphs + certified policy, via `mimir-decisions` | production: routing, gating, verification |
|
| 234 |
| **`Mythologic/MIMIR-1`, `subfolder="transformers"`** | same weights for plain `transformers` | research, custom runtimes |
|
| 235 |
|
| 236 |
### Package mode (recommended)
|
|
|
|
| 243 |
mimir mcp # MCP server: configured decision tools by default
|
| 244 |
```
|
| 245 |
|
| 246 |
+
Both serve the certified fp32 graph with the shipped policy, so the certificate above
|
| 247 |
applies to what they return. Adapters for eight agent frameworks, worked examples and
|
| 248 |
+
the full API reference live in the [package repository](https://github.com/abderahmane-ai/mimir).
|
| 249 |
|
| 250 |
### Transformers mode
|
| 251 |
|
|
|
|
| 263 |
```
|
| 264 |
|
| 265 |
Load plus forward on pre-encoded batches only: text handling, calibration, the server
|
| 266 |
+
and MCP stay in `mimir-decisions`. The staged modelling code holds the inference-only
|
| 267 |
+
head forward — no loss, no training machinery — the same computation the shipped
|
| 268 |
+
`model.onnx` already carries.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 269 |
|
| 270 |
## Speed
|
| 271 |
|
| 272 |
+
About **1.7 decisions per second on an Apple M4 CPU**, flat from 1 to 32 concurrent
|
| 273 |
+
clients — the batching absorbs concurrency rather than queueing it. GPU throughput is
|
| 274 |
+
not measured in this release.
|
| 275 |
|
| 276 |
## Architecture
|
| 277 |
|
| 278 |
+
- **Backbone:** a ModernBERT-Large encoder plus a decision head trained from scratch:
|
| 279 |
question-conditioned state memory, a candidate set processor, and a shared reasoning
|
| 280 |
+
cell applied once per iteration. 419M parameters total.
|
| 281 |
+
- **Typed readouts:** choice, multi-choice, yes/no, verification, ranking, rating and
|
| 282 |
+
estimation, each producing its own typed result.
|
| 283 |
+
- **Budget:** 512-token chunks capped at 256 question tokens; tested to 150 options, 49
|
| 284 |
+
levels and 26,406 context tokens. Larger inputs are refused.
|
| 285 |
+
- **Refusal built in:** an out-of-distribution distance gate, conformal prediction
|
| 286 |
+
sets, selective thresholds with finite-sample certificates, and an evidence mass over
|
| 287 |
+
the context behind every decision.
|
|
|
|
| 288 |
|
| 289 |
## Training
|
| 290 |
|
| 291 |
+
Training data and procedure are private. No optimiser state, scheduler state or RNG
|
| 292 |
+
ships with the release; training cannot be resumed from these files.
|
| 293 |
+
|
| 294 |
+
## Limitations
|
| 295 |
+
|
| 296 |
+
- **English only.** Non-English input is out of distribution.
|
| 297 |
+
- **Certified coverage is selective by design.** Ordinal certifies only at 5% risk;
|
| 298 |
+
multilabel and continuous defer at every level. Under the shipped policy those calls
|
| 299 |
+
come back `DEFERRED` — run them uncertified only if your pipeline accepts an
|
| 300 |
+
uncertified answer, or calibrate your own policy.
|
| 301 |
+
- **Abstention changes accuracy accounting.** On tasks whose listed options frequently
|
| 302 |
+
fail to apply, the model abstains instead of guessing (see DAIR Emotion above). Read
|
| 303 |
+
`ABSTAINED` as an answer, not a wrong one.
|
| 304 |
+
- **The fp16 graph ships without a policy.** There is no CUDA certificate in this
|
| 305 |
+
release; certify it yourself or run the equivalence set first.
|
| 306 |
+
- **One measured speed point.** The 1.7 decisions/s figure is M4 CPU only.
|
| 307 |
|
| 308 |
## FAQ
|
| 309 |
|
| 310 |
+
**Can I use a GPU?**
|
| 311 |
+
Yes, with the fp16 graph — it ships without a policy, so calibrate your own or run the
|
| 312 |
+
equivalence set first. There is no CUDA certificate in this release.
|
|
|
|
|
|
|
| 313 |
|
| 314 |
**What do I do with ABSTAINED and DEFERRED?**
|
| 315 |
Route them to a person or a stronger check. Pipelines that treat every call as an answer
|
| 316 |
turn refusals into someone else's silent default.
|
| 317 |
|
| 318 |
+
**Why does ordinal only certify at 5% risk?**
|
| 319 |
+
Its first testable thresholds fail on held-out data at lower risks; at 5% the certified
|
| 320 |
+
slice is small (192 records) with a 1.04% observed error. Multilabel and continuous have
|
| 321 |
+
no certifiable threshold at any level in this release.
|
|
|
|
|
|
|
|
|
|
| 322 |
|
| 323 |
**How do I reproduce the numbers?**
|
| 324 |
The release carries a 200-record equivalence set: replay the graph on any CPU and every
|
| 325 |
+
shipped decision must match. `mimir doctor --verify` runs it on demand.
|
| 326 |
|
| 327 |
## Files
|
| 328 |
|
|
|
|
| 335 |
| `transformers/modeling_mimir.py`, `transformers/configuration_mimir.py` | the architecture, `transformers` and `torch` only |
|
| 336 |
| `tokenizer.json` | the 50,368-entry vocabulary |
|
| 337 |
| `config.json` | variants, limits, layout and graph contract for `mimir-decisions` |
|
| 338 |
+
| `policy/fp32.json` (+ `.npz`) | the certified selective thresholds at four risk levels |
|
| 339 |
| `equivalence/` | 200 records with inputs, so any CPU replays the graph |
|
| 340 |
| `LICENSE` | the Mythologic Community Model License |
|
| 341 |
| `manifest.json` | SHA-256 of every file above |
|
| 342 |
+
| `manifest.json.sigstore` | the Sigstore bundle signing the manifest |
|
|
|
|
| 343 |
|
| 344 |
## Links
|
| 345 |
|
| 346 |
+
- Package: [`mimir-decisions` on PyPI](https://pypi.org/project/mimir-decisions/), `from mimir import Mimir`
|
| 347 |
+
- Code: [abderahmane-ai/mimir](https://github.com/abderahmane-ai/mimir) on GitHub, with the
|
| 348 |
+
documentation site at [abderahmane-ai.github.io/mimir](https://abderahmane-ai.github.io/mimir/)
|
| 349 |
+
- MCP Registry: `io.github.abderahmane-ai/mimir`
|
| 350 |
+
- Container: `ghcr.io/abderahmane-ai/mimir`
|
| 351 |
|
| 352 |
## Licence
|
| 353 |
|
| 354 |
+
Mythologic Community License (see [`LICENSE`](LICENSE)): free for research, personal use
|
| 355 |
+
and organisations under $500K annual revenue; commercial use above that needs a
|
| 356 |
+
commercial licence. Contact Mythologic for production, on-premises and indemnity terms.
|
manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
"format_version": 1,
|
| 3 |
"files": {
|
| 4 |
"LICENSE": "f6f9b088ae16499781624e5a760658239100b7ca7bb8fd4a3cc3c61564926163",
|
| 5 |
-
"README.md": "
|
| 6 |
"config.json": "10cbc7c171d2ce17fcf214f8ba31e08a8a8f68ea422e7bb92930c719b30c1ce4",
|
| 7 |
"equivalence/expected.npz": "8317cc5b1e8c1e7168b991fdd030ea7e1eb45fbbbbd7922a07d302876bd67118",
|
| 8 |
"equivalence/inputs.npz": "53777dff2852935d1009f556834f0607f1a25d9775c215632a13bd544300b29c",
|
|
|
|
| 2 |
"format_version": 1,
|
| 3 |
"files": {
|
| 4 |
"LICENSE": "f6f9b088ae16499781624e5a760658239100b7ca7bb8fd4a3cc3c61564926163",
|
| 5 |
+
"README.md": "f05c6102c6326ec3cec6d514752f7b9302497c1151d9897bf800bb4f0ac9e7b4",
|
| 6 |
"config.json": "10cbc7c171d2ce17fcf214f8ba31e08a8a8f68ea422e7bb92930c719b30c1ce4",
|
| 7 |
"equivalence/expected.npz": "8317cc5b1e8c1e7168b991fdd030ea7e1eb45fbbbbd7922a07d302876bd67118",
|
| 8 |
"equivalence/inputs.npz": "53777dff2852935d1009f556834f0607f1a25d9775c215632a13bd544300b29c",
|