AI DevelopmentOpen Source

Laya: The Open-Source Answer to TypeSafe’s Jev

September 22, 2026
9 min read
Laya open-source decision model running on a laptop
Share:

TypeSafe AI launched Jev in September 2026: a non-autoregressive decision primitive that returns typed answers with confidence scores instead of generated text. The catch is that it is a closed API with no public weights. Convai Innovations, led by Nandakishor Mukkunnoth, answered with Laya — the same System 1 decision idea, fully open-source under Apache 2.0.

I dug into the model card, the repo, and the benchmark report so you don’t have to: exact specs, vendor-claimed benchmarks vs Jev, a working quickstart, and the honest limits the authors themselves admit.

1. Spec Sheet: Three Checkpoints, One Hub

Laya is not one model but a family of three encoder-based checkpoints, bundled in a single Hugging Face hub (convaiinnovations/laya) so you download only the subfolder you need. Nothing is generated: you pass a state (text, email, ticket, JSON) plus typed questions (choice, score, noul), and every question is answered in a single forward pass.

🇬🇧

laya (English)

ModernBERT-large · 421M params · 512 context

The base checkpoint. English text classification, guardrails, email triage. 395M of the params are the ModernBERT-large backbone, plus a decision head trained from scratch (2 transformer layers, option scorer, act/escalate head).

🌍

laya-multilingual

mmBERT-base · 322M params · 1024 context (up to 8k)

100+ languages with a 256k-token vocabulary. About 2x faster than the English checkpoint and the only one that survives non-Latin scripts. Weaker on English, so pick deliberately — or let the Router decide.

🎯

laya-typed-decisions

ModernBERT-large · 421M params · 1024 context

Fine-tuned specialist for four agent workflows (observability, customer service, invoices, security alerts). This is the checkpoint behind the 0.766 headline number — and behind most of the caveats in section 4.

Facts I verified (Sep 2026)

  • License: Apache 2.0 — weights, code, and data lineage are public.
  • Install: pip install laya (PyPI v0.3.5, requires Python ≥ 3.10).
  • Repo: github.com/NandhaKishorM/laya — ~14.9k stars and ~1.2k forks at the time of writing, growing fast (it was ~2.5k on Sep 20).
  • Live demo: huggingface.co/spaces/convaiinnovations/laya-demo.
  • Training signal: RLCD — reinforcement learning against strictly proper scoring rules, so honest probabilities are the only way to maximize reward.

2. Laya vs Jev: Benchmarks (Vendor Claims)

The table below pits the routed Laya system against Jev 1.13.0. Read the warning first: every Laya number was measured by Convai on their own harness, while every Jev number is third-party published (independent studies and TypeSafe’s own figures) — never measured side by side by the vendor. Treat this as a vendor claim with an unusually transparent methodology, not as an independent audit.

⚠️ How to read this table

Laya figures: measured by Convai on a T4, reproducible via notebooks/laya_benchmark_colab.ipynb. Jev figures: published by third parties (AbdelStark, nibzard) and TypeSafe AI — sample sizes and prompts differ. The 0.766 belongs to the checkpoint fine-tuned on that benchmark’s own training split, not to zero-shot Laya.

BenchmarkJev 1.13.0 (published)Laya routed (measured)
typed-decisions (2,000 decisions)0.7270.766 (+0.039)
AG News (4 labels)0.9100.950 (+0.040)
DAIR Emotion (6 labels)0.4800.595 (+0.115)
ECE calibration (lower is better)0.2460.081 (after temperature fit)
Latency p50, 1 question (T4 GPU)236–276 ms32.8 ms (~7–8x faster)
Banking77 (77 options)0.8700.425 — Jev leads
Cost / weights$0.042 per 1M tokens, closed API$0 self-hosted, Apache 2.0

Two details deserve credit: on DAIR Emotion, Jev assigned zero probability to the true label on 16% of examples — a hard failure for anything branching on confidence. And Laya’s 0.766 clears the 0.735 teacher self-agreement ceiling with 2.4x better Brier score, winning all four workflows (invoices 0.804, security 0.766, support 0.764, observability 0.730).

3. Quickstart: Router Mode in 5 Minutes

The Router is the recommended entry point: it detects script and language in under a millisecond and dispatches to the right checkpoint in one forward pass. Code below is taken from the official README — install, preload, define typed questions, predict, and gate on confidence.

Install

pip install laya>=0.3.3

Route mode (recommended)

import laya
from laya import Router

# Preload checkpoints: avoids 7-10 s reloads on language switches
router = Router(preload=True)

state = {
    "from": "user@acme.com",
    "subject": "Duplicate charge on invoice #4411",
    "body": "We were billed twice for March. Refund the duplicate or we cancel.",
}

questions = {
    "department": {
        "type": "choice",
        "instructions": "Which department should handle this request?",
        "criteria": {
            "billing": "invoices, payments, refunds",
            "technical": "bugs, outages, system errors",
            "sales": "pricing, new contracts",
            "other": "everything else",
        },
    },
    "urgency": {
        "type": "score",
        "instructions": "How urgent is this request?",
        "criteria": ["not urgent", "soon", "critical deadline or blocking issue"],
    },
    "churn_risk": {
        "type": "noul",
        "instructions": "Does the user threaten to cancel or leave?",
    },
}

res = router.predict(state, questions)
print(res["answers"]["department"]["choice"])  # billing (confidence: 0.94)
print(res["routing"]["model"])  # english

Branch on calibrated confidence

dept = res["answers"]["department"]["choice"]
conf = res["answers"]["department"]["confidence"]

if conf >= 0.85:
    route_automatically(dept)  # no human in the loop
else:
    escalate_to_human(dept)  # fail closed

Single-checkpoint mode (dedicated pipelines)

import laya

agent = laya.load("convaiinnovations/laya")  # English root (~808 MB)
agent_ml = laya.load("convaiinnovations/laya", subfolder="multilingual")
agent_td = laya.load("convaiinnovations/laya", subfolder="typed-decisions")

result = agent.predict(state, questions)  # one forward pass, ~33-40 ms on GPU

Production tip: always preload

With the default Router() (lazy, max_loaded=1), traffic that alternates languages rebuilds a checkpoint per request — measured at 7.4 s median reload on CPU. In a server, use Router(preload=True) or router.preload([“english”, “multilingual”]) so language flips cost under 1 ms of detection only.

4. Honest Limits (Straight From the Model Card)

This is the section that made me trust the project: the authors document exactly where Laya breaks. The headline 0.766 is real, but it belongs to a fine-tune — the base you download behaves very differently out of the box.

⚠️ Zero-shot base is near chance

Base checkpoints score 0.362 and 0.342 on typed-decisions against a 0.318 random baseline and a 0.461 majority-class baseline. The card says it plainly: “Laya is a fast base to specialise, not a zero-shot decision engine.” Budget for labeling a few thousand examples and fine-tuning (there is a free Kaggle 2xT4 notebook, ~4–5 hours).

⚠️ Banking77: 77 options crush it (0.425 vs Jev 0.870)

Options share a fixed head budget (192 tokens EN, 256 multilingual), so 77 labels get ~3–4 tokens each and become indistinguishable. Fixes: raise agent.cfg[“head_max_len”], shortlist with embeddings first (laya.predict_shortlist), or split coarse → fine questions. Jev handles 50+ options out of the box.

⚠️ Temperature calibration is mandatory, not optional

Raw checkpoints ship over-confident (mean ECE 0.466). Refitting one temperature per question type on held-out data moves ECE to 0.081 — and the multilingual checkpoint ships with no fitted temperatures at all. Fit them before branching production traffic on confidence.

⚠️ English checkpoint collapses outside English

Macro average 0.227 across 51 languages; Khmer scores 0.000 accuracy at 95.2% confidence. Confidence gating cannot save you because the model stays confident while wrong — routing must happen before the forward pass. That is literally why the Router exists.

⚠️ Ordinal scores are the weakest primitive

SST-5 ordinal accuracy is 0.372, and on typed-decisions Jev wins soft accuracy (0.580 vs 0.471): Laya’s argmax is better but its full distributions match the teacher less well. Use choice/noul where you can.

Golden rule

If you cannot label a few thousand examples of your own decision, the zero-shot figure (~0.35) is the one that predicts your results — not the 0.766. Laya replaces a 70B LLM router brilliantly after fine-tuning; it does not replace it on day zero.

5. Verdict: Who Should Adopt Laya This Week

Laya is the rare open-source release that is both genuinely useful and unusually honest about its boundaries. For high-volume classification, guardrails, routing, and triage — where a 70B autoregressive LLM is an expensive overkill — a sub-35 ms bidirectional decision model with auditable weights is exactly the right tool, provided you fine-tune it.

My take: prototype the Router against your own tickets this week, measure zero-shot vs a 500-example fine-tune, and only then decide. The weights are free, the harness is reproducible, and the failure modes are documented — that is more than you get from any closed decision API.

Adopt it for

High volume + labeled data

Support triage, email routing, moderation guardrails, invoice processing, agent observability — anywhere you have thousands of examples, need single-digit-ms batch latency, and must run air-gapped or on-premise under Apache 2.0.

Skip it for

Zero-shot or huge label spaces

Drop-in zero-shot decisions with no fine-tuning budget, single prompts with 50+ options (Jev leads there), or ordinal scoring as your core primitive. Also skip lazy Router() in production — preload or pay 7–10 s per language switch.

Verdict

A fast, open, well-documented base to specialise — not a zero-shot decision engine. If you fine-tune and calibrate, Laya is the best open answer to Jev available in September 2026. If you won’t, Jev’s API (or a small LLM) will serve you better.

Conclusion

The System 1 decision layer is splitting into two paths: closed, metered APIs like Jev, and open, self-hosted weights like Laya. After reading the full benchmark report — including the parts where Laya loses — I consider Laya the most credible open option in the space right now.

Clone the repo, run the Router on your own data, and let your own fine-tune numbers decide. And if you calibrate temperatures before trusting the confidence scores, you’ll already be ahead of most teams shipping LLM routers today.

Diego Rodriguez

Diego Rodriguez

Senior Full-Stack & AI Engineer

Diego has 10+ years of experience building production-grade AI-powered applications, from LLM orchestration and RAG pipelines to ML-driven risk detection and algorithmic trading systems.

Learn more about Diego