
مختبر أبحاث أمني يعيد إنتاج CVE-2023-6572 (GHSA-gqvf-3hgp-5hxv): حقن أوامر في معالجة workflow_run لتطبيق gradio-app/gradio لملف generate-changeset.yml
أداة بحث آلية — ليست المشروع الأصلي.
هذا المستودع هو مختبر مؤقت تم بناؤه بواسطة نظام آلي لأطروحة ماجستير في جامعة لافال حول إعادة إنتاج ثغرات سير عمل GitHub Actions المنشورة. وهو لقطة حرفية من
gradio-app/gradioعند الالتزام1d986217f6f4fc1829e528d2afe365635788204f(2023-11-03)، معاد توزيعه بموجب ترخيص المشروع الأصلي نفسه، الذي تم تضمين ملفه دون تغيير في هذه اللقطة.المشروع الأصلي ليس مشاركًا، ولا يُستهدف أبدًا، والثغرة المدروسة هنا معلنة بالفعل. كل سر ومتغير في هذا المستودع هو قيمة وهمية مولدة عشوائيًا — لا توجد أي بيانات اعتماد حقيقية. مراجع الإجراءات وصور المشغلات مثبتة على ما تم حله في 2023-11-03؛ راجع
pinning.mdفي مخرجات النظام الآلي لكل تغيير تم إجراؤه على اللقطة.الأسئلة أو الاعتراضات: [email protected]
Gradio هي مكتبة Python مفتوحة المصدر تُستخدم لبناء عروض توضيحية وتطبيقات ويب للتعلم الآلي وعلوم البيانات.
باستخدام Gradio، يمكنك بسرعة إنشاء واجهة مستخدم جميلة حول نماذج التعلم الآلي أو سير عمل علوم البيانات الخاصة بك والسماح للأشخاص "بتجربتها" عن طريق سحب وإفلات صورهم الخاصة، ولصق النصوص، وتسجيل أصواتهم، والتفاعل مع العرض التوضيحي الخاص بك، كل ذلك من خلال المتصفح.

Gradio مفيد من أجل:
عرض نماذج التعلم الآلي الخاصة بك للعملاء/المتعاونين/المستخدمين/الطلاب.
نشر نماذجك بسرعة مع روابط قابلة للمشاركة تلقائيًا والحصول على ملاحظات حول أداء النموذج.
تصحيح أخطاء نموذجك بشكل تفاعلي أثناء التطوير باستخدام أدوات معالجة الإدخال المدمجة.
المتطلب الأساسي: يتطلب Gradio Python 3.8 أو أعلى، هذا كل شيء!
من أفضل الطرق لمشاركة نموذج التعلم الآلي أو API أو سير عمل علوم البيانات الخاص بك مع الآخرين هو إنشاء تطبيق تفاعلي يسمح لمستخدميك أو زملائك بتجربة العرض التوضيحي في متصفحاتهم.
يتيح لك Gradio بناء العروض التوضيحية ومشاركتها، كل ذلك في Python. وعادةً في بضعة أسطر فقط من التعليمات البرمجية! لذا دعنا نبدأ.
لتشغيل Gradio بمثال بسيط "Hello, World"، اتبع هذه الخطوات الثلاث:
1. قم بتثبيت Gradio باستخدام pip:
pip install gradio
2. قم بتشغيل الكود أدناه كسكربت Python أو في Jupyter Notebook (أو Google Colab):
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
نختصر الاسم المستورد إلى gr لتحسين قابلية قراءة الكود باستخدام Gradio. هذه اصطلاح معتمد على نطاق واسع يجب عليك اتباعه حتى يتمكن أي شخص يعمل مع الكود الخاص بك من فهمه بسهولة.
3. سيظهر العرض التوضيحي أدناه تلقائيًا داخل Jupyter Notebook، أو في متصفح على http://localhost:7860 إذا تم تشغيله من سكربت:

عند التطوير محليًا، إذا كنت تريد تشغيل الكود كسكربت Python، يمكنك استخدام واجهة سطر الأوامر Gradio CLI لتشغيل التطبيق في وضع إعادة التحميل، والذي سيوفر تطويرًا سلسًا وسريعًا. تعرف على المزيد حول إعادة التحميل في دليل إعادة التحميل التلقائي.
gradio app.py
ملاحظة: يمكنك أيضًا تنفيذ python app.py، لكنه لن يوفر آلية إعادة التحميل التلقائية.
Interfaceستلاحظ أنه من أجل إنشاء العرض التوضيحي، قمنا بإنشاء gr.Interface. يمكن لهذه الفئة Interface تغليف أي دالة Python بواجهة مستخدم. في المثال أعلاه، رأينا دالة نصية بسيطة، لكن الدالة يمكن أن تكون أي شيء من مولّد موسيقى إلى حاسبة ضرائب إلى دالة التنبؤ لنموذج تعلم آلي مُدرّب مسبقًا.
يتم تهيئة فئة Interface الأساسية بثلاث معاملات مطلوبة:
fn: الدالة التي سيتم تغليف واجهة مستخدم حولهاinputs: المكون(ات) التي سيتم استخدامها للإدخال (مثل "text" أو "image" أو "audio")outputs: المكون(ات) التي سيتم استخدامها للإخراج (مثل "text" أو "image" أو "label")دعنا نلقي نظرة أقرب على هذه المكونات المستخدمة لتوفير الإدخال والإخراج.
رأينا بعض مكونات Textbox البسيطة في الأمثلة السابقة، ولكن ماذا لو أردت تغيير شكل أو سلوك مكونات واجهة المستخدم؟
لنفترض أنك تريد تخصيص حقل إدخال النص — على سبيل المثال، تريده أكبر حجمًا وأن يحتوي على نص placeholder. إذا استخدمنا الفئة الفعلية لـ Textbox بدلاً من استخدام الاختصار النصي، فستتمكن من الوصول إلى تخصيص أكبر بكثير من خلال خصائص المكونات.
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(
fn=greet,
inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
outputs="text",
)
demo.launch()

لنفترض أن لديك دالة أكثر تعقيدًا، مع مدخلات ومخرجات متعددة. في المثال أدناه، نعرّف دالة تأخذ سلسلة نصية وقيمة منطقية ورقمًا، وتُرجع سلسلة نصية ورقمًا. لاحظ كيف تمرر قائمة من مكونات الإدخال والإخراج.
import gradio as gr
def greet(name, is_morning, temperature):
salutation = "Good morning" if is_morning else "Good evening"
greeting = f"{salutation} {name}. It is {temperature} degrees today"
celsius = (temperature - 32) * 5 / 9
return greeting, round(celsius, 2)
demo = gr.Interface(
fn=greet,
inputs=["text", "checkbox", gr.Slider(0, 100)],
outputs=["text", "number"],
)
demo.launch()

كل ما عليك فعله هو تغليف المكونات في قائمة. كل مكون في قائمة inputs يتوافق مع أحد معاملات الدالة، بالترتيب. كل مكون في قائمة outputs يتوافق مع إحدى القيم التي تُرجعها الدالة، أيضًا بالترتيب.
يدعم Gradio أنواعًا عديدة من المكونات، مثل Image وDataFrame وVideo أو Label. لنجرب دالة تحويل صورة إلى صورة لنشعر بهذه المكونات!
import numpy as np
import gradio as gr