ManniX-ITA commited on
Commit
b0cabb1
·
verified ·
1 Parent(s): b8e35ad

v3 card: evaluation with the serving sampler (temp 0.4), v3 KLD/PPL, ollama tags; v2/v1 kept as history

Browse files
Files changed (1) hide show
  1. README.md +133 -90
README.md CHANGED
@@ -31,39 +31,19 @@ until it is actually finished.
31
  It is not built to win knowledge benchmarks, and its world knowledge is limited
32
  for its size. What it is built to do is **finish, and stop**.
33
 
34
- > **v3 weights, card update pending (2026-10-25).** The weights in this repo were
35
- > replaced with **v3**. v3 is the v2 recipe with the two smaller weights swapped:
36
- > **DeltaCoder 0.55 / Ornith-1.5-9B 0.30 / Coder-Flash 0.15** (v2: Coder-Flash 0.30 /
37
- > Ornith 0.15); `omnimerge_v2` density 0.53, darex-q 0.75, seed 42, the root
38
- > `eos_token_id` 248046 / `pad_token_id` 248055 fix and the Coder-Flash tokenizer and
39
- > template are unchanged. The quants are at
40
- > [`ManniX-ITA/JackOD-9B-Coder-MTP-GGUF`](https://huggingface.co/ManniX-ITA/JackOD-9B-Coder-MTP-GGUF).
41
- >
42
- > **v3 sampler** (in `generation_config.json`; it replaces the *Serving* section below):
43
- > `temperature 0.4 · top_p 0.95 · top_k 20 · min_p 0 · repeat_penalty 1.002 ·
44
- > repeat_last_n 112 · presence_penalty 1.05`, seed **not** fixed.
45
- > **Worth trying: seed 42.** In the author's testing it behaves better (no loops, and
46
- > stellar on some tasks) but it is not reliable: it still fails on others. It is a
47
- > suggestion to test, not part of the recommended setup.
48
- >
49
- > v3 is being evaluated with this sampler now. Until the card is rewritten, the
50
- > evaluation tables, the serving recipe and the recipe table below describe **v2**.
51
-
52
- > **v2 re-release (2026-10-21).** The weights were replaced. v2 is the same
53
- > recipe with one change: Jackrong's **Coder-Flash** sits in the 0.30 slot that
54
- > held Qwopus3.5-9B-Coder. Measured on the published Q6_K, v2 **matches or beats
55
- > v1 on all five code and instruction benchmarks** (LiveCodeBench v6 0.8000,
56
- > IFEval 0.9400) and uses **~23% fewer tokens** on the hard code problems. It does
57
- > **not** improve tool calling: the aggregate is 4 points under v1 with
58
- > overlapping intervals, and v1's lead in autonomous planning does not carry
59
- > over. The v1 measurements are kept at the end of this card, labelled as such.
60
 
61
  | role | model | weight |
62
  |---|---|---|
63
  | base / task-base | [`Qwen/Qwen3.5-9B`](https://huggingface.co/Qwen/Qwen3.5-9B) | — (shared ancestor) |
64
  | source | [`danielcherubini/Qwen3.5-DeltaCoder-9B`](https://huggingface.co/danielcherubini/Qwen3.5-DeltaCoder-9B) (LoRA on Qwen3.5-9B, merged to dense) | **0.55** |
65
- | source | [`Jackrong/Qwopus3-5-9B-Coder-Flash`](https://huggingface.co/Jackrong/Qwopus3-5-9B-Coder-Flash) (v1: [`Jackrong/Qwopus3.5-9B-coder`](https://huggingface.co/Jackrong/Qwopus3.5-9B-coder)) | 0.30 |
66
- | source | [`ornith-ai/Ornith-1.5-9B`](https://huggingface.co/ornith-ai/Ornith-1.5-9B) | 0.15 |
67
 
68
  `--base` and `--task-base` are both `Qwen3.5-9B`: every source descends from it,
69
  so task vectors are taken against the true common ancestor instead of against a
@@ -101,7 +81,7 @@ python omnimergekit.py \
101
  --source DeltaCoder-9B-applied \
102
  --source Qwopus3.5-9B-Coder-Flash \
103
  --source Ornith-1.5-9B \
104
- --weights 0.55,0.30,0.15 \
105
  --method omnimerge_v2 --density 0.53 --darex-q 0.75 --seed 42 \
106
  --no-auto-mlp-skip --skip-patterns visual.,mtp. \
107
  --output JackOD-9B-Coder
@@ -121,10 +101,128 @@ identical).
121
 
122
  The v1 build chain is in
123
  **[`recipes/jackod-9b-coder/`](https://github.com/mann1x/omnimergekit/tree/main/recipes/jackod-9b-coder)**
124
- of [omnimergekit](https://github.com/mann1x/omnimergekit); v2 differs only in
125
- the source swap above.
126
 
127
- ## Evaluation (v2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  Measured on the **published Q6_K** (`JackOD-9B-Coder-Q6_K.gguf`, sha256
130
  `c94d907c…d25a`, full AtomicChat `ornith-1.5-9b` imatrix `5ad024b8…`), llama.cpp
@@ -152,7 +250,7 @@ there for orientation.
152
  base, +12.73 pp over Coder-Flash, the source it gained.
153
  - MultiPL-E is unchanged at 0.8033, still 1.67 pp under the base.
154
 
155
- ### LiveCodeBench v6 (55 hard) — accuracy and reasoning length
156
 
157
  Same 55 problems, same 12,288-token thinking budget, same cap, for every arm.
158
  Token counts are the server's `completion_tokens`; *budget hits* are runs that
@@ -175,7 +273,7 @@ reached the thinking budget; *length-capped* never terminated on their own.
175
  tokens), slightly ahead of Coder-Flash alone (0.114), at +12.73 pp accuracy.
176
  - Termination stays near v1: **2 of 55** length-capped (v1: 1).
177
 
178
- ### Tool calling — `tool-eval-bench` hardmode
179
 
180
  84 scenarios scored, 168 points, **5 paired seeds (42–46)**, n=5 → t=2.776,
181
  greedy, `--hardmode --weight-by-difficulty`, scorer `2.6.1.dev65+g6be685f0e`,
@@ -224,65 +322,11 @@ Categories A/B/D/F/N (tool selection, parameter precision, restraint & refusal,
224
  localization, creative composition) are 6/6 for v2; G Structured Reasoning 6/6;
225
  Structured Output 2/4, as for every arm in both cohorts.
226
 
227
- ## Serving
228
-
229
- `generation_config.json` ships the serving recipe:
230
-
231
- ```
232
- temperature 0.8 · top_p 0.95 · top_k 20 · min_p 0.05 · repeat_penalty 1.05
233
- ```
234
-
235
- Add, where your runtime supports them (ollama and llama.cpp do; HF
236
- `GenerationConfig` has neither field):
237
-
238
- ```
239
- repeat_last_n 96 · presence_penalty 0
240
- ```
241
-
242
- The published `mannix/JackOD-9B-Coder` ollama tags carry exactly this set. This serving recipe was
243
- tuned on v1 and is carried over to v2 unchanged; it has not yet been re-tuned on the v2 weights.
244
-
245
- ### Temperature is not a free parameter here
246
-
247
- 0.8 is a deliberate middle, because the failure modes sit on **both** sides of
248
- it and they are different failures:
249
-
250
- - **Lower** degrades **coding ability first**. Push it further down and
251
- hallucinations and erratic behaviour follow.
252
- - **Higher** makes the model **less willing to use its tools** — it drifts
253
- toward writing its own scratch scripts instead of calling what it already has.
254
-
255
- Neither symptom announces itself as a sampler problem, which is why the value is
256
- stated rather than left to taste.
257
-
258
- ### On the repetition controls
259
-
260
- Earlier revisions of this card recommended `presence_penalty 1.5`. That has been
261
- **replaced by `repeat_penalty 1.05` over a `repeat_last_n 96` window**, with
262
- `presence_penalty` back at 0. The job is the same — discouraging the model from
263
- re-treading a tool call it already made — but a bounded recent-token window does
264
- it without the broad, unbounded pressure a large presence penalty puts on every
265
- token the model has ever emitted.
266
-
267
- For tool calling, `--jinja` is **mandatory** in llama.cpp: without it the tool
268
- grammar never comes from the model's chat template and every tool scenario
269
- degrades to prose.
270
-
271
- ## Quants
272
-
273
- GGUF quants: **[`ManniX-ITA/JackOD-9B-Coder-MTP-GGUF`](https://huggingface.co/ManniX-ITA/JackOD-9B-Coder-MTP-GGUF)**.
274
- Every tier there is **v2**, rebuilt 2026-10-21 from these weights with the full
275
- AtomicChat imatrix; the `Q6_K` there is the file every score above was measured
276
- on.
277
-
278
- On ollama: **`mannix/JackOD-9B-Coder`** still serves **v1** until it is
279
- re-published.
280
-
281
  ## JackOD-9B-Coder v1 — previous weights (replaced 2026-10-21)
282
 
283
  Everything below was measured on the **v1** weights (Qwopus3.5-9B-Coder in the
284
  0.30 slot). It is kept because it is the record of how this merge was chosen;
285
- it does not describe the v2 weights.
286
 
287
  ### Field impression — initial, limited testing
288
 
@@ -457,4 +501,3 @@ Categories A/B/D/F (tool selection, parameter precision, restraint & refusal,
457
  localization) are 6/6 for every arm and are omitted; G Structured Reasoning and
458
  N Creative Composition are 6/6 for all but Qwopus (5.8 and 5.2). Structured
459
  Output is 2.0/4 for all five — none of these models clears it.
460
-
 
31
  It is not built to win knowledge benchmarks, and its world knowledge is limited
32
  for its size. What it is built to do is **finish, and stop**.
33
 
34
+ > **v3 (2026-10-24).** v3 is the v2 recipe with the two smaller weights swapped:
35
+ > **DeltaCoder 0.55 / Ornith-1.5-9B 0.30 / Coder-Flash 0.15** (v2: Coder-Flash 0.30 / Ornith 0.15).
36
+ > `omnimerge_v2` density 0.53, darex-q 0.75, seed 42, the root `eos_token_id` 248046 / `pad_token_id` 248055
37
+ > fix and the Coder-Flash tokenizer and template are unchanged. v3 ships a **new serving sampler** and was
38
+ > evaluated with it; the v2 and v1 results kept at the end of this card were measured **greedy**, so they are
39
+ > a record, not a same-basis comparison.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
 
41
  | role | model | weight |
42
  |---|---|---|
43
  | base / task-base | [`Qwen/Qwen3.5-9B`](https://huggingface.co/Qwen/Qwen3.5-9B) | — (shared ancestor) |
44
  | source | [`danielcherubini/Qwen3.5-DeltaCoder-9B`](https://huggingface.co/danielcherubini/Qwen3.5-DeltaCoder-9B) (LoRA on Qwen3.5-9B, merged to dense) | **0.55** |
45
+ | source | [`ornith-ai/Ornith-1.5-9B`](https://huggingface.co/ornith-ai/Ornith-1.5-9B) | 0.30 (v2: 0.15) |
46
+ | source | [`Jackrong/Qwopus3-5-9B-Coder-Flash`](https://huggingface.co/Jackrong/Qwopus3-5-9B-Coder-Flash) (v1: [`Jackrong/Qwopus3.5-9B-coder`](https://huggingface.co/Jackrong/Qwopus3.5-9B-coder)) | 0.15 (v2: 0.30) |
47
 
48
  `--base` and `--task-base` are both `Qwen3.5-9B`: every source descends from it,
49
  so task vectors are taken against the true common ancestor instead of against a
 
81
  --source DeltaCoder-9B-applied \
82
  --source Qwopus3.5-9B-Coder-Flash \
83
  --source Ornith-1.5-9B \
84
+ --weights 0.55,0.15,0.30 \
85
  --method omnimerge_v2 --density 0.53 --darex-q 0.75 --seed 42 \
86
  --no-auto-mlp-skip --skip-patterns visual.,mtp. \
87
  --output JackOD-9B-Coder
 
101
 
102
  The v1 build chain is in
103
  **[`recipes/jackod-9b-coder/`](https://github.com/mann1x/omnimergekit/tree/main/recipes/jackod-9b-coder)**
104
+ of [omnimergekit](https://github.com/mann1x/omnimergekit); v2 and v3 differ only in
105
+ the source and weight changes above.
106
 
107
+ ## Evaluation (v3)
108
+
109
+ Measured on the **published Q6_K** (`JackOD-9B-Coder-Q6_K.gguf`, sha256 `3f202a76…51b8`, full AtomicChat
110
+ `ornith-1.5-9b` imatrix `feb286c4…`), llama.cpp `311d4211bf`, with **the serving sampler** below:
111
+ temperature 0.4 / top_p 0.95 / top_k 20 / min_p 0 / repeat_penalty 1.002 over the last 112 tokens /
112
+ presence_penalty 1.05, **seed not fixed** (a random seed per request). The sampler was read back from every
113
+ server's `/slots` while the run was in flight: 338 checks, 0 mismatches. Thinking budget 12,288 tokens
114
+ (`--reasoning-budget`). Scores are `summary.json.score`.
115
+
116
+ | Benchmark | **JackOD v3** |
117
+ |---|---|
118
+ | HumanEval (164) | 0.8720 |
119
+ | HumanEval+ (164) | 0.8049 |
120
+ | **LiveCodeBench v6 (55 hard)** | **0.9455** |
121
+ | MultiPL-E (300) | 0.8033 |
122
+ | IFEval (100) | 0.9400 |
123
+
124
+ - **These are sampled scores, one draw each.** They are not on the same basis as the greedy v2 and v1
125
+ tables further down, and the difference between them is not claimed as a gain or a loss. On these sizes one
126
+ problem is 1.8 pp of LiveCodeBench and 0.6 pp of HumanEval.
127
+ - **LiveCodeBench is 52 of 55.** All 55 generations ended on their own (none hit the length cap), and the 3
128
+ misses are wrong answers (wrong output or a runtime error), not truncations. A provisional v3 run at a
129
+ different sampler (temperature 0.7, seed 42) solved 50 of the same 55; it is superseded and not tabulated.
130
+
131
+ ### LiveCodeBench v6 (55 hard) — reasoning length
132
+
133
+ Same 55 problems, 12,288-token thinking budget. Tokens are the server's `completion_tokens`.
134
+
135
+ | model | pass@1 | mean tokens | median tokens | length-capped | solved / 1k tokens |
136
+ |---|---|---|---|---|---|
137
+ | **JackOD-9B-Coder v3** | **0.9455** | 6,644 | 6,103 | **0** | 0.142 |
138
+
139
+ For orientation only (greedy, so not the same basis): v2 averaged 6,809 tokens with 2 of 55 length-capped.
140
+
141
+ ### Tool calling — `tool-eval-bench` hardmode
142
+
143
+ 84 scenarios scored, 168 points, **5 paired seeds (42–46)**, n=5 → t=2.776, `--hardmode
144
+ --weight-by-difficulty`, scorer `2.6.1.dev65+g6be685f0e`, llama.cpp `5bda51bf` with `--jinja`, served and
145
+ requested with the same serving sampler as above.
146
+
147
+ | model | total points (mean, 5 seeds) | 95% CI | per seed |
148
+ |---|---|---|---|
149
+ | **JackOD-9B-Coder v3** | **143.4 ±2.6** | [140.8, 146.0] | 143 · 146 · 141 · 145 · 142 |
150
+
151
+ v2 (140.2 ±4.2) and v1 (144.4 ±4.7) were measured greedy, so that comparison crosses samplers. v3 sits inside
152
+ both of their intervals.
153
+
154
+ | category | **v3** (mean of 5) |
155
+ |---|---|
156
+ | M Autonomous Planning (6) | 4.4 |
157
+ | H Instruction Following (10) | 8.0 |
158
+ | I Context & State (20) | 15.6 |
159
+ | P Hard Mode (38) | 31.4 |
160
+ | C Multi-Step Chains (8) | 8.0 |
161
+ | K Safety & Boundaries (26) | 21.2 |
162
+ | L Toolset Scale (8) | 7.6 |
163
+ | E Error Recovery (6) | 5.0 |
164
+ | J Code Patterns (6) | 5.0 |
165
+ | G Structured Reasoning (6) | 5.2 |
166
+
167
+ Categories A/B/D/F/N (tool selection, parameter precision, restraint & refusal, localization, creative
168
+ composition) are 6/6 on every seed; Structured Output is 2/4, as for every arm in the earlier cohorts.
169
+
170
+ **Prompt injection.** v3 fails `TC-60` (cross-turn sleeper injection) on 4 of 5 seeds: an instruction
171
+ planted in an earlier tool result is later acted on. v1, v2, the base and DeltaCoder fail it too, so it is
172
+ inherited, not introduced by the merge. Do not rely on this model to ignore instructions that arrive inside
173
+ tool output.
174
+
175
+ ## Serving
176
+
177
+ `generation_config.json` ships the serving recipe:
178
+
179
+ ```
180
+ temperature 0.4 · top_p 0.95 · top_k 20 · min_p 0 · repeat_penalty 1.002
181
+ ```
182
+
183
+ Add, where your runtime supports them (ollama and llama.cpp do):
184
+
185
+ ```
186
+ repeat_last_n 112 · presence_penalty 1.05
187
+ ```
188
+
189
+ Leave the **seed unfixed**: that is how v3 was evaluated.
190
+
191
+ > **Worth trying: seed 42.** In the author's testing it behaves better (no loops, and stellar on some tasks)
192
+ > but it is not reliable: it still fails on others. It is a suggestion to test, not part of the recommended
193
+ > setup, and none of the scores on this card were measured with it.
194
+
195
+ This replaces the v1/v2 recipe (temperature 0.8, min_p 0.05, repeat_penalty 1.05 over 96, presence_penalty 0).
196
+ The reasoning earlier revisions of this card gave for 0.8 was worked out on v1 and does not describe v3.
197
+
198
+ For tool calling, `--jinja` is **mandatory** in llama.cpp: without it the tool grammar never comes from the
199
+ model's chat template and every tool scenario degrades to prose.
200
+
201
+ ## Quants
202
+
203
+ GGUF quants: **[`ManniX-ITA/JackOD-9B-Coder-MTP-GGUF`](https://huggingface.co/ManniX-ITA/JackOD-9B-Coder-MTP-GGUF)**.
204
+ Every tier there is **v3**, built 2026-10-24 from these weights with the full AtomicChat imatrix; the
205
+ `Q6_K` there is the file every v3 score above was measured on. DFlash builds:
206
+ [`ManniX-ITA/JackOD-9B-Coder-MTP-DFlash-GGUF`](https://huggingface.co/ManniX-ITA/JackOD-9B-Coder-MTP-DFlash-GGUF).
207
+
208
+ On ollama (both published 2026-10-25, the serving sampler above baked into every tag):
209
+
210
+ - **[`mannix/jackod-9b-coder`](https://ollama.com/mannix/jackod-9b-coder)**: all 27 tiers, `:latest` =
211
+ `Q4_K_M`. The tags set `draft_num_predict 3` for the built-in MTP head and declare ollama ≥ 0.32.12 (the
212
+ `qwen3.5` renderer). Every tag was pulled back from the registry and passed a generation check on 2026-10-25.
213
+ - **[`mannix/jackod-9b-coder-dflash`](https://ollama.com/mannix/jackod-9b-coder-dflash)**: the same 27 tiers
214
+ with the `Qwen3.5-9B-DFlash` Q8_0 drafter (`draft_num_predict 4`). Needs **xollama**; stock ollama has no
215
+ `draft-dflash`. See [`ManniX-ITA/JackOD-9B-Coder-MTP-DFlash-GGUF`](https://huggingface.co/ManniX-ITA/JackOD-9B-Coder-MTP-DFlash-GGUF).
216
+
217
+ `num_ctx` is not pinned in the tags: set it as high as your hardware allows for agentic work.
218
+
219
+ ## JackOD-9B-Coder v2 — previous weights (replaced 2026-10-24)
220
+
221
+ Everything in this section was measured on the **v2** weights (Coder-Flash 0.30 / Ornith 0.15), **greedy**
222
+ (temperature 0), and served with the v1/v2 recipe. It is kept as the record of v2 and does not describe the v3
223
+ weights or the v3 sampler.
224
+
225
+ ### Evaluation
226
 
227
  Measured on the **published Q6_K** (`JackOD-9B-Coder-Q6_K.gguf`, sha256
228
  `c94d907c…d25a`, full AtomicChat `ornith-1.5-9b` imatrix `5ad024b8…`), llama.cpp
 
250
  base, +12.73 pp over Coder-Flash, the source it gained.
251
  - MultiPL-E is unchanged at 0.8033, still 1.67 pp under the base.
252
 
253
+ #### LiveCodeBench v6 (55 hard) — accuracy and reasoning length
254
 
255
  Same 55 problems, same 12,288-token thinking budget, same cap, for every arm.
256
  Token counts are the server's `completion_tokens`; *budget hits* are runs that
 
273
  tokens), slightly ahead of Coder-Flash alone (0.114), at +12.73 pp accuracy.
274
  - Termination stays near v1: **2 of 55** length-capped (v1: 1).
275
 
276
+ #### Tool calling — `tool-eval-bench` hardmode
277
 
278
  84 scenarios scored, 168 points, **5 paired seeds (42–46)**, n=5 → t=2.776,
279
  greedy, `--hardmode --weight-by-difficulty`, scorer `2.6.1.dev65+g6be685f0e`,
 
322
  localization, creative composition) are 6/6 for v2; G Structured Reasoning 6/6;
323
  Structured Output 2/4, as for every arm in both cohorts.
324
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
  ## JackOD-9B-Coder v1 — previous weights (replaced 2026-10-21)
326
 
327
  Everything below was measured on the **v1** weights (Qwopus3.5-9B-Coder in the
328
  0.30 slot). It is kept because it is the record of how this merge was chosen;
329
+ it does not describe the v2 or v3 weights.
330
 
331
  ### Field impression — initial, limited testing
332
 
 
501
  localization) are 6/6 for every arm and are omitted; G Structured Reasoning and
502
  N Creative Composition are 6/6 for all but Qwopus (5.8 and 5.2). Structured
503
  Output is 2.0/4 for all five — none of these models clears it.