
مختبر أبحاث أمنية مُتحكَّم به لإعادة إنتاج CVE-2024-1540 (حقن أوامر في GitHub Actions في gradio-app/gradio deploy+test-visual.yml) — لقطة مُسطَّحة من gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
أداة بحث آلية — ليست المشروع الأصلي.
هذا المستودع عبارة عن بيئة مختبرية مؤقتة أُنشئت بواسطة نظام آلي لرسالة ماجستير في جامعة لافال (Université Laval) بهدف إعادة إنتاج ثغرات أمنية موثقة في سير عمل GitHub Actions. وهو لقطة حرفية من
gradio-app/gradioعند الالتزامf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09)، مُعاد توزيعه بموجب ترخيص المشروع الأصلي نفسه، والذي تم تضمين ملفه دون تغيير في هذه اللقطة.المشروع الأصلي ليس طرفًا في هذا العمل، ولا يُستهدف أبدًا، والثغرة المدروسة هنا معلنة بالفعل. كل سر ومتغير في هذا المستودع هو قيمة وهمية مولّدة عشوائيًا — لا توجد أي بيانات اعتماد حقيقية. مراجع الإجراءات (Actions) وصور المشغّل (runner images) مثبتة على ما كانت عليه في 2024-02-09؛ راجع
pinning.mdفي مخرجات النظام الآلي للاطلاع على كل تغيير أُجري على اللقطة.للأسئلة أو الاعتراضات: [email protected]
الموقع الإلكتروني | التوثيق | الأدلة | ابدأ من هنا | أمثلة | 中文
Gradio هي حزمة Python مفتوحة المصدر تتيح لك بناء عرض توضيحي أو تطبيق ويب لنموذج التعلم الآلي أو واجهة برمجة التطبيقات (API) أو أي دالة Python عشوائية بسرعة. يمكنك بعد ذلك مشاركة رابط للعرض التوضيحي أو تطبيق الويب في ثوانٍ معدودة باستخدام ميزات المشاركة المدمجة في Gradio. لا حاجة لأي خبرة في JavaScript أو CSS أو استضافة الويب!

يكفي بضعة أسطر من Python لإنشاء عرض توضيحي جميل مثل العرض أعلاه، فلنبدأ 💫
المتطلب الأساسي: يتطلب Gradio Python 3.8 أو أحدث
نوصي بتثبيت Gradio باستخدام pip، المضمّن افتراضيًا في Python. شغّل هذا الأمر في الطرفية (terminal) أو موجه الأوامر:
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 إذا كان التشغيل من ملف. إذا كنت تعمل داخل notebook، فسيظهر العرض التوضيحي مضمّنًا داخل الـ notebook.

اكتب اسمك في مربع النص على اليسار، واسحب شريط التمرير، ثم اضغط زر الإرسال (Submit). يجب أن ترى تحية ودية على اليمين.
[!TIP] عند التطوير محليًا، يمكنك تشغيل تطبيق Gradio في وضع إعادة التحميل السريع (hot reload mode)، الذي يعيد تحميل تطبيق 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()، وسيتم إنشاء رابط عام يمكن الوصول إليه لعرضك التوضيحي. لنعد إلى مثالنا التوضيحي، لكن غيّر السطر الأخير كما يلي:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # شارك عرضك التوضيحي بمعامل إضافي واحد فقط 🚀
عند تشغيل هذا الكود، سيتم إنشاء رابط عام لعرضك التوضيحي في غضون ثوانٍ، مثل:
👉 https://a23dsf231adb.gradio.live
الآن، يمكن لأي شخص حول العالم تجربة عرضك التوضيحي من متصفحه، بينما يستمر نموذج التعلم الآلي وجميع العمليات الحسابية في العمل محليًا على جهازك.
لمعرفة المزيد حول مشاركة عرضك التوضيحي، اقرأ دليلنا المخصص حول مشاركة تطبيق Gradio الخاص بك.
حتى الآن، كنا نناقش فئة Interface، وهي فئة عالية المستوى تتيح لك بناء العروض التوضيحية بسرعة باستخدام Gradio. لكن ماذا يفعل Gradio أيضًا؟
gr.ChatInterfaceيتضمن Gradio فئة أخرى عالية المستوى، وهي gr.ChatInterface، المصممة خصيصًا لإنشاء واجهات مستخدم لروبوتات المحادثة (Chatbot). على غرار 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 التوضيحية.
أو، إذا كنت تعرف الأساسيات بالفعل وتبحث عن شيء محدد، يمكنك البحث في توثيق واجهة برمجة التطبيقات (API) الأكثر تقنية.
إذا كنت تريد الإبلاغ عن خطأ أو لديك طلب ميزة، فيرجى إنشاء issue على 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},
}