Die ganze Wissensbasis in einer Datei
.jpg


Island
Forest
Mountain
Ein Ordner und ein paar Zeilen TOML werden zu einer einzigen .urna: Chunks, Vektoren, Index, Medien und Manifest, jede Sektion signiert.
Die Karten-Scans kommen als AV1 in die Datei, die Vektoren wechseln auf ein kleineres Preset. Die Datei schrumpft, das Zitat bleibt gleich.
Das model_hash-Gate prüft das Modell, HNSW läuft durch den Graphen, BM25 findet das Wort und der exakte Kosinus legt die Reihenfolge fest.
Die Antwort trägt ein Zitat zurück zur Quelle, und urna validate prüft jede Schicht vor der ersten Anfrage, offline.
Vom Ordner voller Dokumente
zur Datei, die antwortet
Das passt in eine .urna
00100000 01010011 01111001 01110011 01110100 01100101 01101101 00111010 00100000 01000011 01100001 01110010 01100100 01110011
Öffentlicher Benchmark, gleicher Maßstab
Benchmark vom 2026-09-10 auf arm64, Single Thread. Was Urna nicht kann: Update und Delete in place, Metadatenfilter, parallele Schreibzugriffe. Zur vollständigen Tabelle.
Die Benchmarks von urna
Kompression gegen Suche nach Name
7 Dateien · je 1.000 Abfragenkleiner als die 3,98 GB JPEG-Quelldaten. Die Datei bei crf50 wiegt 533 MB und findet die Karte über den Namen so oft wie die Lossless-Datei mit 3,61 GB: txt@1 bei +0,001, innerhalb des Standardfehlers.
Was diese Metrik misst
txt@1 ist der Anteil der 1.000 Abfragen, bei denen die richtige Karte auf Platz eins kam. Die Abfrage ist der Kartenname als Text ("artwork of the card {name}"), gesucht im Bildraum von clip: Das Modell sieht nur die Illustration, deshalb ist das Niveau in allen Dateien niedrig. Entscheidend ist, wo es abfällt.
Drift ist der Kosinus zwischen dem Vektor des komprimierten Bilds und dem des Originals: 1,00 heißt identisch, und je tiefer er fällt, desto mehr hat der Codec an dem verändert, was das Modell sieht. Das schlechteste Dezil (p10) ist die Karte am Rand der 10 %, die sich am stärksten verändert haben; der Median (p50) ist die Karte in der Mitte.
So liest du dieses Diagramm
Jede Spalte ist eine Datei mit denselben 38.627 Karten, von Lossless (3,61 GB) bis AV1 bei crf60 (230 MB), nach Kompression sortiert.
Oben fallen beide Drift-Linien durchgehend und unterschreiten den Gate-Floor schon bei der zweiten Datei. Unten bleibt die Suche bis crf50 flach: Die grünen Balken liegen innerhalb eines Standardfehlers von Lossless. Die gestrichelte Linie markiert, wo die Suche einbricht, und die roten Balken sind die Dateien danach.
| Datei | Größe | drift p10 | txt@1 | ±1 Standardfehler | z vs Lossless |
|---|---|---|---|---|---|
| lossless | 3,61 GB | 0,9968 | 0,092 | 0,0091 | 0,00 |
| neardup | 1,37 GB | 0,9666 | 0,096 | 0,0093 | 0,31 |
| avif q48 | 1,2 GB | 0,9680 | 0,096 | 0,0093 | 0,31 |
| crf40 | 981 MB | 0,9594 | 0,089 | 0,0090 | -0,23 |
| crf50 | 533 MB | 0,9389 | 0,093 | 0,0092 | 0,08 |
| crf55 | 370 MB | 0,9211 | 0,074 | 0,0083 | -1,46 |
| crf60 | 230 MB | 0,8866 | 0,069 | 0,0080 | -1,89 |
1.000 Abfragen pro Datei, in allen dieselben Karten; binomialer Standardfehler; z ist der Abstand von txt@1 jeder Datei zu Lossless in kombinierten Standardfehlern: Bis crf50 liegt keiner über 1.
gemessen am 2026-09-12 · benchmark/experiments/14-utility-ladder/results.json
curl -sSf https://raw.githubusercontent.com/hoffresearch/urna/main/scripts/install.sh | sh
urna setupurna build --spec corpus.tomlurna ask corpus.urna "funktioniert es offline?" -k 3urna retrieve corpus.urna "funktioniert es offline?" -k 5 --format jsonlimport urna
from urna.embed_potion import potion_embedder
emb, db = potion_embedder(), urna.open("corpus.urna")
qvec = emb.embed_texts(["funktioniert es offline?"])[0]
hits = db.retrieve(qvec, 5, expected_model_hash=emb.model_hash())urna validate corpus.urnaurna cite corpus.urna "urna://content_hash/chunk_id"urna benchmark corpus.urna -q 100 -k 10 --ann 100Ein Release, jeder Paketmanager
npx @urna/cli validate corpus.urnauvx --from urna urna validate corpus.urnacargo binstall urnaDrei Gruppen von Verben und ein Bildschirm dafür


Eine Datei und ein Vektor rein, Treffer raus. Kein Python.
- inspect
- validate
- stats
- media
- search
- search-ann
- search-graph
- search-space
- search-text
- benchmark
- cite
- doctor
Text oder eine Spec rein, zitierte Antworten raus, über den Offline-Embedder in Python.
- ask
- retrieve
- build
Der Installer, in dem jeder Kanal endet, und der Terminal-Explorer.
- setup
- tui