Hub Python Library documentation

Servidor de Webhooks

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Servidor de Webhooks

Los webhooks son la base de las funciones relacionadas con MLOps. Permiten escuchar nuevos cambios en repositorios específicos o en todos los repositorios que pertenecen a usuarios u organizaciones concretos que desees seguir. Para obtener más información sobre los webhooks en Huggingface Hub, puedes leer la guía de webhooks.

Consulta esta guía para un tutorial paso a paso sobre cómo configurar tu servidor de webhooks y desplegarlo como un Space.

Esta es una función experimental. Esto significa que seguimos trabajando en la mejora de la API. Es posible que se introduzcan cambios que rompan la compatibilidad en el futuro sin previo aviso. Asegúrate de fijar la versión de huggingface_hub en tus requisitos. Se emite una advertencia cuando usas una función experimental. Puedes desactivarla estableciendo HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1 como variable de entorno.

Servidor

El servidor es una aplicación de Gradio. Cuenta con una interfaz de usuario para mostrar instrucciones para ti o para tus usuarios y una API para escuchar webhooks. Implementar un punto de finalización de webhook es tan sencillo como decorar una función. Luego puedes depurarlo redirigiendo los Webhooks a tu máquina (usando un túnel de Gradio) antes de desplegarlo en un Space.

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *args**kwargs )

Parámetros

  • ui (gradio.Blocks, opcional) — Una instancia de interfaz de Gradio que se usará como página de inicio del Space. Si es None, se crea una interfaz que muestra instrucciones sobre los webhooks configurados.
  • webhook_secret (str, opcional) — Una clave secreta para verificar las solicitudes entrantes de webhook. Puede establecer este valor en cualquier secreto que desee, siempre que también lo configure en su panel de configuración de webhooks. También puede establecer este valor como la variable de entorno WEBHOOK_SECRET. Si no se proporciona ningún secreto, los puntos de conexión de webhook se abren sin ninguna seguridad.

La clase WebhooksServer() permite crear una instancia de una aplicación de Gradio que puede recibir webhooks de Huggingface. Estos webhooks se pueden registrar mediante el decorador add_webhook(). Los puntos finales de webhook se añaden a la aplicación como un punto final POST en el enrutador de FastAPI. Una vez que todos los webhooks están registrados, se debe llamar al método launch para iniciar la aplicación.

Se recomienda aceptar WebhookPayload como primer argumento de la función webhook. Es un modelo de Pydantic que contiene toda la información sobre el evento del webhook. Los datos se analizarán automáticamente por ti.

Consulta la guía de webhooks para un tutorial paso a paso sobre cómo configurar tu WebhooksServer y desplegarlo en un Space.

WebhooksServer es experimental. Su API está sujeta a cambios en el futuro.

Debes tener gradio instalado para usar WebhooksServer (pip install --upgrade gradio).

Ejemplo:

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 )

Parámetros

  • path (str, opcional) — La ruta de URL para registrar la función de webhook. Si no se proporciona, se usará el nombre de la función como ruta. En cualquier caso, todos los webhooks se registran bajo /webhooks.

Decorador para iniciar un WebhooksServer() y registrar la función decorada como un punto de extremo de webhook.

Este es un asistente para empezar rápidamente. Si necesitas más flexibilidad (página de inicio personalizada o secreto de webhook), puedes usar WebhooksServer() directamente. Puedes registrar múltiples puntos finales de webhook (en el mismo servidor) usando este decorador varias veces.

Consulta la guía de webhooks para un tutorial paso a paso sobre cómo configurar tu servidor y desplegarlo en un Space.

webhook_endpoint es experimental. Su API está sujeta a cambios en el futuro.

Debes tener gradio instalado para usar webhook_endpoint (pip install --upgrade gradio).

Ejemplos: El uso predeterminado es registrar una función como punto de entrada de webhook. El nombre de la función se usará como ruta. El servidor se iniciará automáticamente al salir (es decir, al final del 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
        ...

# Server is automatically started at the end of the script.

Uso avanzado: registra una función como punto de entrada de webhook e inicia el servidor manualmente. Esto es útil si lo estás ejecutando en un cuaderno.

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 es la estructura de datos principal que contiene el payload de los Webhooks. Se trata de una clase de pydantic, lo que facilita mucho su uso con FastAPI. Si la pasas como parámetro a un endpoint de webhook, se validará y analizará automáticamente como un objeto de Python.

Para obtener más información sobre el payload de los webhooks, puede consultar la guía de Webhooks Payload.

clase 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

clase 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

clase huggingface_hub.WebhookPayloadComment

< >

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

WebhookPayloadDiscussion

clase 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

clase huggingface_hub.WebhookPayloadDiscussionChanges

< >

( base: strmergeCommitId: str | None = None )

WebhookPayloadEvent

clase huggingface_hub.WebhookPayloadEvent

< >

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

WebhookPayloadMovedTo

clase huggingface_hub.WebhookPayloadMovedTo

< >

( name: strowner: ObjectId )

WebhookPayloadRepo

clase 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

clase huggingface_hub.WebhookPayloadUrl

< >

( web: strapi: str | None = None )

WebhookPayloadWebhook

clase huggingface_hub.WebhookPayloadWebhook

< >

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

Update on GitHub