
Laboratoire de recherche en sécurité contrôlé reproduisant la CVE-2024-1540 (injection de commande GitHub Actions dans gradio-app/gradio deploy+test-visual.yml) — instantané aplati de gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Artéfact de recherche automatisé — pas le projet en amont.
Ce dépôt est un laboratoire jetable construit par un harnais automatisé pour un mémoire de maîtrise à l'Université Laval sur la reproduction de vulnérabilités publiées dans les workflows GitHub Actions. Il s'agit d'un instantané verbatim de
gradio-app/gradioau commitf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), redistribué sous la licence de ce projet, dont le fichier est inclus inchangé dans cet instantané.Le projet en amont n'est pas impliqué, n'est jamais ciblé, et la vulnérabilité étudiée ici est déjà publique. Chaque secret et variable dans ce dépôt est une valeur factice générée aléatoirement — aucun identifiant réel n'est présent. Les références d'actions et les images d'exécuteur sont épinglées à ce qu'elles résolvaient le 2024-02-09 ; voir
pinning.mddans la sortie du harnais pour chaque modification apportée à l'instantané.Questions ou objections : [email protected]
Site web | Documentation | Guides | Pour commencer | Exemples | 中文
Gradio est un package Python open source qui vous permet de créer rapidement une démo ou une application web pour votre modèle de machine learning, votre API, ou toute fonction Python arbitraire. Vous pouvez ensuite partager un lien vers votre démo ou application web en quelques secondes grâce aux fonctionnalités de partage intégrées de Gradio. Aucune expérience en JavaScript, CSS ou hébergement web requise !

Il suffit de quelques lignes de Python pour créer une belle démo comme celle ci-dessus, alors commençons 💫
Prérequis : Gradio nécessite Python 3.8 ou supérieur
Nous recommandons d'installer Gradio avec pip, qui est inclus par défaut dans Python. Exécutez ceci dans votre terminal ou invite de commande :
pip install gradio
[!TIP] Il est préférable d'installer Gradio dans un environnement virtuel. Des instructions d'installation détaillées pour tous les systèmes d'exploitation courants sont fournies ici.
Vous pouvez exécuter Gradio dans votre éditeur de code préféré, un notebook Jupyter, Google Colab, ou partout ailleurs où vous écrivez du Python. Écrivons votre première application 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] Nous raccourcissons le nom importé de
gradioàgrpour une meilleure lisibilité du code. C'est une convention largement adoptée que vous devriez suivre afin que toute personne travaillant avec votre code puisse le comprendre facilement.
Maintenant, exécutez votre code. Si vous avez écrit le code Python dans un fichier nommé, par exemple, app.py, vous exécuterez alors python app.py depuis le terminal.
La démo ci-dessous s'ouvrira dans un navigateur sur http://localhost:7860 si elle est exécutée depuis un fichier. Si vous exécutez dans un notebook, la démo apparaîtra intégrée dans le notebook.

Tapez votre nom dans la zone de texte à gauche, faites glisser le curseur, puis appuyez sur le bouton Soumettre. Vous devriez voir un message de bienvenue amical à droite.
[!TIP] Lors du développement en local, vous pouvez exécuter votre application Gradio en mode rechargement à chaud, qui recharge automatiquement l'application Gradio à chaque modification du fichier. Pour ce faire, tapez simplement
gradioavant le nom du fichier au lieu depython. Dans l'exemple ci-dessus, vous taperiez :gradio app.pydans votre terminal. Apprenez-en plus sur le rechargement à chaud dans le Guide du rechargement à chaud.
Comprendre la classe Interface
Vous remarquerez que pour créer votre première démo, vous avez créé une instance de la classe gr.Interface. La classe Interface est conçue pour créer des démos pour les modèles de machine learning qui acceptent une ou plusieurs entrées et renvoient une ou plusieurs sorties.
La classe Interface a trois arguments principaux :
fn : la fonction à envelopper dans une interface utilisateur (UI)inputs : le(s) composant(s) Gradio à utiliser pour l'entrée. Le nombre de composants doit correspondre au nombre d'arguments de votre fonction.outputs : le(s) composant(s) Gradio à utiliser pour la sortie. Le nombre de composants doit correspondre au nombre de valeurs de retour de votre fonction.L'argument fn est très flexible — vous pouvez passer n'importe quelle fonction Python que vous souhaitez envelopper avec une UI. Dans l'exemple ci-dessus, nous avons vu une fonction relativement simple, mais la fonction pourrait être n'importe quoi, d'un générateur de musique à un calculateur d'impôts en passant par la fonction de prédiction d'un modèle de machine learning pré-entraîné.
Les arguments input et output acceptent un ou plusieurs composants Gradio. Comme nous le verrons, Gradio inclut plus de 30 composants intégrés (tels que les composants gr.Textbox(), gr.Image() et gr.HTML()) conçus pour les applications de machine learning.
[!TIP] Pour les arguments
inputsetoutputs, vous pouvez passer le nom de ces composants sous forme de chaîne ("textbox") ou une instance de la classe (gr.Textbox()).
Si votre fonction accepte plus d'un argument, comme c'est le cas ci-dessus, passez une liste de composants d'entrée à inputs, chaque composant d'entrée correspondant à l'un des arguments de la fonction, dans l'ordre. Il en va de même si votre fonction renvoie plus d'une valeur : passez simplement une liste de composants à outputs. Cette flexibilité fait de la classe Interface un moyen très puissant de créer des démos.
Nous approfondirons gr.Interface dans notre série sur la création d'interfaces.
À quoi bon une belle démo si vous ne pouvez pas la partager ? Gradio vous permet de partager facilement une démo de machine learning sans avoir à vous soucier des tracas d'hébergement sur un serveur web. Il suffit de définir share=True dans launch(), et une URL accessible publiquement sera créée pour votre démo. Reprenons notre exemple de démo, mais modifions la dernière ligne comme suit :
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # Partagez votre démo avec juste 1 paramètre supplémentaire 🚀
Lorsque vous exécutez ce code, une URL publique sera générée pour votre démo en quelques secondes, quelque chose comme :
👉 https://a23dsf231adb.gradio.live
Maintenant, n'importe qui dans le monde peut essayer votre démo Gradio depuis son navigateur, tandis que le modèle de machine learning et tous les calculs continuent de s'exécuter localement sur votre ordinateur.
Pour en savoir plus sur le partage de votre démo, lisez notre guide dédié sur le partage de votre application Gradio.
Jusqu'à présent, nous avons parlé de la classe Interface, qui est une classe de haut niveau permettant de créer rapidement des démos avec Gradio. Mais que fait d'autre Gradio ?
gr.ChatInterfaceGradio inclut une autre classe de haut niveau, gr.ChatInterface, spécialement conçue pour créer des interfaces de chatbot. Comme pour Interface, vous fournissez une fonction et Gradio crée une interface de chatbot entièrement fonctionnelle. Si vous êtes intéressé par la création d'un chatbot, vous pouvez passer directement à notre guide dédié sur gr.ChatInterface.
gr.BlocksGradio offre également une approche de bas niveau pour concevoir des applications web avec des mises en page et des flux de données plus flexibles grâce à la classe gr.Blocks. Blocks vous permet de contrôler où les composants apparaissent sur la page, de gérer des flux de données complexes (par exemple, les sorties peuvent servir d'entrées à d'autres fonctions) et de mettre à jour les propriétés/la visibilité des composants en fonction des interactions utilisateur — le tout en Python.
Vous pouvez créer des applications très personnalisées et complexes avec gr.Blocks(). Par exemple, la populaire interface web de génération d'images Automatic1111 Web UI est construite avec Gradio Blocks. Nous approfondissons gr.Blocks dans notre série sur la création avec Blocks.
C'est l'essentiel de la bibliothèque Python gradio de base, mais Gradio est en réalité bien plus ! C'est tout un écosystème de bibliothèques Python et JavaScript qui vous permet de créer des applications de machine learning, ou de les interroger par programmation, en Python ou en JavaScript. Voici d'autres parties liées de l'écosystème Gradio :
gradio_client) : interrogez n'importe quelle application Gradio par programmation en Python.@gradio/client) : interrogez n'importe quelle application Gradio par programmation en JavaScript.@gradio/lite) : écrivez des applications Gradio en Python qui s'exécutent entièrement dans le navigateur (aucun serveur nécessaire !), grâce à Pyodide.Continuez à apprendre Gradio de manière séquentielle avec les Guides Gradio, qui incluent des explications ainsi que des exemples de code et des démos interactives intégrées. Prochaine étape : les fonctionnalités clés des démos Gradio.
Ou, si vous connaissez déjà les bases et recherchez quelque chose de spécifique, vous pouvez consulter la documentation API plus technique.
Si vous souhaitez signaler un bug ou faire une demande de fonctionnalité, veuillez créer un problème sur GitHub. Pour des questions générales sur l'utilisation, nous sommes disponibles sur notre serveur Discord et heureux de vous aider.
Si vous aimez Gradio, laissez-nous une ⭐ sur GitHub !
Gradio est construit sur de nombreuses merveilleuses bibliothèques open source !
Gradio est sous licence Apache License 2.0, disponible dans le fichier LICENSE à la racine de ce dépôt.
Consultez également l'article Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019, et citez-le si vous utilisez Gradio dans vos travaux.
@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},
}