
Лаборатория исследований безопасности: контролируемое воспроизведение 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]
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 в нашей серии о создании интерфейсов.