Webhook 服务器
Webhook 是 MLOps 相关功能的基础。它们允许您监听特定仓库的新更改,或监听您感兴趣的特定用户/组织的所有仓库。要了解有关 Huggingface Hub 上 Webhook 的更多信息,您可以阅读 Webhook 指南.
查看此 指南,了解有关如何设置您的 Webhook 服务器并将其作为空间部署的分步教程。
这是一个实验性功能。这意味着我们仍在努力改进 API。将来可能会在未经事先通知的情况下引入重大更改。确保在您的要求中固定 huggingface_hub
的版本。当您使用实验性功能时,会触发警告。您可以通过将 HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1
作为环境变量来禁用它。
服务器
服务器是一个 Gradio 应用程序。它有一个 UI 用于向您或您的用户显示说明,以及一个 API 用于监听 Webhook。实现 Webhook 端点就像装饰一个函数一样简单。然后,您可以通过将 Webhook 重定向到您的机器(使用 Gradio 隧道)来调试它,然后再将其部署到空间。
WebhooksServer
huggingface_hub.WebhooksServer
< source >( *args **kwargs )
参数
- ui (
gradio.Blocks
, 可选) — 用于作为 Space 着陆页的 Gradio UI 实例。 如果为None
,则会创建一个显示有关配置的 Webhook 的说明的 UI。 - webhook_secret (
str
, 可选) — 用于验证传入 Webhook 请求的密钥。 您可以在 Webhook 设置面板 中配置此值。 您也可以将此值设置为WEBHOOK_SECRET
环境变量。 如果未提供密钥,则 Webhook 端点将在没有任何安全措施的情况下打开。
WebhooksServer() 类使您可以创建 Gradio 应用程序的实例,该实例可以接收 Huggingface Webhook。 这些 Webhook 可以使用 add_webhook()
装饰器注册。 Webhook 端点作为 FastAPI 路由器对 POST 端点的添加。 注册完所有 Webhook 后,必须调用 launch
方法才能启动应用程序。
建议将 WebhookPayload 作为 Webhook 函数的第一个参数。 它是一个 Pydantic 模型,其中包含有关 Webhook 事件的所有信息。 数据会自动为您解析。
查看 Webhook 指南,了解有关如何设置 WebhooksServer 并将其部署在 Space 上的分步教程。
WebhooksServer
处于实验阶段。 它的 API 在将来可能会发生变化。
您必须安装 gradio
才能使用 WebhooksServer
(pip install --upgrade gradio
)。
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: Optional = None )
装饰器用于启动 WebhooksServer() 并将装饰的函数注册为 Webhook 端点。
这是一个快速入门的助手。 如果您需要更多灵活性(自定义着陆页或 Webhook 密钥),您可以直接使用 WebhooksServer()。 您可以通过多次使用此装饰器来注册多个 Webhook 端点(到同一个服务器)。
查看 Webhook 指南,了解有关如何设置您的服务器并将其部署在 Space 上的分步教程。
webhook_endpoint
处于实验阶段。 它的 API 在将来可能会发生变化。
您必须安装 gradio
才能使用 webhook_endpoint
(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 端点并手动启动服务器。 这是在笔记本中运行时很有用。
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 是包含来自 Webhook 的有效负载的主要数据结构。 这是一个 pydantic
类,它使它非常易于与 FastAPI 一起使用。 如果您将其作为参数传递给 Webhook 端点,它将自动验证并解析为 Python 对象。
有关 Webhook 有效负载的更多信息,您可以参考 Webhook 有效负载 指南。
class huggingface_hub.WebhookPayload
< source >( event: WebhookPayloadEvent repo: WebhookPayloadRepo discussion: Optional = None comment: Optional = None webhook: WebhookPayloadWebhook movedTo: Optional = None updatedRefs: Optional = None )
WebhookPayload
class huggingface_hub.WebhookPayload
< source >( event: WebhookPayloadEvent repo: WebhookPayloadRepo discussion: Optional = None comment: Optional = None webhook: WebhookPayloadWebhook movedTo: Optional = None updatedRefs: Optional = None )
WebhookPayloadComment
类 huggingface_hub.WebhookPayloadComment
< 源代码 >( id: str author: ObjectId hidden: bool content: 可选 = None url: WebhookPayloadUrl )
WebhookPayloadDiscussion
类 huggingface_hub.WebhookPayloadDiscussion
< 源代码 >( id: str num: int author: ObjectId url: WebhookPayloadUrl title: str isPullRequest: bool status: Literal changes: 可选 = None pinned: 可选 = None )
WebhookPayloadDiscussionChanges
WebhookPayloadEvent
类 huggingface_hub.WebhookPayloadEvent
< 源代码 >( action: Literal
WebhookPayloadMovedTo
WebhookPayloadRepo
class huggingface_hub.WebhookPayloadRepo
< source >( id: str owner: ObjectId head_sha: Optional = None name: str private: bool subdomain: Optional = None tags: Optional = None type: Literal url: WebhookPayloadUrl )