Beveridge-Pro-C-Web: Beveridge logo and model name

PyPI GitHub License Website Buy Me A Coffee

Beveridge-Pro-C with web browsing added. A System One decision model with open weights that picks the next step of a browser agent: what to do (click, type, choose from a list, wait, done) and on which element, with a calibrated probability for every option. It answers in one scoring pass per question and never generates text, so the agent always gets one of the actions that are actually on the page.

It keeps everything Beveridge-Pro-C does on documents (Beveridge-Bench 92.1%, Beveridge-Pro-C 91.9%), so one model serves both.

This repository holds only Beveridge's decision adapter (about 46 MB). Gemma 4 26B-A4B is downloaded unchanged from Google's repository when you load the model. English, up to 4,096 input tokens; needs one GPU with about 60 GB of memory (bf16).

Model Size Runs on Best for Status
Beveridge-Large-C 0.4B (ModernBERT-large base) laptop CPU/GPU, edge boxes, any GPU operations documents, logs and alerts, ticket routing, request safety available
Beveridge-Pro-C 26B (Gemma 4 26B-A4B base) one GPU with about 60 GB knowledge-heavy decisions on documents available
Beveridge-Pro-C-Web 26B (Gemma 4 26B-A4B base) one GPU with about 60 GB next step of a browser agent, plus everything Beveridge-Pro-C does available

Browsing live

Recorded on one NVIDIA H200: the real screen after every action, and the step Beveridge-Pro-C-Web chose with its confidence and decision time. Steps are held so they can be read. Taking each screenshot in the recording took a few seconds, so the times in the results below come from the same runs without recording. Wikipedia's main page is blurred below the search box because it changes every day. Note step 3 of the hotel search: Beveridge chose correctly but with confidence 0.67, below the 0.8 a strict agent would require; with bev.gate that step would go to a person.

Installation

python -m pip install "bev-decisions[pro]"

Python 3.10 or newer. The first bev.load() downloads the adapter from this repository and Gemma 4 from Google's (about 52 GB), and caches both; after that it works offline.

Quickstart: one browser step

Describe the page and the goal as the document; ask which operation comes next and which element it applies to.

import bev

model = bev.load(bev.WEB_MODEL)       # "sathiskumarjothi0/Beveridge-Pro-C-Web"; needs bev-decisions 0.2.5 (older versions: pass the repo id)
page = {
    "recent_actions": [],
    "elements": ["[1] input: Destination (empty)", "[2] button: Find stays", "[3] checkbox: Free cancellation (not checked)"],
    "page": {"url": "https://example-travel.test/", "title": "Find a stay", "text": "Where are you going? ... Find stays"},
}
goal = "goal: Find stays in Lisbon with free cancellation."
answers = model.decide(page, {
    "operation": {"type": "choice", "instructions": goal + "\nrules: Pick the next single operation on the current page.",
                  "criteria": {"CLICK": "Click an element", "TYPE_TEXT": "Enter text in a field",
                               "WAIT": "Wait for the page to finish loading", "DONE": "Every requirement is visibly satisfied."}},
    "type_text_target": {"type": "choice", "instructions": goal + "\noperation: TYPE_TEXT",
                         "criteria": {"1": "[1] Destination (empty)"}},
})
answers["operation"]["choice"], answers["operation"]["confidence"]    # ("TYPE_TEXT", 0.99...)

Your agent then does the action. Beveridge picks the step and the element; the words to type (here "Lisbon") come from the goal or from a small text model in your agent. bev.gate(answers, threshold=0.8) returns the unsure answers, so the agent can stop and ask a person instead of guessing.

Results

Accuracy (%) = correct answers ÷ questions (or steps) on held-out tests. October 2026.

Web steps

Test Beveridge-Pro-C Beveridge-Pro-C-Web
Next step on 500 web pages from site types never seen in training (cars, courses, events, libraries) 49.4 98.2
Next operation on the same 500 pages 60.2 98.4
24 recorded steps of real browser runs: same operation as the reference agent 22/24 24/24

By kind of step on the 500 held-out pages:

Kind of step Accuracy
type into the search field 100.0
pick the right autocomplete suggestion 98.4
press Search 100.0
apply the requested filters 85.5
wait while the page loads 100.0
open the requested result 100.0
stop when the goal is met 100.0

Live browsing

The open-source browser loop jev-ultrafast (MIT) with Beveridge-Pro-C-Web choosing every step, on one NVIDIA H200; Llama 3.1 8B (local, temperature 0) writes the words typed into fields. Time = the agent's own clock from the first decision to DONE, including the browser work.

Task Beveridge-Pro-C Beveridge-Pro-C-Web
Hotel search: Lisbon, Design, Free cancellation, open Casa Flora (local test page) 0/3 3/3, median 1.86 s
Open the Wikipedia article about Gödel's incompleteness theorems (live site) 3/3, median 4.9 s 3/3, median 4.88 s

About 0.2 s per decision on the hotel page and 0.7 s on Wikipedia, whose pages are longer.

Documents (no loss)

Test Beveridge-Pro-C Beveridge-Pro-C-Web
Beveridge-Bench (operations documents, 5,700 questions) 91.9 92.1

For every other document test, see the Beveridge-Pro-C card.

Honest limits

  • Two live tasks are a small test. Before you let it act on real accounts, run it on your own sites and keep a person in the loop for anything that buys, sends, deletes or signs.
  • Filters are the weakest kind of step (85.5%): check that the agent applied every filter the goal asks for.
  • It reads the page as text and a list of elements; it does not see images or the page layout.
  • It decides the step; it does not write text. Typed words come from the goal or from a text model you choose.
  • Needs a large GPU. Beveridge-Large-C cannot navigate websites (16.8% on the held-out web steps).
  • English only; text beyond 4,096 tokens is cut.
  • Beveridge can make mistakes. For decisions with serious consequences, validate on your own data (bev eval my_cases.jsonl) and keep a person in the loop.

Files

File Contents
adapter/ Beveridge's decision weights (LoRA adapter for Gemma 4 26B-A4B)
config.json Beveridge settings, calibration temperatures and the name of the base model
NOTICE Gemma attribution (Apache-2.0)
assets/ the header, the logo and the browsing video

Links

Support

If Beveridge is useful to you, you can support its development: buymeacoffee.com/sjothi

Licence and credit

Apache-2.0, © 2026 Dr. Sathiskumar JOTHI. Built on Gemma 4 26B-A4B (Apache-2.0) by Google. Live tests use jev-ultrafast (MIT) by Browser Use and Llama 3.1 8B by Meta.

About the name

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 this model. The Python package keeps its short name: pip install bev-decisions, import bev.

Downloads last month
19
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for sathiskumarjothi0/Beveridge-Pro-C-Web

Adapter
(103)
this model

Evaluation results

  • accuracy on Web steps on site types never seen in training
    self-reported
    0.982
  • accuracy on Beveridge-Bench (operations documents)
    self-reported
    0.921