Laya in your browser

A decision model that stays on your device.

Laya reads a situation once and answers typed questions — pick one option, place it on a scale, or say yes or no — with calibrated probabilities instead of generated text. Here it runs entirely in this page: no server, no account, no key.

Download once, then decide on your device.

Runs on your device. Nothing you type is sent anywhere. The model answers inside this browser tab. The only network requests are the downloads listed below, made after you press the button; the hosts serving them see a file download, not your text.

What the button downloads
FilePinned sourceSize
Laya typed-decisions, int8 weights and graphHugging Face · VishalMysore/layaForWebTrained at commit dd0c52a425.1 MiB
Tokenizer and calibration settingsHugging Face · convaiinnovations/laya at commit 55cf4c43.4 MiB
ONNX Runtime Web 1.30.0 (WebAssembly)jsDelivr · npm package onnxruntime-web13.6 MiB
Tokenizers.js 0.2.0jsDelivr · npm package @huggingface/tokenizers0.03 MiB
Total442.2 MiB

Every file comes from an address that names an exact commit or package version and is checked against a recorded SHA-256 or SHA-384 hash before use. A mismatch stops the load.

Use a computer with at least 4 GB of free memory. This site stores nothing; your browser may keep the files in its ordinary cache.

Nothing has been downloaded yet.

Ask a typed question

Write the situation the model should read, then the question. The examples fill the form with the three fixed cases used in the check below.

Examples

Plain text: a message, a ticket, a log line. English works best.

One option per line. Optionally add a description after a colon: label: description.

Download the model to enable the form.

What was checked, and how.

Where the weights come from

The checkpoint is typed-decisions/model.safetensors in convaiinnovations/laya at commit 55cf4c4, Apache License 2.0, SHA-256 4fa56de7…a24e. The browser build names a base model but not a commit, so we rebuilt the int8 model ourselves from the pinned checkpoint with the same tool versions and compared it with the hosted build. MEASURED · 24 SEP 2026 · ONE MAC

The files are not byte-identical, and we keep that result. Tensor by tensor, both models have the same 363 named tensors; every scale, embedding, bias and normalization tensor is bit-identical, and 5,259 of 369,099,776 int8 weight codes (0.0014%) differ, each by exactly one step. That pattern fits rounding at exact halfway points on different machines, not a different checkpoint, which would change nearly every code. We therefore load the hosted build, pinned to its commit and hash. The hosted graph file itself differs from ours in size (3.6 MB against 4.3 MB) with the same operator counts; the browser check below is what tests its behavior.

Does the browser agree with the original?

Three hand-written cases were fixed before any output was seen. The original float32 PyTorch model answered them with the checkpoint’s own Python code; then a headless Chromium loaded this page from a local build, downloaded the real model, and answered them using the keyboard only. The pass rule: the same decision, and every probability within 0.02. MEASURED · 24 SEP 2026 · ONE RUN

Python reference (float32, PyTorch 2.14.0, CPU) against this page (int8, ONNX Runtime Web 1.30.0, WebAssembly, one thread)
CasePythonBrowserLargest differenceResult
Choice: route “screen arrived cracked, send a replacement”technical · returns 0.3800, technical 0.4750technical · returns 0.3800, technical 0.47450.0008SAME DECISION · WITHIN 0.02
Score: urgency of a build that blocks every mergelevel 3 “Right now” 0.6063 · score 2.4543level 3 “Right now” 0.6076 · score 2.45980.0055SAME DECISION · WITHIN 0.02
Yes/no: “the customer is asking for something” on a thank-you noteno · p(yes) 0.0476no · p(yes) 0.05220.0046SAME DECISION · WITHIN 0.02

What the run also showed

Before the button was pressed the page made no request outside its own site. After it, requests went only to jsDelivr and Hugging Face, all of them downloads: no request carried a body. Across three runs, loading took 18 to 21 seconds on this network and each answer took 1.7 to 3.9 seconds in one WebAssembly thread on an Apple M5 Max that was busy with other work. These are observations on one machine, not a benchmark.

Boundaries

Three agreeing cases show that the port and the int8 build reproduce the original on those inputs; they do not measure accuracy. The first case is a reminder: the model sends a cracked screen to “technical” rather than “returns”, with probabilities close enough (0.47 against 0.38) to say it is unsure. GitHub Pages cannot enable the cross-origin isolation that multithreading needs, so the page uses one thread, and it does not use WebGPU. The calibration temperatures were fitted on the full-precision model. English text works best.

Recorded reference, provenance and browser results

Claims we have not measured.

These statements come from the people who publish the model and the browser build. We record them with the date we read them; they are not our results.

  • Laya’s model card reports 0.766 accuracy for the typed-decisions checkpoint on its 2,000-decision typed-decisions benchmark, against 0.362 for the general English checkpoint. The card also says the fine-tune was trained on that benchmark’s own training split, across four workflows (invoices, security incidents, customer service, agent traces), and that the base checkpoints are near chance on it zero-shot. VENDOR CLAIM · MODEL CARD AT 55CF4C4 · READ 24 SEP 2026
  • The browser build’s author reports that the int8 build kept PyTorch’s top answer on 97.9% of 48 test questions (general checkpoint), and that a three-question call takes about 2 to 5 seconds on a 2-core machine. THIRD-PARTY CLAIM · READ 24 SEP 2026
  • Laya is presented by its authors as an open alternative to hosted decision APIs. We compared no hosted service here, and this page needs no key for any service. POSITIONING · NOT MEASURED

Reproduce the check.

From the repository root, with Python 3.12 and about 4 GB of free disk. The first command answers the three cases with the original PyTorch model; the second rebuilds the int8 model from the pinned checkpoint and compares it with the hosted build, file by file and tensor by tensor.

pip install -r research/laya-browser/requirements.txt
python research/laya-browser/reference.py --cache ~/.cache/odin-rnd-laya --out reference.json
python research/laya-browser/convert.py --cache ~/.cache/odin-rnd-laya

Read the scripts, pins and recorded results

Whose work this is.

Laya and its typed-decisions checkpoint are by ConvAI Innovations under the Apache License 2.0, built on ModernBERT-large by Answer.AI and LightOn (Apache License 2.0): convaiinnovations/laya. The browser conversion is layaForWeb by vishalmysore (Apache License 2.0), an unofficial port not affiliated with ConvAI Innovations: VishalMysore/layaForWebTrained. ONNX Runtime Web is by Microsoft (MIT License); Tokenizers.js is by Hugging Face (Apache License 2.0).

This page’s sequence builder is our JavaScript port of the checkpoint’s own reference code. Odin did not train this model and makes no claim about its fitness for your decisions.