
Laboratório de pesquisa em segurança: reprodução controlada do CVE-2024-4254 (GHSA-fc78-c36r-cc59) — checkout/execução de código do fork deploy-website.yml em gradio-app/gradio @ d4c503a
Artefacto de investigação automatizado — não é o projeto original.
Este repositório é um laboratório descartável construído por um harness automatizado para uma dissertação de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um snapshot verbatim de
gradio-app/gradiono commitd4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02), redistribuído sob a licença desse próprio projeto, cujo ficheiro está incluído inalterado neste snapshot.O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade aqui estudada já é pública. Todos os segredos e variáveis neste repositório são valores fictícios gerados aleatoriamente — nenhuma credencial real está presente. As referências de ações e imagens de runner estão fixadas ao que resolviam em 2024-08-02; consulte
pinning.mdno output do harness para todas as alterações feitas ao snapshot.Perguntas ou objeções: [email protected]
Website | Documentation | Guides | Getting Started | Examples | 中文
Gradio é um pacote Python de código aberto que permite criar rapidamente uma demo ou aplicação web para o seu modelo de machine learning, API, ou qualquer função Python arbitrária. Pode então partilhar um link para a sua demo ou aplicação web em apenas alguns segundos usando as funcionalidades de partilha integradas do Gradio. Não é necessária experiência com JavaScript, CSS ou hospedagem web!

São precisas apenas algumas linhas de Python para criar uma demo bonita como a acima, por isso vamos começar 💫
Pré-requisito: o Gradio requer Python 3.8 ou superior
Recomendamos instalar o Gradio usando pip, que vem incluído por predefinição no Python. Execute isto no seu terminal ou prompt de comando:
pip install gradio
[!TIP] É melhor instalar o Gradio num ambiente virtual. Instruções detalhadas de instalação para todos os sistemas operativos comuns são fornecidas aqui.
Pode executar o Gradio no seu editor de código favorito, Jupyter notebook, Google Colab, ou em qualquer outro lugar onde escreva Python. Vamos escrever a sua primeira aplicação 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] Abreviamos o nome importado de
gradioparagrpara melhor legibilidade do código. Esta é uma convenção amplamente adotada que deve seguir para que qualquer pessoa que trabalhe com o seu código o entenda facilmente.
Agora, execute o seu código. Se escreveu o código Python num ficheiro chamado, por exemplo, app.py, então deve executar python app.py no terminal.
A demo abaixo abrirá num navegador em http://localhost:7860 se executada a partir de um ficheiro. Se estiver a executar dentro de um notebook, a demo aparecerá incorporada no notebook.

Escreva o seu nome na caixa de texto à esquerda, arraste o slider e depois pressione o botão Submit. Deverá ver uma saudação amigável à direita.
[!TIP] Ao desenvolver localmente, pode executar a sua aplicação Gradio em modo de recarga automática (hot reload), que recarrega automaticamente a aplicação Gradio sempre que faz alterações ao ficheiro. Para tal, basta escrever
gradioantes do nome do ficheiro em vez depython. No exemplo acima, escreveria:gradio app.pyno seu terminal. Saiba mais sobre recarga automática no Guia de Recarga Automática.
Compreender a Classe Interface
Reparará que, para criar a sua primeira demo, criou uma instância da classe gr.Interface. A classe Interface foi concebida para criar demos para modelos de machine learning que aceitam uma ou mais entradas e devolvem uma ou mais saídas.
A classe Interface tem três argumentos principais:
fn: a função a envolver com uma interface de utilizador (UI)inputs: o(s) componente(s) Gradio a usar para a entrada. O número de componentes deve corresponder ao número de argumentos na sua função.outputs: o(s) componente(s) Gradio a usar para a saída. O número de componentes deve corresponder ao número de valores de retorno da sua função.O argumento fn é muito flexível — pode passar qualquer função Python que queira envolver com uma UI. No exemplo acima, vimos uma função relativamente simples, mas a função pode ser qualquer coisa, desde um gerador de música a uma calculadora de impostos ou à função de previsão de um modelo de machine learning pré-treinado.
Os argumentos input e output aceitam um ou mais componentes Gradio. Como veremos, o Gradio inclui mais de 30 componentes integrados (como os componentes gr.Textbox(), gr.Image() e gr.HTML()) concebidos para aplicações de machine learning.
[!TIP] Para os argumentos
inputseoutputs, pode passar o nome destes componentes como uma string ("textbox") ou uma instância da classe (gr.Textbox()).
Se a sua função aceitar mais do que um argumento, como no caso acima, passe uma lista de componentes de entrada para inputs, com cada componente de entrada a corresponder a um dos argumentos da função, por ordem. O mesmo se aplica se a sua função devolver mais do que um valor: basta passar uma lista de componentes para outputs. Esta flexibilidade torna a classe Interface uma forma muito poderosa de criar demos.
Iremos aprofundar o gr.Interface na nossa série sobre criação de Interfaces.
De que serve uma demo bonita se não a pode partilhar? O Gradio permite-lhe partilhar facilmente uma demo de machine learning sem se preocupar com o incómodo de hospedar num servidor web. Basta definir share=True em launch(), e será criado um URL publicamente acessível para a sua demo. Vamos revisitar a nossa demo de exemplo, mas alterar a última linha da seguinte forma:
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀
Quando executar este código, será gerado um URL público para a sua demo em questão de segundos, algo como:
👉 https://a23dsf231adb.gradio.live
Agora, qualquer pessoa em todo o mundo pode experimentar a sua demo Gradio a partir do seu navegador, enquanto o modelo de machine learning e toda a computação continuam a ser executados localmente no seu computador.
Para saber mais sobre como partilhar a sua demo, leia o nosso guia dedicado sobre partilhar a sua aplicação Gradio.
Até agora, discutimos a classe Interface, que é uma classe de alto nível que permite criar demos rapidamente com o Gradio. Mas o que mais faz o Gradio?
gr.ChatInterfaceO Gradio inclui outra classe de alto nível, gr.ChatInterface, concebida especificamente para criar UIs de Chatbot. Semelhante ao Interface, fornece uma função e o Gradio cria um UI de Chatbot totalmente funcional. Se estiver interessado em criar um chatbot, pode avançar diretamente para o nosso guia dedicado sobre gr.ChatInterface.
gr.BlocksO Gradio também oferece uma abordagem de baixo nível para conceber aplicações web com layouts e fluxos de dados mais flexíveis usando a classe gr.Blocks. Blocks permite-lhe fazer coisas como controlar onde os componentes aparecem na página, lidar com fluxos de dados complexos (por exemplo, saídas podem servir como entradas para outras funções) e atualizar propriedades/visibilidade de componentes com base na interação do utilizador — tudo ainda em Python.
Pode construir aplicações muito personalizadas e complexas usando gr.Blocks(). Por exemplo, a popular interface web de geração de imagens Automatic1111 Web UI é construída com Gradio Blocks. Aprofundamos o gr.Blocks na nossa série sobre criação com Blocks.
Essa é a essência da biblioteca Python central gradio, mas o Gradio é na verdade muito mais! É um ecossistema inteiro de bibliotecas Python e JavaScript que permitem construir aplicações de machine learning, ou consultá-las programaticamente, em Python ou JavaScript. Aqui estão outras partes relacionadas do ecossistema Gradio:
gradio_client): consulte qualquer aplicação Gradio programaticamente em Python.@gradio/client): consulte qualquer aplicação Gradio programaticamente em JavaScript.@gradio/lite): escreva aplicações Gradio em Python que são executadas inteiramente no navegador (sem necessidade de servidor!), graças ao Pyodide.Continue a aprender sobre o Gradio sequencialmente usando os Guias do Gradio, que incluem explicações, bem como código de exemplo e demos interativas incorporadas. A seguir: funcionalidades-chave sobre demos Gradio.
Ou, se já conhece o básico e procura algo específico, pode pesquisar a documentação da API mais técnica.
Se quiser reportar um bug ou tiver um pedido de funcionalidade, crie uma issue no GitHub. Para perguntas gerais sobre utilização, estamos disponíveis no nosso servidor Discord e teremos todo o gosto em ajudar.
Se gosta do Gradio, deixe-nos uma ⭐ no GitHub!
O Gradio é construído sobre muitas bibliotecas de código aberto fantásticas!
O Gradio é licenciado sob a Apache License 2.0 encontrada no ficheiro LICENSE no diretório raiz deste repositório.
Consulte também o artigo Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019, e cite-o se usar o Gradio no seu trabalho.
@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},
}