Hub Python Library documentation

Webhooks サーバー

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v2.4.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Webhooks サーバー

WebhooksはMLOps関連の機能の基盤です。特定のリポジトリ、またはフォローしたい特定のユーザー/組織に属するすべてのリポジトリでの変更を監視できます。Huggingface HubにおけるWebhooksの詳細については、Webhooksのガイドをご覧ください。

WebhookサーバーのセットアップとSpaceへのデプロイ方法をステップバイステップで解説したこのガイドをご覧ください。

これは実験的な機能です。つまり、APIの改善を継続的に進めている段階です。将来、事前の通知なしに破壊的変更が導入される可能性があります。huggingface_hubのバージョンをrequirementsに固定してください。 実験的な機能を使用すると、警告が表示されます。環境変数としてHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1を設定することで、これを無効にできます。

サーバー

サーバーはGradioアプリです。あなたやユーザー向けの指示を表示するUIと、WebhookをリッスンするためのAPIを備えています。Webhookエンドポイントの実装は、関数にデコレータを付与するだけで済みます。その後、Gradioトンネルを使用してWebhookをあなたのマシンにリダイレクトすることでデバッグし、Spaceにデプロイする前に確認できます。

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *args**kwargs )

パラメータ

  • ui (gradio.Blocks、省略可) — Space のランディングページとして使用する Gradio UI インスタンス。None の場合、設定された Webhook に関する説明を表示する UI が作成されます。
  • webhook_secret (str, 任意) — 受信した Webhook リクエストを検証するための秘密鍵です。Webhook 設定パネルでも同じ値を設定している限り、任意の秘密値を指定できます。また、WEBHOOK_SECRET 環境変数としてこの値を設定することもできます。秘密鍵が指定されない場合、Webhook エンドポイントはセキュリティなしで公開されます。

WebhooksServer() クラスを使用すると、Huggingface の Webhook を受信できる Gradio アプリのインスタンスを作成できます。 これらの Webhook は、add_webhook() デコレーターを使用して登録できます。Webhook エンドポイントは、FastAPI ルーターへの POST エンドポイントとしてアプリに追加されます。すべての Webhook の登録が完了したら、アプリを開始するために launch メソッドを呼び出す必要があります。

Webhook関数の第1引数としてWebhookPayloadを受け取ることをお勧めします。これはPydanticモデルであり、Webhookイベントに関するすべての情報を含んでいます。データは自動的にパースされます。

WebhooksServer の設定方法と Space へのデプロイ方法をステップバイステップで解説したチュートリアルは、webhooks ガイドを参照してください。

WebhooksServer は実験的な機能です。将来、API が変更される可能性があります。

WebhooksServer を使用するには、gradio のインストールが必要です(pip install --upgrade gradio)。

例:

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 )

パラメータ

  • path (str, 任意) — Webhook 関数を登録するための URL パスです。指定しない場合、関数名がパスとして使用されます。いずれの場合も、すべての Webhook は /webhooks 配下に登録されます。

WebhooksServer() を開始し、装飾された関数を Web フックのエンドポイントとして登録するためのデコレーターです。

これはクイックスタートのためのヘルパーです。より高い柔軟性(カスタムランディングページやWebhookシークレットなど)が必要な場合は、WebhooksServer()を直接使用できます。このデコレーターを複数回使用することで、複数のWebhookエンドポイントを(同じサーバーに)登録できます。

サーバーのセットアップとSpaceへのデプロイ方法をステップバイステップで解説したチュートリアルは、webhooksガイドをご覧ください。

webhook_endpoint は実験的な機能です。将来、API が変更される可能性があります。

webhook_endpoint を使用するには、gradio のインストールが必要です(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オブジェクトとして解析されます。

Webhooksペイロードの詳細については、Webhooks Payloadのガイドを参照してください。

クラス 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

クラス 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

クラス huggingface_hub.WebhookPayloadComment

< >

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

WebhookPayloadDiscussion

クラス 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

class huggingface_hub.WebhookPayloadDiscussionChanges

< >

( base: strmergeCommitId: str | None = None )

WebhookPayloadEvent

class huggingface_hub.WebhookPayloadEvent

< >

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

WebhookPayloadMovedTo

class huggingface_hub.WebhookPayloadMovedTo

< >

( name: strowner: ObjectId )

WebhookPayloadRepo

クラス 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

クラス huggingface_hub.WebhookPayloadUrl

< >

( web: strapi: str | None = None )

WebhookPayloadWebhook

クラス huggingface_hub.WebhookPayloadWebhook

< >

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

Update on GitHub