Instructions to use convaiinnovations/laya with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use convaiinnovations/laya with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="convaiinnovations/laya")# pip install -U transformers accelerate # Load model directly from transformers import LayaTypedDecisions model = LayaTypedDecisions.from_pretrained("convaiinnovations/laya", device_map="auto") - Laya
How to use convaiinnovations/laya with Laya:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Inference
- Notebooks
- Google Colab
- Kaggle
Independent head-to-head on a sealed 1,190-case manifest: laya 0.686 vs Jev 1.13.0 0.907 vs Qwen2.5-1.5B PCD 0.605, with paired intervals, plus three adapter findings
Independent head-to-head on a sealed 1,190-case manifest: laya 0.686 vs Jev 1.13.0 0.907 vs Qwen2.5-1.5B PCD 0.605, with paired intervals, plus three adapter findings
Posting an independent evaluation of laya against jev-1.13.0 and a Qwen2.5-1.5B parallel constrained decoding baseline. Everything is public and reproducible: https://github.com/instax-dutta/sysone-bench, report at results/v2/report-20260926/REPORT.md. The same write-up is on GitHub with the full tables: https://github.com/NandhaKishorM/laya/issues/555
Checkpoint scope, stated first because it is the easiest thing to misread. This run used the default root (English) checkpoint for every suite, multilingual included. laya-multilingual, laya-typed-decisions and the Router were not evaluated. The multilingual row below therefore measures the English checkpoint on non-English text and is not a statement about the multilingual checkpoint. Version: laya 0.3.11, weights commit 55cf4c4ebb4ebe31b2550e8bdf3bd21b99753851. Happy to rerun against main and against the multilingual and Router checkpoints.
Setup
- 1,190 cases and 1,550 typed questions across 9 suites: triage (5-way
intentchoice plus three nouls), guardrails (noul), moderation (noul), and the public sets agnews (4 labels), emotion (6), banking77 (12 intents), mnli (3-way), sst5 (5-levelscore), multilingual intent (6 labels, 5 languages). - One sealed manifest, raw bytes
a938cc2483a592dc84e0d5baac12594491bcaa5b4ceb6b7c3b0def71b36297bd, logical digest4272a7a25ebcb324235696ad808544e157a31e3f9c04421da731a08dfb9d5768. Checksum verified before the run and again inside the container. Seed 42. Same states, same question dicts, same order for every model. - CPU only, no GPU. Each run container capped at 4 CPUs and 12 GB. laya and Qwen ran locally against a dedicated model cache. Jev was called over the network from the same host, so Jev latency is a deployment observation, not a lab number.
Results, evaluation split, 952 cases, 1,240 scored decisions
| suite | n | laya 0.3.11 | jev 1.13.0 | Qwen2.5-1.5B PCD |
|---|---|---|---|---|
| triage | 192 | 0.8750 | 0.9323 | 0.7812 |
| guardrails | 96 | 0.7604 | 1.0000 | 0.2917 |
| moderation | 144 | 0.7569 | 0.9444 | 0.7292 |
| agnews | 160 | 0.8500 | 0.9875 | 0.9125 |
| emotion | 192 | 0.6562 | 0.8438 | 0.4115 |
| banking77, 12 intents | 96 | 0.8125 | 0.9479 | 0.5833 |
| mnli | 120 | 0.5583 | 0.8667 | 0.3417 |
| sst5, 5-level score | 120 | 0.3333 | 0.6500 | 0.5250 |
| multilingual intent, EN checkpoint | 120 | 0.4500 | 1.0000 | 0.6833 |
| all suites | 1,240 | 0.6863 | 0.9065 | 0.6048 |
Paired per suite, Jev minus laya, clustered by case because questions inside one case share a state: 20,000-replicate state-cluster bootstrap for the interval, 20,000 permutation replicates for the p-value, Holm corrected across the nine suites.
| suite | delta | 95% CI | Holm p |
|---|---|---|---|
| multilingual intent | +0.5500 | [+0.4583, +0.6417] | 0.0004 |
| sst5 | +0.3167 | [+0.2083, +0.4250] | 0.0004 |
| mnli | +0.3083 | [+0.2083, +0.4083] | 0.0004 |
| guardrails | +0.2396 | [+0.1562, +0.3229] | 0.0004 |
| emotion | +0.1875 | [+0.1198, +0.2552] | 0.0004 |
| moderation | +0.1875 | [+0.1250, +0.2500] | 0.0004 |
| agnews | +0.1375 | [+0.0813, +0.1938] | 0.0004 |
| banking77 | +0.1354 | [+0.0625, +0.2188] | 0.0051 |
| triage | +0.0573 | [+0.0052, +0.1094] | 0.0627 |
Triage is the one suite we do not claim. The bootstrap interval clears zero, the permutation test does not survive correction. A 5.7-point gap on 192 decisions is not established, and it is where both models are already strongest.
Calibration is close on choice questions across all three, ECE between 0.0009 and 0.0028. Refitting on the calibration split helped the PCD baseline and hurt laya on choice, and helped both open models on noul, so temperature scaling is not a dependable fix. Latency per case, p50/p95: Jev 314/387 ms, laya 588/1,364 ms, PCD 3,948/13,471 ms.
The gold is the weak part, and it should temper everything above
Our labels are hand-reviewed, not behavioral. One human reviewer read all 1,190 cases and corrected an AI draft of every answer, protocol human-reviewed-ai-assisted-v1. There was no second independent reviewer and no adjudication, so this dataset has no inter-annotator agreement, no kappa and no adjudication artifact. provenance.json records "independent_human_review": false and "adjudication": false.
Evals that grade from real outcomes are stronger than anything we produced. Do not place these numbers next to outcome-graded results. The per-language multilingual table is the weakest evidence here, for that reason plus the checkpoint scope above.
Three adapter findings, each reproducible on the current package
These cost us three failed runs, so they are worth a maintainer's five minutes.
The agent exposes no revision or checkpoint identity. After
laya.load("convaiinnovations/laya")the agent carriesmodel_id,cfg,deviceandmodel, but norevision,checkpoint_revision,model_revision,commit,_commit_hashorcheckpointattribute on the agent, its model, its config orcfg.model.configis a transformers config and does not carry the checkpoint commit either. Anything recording which weights served a result has to resolve the commit out of band, for example from the directory name of the cachedrl_agent_config.jsonsnapshot. We resolve it offline from the cache and fail closed when it cannot be resolved. Surfacing the resolved snapshot path or commit on the agent would remove the guesswork for every downstream consumer.Choice probabilities are rounded to four decimals, so they do not sum to one exactly. With five labels the raw values summed to 0.9999, which fails a strict unit-sum contract at 1e-6 tolerance. Dividing by the observed total and absorbing the residual on the largest entry is order-preserving, so the argmax and the reported choice do not move. Either the docs should say transport rounding is expected, or
_decode_answerscould emit more decimals.Answers carry fields that strict answer schemas reject. Every answer includes
action: {"act_probability": ...}; score answers addlegendandprobabilities; noul answers addconfidence. Our contract is exact about answer fields, so we project each answer onto the declared set at the adapter edge rather than loosening the contract. Flagging it because anyone integrating against a strict schema hits the same wall, andactionin particular reads like debug telemetry that may not be intended as part of the answer payload.
Reproducing
The sealed manifest and checksum are in the repo. The report regenerates byte-identically, figures included:
python -m benchmark.report --laya <run> --jev <run> --qwen <run> \
--manifest datasets/v2/manifest.jsonl --output-root <new-report-dir>
python -m benchmark.graphics --figure-source <new-report-dir>/figures/figure-source.json \
--output-root <new-report-dir>/figures
benchmark.report refuses to emit anything unless its recomputed per-decision counts and per-suite accuracies reproduce each run's own sealed summary.json, so the published numbers cannot drift from the raw predictions. Run IDs: laya-assisted-20260925-5, jev-assisted-20260925, qwen-assisted-20260925.
Corrections welcome, especially on the checkpoint scope, since that is the row most likely to be misread.