
Контролируемая исследовательская лаборатория безопасности, воспроизводящая CVE-2024-1540 (инъекция команд в GitHub Actions в gradio-app/gradio deploy+test-visual.yml) — упрощённый снимок gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Автоматизированный исследовательский артефакт — не вышестоящий проект.
Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это точный снимок
gradio-app/gradioна коммитеf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), распространяемый под лицензией этого проекта, файл которой включён в этот снимок без изменений.Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение; никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которые они имели на 2024-02-09; см.
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 в нашей серии о создании интерфейсов.