Image-Text-to-Text
PEFT
Safetensors
English
Chinese
decision-model
judgment
classification
vision-language
jev
systemone
qwen3.5
lora
vev
Eval Results (legacy)
Instructions to use CountingSheep/vev-9b-lora with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use CountingSheep/vev-9b-lora with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
Card: new positioning, image example, trust section
Browse files
README.md
CHANGED
|
@@ -6,7 +6,7 @@ library_name: peft
|
|
| 6 |
pipeline_tag: image-text-to-text
|
| 7 |
language: [en, zh]
|
| 8 |
datasets: [CountingSheep/vev-anchor-v3]
|
| 9 |
-
tags: [judgment, classification,
|
| 10 |
model-index:
|
| 11 |
- name: vev-9b-lora
|
| 12 |
results:
|
|
@@ -35,28 +35,39 @@ model-index:
|
|
| 35 |
|
| 36 |
# vev-9b-lora
|
| 37 |
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
[
|
| 42 |
-
[
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
```bash
|
| 58 |
pip install git+https://github.com/Xiaooolong/vev typesafe-sdk
|
| 59 |
-
vev serve --model CountingSheep/vev-9b-lora
|
| 60 |
```
|
| 61 |
|
| 62 |
```python
|
|
@@ -65,27 +76,48 @@ from typesafe_sdk import Choice, Noul, TypeSafeClient
|
|
| 65 |
client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8009")
|
| 66 |
resp = client.system_one(
|
| 67 |
state="Order #4411 still shows 'label created' after 9 days. I need it before Friday.",
|
| 68 |
-
questions={
|
| 69 |
-
"urgent": Noul(instructions="Is the customer asking for something time-sensitive?"),
|
| 70 |
-
"team": Choice(instructions="Which team should handle this?",
|
| 71 |
-
criteria={"shipping": "Delivery and tracking", "billing": "Charges and refunds"}),
|
| 72 |
-
},
|
| 73 |
)
|
| 74 |
-
print(resp.answers["urgent"].noul
|
| 75 |
```
|
| 76 |
|
| 77 |
-
`Noul` is the API's name for a yes/no question
|
| 78 |
-
|
| 79 |
-
[spec/systemone-api.md](https://github.com/Xiaooolong/vev/blob/main/spec/systemone-api.md).
|
| 80 |
|
| 81 |
-
|
| 82 |
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
|
| 90 |
The adapter was trained on the inner model (`full.model`), and its files are in `adapter/`:
|
| 91 |
|
|
@@ -100,79 +132,34 @@ adapter = os.path.join(snapshot_download("CountingSheep/vev-9b-lora"), "adapter"
|
|
| 100 |
full.model = PeftModel.from_pretrained(full.model, adapter).merge_and_unload()
|
| 101 |
```
|
| 102 |
|
| 103 |
-
This gives the model only. Vev reads
|
| 104 |
-
|
| 105 |
-
[spec/systemone-api.md, section
|
| 106 |
10](https://github.com/Xiaooolong/vev/blob/main/spec/systemone-api.md#10-how-answers-are-computed).
|
| 107 |
|
| 108 |
-
## Evaluation
|
| 109 |
-
|
| 110 |
-
Accuracy on full sets with the harness in the code repository. The zero-shot column is the base model read the same
|
| 111 |
-
way without fine-tuning. [Jev](https://typesafe.ai/blog/introducing-system-one-models-and-jev) is TypeSafe's hosted
|
| 112 |
-
judgment model, queried through its API (`jev-latest`, 23–24 September 2026); no Jev outputs were used for
|
| 113 |
-
training. [kev-4B](https://github.com/jaredpalmer/kev) is an open judgment model on a 4B Qwen base, run locally
|
| 114 |
-
with the same harness. The text sets are [judgekit](https://github.com/lexingtonhibiki/judgekit) (Chinese),
|
| 115 |
-
[JevBench](https://github.com/fstandhartinger/jevbench) (public subset),
|
| 116 |
-
[nimble](https://github.com/bespokelabsai/nimble) and kev's own held-out test set, transfer-v4.
|
| 117 |
-
|
| 118 |
-
| Set | n | Qwen3.5-9B zero-shot | vev-9b-lora | kev-4B | Jev |
|
| 119 |
-
|---|---|---|---|---|---|
|
| 120 |
-
| judgekit (Chinese) | 130 | 0.938 | 0.938 | 0.846 | 0.962 |
|
| 121 |
-
| JevBench (public subset) | 231 | 0.805 | 0.823 | 0.719 | 0.861 |
|
| 122 |
-
| nimble | 324 | 0.710 | 0.747 | 0.735 | 0.923 |
|
| 123 |
-
| kev transfer-v4 | 1528 | 0.764 | 0.781 | 0.802 | 0.854 |
|
| 124 |
-
|
| 125 |
-
| Set | n | Qwen3.5-9B zero-shot | vev-9b-lora |
|
| 126 |
-
|---|---|---|---|
|
| 127 |
-
| MMBench-EN | 1164 | 0.887 | 0.902 |
|
| 128 |
-
| POPE | 9000 | 0.894 | 0.897 |
|
| 129 |
-
| MMStar | 1498 | 0.608 | 0.674 |
|
| 130 |
-
| policy_mod: violates this safety policy? (LlavaGuard) | 659 | 0.666 | 0.724 |
|
| 131 |
-
| game_glitch: screenshot contains a glitch? (VideoGameQA-Bench) | 1000 | 0.577 | 0.626 |
|
| 132 |
-
| game_clip: object clips into character? (VideoGameQA-Bench) | 686 | 0.736 | 0.729 |
|
| 133 |
-
| ui_toggle: switch on / off? (MobileViews) | 800 | 0.921 | 0.923 |
|
| 134 |
-
| ui_input: text input field present? (MobileViews) | 800 | 0.948 | 0.955 |
|
| 135 |
-
| t2i_elem: generated image shows the prompt element? (EvalMuse) | 1027 | 0.733 | 0.703 |
|
| 136 |
-
|
| 137 |
-
The last six rows are judgment sets we converted from human-labelled public data; they are not established
|
| 138 |
-
benchmarks. Brier score and calibration error for every set are in `results/` in the code repository; significance
|
| 139 |
-
tests against the base model, kev-4B and Jev are in its README.
|
| 140 |
-
|
| 141 |
-
Reversing the order of the options changes the top answer on 13% of JevBench and kev transfer-v4 questions (kev-4B:
|
| 142 |
-
10–12%, Jev: under 4%).
|
| 143 |
-
|
| 144 |
-
## Limitations
|
| 145 |
-
|
| 146 |
-
- Jev is significantly more accurate on nimble and kev transfer-v4 (by 18 and 7 points).
|
| 147 |
-
- Answers depend on option order more than kev-4B's and Jev's do (rates above).
|
| 148 |
-
- Judgments that need several reasoning steps are weaker than the base model's own answer when it may think first
|
| 149 |
-
(4–8 points on one internal scenario set).
|
| 150 |
-
- On "is something wrong here?" questions the model flags problems less often than the labels do.
|
| 151 |
-
- The output format matches `/v1/systemone`; the behaviour is not Jev's. Vev is not affiliated with TypeSafe.
|
| 152 |
-
|
| 153 |
## Training
|
| 154 |
|
| 155 |
-
LoRA rank 16 on
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
[CountingSheep/vev-anchor-v3](https://huggingface.co/datasets/CountingSheep/vev-anchor-v3).
|
| 159 |
-
|
| 160 |
-
[TRAINING.md](https://github.com/Xiaooolong/vev/blob/main/TRAINING.md).
|
| 161 |
|
| 162 |
## License
|
| 163 |
|
| 164 |
-
CC BY-NC 4.0
|
| 165 |
-
|
| 166 |
-
|
|
|
|
|
|
|
| 167 |
|
| 168 |
## Citation
|
| 169 |
|
| 170 |
```bibtex
|
| 171 |
@software{vev2026,
|
| 172 |
-
title = {Vev:
|
| 173 |
author = {Wang, Xiaolong},
|
| 174 |
year = {2026},
|
| 175 |
url = {https://github.com/Xiaooolong/vev},
|
| 176 |
-
version = {0.1.
|
| 177 |
}
|
| 178 |
```
|
|
|
|
| 6 |
pipeline_tag: image-text-to-text
|
| 7 |
language: [en, zh]
|
| 8 |
datasets: [CountingSheep/vev-anchor-v3]
|
| 9 |
+
tags: [decision-model, judgment, classification, vision-language, jev, systemone, vev]
|
| 10 |
model-index:
|
| 11 |
- name: vev-9b-lora
|
| 12 |
results:
|
|
|
|
| 35 |
|
| 36 |
# vev-9b-lora
|
| 37 |
|
| 38 |
+
**Jev-like decision models that can also see images.** Ask yes/no, multiple-choice or graded questions about a
|
| 39 |
+
piece of text, a JSON record or a screenshot, and get a probability for every allowed answer in one forward pass.
|
| 40 |
+
Vev serves the same request format as TypeSafe's
|
| 41 |
+
[Jev](https://typesafe.ai/blog/introducing-system-one-models-and-jev) (`/v1/systemone`), and runs on your own GPU.
|
| 42 |
+
Code, API and full results: [Xiaooolong/vev](https://github.com/Xiaooolong/vev).
|
| 43 |
+
|
| 44 |
+
This repository holds the LoRA adapter of [CountingSheep/vev-9b](https://huggingface.co/CountingSheep/vev-9b) (170
|
| 45 |
+
MB). `vev serve` applies it to [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B) at load time, so it is the
|
| 46 |
+
smaller download if you already have the base model.
|
| 47 |
+
|
| 48 |
+
<img src="https://raw.githubusercontent.com/Xiaooolong/vev/main/docs/checkout.png" width="520" alt="A checkout page with a red banner: Payment failed: your card was declined.">
|
| 49 |
+
|
| 50 |
+
```python
|
| 51 |
+
questions = {
|
| 52 |
+
"error": Noul(instructions="Does the screen show an error message?"),
|
| 53 |
+
"step": Choice(instructions="Which checkout step is the user on?",
|
| 54 |
+
criteria={"shipping": None, "payment": None, "review": None}),
|
| 55 |
+
"next": Choice(instructions="What should the user do next?",
|
| 56 |
+
criteria={"retry": "Try another card", "wait": "Wait for the order to ship",
|
| 57 |
+
"nothing": "Nothing, the order went through"}),
|
| 58 |
+
}
|
| 59 |
+
# vev-9b-lora: error 0.984
|
| 60 |
+
# step {"shipping": 0.002, "payment": 0.974, "review": 0.024}
|
| 61 |
+
# next {"retry": 0.992, "wait": 0.001, "nothing": 0.006}
|
| 62 |
+
```
|
| 63 |
+
|
| 64 |
+
v0.1 is a research preview, released for non-commercial use under CC BY-NC 4.0.
|
| 65 |
+
|
| 66 |
+
## Use it
|
| 67 |
|
| 68 |
```bash
|
| 69 |
pip install git+https://github.com/Xiaooolong/vev typesafe-sdk
|
| 70 |
+
vev serve --model CountingSheep/vev-9b-lora # add --revision v0.1.0 to pin this release
|
| 71 |
```
|
| 72 |
|
| 73 |
```python
|
|
|
|
| 76 |
client = TypeSafeClient(api_key="local", base_url="http://127.0.0.1:8009")
|
| 77 |
resp = client.system_one(
|
| 78 |
state="Order #4411 still shows 'label created' after 9 days. I need it before Friday.",
|
| 79 |
+
questions={"urgent": Noul(instructions="Is the customer asking for something time-sensitive?")},
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
)
|
| 81 |
+
print(resp.answers["urgent"].noul)
|
| 82 |
```
|
| 83 |
|
| 84 |
+
`Noul` is the API's name for a yes/no question. Images go into the state as `{"image": {"url":
|
| 85 |
+
"data:image/png;base64,..."}}`. Needs an NVIDIA GPU with about 19 GB of free memory.
|
|
|
|
| 86 |
|
| 87 |
+
## What it can do
|
| 88 |
|
| 89 |
+
Accuracy on human-labelled data, by the kind of question:
|
| 90 |
+
|
| 91 |
+
| Kind of question | Example | vev-9b-lora |
|
| 92 |
+
|---|---|---|
|
| 93 |
+
| Jev-style decisions on text | JevBench public subset | 0.823 |
|
| 94 |
+
| The same, on sources the model has not seen | kev transfer-v4 | 0.781 |
|
| 95 |
+
| Chinese | judgekit | 0.938 |
|
| 96 |
+
| Pairs where a small change flips the answer | nimble | 0.747 |
|
| 97 |
+
| UI state in an app screenshot | "Is there a switch or checkbox that is turned on?" / "Is there a text input field?" | 0.923 / 0.955 |
|
| 98 |
+
| An image against a written safety policy | the LlavaGuard policy categories | 0.724 |
|
| 99 |
+
| A generated image against its prompt | "Does the image show the element 'grass' as the prompt describes?" | 0.703 |
|
| 100 |
+
| General questions about a photo | MMBench-EN / POPE / MMStar | 0.902 / 0.897 / 0.674 |
|
| 101 |
+
| Bugs in game screenshots | glitch / object clipping (VideoGameQA-Bench) | 0.626 / 0.729 |
|
| 102 |
+
|
| 103 |
+
The text rows are public benchmarks; the image rows are judgment sets converted from labelled public data. Check it
|
| 104 |
+
on a labelled sample of your own questions before relying on it. Significance tests and the comparison with the
|
| 105 |
+
base model are in the [GitHub README](https://github.com/Xiaooolong/vev#detailed-results).
|
| 106 |
|
| 107 |
+
## How far to trust it
|
| 108 |
+
|
| 109 |
+
- Jev is more accurate on nimble (by 18 points) and kev transfer-v4 (7); JevBench and judgekit are not
|
| 110 |
+
significantly different.
|
| 111 |
+
- The probabilities rank answers well but are not exact frequencies: expected calibration error is 0.01–0.14
|
| 112 |
+
depending on the task. Choose any threshold on your own labelled data.
|
| 113 |
+
- Reversing the order of the options changes the top answer on 13% of JevBench and kev transfer-v4 questions (Jev:
|
| 114 |
+
under 4%).
|
| 115 |
+
- Asked together with other questions, a question's probabilities move by up to a few hundredths (p99 0.025).
|
| 116 |
+
- Judgments that need several steps of reasoning are weaker than the base model's own answer when it may think
|
| 117 |
+
first. On "is something wrong here?" questions the model answers "no" more often than the labels do.
|
| 118 |
+
- Vev is not affiliated with TypeSafe; it matches Jev's API, not its behaviour.
|
| 119 |
+
|
| 120 |
+
## Load the weights directly
|
| 121 |
|
| 122 |
The adapter was trained on the inner model (`full.model`), and its files are in `adapter/`:
|
| 123 |
|
|
|
|
| 132 |
full.model = PeftModel.from_pretrained(full.model, adapter).merge_and_unload()
|
| 133 |
```
|
| 134 |
|
| 135 |
+
This gives the model only. Vev reads the next-token probabilities of the answer tokens (Yes/No, option letters,
|
| 136 |
+
level digits) at the end of a fixed prompt, described in [spec/systemone-api.md, section
|
|
|
|
| 137 |
10](https://github.com/Xiaooolong/vev/blob/main/spec/systemone-api.md#10-how-answers-are-computed).
|
| 138 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
## Training
|
| 140 |
|
| 141 |
+
LoRA rank 16 on the language model of Qwen/Qwen3.5-9B, vision tower frozen; 2,500 steps on 100,000 records from 42
|
| 142 |
+
public English and Chinese text and image datasets, with a KL term towards the base model on training rows and on
|
| 143 |
+
the 10,123 unlabeled rows of
|
| 144 |
+
[CountingSheep/vev-anchor-v3](https://huggingface.co/datasets/CountingSheep/vev-anchor-v3). Recipe, library
|
| 145 |
+
versions and data sources: [TRAINING.md](https://github.com/Xiaooolong/vev/blob/main/TRAINING.md).
|
|
|
|
| 146 |
|
| 147 |
## License
|
| 148 |
|
| 149 |
+
CC BY-NC 4.0, non-commercial use only, because some training data is licensed for research use (sources and terms
|
| 150 |
+
in TRAINING.md). The base model is Apache 2.0; its license is included as `LICENSE-Qwen`.
|
| 151 |
+
|
| 152 |
+
All Vev models and data:
|
| 153 |
+
[collection](https://huggingface.co/collections/CountingSheep/vev-6abd3e17303828e10c49dc65).
|
| 154 |
|
| 155 |
## Citation
|
| 156 |
|
| 157 |
```bibtex
|
| 158 |
@software{vev2026,
|
| 159 |
+
title = {Vev: Jev-like decision models that can also see images},
|
| 160 |
author = {Wang, Xiaolong},
|
| 161 |
year = {2026},
|
| 162 |
url = {https://github.com/Xiaooolong/vev},
|
| 163 |
+
version = {0.1.1}
|
| 164 |
}
|
| 165 |
```
|