nirnaya
Decisions, not tokens. nirnaya reads a piece of state (a support thread, a security alert, an invoice, an agent's trace, or plain text) plus a set of typed questions about it. In one pass it returns a probability for every answer. It never writes a sentence, so there's nothing to parse and no malformed output.
It runs entirely in the browser tab. Nothing is sent to a server.
What you can ask it
Three question types. Each comes back as a probability distribution your code can branch on.
| type | you give it | you get back |
|---|---|---|
choice |
a few named options, each with a description | a probability per option |
score |
a scale, one description per level | a probability per level, and the expected level |
noul |
a statement | the probability that it's true |
{
"state": { "thread": [{ "role": "customer", "text": "I was charged twice for the same order." }] },
"questions": {
"queue": { "type": "choice", "criteria": { "billing": "payments and refunds", "technical": "bugs", "sales": "upgrades" } },
"urgency": { "type": "score", "instructions": "how urgent is this", "criteria": ["can wait", "today", "right now"] },
"refund": { "type": "noul", "instructions": "the customer is owed a refund" }
}
}
Every question about the same state is answered from one read of that state. Ask one question or twenty; the model reads the input once.
What it's good at
- Fast in the tab. On a laptop GPU, a typical five-question decision takes about 20 ms, fast enough to decide on every keystroke or every frame of a game. Browsers without a usable GPU fall back to the CPU automatically.
- Probabilities you can threshold. It reports how sure it is. Set a threshold, automate everything above it, and send the rest to a person.
- Option order can't change the answer. Shuffle the options and every probability moves with its option, exactly. That's a property of how it reads options, not a tendency.
- Private by construction. State and questions never leave the page.
What it's fitted for
This release is fitted to four workflows: customer-service conversations, security alerts, invoice processing, and agent-trace review. It's strongest on decisions shaped like those. It also handles plenty of everyday judgments well when the options describe their consequences in plain words ("Jump. Result: you clear the obstacle."). For a new kind of decision, treat it as something to fit to your workflow and check against your own examples before relying on it.
Files
| file | role |
|---|---|
nirnaya.core.hp.onnx |
the model, for GPUs with half-precision support |
nirnaya.core.onnx |
the model, for other GPUs and for CPU |
nirnaya.score.onnx |
the scoring step |
tokenizer/ |
the tokenizer |
nirnaya_config.json |
settings and file hashes |
A browser downloads only the one model file its device needs, then keeps it locally, so later visits start in under a second on a typical laptop.
License and credit
nirnaya is released under the Apache License 2.0: use it, change it and build products on it,
commercially too. If you redistribute it or ship something built on it, include the NOTICE file,
and credit it as nirnaya by dumbequation. Third-party licences are in THIRD_PARTY_NOTICES.md.
@software{nirnaya2026,
author = {dumbequation},
title = {nirnaya: typed decisions in the browser},
year = {2026},
url = {https://huggingface.co/dumbequation/nirnaya},
license = {Apache-2.0}
}