⛑️ События: Использование __event_emitter__
и __event_call__
в Open WebUI
Плагинная архитектура Open WebUI — это не просто обработка входных данных и выдача выходных. Она о реальном времени, интерактивной коммуникации с интерфейсом и пользователями. Чтобы сделать ваши инструменты, функции и каналы более динамичными, Open WebUI предоставляет встроенную систему событий через вспомогательные функции __event_emitter__
и __event_call__
.
Это руководство объясняет что такое события, как вы можете их инициировать из своего кода, а также позволяет ознакомиться с полным каталогом типов событий, которые вы можете использовать (включая намного больше, чем просто "input"
).
🌊 Что такое события?
События — это уведомления в реальном времени или интерактивные запросы, отправляемые от вашего бекенда (инструмента или функции) к веб-интерфейсу. Они позволяют обновлять чат, отображать уведомления, запрашивать подтверждения, запускать UI-потоки и многое другое.
- События отправляются с помощью вспомогательной функции
__event_emitter__
для однонаправленных обновлений или через__event_call__
, когда требуется ввод пользователя или ответ (например, подтверждение, ввод и т. д.).
Метафора: Представьте события как push-уведомления и модальные диалоги, которые ваш плагин может инициировать, делая взаимодействие с чатом более богатым и интерактивным.
🧰 Базовое использование
Отправка события
Вы можете инициировать событие в любом месте внутри своего инструмента или функции, вызвав:
await __event_emitter__(
{
"type": "status", # Смотрите список типов событий ниже
"data": {
"description": "Процесс начался!",
"done": False,
"hidden": False,
},
}
)
Вам не нужно вручную добавлять поля, такие как chat_id
или message_id
— Open WebUI автоматически обрабатывает их.
Интерактивные события
Когда необходимо приостановить выполнение до получения ответа от пользователя (например, диалоги подтверждения/отмены, выполнение кода или ввод), используйте __event_call__
:
result = await __event_call__(
{
"type": "input", # Или "confirmation", "execute"
"data": {
"title": "Введите ваш пароль",
"message": "Пароль требуется для выполнения данного действия",
"placeholder": "Ваш пароль здесь",
},
}
)
# result будет содержать значение, введенное пользователем
📜 Структура полезной нагрузки события
Когда вы инициируете или вызываете событие, базовая структура выглядит так:
{
"type": "event_type", // См. полный список ниже
"data": { ... } // Полезная нагрузка, специфичная для события
}
В большинстве случаев вам нужно указать только "type"
и "data"
. Open WebUI автоматически добавляет всю маршрутизацию.