Run Qwen3.5-122B-A10B locally on a 16 GB MacBook Air by streaming MoE expert weights from SSD instead of trying to keep the whole model resident in memory.
Sebas is focused on one thing: a local Apple Silicon inference path for a Qwen3.5 MoE model that does not fit a standard resident-model runtime. The Rust CLI is a thin operational wrapper for local chat, demo, doctor, and benchmark commands, plus an experimental Codex CLI bridge for using the local model as a Responses-compatible provider.
Cropped direct-camera run of Qwen3.5-122B-A10B on a 16 GB MacBook Air. Watch the full demo on YouTube.
Install the latest prebuilt Sebas CLI:
curl -fsSL https://raw.githubusercontent.com/musshiyaki/sebas/main/install.sh | sh
sebasThe installer copies sebas to ~/.local/bin by default. See
install.md for release tags, custom install paths, PATH
setup, and source-build fallback.
This installs the CLI only. The 122B path still needs a prepared model and the external engine checkout described in qwen122b-runbook.md.
Measured on a MacBook Air (Apple M5, 16 GB) with
mlx-community/Qwen3.5-122B-A10B-4bit after full local preparation. Latest
tracked run: benchmarks/qwen122b/2026-06-01-m5-air-16gb.
| Case | TTFT | Generation | Total |
|---|---|---|---|
| Japanese short smoke | 12.97 s | 3.40 tok/s | 22.4 s |
| Japanese long benchmark | 16.08 s | 2.90 tok/s | 66.4 s |
| English short smoke | 14.70 s | 3.32 tok/s | 23.4 s |
| English long benchmark | 15.63 s | 2.86 tok/s | 69.4 s |
| Chinese short smoke | 12.82 s | 3.33 tok/s | 22.7 s |
| Chinese long benchmark | 17.62 s | 3.07 tok/s | 48.9 s |
The current bottleneck is expert weight movement from SSD, not Metal math throughput. See qwen122b-porting.md for the measured timing breakdown and architecture notes.
The first summary-only baseline lives in
benchmarks/qwen122b/2026-03-29-m5-air-16gb.
Use tools/collect-qwen122b-repro-pack
to collect raw logs, environment metadata, and doctor output for a new run.
Qwen3.5-122B-A10B is a Mixture-of-Experts model. Only a subset of routed experts is active for each token. Sebas prepares the model so dense weights can stay small enough for the machine, while routed expert files are read on demand from SSD.
The result is not "the whole 122B model fits in 16 GB RAM." It is a local streaming runtime:
- Apple Silicon Metal compute for the active path
- SSD-backed routed expert streaming
- Qwen3.5 MoE shape-aware export and runtime config
- stable text-only inference path for 122B bring-up
Sebas is not trying to replace Ollama as a general local model runner. Ollama is excellent when a model fits a backend it supports, but this 122B bring-up is not a standard "load a GGUF and run it" path.
The first working 122B path starts from MLX 4-bit safetensors and does not require a GGUF overlay. It needs Qwen3.5 MoE-aware preparation before inference:
- derive architecture from
config.jsonand safetensors shapes - repack routed experts into per-layer files
- stream active expert blocks from SSD with
pread - drive custom C, Objective-C, and Metal kernels with that layout
That custom engine is the reason Sebas exists. The CLI is intentionally just an operational wrapper around the engine and benchmark workflow.
The public entrypoint is the top-level ./sebas command.
./sebasOr build from source:
git clone https://github.com/musshiyaki/sebas.git
cd sebas
tools/install-sebas
sebasSebas does not vendor or redistribute Flash-MoE engine code. If you choose to use a compatible external engine checkout, review the upstream repository and its license status yourself before use:
git clone https://github.com/Anemll/flash-moe flash-moe-anemll-iosFor local engine commands, create a local workspace manifest first:
mkdir -p .workspace
cp .workspace.example/manifest.json .workspace/manifest.json
cp .workspace.example/system-no-think.md .workspace/system-no-think.md
./sebas engine doctor --engine qwen122b
./sebas chat
./sebas engine bench --engine qwen122b
./sebas engine bench --engine qwen122b --lang all --case all --long-tokens 160
./sebas run engine-only --engine qwen122b
./sebas codex config --engine qwen122b
./sebas codex proxy --engine qwen122b
./sebas codex proxy --engine qwen122b --one-shot-exec --session-mode deltaFor a full 122B setup from the source MLX model, see qwen122b-runbook.md. The current public umbrella repo tracks the Sebas CLI and documentation. The Flash-MoE engine checkout is kept outside the tracked tree until redistribution and upstream license terms are fully clarified.
| Path | Purpose |
|---|---|
sebas |
Main CLI entrypoint for chat, engine, demo, doctor, and benchmark commands |
rust/ |
Minimal Sebas runner CLI |
.workspace.example/ |
Example local engine manifest; copy to .workspace/ for local runs |
docs/qwen122b-runbook.md |
Public 122B setup and benchmark runbook |
docs/qwen122b-porting.md |
Public 122B architecture and measurement notes |
docs/codex-bridge.md |
Experimental Codex CLI bridge setup |
tools/ |
Thin operational wrappers |
docs/ |
Workspace architecture notes |
engines/ |
External engine ownership and layout notes |
This is a research-grade local runtime, not a polished consumer app yet.
Working today:
- Qwen3.5-122B-A10B text-only inference path
- MacBook Air 16 GB bring-up with measured prefill/decode numbers
./sebaslocal chat and CLI wrapper for engine operation- experimental Codex CLI bridge through a local Responses API proxy
- Qwen35B and Qwen122B engine selection paths
- benchmark and doctor commands
Still experimental:
- long-context latency
- fast mode / malloc-backed expert cache stability
- arbitrary MoE model support beyond the Qwen3.5 shape family
- vision tensors
- package-manager installers
The inference work builds on Flash-MoE and the idea that very large MoE models can run on small local machines when expert weights are streamed on demand. The Anemll fork extends that direction for Apple Silicon and the 122B Qwen3.5 path.
Related docs:
- Installing Sebas
- Qwen3.5-122B porting notes
- Qwen3.5-122B runbook
- Codex CLI bridge
- Reproducibility pack workflow
- Tracked benchmark summaries
- Workspace architecture
- Third-party notices
- The 122B path is currently text-only.
- The first-token experience is still slow compared with small local models.
- Model preparation is large and technical.
- The engine currently targets Qwen3.5 MoE family assumptions.
- Reproducibility depends on Apple Silicon hardware, local SSD behavior, and the prepared model layout.
Those limits are explicit because the interesting part of this project is the engineering constraint: making a huge local model work on small hardware without pretending it is magically lightweight.
Sebas is an independent research project. It is not affiliated with, endorsed by, or maintained by Apple, Alibaba/Qwen, ANEMLL, Hugging Face, the MLX Community, or the Flash-MoE upstream projects. Third-party names are used only for descriptive compatibility, attribution, setup, and benchmark context.
See LICENSE and THIRD_PARTY_NOTICES.md.

