import gradio as gr

def greet(name, intensity):
return "Hello, " + name + "!" * int(intensity)

demo = gr.Interface(
fn=greet, # Функция, которая будет вызываться при отправке данных
inputs=["text", "slider"], # Типы входных компонентов UI: текстовое поле и слайдер
outputs=["text"], # Типы выходных компонентов UI: текстовое поле для результата
)

# Если нужна публичная ссылка share=True
demo.launch(share=True)

Установка Gradio

Давайте начнём с вопроса установки Gradio. На самом деле здесь всё очень просто. Прямо на главной странице есть раздел «Light, fast setup» с инструкцией, как это всё устанавливается. Выполняем pip install gradio в виртуальном окружении Python и запускаем python app.py.

Как я это сделал? У меня есть файл requirements.txt, который относится к моему тестовому проекту, и я добавил туда Gradio. Либо можно просто активировать тестовое окружение и набрать в нём pip install gradio. После этого можно создавать py-файлы приложений, которые будут выполняться.

Вот простое приложение. Чтобы использовать эту библиотеку, делаем импорт и придумываем алиас, например gr:

import gradio as gr

Этот пример можно найти в документации в разделе Get Started → Quick Start. Там есть инструкция по построению вашего первого демо-приложения.

Создание интерфейса

Что у нас здесь есть? У объекта gr есть метод Interface, который позволяет строить интерфейсы. У интерфейса есть:

  • обработчик — функция обработчик этого интерфейса
  • входные данные
  • выходные данные, которые будут возвращаться после обработки функции

В списке перечисляем те UI-компоненты, которые будут на входе, и те, которые будут на выходе. На входе у нас текстовое поле и слайдер. На выходе — просто текстовое поле для получения результата.

Функция-обработчик принимает аргументы name и intensity. name — это значение, которое будет приходить из текстового поля, а слайдер отвечает за интенсивность. На выходе будет строка «Hello» плюс то, что мы ввели в текстовое поле. Восклицательный знак будет повторяться ровно столько раз, сколько указана интенсивность в слайдере.

Для запуска интерфейса сохраняем его в переменную demo и вызываем метод launch(). Опционально можно передать аргумент share=True. Тогда будет сгенерирована публичная ссылка, которой можно поделиться с заказчиком или другими участниками проекта.

Тестирование приложения

Давайте запустим приложение. Оно запустилось на локальном компьютере, и была выдана публичная ссылка, доступная в интернете, пока приложение запущено. Если вы разрабатываете только для тестовых целей, этот параметр не нужен — всё будет разворачиваться только на локальном компьютере.

Вот такой интерфейс получился: текстовое поле и слайдер. Всё просто — мы указываем, что нам нужно текстовое поле и слайдер в этом интерфейсе, и они появляются. На выходе у нас просто текстовое поле.

Если набрать какой-то произвольный текст и нажать Submit, результат отображается. Так как интенсивность ноль, восклицательного знака нет. Если добавить значение слайдера, эти значения добавляются в выходные данные.

Также можно перейти по публичной ссылке, и откроется тот же самый интерфейс, только он уже будет доступен по сети интернет. Можно поделиться этой ссылкой с заказчиком. Пока приложение запущено, заказчик сможет потестировать интерфейс, при этом он выполняется на вашем домашнем компьютере.

Вот такое простое понимание: входные элементы, выходные элементы и обработчик для этих элементов.