SARVAM-JEV
Indic decisions, read not written GITHUB REPO ↗

A live, local experiment

Indic decisions
in your browser.

sarvam-1 runs on your own machine, in this tab. It can either read probabilities for the options you allow, or write the same answers token by token as JSON. Load it once, run both, and measure the difference yourself.

browser onlyno backendyour timings1.55 GB model

Nothing to install and nothing to sign up for. Your ticket never leaves this page — there is no server to send it to. ↓

sarvam-1 Q4_K_M is selected by default and reads a five-criterion ticket in about six seconds on a desktop GPU. A phone is roughly ten times slower — measured at about fifty seconds for the same ticket — so on mobile pick Qwen3 0.6B below, keep the number of criteria small, and expect to wait. The lane reports which criterion it is on and how long is left.

00 / setup

Load the model once

Checking what this browser supports…

download / cache
nothing downloads until you press load
model load fetch, decompress and prepare
warmup compile a real pass

Weights come from Hugging Face and stay in your browser cache, so a second visit is instant. First load can take several minutes depending on your network. The quality figures in the repository are for native BF16 weights; these builds are quantized and have not been separately measured.

01 / decision

Give it a real ticket

Try an example

State 0 characters

Prefilled once. Every criterion below reuses it.

Criteria 0 rows

02A / direct readout

Choice probabilities

NO DECODING

Each criterion is one constrained readout: a softmax over the logits of its own answer letters. Nothing is sampled, so no answer can be malformed or borrow another criterion's options.

0.00sidle
waiting for a run
total
readouts
first / rest
output
0 tokens

02B / generation

JSON answers

TOKEN BY TOKEN

The same decisions asked for as a JSON object, decoded greedily. Every token is one forward pass, and the object is only usable once the last brace lands.

0.00sidle
waiting for a run
first token
total
passes
output

Measured wall-time ratio

Load a model, then run both methods. They run one after the other on the same loaded weights so they never contend for your GPU.

run it on your machine

02 / how it works

Read the answer, do not write it

your decisionstate + criteria + options
in this tabsarvam-1 · 2B
read logitsA…P probabilities
write tokens{"q1": "…", "q2": "…"}

The answer-letter ids are listed in models.json, not discovered here: this build of wllama exposes no tokenizer to probe with. They were derived beforehand by probing both Hugging Face's tokenizer and llama.cpp's and checking they agree, and they are not contiguous in either vocabulary, so the usual shortcut of assuming consecutive ids would be wrong. The check that survives in the page is downstream — a readout that comes back without a score for every declared option is refused rather than shown.

What this demo does — and does not — show

Not the server's parallel path. The Python engine prefills the state once and evaluates every criterion in a single batched pass, which is where its 8.8× at twenty criteria comes from. wllama exposes no batched branch evaluation, so criteria here are scored one at a time with the shared prefix cached between them. Expect a smaller ratio than the repository reports.

Quantized weights. Every published accuracy figure is for native BF16. These are 3-, 4- and 8-bit builds; quantization can move both quality and speed, and no separate measurement has been made.

Conditional probabilities. The readout is a softmax over only the option letters you supplied. It is not calibrated confidence, and a high number does not establish that the decision is correct.

A 2B base model. sarvam-1 was never instruction-tuned. On openjev's authored fixture it scores 0.516 mean family balanced accuracy against a 0.333 chance floor — well above chance, well below instruction-tuned models of the same size. Expect visible mistakes.