Hub Python Library documentation
Сервер вебхуков
Сервер вебхуков
Webhooks являются основой для функций, связанных с MLOps. Они позволяют отслеживать новые изменения в конкретных репозиториях или во всех репозиториях, принадлежащих определённым пользователям или организациям, за которыми вы хотите следить. Чтобы узнать больше о webhooks в Huggingface Hub, вы можете прочитать руководство по Webhooks.
Ознакомьтесь с этим руководством с пошаговым учебником о том, как настроить сервер вебхуков и развернуть его как Space.
Это экспериментальная функция. Это означает, что мы продолжаем дорабатывать API. В будущем могут быть внесены изменения, нарушающие обратную совместимость, без предварительного уведомления. Убедитесь, что вы зафиксировали версию
huggingface_hubв своих зависимостях. Предупреждение выводится при использовании экспериментальной функции. Вы можете отключить его, задав переменную окруженияHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1.
Сервер
Сервер представляет собой приложение Gradio. В нём есть интерфейс для отображения инструкций для вас или ваших пользователей, а также API для приёма вебхуков. Реализация конечной точки вебхука сводится к декорированию функции. Затем вы можете отладить её, перенаправив вебхуки на ваш компьютер (используя туннель Gradio), прежде чем развернуть приложение в Space.
WebhooksServer
huggingface_hub.WebhooksServer
< source >( *args**kwargs )
Параметры
- ui (
gradio.Blocks, необязательно) — Экземпляр интерфейса Gradio, используемый в качестве главной страницы Space. ЕслиNone, создается интерфейс с инструкциями о настроенных вебхуках. - webhook_secret (
str, optional) — Секретный ключ для проверки входящих запросов webhook. Вы можете задать любое секретное значение, при условии, что вы также настроите его в панели настроек webhook. Это значение также можно задать в переменной окруженияWEBHOOK_SECRET. Если секрет не указан, эндпоинты webhook будут открыты без какой-либо защиты.
Класс WebhooksServer() позволяет создать экземпляр приложения Gradio, который может принимать вебхуки Huggingface.
Эти вебхуки можно зарегистрировать с помощью декоратора add_webhook(). Конечные точки вебхуков добавляются в
приложение как POST-конечные точки для маршрутизатора FastAPI. После регистрации всех вебхуков необходимо вызвать метод launch,
чтобы запустить приложение.
Рекомендуется принимать WebhookPayload в качестве первого аргумента функции вебхука. Это модель Pydantic, содержащая всю информацию о событии вебхука. Данные будут распарсены автоматически.
Ознакомьтесь с руководством по вебхукам, где пошагово описано, как настроить ваш WebhooksServer и развернуть его на Space.
WebhooksServerявляется экспериментальным. Его API может измениться в будущем.
Для использования
WebhooksServerнеобходимо установитьgradio(pip install --upgrade gradio).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
Декоратор для запуска WebhooksServer() и регистрации декорируемой функции в качестве вебхук-эндпоинта.
Это вспомогательный инструмент для быстрого старта. Если вам нужна большая гибкость (например, собственная страница-заглушка или секрет вебхука), вы можете использовать WebhooksServer() напрямую. Вы можете зарегистрировать несколько конечных точек вебхуков (на одном и том же сервере), используя этот декоратор несколько раз.
См. руководство по вебхукам с пошаговым руководством по настройке сервера и его развертыванию в Space.
webhook_endpointявляется экспериментальным. Его API может измениться в будущем.
Для использования
webhook_endpointнеобходимо установитьgradio(pip install --upgrade gradio).
Примеры: По умолчанию функция регистрируется как вебхук-эндпоинт. Имя функции используется в качестве пути. Сервер запускается автоматически при завершении работы (то есть в конце скрипта).
from huggingface_hub import webhook_endpoint, WebhookPayload
@webhook_endpoint
async def trigger_training(payload: WebhookPayload):
if payload.repo.type == "dataset" and payload.event.action == "update":
# Trigger a training job if a dataset is updated
...
# Server is automatically started at the end of the script.Расширенное использование: зарегистрируйте функцию в качестве конечной точки вебхука и запустите сервер вручную. Это полезно, если вы работаете в ноутбуке.
from huggingface_hub import webhook_endpoint, WebhookPayload
@webhook_endpoint
async def trigger_training(payload: WebhookPayload):
if payload.repo.type == "dataset" and payload.event.action == "update":
# Trigger a training job if a dataset is updated
...
# Start the server manually
trigger_training.launch()Параметры
WebhookPayload — это основная структура данных, содержащая полезную нагрузку от Webhooks. Это
класс pydantic, что делает его очень удобным для использования с FastAPI. Если передать его в качестве параметра в endpoint вебхука, он
будет автоматически валидирован и распарсен как объект Python.
Для получения дополнительной информации о содержимом вебхуков обратитесь к руководству по содержимому вебхуков.
класс huggingface_hub.WebhookPayload
< source >( event: WebhookPayloadEventrepo: WebhookPayloadRepodiscussion: huggingface_hub._webhooks_payload.WebhookPayloadDiscussion | None = Nonecomment: huggingface_hub._webhooks_payload.WebhookPayloadComment | None = Nonewebhook: WebhookPayloadWebhookmovedTo: huggingface_hub._webhooks_payload.WebhookPayloadMovedTo | None = NoneupdatedRefs: list[huggingface_hub._webhooks_payload.WebhookPayloadUpdatedRef] | None = None )
WebhookPayload
класс huggingface_hub.WebhookPayload
< source >( event: WebhookPayloadEventrepo: WebhookPayloadRepodiscussion: huggingface_hub._webhooks_payload.WebhookPayloadDiscussion | None = Nonecomment: huggingface_hub._webhooks_payload.WebhookPayloadComment | None = Nonewebhook: WebhookPayloadWebhookmovedTo: huggingface_hub._webhooks_payload.WebhookPayloadMovedTo | None = NoneupdatedRefs: list[huggingface_hub._webhooks_payload.WebhookPayloadUpdatedRef] | None = None )
WebhookPayloadComment
класс huggingface_hub.WebhookPayloadComment
< source >( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )
WebhookPayloadDiscussion
класс huggingface_hub.WebhookPayloadDiscussion
< source >( id: strnum: intauthor: ObjectIdurl: WebhookPayloadUrltitle: strisPullRequest: boolstatus: typing.Literal['closed', 'draft', 'open', 'merged']changes: huggingface_hub._webhooks_payload.WebhookPayloadDiscussionChanges | None = Nonepinned: bool | None = None )
WebhookPayloadDiscussionChanges
класс huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
класс huggingface_hub.WebhookPayloadEvent
< source >( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )
WebhookPayloadMovedTo
WebhookPayloadRepo
класс huggingface_hub.WebhookPayloadRepo
< source >( id: strowner: ObjectIdhead_sha: str | None = Nonename: strprivate: boolsubdomain: str | None = Nonetags: list[str] | None = Nonetype: typing.Literal['dataset', 'model', 'space']url: WebhookPayloadUrl )