
Laboratorio de investigación de seguridad controlado que reproduce CVE-2024-1540 (inyección de comandos en GitHub Actions en gradio-app/gradio deploy+test-visual.yml) — instantánea aplanada de gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Artefacto de investigación automatizado — no es el proyecto original.
Este repositorio es un laboratorio desechable construido por un sistema automatizado para una tesis de maestría en la Université Laval sobre la reproducción de vulnerabilidades publicadas en flujos de trabajo de GitHub Actions. Es una instantánea verbatim de
gradio-app/gradioen el commitf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), redistribuida bajo la licencia de ese proyecto, cuyo archivo se incluye sin cambios en esta instantánea.El proyecto original no está involucrado, nunca es el objetivo, y la vulnerabilidad estudiada aquí ya es pública. Cada secreto y variable en este repositorio es un valor ficticio generado aleatoriamente — no hay ninguna credencial real presente. Las referencias a acciones e imágenes de ejecutores están fijadas a lo que resolvieron el 2024-02-09; consulta
pinning.mden la salida del sistema para cada cambio realizado en la instantánea.Preguntas u objeciones: [email protected]
Sitio web | Documentación | Guías | Primeros pasos | Ejemplos | 中文
Gradio es un paquete de Python de código abierto que te permite crear rápidamente una demo o aplicación web para tu modelo de aprendizaje automático, API o cualquier función arbitraria de Python. Luego puedes compartir un enlace a tu demo o aplicación web en solo unos segundos usando las funciones de intercambio integradas de Gradio. ¡No necesitas experiencia en JavaScript, CSS ni alojamiento web!

Solo se necesitan unas pocas líneas de Python para crear una demo hermosa como la anterior, así que comencemos 💫
Requisito previo: Gradio requiere Python 3.8 o superior
Recomendamos instalar Gradio usando pip, que viene incluido por defecto en Python. Ejecuta esto en tu terminal o símbolo del sistema:
pip install gradio
[!TIP] Es mejor instalar Gradio en un entorno virtual. Las instrucciones detalladas de instalación para todos los sistemas operativos comunes se proporcionan aquí.
Puedes ejecutar Gradio en tu editor de código favorito, cuaderno de Jupyter, Google Colab o en cualquier otro lugar donde escribas Python. Escribamos tu primera aplicación de 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] Acortamos el nombre importado de
gradioagrpara una mejor legibilidad del código. Esta es una convención ampliamente adoptada que deberías seguir para que cualquiera que trabaje con tu código pueda entenderlo fácilmente.
Ahora, ejecuta tu código. Si has escrito el código de Python en un archivo llamado, por ejemplo, app.py, entonces ejecutarías python app.py desde la terminal.
La demo de abajo se abrirá en un navegador en http://localhost:7860 si se ejecuta desde un archivo. Si estás ejecutando dentro de un cuaderno, la demo aparecerá integrada dentro del cuaderno.

Escribe tu nombre en el cuadro de texto de la izquierda, arrastra el control deslizante y luego presiona el botón Enviar. Deberías ver un saludo amigable a la derecha.
[!TIP] Cuando desarrolles localmente, puedes ejecutar tu aplicación de Gradio en modo de recarga automática, que recarga automáticamente la aplicación de Gradio cada vez que hagas cambios en el archivo. Para hacer esto, simplemente escribe
gradioantes del nombre del archivo en lugar depython. En el ejemplo anterior, escribirías:gradio app.pyen tu terminal. Aprende más sobre la recarga automática en la Guía de recarga automática.
Entendiendo la clase Interface
Notarás que para crear tu primera demo, creaste una instancia de la clase gr.Interface. La clase Interface está diseñada para crear demos para modelos de aprendizaje automático que aceptan una o más entradas y devuelven una o más salidas.
La clase Interface tiene tres argumentos principales:
fn: la función a envolver con una interfaz de usuario (UI)inputs: el/los componente(s) de Gradio a usar para la entrada. El número de componentes debe coincidir con el número de argumentos en tu función.outputs: el/los componente(s) de Gradio a usar para la salida. El número de componentes debe coincidir con el número de valores de retorno de tu función.El argumento fn es muy flexible — puedes pasar cualquier función de Python que quieras envolver con una UI. En el ejemplo anterior, vimos una función relativamente simple, pero la función podría ser cualquier cosa, desde un generador de música hasta una calculadora de impuestos o la función de predicción de un modelo de aprendizaje automático preentrenado.
Los argumentos input y output toman uno o más componentes de Gradio. Como veremos, Gradio incluye más de 30 componentes integrados (como los componentes gr.Textbox(), gr.Image() y gr.HTML()) diseñados para aplicaciones de aprendizaje automático.
[!TIP] Para los argumentos
inputsyoutputs, puedes pasar el nombre de estos componentes como una cadena ("textbox") o una instancia de la clase (gr.Textbox()).
Si tu función acepta más de un argumento, como es el caso anterior, pasa una lista de componentes de entrada a inputs, con cada componente de entrada correspondiente a uno de los argumentos de la función, en orden. Lo mismo aplica si tu función devuelve más de un valor: simplemente pasa una lista de componentes a outputs. Esta flexibilidad hace que la clase Interface sea una forma muy poderosa de crear demos.
Profundizaremos más en gr.Interface en nuestra serie sobre creación de interfaces.
¿De qué sirve una demo hermosa si no puedes compartirla? Gradio te permite compartir fácilmente una demo de aprendizaje automático sin tener que preocuparte por la molestia de alojarla en un servidor web. Simplemente establece share=True en launch(), y se creará una URL de acceso público para tu demo. Revisemos nuestra demo de ejemplo, pero cambiemos la última línea de la siguiente manera:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # Comparte tu demo con solo 1 parámetro adicional 🚀
Cuando ejecutes este código, se generará una URL pública para tu demo en cuestión de segundos, algo como:
👉 https://a23dsf231adb.gradio.live
Ahora, cualquier persona en el mundo puede probar tu demo de Gradio desde su navegador, mientras el modelo de aprendizaje automático y todo el cálculo continúan ejecutándose localmente en tu computadora.
Para aprender más sobre cómo compartir tu demo, lee nuestra guía dedicada sobre compartir tu aplicación de Gradio.
Hasta ahora, hemos estado hablando de la clase Interface, que es una clase de alto nivel que te permite crear demos rápidamente con Gradio. Pero, ¿qué más hace Gradio?
gr.ChatInterfaceGradio incluye otra clase de alto nivel, gr.ChatInterface, diseñada específicamente para crear interfaces de Chatbot. Similar a Interface, proporcionas una función y Gradio crea una interfaz de Chatbot completamente funcional. Si estás interesado en crear un chatbot, puedes ir directamente a nuestra guía dedicada sobre gr.ChatInterface.
gr.BlocksGradio también ofrece un enfoque de bajo nivel para diseñar aplicaciones web con diseños y flujos de datos más flexibles mediante la clase gr.Blocks. Blocks te permite hacer cosas como controlar dónde aparecen los componentes en la página, manejar flujos de datos complejos (por ejemplo, las salidas pueden servir como entradas para otras funciones) y actualizar propiedades/visibilidad de los componentes según la interacción del usuario — todo en Python.
Puedes crear aplicaciones muy personalizadas y complejas usando gr.Blocks(). Por ejemplo, la popular interfaz web de generación de imágenes Automatic1111 Web UI está construida con Gradio Blocks. Profundizamos más en gr.Blocks en nuestra serie sobre creación con Blocks.
Ese es el núcleo de la biblioteca de Python gradio, ¡pero Gradio es en realidad mucho más! Es un ecosistema completo de bibliotecas de Python y JavaScript que te permiten crear aplicaciones de aprendizaje automático, o consultarlas programáticamente, en Python o JavaScript. Aquí hay otras partes relacionadas del ecosistema de Gradio:
gradio_client): consulta cualquier aplicación de Gradio programáticamente en Python.@gradio/client): consulta cualquier aplicación de Gradio programáticamente en JavaScript.@gradio/lite): escribe aplicaciones de Gradio en Python que se ejecutan completamente en el navegador (¡sin necesidad de servidor!), gracias a Pyodide.Sigue aprendiendo sobre Gradio secuencialmente usando las Guías de Gradio, que incluyen explicaciones, así como código de ejemplo y demos interactivas integradas. Lo siguiente: características clave de las demos de Gradio.
O, si ya conoces los conceptos básicos y buscas algo específico, puedes buscar en la documentación técnica de la API.
Si deseas informar un error o tienes una solicitud de función, crea un issue en GitHub. Para preguntas generales sobre el uso, estamos disponibles en nuestro servidor de Discord y estaremos encantados de ayudarte.
Si te gusta Gradio, ¡déjanos una ⭐ en GitHub!
¡Gradio está construido sobre muchas bibliotecas de código abierto maravillosas!
Gradio está licenciado bajo la Licencia Apache 2.0 que se encuentra en el archivo LICENSE en el directorio raíz de este repositorio.
También consulta el artículo Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019, y cítalo si usas Gradio en tu trabajo.
@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},
}