
नियंत्रित सुरक्षा-अनुसंधान प्रयोगशाला जो CVE-2024-1540 (gradio-app/gradio deploy+test-visual.yml में GitHub Actions कमांड इंजेक्शन) को पुन: उत्पन्न करती है — gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef का समतल स्नैपशॉट
स्वचालित शोध कलाकृति — अपस्ट्रीम प्रोजेक्ट नहीं।
यह रिपोर्टरी एक डिस्पोज़ेबल लैब है जिसे Université Laval में मास्टर की थीसिस के लिए एक स्वचालित हार्नेस द्वारा बनाया गया है, जिसका उद्देश्य प्रकाशित GitHub Actions वर्कफ़्लो कमज़ोरियों को पुन: प्रस्तुत करना है। यह
gradio-app/gradioका एक शब्दशः स्नैपशॉट है जो कमिटf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09) पर है, जिसे उस प्रोजेक्ट के अपने लाइसेंस के तहत पुनर्वितरित किया गया है, जिसकी फ़ाइल इस स्नैपशॉट में अपरिवर्तित शामिल है।अपस्ट्रीम प्रोजेक्ट शामिल नहीं है, उसे कभी लक्षित नहीं किया जाता है, और यहाँ अध्ययन की गई कमज़ोरी पहले से ही सार्वजनिक है। इस रिपोर्टरी में हर सीक्रेट और वेरिएबल एक यादृच्छिक रूप से उत्पन्न डमी मान है — कोई वास्तविक क्रेडेंशियल मौजूद नहीं है। एक्शन संदर्भ और रनर इमेज उसी पर पिन किए गए हैं जो 2024-02-09 को हल हुए थे; स्नैपशॉट में किए गए हर बदलाव के लिए हार्नेस आउटपुट में
pinning.mdदेखें।प्रश्न या आपत्तियाँ: [email protected]
Gradio एक ओपन-सोर्स Python पैकेज है जो आपको अपने मशीन लर्निंग मॉडल, API, या किसी भी Python फ़ंक्शन के लिए जल्दी से एक डेमो या वेब एप्लिकेशन बनाने की अनुमति देता है। फिर आप Gradio की अंतर्निहित साझाकरण सुविधाओं का उपयोग करके कुछ ही सेकंड में अपने डेमो या वेब एप्लिकेशन का लिंक साझा कर सकते हैं। JavaScript, CSS, या वेब होस्टिंग अनुभव की कोई आवश्यकता नहीं है!
ऊपर जैसा सुंदर डेमो बनाने के लिए Python की कुछ ही पंक्तियाँ चाहिए, तो चलिए शुरू करते हैं 💫
पूर्वापेक्षा: Gradio को Python 3.8 या उच्चतर की आवश्यकता है
हम pip का उपयोग करके Gradio इंस्टॉल करने की सलाह देते हैं, जो Python में डिफ़ॉल्ट रूप से शामिल होता है। इसे अपने टर्मिनल या कमांड प्रॉम्प्ट में चलाएँ:
pip install gradio
[!TIP] Gradio को वर्चुअल एनवायरनमेंट में इंस्टॉल करना सबसे अच्छा है। सभी सामान्य ऑपरेटिंग सिस्टम के लिए विस्तृत इंस्टॉलेशन निर्देश यहाँ दिए गए हैं।
आप Gradio को अपने पसंदीदा कोड एडिटर, Jupyter नोटबुक, 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 पर ब्राउज़र में खुलेगा यदि फ़ाइल से चलाया जा रहा है। यदि आप नोटबुक के भीतर चला रहे हैं, तो डेमो नोटबुक के भीतर एम्बेडेड दिखाई देगा।

बाईं ओर टेक्स्टबॉक्स में अपना नाम टाइप करें, स्लाइडर खींचें, और फिर Submit बटन दबाएँ। आपको दाईं ओर एक मैत्रीपूर्ण अभिवादन दिखाई देना चाहिए।
[!TIP] स्थानीय रूप से विकास करते समय, आप अपने Gradio ऐप को हॉट रीलोड मोड में चला सकते हैं, जो फ़ाइल में बदलाव करते ही Gradio ऐप को स्वचालित रूप से रीलोड करता है। ऐसा करने के लिए, बस
pythonके बजाय फ़ाइल के नाम से पहलेgradioटाइप करें। ऊपर दिए गए उदाहरण में, आप अपने टर्मिनल मेंgradio app.pyटाइप करेंगे। हॉट रीलोडिंग के बारे में हॉट रीलोडिंग गाइड में और जानें।
Interface क्लास को समझना
आप देखेंगे कि अपना पहला डेमो बनाने के लिए, आपने gr.Interface क्लास का एक इंस्टेंस बनाया है। Interface क्लास मशीन लर्निंग मॉडल के लिए डेमो बनाने के लिए डिज़ाइन की गई है जो एक या अधिक इनपुट स्वीकार करते हैं और एक या अधिक आउटपुट लौटाते हैं।
Interface क्लास के तीन मुख्य तर्क हैं:
fn: वह फ़ंक्शन जिसके चारों ओर यूज़र इंटरफ़ेस (UI) लपेटना हैinputs: इनपुट के लिए उपयोग करने के लिए Gradio कंपोनेंट। कंपोनेंट की संख्या आपके फ़ंक्शन में तर्कों की संख्या से मेल खानी चाहिए।outputs: आउटपुट के लिए उपयोग करने के लिए Gradio कंपोनेंट। कंपोनेंट की संख्या आपके फ़ंक्शन से रिटर्न वैल्यू की संख्या से मेल खानी चाहिए।fn तर्क बहुत लचीला है — आप कोई भी Python फ़ंक्शन पास कर सकते हैं जिसे आप UI के साथ लपेटना चाहते हैं। ऊपर दिए गए उदाहरण में, हमने एक अपेक्षाकृत सरल फ़ंक्शन देखा, लेकिन फ़ंक्शन संगीत जनरेटर से लेकर टैक्स कैलकुलेटर तक या पूर्व-प्रशिक्षित मशीन लर्निंग मॉडल के भविष्यवाणी फ़ंक्शन तक कुछ भी हो सकता है।
input और output तर्क एक या अधिक Gradio कंपोनेंट लेते हैं। जैसा कि हम देखेंगे, Gradio में मशीन लर्निंग एप्लिकेशन के लिए डिज़ाइन किए गए 30 से अधिक अंतर्निहित कंपोनेंट शामिल हैं (जैसे gr.Textbox(), gr.Image(), और gr.HTML() कंपोनेंट)।
[!TIP]
inputsऔरoutputsतर्कों के लिए, आप इन कंपोनेंट के नाम को स्ट्रिंग ("textbox") या क्लास के इंस्टेंस (gr.Textbox()) के रूप में पास कर सकते हैं।
यदि आपका फ़ंक्शन एक से अधिक तर्क स्वीकार करता है, जैसा कि ऊपर के मामले में है, तो inputs में इनपुट कंपोनेंट की एक सूची पास करें, जिसमें प्रत्येक इनपुट कंपोनेंट फ़ंक्शन के तर्कों में से एक के अनुरूप हो, क्रम में। यही बात लागू होती है यदि आपका फ़ंक्शन एक से अधिक मान लौटाता है: बस outputs में कंपोनेंट की एक सूची पास करें। यह लचीलापन Interface क्लास को डेमो बनाने का एक बहुत शक्तिशाली तरीका बनाता है।
हम इंटरफ़ेस बनाने पर अपनी श्रृंखला में gr.Interface में गहराई से उतरेंगे।
एक सुंदर डेमो का क्या फायदा अगर आप इसे साझा नहीं कर सकते? Gradio आपको वेब सर्वर पर होस्टिंग की परेशानी के बिना आसानी से मशीन लर्निंग डेमो साझा करने देता है। बस launch() में share=True सेट करें, और आपके डेमो के लिए एक सार्वजनिक रूप से सुलभ URL बनाया जाएगा। चलिए अपने उदाहरण डेमो पर फिर से विचार करें, लेकिन अंतिम पंक्ति को इस प्रकार बदलें:
import gradio as gr
def greet(name):
return "Hello " + name + "!"