Text Classification
Transformers
Safetensors
English
Chinese
qwen3_5_moe_text
text-generation
decision-model
web-agent
browser-agent
typed-decisions
structured-output
one-pass
mixture-of-experts
Instructions to use Lexmount/WebJev-35B-A3B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Lexmount/WebJev-35B-A3B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="Lexmount/WebJev-35B-A3B")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Lexmount/WebJev-35B-A3B") model = AutoModelForCausalLM.from_pretrained("Lexmount/WebJev-35B-A3B", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Model card: eight benchmarks, links to code, dataset and training recipe
Browse files- README.md +74 -135
- assets/benchmarks.png +0 -0
- assets/overview.png +0 -0
README.md
CHANGED
|
@@ -13,7 +13,6 @@ tags:
|
|
| 13 |
- decision-model
|
| 14 |
- web-agent
|
| 15 |
- browser-agent
|
| 16 |
-
- system-one
|
| 17 |
- typed-decisions
|
| 18 |
- structured-output
|
| 19 |
- one-pass
|
|
@@ -26,9 +25,13 @@ datasets:
|
|
| 26 |
|
| 27 |
**A one-pass decision model for web agents and structured decisions, 35B mixture of experts (3B active).**
|
| 28 |
|
| 29 |
-
WebJev
|
| 30 |
-
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
The model is built for the decision loop of browser agents:
|
| 34 |
|
|
@@ -36,48 +39,46 @@ The model is built for the decision loop of browser agents:
|
|
| 36 |
done, blocked).
|
| 37 |
- **Element grounding:** which of the page's elements to act on, among up to 255 candidates.
|
| 38 |
|
| 39 |
-
It also
|
| 40 |
-
|
| 41 |
-
The model speaks the TypeSafe *System One* wire format (`POST /v1/systemone`), so it is a drop-in decision backend for
|
| 42 |
-
agents built on Jev.
|
| 43 |
|
| 44 |
| | |
|
| 45 |
|---|---|
|
| 46 |
| Developed by | Lexmount |
|
| 47 |
-
| Model type | decision model (option scoring at answer
|
| 48 |
| Base model | [Qwen/Qwen3.5-35B-A3B-Base](https://huggingface.co/Qwen/Qwen3.5-35B-A3B-Base) |
|
| 49 |
| Parameters | 34.66B in total, about 3B active per token |
|
| 50 |
| Weights | BF16, 15 safetensors shards, 69.3 GB |
|
| 51 |
| Context | trained on inputs of up to 16,384 tokens |
|
| 52 |
| Options per question | 2–255 |
|
| 53 |
-
|
|
| 54 |
-
| Languages | English and Chinese web
|
|
|
|
|
|
|
| 55 |
| License | Lexmount internal (see [License](#license)) |
|
| 56 |
|
| 57 |
-

|
| 103 |
|
|
@@ -114,22 +116,22 @@ between the two models is well beyond it.
|
|
| 114 |
|
| 115 |
### Speed
|
| 116 |
|
| 117 |
-
Measured on one NVIDIA A100 80GB with vLLM and BF16
|
| 118 |
-
|
| 119 |
|
| 120 |
| Workload | p50 | p95 |
|
| 121 |
|---|---:|---:|
|
| 122 |
| short state, one question (claim verification) | 72 ms | 84 ms |
|
| 123 |
-
| policy
|
| 124 |
| support ticket, three questions | 228 ms | 309 ms |
|
| 125 |
-
| web page state, one decision
|
| 126 |
|
| 127 |
## How to use
|
| 128 |
|
| 129 |
### With `transformers`
|
| 130 |
|
| 131 |
-
The model needs a `transformers` version
|
| 132 |
-
at least 80 GB of memory.
|
| 133 |
|
| 134 |
```python
|
| 135 |
import json, torch
|
|
@@ -148,100 +150,52 @@ prompt = ("Context:\n" + json.dumps(state, ensure_ascii=False) +
|
|
| 148 |
"\n\nQuestion: Search SpanishDict for 'spring'. Which operation should the agent perform next?\nOptions:" +
|
| 149 |
"".join(f"\n({chr(65 + i)}) {o}" for i, o in enumerate(options)) + "\nAnswer: (")
|
| 150 |
|
| 151 |
-
|
| 152 |
with torch.no_grad():
|
| 153 |
-
logits = model(**
|
| 154 |
label_ids = [tok.encode(chr(65 + i), add_special_tokens=False)[0] for i in range(len(options))]
|
| 155 |
probs = torch.softmax(logits[label_ids].float() / 1.0, -1) # temperature from decider_config.json
|
| 156 |
print(dict(zip(options, probs.tolist())))
|
| 157 |
```
|
| 158 |
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
- `decider.systemone.render_state` and `render_question` turn the wire format into the context and question text;
|
| 162 |
-
- `plan_rows` splits a request into one scoring row per question (and per level of a score question);
|
| 163 |
-
- `decider.prompt.build` produces the exact token ids and answer slots.
|
| 164 |
-
|
| 165 |
-
Two conventions of the builder:
|
| 166 |
-
|
| 167 |
-
- Questions with more than 10 options use single-token labels `A`–`Z`, then `AA`, `AB`, and so on.
|
| 168 |
-
- Every question is scored in its own row, in the state-first layout.
|
| 169 |
|
| 170 |
### With vLLM
|
| 171 |
|
|
|
|
|
|
|
| 172 |
```bash
|
| 173 |
vllm serve Lexmount/WebJev-35B-A3B --dtype bfloat16 --max-model-len 34816 \
|
| 174 |
--logprobs-mode processed_logits --max-logprobs 256
|
| 175 |
```
|
| 176 |
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
1. Send its token ids (ending at the answer slot `Answer: (`) to `/v1/completions` with `max_tokens=1`.
|
| 180 |
-
2. Set `allowed_token_ids` to the row's option-label tokens and `logprobs` to the number of options.
|
| 181 |
-
3. Softmax the returned label logits at temperature 1.0.
|
| 182 |
-
|
| 183 |
-
### Wire format (TypeSafe System One)
|
| 184 |
-
|
| 185 |
-
Served behind a TypeSafe-compatible System One adapter, which is how Lexmount deploys it, the model accepts Jev's
|
| 186 |
-
request shape. `state` may be a string, an object or an
|
| 187 |
-
array. Question ids are never shown to the model.
|
| 188 |
-
|
| 189 |
-
```json
|
| 190 |
-
POST /v1/systemone
|
| 191 |
-
{
|
| 192 |
-
"model": "WebJev-35B-A3B",
|
| 193 |
-
"state": {"page": {"url": "https://www.spanishdict.com/", "title": "…", "text": "…"}, "elements": ["…"]},
|
| 194 |
-
"questions": {
|
| 195 |
-
"operation": {"type": "choice", "instructions": "Search SpanishDict for 'spring' …",
|
| 196 |
-
"criteria": {"CLICK": "Click an element", "TYPE_TEXT": "Type into a field", "DONE": "Goal satisfied"}},
|
| 197 |
-
"done": {"type": "noul", "instructions": "Is the search result page already open?"},
|
| 198 |
-
"relevance": {"type": "score", "instructions": "How relevant is the page to the task?",
|
| 199 |
-
"criteria": ["unrelated", "partly relevant", "exactly what the task needs"]}
|
| 200 |
-
}
|
| 201 |
-
}
|
| 202 |
-
```
|
| 203 |
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
"
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
"probabilities": {"0": 0.01, "1": 0.12, "2": 0.87},
|
| 216 |
-
"level_fit": {"0": 0.01, "1": 0.13, "2": 0.9}, "fit_mass": 1.04}
|
| 217 |
-
},
|
| 218 |
-
"usage": {"input_tokens": 1834, "output_tokens": 0}
|
| 219 |
-
}
|
| 220 |
```
|
| 221 |
|
| 222 |
-
- **Choice questions** take 2–255 options and return the top option, its probability (`confidence`), a certainty
|
| 223 |
-
score and the full distribution.
|
| 224 |
-
- **Noul questions** are yes/no questions and return the probability of *yes*.
|
| 225 |
-
- **Score questions** take 2–10 levels and return the expected level with the per-level distribution. Each level is
|
| 226 |
-
scored in its own row (`isolated_levels: true`): `level_fit` is each level's own fit probability, and the
|
| 227 |
-
probabilities normalize them.
|
| 228 |
-
|
| 229 |
## How it works
|
| 230 |
|
| 231 |
-
The input is `Context: {state}`, followed by the question, the lettered options `(A) … (B) …` and
|
| 232 |
-
`Answer: (`. At
|
| 233 |
-
normalized with a softmax over the valid labels.
|
| 234 |
-
from one forward pass. Option order is part of the input; the model was trained with shuffled options, so it
|
| 235 |
-
conditions on the candidates' content rather than their position.
|
| 236 |
-
|
| 237 |
-
`decider_config.json` stores the inference settings:
|
| 238 |
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
| `max_options` | 255 | maximum options per question |
|
| 245 |
|
| 246 |
## Model architecture
|
| 247 |
|
|
@@ -258,43 +212,24 @@ conditions on the candidates' content rather than their position.
|
|
| 258 |
|
| 259 |
## Training
|
| 260 |
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
- **Objective.** Cross-entropy over the option labels at each answer slot.
|
| 264 |
-
- **Updated parameters.** Attention, linear attention, shared experts, routers, norms, embeddings and the LM head:
|
| 265 |
-
2.45B parameters. The routed experts keep the base weights.
|
| 266 |
-
- **No reinforcement learning.**
|
| 267 |
-
|
| 268 |
-
The training mixture covers:
|
| 269 |
-
|
| 270 |
-
- **General typed decisions.** Public classification, entailment, question-answering, routing, tool-use and
|
| 271 |
-
policy-rule tasks in the System One question types (choice, noul, score), following the open Decider recipe.
|
| 272 |
-
- **Web-agent decisions.** [WebJev](https://huggingface.co/datasets/Lexmount/WebJev): 64K
|
| 273 |
-
execution-verified action-prediction and element-grounding decisions on 1,443 live websites.
|
| 274 |
-
- **Open-Jev typed decisions.** Browser control, reasoning, entity alignment, extraction and customer-support tasks.
|
| 275 |
-
- **Knowledge and science.** Multiple-choice questions from Nemotron-RL-knowledge-mcqa and OpenScienceReasoning-2.
|
| 276 |
-
- **Evidence-grounded decisions.** The Nimble training split.
|
| 277 |
-
|
| 278 |
-
Evaluation sources were excluded from training by exact and normalized matching. This covers the MMLU-Pro test set,
|
| 279 |
-
the Nimble evaluation split, the JevBench public items and the frozen evaluation contexts.
|
| 280 |
|
| 281 |
## Intended uses
|
| 282 |
|
| 283 |
**Intended uses.**
|
| 284 |
|
| 285 |
-
- The decision
|
| 286 |
- Typed decisions in software pipelines: routing, classification, extraction choices, policy and evidence checks.
|
| 287 |
Each is a question with an explicit option list.
|
| 288 |
|
| 289 |
**Out of scope.**
|
| 290 |
|
| 291 |
- Free-form generation, chat and open-ended question answering.
|
| 292 |
-
- Decisions whose options are not listed in the
|
| 293 |
|
| 294 |
**Usage notes.**
|
| 295 |
|
| 296 |
-
- **Explicit options.** WebJev decides among options listed in the request. It is not a chat or text-generation
|
| 297 |
-
model.
|
| 298 |
- **Knowledge-intensive decisions.** WebJev decides from the state, so include the relevant facts in it.
|
| 299 |
- **Confidence.** Probabilities use temperature 1.0 and rank options reliably. To act on confidence thresholds, check
|
| 300 |
calibration on your own labels.
|
|
@@ -304,9 +239,12 @@ the Nimble evaluation split, the JevBench public items and the frozen evaluation
|
|
| 304 |
## License
|
| 305 |
|
| 306 |
WebJev-35B-A3B is proprietary to Lexmount and shared privately for internal research and development; see
|
| 307 |
-
[LICENSE](LICENSE).
|
| 308 |
-
|
| 309 |
-
the Apache License 2.0
|
|
|
|
|
|
|
|
|
|
| 310 |
|
| 311 |
## Citation
|
| 312 |
|
|
@@ -315,7 +253,8 @@ the Apache License 2.0 is in [LICENSE-APACHE](LICENSE-APACHE).
|
|
| 315 |
title = {WebJev-35B-A3B: A One-Pass Decision Model for Web Agents},
|
| 316 |
author = {{Lexmount}},
|
| 317 |
year = {2026},
|
| 318 |
-
howpublished = {\url{https://huggingface.co/Lexmount/WebJev-35B-A3B}}
|
|
|
|
| 319 |
}
|
| 320 |
```
|
| 321 |
|
|
|
|
| 13 |
- decision-model
|
| 14 |
- web-agent
|
| 15 |
- browser-agent
|
|
|
|
| 16 |
- typed-decisions
|
| 17 |
- structured-output
|
| 18 |
- one-pass
|
|
|
|
| 25 |
|
| 26 |
**A one-pass decision model for web agents and structured decisions, 35B mixture of experts (3B active).**
|
| 27 |
|
| 28 |
+
[**Code**](https://github.com/lexmount/WebJev) · [**Dataset**](https://huggingface.co/datasets/Lexmount/WebJev) ·
|
| 29 |
+
[**Training**](https://github.com/lexmount/WebJev/tree/main/train)
|
| 30 |
+
|
| 31 |
+
WebJev-35B-A3B reads a *state* and a *question* with an explicit list of options, and returns a probability
|
| 32 |
+
distribution over the options. It does not generate text: each question is answered with a single forward pass that
|
| 33 |
+
reads the logits of the option labels. There is no decoding, no output parsing, and no answer outside the options you
|
| 34 |
+
list.
|
| 35 |
|
| 36 |
The model is built for the decision loop of browser agents:
|
| 37 |
|
|
|
|
| 39 |
done, blocked).
|
| 40 |
- **Element grounding:** which of the page's elements to act on, among up to 255 candidates.
|
| 41 |
|
| 42 |
+
It also handles general typed decisions: routing, classification, extraction choices, and policy and evidence
|
| 43 |
+
judgments.
|
|
|
|
|
|
|
| 44 |
|
| 45 |
| | |
|
| 46 |
|---|---|
|
| 47 |
| Developed by | Lexmount |
|
| 48 |
+
| Model type | decision model (option scoring at an answer position), sparse mixture of experts |
|
| 49 |
| Base model | [Qwen/Qwen3.5-35B-A3B-Base](https://huggingface.co/Qwen/Qwen3.5-35B-A3B-Base) |
|
| 50 |
| Parameters | 34.66B in total, about 3B active per token |
|
| 51 |
| Weights | BF16, 15 safetensors shards, 69.3 GB |
|
| 52 |
| Context | trained on inputs of up to 16,384 tokens |
|
| 53 |
| Options per question | 2–255 |
|
| 54 |
+
| Inference | `transformers`, vLLM |
|
| 55 |
+
| Languages | English instructions; English and Chinese web pages |
|
| 56 |
+
| Code | [github.com/lexmount/WebJev](https://github.com/lexmount/WebJev) |
|
| 57 |
+
| Training data | [Lexmount/WebJev](https://huggingface.co/datasets/Lexmount/WebJev) |
|
| 58 |
| License | Lexmount internal (see [License](#license)) |
|
| 59 |
|
| 60 |
+

|
| 61 |
|
| 62 |
## Highlights
|
| 63 |
|
| 64 |
- **Web agents.** Plugged into the same browser agent, WebJev-35B-A3B solves **38.5%** of 125 real-website tasks,
|
| 65 |
against **16.7%** for jev-1.13.
|
| 66 |
+
- **General decisions.** On eight structured-decision benchmarks WebJev averages **83.7%**. It leads jev-1.13 on four
|
| 67 |
+
of them: JevBench, Nimble, customer-ticket triage and multi-class classification.
|
| 68 |
+
- **One forward pass, no decoding.** Each question is answered by a single forward pass that returns a full
|
| 69 |
+
distribution over its options. The answer is always one of the options you listed.
|
|
|
|
|
|
|
| 70 |
|
| 71 |
## Evaluation
|
| 72 |
|
| 73 |
+
All numbers are measured with the released BF16 weights served by vLLM, at temperature 1.0. The jev-1.13 numbers were
|
| 74 |
+
measured through its official API on the same inputs.
|
| 75 |
|
| 76 |
+
### Eight structured-decision benchmarks
|
| 77 |
|
| 78 |
Each item gives a state and a set of candidate answers. The model's choice is correct when it equals the reference
|
| 79 |
label. The table reports accuracy.
|
| 80 |
|
| 81 |
+

|
| 82 |
|
| 83 |
| Benchmark (items) | What it measures | jev-1.13 | **WebJev-35B-A3B** |
|
| 84 |
|---|---|---:|---:|
|
|
|
|
| 90 |
| Multi-class decisions, dev (1,468) | news topic, review sentiment and stars, 77-way banking intent, question and entity type, yes/no reading comprehension, entailment, policy rules | 83.31 | **86.31** |
|
| 91 |
| MMLU-Pro, 10 options (1,000) | college-level knowledge and reasoning across subjects | **83.40** | 69.40 |
|
| 92 |
| Typed business decisions, test (2,000) | agent-trajectory stop and escalation, customer requests, invoice approval, security-alert severity; teacher labels | **74.05** | 73.90 |
|
| 93 |
+
| **Average (equal weights)** | | **84.70** | 83.72 |
|
|
|
|
| 94 |
|
| 95 |
### End-to-end web tasks
|
| 96 |
|
| 97 |
+
The model serves as the decision component of the same browser agent on 125 real-website tasks: 75 from
|
| 98 |
+
Online-Mind2Web, 26 from WebGym and 24 from WebVoyager. Each run has a budget of 900 seconds and 60 actions. A
|
| 99 |
+
deterministic grader checks the final page state and answer.
|
| 100 |
+
|
| 101 |
+
- **Success rate** = solved ÷ evaluable tasks. Tasks lost to browser infrastructure or grader errors are excluded.
|
| 102 |
+
- **Strict rate** counts all 125 tasks.
|
| 103 |
|
| 104 |

|
| 105 |
|
|
|
|
| 116 |
|
| 117 |
### Speed
|
| 118 |
|
| 119 |
+
Measured on one NVIDIA A100 80GB with vLLM and BF16. Requests are sent one at a time; latency covers all questions
|
| 120 |
+
about one state.
|
| 121 |
|
| 122 |
| Workload | p50 | p95 |
|
| 123 |
|---|---:|---:|
|
| 124 |
| short state, one question (claim verification) | 72 ms | 84 ms |
|
| 125 |
+
| policy or knowledge question (JevBench, MMLU-Pro) | 145 ms | 150–300 ms |
|
| 126 |
| support ticket, three questions | 228 ms | 309 ms |
|
| 127 |
+
| web page state, one decision | 337 ms | 755 ms |
|
| 128 |
|
| 129 |
## How to use
|
| 130 |
|
| 131 |
### With `transformers`
|
| 132 |
|
| 133 |
+
The model needs a `transformers` version with Qwen3.5 MoE support (`qwen3_5_moe_text`, 5.15 or newer) and one GPU
|
| 134 |
+
with at least 80 GB of memory.
|
| 135 |
|
| 136 |
```python
|
| 137 |
import json, torch
|
|
|
|
| 150 |
"\n\nQuestion: Search SpanishDict for 'spring'. Which operation should the agent perform next?\nOptions:" +
|
| 151 |
"".join(f"\n({chr(65 + i)}) {o}" for i, o in enumerate(options)) + "\nAnswer: (")
|
| 152 |
|
| 153 |
+
inputs = tok(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
|
| 154 |
with torch.no_grad():
|
| 155 |
+
logits = model(**inputs).logits[0, -1]
|
| 156 |
label_ids = [tok.encode(chr(65 + i), add_special_tokens=False)[0] for i in range(len(options))]
|
| 157 |
probs = torch.softmax(logits[label_ids].float() / 1.0, -1) # temperature from decider_config.json
|
| 158 |
print(dict(zip(options, probs.tolist())))
|
| 159 |
```
|
| 160 |
|
| 161 |
+
For questions with more than 10 options, labels continue as single tokens (`K` … `Z`, then `AA`, `AB`, …). Build
|
| 162 |
+
those prompts with `decider/prompt.py` from this repository, which renders every label as one token.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
|
| 164 |
### With vLLM
|
| 165 |
|
| 166 |
+
Start a server that returns the logits of the allowed tokens:
|
| 167 |
+
|
| 168 |
```bash
|
| 169 |
vllm serve Lexmount/WebJev-35B-A3B --dtype bfloat16 --max-model-len 34816 \
|
| 170 |
--logprobs-mode processed_logits --max-logprobs 256
|
| 171 |
```
|
| 172 |
|
| 173 |
+
Then score a prompt: one generated token, restricted to the option labels.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
|
| 175 |
+
```python
|
| 176 |
+
import math, requests
|
| 177 |
+
|
| 178 |
+
ids = tok(prompt, add_special_tokens=False)["input_ids"] # the prompt above, ending with "Answer: ("
|
| 179 |
+
out = requests.post("http://127.0.0.1:8000/v1/completions", json={
|
| 180 |
+
"model": "Lexmount/WebJev-35B-A3B", "prompt": ids, "max_tokens": 1, "temperature": 1.0,
|
| 181 |
+
"logprobs": len(options), "allowed_token_ids": label_ids, "return_tokens_as_token_ids": True}).json()
|
| 182 |
+
top = out["choices"][0]["logprobs"]["top_logprobs"][0] # {"token_id:<id>": logit}
|
| 183 |
+
logits = [top[f"token_id:{i}"] for i in label_ids]
|
| 184 |
+
z = [math.exp(x - max(logits)) for x in logits]
|
| 185 |
+
print(dict(zip(options, [x / sum(z) for x in z])))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 186 |
```
|
| 187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
## How it works
|
| 189 |
|
| 190 |
+
The input is `Context: {state}`, followed by the question, the lettered options `(A) … (B) …` and the answer position
|
| 191 |
+
`Answer: (`. At that position, the model's hidden state is projected onto the LM-head rows of the option labels only
|
| 192 |
+
and normalized with a softmax over the valid labels. The labels are never generated.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
|
| 194 |
+
- **Several questions about one state** are scored as separate prompts that share the state as a prefix.
|
| 195 |
+
- **Option order** is part of the input. The model was trained with shuffled options, so it conditions on the
|
| 196 |
+
candidates' content rather than their position.
|
| 197 |
+
- **Inference settings** are stored in `decider_config.json`: temperature 1.0, up to 255 options per question, state
|
| 198 |
+
before question.
|
|
|
|
| 199 |
|
| 200 |
## Model architecture
|
| 201 |
|
|
|
|
| 212 |
|
| 213 |
## Training
|
| 214 |
|
| 215 |
+
- **Recipe, data mixture and scripts:** [github.com/lexmount/WebJev/tree/main/train](https://github.com/lexmount/WebJev/tree/main/train).
|
| 216 |
+
- **Web-agent decision data:** [Lexmount/WebJev](https://huggingface.co/datasets/Lexmount/WebJev).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 217 |
|
| 218 |
## Intended uses
|
| 219 |
|
| 220 |
**Intended uses.**
|
| 221 |
|
| 222 |
+
- The decision component of browser agents: next-action prediction and element grounding.
|
| 223 |
- Typed decisions in software pipelines: routing, classification, extraction choices, policy and evidence checks.
|
| 224 |
Each is a question with an explicit option list.
|
| 225 |
|
| 226 |
**Out of scope.**
|
| 227 |
|
| 228 |
- Free-form generation, chat and open-ended question answering.
|
| 229 |
+
- Decisions whose options are not listed in the input.
|
| 230 |
|
| 231 |
**Usage notes.**
|
| 232 |
|
|
|
|
|
|
|
| 233 |
- **Knowledge-intensive decisions.** WebJev decides from the state, so include the relevant facts in it.
|
| 234 |
- **Confidence.** Probabilities use temperature 1.0 and rank options reliably. To act on confidence thresholds, check
|
| 235 |
calibration on your own labels.
|
|
|
|
| 239 |
## License
|
| 240 |
|
| 241 |
WebJev-35B-A3B is proprietary to Lexmount and shared privately for internal research and development; see
|
| 242 |
+
[LICENSE](LICENSE).
|
| 243 |
+
|
| 244 |
+
- The model is a fine-tuned derivative of Qwen3.5-35B-A3B-Base, released under the Apache License 2.0.
|
| 245 |
+
- The prompt builder in `decider/` derives from the open-source Decider package, under the same license.
|
| 246 |
+
|
| 247 |
+
A copy of the Apache License 2.0 is in [LICENSE-APACHE](LICENSE-APACHE).
|
| 248 |
|
| 249 |
## Citation
|
| 250 |
|
|
|
|
| 253 |
title = {WebJev-35B-A3B: A One-Pass Decision Model for Web Agents},
|
| 254 |
author = {{Lexmount}},
|
| 255 |
year = {2026},
|
| 256 |
+
howpublished = {\url{https://huggingface.co/Lexmount/WebJev-35B-A3B}},
|
| 257 |
+
url = {https://github.com/lexmount/WebJev}
|
| 258 |
}
|
| 259 |
```
|
| 260 |
|
assets/benchmarks.png
CHANGED
|
|
assets/overview.png
CHANGED
|
|