
مختبر أبحاث أمنية: إعادة إنتاج مُتحكَّم بها لثغرة CVE-2024-4254 (GHSA-fc78-c36r-cc59) — تنفيذ كود/سحب فرع في deploy-website.yml داخل gradio-app/gradio @ d4c503a
أداة بحث آلية — ليست المشروع الأصلي.
هذا المستودع عبارة عن مختبر مؤقت تم بناؤه بواسطة نظام آلي لأطروحة ماجستير في جامعة لافال حول إعادة إنتاج ثغرات سير عمل GitHub Actions المنشورة. وهو لقطة حرفية من
gradio-app/gradioعند الالتزامd4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02)، ويُعاد توزيعه بموجب ترخيص ذلك المشروع نفسه، الذي تم تضمين ملفه دون تغيير في هذه اللقطة.المشروع الأصلي ليس مشاركًا، ولا يُستهدف أبدًا، والثغرة المدروسة هنا عامة بالفعل. كل سر ومتغير في هذا المستودع هو قيمة وهمية مولّدة عشوائيًا — لا توجد أي بيانات اعتماد حقيقية موجودة. مراجع الإجراءات وصور المشغّل مثبتة على ما تم حله في 2024-08-02؛ راجع
pinning.mdفي مخرجات النظام الآلي لمعرفة كل تغيير تم إجراؤه على اللقطة.الأسئلة أو الاعتراضات: [email protected]
Gradio هي حزمة Python مفتوحة المصدر تتيح لك بناء عرض توضيحي أو تطبيق ويب لنموذج التعلم الآلي أو واجهة برمجة التطبيقات أو أي دالة Python عشوائية بسرعة. يمكنك بعد ذلك مشاركة رابط العرض التوضيحي أو تطبيق الويب في بضع ثوانٍ فقط باستخدام ميزات المشاركة المدمجة في Gradio. لا حاجة لخبرة في JavaScript أو CSS أو استضافة الويب!
يتطلب الأمر بضعة أسطر فقط من Python لإنشاء عرض توضيحي جميل مثل العرض أعلاه، فلنبدأ 💫
المتطلب الأساسي: يتطلب Gradio Python 3.8 أو أحدث
نوصي بتثبيت Gradio باستخدام pip، المضمن افتراضيًا في Python. قم بتشغيل هذا في الطرفية أو موجه الأوامر:
pip install gradio
[!TIP] من الأفضل تثبيت Gradio في بيئة افتراضية. يتم توفير تعليمات التثبيت التفصيلية لجميع أنظمة التشغيل الشائعة هنا.
يمكنك تشغيل Gradio في محرر الأكواد المفضل لديك، أو Jupyter notebook، أو Google Colab، أو أي مكان آخر تكتب فيه Python. لنكتب أول تطبيق Gradio لك:
import gradio as gr
def greet(name, intensity):
return "Hello " * intensity + name + "!"
demo = gr.Interface(
fn=greet,
inputs=["text", "slider"],
outputs=["text"],
)
demo.launch()
[!TIP] نقوم بتقصير الاسم المستورد من
gradioإلىgrلتحسين قابلية قراءة الكود. هذا اصطلاح واسع الانتشار يجب عليك اتباعه حتى يتمكن أي شخص يعمل مع كودك من فهمه بسهولة.
الآن، قم بتشغيل الكود الخاص بك. إذا كتبت كود Python في ملف باسم، على سبيل المثال، app.py، فستقوم بتشغيل python app.py من الطرفية.
سيتم فتح العرض التوضيحي أدناه في متصفح على http://localhost:7860 إذا تم تشغيله من ملف. إذا كنت تعمل داخل دفتر ملاحظات، فسيظهر العرض التوضيحي مضمّنًا داخل دفتر الملاحظات.

اكتب اسمك في مربع النص على اليسار، واسحب شريط التمرير، ثم اضغط على زر الإرسال. يجب أن ترى تحية ودية على اليمين.
[!TIP] عند التطوير محليًا، يمكنك تشغيل تطبيق Gradio في وضع إعادة التحميل السريع، الذي يعيد تحميل تطبيق Gradio تلقائيًا كلما قمت بإجراء تغييرات على الملف. للقيام بذلك، اكتب ببساطة
gradioقبل اسم الملف بدلاً منpython. في المثال أعلاه، ستكتب:gradio app.pyفي الطرفية. تعرف على المزيد حول إعادة التحميل السريع في دليل إعادة التحميل السريع.
فهم فئة Interface
ستلاحظ أنه من أجل إنشاء أول عرض توضيحي لك، قمت بإنشاء مثيل لفئة gr.Interface. تم تصميم فئة Interface لإنشاء عروض توضيحية لنماذج التعلم الآلي التي تقبل مدخلًا واحدًا أو أكثر وتُرجع مخرجًا واحدًا أو أكثر.
تحتوي فئة Interface على ثلاث وسائط أساسية:
fn: الدالة التي سيتم تغليف واجهة مستخدم (UI) حولهاinputs: مكونات Gradio المستخدمة للإدخال. يجب أن يتطابق عدد المكونات مع عدد الوسائط في الدالة الخاصة بك.outputs: مكونات Gradio المستخدمة للإخراج. يجب أن يتطابق عدد المكونات مع عدد القيم المُرجعة من الدالة الخاصة بك.وسيطة fn مرنة جدًا — يمكنك تمرير أي دالة Python تريد تغليفها بواجهة مستخدم. في المثال أعلاه، رأينا دالة بسيطة نسبيًا، ولكن يمكن أن تكون الدالة أي شيء بدءًا من مولّد موسيقى إلى حاسبة ضرائب إلى دالة التنبؤ لنموذج تعلم آلي مُدرّب مسبقًا.
تأخذ وسيطتا input و output مكونًا واحدًا أو أكثر من مكونات Gradio. كما سنرى، يتضمن Gradio أكثر من 30 مكونًا مدمجًا (مثل مكونات gr.Textbox() و gr.Image() و gr.HTML()) المصممة لتطبيقات التعلم الآلي.
[!TIP] بالنسبة لوسيطتي
inputsوoutputs، يمكنك تمرير اسم هذه المكونات كسلسلة نصية ("textbox") أو مثيلًا من الفئة (gr.Textbox()).
إذا كانت الدالة الخاصة بك تقبل أكثر من وسيطة واحدة، كما هو الحال أعلاه، فمرر قائمة بمكونات الإدخال إلى inputs، حيث يتوافق كل مكون إدخال مع إحدى وسائط الدالة، بالترتيب. وينطبق الشيء نفسه إذا كانت الدالة الخاصة بك تُرجع أكثر من قيمة: ما عليك سوى تمرير قائمة بالمكونات إلى outputs. هذا المرونة يجعل فئة Interface طريقة قوية جدًا لإنشاء العروض التوضيحية.
سنتعمق أكثر في gr.Interface في سلسلتنا حول بناء الواجهات.
ما فائدة العرض التوضيحي الجميل إذا لم تتمكن من مشاركته؟ يتيح لك Gradio مشاركة عرض توضيحي للتعلم الآلي بسهولة دون القلق بشأن عناء الاستضافة على خادم ويب. ما عليك سوى تعيين share=True في launch()، وسيتم إنشاء عنوان URL عام يمكن الوصول إليه للعرض التوضيحي الخاص بك. دعنا نعود إلى مثال العرض التوضيحي الخاص بنا، ولكن نغير السطر الأخير كما يلي:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # شارك العرض التوضيحي الخاص بك مع معلمة إضافية واحدة فقط 🚀
عند تشغيل هذا الكود، سيتم إنشاء عنوان URL عام للعرض التوضيحي الخاص بك في غضون ثوانٍ، شيء مثل:
👉 https://a23dsf231adb.gradio.live
الآن، يمكن لأي شخص حول العالم تجربة عرض Gradio التوضيحي الخاص بك من متصفحه، بينما يستمر نموذج التعلم الآلي وجميع العمليات الحسابية في العمل محليًا على جهاز الكمبيوتر الخاص بك.
لمعرفة المزيد حول مشاركة العرض التوضيحي الخاص بك، اقرأ دليلنا المخصص حول مشاركة تطبيق Gradio الخاص بك.
حتى الآن، كنا نناقش فئة Interface، وهي فئة عالية المستوى تتيح لك بناء عروض توضيحية بسرعة باستخدام Gradio. ولكن ماذا يفعل Gradio أيضًا؟
gr.ChatInterfaceيتضمن Gradio فئة عالية المستوى أخرى، gr.ChatInterface، مصممة خصيصًا لإنشاء واجهات مستخدم لروبوتات المحادثة. على غرار Interface، تقوم بتوفير دالة ويقوم Gradio بإنشاء واجهة مستخدم لروبوت محادثة تعمل بالكامل. إذا كنت مهتمًا بإنشاء روبوت محادثة، يمكنك الانتقال مباشرة إلى دليلنا المخصص حول gr.ChatInterface.
gr.Blocksيقدم Gradio أيضًا نهجًا منخفض المستوى لتصميم تطبيقات الويب بتخطيطات وتدفقات بيانات أكثر مرونة باستخدام فئة gr.Blocks. تتيح لك Blocks التحكم في مكان ظهور المكونات على الصفحة، والتعامل مع تدفقات البيانات المعقدة (على سبيل المثال، يمكن أن تعمل المخرجات كمدخلات لدوال أخرى)، وتحديث خصائص/رؤية المكونات بناءً على تفاعل المستخدم — وكل ذلك لا يزال في Python.
يمكنك بناء تطبيقات مخصصة ومعقدة جدًا باستخدام gr.Blocks(). على سبيل المثال، واجهة المستخدم الشهيرة لتوليد الصور Automatic1111 Web UI مبنية باستخدام Gradio Blocks. نتعمق أكثر في gr.Blocks في سلسلتنا حول البناء باستخدام Blocks.
هذا هو جوهر مكتبة gradio الأساسية للغة Python، لكن Gradio في الواقع أكثر من ذلك بكثير! إنه نظام بيئي كامل من مكتبات Python وJavaScript تتيح لك بناء تطبيقات التعلم الآلي، أو الاستعلام عنها برمجيًا، في Python أو JavaScript. فيما يلي أجزاء أخرى ذات صلة من نظام Gradio البيئي:
gradio_client): استعلم عن أي تطبيق Gradio برمجيًا في Python.@gradio/client): استعلم عن أي تطبيق Gradio برمجيًا في JavaScript.@gradio/lite): اكتب تطبيقات Gradio في Python تعمل بالكامل في المتصفح (لا حاجة لخادم!)، بفضل Pyodide.استمر في تعلم Gradio بالتسلسل باستخدام أدلة Gradio، التي تتضمن شروحات بالإضافة إلى أمثلة على الأكواد وعروض توضيحية تفاعلية مضمّنة. التالي: الميزات الرئيسية لعروض Gradio التوضيحية.
أو، إذا كنت تعرف الأساسيات بالفعل وتبحث عن شيء محدد، يمكنك البحث في توثيق واجهة برمجة التطبيقات الفني الأكثر تفصيلاً.
إذا كنت ترغب في الإبلاغ عن خطأ أو لديك طلب ميزة، فيرجى إنشاء مشكلة على GitHub. للأسئلة العامة حول الاستخدام، نحن متاحون على خادم Discord الخاص بنا وسعداء بالمساعدة.
إذا أعجبك Gradio، فيرجى ترك لنا ⭐ على GitHub!
تم بناء Gradio على العديد من المكتبات الرائعة مفتوحة المصدر!
Gradio مرخص بموجب رخصة Apache License 2.0 الموجودة في ملف LICENSE في الدليل الجذر لهذا المستودع.
تحقق أيضًا من الورقة البحثية Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019، ويرجى الاستشهاد بها إذا كنت تستخدم Gradio في عملك.
@article{abid2019gradio,
title = {Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild},
author = {Abid, Abubakar and Abdalla, Ali and Abid, Ali and Khan, Dawood and Alfozan, Abdulrahman and Zou, James},
journal = {arXiv preprint arXiv:1906.02569},
year = {2019},
}