Zeno Divergent — v0.40 candidate (seed 37)
A model of forecasters: it reads a panel of forecasts and warns which ones are likely to be confidently wrong.
Status: testing candidate. Not gate-passed. In the Zeno Arena its warnings are recorded for later scoring and never acted on. A gate-passed successor (v0.41) is training now; it will be published as its own repo.
| Parameters | 7.84M |
| Format | ONNX (opset graph + external weights), runs on CPU, no GPU needed · same weights also as model.safetensors (F32) |
| Tensor type | F32 |
| Size | 31.9 MB |
| Inputs | a panel of up to N forecasters for one question (see below) |
| Outputs | warn: per-member warning logit · dist: outcome distribution anchored on the panel baseline |
| Trained on | frozen Offdiagonal snapshot, 9 sources: crypto, ECB SPF, weather ensembles, ForecastBench, CDC COVID-19, CDC RSV, FluSight, prediction markets, sea level |
| Run | v040-h200-20261003T1232Z, arm lite, seed 37, best checkpoint by source-balanced dev loss |
| Feature schema | v040-features-2 |
| ONNX vs PyTorch parity | max abs diff 1.4e-05 |
Download and run (2 minutes)
pip install onnxruntime huggingface_hub numpy
python run_example.py
run_example.py (in this repo) downloads the model and scores a dummy four-member panel:
import numpy as np, onnxruntime as ort
from huggingface_hub import hf_hub_download
REPO = "ZenoDivergent/zeno-divergent-candidate-v040"
DIR = "./zeno-divergent" # keep both files in one real folder
hf_hub_download(REPO, "episode-lite.onnx.data", local_dir=DIR)
sess = ort.InferenceSession(hf_hub_download(REPO, "episode-lite.onnx", local_dir=DIR),
providers=["CPUExecutionProvider"])
warn, dist = sess.run(None, feed) # feed: see the input table
risk = 1 / (1 + np.exp(-warn[0])) # per-member risk of being confidently wrong
Or download everything: huggingface-cli download ZenoDivergent/zeno-divergent-candidate-v040 --local-dir zeno-divergent
Important: pass local_dir= (or download the whole repo). Recent onnxruntime refuses to load the external weights through the Hugging Face cache's symlinks.
Inputs
B = questions in the batch, M = panel members.
| Name | Shape | Type | Meaning |
|---|---|---|---|
X | B × M × 20 | float32 | per-member forecast features (typed: quantile / probability / point) |
mask | B × M | bool | which members are present |
H | B × M × 16 × 7 | float32 | each member's last 16 past errors, in order |
HM | B × M × 16 | float32 | which history slots are filled (1/0) |
J | B × 9 | float32 | external judgment context (zeros = none) |
PR | B × M × M × 7 | float32 | pair memory: how member pairs missed together before |
ref_logit | B × M | float32 | reference warning logit (the model learns a correction on top of it) |
src_idx | B | int64 | source index, order in benchmark.json |
Real features are built by featurize() in the Zeno code (schema v040-features-2); random inputs only show the shapes. refs.json holds the fitted markets reference used to build ref_logit.
Files
| File | What it is |
|---|---|
episode-lite.onnx | model graph |
episode-lite.onnx.data | model weights (7.84M parameters) |
model.safetensors | the same weights in safetensors (F32), for inspection / PyTorch loading |
config.json | model config: inputs, outputs, sources, run id |
run_example.py | download + run example |
benchmark.json | source list and dev scores |
refs.json | fitted reference for markets questions |
model_source.json | the serving connector entry (status, schema, scores) |
Honest numbers
| Dev loss (lower is better) | |
|---|---|
| Plain-average reference | 1.0887 |
| Seed 11 | 1.1034 |
| Seed 23 | 1.1183 |
| Seed 37 (this checkpoint) | 1.0504 |
Seed 37 beats the plain average on dev; seeds 11 and 23 do not. A result that does not hold across seeds is not stable, so this is not evidence that the model works yet. The full gate (both held-out periods, every named reference, multiple-testing correction) has not been passed.
Known limits
- External judgments were all-zero in this run: every judgment post-dates the decisions.
- ECB SPF, the weather ensemble and ForecastBench had no testable held-out period.
- Pair co-miss pretraining stayed at chance; v0.41 fixes this and other defects.
Intended use
Testing integrations (the Zeno Arena, the Zeno30 panel pipeline) and exploring the inputs/outputs. Do not use its warnings to make decisions. When a gate-passed version exists, the Arena switches to it in one step; this repo stays as it is.
Site: zenodivergent.dev