arbazsiddiqui/kev-browser-use

A tiny 0.6B Jev-like model fine-tuned from Kev for browser use: 32.2% step success on Mind2Web, runs in your browser on WebGPU.

Python

3

0 commits

updated Sep 23, 2026

See the code

README

kev-browser-use

A tiny 0.6B Jev-like model, fine-tuned from Kev-0.6B for browser use.

Model on Hugging Face · Web build (ONNX) · Live demo

Mind2Web step success 32.2 Base: Kev-0.6B License: Apache-2.0

A decision model for browser agents. It reads a goal and a table of the page's candidate elements, then returns which element to act on and whether to click, type or select, as probabilities, in one forward pass. It never writes text.

32.2% step success on Mind2Web, the best of any open-weights model that runs in a browser, at 80 ms per decision.

kev-0.6b-browser-use playing A Dark Room in the browser: it builds a hut after gathering wood, then crafts a rucksack after putting three more villagers to work as tanners

Results

1,000 steps from Mind2Web's test set. Each step gives a goal, the previous actions and 10 candidate elements. Every model sees the same text and the same candidates.

Element accuracy, operation accuracy and step success for every model on 1,000 Mind2Web steps
ModelSizeStep successElement accuracyOperation accuracyBrier (lower is better)p50 latency
Jev (TypeSafe, hosted API)closed43.547.982.70.73network
Kev-9B9B32.538.778.70.76428 ms
kev-0.6b-browser-use0.6B32.236.183.60.8480 ms
SemIf, frozen Qwen3.5-4B4B30.038.475.20.85289 ms
Bespoke Nimble-9B9B26.238.559.60.87979 ms
decider-2B2B24.733.062.50.87139 ms
Kev-0.6B (base)0.6B14.120.667.41.0678 ms
NanoJev0.6B4.213.116.40.92245 ms
Laya421M3.810.733.40.9840 ms
Random3.610.535.50.94
  • Step success: the correct element and the correct action in the same step, the number that matters for an agent.
  • Element accuracy: the model picked the correct UI element.
  • Operation accuracy: it chose the correct action on that element (click, type or select).
  • Brier (lower is better): how good the model's probabilities are, not just its top pick. It adds up the squared error over all 10 candidates, so it runs from 0 to 2 and hits 2 when the model is certain of a wrong element.

Latency is one decision on an NVIDIA L4. python3 eval/harness.py table builds the table from results/ and python3 eval/plot_results.py draws the chart.

Quick start

In the browser

The 4-bit web build (348 MB, WebGPU) runs with open-jev.

npm install open-jev @huggingface/transformers
import { OpenJev, choice } from "open-jev";

const kev = await OpenJev.load({ model: "arbazsiddiqui/kev-0.6b-browser-use-ONNX", dtype: "q4f16" });

const state = `Goal: Type "Alan Turing" into the search box
Candidate elements:
[0] <a> role=None "Main page"
[1] <input> role=searchbox "Search Wikipedia"
[2] <button> role=None "Search"`;

const { element, operation } = await kev.decide(state, {
  element: choice("Which element should be acted on?", [
    '[0] <a> "Main page"',
    '[1] <input> "Search Wikipedia"',
    '[2] <button> "Search"',
  ]),
  operation: choice("What operation should be performed on the target element?", ["CLICK", "TYPE", "SELECT"]),
});

element.choice;     // '[1] <input> "Search Wikipedia"', confidence 0.93
operation.choice;   // "TYPE", confidence 0.74

On a server

The full-precision checkpoint is a LoRA adapter plus a pointer head in Kev's format, served by Kev's own server.

git clone https://github.com/jaredpalmer/kev.git && cd kev && uv sync --extra serve
uv run --extra serve python -m kev.serve --run arbazsiddiqui/kev-0.6b-browser-use --port 8009
curl -s localhost:8009/v1/systemone -H 'content-type: application/json' -d '{
  "model": "kev-latest",
  "state": "Goal: Search Wikipedia for \"Alan Turing\"\nCandidate elements:\n[0] <a> role=None \"Main page\"\n[1] <input> role=searchbox \"Search Wikipedia\"\n[2] <button> role=None \"Search\"",
  "questions": {
    "element":   {"type": "choice", "instructions": "Which element should be acted on?",
                  "criteria": {"[0] <a> \"Main page\"": null, "[1] <input> \"Search Wikipedia\"": null, "[2] <button> \"Search\"": null}},
    "operation": {"type": "choice", "instructions": "What operation should be performed on the target element?",
                  "criteria": {"CLICK": null, "TYPE": null, "SELECT": null}}}}'

Both take the same text: a Goal: line, optional Previous actions:, then one line per candidate element. The model card documents the format.

Demo

Runs entirely in your browser on WebGPU: arbazsiddiqui.me/kev-browser-use. The model downloads once (348 MB, cached after that), then plays A Dark Room, an unmodified text adventure. Pick a goal like "Craft a rucksack" and the model makes every choice on the way: which button out of about 20, how to get what's missing, and how many villagers to put on it. The page only reads the game's data and waits.

Training data

Training dataStep successElement accuracy
none: Kev-0.6B (base)14.120.6
Mind2Web train, 13.8K steps29.934.8
Mind2Web train + WebChain, 4x the rows32.236.1

Mind2Web did the heavy lifting; WebChain added 2.3 points through volume. At equal size, more websites and teacher-labelled rows did not help, and the Mind2Web paper reports 30 to 32 step success for a fine-tuned 250M model and 39 to 40 for 3B, so the gap to Jev looks like model size.

Layout

eval/      build the 1,000-step eval from Mind2Web's test set, harness, one adapter per model
train/     Mind2Web and WebChain data builders, the training recipe, ONNX export for the browser
results/   every model's eval output; the table and chart are built from these
assets/    the demo GIF and the results chart

License

Apache-2.0. Built on Kev and Qwen3 (Apache-2.0). Training data: Mind2Web and WebChain, both CC BY 4.0.

browser-agent
browser-use
computer-use
jev
kev
mind2web
onnx
small-language-model
transformers-js
ui-automation
web-agents
webgpu

arbazsiddiqui/kev-browser-use

A tiny 0.6B Jev-like model fine-tuned from Kev for browser use: 32.2% step success on Mind2Web, runs in your browser on WebGPU.

Python

3

0 commits

updated Sep 23, 2026

See the code

README

kev-browser-use

A tiny 0.6B Jev-like model, fine-tuned from Kev-0.6B for browser use.

Model on Hugging Face · Web build (ONNX) · Live demo

Mind2Web step success 32.2 Base: Kev-0.6B License: Apache-2.0

A decision model for browser agents. It reads a goal and a table of the page's candidate elements, then returns which element to act on and whether to click, type or select, as probabilities, in one forward pass. It never writes text.

32.2% step success on Mind2Web, the best of any open-weights model that runs in a browser, at 80 ms per decision.

kev-0.6b-browser-use playing A Dark Room in the browser: it builds a hut after gathering wood, then crafts a rucksack after putting three more villagers to work as tanners

Results

1,000 steps from Mind2Web's test set. Each step gives a goal, the previous actions and 10 candidate elements. Every model sees the same text and the same candidates.

Element accuracy, operation accuracy and step success for every model on 1,000 Mind2Web steps
ModelSizeStep successElement accuracyOperation accuracyBrier (lower is better)p50 latency
Jev (TypeSafe, hosted API)closed43.547.982.70.73network
Kev-9B9B32.538.778.70.76428 ms
kev-0.6b-browser-use0.6B32.236.183.60.8480 ms
SemIf, frozen Qwen3.5-4B4B30.038.475.20.85289 ms
Bespoke Nimble-9B9B26.238.559.60.87979 ms
decider-2B2B24.733.062.50.87139 ms
Kev-0.6B (base)0.6B14.120.667.41.0678 ms
NanoJev0.6B4.213.116.40.92245 ms
Laya421M3.810.733.40.9840 ms
Random3.610.535.50.94
  • Step success: the correct element and the correct action in the same step, the number that matters for an agent.
  • Element accuracy: the model picked the correct UI element.
  • Operation accuracy: it chose the correct action on that element (click, type or select).
  • Brier (lower is better): how good the model's probabilities are, not just its top pick. It adds up the squared error over all 10 candidates, so it runs from 0 to 2 and hits 2 when the model is certain of a wrong element.

Latency is one decision on an NVIDIA L4. python3 eval/harness.py table builds the table from results/ and python3 eval/plot_results.py draws the chart.

Quick start

In the browser

The 4-bit web build (348 MB, WebGPU) runs with open-jev.

npm install open-jev @huggingface/transformers
import { OpenJev, choice } from "open-jev";

const kev = await OpenJev.load({ model: "arbazsiddiqui/kev-0.6b-browser-use-ONNX", dtype: "q4f16" });

const state = `Goal: Type "Alan Turing" into the search box
Candidate elements:
[0] <a> role=None "Main page"
[1] <input> role=searchbox "Search Wikipedia"
[2] <button> role=None "Search"`;

const { element, operation } = await kev.decide(state, {
  element: choice("Which element should be acted on?", [
    '[0] <a> "Main page"',
    '[1] <input> "Search Wikipedia"',
    '[2] <button> "Search"',
  ]),
  operation: choice("What operation should be performed on the target element?", ["CLICK", "TYPE", "SELECT"]),
});

element.choice;     // '[1] <input> "Search Wikipedia"', confidence 0.93
operation.choice;   // "TYPE", confidence 0.74

On a server

The full-precision checkpoint is a LoRA adapter plus a pointer head in Kev's format, served by Kev's own server.

git clone https://github.com/jaredpalmer/kev.git && cd kev && uv sync --extra serve
uv run --extra serve python -m kev.serve --run arbazsiddiqui/kev-0.6b-browser-use --port 8009
curl -s localhost:8009/v1/systemone -H 'content-type: application/json' -d '{
  "model": "kev-latest",
  "state": "Goal: Search Wikipedia for \"Alan Turing\"\nCandidate elements:\n[0] <a> role=None \"Main page\"\n[1] <input> role=searchbox \"Search Wikipedia\"\n[2] <button> role=None \"Search\"",
  "questions": {
    "element":   {"type": "choice", "instructions": "Which element should be acted on?",
                  "criteria": {"[0] <a> \"Main page\"": null, "[1] <input> \"Search Wikipedia\"": null, "[2] <button> \"Search\"": null}},
    "operation": {"type": "choice", "instructions": "What operation should be performed on the target element?",
                  "criteria": {"CLICK": null, "TYPE": null, "SELECT": null}}}}'

Both take the same text: a Goal: line, optional Previous actions:, then one line per candidate element. The model card documents the format.

Demo

Runs entirely in your browser on WebGPU: arbazsiddiqui.me/kev-browser-use. The model downloads once (348 MB, cached after that), then plays A Dark Room, an unmodified text adventure. Pick a goal like "Craft a rucksack" and the model makes every choice on the way: which button out of about 20, how to get what's missing, and how many villagers to put on it. The page only reads the game's data and waits.

Training data

Training dataStep successElement accuracy
none: Kev-0.6B (base)14.120.6
Mind2Web train, 13.8K steps29.934.8
Mind2Web train + WebChain, 4x the rows32.236.1

Mind2Web did the heavy lifting; WebChain added 2.3 points through volume. At equal size, more websites and teacher-labelled rows did not help, and the Mind2Web paper reports 30 to 32 step success for a fine-tuned 250M model and 39 to 40 for 3B, so the gap to Jev looks like model size.

Layout

eval/      build the 1,000-step eval from Mind2Web's test set, harness, one adapter per model
train/     Mind2Web and WebChain data builders, the training recipe, ONNX export for the browser
results/   every model's eval output; the table and chart are built from these
assets/    the demo GIF and the results chart

License

Apache-2.0. Built on Kev and Qwen3 (Apache-2.0). Training data: Mind2Web and WebChain, both CC BY 4.0.

browser-agent
browser-use
computer-use
jev
kev
mind2web
onnx
small-language-model
transformers-js
ui-automation
web-agents
webgpu

Significant stargazers

Lars Trieloff

142 followers · starred Oct 2026