A full fine-tuned MoE reasoning model of 60G size, distilled from Claude Sonnet 4.6 and optimized for Apple Silicon based on MLX. Fast, capable, and runs entirely on-device.
Recommended temperature: 0.95 — this model was trained on complex reasoning traces and benefits from slightly higher temperature to fully activate its chain-of-thought behavior. Values below 0.7 tend to flatten reasoning diversity; values above 1.2 may introduce incoherence.
Model Summary
cloudyu/gpt-oss-120b-Sonnet-Reasoning-Distilled is a fully merged fine-tune of gpt-oss-120b-heretic-mxfp4-q8-hi-mlx, trained using a custom BAdam (Block-wise Adam) optimizer with LoRA adapters on Apple MLX. The fine-tuning uses distilled reasoning traces from Claude Sonnet 4.6, filtered to difficulty=complex samples only.
This is a complete model upload — no separate adapter files or base model are needed. Download and run directly.
The model reasons step-by-step through hard problems using the Harmony channel protocol (analysis for internal chain-of-thought, final for the delivered response), and delivers this at surprisingly high throughput on M-series hardware — particularly the M2 Ultra.
Highlights
🚀 Speed-first on Apple Silicon — sustained 28–39 tok/s on M2 Ultra (192 GB unified memory) for a 120B MoE model. This is the defining characteristic of this release.
🌡️ Recommended temperature: 0.95 — unlocks the full depth of the model's reasoning traces.
🧠 Strong reasoning — 12/14 PASS on a custom hard benchmark spanning math olympiad, systems coding, logic, and scientific computing. Average keyword accuracy: 96.4%.
🍎 Fully on-device — no cloud API, no GPU cluster. Pure MLX inference on Mac.
📦 Full model — merged weights included. No base model or adapter setup required.
📐 Harmony channel format — analysis (chain-of-thought) and final (response) channel separation, making the reasoning process explicit and inspectable.
Quick Start
Using LM Studio with OpenAI Codex on Mac (MLX Models)
A step-by-step guide to running cloudyu/gpt-oss-120b-Sonnet-Reasoning-Distilled locally on Apple Silicon Mac and connecting it to OpenAI Codex CLI.
Prerequisites
Apple Silicon Mac (M1 / M2 / M3 / M4)
macOS 13 or later
At least 64 GB unified memory (the 120B model requires ~60 GB)
Go to https://lmstudio.ai/download and download the macOS (Apple Silicon) installer.
Drag LM Studio.app into your /Applications folder and open it at least once — this bootstraps the lms CLI.
1.2 Add lms to your PATH
Open a terminal and run:
npx lmstudio install-cli
Open a new terminal window, then verify:
lms --version
Part 2 — Download the Model
You have two options: download via the LM Studio app GUI, or use the CLI.
Option A — GUI (easiest)
Open LM Studio.
Press ⌘ + Shift + M to open the model search.
Search for gpt-oss-120b-Sonnet-Reasoning-Distilled.
Select the MLX variant and click Download.
Option B — CLI
lms get cloudyu/gpt-oss-120b-Sonnet-Reasoning-Distilled --mlx
Option C — Use a locally downloaded model
If you already have the model folder on disk, create a symlink into LM Studio's model directory:
bash
1# Create the target directory2mkdir -p ~/Documents/LM\ Studio/models/cloudyu/
34# Symlink (no file copying, saves disk space)5ln -s /path/to/your/gpt-oss-120b-Sonnet-Reasoning-Distilled \6 ~/Documents/LM\ Studio/models/cloudyu/gpt-oss-120b-Sonnet-Reasoning-Distilled
If you see gpt-5.5 in the model field, your profile is not loading. Run with an explicit flag instead:
codex --profile gpt-oss-local
Part 5 — Everyday Workflow
Each time you start a new terminal session, run these two commands before launching Codex:
bash
1# 1. Load the model (skip if already loaded)2lms load gpt-oss-120b-sonnet-reasoning-distilled --context-length 32768 --gpu max
34# 2. Start the server (skip if already running)5lms server start --port 123467# 3. Launch Codex8codex
To check whether the model is already loaded:
lms ps
To stop the server:
lms server stop
Troubleshooting
Problem
Solution
lms command not found
Run npx lmstudio install-cli, then open a new terminal
Model not detected by lms ls
Check that your model folder is inside ~/Documents/LM Studio/models/<author>/
Codex shows gpt-5.5 as model
Use codex --profile gpt-oss-local or verify profile = in config.toml
Codex request times out
Make sure proxy env vars are unset: unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
1# Requirements: mlx-tune + Apple MLX2# pip install mlx-tune34from mlx_tune import FastLanguageModel
56model, tokenizer = FastLanguageModel.from_pretrained(7 model_name="cloudyu/gpt-oss-120b-Sonnet-Reasoning-Distilled",8 max_seq_length=4096,9 load_in_4bit=True,10)1112prompt ="""<|start|>system<|message|>You are a helpful assistant.
13Reasoning: high
14# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
15<|start|>user<|message|>Explain the time complexity of Dijkstra's algorithm and when to prefer A* instead.<|end|>
16<|start|>assistant<|channel|>analysis<|message|>"""1718outputs = model.generate(19 prompt,20 max_new_tokens=2048,21 temperature=0.95,# ← recommended22 top_p=0.9,23)24print(outputs)
Prompt Format (Harmony)
This model uses the gpt-oss Harmony channel protocol. Every message must declare its channel:
<|start|>system<|message|>{system prompt}
Reasoning: high
# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
<|start|>user<|message|>{your question}<|end|>
<|start|>assistant<|channel|>analysis<|message|>{internal chain-of-thought — generated by model}<|end|>
<|start|>assistant<|channel|>final<|message|>{final answer — generated by model}<|return|>
The analysis channel contains the model's internal reasoning. You can display or hide it depending on your use case.
The final channel contains the deliverable response.
Always prompt the model to begin its reply with <|start|>assistant<|channel|>analysis<|message|> to elicit chain-of-thought before the final answer.
Format: OpenAI-style messages column; assistant turns include a separate reasoning field containing the Claude Sonnet 4.6 chain-of-thought
BAdam — Block-wise Coordinate Descent
Standard full fine-tuning of a 120B model on a single Mac is memory-prohibitive. BAdam solves this with block coordinate descent:
All 36 Transformer layers are partitioned into individual blocks.
At each optimizer step, only the active block's gradients are applied; all others are zeroed.
AdamW moment states are lazily initialized — inactive blocks never accumulate optimizer state, keeping peak memory comparable to LoRA alone.
parallel switch mode activates head + tail blocks simultaneously, with dual pointers advancing inward each cycle. This doubles layer coverage speed at ~2× the memory cost of single-block mode.
Benchmark Results
Custom hard benchmark — 14 tasks across math, coding, logic, and science. 60s execution timeout per task. Auto-graded with keyword matching + live code execution.
Evaluated on the 1000-step checkpoint (this released model).
The two failures (sci_01, sci_02) both scored 100% on keyword accuracy — the model fully understood the problems but produced code with numerical precision or runtime assertion edge cases. This is consistent with an early 1000-step checkpoint; further training is expected to close these gaps.
Inference Speed on M2 Ultra
Metric
Value
Hardware
Apple M2 Ultra, 192 GB unified memory
Peak memory (inference)
~88 GB
Throughput
28–39 tok/s depending on context length
Benchmark average
~34 tok/s
Running a 120B MoE model at 34 tok/s entirely on a single Mac — no cloud, no quantization compromise in output quality — is the core reason to use this model.
<|start|>system<|message|>{系统提示}
Reasoning: high
# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
<|start|>user<|message|>{你的问题}<|end|>
<|start|>assistant<|channel|>analysis<|message|>{内部思维链 — 由模型生成}<|end|>
<|start|>assistant<|channel|>final<|message|>{最终回复 — 由模型生成}<|return|>