File size: 17,799 Bytes
a7dba5e
 
 
 
 
4d0cffa
 
 
b78a22f
1e02fcf
4d0cffa
1e02fcf
 
 
4d0cffa
1e02fcf
4d0cffa
 
 
 
1e02fcf
a7dba5e
 
4d0cffa
b7b4715
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
c542d94
4d0cffa
c542d94
4d0cffa
 
 
 
c542d94
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
ff56f21
4d0cffa
1e02fcf
4d0cffa
 
 
 
 
a7dba5e
4d0cffa
 
 
 
 
 
 
 
 
 
 
a7dba5e
4d0cffa
a7dba5e
4d0cffa
 
 
 
 
 
 
a7dba5e
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
 
 
a7dba5e
1e02fcf
 
 
 
a7dba5e
4d0cffa
 
c542d94
a7dba5e
4d0cffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e02fcf
4d0cffa
1e02fcf
 
 
 
4d0cffa
 
 
1e02fcf
4d0cffa
 
1e02fcf
 
 
 
 
 
 
 
4d0cffa
c542d94
a7dba5e
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a7dba5e
4d0cffa
a7dba5e
4d0cffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e02fcf
4d0cffa
 
a7dba5e
4d0cffa
a7dba5e
4d0cffa
 
 
 
 
 
 
a7dba5e
4d0cffa
a7dba5e
4d0cffa
a7dba5e
4d0cffa
e723243
4d0cffa
 
 
 
 
 
e723243
4d0cffa
e723243
4d0cffa
 
 
e723243
4d0cffa
e723243
4d0cffa
a7dba5e
4d0cffa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
---
base_model: bottlecapai/ThinkingCap-Qwen3.8-27B
base_model_relation: quantized
library_name: ninfer
pipeline_tag: text-generation
license: other
license_name: polyform-small-business-1.0.0
license_link: LICENSE
tags:
  - qwen3_8
  - ninfer
  - blackwell
  - sm120a
  - mtp
  - speculative-decoding
  - indexed88
  - vocabulary-prune
  - coding
  - agentic
  - nvfp4
  - text-generation
---

# ThinkingCap Qwen3.8-27B for NInfer — 135K Indexed88 & 147K V1

> **Current release: ThinkingCap 135K / Indexed88 v6.4 R2.** The original 147,590-vocabulary V1 is preserved as a separate, frozen release.

NInfer-format exports of [bottlecapai/ThinkingCap-Qwen3.8-27B](https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B), derived from [Qwen/Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B). These releases target specialized coding and agent-style workloads using NVIDIA Blackwell hardware.

**Important:** A `.ninfer` file is **not** a GGUF, Safetensors, or standard Hugging Face Transformers checkpoint. Use the matching [NInfer runtime](https://github.com/Xtravaganz/ninfer). This repository contains *model artifacts*, not a downloadable Docker image.

## Release overview

| Release | Public tokenizer | Physical rows | MTP proposal rows | Runtime | Status |
| --- | ---: | ---: | ---: | --- | --- |
| **135K Indexed88 v6.4 R2** | **135,000** | **135,168** | **88,064** | Indexed88 direct Q8, MTP5 | Current release; local deployment image labeled `canary` |
| **Combined 147K V1** | 147,590 | 147,712 | 131,072 | Original V1 MTP5 | Frozen / historically production validated |

**Do not mix** the model, tokenizer, physical-vocabulary layout, selection IDs, or runtime release across these versions. The `R2` suffix of the 135K release denotes the *Indexed88 ranking/release revision*; it does **not** mean the experimental R2 row-ID-hoisting kernel.

## 135K Indexed88 v6.4 R2 — current release

### Artifacts

| Item | Repository path |
| --- | --- |
| NInfer model | [`indexed88-v6.4-135k-r2/thinkingcap-135000-q8-repack.ninfer`](./indexed88-v6.4-135k-r2/thinkingcap-135000-q8-repack.ninfer) |
| Sorted selected token IDs | [`indexed88-v6.4-135k-r2/selected_88064_135k_v64_40_R2.i32le`](./indexed88-v6.4-135k-r2/selected_88064_135k_v64_40_R2.i32le) |
| Sharp chat template | [`indexed88-v6.4-135k-r2/qwen3_8_sharp.jinja`](./indexed88-v6.4-135k-r2/qwen3_8_sharp.jinja) |
| SHA-256 checksums | [`indexed88-v6.4-135k-r2/SHA256SUMS`](./indexed88-v6.4-135k-r2/SHA256SUMS) |
| Release manifest | [`indexed88-v6.4-135k-r2/RELEASE.json`](./indexed88-v6.4-135k-r2/RELEASE.json) |

| Property | 135K value |
| --- | --- |
| Public vocabulary size | 135,000 |
| Physical vocabulary rows | 135,168 |
| Physical Q8 MTP output head | 135,168 × 5,120; Q8 G32 with FP16 scales |
| Indexed proposal rows | 88,064 (original physical token IDs, not a second tokenizer) |
| Model artifact size | 15,820,439,556 bytes (≈14.73 GiB) |
| Ranking SHA-256 | `b578828c0b517ba47abe90a130fda7cde5a56d94add1afeac7623e7c8f6234b4` |
| Sharp Jinja SHA-256 | `cdff39fb26b60dc90faa292e726655c6b21f62db497846e02e4c4bbab942a84a` |
| Model SHA-256 | **See uploaded `SHA256SUMS` and `RELEASE.json`**; no unchecked digest is asserted here |
| Hugging Face upload | [Commit `1e02fcfe5bdd2658be3067e11c4df6b684d5cabe`](https://huggingface.co/Schestex/ThinkingCap-Qwen3.8-27B-NInfer/commit/1e02fcfe5bdd2658be3067e11c4df6b684d5cabe) |

The published model file is a distribution copy of the locally named `thinkingcap-135000-q8-repack-EXPERIMENTAL.ninfer`. Its Q8 output head is **one part** of the stored model; the filename does not mean that every layer uses Q8.

### Why Indexed88?

The MTP proposal projection uses **one physical Q8 output head**. It projects only the 88,064 selected vocabulary rows, performs argmax in the selected space, and remaps proposals to the original token IDs. There is **no second full MTP-head projection** in the authoritative direct path.

The original model vocabulary remains 135,000 public tokens. **88,064 is a proposal-selection size, not the tokenizer size.** The proposal subset is a coverage/performance trade-off and may not contain every token that the full model can produce.

### Vocabulary specialization: English, German, and code

The project aims to progressively specialize the model toward **English, German, programming syntax, structured formats, and coding/agent tasks**.

The current 135K vocabulary is an intermediate milestone. It still retains some tokens associated with other European languages. Rather than applying a single radical multilingual cut, vocabulary reduction proceeds in carefully checked stages, protecting special tokens, tokenizer dependencies, code-related tokens, and practical behavior. Each successive cut is intended to be validated before the next one.

The **long-term direction** is an increasingly focused English + German + code-oriented vocabulary. That is **a goal, not a claim that all other-language tokens have already been removed**. Vocabulary membership is not the same as a model's knowledge: reducing token coverage does not prove that multilingual knowledge was erased from the transformer weights, nor does it guarantee language quality.

Other languages may still function, but multilingual coverage is not the primary optimization target and can change across releases. English and German are the main intended human languages, and specialized coding/agent use is the main workload focus; this is not a formal language-quality benchmark.

### Download and checksum verification

Install the [Hugging Face CLI](https://huggingface.co/docs/huggingface_hub/guides/cli) if needed and download the complete release directory:

```bash
hf download Schestex/ThinkingCap-Qwen3.8-27B-NInfer \
  --include 'indexed88-v6.4-135k-r2/*' \
  --local-dir ./thinkingcap-ninfer

cd thinkingcap-ninfer/indexed88-v6.4-135k-r2
sha256sum --check SHA256SUMS
```

This verifies the model file, ranked ID file, and template against the manifest produced during local release staging.

### Compatible NInfer source and build

The 135K Indexed88 runtime is maintained separately at [Xtravaganz/ninfer](https://github.com/Xtravaganz/ninfer). The matching release tag is:

`thinkingcap-indexed88-v6.4-135k-r2`

[GitHub source at the release tag](https://github.com/Xtravaganz/ninfer/tree/thinkingcap-indexed88-v6.4-135k-r2) · [GitHub release page](https://github.com/Xtravaganz/ninfer/releases/tag/thinkingcap-indexed88-v6.4-135k-r2)

The release tag and GitHub Release page were checked as publicly accessible on November 1, 2026. Generic upstream NInfer builds may not recognize this 135K Indexed88 format.

Tested environment: Linux x86-64, NVIDIA RTX PRO 4000 Blackwell (24 GB), CUDA 13.3, `sm_120a`, Release build. Other GPUs/toolkits may require changes and have not been validated here.

Example source build (after the tag has been published):

```bash
git clone https://github.com/Xtravaganz/ninfer.git
cd ninfer
git checkout thinkingcap-indexed88-v6.4-135k-r2
cmake -S . -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_CUDA_ARCHITECTURES=120a \
  -DCMAKE_CUDA_COMPILER=/usr/local/cuda-13.3/bin/nvcc
cmake --build build --target ninfer-serve --parallel 6
```

This release's cleaned source snapshot compiled successfully and produced the expected Indexed88 Q8 **R0 reference kernel** resource signature: **80 registers/thread, 17,920 B shared memory/CTA, and zero reported local memory**. The isolated release-build `ninfer-serve` executable SHA-256 was:

`b826e03375e41e73ba9417f51097f42f4e79886c1bb357aeea096e5a43ce3446`

The local container tag `thinkingcap-v1:indexed88-v6.4-135k-r2` is **not a published image download**. Its recorded status label is `canary`. The cleaned release binary was compiled after source cleanup; the end-to-end benchmark described below was obtained with an earlier, separately isolated R0 build. The hashes are not claimed to be identical.

### Example: single-head Indexed88 MTP5 server

Run these commands from a directory containing the downloaded `indexed88-v6.4-135k-r2/` folder, with the compiled `ninfer-serve` path adjusted as appropriate:

```bash
export NINFER_MTP_INDEXED_SHADOW=1
export NINFER_MTP_INDEXED_MODE=indexed96
export NINFER_MTP_INDEXED_RANKING="$(realpath indexed88-v6.4-135k-r2/selected_88064_135k_v64_40_R2.i32le)"
# CUDA_VISIBLE_DEVICES may be set to select a physical GPU;
# --device 0 then means the first visible GPU.

./build/apps/ninfer-serve \
  "$(realpath indexed88-v6.4-135k-r2/thinkingcap-135000-q8-repack.ninfer)" \
  --host 127.0.0.1 --port 8080 \
  --model-id thinkingcap-135k-indexed88 \
  --device 0 \
  --spec mtp --draft-tokens 5 \
  --kv-dtype nvfp4 \
  --max-context 8192 --kv-capacity 8192 \
  --max-concurrency 1 --prefill-chunk 512 \
  --preserve-thinking \
  --chat-template "$(realpath indexed88-v6.4-135k-r2/qwen3_8_sharp.jinja)"
```

The environment variable `NINFER_MTP_INDEXED_SHADOW=1` is a historical enable switch. **`NINFER_MTP_INDEXED_MODE=indexed96` selects the direct, single-projection path** in this release, even though `indexed96` is the legacy internal mode name for a selection of **88,064 rows**. Do not set the mode to `shadow` for the single-head configuration. No additional Q5/Q6 proposal head is required.

A small deterministic HTTP smoke test:

```bash
curl http://127.0.0.1:8080/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"thinkingcap-135k-indexed88","messages":[{"role":"user","content":"Write a minimal Python hello-world example."}],"temperature":0,"max_tokens":96}'
```

### Indexed88 MTP5 validation

An isolated comparison ran R0 (the release reference kernel) against experimental R2 (row-ID hoisting) and R3 (hoisting plus altered minimum-block occupancy), using the **same** 135K model, 88,064-ID ranking, Sharp template, NVFP4 KV cache, GPU1, and five draft tokens. R2/R3 are **not part of this published R0 release**.

Each variant generated three consecutive requests of 3,500 output tokens (10,500 tokens per variant). Response hashes matched across variants at corresponding turns, as did draft/accepted counts.

| Kernel | Turn 1 tok/s | Turn 2 tok/s | Turn 3 tok/s | Steady turns 2+3 tok/s | Draft acceptance |
| --- | ---: | ---: | ---: | ---: | ---: |
| **R0 / released kernel baseline** | **95.34** | **94.75** | **90.44** | **92.55** | **55.33%** |
| R2 / experimental | 95.19 | 94.66 | 90.42 | 92.49 | 55.33% |
| R3 / experimental | 95.30 | 94.80 | 90.43 | 92.56 | 55.33% |

These are observed wall-clock generation throughputs for a particular test, not generalized model speeds, independent capability scores, or proof of a production-equivalent binary. R0 and R3 were effectively tied end-to-end despite R3's higher kernel occupancy. The acceptance rate changed across turns; it should not be interpreted as a universal acceptance rate for prompts or contexts.

## 147K original V1 — frozen historical release

The earlier model remains separately available at [`combined-147590/`](./combined-147590/). Its **147,590 public / 147,712 physical tokens** and **131,072 proposal rows** are independent of the 135K release. V1 was converted directly from the BF16 source checkpoint rather than requantized from another `.ninfer` file.

### Exact V1 artifact

```text
combined-147590/thinkingcap-v1-upstream-d48dx3p5-oattndx6-ogdndx1-igdndx1-iattndx1-g64dx1-mtpgateupdx15p40-combined-147590.ninfer
```

| Field | V1 value |
| --- | --- |
| File size | 16,308,912,900 bytes / 15.19 GiB |
| Model SHA-256 | `d030303f73b658399810a1be097c3b682610c47df8ea1cd24eb0c1eb53255b27` |
| Conversion sidecar | Same filename plus `.conversion.json` |
| Sidecar SHA-256 | `62eff698b11f1d393b518cf62937f918dc131e6893f65ec9cb57d5c5d8a9843b` |
| Source tag | [`thinkingcap-upstream-v1-2026-10-05`](https://github.com/Xtravaganz/ninfer/tree/thinkingcap-upstream-v1-2026-10-05) |
| Validated local production image | `ninfer-upstream-combined-147k:v1` |
| Build | CUDA 13.1.2 / SM120a / Release |
| Prefill chunk | **2048** (V1-specific) |

#### V1 activation divisor profile

| Family | Input divisor |
| --- | ---: |
| D48 — MLP down | 3.5 |
| O_GDN — GDN output | 1.0 |
| O_ATTN — attention output | 6.0 |
| I_GDN — GDN input | 1.0 |
| I_ATTN — attention input | 1.0 |
| G64 — MLP gate/up | 1.0 |
| MTP GateUp | 15.40 |

Frozen layer-family selections: **D48, O44, I53, G64**. The corresponding activation divisors are baked into the V1 model; no runtime DX override environment variables are required for V1.

#### V1 runtime settings

```text
kv-dtype      = nvfp4
spec          = mtp
draft-tokens  = 5
lm-head-draft = enabled
prefill-chunk = 2048
```

These are **V1 settings**, not blanket instructions for the 135K Indexed88 direct release.

#### V1 source and binary provenance

| Item | Commit or SHA-256 |
| --- | --- |
| Published V1 master | `ba8c4e726834c5e00cf5f68255ea6430c66e5319` |
| Exact V1 tag commit | `883d0e434ecb54cb6d6a9274c6a1a680988fab9d` |
| Compact-vocabulary Q8 work | `b8685532` |
| NVFP4 runtime divisor hooks | `883d0e43` |
| V1 `ninfer` binary SHA-256 | `ee41f5be3a4f6b77148420b1bda8cf8fe12479ad8de9be5f9bcc63539557e7e3` |
| V1 `ninfer-serve` binary SHA-256 | `2137f5c7d3d54343e5769735ca5103585b53d872ffb8422d3758b45bdf75058d` |

The V1 production binary was previously checked as byte-identical to the build from its validated worktree. That statement does not apply to the 135K source cleanup.

#### V1 frozen equivalence (runtime-tuned vs baked artifact)

| Workload | Tuned acceptance | Baked V1 acceptance |
| --- | ---: | ---: |
| Mixed 8K | 0.7509293680 | 0.7509293680 |
| Mixed 32K | 0.6134185304 | 0.6134185304 |
| Mixed 48K | 0.5483870968 | 0.5483870968 |
| Mixed 110K | 0.5864197531 | 0.5864197531 |

**V1 baked equivalence: PASS** in those four validation workloads.

#### V1 previous-production vs frozen-V1 comparison

This was an **end-to-end stack comparison** with changes to runtime, calibration and prefill chunk; it is not an isolated kernel or quantization comparison.

| Context | Old acc. | V1 acc. | Old decode tok/s | V1 decode tok/s | Decode gain | Old prefill tok/s | V1 prefill tok/s | Prefill gain |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| Mixed 8K | 54.02% | 75.09% | 82.15 | 116.99 | +42.41% | 3390.4 | 3664.2 | +8.07% |
| Mixed 32K | 40.91% | 61.34% | 64.00 | 93.16 | +45.56% | 2866.7 | 3027.2 | +5.60% |
| Mixed 48K | 55.33% | 54.84% | 75.78 | 83.33 | +9.96% | 2551.6 | 2707.2 | +6.10% |
| Mixed 110K | 54.52% | 58.64% | 67.55 | 76.57 | +13.35% | 1798.4 | 1919.2 | +6.72% |

#### V1 prefill chunk 1024 vs 2048

| Context | Acc. 1024 | Acc. 2048 | Decode gain | Prefill gain |
| --- | ---: | ---: | ---: | ---: |
| Mixed 32K | 55.29% | 61.34% | +6.28% | +4.89% |
| Mixed 110K | 43.53% | 58.64% | +22.45% | +4.79% |

#### V1 vocabulary reduction and validation

| Property | Tokens |
| --- | ---: |
| Source public vocabulary | 248,077 |
| V1 public vocabulary | 147,590 |
| V1 physical vocabulary | 147,712 |
| Removed | 100,487 (40.51%) |
| Padding rows | 122 |

V1 used conservative Unicode/script classification, workload protection, BPE dependency closure, special/added token protection, tokenizer parity checks, teacher-output audits, and runtime A/B validation. The 131,072-row V1 MTP proposal head was independent of the tokenizer cut.

The V1 tuning corpus mixed coding and agent-style contexts of approximately 8,192, 32,768, 49,152 and 112,640 tokens. Results on these selected corpora are **not** claims about universal performance or acceptance.

## Limitations and responsible use

- This is a **specialized experimental-to-production inference distribution**. Performance and language coverage vary with workloads, hardware, and runtime versions.
- English, German and code are the project priorities. Remaining other-language token coverage is not promised stable, and the model can still generate text in additional languages.
- The 88,064 selected IDs are for **MTP proposals only**; the full model still has 135,000 public tokens.
- The model can generate inaccurate, insecure or nonworking code. Review and test generated code and tool commands before executing them.
- Do not confuse the 135K direct-Q8 MTP configuration with the older V1 NVFP4 indexed-head configuration.
- Model weights are distributed through Hugging Face; the local Docker tag is not a public container registry address.

## Provenance and license

- **Upstream base:** [Qwen/Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B).
- **ThinkingCap fine-tune:** [bottlecapai/ThinkingCap-Qwen3.8-27B](https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B).
- **NInfer source:** [Xtravaganz/ninfer](https://github.com/Xtravaganz/ninfer); NInfer code under Apache License 2.0, with separate licenses for included dependencies.

The ThinkingCap derivative model is subject to **PolyForm Small Business License 1.0.0**, plus BottleCap AI's additional personal noncommercial-use grant. Underlying Qwen materials have Apache-2.0 requirements. Read the upstream [ThinkingCap LICENSE](https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B/blob/main/LICENSE) and [NOTICE](https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B/blob/main/NOTICE) and retain applicable redistribution notices. A separate commercial license may be required for organizations outside the upstream license terms. This project does not expand the upstream usage permissions.

## Support

[Support the project on Buy Me a Coffee](https://buymeacoffee.com/Schestex). Independent work on model optimization, quantization, fine-tuning experiments and efficient CUDA inference is supported by voluntary contributions. Support does not confer commercial rights to the model or promise development outcomes.