الإصدار ما قبل الإطلاق / البناء المستمر: هذا بناء تجريبي، وليس إصدارًا مستقرًا.
ui : اكتشاف وتنزيل النماذج من HF Hub (#29584) * common : حل وسوم التنزيل وسرد الملفات الجانبية المخزنة مؤقتًا الآن تُحلَّا وسم بأسلوب Q4_0-mtp الملف الجانبي عندما لا يطابقه أي ملف نموذج، بحيث يقوم تنزيل مسودة منفردة أو mmproj بجلب الملف فعليًا. تُسرد الملفات الجانبية المخزنة مؤقتًا كمدخلات مستقلة حتى تبقى الحالة بعد إعادة التشغيل، وحذف مثل هذا الوسم يحذف الملف الجانبي فقط. Assisted-by: pi:zai-org/GLM-5.3 * ui : HTML خام معقّم اختياريًا في markdown إضافة خاصية allowHtml إلى MarkdownContent: يُعرض HTML الخام الموجود في الـ markdown بعد تعقيمه عبر DOMPurify بدلًا من تهريجه كنص حرفي. يبقى الوضع الافتراضي هو التهريق. Assisted-by: pi:GLM-5.3-Flash * ui : إضافة مكونات اكتشاف النماذج واجهة Discover: قائمة الكتالوج المنتقى مع بحثها وهيكلها التخطيطي، ولوحة التفاصيل مع الـ readme والبيانات الوصفية وإحصاءات Hub وخيارات التنزيل، وشريط تقدم التنزيل المستقل الذي يحل محل الشريط العادي. يضبط زر تنزيل التكميم حجم قائمته المحددة عبر مُشغِّل xs جديد، فتحصل القائمة على ذلك الحجم ومظهر الصندوق الباهت. تبقى الحزمة غير مكتملة عند فشل مستودع، بحيث يعيد الإدراج التالي المحاولة. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : وضع عرض الاكتشاف في مدير النماذج يكتسب مربع حوار المدير عرضه الثاني: عبارة الإجراء «اكتشاف النماذج» تُخفي الجدول تدريجيًا، وينزلق العنوان مع علامته البوصلة، وتظهر واجهة الاكتشاف تدريجيًا؛ ويُعيد زر السهم إلى الجدول. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash # تعارضات: # tools/ui/src/lib/components/ui/button/button.svelte * ui : إضافة إعداد Enable Discover Models تتحكم هذه العلامة في تصفح وتنزيل نماذج GGUF من HuggingFace، لذا تُعرَّف في طبقة الاكتشاف؛ ويقرأ البحث في شجرة المستودعات في طبقة المدير العليا قيمتها من هنا. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : استئناف تنزيلات النماذج من نقطة الإيقاف يحتفظ التنزيل المتوقف بملفه الجزئي بدلًا من حذفه، لذا يستأنف إعادة إرسال الوسم التنزيل من القرص. يحمل سجل التقدم الأول الآن إزاحة الاستئناف، وتنجو اللقطة المتوقفة إلى مدخل التنزيل المستأنف، ويتحقق الإيقاف فور طلب it. Assisted-by: pi * ui : تقديم التنزيلات في مقدمة قائمة الاكتشاف تسرد الشريط الجانبي للاكتشاف التنزيلات الجارية فوق النماذج المقترحة، وتتنحى أثناء تفعيل استعلام. يبقى التنزيل المتوقف في جدول المدير، حيث يُستأنف أو يُحذف. Assisted-by: pi * ui : جعل استئناف تنزيل متوقف يعمل كانت إعادة إرسال وسم تنزيل متوقف تصطدم بفحص "موجود بالفعل" في الموجِّه، لأن التنزيل المتوقف يُبقي مدخله بحالة DOWNLOADED حتى إعادة التحميل التالية: يُستبدل ويُستأنف الآن أي مدخل تنزيل لا يعمل. تحتفظ الواجهة بالصف المتوقف إذا استمر فشل الطلب، بدلًا من إسقاطه وجعله يبدو مكتملًا. Assisted-by: pi * ui : تذكّر تنزيلات النماذج غير المكتملة يُسمى الملف الجزئي وفق بصمة محتواه، لذا لا شيء على القرص يشير إلى النموذج الذي ينتمي إليه بعد إعادة تشغيل الموجِّه. يحتفظ الموجِّه الآن بوسوم التنزيلات التي بدأها، ويمحو الوسم عند اكتمال التنزيل أو حذفه، ويسرد ما تبقى كأنه لا يزال قيد التنزيل دون بدء أي شيء. تعتمد الواجهة تلك الوسوم كمتوقفة عند كل جلب للقائمة، بحيث يُظهر التحديث أو الفتح الجديد تنزيلًا غير مكتمل ويمكن استئنافه من الملفات الموجودة مسبقًا على القرص. Assisted-by: pi * ui : عرض حالة التنزيل المتوقف على شريته يظهر شريح التكميم المتوقف بحالة "متوقف" عند السكون، كما يعرض الشريح الجاري مؤشر دورانه، ويوفر إجراء الاستئناف عند التحويم. يحصل صف التنزيل في أداة الاختيار على إجراء «عرض في Discover» بجانب زر الإلغاء. Assisted-by: pi * ui : طي خيارات التنزيل افتراضيًا يبدأ أمر التنزيل القابل للنسخ مطويًا حتى تتقدم صفوف الخيارات؛ ويبقى توسيعه على بُعد نقرة واحدة. Assisted-by: pi * ui : استبعاد نماذج القرار من قوائم المركز تجيب نماذج القرار باحتمالات معايَرة بدلًا من النص، لذا لا يمكن لـ llama-ui تشغيلها: تحذف طبقة بيانات المركز المجلد الكتيّب (catalog) وكل بحث، باستخدام وسم نموذج القرار أو خط أنابيب تصنيف النصوص. Assisted-by: pi * ui : قراءة وسوم التنزيل كـ quant و sidecar الآن تُحلَّل وسم `:-` إلى quant و sidecar الخاص به بدلاً من رمز quant مبهم واحد، ويتولى ModelsService.draftSidecarsByRepo جمع مدخلات sidecar فقط من قائمة الموجِّه لكل مستودع، مستبدلاً النسخة المضمنة في مخزن النماذج. Assisted-by: pi * ui : تجميع تنزيلات المسودات تحت نموذجها الرئيسي تُجمَّع التنزيلات المتتبعة حسب المستودع: تقود الأوزان الرئيسية وتسافر مسودات sidecar داخل عنصرها كسطور فرعية مضغوطة، في المحدِّد، وقائمة الاكتشاف، وجدول المدير. أدوات النموذج الرئيسي توقف المجموعة كلها وتستأنفها وتلغيها، وتُحدِّد صفوف تنزيل المدير في جزء الإعداد. Assisted-by: pi * ui : التصرّف على التنزيلات المتتبعة من صفوف الجدول يمرِّر الجدول السطور الفرعية لمسودات مجموعاته إلى صفوف النماذج. إجراءات الصف تُتداول الإيقاف المؤقت والاستئناف تسلسلياً، ويعرض الصف الجاري زر Cancel download بينما يحتفظ الصف المتوقف بـ Delete from disk، وينسجم نص مربع التأكيد مع الحالة. Assisted-by: pi * ui : منح التنزيلات جزء إعداد خاصاً بها يفتح اختيار تنزيل متتبَّع الجزء بوضع تنزيل: تقدّم حي مع الإيقاف المؤقت والاستئناف والإلغاء، وSee in Discover، بدلاً من البيانات الوصفية وإجراءات التحميل التي لا يستطيع نموذج بلا ملفات تقديمها. Assisted-by: pi * ui : جعل تفاصيل الاكتشاف ذاتية الجلب ومتجاوبة يتولى ModelsDiscoverDetailsContainer عمليات جلب التفاصيل والشجرة وreadme حتى تستطيع المضيفات خارج طريقة عرض الاكتشاف تصيير الجزء، ويتكيّف تخطيط التفاصيل مع الأجزاء الضيقة عبر استعلامات الحاوية بدلاً من نقاط توقف نافذة العرض. Assisted-by: pi * ui : تنزيل مسودة مطابقة مع النموذج الرئيسي يجرّ تنزيل quant الرئيسي الآن مسودة مطابقة quant من أكثر الأنواع المفضلة التي يوفّرها المستودع (DFlash قبل MTP)، بنمط fire-and-forget، ليكون فك الترميز التخميني جاهزاً عند وصول الرئيسي. تبقى رقائق المسودة اليدوية متاحة؛ الخيارات الصف يتقلّص أيضاً إلى عمود واحد في الأجزاء الضيقة. Assisted-by: pi * ui : إبقاء الاكتشاف معطلاً افتراضياً وربطه بإعداد الـ hub يبدأ Discover Models دون تحديد. تفعيله يشغّل إعداد Hugging Face Hub وإيقافه يعيده إلى وضع الإيقاف، فلا يكذب مربع الاختيار أبداً؛ ومع إيقاف الاكتشاف يبقى إعداد الـ hub متاحاً بمفرده لبيانات العرض. تُصحَّح الحالة المخزنة وحالة إعادة الضبط بالطريقة نفسها عند التحميل. Assisted-by: pi * ui : فتح مربع حوار إدارة النماذج على طريقة عرض المدير يفتح المربع الآن على المدير بدلاً من العودة إلى آخر طريقة عرض، ولا تزال مدخلات الاكتشاف تصل إلى طريقة عرض الاكتشاف ما دام الإعداد يسمح، وتتبع واجهات الاكتشاف حالة الإعداد. Assisted-by: pi * ui : إتاحة مساحة لحلقة تركيز البحث في الاكتشاف تُدخَل شريط البحث الثابت من حواف اللوحة حتى تبقى حلقة التركيز داخل حاوية التمرير، وتتمرر الصفوف خلف شريط معتم بدلاً من خلاله. Assisted-by: pi * common: تثبيت أسماء sidecar في القائمة وحذف الأجزاء غير المكتملة رمز sidecar داخلي أو لاحق هو أمر غامض: رؤوس المسودات تستخدمه (Model-MTP-BF16.gguf)، وكذلك النماذج الكاملة ذات الرؤوس المضمّنة (Model-Q8D-MTP.gguf). هذا الاسم هو sidecar فقط بجانب أوزان رئيسية خالية من الرموز من العائلة نفسها، بينما mmproj أو imatrix في أي موضع من الاسم، أو رمز بادئ، يحسم الأمر وحده (mmproj_f16.gguf). وسم quant يحمل دائماً عدد بتاته، فوسم sidecar مسمّى بلا quant (mtp-Model-it.gguf) يحصل على الوسم المجرد: القائمة والخطة والإزالة تستخدمه جميعها. يتحلل وسم imatrix إلى خانة خطة خاصة به، يُنزَّل لكن لا يُوصَل أبداً إلى المعاملات. يحلل remove الوسم كما يفعل التنزيل ويحذف الملفات الجزئية لكل كائن مخطط، فإلغاء تنزيل جارٍ أو التخلي عن تنزيل تُرك غير مكتمل من تشغيل سابق لا يترك شيئاً على القرص. يمرر الموجِّه رمزه ويحرر قفله حول الاستدعاء، ويسجّل التنزيلات غير المكتملة بكتابة ذرية. ينجح llama download على خطة sidecar فقط ويطبع مساراته. * ui : نقل طرق عرض مربع الحوار وحالات المسودات إلى قوائم enum وثوابت تصبح طرق عرض مربع حوار النماذج قائمة ModelsDialogView، وتنضم حالات السطر الفرعي للمسودة إلى ModelRowDownloadState، وينتقل تلاشي العرض وإعادة ضبط النسخ إلى ثوابت ui، وتأتي علامات بوصلة مربع الحوار من DISCOVER_ICON. Assisted-by: pi * ui : حذف واجهة الاكتشاف غير المستخدمة يغادر التوأم الميت openDiscoverModels، وفاصل الأوامر المُعلَّق، وonClose غير المستخدم لجزء التفاصيل وزر الإغلاق في رأسه، وتحويل النوع الزائد؛ وتنضم ملاحظات نسخ الأمر إلى ثابت إعادة الضبط المشترك. Assisted-by: pi * ui : تقليص تعليقات خيارات التنزيل وإبراز قالب المحادثة يتقلص إسهاب التعليقات الذي حملته لوحة الخيارات ورقائقها إلى «لماذا» غير البديهي، ويُصيَّر مربع حوار قالب المحادثة عبر SyntaxHighlightedCode كـ jinja بدلاً من كتلة pre عادية. Assisted-by: pi * common: ملف .gguf فقط هو sidecar، وmmproj/imatrix ككلمات كاملة ملف غير GGUF مسمّى كـ sidecar (quantization-mmproj-Q8_0.json) يُختار بوصفه mmproj، وكلمة sidecar داخل كلمة أطول من اسم نموذج (Phi-2-OmniMatrix.i1-Q4_K_M.gguf) تُسقط النموذج. * ui: إزالة تكرار شارات مسودة sidecar لكل quant كانت شارات مسودة sidecar تُفرَّد بحسب النوع والمستودع دون quant، فمع مسودة مخزنة عند quantين نجت شارة واحدة فقط، وحذف الـ quant الرئيسي الآخر لم يجد شارة لإزالة sidecarه معه. كما يستعيد وثيقة getDownloadEntries المفقودة عندما هبطت طريقة المجموعات فوقها. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: تبنّي حالة التنزيل غير المكتمل وحذف سجل paused-ids كان المخزن يستنتج تنزيلاً غير مكتمل من مدخلة تنزيل لم يحتفظ بها حالة محلية، فقرأ تنزيلاً يجري في علامة تبويب أخرى على أنه متوقف وعرض استئنافاً يرفضه الخادم. تحمل القائمة الآن حالة "incomplete"، فيعتمد التبنّي عليها مباشرة. لم تعد المعرّفات المتوقفة تحتاج إلى البقاء في localStorage: الخادم يتذكرها عبر إعادة التشغيل، وكانت لقطة التقدم قديمة على أي حال بعد إعادة التحميل. يتم إزالة مفتاح localStorage القديم. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: مطابقة الكم لقوائم الإيقاف المؤقت والإلغاء المتتالية كانت عمليات الإيقاف المؤقت والاستئناف والإلغاء تنتقل بالتتالي إلى كل sidecar مسودة في المستودع بينما كان الحذف يستهدف فقط المطابقة كميًا فقط، فإلغاء تنزيل Q4_0 كان يقتل أيضًا مسودة Q8_0 تخص كمًّا رئيسيًا آخر. الآن كل تتالٍ يعمل على المسودات المطابقة كميًا، بما يطابق ما يأخذه الحذف معه. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: طي ترميز سطر المسودة الفرعي المكرر كرّر فرعا "المنزّل" و"قيد التنفيذ" نفس ترميز الموصل والتسمية والشارة بالضبط؛ كتلة واحدة بذيل شرطي تحافظ على تزامن الحالتين. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: إزالة الأنماط المتموضعة من html بطاقة النموذج بعد التعقيم ظلت سمة style مسموحة لمخرجات KaTeX، مما سمح لبطاقة طرف ثالث برسم طبقة ثابتة فوق التطبيق. يُسقط خطاف التعقيم القيمتين position:fixed و position:absolute ويترك أنماط تخطيط KaTeX دون مساس. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: تشغيل جلب جبل الاكتشاف مرة واحدة وإعادة استخدام مساعد repoOf المشترك كان fetch() يبدّل علامة التحميل الخاصة به بشكل متزامن داخل تأثير الجبل، مما أعاد تشغيل الجلب عند كل تبديل وأعاد محاولة مستودعات الكتالوج الفاشلة بلا نهاية؛ الآن يوقف التأثير تتبع الاستدعاء. تستسلم النسخة المحلية من repoOf والاستيراد المكرر للخدمات لمساعدي المشتركين. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: تضييق خريطة نوع المواصفات إلى مسودات sidecar حمل SPEC_TYPE إدخالات فارغة لملفات sidecar المساعدة التي لا يُفهرس بها أبدًا؛ الآن الخريطة ومكوّن الأمر يكتبان نوع الشارة كمسودة sidecar عبر مساعد draftBadgeOf بدلًا من التحويل القسري. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: تسمية وسوم نموذج القرار ومفاتيح ذاكرة markdown المؤقتة ينتقل وسم المحور لنموذج القرار ووسم خط الأنابيب إلى huggingface الثوابت بجانب وسوم الـ pipeline الأخرى، وبادئات ذاكرة التخزين المؤقت لتحويلات markdown تحصل على أسماء بدلاً من رموز من حرف واحد مجردة. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: قراءة إعداد الاكتشاف من خلال فحص صحة واحد كانت ثلاثة مواضع تقرأ الإعداد بـ !== false وواحد بـ Boolean()؛ والآن تقرأه المواضع الأربعة جميعها بالطريقة نفسها. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: مقارنة عرض حوار النماذج مع قيمته في الـ enum كانت القالب يقارن حالة العرض مع النص الحرفي 'manage' في ثلاثة مواضع بينما كان السكربت يستخدم الـ enum. Assisted-by: pi (zai-org/GLM-5.3-Flash) * nit: إزالة `+` قبل شارة draft sidecar * server: سرد التنزيلات غير المكتملة كغير مكتملة كان التنزيل الذي لم يكتمل يُبلَّغ عنه بحالة "downloading"، وهي الحالة نفسها التي يحملها تنزيل جارٍ، فلا يستطيع العميل التمييز بين تنزيل يعمل وآخر متوقف. الوسوم المحفوظة في unfinished-downloads تُسرد الآن تحت حالة "incomplete" مخصصة، دون نسخة (instance). Assisted-by: pi (zai-org/GLM-5.3-Flash) * server: تنزيل نموذج مع ملفاته الجانبية (sidecars) كما تفعل -hf تعود المعالجة (Resolution) إلى master. يأخذ POST /models أنواع الملفات الجانبية المراد سحبها مع النموذج (mmproj افتراضياً) ويستلم الابن الخاص بالتنزيلها كأعلام -hf، فيختار الخادم الملفات. يسرد /models النماذج الحقيقية فقط، كل نموذج مع الملفات الجانبية الموجودة له على القرص، وتحافظ التنزيلات غير المكتملة على ملفاتها الجانبية عبر إعادة التشغيل. يحتفظ التنزيل المتوقف بملفاته الجزئية للمحاولة التالية، وتمسحها DELETE من خلال الخطة نفسها التي يتبعها التنزيل. * ui: تنزيل الملفات الجانبية كمعاملات لنموذجها تحتفظ خيارات التنزيل برقائقها (chips)، لكن الرقاقة لم تعد ترسل وسم ملف جانبي: يقوم المخزن بترجمتها إلى نموذجها وأنواع الملفات الجانبية المراد سحبها، وتأخذ رقاقة الكمّية (quant) مسودتها المرافقة في التنزيل نفسه، وتأتي شارات draft من الملفات الجانبية التي يسردها كل نموذج مخزَّن مؤقتاً. يضيف الخادم الملفات الجانبية التي ينقصها نموذج مخزَّن مؤقتاً عندما يُرسَل مرة أخرى، وتزيل DELETE ملفاً جانبياً واحداً من نموذج مخزَّن مؤقتاً. * ui : عكس بحث السيرفر عن الـ sidecar في شارات المسودة (draft badges) يحل السيرفر الـ sidecar عبر الرمز `-` الحساس لحالة الأحرف في نفس مجلد الأوزان. كانت الواجهة تطابق الرمز بمرونة، لذا يمكن أن تقدم شارة مسودة لا يسحبها السيرفر أبدًا. Assisted-by: DeepSeek-V4.1-Flash * ui : إرسال أنواع الـ sidecar الخاصة بالنموذج مع التنزيل الخاص به يحتفظ المتجر بتنزيل واحد لكل نموذج: أنواع الشريحة (chip) ترافق الـ sidecars الخاصة بالنموذج نفسه، ولم يعد صف التنزيل يتوسع إلى صف واحد لكل sidecar. شارات المسودة لا تحمل كمًّا (quant) خاصًا بها بعد، لذا لا يُوسم sidecar لنموذج مخزّن مؤقتًا أبدًا بكمّ النموذج. Assisted-by: DeepSeek-V4.1-Flash * ui : دمج مسودة الكمّ في شريحة التنزيل الخاصة به شريحة واحدة لكل كمّ، مسودتها موسومة داخلها وحجمها يغطي كلا الملفين. المسودة هي الملف الذي سيختاره السيرفر: نفس المجلد، الكمّ الدقيق، وإلا أقرب عمق بت، بحيث يمكن لنموذج 4-بت أن يقترن برأس 16-بت. Assisted-by: DeepSeek-V4.1-Flash * ui : إزالة صفوف تنزيل المسودة من المدير والمحدد التنزيل صف واحد لكل نموذج من جديد: المسودات ترافقه، والصفوف تقرأ الـ sidecars الموجودة على القرص من القائمة بدلًا من إقران مدخلات الـ sidecar بنموذجها. تعمل الإيقاف المؤقت والاستئناف والإلغاء على تنزيل النموذج نفسه. Assisted-by: DeepSeek-V4.1-Flash * ui : إبقاء قائمة التنزيل في صفحة الاكتشاف صفًا واحدًا لكل نموذج تتقدم القائمة بصف واحد لكل نموذج قيد التنزيل، مع sidecars الخاصة به كسطور فرعية. لا تُوسم الصف إلا بأنواع المسودة التي يستطيع السيرفر حلّها، فلا تعيش شارة أطول من الملف الذي سيختاره بحثها. Assisted-by: DeepSeek-V4.1-Flash * ui : إبقاء شرائح صفحة الاكتشاف مقروءة في الوضع الداكن كانت شرائح البيانات الوصفية وزر قالب المحادثة ورابط View on Hugging Face تحمل حدودًا باهتة بلا سطح خلفي فوق خلفية مربع الحوار، فكانت شبه غير مرئية. تأخذ الآن سطح الزر الثلاثي، وأيقوناتها تتغير مع size-* حتى لا تلمسها القاعدة الأساسية للنوع. Assisted-by: DeepSeek-V4.1-Flash * ui : حمل المسودة خيارات التنزيل شريحة واحدة لكل كمية رئيسية، وشارة مسودتها موضوعة عليها وحالة تنزيل الشريحة تغطي كلا الملفين. تجلس المسودات خلف مربع اختيار اختياري مع منتقٍ للنوع مضمّن، وكل صف يفتح أمره الخاص: يثبّت كمية الصف ويسمّي نوع المسودة فقط، لذا -hfd اختفت. Assisted-by: DeepSeek-V4.1-Flash * ui : محاذاة هيكل التفاصيل مع الجزء المحمّل نفس الهامش الداخلي الجذري وسياق الحاوية مثل العرض المحمّل، حتى تستجيب استعلامات الحاوية بالمثل. تعلو بطاقة خيارات التنزيل كتلها بدلًا من نفسها، ويحصل ملف read-me على بطاقته، ويحل سطر وصف محل فقرة الكتالوج. Assisted-by: DeepSeek-V4.1-Flash * common : إسقاط الجزئيات التابعة لملف جانبي مُزال كانت إزالة ملف جانبي وحده تترك ملفات .downloadInProgress التي خطط لها التنزيل في blobs/. تُنظّف الإزالة الآن عبر نفس الخطة التي يتبعها التنزيل، ويغطي الاختبار مسودة منتهية بجوار أخرى غير منتهية، تُحذف جزئية الثانية بينما يحتفظ النموذج بملفاته. Assisted-by: DeepSeek-V4.1-Flash * server : تسمية سبب رفض التنزيل كان النموذج الذي يجري تنزيله بالفعل، أو الذي يعمل حاليًا، يجيب بـ"موجود بالفعل". يقول الآن أيهما: "يجري تنزيله بالفعل"، أو "يعمل حاليًا، ألغِ تحميله أولًا"، وكلاهما قبل فحص قابلية الاستئناف. يغطي اختبار الموجّه الحالتين. Assisted-by: DeepSeek-V4.1-Flash * ui : إرسال التنزيل مرة واحدة لكل نقرة كانت نقرتان سريعتان على نفس الشريحة تُرسلان الطلب مرتين، وكانت الإجابة الثانية "موجود بالفعل". يتتبع المخزن النموذج كقيد الانتظار، ويعود مبكرًا بينما هو قيد الانتظار أو قيد التنفيذ، ويقرأه كقيد التنفيذ قبل إجابة الخادم، فتُظهر الشريحة التنزيل فورًا. يثبّت اختبار العميل الجديد المسارات: طلب POST واحد لكل نقرة مزدوجة، وقراءة الشريحة الحالة "منزّل" بمجرد أن يبلّغ القائمة عن النموذج، واستئناف يحفظ ملفاته الجانبية، وإلغاء يسقط التنزيل كاملًا، وإعادة تحميل تستعيد الحالة المتوقفة. Assisted-by: DeepSeek-V4.1-Flash * ui : الحفاظ على ارتفاع صف تنزيل عادي كارتفاع غيرها كان غلاف الخطوط الفرعية لصف التنزيل يُعرض حتى وهو فارغ، فجعل هامشه الداخلي الصف أطول من العادي وجلس شريط التقدم المتراكب في تلك الشريط الفارغ. يُعرض الآن مع وجود خطوط فرعية فقط، في المُنتقي وفي قائمة الاكتشاف، ويتخذ صف المُنتقي الهامش الداخلي للهاتف الذي يملكه جيرانه. Assisted-by: DeepSeek-V4.1-Flash * ui : وضع شارة على مسودة المستودع مرة واحدة كانت وسيطات نموذج محمّل وقائمة نموذج مخزّن تبلّغان المسودة نفسها بكلمات مختلفة، إحداهما بكمية الملف والأخرى بالنوع وحده، فأبقى الدمج كليهما وأظهر صف المستودع النوع نفسه مرتين. تُدمج الشارات حسب النوع الآن، وتفوز وسيطات الأرجس لأنها تعرف الكمية، ويثبّت الاختبار المصدرين لمستودع حقيقي. Assisted-by: DeepSeek-V4.1-Flash * server : الإبلاغ عن الملفات الجانبية لإعداد مسبق أو تنزيل في الطريق النموذج الذي يسمّيه الإعداد المسبق أيضًا مسجّل كإعداد مسبق، فلم تُبلَّغ مسوداته قط ولم تستطع أي صف وضع شارة عليها. والتنزيل في الطريق لم يبلّغ عن شيء كذلك، مع أن سجل الأنواع التي يسحبها موجود هناك: تتفوق تلك الأنواع على الخطة الآن، وتُحل الخطة عبر hf-repo الخاص بالإعداد المسبق، ويبقى مجلد models خارج الأمر. Assisted-by: DeepSeek-V4.1-Flash * ui : وضع شارة على مسودات تنزيل وفتح نموذجه من الصف المسودة التي ما زالت تُنزّل تضع الشارة على معرّف النموذج الآن، كما تفعل المسودة المستقرة، بينما تحتفظ المسودة على القرص بخطها الفرعي المحدّد. يفتح الصف نفسه النموذج، وخانة الحالة بجواره توقف أو تستأنف، ويعالج المدير التركيز على صف تنزيل فتُفتح لوحته. Assisted-by: DeepSeek-V4.1-Flash * common : الإبلاغ عن ملف جانبي مُزال لم يكن لديه سوى جزئية كانت إزالة ملف جانبي وحده تسقط نتيجة تنظيف الجزئية، فكان الملف الجانبي الذي استقر فقط كـblob بصيغة .downloadInProgress يجيب بـfalse ولم يكن لدى الواجهة سبب لإعادة الجلب. تُدمج نتيجة التنظيف في القيمة المُعادة الآن، ويغطي الاختبار إزالة جزئية فقط. Assisted-by: DeepSeek-V4.1-Flash * ui : تجاهل إيقاف مؤقت بينما طلب POST للتنزيل ما زال في الطريق تُقرأ الشريحة كأنها تنزّل قبل إجابة الخادم، فكانت نقرة ثانية سريعة تُلغي تحميل نموذج لم يبدأ وتترك المخزن لا قيد التنفيذ ولا متوقفًا مؤقتًا. يعود الإيقاف المؤقت مبكرًا بينما POST معلّق، قبل أن يمس الخلاصة أو علامة الإيقاف. يحتفظ اختبار العميل بطلب POST مفتوحًا ويثبّت ذلك. Assisted-by: DeepSeek-V4.1-Flash * ui : عرض مسودة مفقودة كشريحة خاصة بها النموذج الموجود على القرص دون مسودته لم يكن لديه طريقة لإضافتها: كانت شريحة الكمية تحمل المسودة، فتُقرأ كتنزيل لكليهما. تلتزم شريحة الكمية بحالتها الخاصة الآن، ولا تظهر مسودتها المرتبطة إلا أثناء مرافقتها أو وجودها على القرص، والكمية المنزّلة التي تنقصها مسودتها تحصل على شريحة خاصة بها - شارة، وحجم، وتنزيل - ترسل النموذج بذلك النوع، فيحفظ الخادم الملفات الموجودة بالفعل ويسحب المسودة. Assisted-by: DeepSeek-V4.1-Flash * server : سرد تنزيل جانبي متوقف بالملفات الموجودة على القرص النموذج على القرص الذي يتوقف تنزيله الجانبي يحفظ سجله غير المنتهي، وكان السرد يبلّغ عن الأنواع التي تخطط لها السجل وكأنها على القرص: فتحققت الواجهة من مسودة لم تستقر قط ولم تعرض طريقة لإضافتها. تمثل الأنواع المخطط لها الآن فقط أثناء سير التنزيل. * chore: Clean up comments * server : سرد الملفات الجانبية فقط لنموذج يُحل من مستودع HF الإعداد المسبق على ملف محلي ليس لديه مستودع HF، ومع ذلك حلّ السرد اسمه كواحد: ألقت الخطة خطأ على تنسيق المستودع غير الصالح وفشل GET /models لكل نموذج. تأتي الملفات الجانبية الآن من المستودع الذي يسميه إعداد مسبق أو يُسرد تحته نموذج مخزّن، ويسرد الملف المحلي دونها. * common : إصلاح انحدار إلغاء التنزيل Signed-off-by: Adrien Gallouët * common : الحفاظ على جزئيات النموذج عند إزالة الملفات الجانبية Signed-off-by: Adrien Gallouët * server : جدول ملفات جانبي واحد وصنف للتنزيلات غير المنتهية تلبيةً لمراجعة @ggerganov. تعيش الأنواع الجانبية في جدول واحد في common/download، يربط كل اسم بتنزيله option وملف الخطة؛ ويتحقق الخادم من الصحة، ويبني خياراته، ويعرض ملفات sidecar المخزّنة مؤقتًا من خلاله بدلًا من قوائمه الخاصة. تنتقل التنزيلات غير المكتملة إلى server_unfinished_downloads، وهو سجل يملكه mutex خاص به وبنية (struct) لكل مدخل، وتكشفه server_models عبر unfinished_downloads_get وunfinished_downloads_remove. * common: جدول sidecar واحد، وإزالات تحافظ على الملفات المشتركة تتبع المعالجة (resolution) والعرض المخزّن مؤقتًا والإزالة جدولًا واحدًا لأنواع sidecar، بحيث يُعرَّف النوع مرة واحدة بكلمة ملفه المفتاحية، وما إذا كان مسودة، وoption الخاص به وملف خطته. يقرأ الخادم الجدول نفسه لأنواعه المقبولة، وsidecars الافتراضية، وأعلام الأبناء. إزالة وسم (tag) تحافظ على الملفات التي لا يزال وسم مخزّن آخر يحمّلها، مثل mmproj مسمّى باسم الـ quant المُزال. أما ملف sidecar الذي يُزال وحده فيُحذف لكل وسم يعالجه. يسجّل التنزيل غير المكتمل المسارات الدقيقة لأجزائه الجزئية عند بدئه. تحذف الإزالة تلك الأجزاء دون سؤال الـ hub، وتحافظ على أي جزء يكتبه أيضًا تنزيل مسجّل آخر. يؤخذ السجل مرة واحدة بمجرد إنشاء العملية الابن، وتُحذف الملفات تحت قفل النماذج (models lock)، بحيث لا يمكن أن يبدأ تنزيل للوسم نفسه أثناء إزالتها. * server: إسقاط الأجزاء الجزئية القديمة ورفض وسم لا يعالج أي ملف تسجيل تنزيل مرة أخرى يحذف الأجزاء الجزئية للسجل السابق التي لم يعُد مخطط الجديد يكتبها، مثل تلك الخاصة بمراجعة hub أقدم أو لملف sidecar تركه الطلب الجديد جانبًا. يُرفض الوسم المُرسل الذي لا يعالج أي ملف من المستودع قبل بدء التنزيل. وتتبع إزالة نموذج مسارًا واحدًا، سواء كان إعادة التحميل قد محت مدخله أثناء الانتظار أم لا. * server: إصلاح سباق CI بين اختبارات تنزيل الـ router تعمل عمال pytest بالتوازي على مخزن مؤقت مشترك واحد، لذا يمكن لاختبار تنزيل أن يجد ملفًا جلبه للتو اختبار آخر ويرى لا تقدمًا، أو أن يبدأ من سجل التنزيلات غير المكتملة الذي كتبه اختبار آخر. يعمل كل اختبار تنزيل الآن على مخزن مؤقت فارغ خاص به. * server: رفض DELETE لاسم غير معروف واتخاذ قرار التنزيلات في load() كانت عملية DELETE لاسم ليس نموذجاً ولا تنزيلاً مسجلاً تذهب إلى common_download_remove، وبدون وسم كانت تمحو ذاكرة المستودع المؤقت بالكامل، بما في ذلك ملفات quant محمّل أو تنزيل قيد الطريق. مثل هذا الاسم يُعد الآن غير موجود، كما كان من قبل. كان POST الذي ينزّل فوق إدخال موجود يتحقق من حالته خارج القفل، فكان تحميل نفس النموذج في الأثناء يقتل نسخته. تجري الفحوصات الآن في load()، تحت القفل، مباشرة قبل الإنشاء (spawn). ينطبق زمن التحميل الوهمي للاختبارات على تحميلات النماذج فقط، لأن عامل التنزيل لا يحمّل شيئاً. * server: إضافة incomplete_sidecars إلى واجهة /models API كان sidecar أُضيف إلى نموذج مخزّن مؤقتاً ثم أُوقف يحتفظ بسجله، لكن القائمة كانت تعرض النموذج المكتمل فقط، فكانت واجهة مستخدم جديدة تفقد معلومة الإيقاف المؤقت. يحمل إدخال النموذج الآن incomplete_sidecars، أي الأنواع التي لم يكتبها تنزيله غير المكتمل بعد؛ يعيد POST مع النوع استئناف واحد منها، وDELETE معه يُسقط الجزئي الخاص به. * common: إسقاط الجزئي المحفوظ عندما يتلقى الاستئناف 416 الآن وبعد أن تتجاوز الملفات الجزئية بين المحاولات، فإن جزئياً قديماً أو مكتملهاجعل كل إعادة محاولة تفشل بنفس الخطأ 416. احذفه حتى تتمكن المحاولة التالية من البدء من الصفر. Signed-off-by: Adrien Gallouët * common: إسقاط الجزئي المحفوظ عندما يتلقى الاستئناف 200 الخادم الذي يتجاهل النطاق يجيب بـ 200 على الاستئناف، ويفشل الجزئي المحفوظ عندها في كل محاولة بالطريقة نفسها التي يفعلها 416. أسقطه أيضاً، حتى تبدأ المحاولة التالية من جديد دون نطاق. * server: رفض تنزيل يشارك ملفاً جزئياً مع تنزيل قيد الطريق تنزيلان لـ quants يتشاركان ملفاً، سواء كان mmproj أو mtp مختاراً بأقرب البتات، كانا يضيفان إلى نفس الملف الجزئي ويعيدان تسمية ملف بايتات متداخلة. يُرفض الآن تنزيل تخططه كتابة ملف جزئي يكتبه تنزيل جارٍ أيضاً حتى ينتهي ذاك. * common: التحقق من etag المحفوظ قبل استئناف تنزيل جزئي قبل الاستئناف، قارن etag المحفوظ مع الجزئي إلى الملف الذي يخدمه الخادم الآن. إذا كان مفقودًا أو مختلفًا، ابدأ من جديد، حتى لا يمزج التنزيل المستأنف أبدًا وحدات بايت من نسختين من الملف. Signed-off-by: Adrien Gallouët --------- Signed-off-by: Adrien Gallouët Co-authored-by: Pascal Co-authored-by: Adrien Gallouëtالموقع الإلكتروني: - https://llama.app
الشهادات (Attestations): - https://github.com/ggml-org/llama.cpp/attestations/56975123
ماك أو إس / آي أو إس: - ماك أو إس Apple Silicon (arm64) - ماك أو إس Apple Silicon (arm64، مع تمكين KleidiAI) مُعطَّل - ماك أو إس Intel (x64) - آي أو إس XCFramework
لينكس: - أوبونتو x64 (CPU) - أوبونتو arm64 (CPU) - أوبونتو s390x (CPU) - أوبونتو x64 (Vulkan) - أوبونتو arm64 (Vulkan) - أوبونتو x64 (CUDA 12) - مكتبات CUDA 12.8 - أوبونتو x64 (CUDA 13) - مكتبات CUDA 13.4 - أوبونتو arm64 (CUDA 13) - مكتبات CUDA 13.4 - أوبونتو x64 (ROCm 10.0) - أوبونتو x64 (OpenVINO) - أوبونتو x64 (SYCL FP32) - أوبونتو x64 (SYCL FP16) - لينكس arm64 (Snapdragon: CPU، Adreno GPU، Hexagon NPU) - دليل الإعداد
أندرويد: - أندرويد arm64 (CPU) - أندرويد arm64 (Snapdragon: CPU، Adreno GPU، Hexagon NPU) - دليل الإعداد
ويندوز: - Windows x64 (CPU) - Windows arm64 (CPU) - Windows arm64 (OpenCL Adreno) - Windows x64 (CUDA 12) - ملفات CUDA 12.4 DLLs - Windows x64 (CUDA 13) - ملفات CUDA 13.4 DLLs - Windows arm64 (CUDA 13) - ملفات CUDA 13.4 DLLs - Windows x64 (Vulkan) - Windows arm64 (Vulkan) - Windows x64 (OpenVINO) - Windows x64 (SYCL) - Windows x64 (ROCm 10.0)
openEuler: - معطّل - openEuler لمعمارية x86 (310p) - openEuler لمعمارية x86 (910b، ACL Graph) - openEuler لمعمارية aarch64 (310p) - openEuler لمعمارية aarch64 (910b، ACL Graph)
واجهة المستخدم: - واجهة المستخدم