Horopter
Horopter: the set of points that both eyes see as one.
Code: MIT (LICENSE). Weights, data recipe and docs: CC BY-NC-SA 4.0 (research, non-commercial). Weights: horopter-0.4B, horopter-1B (first release, 2026-10-20).
Horopter is an encoder-only decision model. Give it a state (a document, a record or a JSON object) and typed questions about it (yes/no, choose one, score on a scale). It answers them in one pass, and for every answer it also returns:
- evidence: whole-word spans in the state that support or refute each option;
- relation: whether the state bears on the question at all, and with what stance (support / refute / undetermined);
- abstention: a calibrated probability that the answer is wrong, with a reason (
unrelated,model_uncertainty).
The state is encoded once, without seeing any question, and cached. Each question reads that cached state, so:
- adding a question never changes the answers to the others;
- asking many questions about one state costs about one encoding.
Built on Ettin encoders (400M and 1B), from Fight Fire with Fire Robotics.
Status
First release, 2026-10-20: horopter-0.4B (horopter-0.4b-20261020) and horopter-1B (horopter-1b-20261020). Router + adapters, one pass:
| Horopter 1B | Horopter 0.4B | mbnli-3 beta 1B (internal) | best 4–9B decoder we tested | |
|---|---|---|---|---|
| grounding (LLM-AggreFact balanced accuracy) | 75.7 | 74.8 | 75.7 | 77.2 |
| 4-way relation (macro-F1) | 78.6 | 76.6 | 78.6 | 75.3 |
| multi-step policy decisions (JevBench hard) | 40.5 | 36.0 | 44.1 | 64.0 |
| generated policies, one pass (prose) | 97.7 | 95.0 | 53.6 |
The full tables and limits are in the model cards. Grounding and relation are level with 4–9B decoders. Multi-step policy decisions on real text trail them by about 20 points. This release has rule-application data with always-determined answers, so it rarely says "more information needed" on real rule text.
Layout
horopter/ model, packing, losses, runtime (adapters), evidence, abstention, server (typed wire format)
horopter/fast/ fast path: state cache, CUDA graphs, block-sparse state attention, all adapters in one pass
training/ joint trainer, adapter / evidence trainers, abstention head fit, data builders, recipes/beta2.md
eval/ benchmark scorers (E37 bench, E40 rule evals) and the HTTP client
scripts/ export_hf.py: training checkpoint -> HF layout
tests/ parity against the research code; fast path against the release path
docs/ release plan, porting notes (docs/PORTING.md), fast path (docs/FAST_PATH.md)
assets/ theme art (public domain)
pip install horopter
The first load of a hub id downloads the weights from Hugging Face (about 0.8 GB for the 0.4B) and caches them.
import horopter
m = horopter.load("jmccardle/horopter-0.4B") # a hub id, or a local directory in the exported HF layout
out = m.answer("Refunds within 30 days. The lamp was bought 12 days ago.",
{"q": {"type": "noul", "instructions": "Is a refund allowed?"}}, evidence=True)
Server: python -m horopter.server --model jmccardle/horopter-0.4B --port 8420 --fast (add --device cpu on a machine without a GPU).
--fast serves the same answers (up to bf16 rounding) 3–19× faster on a GPU, and caches states on a CPU: a state asked
about again costs only its question tokens. Measurements, settings and memory are in docs/FAST_PATH.md.
Credits
Title page of Opticae thesaurus (Friedrich Risner ed., Basel 1572), Bayerische Staatsbibliothek; public domain (Wikimedia Commons, Thesaurus_opticus_Titelblatt.jpg).
Metadata
Release files for horopter 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| horopter-0.0.1.tar.gz | 62.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| horopter-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.0 kB
Release files / horopter-0.0.1.tar.gz
| Download URL | horopter-0.0.1.tar.gz |
|---|---|
| Size | 62.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
faa7d7ce500588cd0ff5784ada8666d9c9d03852693b9f31d87f2736d1e484c9
|
|
BLAKE2b-256 checksum How to use checksums |
443c485dc25af101d8ec23c5cf048a7280b9a3b833bad90c9d0f8e4222f7208e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logRelease files / horopter-0.0.1-py3-none-any.whl
| Download URL | horopter-0.0.1-py3-none-any.whl |
|---|---|
| Size | 61.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ee910a5a1154e74af473e6982518a4a4293bdee3980e5e571ece8a96080a3ab3
|
|
BLAKE2b-256 checksum How to use checksums |
2f9dc70d15c67dfd0b36ccdc1c069f41dbf3f3c4618c814457d3309c9ab70d12
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logSecurity for horopter 0.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for horopter-0.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.