zhijianliu commited on
Commit
f8b0845
·
verified ·
1 Parent(s): 947e4e7

Model card: sharp version

Browse files
Files changed (1) hide show
  1. README.md +57 -189
README.md CHANGED
@@ -24,119 +24,41 @@ tags:
24
  **Qwen3.6-35B-A3B, packed for Splash on Apple silicon.**
25
 
26
  [Splash](https://github.com/incoai/splash) is Inco AI's open-source inference
27
- engine for Apple silicon, built around the model. Each model on its roster
28
- gets its own kernels, its own DFlash 2 draft, and a memory plan computed for
29
- the machine it runs on.
 
30
 
31
- This package is what Splash maps into memory when you serve Qwen3.6-35B-A3B:
32
- the 4-bit target, its DFlash 2 draft, the vision encoder, and the tokenizer,
33
- laid out as fixed runtime artifacts. It is not a Transformers or MLX
34
- checkpoint and does not load in those frameworks.
35
-
36
- Qwen3.6-35B-A3B is the faster of the two launch models in Splash's benchmarks,
37
- a mixture-of-experts model with 35B total parameters and about 3B active per
38
- token. The other,
39
- [Qwen3.8-27B-Splash](https://huggingface.co/incoai/Qwen3.8-27B-Splash), is a
40
- dense 27B model.
41
 
42
  [Engine](https://github.com/incoai/splash) ·
43
  [Launch post and benchmarks](https://inco.ai/blog/splash/) ·
44
  [DFlash 2](https://inco.ai/blog/dflash2/)
45
 
46
- ## Model details
47
-
48
- ### Description
49
-
50
- - **Developed by:** Inco AI. Qwen3.6-35B-A3B is by Alibaba's Qwen team.
51
- - **Model type:** a Splash package: the 4-bit Qwen3.6-35B-A3B target, its DFlash 2 draft
52
- model, the vision encoder, and the tokenizer, as fixed-layout runtime
53
- artifacts.
54
- - **Languages:** as Qwen3.6-35B-A3B.
55
- - **License:** Apache-2.0. Every upstream component is Apache-2.0 as well:
56
- Qwen3.6-35B-A3B (Alibaba), its 4-bit conversion (mlx-community), and the DFlash 2 draft
57
- (Inco AI).
58
- - **Packaged from:** [`mlx-community/Qwen3.6-35B-A3B-4bit`](https://huggingface.co/mlx-community/Qwen3.6-35B-A3B-4bit)
59
- for the target, tokenizer, and vision encoder, and
60
- [`incoai/Qwen3.6-35B-A3B-DFlash2`](https://huggingface.co/incoai/Qwen3.6-35B-A3B-DFlash2) for the draft, at the
61
- revisions listed under Technical specifications.
62
-
63
- ### Sources
64
-
65
- - **Engine:** <https://github.com/incoai/splash>
66
- - **Launch post and benchmarks:** <https://inco.ai/blog/splash/>
67
- - **Draft model:** <https://inco.ai/blog/dflash2/>
68
- - **Companion package:** [Qwen3.8-27B-Splash](https://huggingface.co/incoai/Qwen3.8-27B-Splash)
69
-
70
- ## Uses
71
-
72
- ### Direct use
73
-
74
- Serve Qwen3.6-35B-A3B locally with Splash: to coding agents (OpenCode, Claude
75
- Code, Codex CLI, Hermes Agent) and to any client of the OpenAI Chat
76
- Completions, Responses, or Anthropic Messages APIs. Text, images, and inline
77
- PDFs in. Streaming, tool calls, and JSON Schema output out.
78
-
79
- ### Out-of-scope use
80
-
81
- - Loading it anywhere but Splash. It is not a Transformers, MLX, or GGUF
82
- checkpoint. For other engines, use the upstream checkpoints.
83
- - Using the draft on its own. It is not a standalone language model.
84
- - Anything Qwen3.6-35B-A3B's own license and usage policy exclude.
85
-
86
- ## Bias, risks, and limitations
87
-
88
- - The package inherits Qwen3.6-35B-A3B's biases, knowledge cutoff, and failure modes. See
89
- the upstream model card.
90
- - The target is the upstream 4-bit conversion. We have not published a quality
91
- comparison against the bf16 checkpoint.
92
- - The draft proposes tokens and the target verifies every one, so speculative
93
- decoding changes the speed and not the output distribution.
94
- - Reasoning is on by default. Reasoning tokens count toward the output limit and
95
- the time to the final answer.
96
- - Usable context is bounded by the memory left after the weights, so a 36 GB
97
- Mac holds less context and fewer concurrent requests than a 48 GB one.
98
- - The server binds `127.0.0.1` and has no authentication. Put a proxy in front
99
- of it before exposing it to a network.
100
-
101
- ## How to get started
102
 
103
- ### Requirements
104
-
105
- Apple M3 or newer, macOS 26.4 or later, [Homebrew](https://brew.sh), and **36
106
- GB of unified memory, 48 GB or more recommended**. Splash checks available
107
- memory at startup and stops with a budget breakdown if the model does not fit.
108
- More memory means more context and more concurrent requests.
109
-
110
- ### Quick start
111
 
112
  ```bash
113
  brew install incoai/tap/splash
114
  splash serve --model incoai/Qwen3.6-35B-A3B-Splash
115
  ```
116
 
117
- That is the complete setup. The first run downloads this package (20.9 GB),
118
- verifies it, computes a memory plan for this machine, and starts the server.
119
- Interrupted downloads resume. Later runs need no network.
120
-
121
- When it prints its `Ready` line, the server is up. Open:
122
-
123
- - Chat: <http://127.0.0.1:8000>
124
- - API: <http://127.0.0.1:8000/v1>
125
-
126
- To point a coding agent at it, run one of these in another terminal:
127
 
128
  ```bash
129
  splash opencode # or: splash claude / splash codex / splash hermes
130
  ```
131
 
132
- This launches the agent you already have installed and points it at the
133
- serving model. Keep the server terminal open. **Ctrl+C stops the server.**
134
-
135
- ### Use the API
136
-
137
- Splash serves OpenAI Chat Completions and Responses, and Anthropic Messages,
138
- all streaming, with tool calls, JSON Schema output, images, and inline PDFs
139
- (up to 20 pages and 10 MiB each).
140
 
141
  ```bash
142
  curl http://127.0.0.1:8000/v1/chat/completions \
@@ -147,57 +69,18 @@ curl http://127.0.0.1:8000/v1/chat/completions \
147
  }'
148
  ```
149
 
150
- `model` is the package ID you served, exactly as passed to `--model`. Leave it
151
- out to address whatever is serving. `GET /v1/models` lists it.
152
-
153
- #### Reasoning
154
-
155
- Qwen3.6-35B-A3B reasons before it answers by default. Its reasoning is a
156
- switch, not a dial: on Chat Completions, `"reasoning_effort": "none"` turns it
157
- off, the other accepted levels (`minimal` through `max`) all render the same
158
- prompt, and anything else is rejected with a 400. Responses takes the same
159
- values in `reasoning.effort`. Anthropic Messages follows the `thinking` field
160
- and is off unless you send `{"type": "enabled"}` or `{"type": "adaptive"}`.
161
- Reasoning comes back as `reasoning_content` and is counted in
162
- `completion_tokens_details.reasoning_tokens`.
163
-
164
- The benchmarks below were run with reasoning on.
165
-
166
- #### Context and memory
167
-
168
- The model's native context window is 256K tokens. Splash grows its 8-bit KV cache as requests need it, within the memory left
169
- after the weights and the requests in flight, so the usable window depends on
170
- the machine and the workload. The settings are ceilings that leave room for
171
- other work on the same Mac:
172
-
173
- ```bash
174
- splash serve --model incoai/Qwen3.6-35B-A3B-Splash --max-memory 28G # cap Metal allocations
175
- splash serve --model incoai/Qwen3.6-35B-A3B-Splash --max-context 100K # cap one request
176
- ```
177
-
178
- `--max-memory` is a ceiling, not a reservation. The
179
- [README](https://github.com/incoai/splash#settings) lists every flag with its
180
- default.
181
-
182
- ## Training details
183
-
184
- This package adds no training. The target weights are upstream's 4-bit
185
- conversion of Qwen3.6-35B-A3B. The draft was trained by Inco AI against
186
- Qwen3.6-35B-A3B. The [DFlash 2 post](https://inco.ai/blog/dflash2/) and the
187
- [draft's card](https://huggingface.co/incoai/Qwen3.6-35B-A3B-DFlash2) describe
188
- its training.
189
 
190
- ## Evaluation
 
 
191
 
192
- ### Setup
193
 
194
- Measured on an M5 Pro (16-core GPU, 48 GB unified memory) with selected
195
- SPEED-Bench coding prompts, over HTTP, with reasoning on, with a 1,024-token
196
- output limit. Single-request figures are medians, and concurrent throughput is
197
- averaged over four waves. Decode counts reasoning tokens. The ratio in each
198
- cell is against the next-fastest engine we measured.
199
-
200
- ### Results
201
 
202
  | Metric | Qwen3.6-35B-A3B |
203
  | --- | ---: |
@@ -208,68 +91,57 @@ cell is against the next-fastest engine we measured.
208
  | Aggregate decode · 4 concurrent short prompts | 357 tok/s (2.0×) |
209
  | Aggregate decode · 4 concurrent 32K prompts | 236 tok/s (3.8×) |
210
 
211
- ### Summary
212
-
213
- Splash led on every measure at every prompt length we tested. The cached
214
- figure replays a prompt exactly. A real agent turn also pays to process the
215
- tokens it appends. These are end-to-end numbers for the complete package on
216
- the hardware above. The [launch post](https://inco.ai/blog/splash/) has the
217
- full comparison against oMLX, Lily, uzu, and Ollama.
218
-
219
- ## Technical specifications
220
 
221
- ### Package contents
222
 
223
  ```
224
  target/ 42 files 18.2 GiB Qwen3.6-35B-A3B, 4-bit, one packed file per layer
225
  draft/ 7 files 0.5 GiB DFlash 2 draft model
226
- vision/ 1 file 0.8 GiB bf16 vision encoder (vision/model.bin)
227
  tokenizer/ 5 files tokenizer and chat template
228
  manifest.json provenance, geometry, and SHA-256 of every artifact
229
  layout.json section-level map of every packed file
230
  ```
231
 
232
- The packed weights in `target/`, `draft/`, and `vision/` are fixed-layout
233
- binaries that Splash maps directly from disk, with `StorageN=256` tiling and
234
- 16 KiB section alignment. The target keeps the
235
- upstream conversion's mixed precision (4-bit affine weights with group size
236
- 64, 8-bit expert routers) across its 40 hybrid layers (gated DeltaNet and
237
- attention), 256 experts with 8 routed per token plus a shared expert, and a
238
- 248,320-token vocabulary. The vision encoder is the target checkpoint's own
239
- bf16 encoder.
240
-
241
  | Component | Source | Revision |
242
  | --- | --- | --- |
243
  | Target, tokenizer, vision | [`mlx-community/Qwen3.6-35B-A3B-4bit`](https://huggingface.co/mlx-community/Qwen3.6-35B-A3B-4bit) | `38740b847e4cb78f352aba30aa41c76e08e6eb46` |
244
  | Draft | [`incoai/Qwen3.6-35B-A3B-DFlash2`](https://huggingface.co/incoai/Qwen3.6-35B-A3B-DFlash2) | `8e713508f0bb02f03b5cb5cabbc8d9604f924be2` |
245
 
246
- The draft is a six-layer DFlash 2 model (hidden size 2048, 32 query heads,
247
- 8 KV heads, 2048-token sliding-window attention, non-causal) that reads the
248
- target's hidden states at eight layers and proposes 7 tokens per step. The
249
- target verifies the block of 8 in one pass. Its projections are 4-bit affine
250
- (group size 64, `StorageN=256`); its norms, convolution kernels, and selector
251
- codebooks are bf16. The package's execution
252
- geometry, recorded in `manifest.json`, batches up to four sequences per decode
253
- step, prefills 2,048 tokens per step, and allocates KV cache in 32-token blocks.
254
 
255
- The chat template is upstream's with one change: a system message that
256
- appears after the first turn is rendered in place instead of being rejected,
257
- which is what coding agents that inject instructions mid-conversation need.
 
258
 
259
- ### Integrity
260
 
261
- `manifest.json` records the upstream revisions above, the execution geometry,
262
- the converter's hashes, and the size and SHA-256 of every artifact. Splash pins
263
- an immutable commit of this repository plus the manifest's SHA-256, checks
264
- every artifact's SHA-256 before publishing the package into its local model
265
- directory, and re-checks sizes and alignment on every start.
 
 
 
 
266
 
267
- ### Compute infrastructure
268
 
269
- - **Hardware:** Apple silicon, M3 or newer, with 36 GB of unified memory or
270
- more.
271
- - **Software:** Splash on macOS 26.4 or later. The kernels are Metal, compiled
272
- for this model's shapes and shipped precompiled.
273
 
274
  ## Citation
275
 
@@ -282,7 +154,3 @@ directory, and re-checks sizes and alignment on every start.
282
  url = {https://inco.ai/blog/splash/}
283
  }
284
  ```
285
-
286
- ## Contact
287
-
288
- <contact@inco.ai>, or an issue on <https://github.com/incoai/splash>.
 
24
  **Qwen3.6-35B-A3B, packed for Splash on Apple silicon.**
25
 
26
  [Splash](https://github.com/incoai/splash) is Inco AI's open-source inference
27
+ engine for Apple silicon, built around the model. This package contains
28
+ everything Splash needs to serve Qwen3.6-35B-A3B: the 4-bit target, its DFlash
29
+ 2 draft, the vision encoder, and the tokenizer. It is not a Transformers or
30
+ MLX checkpoint and does not load anywhere but Splash.
31
 
32
+ Qwen3.6-35B-A3B is the mixture-of-experts launch model, with 35B total
33
+ parameters and about 3B active per token, and the faster of the two. The
34
+ other, [Qwen3.8-27B-Splash](https://huggingface.co/incoai/Qwen3.8-27B-Splash),
35
+ is a dense 27B model.
 
 
 
 
 
 
36
 
37
  [Engine](https://github.com/incoai/splash) ·
38
  [Launch post and benchmarks](https://inco.ai/blog/splash/) ·
39
  [DFlash 2](https://inco.ai/blog/dflash2/)
40
 
41
+ ## Quick start
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
+ Apple M3 or newer, macOS 26.4 or later, [Homebrew](https://brew.sh), and 36 GB
44
+ of unified memory (48 GB or more recommended).
 
 
 
 
 
 
45
 
46
  ```bash
47
  brew install incoai/tap/splash
48
  splash serve --model incoai/Qwen3.6-35B-A3B-Splash
49
  ```
50
 
51
+ The first run downloads this package (20.9 GB), verifies it, checks available
52
+ memory, and starts serving on `127.0.0.1:8000`. When it prints its `Ready`
53
+ line, open <http://127.0.0.1:8000> or attach an agent you already have
54
+ installed from another terminal:
 
 
 
 
 
 
55
 
56
  ```bash
57
  splash opencode # or: splash claude / splash codex / splash hermes
58
  ```
59
 
60
+ The API is OpenAI Chat Completions and Responses, and Anthropic Messages, with
61
+ streaming, tool calls, JSON Schema output, images, and inline PDFs:
 
 
 
 
 
 
62
 
63
  ```bash
64
  curl http://127.0.0.1:8000/v1/chat/completions \
 
69
  }'
70
  ```
71
 
72
+ Reasoning is on by default and is a switch, not a dial. `"reasoning_effort":
73
+ "none"` turns it off, and reasoning comes back as `reasoning_content`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
+ There is no config file. The only settings are ceilings such as `--max-memory`
76
+ and `--max-context`, which the
77
+ [README](https://github.com/incoai/splash#settings) lists with their defaults.
78
 
79
+ ## Performance
80
 
81
+ Measured on an M5 Pro (16-core GPU, 48 GB) with selected SPEED-Bench coding
82
+ prompts over HTTP, with a 1,024-token output limit and reasoning on. The ratio
83
+ in each cell is against the next-fastest engine we measured.
 
 
 
 
84
 
85
  | Metric | Qwen3.6-35B-A3B |
86
  | --- | ---: |
 
91
  | Aggregate decode · 4 concurrent short prompts | 357 tok/s (2.0×) |
92
  | Aggregate decode · 4 concurrent 32K prompts | 236 tok/s (3.8×) |
93
 
94
+ Splash led on every measure at every prompt length we tested, and the lead
95
+ grows with load. The cached figure replays the prompt exactly, so a real turn also pays for the
96
+ tokens it adds. The [launch
97
+ post](https://inco.ai/blog/splash/) has the method and the full comparison.
 
 
 
 
 
98
 
99
+ ## Package contents
100
 
101
  ```
102
  target/ 42 files 18.2 GiB Qwen3.6-35B-A3B, 4-bit, one packed file per layer
103
  draft/ 7 files 0.5 GiB DFlash 2 draft model
104
+ vision/ 1 file 0.8 GiB bf16 vision encoder
105
  tokenizer/ 5 files tokenizer and chat template
106
  manifest.json provenance, geometry, and SHA-256 of every artifact
107
  layout.json section-level map of every packed file
108
  ```
109
 
 
 
 
 
 
 
 
 
 
110
  | Component | Source | Revision |
111
  | --- | --- | --- |
112
  | Target, tokenizer, vision | [`mlx-community/Qwen3.6-35B-A3B-4bit`](https://huggingface.co/mlx-community/Qwen3.6-35B-A3B-4bit) | `38740b847e4cb78f352aba30aa41c76e08e6eb46` |
113
  | Draft | [`incoai/Qwen3.6-35B-A3B-DFlash2`](https://huggingface.co/incoai/Qwen3.6-35B-A3B-DFlash2) | `8e713508f0bb02f03b5cb5cabbc8d9604f924be2` |
114
 
115
+ The weights are fixed-layout binaries that Splash maps directly from disk,
116
+ keeping the upstream conversion's mixed precision: 4-bit weights with 8-bit
117
+ expert routers. The draft is a six-layer DFlash 2 model that reads the
118
+ target's hidden states at eight layers and proposes 7 tokens per step, which
119
+ the target verifies in one pass. The chat template is upstream's with one
120
+ change: a system message after the first turn is rendered in place instead of
121
+ rejected, which coding agents that inject instructions mid-conversation need.
 
122
 
123
+ `manifest.json` records the revisions above, the execution geometry, and the
124
+ size and SHA-256 of every artifact. Splash pins an immutable commit of this
125
+ repository, checks every artifact's SHA-256 before installing it, and
126
+ re-checks sizes and alignment on every start.
127
 
128
+ ## Limitations
129
 
130
+ - The package inherits Qwen3.6-35B-A3B's biases, knowledge cutoff, and failure
131
+ modes.
132
+ - The target is the upstream 4-bit conversion. We have not published a quality
133
+ comparison against the bf16 checkpoint. The target verifies every proposed
134
+ token, so speculation changes speed, not the output distribution.
135
+ - Usable context is bounded by the memory left after the weights, so a 36 GB
136
+ Mac holds less context and fewer concurrent requests than a 48 GB one.
137
+ - The server binds `127.0.0.1` and has no authentication. Put a proxy in front
138
+ of it before exposing it to a network.
139
 
140
+ ## License
141
 
142
+ Apache-2.0. Every component is Apache-2.0 upstream as well: Qwen3.6-35B-A3B
143
+ (Alibaba), its 4-bit conversion (mlx-community), and the DFlash 2 draft (Inco
144
+ AI).
 
145
 
146
  ## Citation
147
 
 
154
  url = {https://inco.ai/blog/splash/}
155
  }
156
  ```