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 boxCandidate 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.93operation.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 serveuv 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).