Most pipelines still call a generative model for a label. Laya answers typed questions in one forward pass and never writes a sentence.
Laya Research
An open, non-autoregressive decision engine that returns calibrated probabilities in about 33 milliseconds, and the Base coin that carries the same name.
The engine
Reflex decisions, not a chatbot.
Drawn from the September 2026 research note by Nandakishor Mukkunnoth, ConvAI Innovations. Read the source.
The first papers
March 2025 brought arXiv:2503.23303, PPO over sequence representations, turn-by-turn conversion probabilities, the Hugging Face weights sales-conversion-model-reinf-learning, and the open saas-sales-conversations set. September 2025 formalized schema decisions in arXiv:2510.01237. Reinforcement learning stayed the guide, not a plain embedding model.
Then Jev arrived
TypeSafe AI, founded by Diogo Almeida, shipped Jev as a non-autoregressive decision product: RLCD, horizontal confidence distributions, about $0.042 per million input tokens, and responses near 150 ms. No papers, no open weights, no open training set. Laya is the open reply: bidirectional encoders, 32.8 ms on one GPU, 7.2 ms per question when batched, 100+ languages, no API meter.
System 1 versus System 2
Routing a ticket, flagging phishing, scoring urgency from 0 to 3, or spotting a jailbreak does not need an 8B or 70B model to stream tokens for half a second to two seconds. A quoted confidence from an LLM is just more tokens. Laya’s probabilities are the output, so they can be calibrated.
Primitives
Three questions. One pass.
Any state works: raw text, an email, a ticket, or a JSON document. The output is only numbers, so a malformed schema cannot appear.
choice
Pick one key from a dictionary of criteria. You get the winner, the full distribution, and a calibrated confidence.
score
Place the state on an ordinal rubric. You get the expected level, the mass on each rank, and a confidence.
noul
A yes-or-no question. P(true) sits between 0 and 1, and P(false) is one minus that value by construction.
Checkpoints
Three models, one hub.
No single encoder is best at every language and task. All three live under convaiinnovations/laya. The SDK pulls only the subfolder you name, so you skip the full 2.5 GB bundle.
| Checkpoint | Encoder | Params | Context | Where it leads |
|---|---|---|---|---|
| laya | ModernBERT-large | 421M | 512 | English classification, guardrails, email triage |
| laya-multilingual | mmBERT-base, 256k vocab | 322M | 1024, up to 8k | 100+ languages, about 2.2× faster, cross-lingual NLI |
| laya-typed-decisions | ModernBERT-large | 421M | 1024 | Agents, support, invoices, security alerts, 0.766 accuracy |
agent_en = laya.load("convaiinnovations/laya") # English, ~808 MB
agent_ml = laya.load("convaiinnovations/laya", subfolder="multilingual") # ~647 MB
Routing
Confidence will not warn you.
On MASSIVE, 20 options, chance is 0.050. ModernBERT-large’s 50k English vocabulary shreds other scripts, and the model stays sure of itself anyway. Across 51 languages its mean confidence never fell below 0.885, whether accuracy was 82% or zero. Pick the checkpoint before the forward pass.
| Script | Accuracy | Mean confidence |
|---|---|---|
| Khmer | 0.000 | 0.952 |
| Armenian | 0.050 | 0.885 |
| Hebrew | 0.060 | 0.964 |
| Bengali | 0.080 | 0.945 |
| Hindi | 0.100 | 0.941 |
English
Unicode script scan plus Latin stopwords. Overhead stays under 2% of a 33 ms pass.
Indic
Devanagari and the other 21 alphabets the router knows, including CJK, Cyrillic, Arabic, Hebrew, Tamil, and Thai.
Nested JSON
A 200-row document. Router(preload=True) keeps the checkpoints resident and skips a 7–10 second cold swap.
Head to head
Routed Laya against Jev 1.13.0.
Laya figures are measured. Jev figures come from TypeSafe and from independent write-ups by AbdelStark and nibzard.
| Measure | Jev 1.13.0 | Laya, routed | Delta |
|---|---|---|---|
| typed-decisions, 2,000 | 0.727 | 0.766 | +3.9%, above a 0.735 teacher |
| AG News, 4 labels | 0.910 | 0.950 | +4.0% accuracy |
| DAIR Emotion, 6 labels | 0.480, Brier 0.846 | 0.595 | +11.5%; Jev put 16% at zero probability |
| Calibration error (ECE) | 0.246 | 0.081 | About 3× tighter |
| Latency p50, 1 question | 236–276 ms | 32.8 ms | 7.8× faster |
| Latency p50, 10 questions | ~1,500 ms serial | 72.3 ms, 7.2 ms each | About 20× on a batch |
| Languages above 3× chance | Unpublished | 45 of 51 | Coverage, not a single script |
| Cost per 1M tokens | $0.042 API | $0 self-hosted | Apache 2.0 weights |
| Weights and code | Closed API | Open safetensors | Runs on-prem and air-gapped |
Enron spam
Accuracy and F1 both 0.993. ECE 0.013.
Phishing
Accuracy 0.980, F1 0.979, ECE 0.012.
ToxicChat guardrail
Held-out accuracy 0.755–0.762. At 50% coverage it reaches 0.931.
RAG relevance
Passage filtering in a single forward pass.
10-way queues
Support ticket routing across ten destinations.
Ceilings
Where the score stops climbing.
More than 20 choices
Banking77 has 77 labels. Laya scored 0.425 there; Jev scored 0.870. Options share a 192–256 token head budget, so each candidate gets only a few tokens. Keep schemas under 20 options, or split them coarse-to-fine.
Zero-shot is not the 0.766
Untuned base weights land near 0.35 on typed-decisions, close to chance. The 0.766 number is after fine-tuning on that benchmark’s train split. Treat the release as a fast base to specialize.
One temperature per question
Shipped weights use raw temperature logits. A single scalar per question type, fit on your own distribution, moved expected calibration error from 0.466 to 0.081.
Quickstart
Installed in one line.
pip install "laya>=0.3.3"
from laya import Router
router = Router(preload=True)
state = {"subject": "API down since 6 AM", "body": "We lost transactions. Refund the SLA."}
questions = {
"queue": {"type": "choice", "instructions": "Which queue owns this?",
"criteria": {"infrastructure": "outages", "billing": "refunds"}},
"urgency": {"type": "score", "instructions": "How urgent?",
"criteria": ["low", "medium", "high", "critical"]},
"churn": {"type": "noul", "instructions": "Is the customer about to leave?"},
}
res = router.predict(state, questions)
English text routes to ModernBERT-large. Hindi and other non-Latin scripts route to mmBERT-base. Pass model="typed-decisions" when you already know the domain.
Supply
One billion samples.
- Buy / sell tax 0% / 0%
-
Chain
Base
- Liquidity Burned at launch
- Presale None
How to buy
Four steps into the pool.
-
01
Open a wallet
Use a wallet that speaks Base. MetaMask, Coinbase Wallet, or Rainbow all qualify.
-
02
Fund Base ETH
Bridge or withdraw a little ETH onto Base. Gas here is a whisper, not a toll.
-
03
Swap for $LAYA
Open Uniswap, select Base, and trade ETH for Laya once the contract is live.
Buy
-
04
Watch the orbit
Pin the chart. The spiral is easier to read when you can see every sample.
Chart
Join us
The lab door is glass.
Charts, chat, and the buy button. Pull up a stool. The orbit has room.