
Laboratorio di ricerca sulla sicurezza controllato che riproduce CVE-2024-1540 (iniezione di comandi in GitHub Actions in gradio-app/gradio deploy+test-visual.yml) — snapshot appiattito di gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Artefatto di ricerca automatizzato — non il progetto upstream.
Questo repository è un laboratorio usa e getta costruito da un sistema automatizzato per una tesi magistrale presso l'Université Laval sulla riproduzione di vulnerabilità pubblicate nei workflow di GitHub Actions. È uno snapshot integrale di
gradio-app/gradioal commitf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), ridistribuito sotto la licenza di quel progetto, il cui file è incluso invariato in questo snapshot.Il progetto upstream non è coinvolto, non è mai preso di mira, e la vulnerabilità studiata qui è già pubblica. Ogni segreto e variabile in questo repository è un valore fittizio generato casualmente — nessuna credenziale reale è presente. I riferimenti alle action e le immagini dei runner sono bloccati a ciò a cui risolvevano il 2024-02-09; vedi
pinning.mdnell'output del sistema per ogni modifica apportata allo snapshot.Domande o obiezioni: [email protected]
Sito web | Documentazione | Guide | Per iniziare | Esempi | 中文
Gradio è un pacchetto Python open-source che ti permette di creare rapidamente una demo o un'applicazione web per il tuo modello di machine learning, la tua API o qualsiasi funzione Python arbitraria. Puoi poi condividere un link alla tua demo o applicazione web in pochi secondi grazie alle funzionalità di condivisione integrate di Gradio. Nessuna esperienza con JavaScript, CSS o hosting web richiesta!

Servono solo poche righe di Python per creare una demo bellissima come quella qui sopra, quindi iniziamo 💫
Prerequisito: Gradio richiede Python 3.8 o superiore
Consigliamo di installare Gradio usando pip, che è incluso di default in Python. Esegui questo comando nel tuo terminale o prompt dei comandi:
pip install gradio
[!TIP] È meglio installare Gradio in un ambiente virtuale. Istruzioni di installazione dettagliate per tutti i sistemi operativi comuni sono fornite qui.
Puoi eseguire Gradio nel tuo editor di codice preferito, in un notebook Jupyter, in Google Colab o in qualsiasi altro posto dove scrivi Python. Scriviamo la tua prima app 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] Abbreviamo il nome importato da
gradioagrper una migliore leggibilità del codice. Questa è una convenzione ampiamente adottata che dovresti seguire così che chiunque lavori con il tuo codice possa capirlo facilmente.
Ora, esegui il tuo codice. Se hai scritto il codice Python in un file chiamato, ad esempio, app.py, allora dovresti eseguire python app.py dal terminale.
La demo qui sotto si aprirà in un browser su http://localhost:7860 se eseguita da un file. Se la stai eseguendo in un notebook, la demo apparirà incorporata nel notebook.

Digita il tuo nome nella casella di testo a sinistra, trascina il cursore e poi premi il pulsante Submit. Dovresti vedere un saluto amichevole a destra.
[!TIP] Quando sviluppi in locale, puoi eseguire la tua app Gradio in modalità hot reload, che ricarica automaticamente l'app Gradio ogni volta che apporti modifiche al file. Per fare questo, basta digitare
gradioprima del nome del file invece dipython. Nell'esempio sopra, dovresti digitare:gradio app.pynel tuo terminale. Scopri di più sull'hot reloading nella Guida all'Hot Reloading.
Capire la Classe Interface
Noterai che per creare la tua prima demo hai creato un'istanza della classe gr.Interface. La classe Interface è progettata per creare demo per modelli di machine learning che accettano uno o più input e restituiscono uno o più output.
La classe Interface ha tre argomenti fondamentali:
fn: la funzione da avvolgere con un'interfaccia utente (UI)inputs: i componenti Gradio da usare per l'input. Il numero di componenti dovrebbe corrispondere al numero di argomenti nella tua funzione.outputs: i componenti Gradio da usare per l'output. Il numero di componenti dovrebbe corrispondere al numero di valori restituiti dalla tua funzione.L'argomento fn è molto flessibile — puoi passare qualsiasi funzione Python che vuoi avvolgere con una UI. Nell'esempio sopra abbiamo visto una funzione relativamente semplice, ma la funzione potrebbe essere qualsiasi cosa, da un generatore musicale a un calcolatore di tasse alla funzione di previsione di un modello di machine learning preaddestrato.
Gli argomenti input e output accettano uno o più componenti Gradio. Come vedremo, Gradio include più di 30 componenti integrati (come i componenti gr.Textbox(), gr.Image() e gr.HTML()) progettati per applicazioni di machine learning.
[!TIP] Per gli argomenti
inputseoutputs, puoi passare il nome di questi componenti come stringa ("textbox") o un'istanza della classe (gr.Textbox()).
Se la tua funzione accetta più di un argomento, come nel caso sopra, passa una lista di componenti di input a inputs, con ogni componente di input corrispondente a uno degli argomenti della funzione, in ordine. Lo stesso vale se la tua funzione restituisce più di un valore: basta passare una lista di componenti a outputs. Questa flessibilità rende la classe Interface un modo molto potente per creare demo.
Approfondiremo gr.Interface nella nostra serie su creare Interfaces.
A cosa serve una demo bellissima se non puoi condividerla? Gradio ti permette di condividere facilmente una demo di machine learning senza doverti preoccupare della seccatura di ospitarla su un server web. Basta impostare share=True in launch(), e verrà creato un URL pubblicamente accessibile per la tua demo. Rivediamo la nostra demo di esempio, ma cambiamo l'ultima riga come segue:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # Condividi la tua demo con solo 1 parametro extra 🚀
Quando esegui questo codice, verrà generato un URL pubblico per la tua demo in pochi secondi, qualcosa come:
👉 https://a23dsf231adb.gradio.live
Ora, chiunque nel mondo può provare la tua demo Gradio dal proprio browser, mentre il modello di machine learning e tutti i calcoli continuano a essere eseguiti localmente sul tuo computer.
Per saperne di più sulla condivisione della tua demo, leggi la nostra guida dedicata su condividere la tua applicazione Gradio.
Finora abbiamo parlato della classe Interface, che è una classe ad alto livello che ti permette di creare demo rapidamente con Gradio. Ma cos'altro fa Gradio?
gr.ChatInterfaceGradio include un'altra classe ad alto livello, gr.ChatInterface, progettata specificamente per creare UI per Chatbot. Simile a Interface, fornisci una funzione e Gradio crea una UI Chatbot completamente funzionante. Se sei interessato a creare un chatbot, puoi passare direttamente alla nostra guida dedicata su gr.ChatInterface.
gr.BlocksGradio offre anche un approccio di basso livello per progettare app web con layout e flussi di dati più flessibili usando la classe gr.Blocks. Blocks ti permette di fare cose come controllare dove appaiono i componenti sulla pagina, gestire flussi di dati complessi (ad es. gli output possono servire come input per altre funzioni) e aggiornare proprietà/visibilità dei componenti in base all'interazione dell'utente — tutto sempre in Python.
Puoi creare applicazioni molto personalizzate e complesse usando gr.Blocks(). Ad esempio, la popolare interfaccia web per la generazione di immagini Automatic1111 Web UI è costruita con Gradio Blocks. Approfondiamo gr.Blocks nella nostra serie su creare con Blocks.
Questo è il succo della libreria Python gradio di base, ma Gradio è in realtà molto di più! È un intero ecosistema di librerie Python e JavaScript che ti permettono di creare applicazioni di machine learning, o di interrogarle programmaticamente, in Python o JavaScript. Ecco altre parti correlate dell'ecosistema Gradio:
gradio_client): interroga qualsiasi app Gradio programmaticamente in Python.@gradio/client): interroga qualsiasi app Gradio programmaticamente in JavaScript.@gradio/lite): scrivi app Gradio in Python che girano interamente nel browser (nessun server necessario!), grazie a Pyodide.Continua a imparare su Gradio in modo sequenziale usando le Guide di Gradio, che includono spiegazioni oltre a codice di esempio e demo interattive incorporate. Prossimo passo: caratteristiche chiave delle demo Gradio.
Oppure, se conosci già le basi e stai cercando qualcosa di specifico, puoi cercare nella documentazione API più tecnica.
Se vuoi segnalare un bug o hai una richiesta di funzionalità, per favore crea un issue su GitHub. Per domande generali sull'uso, siamo disponibili su il nostro server Discord e saremo felici di aiutarti.
Se ti piace Gradio, per favore lasciaci una ⭐ su GitHub!
Gradio è costruito su molte meravigliose librerie open-source!
Gradio è concesso in licenza sotto la Apache License 2.0 presente nel file LICENSE nella directory principale di questo repository.
Dai anche un'occhiata al paper Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019, e per favore citatelo se usate Gradio nel vostro lavoro.
@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},
}