
Laboratório de pesquisa de segurança controlado que reproduz a CVE-2024-1540 (injeção de comandos no GitHub Actions em gradio-app/gradio deploy+test-visual.yml) — snapshot achatado de gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Artefacto de investigação automatizada — não é o projeto original.
Este repositório é um laboratório descartável construído por um sistema automatizado para uma dissertação de mestrado na Université Laval sobre a reprodução de vulnerabilidades publicadas em workflows do GitHub Actions. É um instantâneo verbatim de
gradio-app/gradiono commitf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), redistribuído sob a licença do próprio projeto, cujo ficheiro está incluído inalterado neste instantâneo.O projeto original não está envolvido, nunca é alvo, e a vulnerabilidade estudada aqui 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 a ações e imagens de runner estão fixadas no que resolviam em 2024-02-09; consulte
pinning.mdna saída do sistema para todas as alterações feitas ao instantâneo.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 alojamento 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 executaria python app.py a partir do 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 controlo deslizante 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, 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.
Compreendendo a Classe Interface
Notará 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 é o caso acima, passe uma lista de componentes de entrada para inputs, com cada componente de entrada correspondendo 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 a complicação de alojar 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) # Partilhe a sua demo com apenas 1 parâmetro extra 🚀
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 uma UI de Chatbot totalmente funcional. Se estiver interessado em criar um chatbot, pode ir 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 criar 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 usando Gradio Blocks. Aprofundamos o gr.Blocks na nossa série sobre criação com Blocks.
Essa é a essência da biblioteca Python gradio principal, mas o Gradio é na verdade muito mais! É um ecossistema inteiro de bibliotecas Python e JavaScript que permitem criar 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 servidor necessário!), 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 técnica da API.
Se quiser reportar um bug ou tiver um pedido de funcionalidade, crie um 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},
}