The neural layer

Where maps end,
models begin.

The 289 authority-backed maps cover romanization systems that a committee has published. Some conversions have no committee: restoring the haraqat a scribe left out, turning unwritten Thai into phonemes, reading Urdu aloud. Those are learned — and they ship under the same discipline as the maps: one artifact format, checksums verified on every load, byte-identical output from every runtime.

The catalogue

Every model, with its number.

No model is published without a measured metric next to its teacher's, on the same harness, in the open. Students are distilled from frozen teachers and gated at a pre-agreed error budget. Each entry resolves from the models.yaml index; artifacts above GitHub's 2 GiB cap ship as sha256-verified parts that the runtimes reassemble transparently.

Server tier fp32, full quality

  • translit khm-latn-1.0 Khmer → Latin CER 27.42 · EM 59.66 fp32 · 1.3 GiB
  • g2p urd-g2p-1.0 Urdu → IPA CER 14.77 · EM 33.6 fp32 · 1.3 GiB
  • diacritization urd-diac-1.0 Urdu → haraqat CER 3.74 fp32 · 1.3 GiB
  • diacritization heb-diac-1.0 Hebrew → niqqud DER 29.0 greedy · 17.46 beam-4 fp32 · 2.6 GiB · parts
  • g2p tha-g2p-base-1.0 Thai → IPA PER 9.19 (teacher 4.43) fp32 · 2.6 GiB · parts

Client tier distilled or quantized, for the browser and the edge

  • g2p tha-g2p-small-1.0 Thai → IPA PER 2.85 greedy (12.06 beam-4) int8 · 246 MiB
  • g2p tha-g2p-small-1.0-int4 Thai → IPA same student · 4-bit int4 · 193 MiB
  • diacritization heb-diac-small-1.0 Hebrew → niqqud DER 30.37 (teacher 24.79) fp32 · 1.3 GiB
  • g2p fas-g2p-1.0 Persian → IPA CER ≈1.6 · homograph 77.34% fp32 · 2.6 GiB · parts

“Releasing” = passing its parity gate now, entering the release pipeline. Distillation budgets and per-model provenance: interscript-ml/docs/RESULTS.md.

The contract

One artifact. Any runtime.

A model is a zip — the Interscript Model Format, IMF v1. Anything that can read a zip, hash a file, and run two ONNX sessions can serve it; no Interscript training code required. Every member is sha256-verified against metadata.yaml on load; tampering raises loudly. The tokenizer is raw UTF-8 bytes — no vocabulary to download, no sentencepiece to drift.

  • Byte tokenizer — token id = byte + 3, trailing EOS
  • Decoder emits KV-cache graphs for streaming decode
  • opset 14, the floor set by the Ruby onnxruntime gem
  • Optional int8 / fp16 zips, precision-aware parity gates
tha-g2p-small-1.0-int8.zip
├── metadata.yaml     # id, metrics, parity, sha256 block
├── encoder.onnx
├── decoder.onnx
├── decoder-kv.onnx   # streaming KV-cache decoder
└── README.md         # model card

The crystals

Three runtimes, same bytes out.

The neural layer is served by secryst — the same cross-runtime contract as the map layer. Ruby, Python, and TypeScript resolve a model id against the index, fetch (or reuse the cache), verify every checksum, and decode with the KV-cache graph. Golden sets pin the three implementations to each other.

# Ruby
gem install secryst

# Python
pip install secryst

# TypeScript / JavaScript
npm install secryst
require "secryst"
model = Secryst::Model.load("tha-g2p-small-1.0")
model.translate("สวัสดี")
# => "sa˨˩.wat̚˨˩.diː˧"

Point deployments at a mirror with SECRYST_INDEX; pin the cache with SECRYST_CACHE. Both are read at call time in all three runtimes.

Provenance

Measured, or it doesn't ship.

Teachers are frozen before distillation and never LLM-generated — language-model teachers hallucinate diacritics. Every number in the ledger links to a protocol in the open results log. BSD-3-Clause, code and weights.

github.com/interscript/interscript-ml   # contract + index
github.com/secryst                     # runtimes + training