Hub Python Library documentation
Servidor de Webhooks
Servidor de Webhooks
Webhooks são a base para recursos relacionados a MLOps. Eles permitem que você acompanhe novas alterações em repositórios específicos ou em todos os repositórios pertencentes a usuários/organizações específicos que você deseja acompanhar. Para saber mais sobre webhooks no Huggingface Hub, você pode ler o guia de Webhooks.
Confira este guia para um tutorial passo a passo sobre como configurar seu servidor de webhooks e implantá-lo como um Space.
Este é um recurso experimental. Isso significa que ainda estamos trabalhando para melhorar a API. Alterações que quebram a compatibilidade podem ser introduzidas no futuro sem aviso prévio. Certifique-se de fixar a versão de
huggingface_hubnos seus requisitos. Um aviso é acionado quando você usa um recurso experimental. Você pode desativá-lo definindoHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1como uma variável de ambiente.
Servidor
O servidor é um aplicativo Gradio. Ele possui uma interface para exibir instruções para você ou seus usuários e uma API para receber webhooks. Implementar um endpoint de webhook é tão simples quanto decorar uma função. Em seguida, você pode depurá-lo redirecionando os Webhooks para sua máquina (usando um túnel do Gradio) antes de implantá-lo em um Space.
WebhooksServer
huggingface_hub.WebhooksServer
< source >( *args**kwargs )
Parâmetros
- ui (
gradio.Blocks, opcional) — Uma instância de interface do Gradio a ser usada como a página inicial do Space. SeNone, uma interface exibindo instruções sobre os webhooks configurados é criada. - webhook_secret (
str, opcional) — Uma chave secreta para verificar solicitações de webhook recebidas. Você pode definir esse valor como qualquer segredo que desejar, desde que também o configure no seu painel de configurações de webhooks. Você também pode definir esse valor como a variável de ambienteWEBHOOK_SECRET. Se nenhum segredo for fornecido, os endpoints de webhook serão abertos sem nenhuma segurança.
A classe WebhooksServer() permite criar uma instância de um aplicativo Gradio que pode receber webhooks do Huggingface.
Esses webhooks podem ser registrados usando o decorador add_webhook(). Os endpoints de webhook são adicionados ao
aplicativo como um endpoint POST no roteador FastAPI. Depois que todos os webhooks forem registrados, o método launch deve ser
chamado para iniciar o aplicativo.
É recomendado aceitar WebhookPayload como o primeiro argumento da função de webhook. Trata-se de um modelo Pydantic que contém todas as informações sobre o evento do webhook. Os dados serão analisados automaticamente para você.
Confira o guia de webhooks para um tutorial passo a passo sobre como configurar seu WebhooksServer e implantá-lo em um Space.
WebhooksServeré experimental. Sua API está sujeita a alterações no futuro.
Você deve ter
gradioinstalado para usarWebhooksServer(pip install --upgrade gradio).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
Decorador para iniciar um WebhooksServer() e registrar a função decorada como um endpoint de webhook.
Este é um auxiliar para começar rapidamente. Se você precisar de mais flexibilidade (página de destino personalizada ou segredo de webhook), pode usar WebhooksServer() diretamente. Você pode registrar múltiplos endpoints de webhook (no mesmo servidor) usando este decorador várias vezes.
Confira o guia de webhooks para um tutorial passo a passo sobre como configurar seu servidor e implantá-lo em um Space.
webhook_endpointé experimental. Sua API está sujeita a alterações no futuro.
Você deve ter
gradioinstalado para usarwebhook_endpoint(pip install --upgrade gradio).
Exemplos: O uso padrão é registrar uma função como um endpoint de webhook. O nome da função será usado como o caminho. O servidor será iniciado automaticamente na saída (ou seja, no final do 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 avançado: registre uma função como um endpoint de webhook e inicie o servidor manualmente. Isso é útil se você estiver executando em um 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 é a principal estrutura de dados que contém o payload dos Webhooks. Trata-se de uma classe pydantic, o que facilita muito seu uso com FastAPI. Se você a passar como parâmetro para um endpoint de webhook, ela será validada e analisada automaticamente como um objeto Python.
Para mais informações sobre o payload de webhooks, você pode consultar o guia de Payload de Webhooks.
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 )