Swift-1.5-Qwen3.8-27B-Splash
Change coming in the next Splash release. Splash's
mainnow loads upstream MLX 4-bit (affine, group 64) and GGUF checkpoints directly and prepares its own weights (incoai/splash#133, #134), so pre-converted packages like this one become Splash's legacy path. This package keeps working, and on Splash 1.0.x (current) it is still the way to run this model. After the next release you should be able to skip it:splash serve --model ukisai/Swift-1.5-4bit-MLXThis package is an exact repack of
ukisai/Swift-1.5-4bit-MLX, and Splash states that MLX 4-bit models prepare to the same weights, so expect the same output and speed. GGUF quants (ukisai/Swift-1.5-Qwen3.8-27B-GGUF) should also load, on separate kernels.
ukisai/Swift-1.5-Qwen3.8-27b, quantized to 4-bit and packaged for Splash, Inco AI's inference engine for Apple silicon.
17.4 GB, uniform 4-bit (group 64, affine). Apple silicon + Splash only β which includes LM Studio's Splash runtime (LM Studio Bionic 1.1.5 or later: Settings β Runtime β Splash, then download this repository). It does not load in Transformers, MLX or llama.cpp.
Quick start
Install Splash (Apple silicon, via Homebrew):
brew install incoai/tap/splashServe this model. The first run downloads the 17.4 GB package from Hugging Face:
splash serve --model SiliconSpecies/Swift-1.5-Qwen3.8-27B-SplashWait for
Ready Β· SiliconSpecies/Swift-1.5-Qwen3.8-27B-Splash Β· β¦ Β· http://127.0.0.1:8000. Leave it running; Ctrl+C stops it.Chat in the browser at http://127.0.0.1:8000.
Or call the OpenAI-compatible API from another terminal. The model id is the repository name:
curl http://127.0.0.1:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{ "model": "SiliconSpecies/Swift-1.5-Qwen3.8-27B-Splash", "messages": [{"role": "user", "content": "Write a haiku about the sea."}], "temperature": 1.0, "top_p": 0.95, "top_k": 20, "max_tokens": 2048 }'Any OpenAI client works the same way: base URL
http://127.0.0.1:8000/v1, modelSiliconSpecies/Swift-1.5-Qwen3.8-27B-Splash, any API key unless you started the server with--api-key.Or connect a coding agent to the running server:
splash claude,splash codex,splash opencodeorsplash hermes.
Send the sampling values in step 4 yourself β the API is greedy when they are omitted (see
Sampling) β and leave room in max_tokens for thinking (see
Reasoning effort). Useful splash serve options: --max-memory 28G,
--max-context 100K, --api-key KEY, --no-webui.
| part | source | treatment |
|---|---|---|
target/ β 64 layers, embedding, head |
ukisai/Swift-1.5-Qwen3.8-27b, via UkisAI's own 4-bit release ukisai/Swift-1.5-4bit-MLX (affine 4-bit, group 64) |
repacked into Splash 4-bit with the values unchanged β this is the conversion |
draft/ β DFlash 2 |
incoai/Qwen3.8-27B-DFlash2 |
byte-identical copy |
vision/ |
incoai/Qwen3.8-27B-Splash |
byte-identical copy (equals Qwen3.8-27B's own tower, 333/333 tensors β the Swift-1.5 fine-tune left it untouched) |
tokenizer/ |
ukisai/Swift-1.5-4bit-MLX |
unmodified, except one chat-template line patched exactly as in the official package β see below |
Quality
95 short-answer tasks with checkable answers (multi-step arithmetic, word problems, sequences, logic, code output, recall, units) β the same saturated set as the base and Swift-1.0 packages, greedy, identical scoring throughout:
| configuration | precision | score |
|---|---|---|
| this package (Swift-1.5) | uniform 4-bit | 95/95 |
SiliconSpecies/Swift-Qwen3.8-27B-Splash (Swift-1.0) |
uniform 4-bit | 95/95 |
incoai/Qwen3.8-27B-Splash (base model) |
uniform 4-bit | 95/95 |
Indistinguishable from base at this difficulty β the set saturates, so it cannot rank them, and it is not a claim of parity with full-precision Swift-1.5 β it cannot detect a small regression; the fidelity measurement below can.
The old Swift-1.0 package scored the same here, so the useful comparison is behaviour: on 61 shared prompts the two fine-tunes are word-level identical 59 times (mean common prefix 0.973) β near-identical on short canonical answers, genuinely distinct on long-form free text, as two separate fine-tunes should be.
Fidelity to BF16
Next-token KL divergence against BF16 ukisai/Swift-1.5-Qwen3.8-27b, on the corpora and
protocol of the agentionai/Qwen3.8-27B-AP-GGUF
card (15 Γ 2,048 tokens per corpus, second half of each chunk scored):
| KL, neutral web | KL, wikitext-2 | KL p99 (web / wiki) | top-1 agreement | perplexity | |
|---|---|---|---|---|---|
| this package | 0.031 | 0.060 | 0.22 / 0.46 | 90% | +2.4% / +2.0% |
For scale, that card's 4-bit GGUFs of base Qwen3.8-27B score 0.010β0.018 (web) and
0.015β0.024 (wikitext); like the Swift-1.0 package, this one sits nearer their 3-bit
files. The cost is the format's: splash-packed-q4 stores every tensor, output head
included, at uniform 4-bit, where llama.cpp's 4-bit mixes keep sensitive tensors at 5β6 bits.
Caveats: the GGUF figures are for base Qwen3.8 via llama.cpp, ours for Swift-1.5 via MLX using this package's exact 4-bit values, with a 16-bit KV cache β Splash's 8-bit KV cache adds a little more. KL is computed over the reference's top 64 tokens plus one tail bucket, which slightly understates it.
Speed
Measured on an M5 Max (40-core GPU, 128 GB, mains power), back to back against the Swift-1.0 package on the same engine (Splash 1.0.2); greedy, and every prompt salted so nothing is served from the prefix cache:
| Swift-1.0 package | this package | |
|---|---|---|
| decode, 1,024-token replies | 74β85 tok/s | 75β84 tok/s |
| prefill, 2k / 8k tokens | 1,045 / 931 tok/s | 993 / 920 tok/s |
| prefill, 31k / 62k tokens | 831 / 730 tok/s | 825 / 723 tok/s |
| 4 requests at once | 195 tok/s total | 179 tok/s total |
| draft acceptance | 0.44 | 0.44 |
On par with Swift-1.0 β same format, size and drafter; the differences are within run-to-run noise.
Sampling
Swift recommends temperature 1.0, top_k 20, top_p 0.95. The format has nowhere to carry
generation_config.json β the installer accepts exactly five tokenizer files β and Splash
deliberately keeps sampling out of the model.
- Splash's chat page already sends those values. Browser users need do nothing.
- The
/v1API defaults to greedy (temperature 0.0, top_p 1.0, top_k 0) when a client omits them. Send them explicitly. - If your client cannot β DSH, for one, has no
top_p/top_kin its request model at all β a ~50-line proxy that fills them in works and costs no measurable latency.
Reasoning effort
Swift's chat template implements low, medium, xhigh, defaulting to xhigh.
Splash passes reasoning_effort straight into the template, so a value outside that set
raises a template error (high/max alias to xhigh, minimal to low).
The levels change the instructions the template writes, not a token budget, so higher effort can be shorter.
Conversion notes
The source is the MLX affine-4-bit release. MLX's affine 4-bit/group-64 rule is Splash's own
(w = cΒ·s + b, bf16 scale and bias per 64 weights), so the codes, scales and biases are
repacked into splash-packed-q4 as stored, not re-quantized: the weights are exactly
those of ukisai/Swift-1.5-4bit-MLX. This package has been improved to do so, bringing it
closer to BF16 at the same size and speed.
For scale: that release was checked tensor-for-tensor against the pinned BF16
ukisai/Swift-1.5-Qwen3.8-27b β 498 quantized tensors, cosine 0.99335β0.99585, relative
RMSE β€ 0.116 (the worst five are heavy-tail in_proj/k_proj matrices in the top layers;
the limit is 4-bit storage, not conversion), and 353 bf16 tensors bit-exact.
Two provenance checks that save you the conversion entirely:
- Vision β the Swift-1.5 fine-tune left the tower byte-identical to Qwen3.8-27B base (333 of 333 tensors), so this file is the official package's, unchanged.
- Drafter β DFlash 2 is reused from the official release unchanged; Swift-1.5's drafter acceptance matches Swift-1.0's (see Speed).
If you attempt the target yourself: every bf16 norm section stores Ξ³ + 1, including
query-norm and key-norm, with gdn-norm the lone exception. Getting the attention norms
wrong leaves the model fluent while destroying multi-step reasoning β and per-section error
metrics will not show it.
Chat template. Swift's template rejects a system message anywhere but first, so clients
that send a second one β JetBrains' commit-message generation through LM Studio's Splash
runtime, for one β fail with messages could not be rendered. The official
incoai/Qwen3.8-27B-Splash template renders such a message in place; this package applies
the same one-line patch, and drops the unpatched copy from tokenizer_config.json as the
official package does. Conversations that rendered before render byte-for-byte the same.
Licence
Swift contribution under the Swift Open License v1.0 (LICENSE); base model Apache 2.0
(LICENSE-APACHE-2.0). See NOTICE for attribution and the full list of changes.
Commercial use is free under US$1,000,000 gross annual revenue. Above that it requires a Swift Enterprise License from UkisAI. That condition travels with these weights and applies to you.
Credit: Swift-1.5 fine-tune by UkisAI; Qwen3.8-27B by Alibaba Cloud; Splash engine, packed format and DFlash 2 drafter by Inco AI.