Hub Python Library documentation

Webhooks 服务器

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Webhooks 服务器

Webhooks 是 MLOps 相关功能的基础。它允许你监听特定仓库的新变更,或监听你关注的所有用户/组织下的所有仓库。要了解有关 Huggingface Hub 上 Webhooks 的更多信息,你可以阅读 Webhooks 指南。

查看此指南,了解如何设置 Webhooks 服务器并将其部署为 Space 的分步教程。

这是一项实验性功能。这意味着我们仍在改进 API。未来可能会在不另行通知的情况下引入破坏性变更。请务必在依赖项中固定 huggingface_hub 的版本。 使用实验性功能时会触发警告。您可以通过将 HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1 设置为环境变量来禁用该警告。

服务器

服务器是一个 Gradio 应用。它提供了一个 UI,用于向您或您的用户展示操作说明,并提供一个 API 来监听 webhook。实现 webhook 端点只需对函数进行装饰即可。在将其部署到 Space 之前,您可以将 Webhooks 重定向到您的机器(使用 Gradio 隧道)来进行调试。

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *args**kwargs )

参数

  • ui (gradio.Blocks,可选) — 用作 Space 主页的 Gradio UI 实例。如果为 None,则会创建一个显示已配置 webhook 说明的 UI。
  • webhook_secret (str, 可选) — 用于验证传入 webhook 请求的密钥。您可以将此值设置为任意密钥,但前提是您也在 webhooks 设置面板 中进行了相应配置。您也可以将此值设置为 WEBHOOK_SECRET 环境变量。如果未提供密钥,webhook 端点将在没有任何安全保护的情况下开放。

WebhooksServer() 类允许你创建一个 Gradio 应用实例,用于接收 Huggingface webhook。 这些 webhook 可以使用 add_webhook() 装饰器进行注册。Webhook 端点会作为 POST 端点添加到 FastAPI 路由器中。在所有 webhook 注册完成后,必须调用 launch 方法来启动应用。

建议将 WebhookPayload 作为 webhook 函数的第一个参数。它是一个 Pydantic 模型,包含有关 webhook 事件的所有信息。数据会自动为您解析。

请参阅 webhooks 指南,了解如何设置 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, 可选) — 用于注册 webhook 函数的 URL 路径。如果未提供,则使用函数名作为路径。 无论如何,所有 webhook 都注册在 /webhooks 下。

用于启动 WebhooksServer() 并将被装饰的函数注册为 webhook 端点的装饰器。

这是一个用于快速上手的辅助工具。如果您需要更高的灵活性(例如自定义落地页或 webhook 密钥),可以直接使用 WebhooksServer()。通过多次使用该装饰器,您可以向同一服务器注册多个 webhook 端点。

请参阅 webhooks 指南,了解如何设置服务器并将其部署到 Space 的分步教程。

webhook_endpoint 目前处于实验阶段,其 API 未来可能会发生变化。

要使用 webhook_endpoint,必须已安装 gradio(pip install --upgrade gradio)。

示例: 默认用法是将函数注册为 webhook 端点。函数名将用作路径。 服务器将在退出时(即脚本末尾)自动启动。

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.

高级用法:将函数注册为 webhook 端点并手动启动服务器。这在您于 notebook 中运行时非常有用。

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

Payload

WebhookPayload 是包含 Webhook 负载的主要数据结构。这是一个 pydantic 类,因此与 FastAPI 配合使用非常方便。如果将其作为参数传递给 Webhook 端点,它将被自动验证并解析为 Python 对象。

有关 webhook 负载的更多信息,请参阅 Webhooks Payload 指南。

类 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