Model card: sharp version
Browse files
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.
|
| 28 |
-
|
| 29 |
-
the
|
|
|
|
| 30 |
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 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 |
-
##
|
| 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 |
-
|
| 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 |
-
|
| 118 |
-
|
| 119 |
-
|
| 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 |
-
|
| 133 |
-
|
| 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 |
-
|
| 151 |
-
|
| 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 |
-
|
|
|
|
|
|
|
| 191 |
|
| 192 |
-
##
|
| 193 |
|
| 194 |
-
Measured on an M5 Pro (16-core GPU, 48 GB
|
| 195 |
-
|
| 196 |
-
|
| 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 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 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 |
-
##
|
| 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
|
| 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
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
target
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
step, prefills 2,048 tokens per step, and allocates KV cache in 32-token blocks.
|
| 254 |
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
|
|
|
| 258 |
|
| 259 |
-
##
|
| 260 |
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 266 |
|
| 267 |
-
##
|
| 268 |
|
| 269 |
-
-
|
| 270 |
-
|
| 271 |
-
|
| 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 |
```
|
|
|
|
|
|
|
|
|
|
|
|