sxh-lexmount commited on
Commit
cab63ef
·
verified ·
1 Parent(s): 89b287f

Model card: eight benchmarks, links to code, dataset and training recipe

Browse files
Files changed (3) hide show
  1. README.md +74 -135
  2. assets/benchmarks.png +0 -0
  3. 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-35B-A3B reads a *state* and one or more *typed questions*, each with an explicit list of options. In one
30
- forward pass it returns a probability distribution over the options of every question. It does not generate text:
31
- there is no decoding, no output parsing and no answer outside the options you define.
 
 
 
 
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 serves general typed decisions: routing, classification, extraction choices, policy and evidence judgments.
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 slots), sparse mixture of experts |
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
- | Interface | `transformers`, vLLM, TypeSafe-compatible `POST /v1/systemone` |
54
- | Languages | English and Chinese web content; English instructions |
 
 
55
  | License | Lexmount internal (see [License](#license)) |
56
 
57
- ![WebJev-35B-A3B scores every typed question about a state in one forward pass](assets/overview.png)
58
 
59
  ## Highlights
60
 
61
  - **Web agents.** Plugged into the same browser agent, WebJev-35B-A3B solves **38.5%** of 125 real-website tasks,
62
  against **16.7%** for jev-1.13.
63
- - **Single-step web decisions.** **98.0%** accuracy on a 500-question web decision set, against 96.4% for jev-1.13.
64
- - **General decisions.** WebJev leads jev-1.13 on **5 of 9** structured-decision benchmarks, with an **85.3%**
65
- average. The five are JevBench, Nimble, customer-ticket triage, multi-class classification and the web decision
66
- set.
67
- - **One pass, calibrated interface.** It returns a full distribution over the options, answers every question of a
68
- request from one forward pass, and never produces an output outside the option set.
69
 
70
  ## Evaluation
71
 
72
- All numbers are measured with the released BF16 weights served by vLLM, at temperature 1.0. The jev-1.13 numbers come
73
- from the TypeSafe API on the same inputs.
74
 
75
- ### Nine structured-decision benchmarks
76
 
77
  Each item gives a state and a set of candidate answers. The model's choice is correct when it equals the reference
78
  label. The table reports accuracy.
79
 
80
- ![Accuracy of WebJev-35B-A3B and jev-1.13 on nine structured-decision benchmarks](assets/benchmarks.png)
81
 
82
  | Benchmark (items) | What it measures | jev-1.13 | **WebJev-35B-A3B** |
83
  |---|---|---:|---:|
@@ -89,15 +90,16 @@ label. The table reports accuracy.
89
  | 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** |
90
  | MMLU-Pro, 10 options (1,000) | college-level knowledge and reasoning across subjects | **83.40** | 69.40 |
91
  | Typed business decisions, test (2,000) | agent-trajectory stop and escalation, customer requests, invoice approval, security-alert severity; teacher labels | **74.05** | 73.90 |
92
- | Web decision set (500) | single-step decisions on real page snapshots of 67 English and Chinese websites: next operation, click target, input field, drop-down option | 96.40 | **98.00** |
93
- | **Average (equal weights)** | | **86.00** | 85.31 |
94
 
95
  ### End-to-end web tasks
96
 
97
- The model serves as the decision backend of the same browser agent on 125 real-website tasks: 75 from Online-Mind2Web,
98
- 26 from WebGym and 24 from WebVoyager. Each run has a budget of 900 seconds and 60 actions. A deterministic grader
99
- checks the final page state and answer. Success rate = solved ÷ evaluable tasks; tasks lost to browser infrastructure
100
- or grader errors are excluded, and the strict rate over all 125 tasks is shown too.
 
 
101
 
102
  ![End-to-end success of WebJev-35B-A3B and jev-1.13 on 125 live-website tasks](assets/liveweb.png)
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, one request at a time, with the latency of a full request
118
- (all questions of one state):
119
 
120
  | Workload | p50 | p95 |
121
  |---|---:|---:|
122
  | short state, one question (claim verification) | 72 ms | 84 ms |
123
- | policy / knowledge question (JevBench, MMLU-Pro) | 145 ms | 150–300 ms |
124
  | support ticket, three questions | 228 ms | 309 ms |
125
- | web page state, one decision (web decision set) | 337 ms | 755 ms |
126
 
127
  ## How to use
128
 
129
  ### With `transformers`
130
 
131
- The model needs a `transformers` version that supports Qwen3.5 MoE (`qwen3_5_moe_text`, 5.15 or newer) and one GPU with
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
- ids = tok(prompt, return_tensors="pt").to(model.device)
152
  with torch.no_grad():
153
- logits = model(**ids).logits[0, -1]
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
- `decider/` in this repository holds the reference prompt builder, which covers every question type:
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
- To score one row:
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
- The response answers every question; the values below are illustrative:
205
-
206
- ```json
207
- {
208
- "model": "decider-WebJev-35B-A3B",
209
- "answers": {
210
- "operation": {"type": "choice", "choice": "CLICK", "confidence": 0.97, "certainty": 0.86,
211
- "probabilities": {"CLICK": 0.97, "TYPE_TEXT": 0.02, "DONE": 0.01}},
212
- "done": {"type": "noul", "noul": 0.07},
213
- "relevance": {"type": "score", "score": 1.86, "confidence": 0.87, "certainty": 0.62,
214
- "legend": {"0": "unrelated", "1": "partly relevant", "2": "exactly what the task needs"},
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 an answer slot
232
- `Answer: (`. At the slot, the model's hidden state is projected onto the LM-head rows of the option labels only and
233
- normalized with a softmax over the valid labels. Labels are never generated, so every question of a request is read
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
- | Setting | Value | Meaning |
240
- |---|---|---|
241
- | `temperature` | 1.0 | softmax temperature |
242
- | `isolated_levels` | `true` | score questions are scored one level per row |
243
- | `schema_first` | `false` | state-first layout |
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
- WebJev-35B-A3B is a supervised fine-tune of Qwen3.5-35B-A3B-Base.
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 backend of browser agents: next-action prediction and element grounding.
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 request.
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). It is a fine-tuned derivative of Qwen3.5-35B-A3B-Base, which is released under the Apache License
308
- 2.0. The prompt builder in `decider/` derives from the open-source Decider package under the same license. A copy of
309
- the Apache License 2.0 is in [LICENSE-APACHE](LICENSE-APACHE).
 
 
 
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
+ ![WebJev-35B-A3B turns a state and typed questions into option probabilities](assets/overview.png)
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
+ ![Accuracy of WebJev-35B-A3B and jev-1.13 on eight structured-decision benchmarks](assets/benchmarks.png)
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
  ![End-to-end success of WebJev-35B-A3B and jev-1.13 on 125 live-website tasks](assets/liveweb.png)
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