kev-0.6b-browser-use

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

Pick the next browser action with a 0.6B model. Give it a goal and the page's candidate elements; it returns which element to act on and whether to click, type or select, as probabilities. It never generates text.

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

Element accuracy, operation accuracy and step success for every model on 1,000 Mind2Web steps

Model Size Step success Element accuracy Operation accuracy Brier (lower is better) p50 latency
Jev (TypeSafe, hosted API) closed 43.5 47.9 82.7 0.73 network
Kev-9B 9B 32.5 38.7 78.7 0.76 428 ms
kev-0.6b-browser-use 0.6B 32.2 36.1 83.6 0.84 80 ms
SemIf, frozen Qwen3.5-4B 4B 30.0 38.4 75.2 0.85 289 ms
Bespoke Nimble-9B 9B 26.2 38.5 59.6 0.87 979 ms
decider-2B 2B 24.7 33.0 62.5 0.87 139 ms
Kev-0.6B (base) 0.6B 14.1 20.6 67.4 1.06 78 ms
NanoJev 0.6B 4.2 13.1 16.4 0.92 245 ms
Laya 421M 3.8 10.7 33.4 0.98 40 ms
Random 3.6 10.5 35.5 0.94

1,000 steps from Mind2Web's test set, 10 candidate elements per step, same text and same candidates for every model. - 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.

Full table, harness and per-model notes: github.com/arbazsiddiqui/kev-browser-use.

Use

In the browser

The 4-bit web build, kev-0.6b-browser-use-ONNX, runs on WebGPU 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

This checkpoint is a LoRA adapter plus a pointer head in Kev's format, served by Kev's 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

Ask it about a page. Use this exact text shape, it is what the model was trained on:

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\"\n[3] <a> role=None \"Random article\"\n[4] <a> role=None \"Log in\"",
  "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, "[3] <a> \"Random article\"": null,
                               "[4] <a> \"Log in\"": null}},
    "operation": {"type": "choice", "instructions": "What operation should be performed on the target element?",
                  "criteria": {"CLICK": null, "TYPE": null, "SELECT": null}}}}'

Real response (bf16, L4): element [1] <input> "Search Wikipedia" at 0.90, operation TYPE at 0.91.

State format: Goal: line, optional Previous actions: with the last two actions as - [tag] text -> OP, then Candidate elements: with one [i] <tag> role=R "visible text" line per candidate (text cut at 60 characters). Option labels are [i] <tag> "text".

Training

  • Start: jaredpalmer/kev-0.6b (Qwen3-0.6B-Base, LoRA rank 16, pointer head).
  • Data: Mind2Web train (12,998 steps from 66 websites, each included twice with different distractors) plus 28,803 WebChain steps from 97 websites: 54,799 records, 53,037 after dropping those longer than Kev's 384-token state limit. No eval website appears in training.
  • Recipe: Kev's trainer, 2 epochs, lr 2e-5, batch 8, bf16. 106,074 records seen, 13,260 steps, 4.3 hours on one NVIDIA L4.

Acknowledgements

Built on Kev by Jared Palmer, whose model, trainer and server this uses unchanged. Trained on Mind2Web (Deng et al., 2023) and WebChain. The browser build follows the layout of onnx-community/kev-0.6b-ONNX so open-jev loads it.

License

Apache-2.0, like Kev and Qwen3. Training data: Mind2Web (CC BY 4.0, Deng et al. 2023) and WebChain (CC BY 4.0).

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for arbazsiddiqui/kev-0.6b-browser-use

Finetuned
(1)
this model
Quantizations
1 model

Datasets used to train arbazsiddiqui/kev-0.6b-browser-use

Evaluation results