Decisions, not essays.
Typed answers with calibrated probabilities.
Beveridge is a System One decision model. Give it a document and typed questions (yes/no, one of your options, or a level on your scale) and it returns an answer with a probability for every option. It never generates text or reasons step by step, so there is nothing to parse: Beveridge-Large-C answers all your questions in one pass on a laptop, Beveridge-Pro-C answers each question in one scoring pass on a GPU. The weights are open and it runs on your own machines: your documents never leave them.
Get Beveridge
The model, the code and the package, all under Apache-2.0: free for commercial use.
| Model | Size | Runs on | Best for | Status |
|---|---|---|---|---|
| Beveridge-Pro-C | 26B, built on Gemma 4 26B-A4B | one GPU with about 60 GB | knowledge-heavy decisions: contracts, finance topics, large intent sets, dates and payment status | available |
| Beveridge-Pro-C-Web | 26B, built on Gemma 4 26B-A4B | one GPU with about 60 GB | the next step of a browser agent (98.2% on web pages from unseen site types; live hotel search and Wikipedia 3/3), plus everything Beveridge-Pro-C does | available |
| Beveridge-Large-C | 0.4B, built on ModernBERT-large | laptop CPU or GPU, edge boxes, any GPU | operations documents, logs and alerts, ticket routing, request safety | available |
Quickstart
Python 3.10 or newer. The first load downloads the model once; after that it works offline.
pip install bev-decisions # Beveridge-Large-C: laptop CPU or any GPU
pip install "bev-decisions[pro]" # adds Beveridge-Pro-C: one GPU with about 60 GB
import bev
model = bev.load() # Beveridge-Large-C; bev.load(bev.PRO_MODEL) for Beveridge-Pro-C
answers = model.decide(
"Charged twice for order 88412. Please refund one payment today.",
{
"team": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "payments, refunds", "tech": "bugs, outages"}},
"urgent": {"type": "noul", "instructions": "Does the customer ask for urgent handling?"},
},
)
sure, review = bev.gate(answers, threshold=0.8) # act on sure, send review to a person
With or without a GPU
bev.load() picks the best device it finds: an NVIDIA GPU, an Apple Silicon GPU, otherwise the CPU. Or choose it:
model = bev.load(device="cpu") # Beveridge-Large-C, no GPU needed
model = bev.load(device="cuda") # Beveridge-Large-C on an NVIDIA GPU
model = bev.load(device="mps") # Beveridge-Large-C on an Apple Silicon GPU
pro = bev.load(bev.PRO_MODEL, device="cuda") # Beveridge-Pro-C: NVIDIA GPU with about 60 GB
| Measured, package from PyPI | First load | One document, 3 questions |
|---|---|---|
| Beveridge-Large-C, Apple M4 Pro laptop, CPU only | about 25 s | about 0.18 s |
| Beveridge-Large-C, Apple M4 Pro laptop GPU | about 22 s | about 0.05 s |
| Beveridge-Large-C, one NVIDIA H200 GPU | about 32 s | about 0.015 s |
| Beveridge-Pro-C, one NVIDIA H200 GPU | about 54 s | about 0.07 s |
Typed outputs
A boolean, an option from your list, or a level on your scale. Your code reads the answer directly.
Calibrated confidence
A probability for every option, so you can automate the sure cases and route the rest to a person.
Runs where your data is
Load it on your own GPU, serve it over HTTP or MCP, or run it in Docker. Nothing is sent anywhere.
Use cases
Each use case links to the tests that back it. Check yours on a few hundred labelled examples first (bev eval).
| Use case | Example questions | Evidence |
|---|---|---|
| Support inbox triage | which team? urgent? customer sentiment? | Beveridge-Bench tickets; support intents |
| Request safety and guardrails | is this request harmful? a jailbreak attempt? | Aegis 2.0; JailbreakBench |
| AI agents: tool dispatch and checks | does this need a tool? which tool? does the action move money or delete data? (MCP server: bev mcp) | typed decisions |
| Model routing | rules, a small model, a large LLM or a person? | typed decisions |
| Security and operations logs | attack category, failed logins above a number, severity, outage root cause | Beveridge-Bench security and alerts |
| Back office documents | invoice total over the approval limit? | Beveridge-Bench invoices |
| Contract and policy review | does this clause look unfair? which policy rule applies? | unfair contract terms; Rules-Bench |
| Reviews and moderation | review sentiment, toxic comment? | product reviews; toxic comments |
Automation examples
Support inbox
Reads a folder of emails, routes each to a team when confident, flags urgent ones, writes a CSV; the rest go to a person.
Invoice approval
Approves invoices clearly under the limit; anything over the limit, or unsure, goes to a manager.
Guard for AI agents
Harmful requests are refused; actions that move money, delete data or contact people wait for a person.
answers = model.decide(email_text, bev.presets.get("ticket_triage"))
sure, review = bev.gate(answers, threshold=0.8)
route_to(sure["department"]) if "department" in sure else send_to_person(email_text)
Benchmarks
Accuracy = correct answers ÷ questions on held-out test sets, the same cases for every system (October 2026). For example, Beveridge-Pro-C on Beveridge-Bench: 1,103 of 1,200 answers right = 91.9%. Highlighted green = best in the row; – = not run.
How much of the work can you automate?
Hand over the most confident answers first. The automation rate is the share you can hand over while those decisions stay at least 95% correct: Beveridge-Large-C 76%, Beveridge-Pro-C 69%, Jev 59%. The LLMs reach 0% at 95%, because their "100% sure" answers are not 95% right (gpt-oss 120B 94.0%, Gemma 4 31B 91.5%). Example: 76% means 3 of every 4 decisions are taken automatically and at least 95% of them are right; the rest go to a person.
| System | Automated at 95% accuracy | at 90% | Accuracy on all answers |
|---|---|---|---|
| Beveridge-Large-C | 76% | 93% | 87.0% |
| Beveridge-Pro-C | 69% | 90% | 86.0% |
| Jev | 59% | 77% | 81.1% |
| gpt-oss 120B | 0% | 74% | 81.4% |
| Gemma 4 31B | 0% | 71% | 82.2% |
| Mistral Large 4 | 0% | 0% | 78.1% |
| Mistral Large 3 | 0% | 0% | 71.4% |
| Nemotron 3 Super | 0% | 0% | 68.7% |
Beveridge-Bench, typed decisions and Aegis 2.0 request safety: 10,238 answers per system, same cases for every system. Answers given with the same confidence are handed over together.
Size and speed
Accuracy on the same 10,238 answers against model size: Beveridge-Large-C (0.4B) and Beveridge-Pro-C (25.8B) are more accurate than LLMs of 31B to 675B.
Time per decision: Beveridge-Large-C 4.9 ms on one GPU and 60 ms on a laptop CPU; Beveridge-Pro-C 22 ms on one GPU. Jev and the LLMs were measured through their cloud APIs, including network: 98 ms and 4.1 to 7.0 s.
Accuracy, test by test
| Test | Beveridge-Large-C | Beveridge-Pro-C | Jev | Mistral Large 4 | Mistral Large 3 | gpt-oss 120B | Gemma 4 31B | Nemotron 3 Super |
|---|---|---|---|---|---|---|---|---|
| Beveridge-Bench (operations documents) | 93.0 | 91.9 | 87.9 | 83.7 | 74.6 | 91.1 | 88.9 | 70.6 |
| Typed decisions | 75.8 | 79.2 | 73.8 | 72.0 | 68.0 | 68.8 | 75.0 | 62.7 |
| Rules-Bench (rules shown) | 85.6 | 92.0 | 92.3 | 83.1 | 81.4 | 94.5 | 91.6 | 82.7 |
| Aegis 2.0 request safety | 82.3 | 78.2 | 71.5 | 70.5 | 66.9 | 69.5 | 73.1 | 69.3 |
| JailbreakBench refusal | 84.5 | 84.0 | 83.5 | 77.5 | 62.0 | 68.0 | 87.5 | 65.0 |
| Unfair contract terms* | 65.6 | 76.0 | 62.0 | 54.6 | 52.8 | 47.6 | 74.4 | 44.0 |
| Financial-news topics* | 37.8 | 69.8 | 65.0 | 61.8 | 61.6 | 63.4 | 64.2 | 57.2 |
| Legal case holdings* | 42.0 | 71.2 | 77.6 | 69.2 | 72.2 | 61.2 | 71.6 | 55.0 |
| Banking77 (77 intents) | 63.6 | 70.6 | 79.2 | 75.8 | 71.2 | 81.0 | 78.8 | 69.2 |
* An area Beveridge was not built for. Full results, question-by-question tables and calibration are on the model card.
Why the name “Beveridge”?
Beveridge is named after Sir William Beveridge (1879–1963), the British economist, born in British India and educated in England, whose 1942 Beveridge Report laid the foundations of the modern welfare state and of the National Health Service (NHS), built for the good of future generations.
The name is a reminder of what we want from the model: dependable, fair decisions that serve people, made carefully and checked against the facts.
Other models on Hugging Face are called Bev; they are not related to Beveridge. The Python package keeps its short name: pip install bev-decisions, import bev.
FAQ
Can I use Beveridge in a commercial product?
Yes. Beveridge-Large-C, Beveridge-Pro-C and the bev-decisions package are released under Apache-2.0. Beveridge-Large-C is built on ModernBERT-large (Apache-2.0) by Answer.AI and LightOn; Beveridge-Pro-C on Gemma 4 (Apache-2.0) by Google.
What is a System One model?
A model that makes a typed decision in a single scoring step for each question instead of generating text step by step, the way a person answers "is this invoice over the limit?" at a glance.
What hardware do I need?
Beveridge-Large-C runs on a laptop CPU (about 0.18 s per document with 3 questions on an Apple M4 Pro) or any GPU (about 0.015 s on one H200). Beveridge-Pro-C needs one GPU with about 60 GB of memory (about 0.07 s per document on one H200).
Where is Beveridge less strong today?
Knowledge-heavy decisions such as case law, questions with very many options, and five-level sentiment. It reads English text up to 4,096 tokens per call. Check it on a few hundred labelled examples of your own (bev eval) and keep a person in the loop for decisions with serious consequences.
Do you see my documents?
No. Beveridge runs on your machines; nothing is sent to us or anywhere else.
How can I support Beveridge?
Star the GitHub repository, report issues there, or buy me a coffee.