
Лаборатория исследований безопасности: контролируемое воспроизведение CVE-2024-4254 (GHSA-fc78-c36r-cc59) — fork checkout/выполнение кода в deploy-website.yml в gradio-app/gradio @ d4c503a
Автоматизированный исследовательский артефакт — не вышестоящий проект.
Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это точный снимок
gradio-app/gradioна коммитеd4c503a471cfd202c56fbddd99d5da431a4b7478(2024-08-02), распространяемый под собственной лицензией этого проекта, файл которой включён без изменений в этот снимок.Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на то, чем они были на 2024-08-02; см.
pinning.mdв выводе системы для каждого изменения, внесённого в снимок.Вопросы или возражения: [email protected]
Website | Documentation | Guides | Getting Started | Examples | 中文
Gradio — это пакет Python с открытым исходным кодом, который позволяет быстро создавать демо-версию или веб-приложение для вашей модели машинного обучения, API или любой произвольной функции Python. Затем вы можете поделиться ссылкой на свою демо-версию или веб-приложение всего за несколько секунд с помощью встроенных функций совместного доступа Gradio. Никакого опыта в JavaScript, CSS или веб-хостинге не требуется!

Для создания красивого демо, как показано выше, нужно всего несколько строк Python, так что давайте начнём 💫
Предварительное требование: Gradio требует Python 3.8 или выше
Мы рекомендуем устанавливать Gradio с помощью pip, который включён в Python по умолчанию. Выполните эту команду в терминале или командной строке:
pip install gradio
[!TIP] Лучше всего устанавливать Gradio в виртуальное окружение. Подробные инструкции по установке для всех распространённых операционных систем приведены здесь.
Вы можете запускать Gradio в любимом редакторе кода, Jupyter notebook, Google Colab или в любом другом месте, где пишете Python. Давайте напишем ваше первое приложение 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] Мы сокращаем импортированное имя с
gradioдоgrдля лучшей читаемости кода. Это широко принятое соглашение, которому вы должны следовать, чтобы любой, кто работает с вашим кодом, мог легко его понять.
Теперь запустите свой код. Если вы записали код Python в файл с именем, например, app.py, то вам нужно выполнить python app.py в терминале.
Демо ниже откроется в браузере по адресу http://localhost:7860, если вы запускаете его из файла. Если вы работаете в notebook, демо появится встроенным в notebook.

Введите своё имя в текстовое поле слева, перетащите ползунок и нажмите кнопку Submit. Справа вы увидите дружеское приветствие.
[!TIP] При локальной разработке вы можете запускать своё приложение Gradio в режиме горячей перезагрузки, который автоматически перезагружает приложение Gradio при каждом изменении файла. Для этого просто введите
gradioперед именем файла вместоpython. В примере выше вы должны ввести в терминале:gradio app.py. Подробнее о горячей перезагрузке читайте в Руководстве по горячей перезагрузке.
Понимание класса Interface
Вы заметите, что для создания первого демо вы создали экземпляр класса gr.Interface. Класс Interface предназначен для создания демо-версий моделей машинного обучения, которые принимают один или несколько входов и возвращают один или несколько выходов.
Класс Interface имеет три основных аргумента:
fn: функция, вокруг которой создаётся пользовательский интерфейс (UI)inputs: компонент(ы) Gradio для ввода. Количество компонентов должно соответствовать количеству аргументов вашей функции.outputs: компонент(ы) Gradio для вывода. Количество компонентов должно соответствовать количеству возвращаемых значений вашей функции.Аргумент fn очень гибкий — вы можете передать любую функцию Python, которую хотите обернуть в UI. В примере выше мы видели относительно простую функцию, но функция может быть чем угодно: от генератора музыки до калькулятора налогов или функции предсказания предобученной модели машинного обучения.
Аргументы input и output принимают один или несколько компонентов Gradio. Как мы увидим, Gradio включает более 30 встроенных компонентов (таких как gr.Textbox(), gr.Image() и gr.HTML()), предназначенных для приложений машинного обучения.
[!TIP] Для аргументов
inputsиoutputsвы можете передать имя компонента в виде строки ("textbox") или экземпляр класса (gr.Textbox()).
Если ваша функция принимает более одного аргумента, как в примере выше, передайте список входных компонентов в inputs, где каждый входной компонент соответствует одному из аргументов функции по порядку. То же самое верно, если ваша функция возвращает более одного значения: просто передайте список компонентов в outputs. Такая гибкость делает класс Interface очень мощным способом создания демо-версий.
Мы подробнее рассмотрим gr.Interface в нашей серии о создании интерфейсов.
Что толку от красивого демо, если им нельзя поделиться? Gradio позволяет легко публиковать демо-версию машинного обучения, не беспокоясь о хлопотах с хостингом на веб-сервере. Просто установите share=True в launch(), и для вашего демо будет создан общедоступный URL. Давайте вернёмся к нашему примеру демо, но изменим последнюю строку следующим образом:
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 🚀
Когда вы запустите этот код, для вашего демо за считанные секунды будет сгенерирован общедоступный URL, например:
👉 https://a23dsf231adb.gradio.live
Теперь любой человек в мире может попробовать ваше демо Gradio в своём браузере, пока модель машинного обучения и все вычисления продолжают работать локально на вашем компьютере.
Чтобы узнать больше о публикации демо, прочитайте наше специальное руководство о публикации вашего приложения Gradio.
До сих пор мы обсуждали класс Interface, который является высокоуровневым классом, позволяющим быстро создавать демо-версии с помощью Gradio. Но что ещё умеет Gradio?
gr.ChatInterfaceGradio включает ещё один высокоуровневый класс, gr.ChatInterface, специально предназначенный для создания UI чат-ботов. Как и в Interface, вы предоставляете функцию, и Gradio создаёт полностью работающий UI чат-бота. Если вы заинтересованы в создании чат-бота, можете сразу перейти к нашему специальному руководству по gr.ChatInterface.
gr.BlocksGradio также предлагает низкоуровневый подход для проектирования веб-приложений с более гибкими макетами и потоками данных с помощью класса gr.Blocks. Blocks позволяет вам контролировать, где компоненты появляются на странице, обрабатывать сложные потоки данных (например, выходы могут служить входами для других функций) и обновлять свойства/видимость компонентов на основе взаимодействия с пользователем — и всё это на Python.
Вы можете создавать очень индивидуальные и сложные приложения с помощью gr.Blocks(). Например, популярный интерфейс генерации изображений Automatic1111 Web UI построен на Gradio Blocks. Мы подробнее рассмотрим gr.Blocks в нашей серии о создании с помощью Blocks.
Это суть основной библиотеки Python gradio, но на самом деле Gradio — это гораздо больше! Это целая экосистема библиотек Python и JavaScript, которые позволяют создавать приложения машинного обучения или программно запрашивать их на Python или JavaScript. Вот другие связанные части экосистемы Gradio:
gradio_client): программный запрос к любому приложению Gradio на Python.@gradio/client): программный запрос к любому приложению Gradio на JavaScript.@gradio/lite): создание приложений Gradio на Python, которые полностью работают в браузере (сервер не нужен!) благодаря Pyodide.Продолжайте изучать Gradio последовательно с помощью руководств Gradio, которые включают объяснения, примеры кода и встроенные интерактивные демо. Далее: ключевые особенности демо-версий Gradio.
Или, если вы уже знаете основы и ищете что-то конкретное, вы можете поискать в более технической документации по API.
Если вы хотите сообщить об ошибке или у вас есть запрос функции, пожалуйста, создайте issue на GitHub. По общим вопросам об использовании мы доступны на нашем сервере Discord и будем рады помочь.
Если вам нравится Gradio, пожалуйста, оставьте нам ⭐ на GitHub!
Gradio построен на основе множества замечательных библиотек с открытым исходным кодом!
Gradio лицензирован в соответствии с Apache License 2.0, находящейся в файле LICENSE в корневом каталоге этого репозитория.
Также ознакомьтесь со статьёй Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild, ICML HILL 2019, и, пожалуйста, цитируйте её, если используете Gradio в своей работе.
@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},
}