Qwen3.5 Chat (cihaz üzeri LLM)
Qwen3.5-0.8B; 24 katmandan oluşan (18 DeltaNet + 6 GatedAttention) hibrit bir DeltaNet (doğrusal attention) + GatedAttention modelidir. MLX için INT4'e (Metal GPU) ve CoreML için INT8'e (Neural Engine) niceleştirilmiştir. Mac üzerinde MLX ile veya iPhone ile Mac üzerinde CoreML ile çalışır; tokenleri streaming olarak üretir. ASR ile TTS arasında "beyin" görevini gören cihaz üzeri bir LLM için ses pipeline'larına uygun şekilde tasarlanmıştır.
Qwen3.5 Chat; ASR → LLM → TTS zincirlerinde LLM bileşeni olarak SpeechCore VoicePipeline ile entegre olur. Hibrit DeltaNet mimarisi, uzun bağlamlar için verimli doğrusal zamanlı attention sağlar.
Hızlı başlangıç
import Qwen3Chat
let chat = try await Qwen35MLXChat.fromPretrained()
// Single response
let response = try chat.generate("What is Swift?", systemPrompt: "Answer briefly.")
print(response)
// Streaming tokens
let stream = chat.chatStream("Tell me a joke", systemPrompt: "Be funny.")
for try await token in stream {
print(token, terminator: "")
}
Mimari
Qwen3.5-0.8B, 24 katmanlı bir hibrit modeldir: 18 DeltaNet katmanı (gated delta rule yinelemesi ve RMSNormGated ile doğrusal attention) ve 6 GatedAttention katmanı (standart scaled dot-product attention). MLX backend'i, safetensors ağırlıklarıyla Metal GPU üzerinde çıkarım yürütür. CoreML backend'i ise Neural Engine için optimize edilmiş çift modelli mimari (prefill + decode) kullanır. Her ikisi de prompt caching ile KV cache ve yapılandırılabilir sampling (temperature, top-k, top-p, repetition penalty) destekler.
Model giriş/çıkış
| Yön | Ad | Şekil | Açıklama |
|---|---|---|---|
| Giriş | input_ids | [1, seq_len] | Token kimlikleri (Int32) |
| Giriş | attention_mask | [1, seq_len] | Attention maskesi (Int32) |
| Giriş | kv_cache | katman başına | Key-value cache durumu |
| Çıkış | logits | [1, 1, 151936] | Sonraki token logits (Float16) |
| Çıkış | kv_cache_out | katman başına | Güncellenmiş KV cache |
Model varyantları
| Varyant | Niceleştirme | Boyut | İşlem | HuggingFace |
|---|---|---|---|---|
| Qwen3.5-0.8B Chat | INT4 | 418 MB | Metal GPU (MLX) | aufklarer/Qwen3.5-0.8B-Chat-MLX |
| Qwen3.5-0.8B Chat | INT8 | 981 MB | Neural Engine (CoreML) | aufklarer/Qwen3.5-0.8B-Chat-CoreML |
Sampling yapılandırması
let config = ChatSamplingConfig(
temperature: 0.7,
topK: 40,
topP: 0.9,
maxTokens: 128,
repetitionPenalty: 1.1,
disableThinking: false,
maxThinkingTokens: 50
)
let response = try chat.generate("Explain gravity", sampling: config)
| Parametre | Varsayılan | Açıklama |
|---|---|---|
temperature | 0.6 | Rastgelelik (0 = greedy, 1 = yaratıcı) |
topK | 50 | İlk K adayı tut |
topP | 0.95 | Nucleus sampling eşiği |
maxTokens | 512 | Yanıt için maksimum token sayısı |
repetitionPenalty | 1.1 | Tekrarlanan tokenleri cezalandır |
disableThinking | false | Düşünme modunu atla |
maxThinkingTokens | 100 | Düşünme tokenlerini sınırla |
Çok turlu konuşma
let chat = try await Qwen35MLXChat.fromPretrained()
let r1 = try chat.generate("My name is Alex", systemPrompt: "Remember the user's name.")
print(r1) // "Nice to meet you, Alex!"
let r2 = try chat.generate("What's my name?")
print(r2) // "Your name is Alex!"
chat.resetConversation() // Clear history and KV cache
Bellek yönetimi
// Check memory state
print(chat.isLoaded) // true
print(chat.memoryFootprint) // 438304768 (~418 MB)
// Free memory under pressure
chat.unload()
print(chat.isLoaded) // false
// Reload when needed
let chat = try await Qwen35MLXChat.fromPretrained()
iPhone'da TTS çıkarımından önce LLM'i boşaltmak, ~418 MB (INT4 MLX) ya da ~981 MB (INT8 CoreML) bellek serbest bırakır; bu sayede tam ASR → LLM → TTS pipeline'larını çalıştırırken jetsam'in işlemi sonlandırması önlenir.
Performans
| Cihaz | Prefill | Decode | Token/saniye |
|---|---|---|---|
| M2 Max | ~50ms | ~65ms/tok | ~15 tok/s |
| iPhone 16 Pro | ~1.5s | ~450ms/tok | ~2.2 tok/s |
Dönüştürme
MLX ağırlıkları, MLX dönüştürme betiği kullanılarak orijinal Qwen3.5-0.8B checkpoint'inden dönüştürülür. CoreML modelleri Neural Engine üzerinde dağıtım için ayrı bir dönüştürme betiği kullanır. Önceden dönüştürülmüş ağırlıklar HuggingFace'te aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) ve aufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB) adreslerinde mevcuttur.