
Laboratoire de recherche en sécurité : reproduction contrôlée de CVE-2024-4254 (GHSA-fc78-c36r-cc59) — exécution de code/checkout de fork dans deploy-website.yml sur gradio-app/gradio @ d4c503a
Artefact 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 commitd4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02), redistribué sous la licence propre 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écuteurs sont épinglées à ce qu'elles résolvaient le 2024-08-02 ; 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 d'apprentissage automatique, 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 n'importe où 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.

Saisissez votre nom dans la zone de texte à gauche, faites glisser le curseur, puis appuyez sur le bouton Soumettre. Vous devriez voir un message d'accueil convivial à droite.
[!TIP] Lors d'un développement local, vous pouvez exécuter votre application Gradio en mode de 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 d'apprentissage automatique qui acceptent une ou plusieurs entrées et renvoient une ou plusieurs sorties.
La classe Interface possède trois arguments principaux :
fn : la fonction à envelopper d'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 d'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 d'apprentissage automatique 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 d'apprentissage automatique.
[!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 sert une belle démo si vous ne pouvez pas la partager ? Gradio vous permet de partager facilement une démo d'apprentissage automatique sans avoir à vous soucier des tracas d'hébergement sur un serveur web. Définissez simplement share=True dans launch(), et une URL accessible publiquement sera créée pour votre démo. Revenons à 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 seulement 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 d'apprentissage automatique 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écifiquement conçue pour créer des interfaces utilisateur de chatbot. Comme pour Interface, vous fournissez une fonction et Gradio crée une interface utilisateur 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 l'emplacement des composants 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 — toujours 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 que cela ! C'est tout un écosystème de bibliothèques Python et JavaScript qui vous permet de créer des applications d'apprentissage automatique, ou de les interroger par programmation, en Python ou en JavaScript. Voici d'autres parties connexes 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 séquentiellement avec les Guides Gradio, qui incluent des explications ainsi que des exemples de code et des démos interactives intégrées. Prochaine étape : 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 votre travail.
@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},
}