
مختبر أبحاث أمنية مُصرّح به لإعادة إنتاج CVE-2024-4253 (GHSA-r897-wrpm-h4vw): حقن أوامر في workflow_run في ملف test-functional.yml الخاص بـ gradio-app/gradio
أداة بحث آلية — ليست المشروع الأصلي.
هذا المستودع عبارة عن مختبر مؤقت تم بناؤه بواسطة بيئة آلية لأطروحة ماجستير في جامعة لافال حول إعادة إنتاج ثغرات سير عمل GitHub Actions المنشورة. وهو لقطة حرفية من
gradio-app/gradioعند الالتزامa81e36967c0973012e90ec7cf03b99cf3fea88ec(2024-04-30)، معاد توزيعه بموجب ترخيص ذلك المشروع نفسه، الذي تم تضمين ملفه دون تغيير في هذه اللقطة.المشروع الأصلي ليس مشاركًا، ولا يتم استهدافه أبدًا، والثغرة المدروسة هنا عامة بالفعل. كل سر ومتغير في هذا المستودع هو قيمة وهمية مولدة عشوائيًا — لا توجد أي بيانات اعتماد حقيقية. مراجع الإجراءات وصور المشغلات مثبتة على ما تم حله في 2024-04-30؛ راجع
pinning.mdفي مخرجات البيئة لكل تغيير تم إجراؤه على اللقطة.أسئلة أو اعتراضات: [email protected]
Gradio هي حزمة Python مفتوحة المصدر تتيح لك بناء عرض توضيحي أو تطبيق ويب لنموذج التعلم الآلي أو API أو أي دالة 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 إذا تم تشغيله من ملف. إذا كنت تعمل داخل notebook، فسيظهر العرض التوضيحي مضمّنًا داخل notebook.

اكتب اسمك في مربع النص على اليسار، واسحب شريط التمرير، ثم اضغط على زر الإرسال. يجب أن ترى تحية ودية على اليمين.
[!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 الخاص بك.
حتى الآن، كنا نناقش فئة 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 التوضيحية.
أو، إذا كنت تعرف الأساسيات بالفعل وتبحث عن شيء محدد، يمكنك البحث في توثيق 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},
}