أطلقنا سراحنا
swift-transformers منذ عامين (!) بهدف دعم مطوري Apple ومساعدتهم على دمج حاملي شهادات الماجستير المحلية في تطبيقاتهم. لقد تغير الكثير منذ ذلك الحين (لم تكن قوالب MLX والدردشة موجودة!)، وتعلمنا كيف يستخدم المجتمع المكتبة فعليًا.نريد مضاعفة حالات الاستخدام التي توفر معظم الفوائد للمجتمع، ووضع الأسس للمستقبل. تنبيه حرق: بعد هذا الإصدار، سنركز كثيرًا على MLX وحالات استخدام الوكيل 🚀
ما هو swift-transformers
swift-transformers هي مكتبة Swift تهدف إلى تقليل الاحتكاك للمطورين الذين يرغبون في العمل مع النماذج المحلية على منصات Apple Silicon، بما في ذلك أجهزة iPhone. وهو يتضمن الأجزاء المفقودة التي لم يتم توفيرها بواسطة Core ML أو MLX وحده، ولكنها مطلوبة للعمل مع الاستدلال المحلي. وهي توفر المكونات التالية:
Tokenizers. يعد إعداد المدخلات لنموذج اللغة أمرًا معقدًا بشكل مدهش. لقد بنينا الكثير من الخبرة مع لديناtokenizersمكتبات Python وRust، والتي تعتبر أساسية للنظام البيئي للذكاء الاصطناعي. أردنا أن نقدم نفس الأداء والتجربة المريحة إلى Swift. نسخة سويفت منTokenizersيجب أن يتعامل مع كل شيء نيابةً عنك، بما في ذلك قوالب الدردشة واستخدام الوكيل!Hub. هذه واجهة لـ Hugging Face Hub، حيث تتوفر جميع النماذج المفتوحة. فهو يسمح لك بتنزيل النماذج من Hub وتخزينها مؤقتًا محليًا، ويدعم التنزيلات الخلفية القابلة للاستئناف وتحديثات النماذج ووضع عدم الاتصال. فهو يحتوي على مجموعة فرعية من الوظائف التي توفرها مكتبات Python وJavaScript، مع التركيز على المهام التي يحتاجها مطورو Apple بشدة (على سبيل المثال، التحميلات غير مدعومة).ModelsوGeneration. هذه عبارة عن أغلفة لـ LLMs تم تحويلها إلى تنسيق Core ML. تحويلها خارج نطاق المكتبة (ولكن لدينا بعض الأدلة). بمجرد تحويلها، تجعل هذه الوحدات من السهل تشغيل الاستدلال معها.
كيف يستخدمه المجتمع
في معظم الأحيان يستخدم الناس Tokenizers أو Hub وحدات، وكثيرا ما على حد سواء. بعض المشاريع البارزة التي تعتمد عليها swift-transformers يشمل:
mlx-swift-examples، من شركة أبل. إنها في الواقع ليست مجرد مجموعة من الأمثلة، ولكنها قائمة بالمكتبات التي يمكنك استخدامها لتشغيل أنواع مختلفة من النماذج باستخدام MLX، بما في ذلك LLMs وVLMs (نماذج لغة الرؤية). إنه نوع مناModelsوGenerationالمكتبات ولكن لـ MLX بدلاً من Core ML – وهي تدعم العديد من أنواع النماذج مثل أدوات التضمين أو Stable Diffusion.- WhisperKit، بواسطة argmax. إطار عمل ASR (التعرف على الكلام) مفتوح المصدر، مُحسّن بشكل كبير لـ Apple Silicon. انها تعتمد على لدينا
HubوTokenizersوحدات. - FastVLM، من Apple، والعديد من العروض التوضيحية للتطبيقات الأخرى، مثل تطبيقنا الأصلي SmolVLM2.
ما الذي يتغير مع الإصدار 1.0
يشير الإصدار 1.0 إلى الاستقرار في الحزمة. يقوم المطورون ببناء تطبيقات على محولات Swift، ويتعرف هذا الإصدار الرئيسي الأول على حالات الاستخدام هذه ويجعل رقم الإصدار يتماشى مع هذا الواقع. كما أنه يوفر الأساس الذي يمكن من خلاله التكرار مع المجتمع لبناء المجموعة التالية من الميزات. هذه بعض التحديثات المفضلة لدينا:
TokenizersوHubهي الآن وحدات من الدرجة الأولى وأعلى مستوى. قبل الإصدار 1.0، كان عليك الاعتماد على الحزمة الكاملة واستيرادها، بينما يمكنك الآن الاختيار فقطTokenizers، على سبيل المثال.- بالحديث عن جينجا، نحن فخورون جدًا بالإعلان عن تعاوننا مع جون ماي (X) لإنشاء الإصدار التالي من مكتبته الممتازة Swift Jinja. لقد كان عمل جون بالغ الأهمية بالنسبة للمجتمع: فقد تولى بمفرده مهمة توفير مكتبة قوية لنماذج الدردشة التي يمكن أن تنمو عندما تصبح القوالب أكثر تعقيدًا. الإصدار الجديد أسرع بضع مرات (لا تمزح)، ويعيش هنا كـ
swift-jinja. - ولتقليل العبء المفروض على مستخدمي المصب بشكل أكبر، قمنا بذلك تمت إزالة أهداف CLI الخاصة بنا و
swift-argument-parserالتبعيةوالذي بدوره يمنع تعارض الإصدارات للمشاريع التي تستخدمه بالفعل. - وبفضل مساهمات شركة أبل، اعتمدنا واجهات برمجة تطبيقات ML الأساسية الحديثة مع دعم النماذج ذات الحالة (لتسهيل التخزين المؤقت لـ KV) والتعبيرية
MLTensorواجهات برمجة التطبيقات – يؤدي ذلك إلى إزالة آلاف الأسطر من عمليات الموتر المخصصة وأكواد الرياضيات. - الكثير من تمت إزالة الجزء الإضافي من سطح واجهة برمجة التطبيقات (API). لتقليل الحمل المعرفي والتكرار بشكل أسرع.
- الاختبارات هي أفضل وأسرع وأقوى.
- تعليقات التوثيق تمت إضافتها إلى واجهات برمجة التطبيقات العامة.
- سويفت 6 مدعوم بالكامل.
الإصدار 1.0 يأتي مع تغييرات API العاجلة. ومع ذلك، فإننا لا نتوقع مشاكل كبيرة إذا كنت من مستخدمي Tokenizers أو Hub. إذا كنت تستخدم مكونات Core ML الخاصة بالمكتبة، فيرجى الاتصال بنا حتى نتمكن من دعمك أثناء عملية النقل. سنقوم بإعداد دليل الترحيل وإضافته إلى الوثائق.
أمثلة الاستخدام
وإليك كيفية الاستخدام Tokenizers لتنسيق أداة استدعاء الإدخال لـ LLM:
import Tokenizers
let tokenizer = try await AutoTokenizer.from(pretrained: "mlx-community/Qwen2.5-7B-Instruct-4bit")
let weatherTool = [
"type": "function",
"function": [
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": [
"type": "object",
"properties": ["location": ["type": "string", "description": "City and state"]],
"required": ["location"]
]
]
]
let tokens = try tokenizer.applyChatTemplate(
messages: [["role": "user", "content": "What's the weather in Paris?"]],
tools: [weatherTool]
)
للحصول على أمثلة إضافية، يرجى مراجعة هذا القسم في الملف README ومجلد الأمثلة.
ماذا يأتي بعد ذلك
بصراحة، نحن لا نعرف. نحن نعلم أننا مهتمون جدًا باستكشاف MLX، لأن هذا هو النهج الحالي الذي يتبعه المطورون لبدء استخدام ML في التطبيقات الأصلية، ونريد المساعدة في جعل التجربة سلسة قدر الإمكان. نحن نفكر على غرار التكامل بشكل أفضل مع mlx-swift-examples بالنسبة إلى LLMs وVLMs، ربما من خلال عمليات المعالجة المسبقة وما بعد المعالجة التي يواجهها المطورون بشكل متكرر.
نحن أيضًا متحمسون للغاية بشأن الاستخدام الوكيل بشكل عام وMCP بشكل خاص. نعتقد أن تعرض موارد النظام لسير العمل المحلي سيكون 🚀
إذا كنت تريد متابعة هذه الرحلة أو ترغب في مشاركة أفكارك، فيرجى الاتصال بنا عبر شبكات التواصل الاجتماعي أو الريبو.
لم يكن بإمكاننا فعل هذا بدونك 🫵
نحن ممتنون للغاية لجميع المساهمين والمستخدمين للمكتبة على مساعدتكم وتعليقاتكم. نحن نحبكم جميعًا، ولا يمكننا الانتظار لمواصلة العمل معكم لتشكيل مستقبل الإنشاء على الجهاز! ❤️