Qwen/Qwen3.6-27B
Run locally on Apple devices with Mirai
- Type
- local
- From
- Alibaba
- Quantization
- No
- Parameters
- 27B
- Size
- 53.5 GB
<img width="400px" src="https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.6/logo.png">
Qwen3.6-27B is Alibaba's first open-weight Qwen3.6 variant: a 27B dense post-trained model focused on coding agents, repository-level reasoning, and stable real-world developer workflows. The model card describes it as a causal language model with a vision encoder and a native 262,144-token context window, with YaRN-based extension up to roughly 1,010,000 tokens for long-horizon workloads.

Model Profile
The language model has 64 layers, 5120 hidden dimension, padded 248,320-token embeddings, hybrid Gated DeltaNet and gated-attention blocks, and grouped-query attention in the gated-attention layers. Qwen highlights stronger agentic coding, frontend workflow handling, and "thinking preservation" for multi-turn agent sessions.
Serving Notes
The README recommends modern SGLang, vLLM, KTransformers, or Transformers serving. Standard OpenAI-compatible serving uses a 262,144-token context length with Qwen3 reasoning parsing; tool-use serving adds the `qwen3_coder` tool-call parser. Recommended sampling depends on mode: thinking mode uses temperature 1.0, top-p 0.95, top-k 20, while precise coding can lower temperature to 0.6.
spm https://github.com/trymirai/uzu.git
| 1 | import Uzu |
| 2 | |
| 3 | public func runChat() async throws { |
| 4 | let engineConfig = EngineConfig.create() |
| 5 | let engine = try await Engine.create(config: engineConfig) |
| 6 | |
| 7 | guard let model = try await engine.model(identifier: "Qwen/Qwen3.6-27B") else { |
| 8 | return |
| 9 | } |
| 10 | for try await update in try await engine.download(model: model).iterator() { |
| 11 | print("Download progress: \(update.progress())") |
| 12 | } |
| 13 | |
| 14 | let messages = [ |
| 15 | ChatMessage.system().withText(text: "You are a helpful assistant"), |
| 16 | ChatMessage.user().withText(text: "Tell me a short, funny story about a robot") |
| 17 | ] |
| 18 | let session = try await engine.chat(model: model, config: .create()) |
| 19 | let stream = await session.replyWithStream(input: messages, config: .create()) |
| 20 | var message: ChatMessage? = nil |
| 21 | for try await update in stream.iterator() { |
| 22 | switch update { |
| 23 | case .replies(let replies): |
| 24 | message = replies.last?.message |
| 25 | case .error(let error): |
| 26 | print("Error: \(error)") |
| 27 | } |
| 28 | } |
| 29 | print("Text: \(message?.text() ?? "empty")") |
| 30 | } |