CountingSheep commited on
Commit
4cec9e6
·
verified ·
1 Parent(s): 5a5665f

Card: new positioning, image example, trust section

Browse files
Files changed (1) hide show
  1. README.md +81 -94
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, calibration, vision-language, system-one, vev]
10
  model-index:
11
  - name: vev-9b-lora
12
  results:
@@ -35,28 +35,39 @@ model-index:
35
 
36
  # vev-9b-lora
37
 
38
- Vev is a judgment model with open weights. Given a state (text, JSON, images, or a mix) and typed questions
39
- (yes/no, multiple choice, graded score), it returns a probability for every allowed answer in one forward pass,
40
- without generating text. `vev-9b-lora` is the LoRA adapter of
41
- [CountingSheep/vev-9b](https://huggingface.co/CountingSheep/vev-9b), a fine-tune of
42
- [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B). This repository holds the adapter only; `vev serve`
43
- downloads the base model and applies the adapter at load time. The `vev` server exposes it through an HTTP API with
44
- the same request and response format as TypeSafe's `/v1/systemone`.
45
-
46
- This is v0.1, a research preview, released for non-commercial use under CC BY-NC 4.0. Code:
47
- [Xiaooolong/vev](https://github.com/Xiaooolong/vev). All models of this release:
48
- [vev-4b](https://huggingface.co/CountingSheep/vev-4b) ·
49
- [vev-4b-lora](https://huggingface.co/CountingSheep/vev-4b-lora) ·
50
- [vev-9b](https://huggingface.co/CountingSheep/vev-9b) ·
51
- [vev-9b-lora](https://huggingface.co/CountingSheep/vev-9b-lora); training anchor data:
52
- [CountingSheep/vev-anchor-v3](https://huggingface.co/datasets/CountingSheep/vev-anchor-v3);
53
- [collection](https://huggingface.co/collections/CountingSheep/vev-v01-6abd3e17303828e10c49dc65).
54
-
55
- ## Usage
 
 
 
 
 
 
 
 
 
 
 
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, resp.answers["team"].probabilities)
75
  ```
76
 
77
- `Noul` is the API's name for a yes/no question; `.noul` is the probability of "yes". Images go into the state as
78
- `{"image": {"url": "data:image/png;base64,..."}}`. The API is specified in
79
- [spec/systemone-api.md](https://github.com/Xiaooolong/vev/blob/main/spec/systemone-api.md).
80
 
81
- To pin this version, download the tagged revision and serve the local copy:
82
 
83
- ```bash
84
- hf download CountingSheep/vev-9b-lora --revision v0.1.0 --local-dir vev-9b-lora-v0.1.0
85
- vev serve --model vev-9b-lora-v0.1.0
86
- ```
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
- ### Loading without the server
 
 
 
 
 
 
 
 
 
 
 
 
 
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 its answers from the next-token probabilities of the answer tokens (Yes/No,
104
- option letters, level digits) at the end of a fixed prompt; the prompt template and the readout are described in
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 all linear layers of the language model, vision tower frozen; 2,500 steps on 100,000 records
156
- sampled from a mixture of 42 public text and image datasets (English and Chinese), with a KL term that keeps the
157
- answer distribution close to the base model's on training rows and on the 10,123 unlabeled rows of
158
- [CountingSheep/vev-anchor-v3](https://huggingface.co/datasets/CountingSheep/vev-anchor-v3). One NVIDIA H800. The
159
- exact recipe, library versions and the list of sources with their licenses are in
160
- [TRAINING.md](https://github.com/Xiaooolong/vev/blob/main/TRAINING.md).
161
 
162
  ## License
163
 
164
- CC BY-NC 4.0. Six of the training sources are research-only or non-commercial and eleven have no clear license for
165
- their data; this license does not replace their terms. The base model, Qwen/Qwen3.5-9B, is licensed under the
166
- Apache License 2.0, included here as `LICENSE-Qwen`.
 
 
167
 
168
  ## Citation
169
 
170
  ```bibtex
171
  @software{vev2026,
172
- title = {Vev: an open-weight judgment model for text and images},
173
  author = {Wang, Xiaolong},
174
  year = {2026},
175
  url = {https://github.com/Xiaooolong/vev},
176
- version = {0.1.0}
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
  ```