Unee, from UNEEVERSE, by Muneef Mumthas. A small open AI model that lives inside your app, with two jobs.
A decision model. It reads an input and a question with options, and returns a calibrated probability for every option in a single forward pass:
It can explain a decision in one sentence.
A streaming chatbot.
| Unee 0.8B | Unee 2B | |
|---|---|---|
| Base | Qwen/Qwen3.5-0.8B (Apache-2.0) | Qwen/Qwen3.5-2B (Apache-2.0) |
| Parameters | 0.75B | 1.9B |
| Files | GGUF Q4_K_M 529 MB; ONNX q4f16 469 MB (WebGPU) | GGUF Q4_K_M 1.27 GB |
| DecideBench v1.1, bf16 | 84.0% (pair 70.0%, ECE 0.025) | 88.0% (pair 76.5%, ECE 0.026) |
| DecideBench v1.1, 4-bit GGUF | 83.0% | 87.0% |
| S1MB Task Avg (official / clean, 101 benchmarks with no training overlap) | 35.45 / 36.74 (#3 under 1B) | 44.41 / 45.69 (best 2B-class) |
| MASSIVE, 51 languages: English / average / 12 priority languages | 91.7% / 63.3% / 74.4% | 86.7% / 69.7% / 77.2% |
| Answers from your own documents: good / correct "I don't know" (116 questions, 9B judge) | 38.8% / 53.6% | 48.3% / 67.9% |
| Replies with a made-up fact: no check / strict mode (same 116 questions and drafts) | 14.7% / 11.2% | 10.3% / 6.0% |
| General benchmarks (lm-eval, bf16): MMLU 5-shot / GSM8K / IFEval per prompt, strict | 49.3 / 29.7 / 39.7 | 58.1 / 49.0 / 52.7 |
| One decision, laptop RTX 4070, 4-bit (p50) | 96 ms | 111 ms |
| Browser (WebGPU) | yes, 0.4–0.9 s per decision on a laptop GPU | not packaged |
Version 0.3, 2026-10-07. The 0.8B model is a 50/50 weight average of Unee 0.2 0.8B and a run continued from it on public decision data; the 2B model is a continued run. Training data: our teacher-labelled synthetic tasks; the train splits of bekko-system-one-dataset-v0 from permissively licensed sources only, with every S1MB test input excluded; SQuAD 2.0 (CC BY-SA 4.0) for grounded answers. A leakage check (tools/contamination_check.py) finds no overlap with DecideBench; S1MB overlap is reported with a clean score above.
In the browser or Node.js (npm i @uneeverse/unee @huggingface/transformers):
import { Unee } from "@uneeverse/unee";
const unee = await Unee.load("uneeverse/unee-0.8b", { device: "webgpu" }); // or { device: "cpu" } in Node
const res = await unee.decide({ state: "My card was charged twice", questions: {
team: { type: "choice", instructions: "Which team handles this?", criteria: { billing: "Charges and refunds", technical: "Bugs" } } } });
for await (const piece of unee.stream([{ role: "user", content: "Do you ship to Ireland?" }], { knowledge: ["Shipping: UK only."] })) console.log(piece);
As a server (pip install unee, with llama.cpp's llama-server on the PATH): unee serve --model unee-0.8b-Q4_K_M.gguf. It serves the Jev-compatible POST /v1/systemone and an OpenAI-compatible POST /v1/chat/completions (streaming, with an optional knowledge field).
Strict mode ("strict": true with knowledge, or strict: true in JS): Unee writes the whole answer, then its decision side checks every sentence against your documents and removes what it cannot support, so the answer arrives checked and whole. It lowers made-up facts (numbers in the table above); it does not rule them out.
Open Knowledge Format bundles (OKF v0.2, a folder of Markdown files with a small YAML header each) can be the knowledge: unee.okf.load_bundle("help-centre/") in Python, okfDocuments({ "refunds.md": text, ... }) in JS.
Chat in Ollama: ollama run uneeverse/unee (decisions need unee serve).
Prompt format matters. Decisions use Unee's compact prompt plus the date-facts step. Use the unee packages, or copy unee/prompt.py and unee/facts.py from the repository.
unee/facts.py, packages/js/src/facts.js). It's part of the prompt format, so use the provided libraries or replicate it.Apache-2.0 (weights and code), copyright Muneef Mumthas / UNEEVERSE. Redistributions keep the NOTICE file. If you build with Unee, please credit "Unee by UNEEVERSE". The base models, teacher and oasst1 prompts are Apache-2.0.
Unee, from UNEEVERSE, by Muneef Mumthas. A small open AI model that lives inside your app, with two jobs.
A decision model. It reads an input and a question with options, and returns a calibrated probability for every option in a single forward pass:
It can explain a decision in one sentence.
A streaming chatbot.
| Unee 0.8B | Unee 2B | |
|---|---|---|
| Base | Qwen/Qwen3.5-0.8B (Apache-2.0) | Qwen/Qwen3.5-2B (Apache-2.0) |
| Parameters | 0.75B | 1.9B |
| Files | GGUF Q4_K_M 529 MB; ONNX q4f16 469 MB (WebGPU) | GGUF Q4_K_M 1.27 GB |
| DecideBench v1.1, bf16 | 84.0% (pair 70.0%, ECE 0.025) | 88.0% (pair 76.5%, ECE 0.026) |
| DecideBench v1.1, 4-bit GGUF | 83.0% | 87.0% |
| S1MB Task Avg (official / clean, 101 benchmarks with no training overlap) | 35.45 / 36.74 (#3 under 1B) | 44.41 / 45.69 (best 2B-class) |
| MASSIVE, 51 languages: English / average / 12 priority languages | 91.7% / 63.3% / 74.4% | 86.7% / 69.7% / 77.2% |
| Answers from your own documents: good / correct "I don't know" (116 questions, 9B judge) | 38.8% / 53.6% | 48.3% / 67.9% |
| Replies with a made-up fact: no check / strict mode (same 116 questions and drafts) | 14.7% / 11.2% | 10.3% / 6.0% |
| General benchmarks (lm-eval, bf16): MMLU 5-shot / GSM8K / IFEval per prompt, strict | 49.3 / 29.7 / 39.7 | 58.1 / 49.0 / 52.7 |
| One decision, laptop RTX 4070, 4-bit (p50) | 96 ms | 111 ms |
| Browser (WebGPU) | yes, 0.4–0.9 s per decision on a laptop GPU | not packaged |
Version 0.3, 2026-10-07. The 0.8B model is a 50/50 weight average of Unee 0.2 0.8B and a run continued from it on public decision data; the 2B model is a continued run. Training data: our teacher-labelled synthetic tasks; the train splits of bekko-system-one-dataset-v0 from permissively licensed sources only, with every S1MB test input excluded; SQuAD 2.0 (CC BY-SA 4.0) for grounded answers. A leakage check (tools/contamination_check.py) finds no overlap with DecideBench; S1MB overlap is reported with a clean score above.
In the browser or Node.js (npm i @uneeverse/unee @huggingface/transformers):
import { Unee } from "@uneeverse/unee";
const unee = await Unee.load("uneeverse/unee-0.8b", { device: "webgpu" }); // or { device: "cpu" } in Node
const res = await unee.decide({ state: "My card was charged twice", questions: {
team: { type: "choice", instructions: "Which team handles this?", criteria: { billing: "Charges and refunds", technical: "Bugs" } } } });
for await (const piece of unee.stream([{ role: "user", content: "Do you ship to Ireland?" }], { knowledge: ["Shipping: UK only."] })) console.log(piece);
As a server (pip install unee, with llama.cpp's llama-server on the PATH): unee serve --model unee-0.8b-Q4_K_M.gguf. It serves the Jev-compatible POST /v1/systemone and an OpenAI-compatible POST /v1/chat/completions (streaming, with an optional knowledge field).
Strict mode ("strict": true with knowledge, or strict: true in JS): Unee writes the whole answer, then its decision side checks every sentence against your documents and removes what it cannot support, so the answer arrives checked and whole. It lowers made-up facts (numbers in the table above); it does not rule them out.
Open Knowledge Format bundles (OKF v0.2, a folder of Markdown files with a small YAML header each) can be the knowledge: unee.okf.load_bundle("help-centre/") in Python, okfDocuments({ "refunds.md": text, ... }) in JS.
Chat in Ollama: ollama run uneeverse/unee (decisions need unee serve).
Prompt format matters. Decisions use Unee's compact prompt plus the date-facts step. Use the unee packages, or copy unee/prompt.py and unee/facts.py from the repository.
unee/facts.py, packages/js/src/facts.js). It's part of the prompt format, so use the provided libraries or replicate it.Apache-2.0 (weights and code), copyright Muneef Mumthas / UNEEVERSE. Redistributions keep the NOTICE file. If you build with Unee, please credit "Unee by UNEEVERSE". The base models, teacher and oasst1 prompts are Apache-2.0.