Paris99's picture
Card: Python 3.11+ (mlx-lm 0.32 requires it)
6cde923 verified
|
Raw History Blame Contribute Delete
4.59 kB
---
license: apache-2.0
base_model: sensenova/SenseNova-Loop-9B-Preview
base_model_relation: quantized
library_name: mlx
pipeline_tag: text-generation
tags: [mlx, sensenova, sensenova-loop, looped-transformer, mhc, qwen3_5, apple-silicon]
---
# SenseNova-Loop-9B-Preview — MLX 4-bit
A 4-bit MLX conversion (affine, group size 64) of [sensenova/SenseNova-Loop-9B-Preview](https://huggingface.co/sensenova/SenseNova-Loop-9B-Preview) (revision `9937e91`, released 30 October 2026) for Apple Silicon. 5.1 GB of weights. Text model; image input is not part of this build yet. The smallest build. It follows the reference less closely than 8-bit and 6-bit (89% same top token); pick 6-bit or 8-bit when quality matters most.
Published by [NetProjects](https://netprojects.com) (Internet Projects Ltd). Not affiliated with SenseTime / SenseNova.
## A faithful port of the looped architecture
SenseNova-Loop is a Qwen3.5-based model with two additions, and this build runs both exactly as SenseNova's own code does:
- **Looped execution:** layers 0–3 run once, layers 4–27 run **twice** with shared weights, then layers 28–31: 56 layer passes per token. Every pass has its own cache slot (KV cache for full attention, conv and recurrent state for Gated DeltaNet).
- **Two-stream mHC** on layers 4–27: the hidden state is split into two residual streams that are routed by small float32 routers (pre / post gates and a 2×2 Sinkhorn mixing matrix, 20 iterations). The 96 router tensors stay in float32 and are never quantized.
The model code is `sensenova_loop.py`, included in this repo and loaded by mlx-lm through `trust_remote_code=True`. Source, converter, parity and benchmark scripts: [github.com/internet-projects/sensenova-loop-mlx](https://github.com/internet-projects/sensenova-loop-mlx).
## Results (MacBook Pro M5 Max, 128 GB, 7 November 2026)
Agreement with SenseNova's own PyTorch code (Transformers 5.18, bf16) on 16 prompts, every position:
| | 8-bit | 6-bit | 4-bit |
|---|---|---|---|
| Same top token as the reference | 97.6% | 97.2% | 89.2% |
| KL divergence at the last token | 0.0011 | 0.0037 | 0.064 |
| Size | 9.6 GB | 7.3 GB | 5.1 GB |
Short public benchmark (same harness for every build; first 300 ARC-Challenge test questions, log-likelihood over the 4 choices; first 50 GSM8K test questions, chat template, thinking off, greedy):
| | bf16 | 8-bit | 6-bit | 4-bit |
|---|---|---|---|---|
| ARC-Challenge acc / acc_norm | 48.7 / 51.0 | 48.7 / 50.3 | 47.7 / 49.0 | 45.7 / 45.0 |
| GSM8K (50) | – | 94.0 | 88.0 | 92.0 |
GSM8K on 50 questions moves 2 points per question.
Decode speed for this build: about 22 tokens/s on the M5 Max (short run). The loop doubles the work of the middle 24 layers, so it is slower than a plain 9B model; that is the cost of the extra depth.
## Use
Needs Python 3.11 or newer and mlx-lm 0.32 or newer (the macOS system Python 3.9 only gets an older mlx-lm that can't load this model).
```bash
pip install -U "mlx-lm>=0.32"
```
```python
from mlx_lm import load, generate
model, tokenizer = load("netprojects/SenseNova-Loop-9B-Preview-MLX-4bit", trust_remote_code=True)
messages = [{"role": "user", "content": "Explain in two sentences why the sky is blue."}]
prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True, enable_thinking=False)
print(generate(model, tokenizer, prompt=prompt, max_tokens=256))
```
Set `enable_thinking=True` for thinking mode. Server: `mlx_lm.server --model netprojects/SenseNova-Loop-9B-Preview-MLX-4bit --trust-remote-code`.
**Other sizes:** [8-bit](https://huggingface.co/netprojects/SenseNova-Loop-9B-Preview-MLX-8bit) (9.6 GB) · [6-bit](https://huggingface.co/netprojects/SenseNova-Loop-9B-Preview-MLX-6bit) (7.3 GB)
## License
SenseNova-Loop-9B-Preview is released by SenseNova under the **Apache License 2.0** (`LICENSE` included). This repository contains converted and quantized weights of that model (modified from the original: converted to MLX format and quantized to 4-bit) and an MLX implementation of its architecture, distributed under the same license.
Credits: SenseNova / SenseTime (SenseNova-Loop-9B-Preview), Qwen team (Qwen3.5), Apple MLX and mlx-lm. Conversion and MLX port by Paris Michalas, Partner at [NetProjects](https://netprojects.com). Not affiliated with SenseTime / SenseNova.
**More NetProjects MLX builds:** [NetProjects MLX builds collection](https://huggingface.co/collections/netprojects/netprojects-mlx-builds-6ae3b2683a59a1b4fc4c0c3a) · [all models at huggingface.co/netprojects](https://huggingface.co/netprojects)