Hub Python Library documentation
Serveur de Webhooks
Serveur de Webhooks
Les webhooks constituent la base des fonctionnalités liées au MLOps. Ils vous permettent de surveiller les nouvelles modifications sur des dépôts spécifiques ou sur l’ensemble des dépôts appartenant à des utilisateurs/organisations particuliers que vous souhaitez suivre. Pour en savoir plus sur les webhooks du Huggingface Hub, vous pouvez consulter le guide sur les webhooks.
Consultez ce guide pour un tutoriel étape par étape sur la configuration de votre serveur de webhooks et son déploiement en tant que Space.
Il s’agit d’une fonctionnalité expérimentale. Cela signifie que nous travaillons encore à améliorer l’API. Des modifications cassantes pourraient être introduites à l’avenir sans préavis. Assurez-vous de fixer la version de
huggingface_hubdans vos dépendances. Un avertissement est déclenché lorsque vous utilisez une fonctionnalité expérimentale. Vous pouvez le désactiver en définissantHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1en tant que variable d’environnement.
Serveur
Le serveur est une application Gradio. Il dispose d’une interface utilisateur pour afficher des instructions à vous ou à vos utilisateurs, ainsi que d’une API pour écouter les webhooks. La mise en œuvre d’un point de terminaison de webhook est aussi simple que de décorer une fonction. Vous pouvez ensuite la déboguer en redirigeant les Webhooks vers votre machine (à l’aide d’un tunnel Gradio) avant de la déployer sur un Space.
WebhooksServer
huggingface_hub.WebhooksServer
< source >( *args**kwargs )
Paramètres
- ui (
gradio.Blocks, facultatif) — Une instance d’interface Gradio à utiliser comme page d’accueil de l’espace. SiNone, une interface affichant des instructions sur les webhooks configurés est créée. - webhook_secret (
str, optionnel) — Clé secrète pour vérifier les requêtes webhook entrantes. Vous pouvez définir cette valeur avec n’importe quel secret, à condition de le configurer également dans votre panneau de configuration des webhooks. Vous pouvez également définir cette valeur en tant que variable d’environnementWEBHOOK_SECRET. Si aucun secret n’est fourni, les points de terminaison webhook sont ouverts sans aucune sécurité.
La classe WebhooksServer() permet de créer une instance d'une application Gradio capable de recevoir des webhooks Huggingface.
Ces webhooks peuvent être enregistrés à l'aide du décorateur add_webhook(). Les points de terminaison des webhooks sont ajoutés à
l'application en tant que point de terminaison POST du routeur FastAPI. Une fois tous les webhooks enregistrés, la méthode launch doit être
appelée pour démarrer l'application.
Il est recommandé d’accepter WebhookPayload comme premier argument de la fonction webhook. Il s’agit d’un modèle Pydantic qui contient toutes les informations relatives à l’événement webhook. Les données seront analysées automatiquement pour vous.
Consultez le guide des webhooks pour un tutoriel étape par étape sur la configuration de votre WebhooksServer et son déploiement sur un Space.
WebhooksServerest expérimental. Son API est susceptible d’évoluer à l’avenir.
Vous devez avoir
gradioinstallé pour utiliserWebhooksServer(pip install --upgrade gradio).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
Décorateur pour démarrer un WebhooksServer() et enregistrer la fonction décorée en tant que point de terminaison de webhook.
Ceci est un utilitaire pour démarrer rapidement. Si vous avez besoin de plus de flexibilité (page d’accueil personnalisée ou secret de webhook), vous pouvez utiliser WebhooksServer() directement. Vous pouvez enregistrer plusieurs points de terminaison de webhook (sur le même serveur) en utilisant ce décorateur plusieurs fois.
Consultez le guide des webhooks pour un tutoriel étape par étape sur la configuration de votre serveur et son déploiement sur un Space.
webhook_endpointest expérimental. Son API est susceptible d'évoluer à l'avenir.
Vous devez avoir
gradioinstallé pour utiliserwebhook_endpoint(pip install --upgrade gradio).
Exemples : L'utilisation par défaut consiste à enregistrer une fonction en tant que point de terminaison de webhook. Le nom de la fonction sera utilisé comme chemin. Le serveur sera démarré automatiquement à la sortie (c'est-à-dire à la fin du 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.Utilisation avancée : enregistrez une fonction en tant que point de terminaison de webhook et démarrez le serveur manuellement. Cela est utile si vous l’exécutez dans un 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 est la structure de données principale qui contient la charge utile des Webhooks. Il s’agit d’une classe pydantic, ce qui la rend très facile à utiliser avec FastAPI. Si vous la passez en paramètre à un point de terminaison de webhook, elle sera automatiquement validée et analysée en tant qu’objet Python.
Pour plus d’informations sur la charge utile des webhooks, vous pouvez consulter le guide Webhooks Payload.
classe 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
classe 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
classe huggingface_hub.WebhookPayloadComment
< source >( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )
WebhookPayloadDiscussion
classe 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
classe huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
classe huggingface_hub.WebhookPayloadEvent
< source >( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )
WebhookPayloadMovedTo
WebhookPayloadRepo
classe 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 )