Qwen/Qwen3-1.7B
Run locally on Apple devices with Mirai
- Type
- local
- From
- Alibaba
- Quantization
- No
- Parameters
- 1.7B
- Size
- 3.2 GB
Qwen3-1.7B is a compact 1.7 billion parameter causal language model from Alibaba's Qwen team, part of the third-generation Qwen series. Despite its small footprint, it incorporates the architectural and training advances of the full Qwen3 lineup, making it a capable option for resource-constrained deployments.
Architecture & Specs
Built on a dense transformer architecture with 28 layers, the model uses Grouped Query Attention (16 query heads, 8 key-value heads) and supports a context length of 32,768 tokens. Of its 1.7B total parameters, 1.4B are non-embedding. It is derived from the Qwen3-1.7B-Base via both pretraining and post-training stages.
Thinking & Non-Thinking Modes
A standout feature of Qwen3 models is the ability to seamlessly switch between thinking mode and non-thinking mode within a single model. In thinking mode, the model engages in step-by-step reasoning (wrapped in `<think>...</think>` blocks), improving performance on math, coding, and logic tasks. In non-thinking mode, it behaves like a standard instruction-following model for fast, general-purpose dialogue. Users can toggle between modes via a simple `enable_thinking` flag or inline `/think` and `/no_think` tags during conversation.
Key Capabilities
- Reasoning: Enhanced logical reasoning, mathematical problem-solving, and code generation
- Agent & Tool Use: Precise integration with external tools, including MCP-based configurations and Qwen-Agent for agentic workflows
- Multilingual: Supports 100+ languages and dialects with strong instruction-following and translation abilities
- Conversational Quality: Improved alignment for creative writing, role-playing, and multi-turn dialogue
Deployment
Qwen3-1.7B is compatible with Hugging Face Transformers (v4.51.0+), SGLang, vLLM, Ollama, LMStudio, llama.cpp, and other popular inference frameworks. Its small size makes it well-suited for edge deployment, local applications, and latency-sensitive use cases where larger models are impractical.
Licensed under Apache 2.0.
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-1.7B") 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 | } |