Hub Python Library documentation
Webhooks サーバー
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
< source >( *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)。
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
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
< 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
クラス 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
クラス huggingface_hub.WebhookPayloadComment
< source >( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )
WebhookPayloadDiscussion
クラス 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
class huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
class huggingface_hub.WebhookPayloadEvent
< source >( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )
WebhookPayloadMovedTo
WebhookPayloadRepo
クラス 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 )