Hub Python Library documentation
Servidor de Webhooks
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_huben tus requisitos. Se emite una advertencia cuando usas una función experimental. Puedes desactivarla estableciendoHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1como 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
< source >( *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 esNone, 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 entornoWEBHOOK_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.
WebhooksServeres experimental. Su API está sujeta a cambios en el futuro.
Debes tener
gradioinstalado para usarWebhooksServer(pip install --upgrade gradio).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
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_endpointes experimental. Su API está sujeta a cambios en el futuro.
Debes tener
gradioinstalado para usarwebhook_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
< 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
clase 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
clase huggingface_hub.WebhookPayloadComment
< source >( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )
WebhookPayloadDiscussion
clase 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
clase huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
clase huggingface_hub.WebhookPayloadEvent
< source >( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )
WebhookPayloadMovedTo
WebhookPayloadRepo
clase 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 )