محادثة Qwen3.5 (LLM على الجهاز)

Qwen3.5-0.8B نموذج هجين يجمع بين DeltaNet (الانتباه الخطّي) وGatedAttention، يتألّف من 24 طبقة (18 طبقة DeltaNet + 6 طبقات GatedAttention)، مُكمَّم إلى INT4 لـ MLX (وحدة معالجة الرسوم Metal) وINT8 لـ CoreML (Neural Engine). يعمل على Mac عبر MLX، وعلى iPhone وMac عبر CoreML مع توليد رموز بالبثّ. مُصمَّم لخطوط أنابيب الصوت التي يوفّر فيها LLM على الجهاز "العقل" بين ASR وTTS.

جاهز لخطوط أنابيب الصوت

يتكامل Qwen3.5 Chat مع VoicePipeline في SpeechCore بوصفه مكوّن LLM في سلاسل ASR → LLM → TTS. توفّر بنية DeltaNet الهجينة انتباهًا فعّالًا بزمن خطّي للسياقات الطويلة.

بداية سريعة

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: "")
}

البنية المعمارية

Qwen3.5-0.8B نموذج هجين بـ 24 طبقة: 18 طبقة DeltaNet (انتباه خطّي مع تكرار قاعدة دلتا مبوَّبة gated delta rule وRMSNormGated) و6 طبقات GatedAttention (انتباه قياسي scaled dot-product). يُجري الواجهة الخلفية لـ MLX الاستدلال على وحدة معالجة الرسوم Metal بأوزان safetensors. وتستخدم الواجهة الخلفية لـ CoreML بنية نموذج مزدوج (prefill + decode) مُحسَّنة لـ Neural Engine. كلاهما يدعم ذاكرة KV cache مع prompt caching وأخذ عيّنات قابلًا للتهيئة (temperature، top-k، top-p، repetition penalty).

مدخلات/مخرجات النموذج

الاتجاهالاسمالشكلالوصف
إدخالinput_ids[1, seq_len]معرّفات الرموز (Int32)
إدخالattention_mask[1, seq_len]قناع الانتباه (Int32)
إدخالkv_cacheلكلّ طبقةحالة ذاكرة المفتاح-القيمة
إخراجlogits[1, 1, 151936]logits للرمز التالي (Float16)
إخراجkv_cache_outلكلّ طبقةذاكرة KV محدَّثة

متغيّرات النموذج

المتغيّرالتكميمالحجمالحوسبةHuggingFace
Qwen3.5-0.8B ChatINT4418 MBوحدة معالجة الرسوم Metal (MLX)aufklarer/Qwen3.5-0.8B-Chat-MLX
Qwen3.5-0.8B ChatINT8981 MBNeural Engine (CoreML)aufklarer/Qwen3.5-0.8B-Chat-CoreML

إعدادات أخذ العيّنات

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)
المعاملالافتراضيالوصف
temperature0.6العشوائية (0 = greedy، 1 = إبداعي)
topK50الإبقاء على أفضل K مرشّحًا
topP0.95عتبة أخذ عيّنات النواة nucleus
maxTokens512الحدّ الأقصى لرموز الردّ
repetitionPenalty1.1عقوبة على الرموز المكرَّرة
disableThinkingfalseتخطّي وضع thinking
maxThinkingTokens100سقف رموز thinking

حوار متعدّد الأدوار

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

إدارة الذاكرة

// 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()
نصيحة الذاكرة على iOS

على iPhone، تفريغ LLM قبل استدلال TTS يحرّر ~418 MB (INT4 MLX) أو ~981 MB (INT8 CoreML)، ممّا يمنع إنهاء العمليّة بـ jetsam عند تشغيل خطوط أنابيب كاملة ASR → LLM → TTS.

الأداء

الجهازPrefillDecodeرموز/ثانية
M2 Max~50ms~65ms/tok~15 tok/s
iPhone 16 Pro~1.5s~450ms/tok~2.2 tok/s

التحويل

تُحوَّل أوزان MLX من نقطة تفتيش Qwen3.5-0.8B الأصلية باستخدام برنامج تحويل MLX النصّي. وتستخدم نماذج CoreML برنامج تحويل مستقلًّا للنشر على Neural Engine. تتوفّر الأوزان المحوَّلة مسبقًا على HuggingFace في aufklarer/Qwen3.5-0.8B-Chat-MLX (INT4: 418 MB) وaufklarer/Qwen3.5-0.8B-Chat-CoreML (INT8: 981 MB).