Hub Python Library documentation

Сервер вебхуков

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v2.4.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Сервер вебхуков

Webhooks являются основой для функций, связанных с MLOps. Они позволяют отслеживать новые изменения в конкретных репозиториях или во всех репозиториях, принадлежащих определённым пользователям или организациям, за которыми вы хотите следить. Чтобы узнать больше о webhooks в Huggingface Hub, вы можете прочитать руководство по Webhooks.

Ознакомьтесь с этим руководством с пошаговым учебником о том, как настроить сервер вебхуков и развернуть его как Space.

Это экспериментальная функция. Это означает, что мы продолжаем дорабатывать API. В будущем могут быть внесены изменения, нарушающие обратную совместимость, без предварительного уведомления. Убедитесь, что вы зафиксировали версию huggingface_hub в своих зависимостях. Предупреждение выводится при использовании экспериментальной функции. Вы можете отключить его, задав переменную окружения HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1.

Сервер

Сервер представляет собой приложение Gradio. В нём есть интерфейс для отображения инструкций для вас или ваших пользователей, а также API для приёма вебхуков. Реализация конечной точки вебхука сводится к декорированию функции. Затем вы можете отладить её, перенаправив вебхуки на ваш компьютер (используя туннель Gradio), прежде чем развернуть приложение в Space.

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *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).

Пример:

import gradio as gr
from huggingface_hub import WebhooksServer, WebhookPayload

with gr.Blocks() as ui:
    ...

app = WebhooksServer(ui=ui, webhook_secret="my_secret_key")

@app.add_webhook("/say_hello")
async def hello(payload: WebhookPayload):
    return {"message": "hello"}

app.launch()

@webhook_endpoint

huggingface_hub.webhook_endpoint

< >

( path: str | None = None )

Параметры

  • path (str, optional) — URL-путь для регистрации функции вебхука. Если не указан, в качестве пути будет использовано имя функции. В любом случае все вебхуки регистрируются под /webhooks.

Декоратор для запуска 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

< >

( 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

< >

( 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

< >

( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )

WebhookPayloadDiscussion

класс huggingface_hub.WebhookPayloadDiscussion

< >

( 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

< >

( base: strmergeCommitId: str | None = None )

WebhookPayloadEvent

класс huggingface_hub.WebhookPayloadEvent

< >

( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )

WebhookPayloadMovedTo

класс huggingface_hub.WebhookPayloadMovedTo

< >

( name: strowner: ObjectId )

WebhookPayloadRepo

класс huggingface_hub.WebhookPayloadRepo

< >

( id: strowner: ObjectIdhead_sha: str | None = Nonename: strprivate: boolsubdomain: str | None = Nonetags: list[str] | None = Nonetype: typing.Literal['dataset', 'model', 'space']url: WebhookPayloadUrl )

WebhookPayloadUrl

класс huggingface_hub.WebhookPayloadUrl

< >

( web: strapi: str | None = None )

WebhookPayloadWebhook

класс huggingface_hub.WebhookPayloadWebhook

< >

( id: strversion: typing.Literal[3] )

Update on GitHub