Instructions to use HopitAI/hopper with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use HopitAI/hopper with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-4B") model = PeftModel.from_pretrained(base_model, "HopitAI/hopper") - Notebooks
- Google Colab
- Kaggle
Card: overview, models table and quick start; 4B details below; JevBench v1.5.5 standing
Browse files
README.md
CHANGED
|
@@ -30,16 +30,66 @@ datasets:
|
|
| 30 |
|
| 31 |
# Hopper
|
| 32 |
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
> Serve it with the code at [github.com/hopit-ai/hopper](https://github.com/hopit-ai/hopper) (tag `12b-1.1.0`):
|
| 38 |
-
> `hopper-serve --base-loader gemma-4-12b-it --adapter HopitAI/hopper@4b605f25eb903c2cf4d121040ffb097240b3bc37`
|
| 39 |
-
> plus its readout map (see that branch's card). The files on this `main` branch are the original 4B Hopper
|
| 40 |
-
> described below.
|
| 41 |
|
| 42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
Hopper is a LoRA adapter (rank 16) for
|
| 45 |
[`Qwen/Qwen3.5-4B`](https://huggingface.co/Qwen/Qwen3.5-4B) at revision
|
|
@@ -64,31 +114,14 @@ question go in, and a probability distribution over a fixed set of options comes
|
|
| 64 |
HTTP server with the JevBench `/v1/systemone` wire format. At load it merges the adapter into the
|
| 65 |
bf16 weights, and it refuses to start if the fast linear-attention kernels are not active.
|
| 66 |
|
| 67 |
-
|
| 68 |
-
only, because of the RACE training-data terms described above and under "Training data". The base
|
| 69 |
-
model is Apache-2.0 ([licence](https://huggingface.co/Qwen/Qwen3.5-4B/blob/main/LICENSE)), and this
|
| 70 |
-
adapter does not change its terms.
|
| 71 |
-
|
| 72 |
-
## Leaderboards (official)
|
| 73 |
-
|
| 74 |
-
- **[JevBench](https://benchmarkheaven.com/jev-models)**: **59.43, #7** in v1.4.2.2 (27 Sep 2026), measured by the
|
| 75 |
-
maintainer on adapter 1.0.0: Intelligence 48.0, Calibration 79.1, Speed 86.8, Cost 58.7. Accuracy is 82.3 % on the
|
| 76 |
-
public items and 34.1 % on the maintainer's sealed set.
|
| 77 |
-
- **[Jev Decision Index](https://huggingface.co/spaces/multimodalart/jev-decision-index)**: Hopper 1.1.1 scored
|
| 78 |
-
36.71, #12 of 49 (edition 0.2, 25 Sep 2026), then 39.67, #19 of 67 (edition 0.2.1). Its row has since been replaced by
|
| 79 |
-
[Hopper (G) 1.2](https://huggingface.co/HopitAI/hopper-g), the general-purpose line served with the same code,
|
| 80 |
-
at 40.77. A newer build, Hopper (G) 1.3, is published in the same repository.
|
| 81 |
-
|
| 82 |
-
Both boards change as entrants are added; the live pages are authoritative.
|
| 83 |
-
|
| 84 |
-
## Intended use
|
| 85 |
|
| 86 |
Hopper makes single-step policy decisions over a short document: yes/no (`noul`), choice among
|
| 87 |
named options, and ordinal scores. It returns calibrated probabilities, and it is meant to be run
|
| 88 |
and measured on JevBench. It is not a chat model. It is also not meant for decisions with legal,
|
| 89 |
medical, financial or safety consequences unless a person reviews them.
|
| 90 |
|
| 91 |
-
## Prompt format
|
| 92 |
|
| 93 |
The chat template of Qwen3.5-4B is applied with `enable_thinking=False` and a generation prompt.
|
| 94 |
|
|
@@ -102,7 +135,7 @@ The readout is the next-token logits at the end of the prompt, restricted to the
|
|
| 102 |
then a softmax, then the calibration map. `hopper_decisions/request.py` and `prompt.py` in the code
|
| 103 |
repository build this prompt exactly.
|
| 104 |
|
| 105 |
-
## How to load it
|
| 106 |
|
| 107 |
The easiest way to serve it is with the package (`pip install` the code repository, see its README):
|
| 108 |
|
|
@@ -139,7 +172,7 @@ to run at full speed. Without them, transformers silently falls back to a path t
|
|
| 139 |
10x slower. The pinned versions are `torch==2.8.0`, `transformers==5.17.0`, `peft==0.21.0` and
|
| 140 |
`accelerate==1.15.0`.
|
| 141 |
|
| 142 |
-
## Training data
|
| 143 |
|
| 144 |
The adapter was trained on a mix of three sources:
|
| 145 |
|
|
@@ -169,7 +202,7 @@ The adapter was trained on a mix of three sources:
|
|
| 169 |
The calibration map was fitted only on our own held-out JevBench-style items — the same fitting
|
| 170 |
set in 1.1.0 as in 1.0.0, with the 66 leakage-flagged items dropped. It never saw a JevBench item.
|
| 171 |
|
| 172 |
-
## Evaluation
|
| 173 |
|
| 174 |
**These are local numbers, not official JevBench results.** They were computed with our own
|
| 175 |
evaluation path on the 231 public JevBench items (argmax over the exact label set, with ties
|
|
@@ -217,10 +250,21 @@ not on this fold.
|
|
| 217 |
- Expect the held-out hard items to score below the public ones, and expect the judge tier, which
|
| 218 |
we have never seen, to be the least predictable part.
|
| 219 |
|
| 220 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
|
| 222 |
-
The adapter answers by reading one letter per option, so a single forward pass can
|
| 223 |
-
options. From release 1.1.1 of the serving code (github.com/hopit-ai/hopper, tag v1.1.1), a choice
|
| 224 |
question with more options is answered in two disclosed stages, using this same adapter and map:
|
| 225 |
|
| 226 |
1. **First stage.** By default a *tournament*: the menu is dealt with a fixed seed into
|
|
@@ -248,7 +292,7 @@ frozen base model within sampling error. On BANKING77 the served top choice is o
|
|
| 248 |
top probability 0.78 against 0.67 accuracy). The 5 % residual is a default, not yet refitted to
|
| 249 |
held-out long menus. Research and demo use only, as for the rest of this card.
|
| 250 |
|
| 251 |
-
## Limitations
|
| 252 |
|
| 253 |
- **One pass of a 4B model.** Hopper does not reason step by step. Any problem that needs a chain
|
| 254 |
of intermediate results is decided in one forward pass by Qwen3.5-4B.
|
|
|
|
| 30 |
|
| 31 |
# Hopper
|
| 32 |
|
| 33 |
+
Hopper models make single-pass decisions: a document, a policy and a question go in, and a probability for every
|
| 34 |
+
allowed option comes out. One forward pass per decision; no text is generated. They are served by
|
| 35 |
+
[github.com/hopit-ai/hopper](https://github.com/hopit-ai/hopper), an HTTP server that speaks the
|
| 36 |
+
[JevBench](https://github.com/fstandhartinger/jevbench) `/v1/systemone` wire format.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
+
## Models in this repository
|
| 39 |
+
|
| 40 |
+
| Model | Where | Base model | Adapter | Licence | Status |
|
| 41 |
+
| --- | --- | --- | --- | --- | --- |
|
| 42 |
+
| **Hopper (4B)** | `main` (this page) | [`Qwen/Qwen3.5-4B`](https://huggingface.co/Qwen/Qwen3.5-4B) @ `851bf6e` | LoRA rank 16 | research and demo use only¹ | [JevBench](https://benchmarkheaven.com/jev-models) **67.5, #16** (v1.5.5, 2 Oct 2026) |
|
| 43 |
+
| **Hopper 12B (trained)** | branch [`hopper-12b`](https://huggingface.co/HopitAI/hopper/tree/hopper-12b) @ `4b605f2` | [`google/gemma-4-12B-it`](https://huggingface.co/google/gemma-4-12B-it) @ `707f0a3` | LoRA rank 32, served unmerged | Apache-2.0 | requested on JevBench ([issue #164](https://github.com/fstandhartinger/jevbench/issues/164)) |
|
| 44 |
+
|
| 45 |
+
¹ The 4B adapter's training data included passages from RACE, which is released for non-commercial research only.
|
| 46 |
+
Do not use it commercially. See [Licence and research-only notice](#licence-and-research-only-notice).
|
| 47 |
+
|
| 48 |
+
The general-purpose line, Hopper (G), lives at [`HopitAI/hopper-g`](https://huggingface.co/HopitAI/hopper-g).
|
| 49 |
+
|
| 50 |
+
## Quick start
|
| 51 |
+
|
| 52 |
+
### Hopper 12B (trained)
|
| 53 |
+
|
| 54 |
+
```sh
|
| 55 |
+
pip install "git+https://github.com/hopit-ai/hopper@12b-1.1.0"
|
| 56 |
+
hopper-serve --base-loader gemma-4-12b-it \
|
| 57 |
+
--adapter HopitAI/hopper@4b605f25eb903c2cf4d121040ffb097240b3bc37 \
|
| 58 |
+
--readout-map "$(python -c 'import hopper_decisions, pathlib; print(pathlib.Path(hopper_decisions.__file__).parent / "maps/hopper-12b-trained-readout.json")')" \
|
| 59 |
+
--port 8080
|
| 60 |
+
```
|
| 61 |
+
|
| 62 |
+
Always pin the revision: `HopitAI/hopper` without one resolves to `main`, the Qwen3.5-4B adapter, which does not fit
|
| 63 |
+
this base. Files, checksums, training data and licence are on the
|
| 64 |
+
[`hopper-12b` branch's model card](https://huggingface.co/HopitAI/hopper/blob/hopper-12b/README.md).
|
| 65 |
+
|
| 66 |
+
### Hopper (4B)
|
| 67 |
+
|
| 68 |
+
Install the serving code from [github.com/hopit-ai/hopper](https://github.com/hopit-ai/hopper) as its README
|
| 69 |
+
describes (with the pinned kernel packages listed under [How to load it](#how-to-load-it)), then:
|
| 70 |
+
|
| 71 |
+
```sh
|
| 72 |
+
hopper-serve --adapter HopitAI/hopper --port 8080
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
For the Python API and for loading with transformers and peft directly, see [How to load it](#how-to-load-it).
|
| 76 |
+
|
| 77 |
+
## Hopper (4B) details
|
| 78 |
+
|
| 79 |
+
### Licence and research-only notice
|
| 80 |
+
|
| 81 |
+
> **Research and demo use only.** This adapter is published for research and demonstration. Its training data
|
| 82 |
+
> included passages from RACE (via the `cais/mmlu` auxiliary set), which its authors release for non-commercial
|
| 83 |
+
> research only and whose terms extend to derived data. Do not use this adapter commercially. Hopper 12B (trained),
|
| 84 |
+
> on branch [`hopper-12b`](https://huggingface.co/HopitAI/hopper/tree/hopper-12b), was trained without these passages
|
| 85 |
+
> and is Apache-2.0.
|
| 86 |
+
|
| 87 |
+
The serving code is licensed Apache-2.0. The adapter weights are offered for research and demo use
|
| 88 |
+
only, because of the RACE training-data terms described above and under "Training data". The base
|
| 89 |
+
model is Apache-2.0 ([licence](https://huggingface.co/Qwen/Qwen3.5-4B/blob/main/LICENSE)), and this
|
| 90 |
+
adapter does not change its terms.
|
| 91 |
+
|
| 92 |
+
### How it works
|
| 93 |
|
| 94 |
Hopper is a LoRA adapter (rank 16) for
|
| 95 |
[`Qwen/Qwen3.5-4B`](https://huggingface.co/Qwen/Qwen3.5-4B) at revision
|
|
|
|
| 114 |
HTTP server with the JevBench `/v1/systemone` wire format. At load it merges the adapter into the
|
| 115 |
bf16 weights, and it refuses to start if the fast linear-attention kernels are not active.
|
| 116 |
|
| 117 |
+
### Intended use
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
|
| 119 |
Hopper makes single-step policy decisions over a short document: yes/no (`noul`), choice among
|
| 120 |
named options, and ordinal scores. It returns calibrated probabilities, and it is meant to be run
|
| 121 |
and measured on JevBench. It is not a chat model. It is also not meant for decisions with legal,
|
| 122 |
medical, financial or safety consequences unless a person reviews them.
|
| 123 |
|
| 124 |
+
### Prompt format
|
| 125 |
|
| 126 |
The chat template of Qwen3.5-4B is applied with `enable_thinking=False` and a generation prompt.
|
| 127 |
|
|
|
|
| 135 |
then a softmax, then the calibration map. `hopper_decisions/request.py` and `prompt.py` in the code
|
| 136 |
repository build this prompt exactly.
|
| 137 |
|
| 138 |
+
### How to load it
|
| 139 |
|
| 140 |
The easiest way to serve it is with the package (`pip install` the code repository, see its README):
|
| 141 |
|
|
|
|
| 172 |
10x slower. The pinned versions are `torch==2.8.0`, `transformers==5.17.0`, `peft==0.21.0` and
|
| 173 |
`accelerate==1.15.0`.
|
| 174 |
|
| 175 |
+
### Training data
|
| 176 |
|
| 177 |
The adapter was trained on a mix of three sources:
|
| 178 |
|
|
|
|
| 202 |
The calibration map was fitted only on our own held-out JevBench-style items — the same fitting
|
| 203 |
set in 1.1.0 as in 1.0.0, with the 66 leakage-flagged items dropped. It never saw a JevBench item.
|
| 204 |
|
| 205 |
+
### Evaluation
|
| 206 |
|
| 207 |
**These are local numbers, not official JevBench results.** They were computed with our own
|
| 208 |
evaluation path on the 231 public JevBench items (argmax over the exact label set, with ties
|
|
|
|
| 250 |
- Expect the held-out hard items to score below the public ones, and expect the judge tier, which
|
| 251 |
we have never seen, to be the least predictable part.
|
| 252 |
|
| 253 |
+
### Leaderboards
|
| 254 |
+
|
| 255 |
+
- **[JevBench](https://benchmarkheaven.com/jev-models)**: **67.5, #16** in v1.5.5 (2 Oct 2026), measured on adapter
|
| 256 |
+
1.0.0: Intelligence 49.9, Calibration 87.9, Speed 87.2, Cost 62.3.
|
| 257 |
+
- **[Jev Decision Index](https://huggingface.co/spaces/multimodalart/jev-decision-index)**: Hopper 1.1.1 scored
|
| 258 |
+
36.71, #12 of 49 (edition 0.2, 25 Sep 2026), then 39.67, #19 of 67 (edition 0.2.1). Its row has since been replaced by
|
| 259 |
+
[Hopper (G) 1.2](https://huggingface.co/HopitAI/hopper-g), the general-purpose line served with the same code,
|
| 260 |
+
at 40.77. A newer build, Hopper (G) 1.3, is published in the same repository.
|
| 261 |
+
|
| 262 |
+
Both boards change as entrants are added; the live pages are authoritative.
|
| 263 |
+
|
| 264 |
+
### Long menus (more than 26 options)
|
| 265 |
|
| 266 |
+
The adapter answers by reading one letter per option, so a single forward pass can
|
| 267 |
+
weigh at most 26 options. From release 1.1.1 of the serving code (github.com/hopit-ai/hopper, tag v1.1.1), a choice
|
| 268 |
question with more options is answered in two disclosed stages, using this same adapter and map:
|
| 269 |
|
| 270 |
1. **First stage.** By default a *tournament*: the menu is dealt with a fixed seed into
|
|
|
|
| 292 |
top probability 0.78 against 0.67 accuracy). The 5 % residual is a default, not yet refitted to
|
| 293 |
held-out long menus. Research and demo use only, as for the rest of this card.
|
| 294 |
|
| 295 |
+
### Limitations
|
| 296 |
|
| 297 |
- **One pass of a 4B model.** Hopper does not reason step by step. Any problem that needs a chain
|
| 298 |
of intermediate results is decided in one forward pass by Qwen3.5-4B.
|