Hub Python Library documentation

Máy chủ Webhooks

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Máy chủ Webhooks

Webhooks là nền tảng cho các tính năng liên quan đến MLOps. Chúng cho phép bạn lắng nghe các thay đổi mới trên các repo cụ thể hoặc trên tất cả các repo thuộc các người dùng/tổ chức nhất định mà bạn quan tâm. Để tìm hiểu thêm về webhooks trên Huggingface Hub, bạn có thể đọc hướng dẫn về Webhooks.

Xem hướng dẫn này để có hướng dẫn từng bước về cách thiết lập máy chủ webhooks của bạn và triển khai nó dưới dạng một Space.

Đây là một tính năng thử nghiệm. Điều này có nghĩa là chúng tôi vẫn đang tiếp tục cải thiện API. Các thay đổi gây mất tương thích có thể được đưa ra trong tương lai mà không có thông báo trước. Hãy đảm bảo cố định phiên bản của huggingface_hub trong các yêu cầu của bạn. Một cảnh báo sẽ được kích hoạt khi bạn sử dụng một tính năng thử nghiệm. Bạn có thể tắt nó bằng cách đặt HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1 như một biến môi trường.

Máy chủ

Server là một ứng dụng Gradio. Nó có giao diện người dùng để hiển thị các hướng dẫn cho bạn hoặc người dùng của bạn, cùng với một API để lắng nghe các webhook. Việc triển khai một điểm cuối webhook đơn giản như việc trang trí một hàm. Sau đó, bạn có thể gỡ lỗi bằng cách chuyển hướng các Webhooks đến máy của mình (sử dụng đường hầm Gradio) trước khi triển khai lên một Space.

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *args**kwargs )

Tham số

  • ui (gradio.Blocks, tùy chọn) — Một instance Gradio UI được dùng làm trang đích của Space. Nếu None, một UI hiển thị các hướng dẫn về các webhook đã cấu hình sẽ được tạo ra.
  • webhook_secret (str, tùy chọn) — Một khóa bí mật để xác thực các yêu cầu webhook đến. Bạn có thể đặt giá trị này thành bất kỳ bí mật nào bạn muốn, miễn là bạn cũng cấu hình nó trong bảng cài đặt webhooks của bạn. Bạn cũng có thể đặt giá trị này dưới dạng biến môi trường WEBHOOK_SECRET. Nếu không cung cấp bí mật, các điểm cuối webhook sẽ được mở mà không có bất kỳ bảo mật nào.

Lớp WebhooksServer() cho phép bạn tạo một instance của ứng dụng Gradio có thể nhận các webhook từ Huggingface. Các webhook này có thể được đăng ký bằng decorator add_webhook(). Các endpoint webhook được thêm vào ứng dụng dưới dạng endpoint POST cho FastAPI router. Sau khi tất cả các webhook được đăng ký, phương thức launch phải được gọi để khởi động ứng dụng.

Khuyến nghị nhận WebhookPayload làm đối số đầu tiên của hàm webhook. Đây là một mô hình Pydantic chứa tất cả thông tin về sự kiện webhook. Dữ liệu sẽ được tự động phân tích cho bạn.

Xem hướng dẫn webhooks để có hướng dẫn từng bước về cách thiết lập WebhooksServer của bạn và triển khai nó trên một Space.

WebhooksServer là thử nghiệm. API của nó có thể thay đổi trong tương lai.

Bạn phải cài đặt gradio để sử dụng WebhooksServer (pip install --upgrade gradio).

Ví dụ:

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 )

Tham số

  • path (str, optional) — Đường dẫn URL để đăng ký hàm webhook. Nếu không được cung cấp, tên hàm sẽ được sử dụng làm đường dẫn. Trong mọi trường hợp, tất cả các webhook đều được đăng ký dưới /webhooks.

Decorator để khởi động WebhooksServer() và đăng ký hàm được trang trí như một điểm cuối webhook.

Đây là công cụ hỗ trợ để bắt đầu nhanh chóng. Nếu bạn cần sự linh hoạt hơn (trang đích tùy chỉnh hoặc webhook secret), bạn có thể sử dụng WebhooksServer() trực tiếp. Bạn có thể đăng ký nhiều điểm cuối webhook (trên cùng một máy chủ) bằng cách sử dụng decorator này nhiều lần.

Xem hướng dẫn webhooks để có hướng dẫn từng bước về cách thiết lập máy chủ của bạn và triển khai nó trên một Space.

webhook_endpoint là thử nghiệm. API của nó có thể thay đổi trong tương lai.

Bạn phải cài đặt gradio để sử dụng webhook_endpoint (pip install --upgrade gradio).

Ví dụ: Cách sử dụng mặc định là đăng ký một hàm làm điểm cuối webhook. Tên hàm sẽ được dùng làm đường dẫn. Máy chủ sẽ được khởi động tự động khi thoát (tức là ở cuối 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.

Cách sử dụng nâng cao: đăng ký một hàm làm điểm cuối webhook và khởi động máy chủ thủ công. Cách này hữu ích nếu bạn đang chạy trong 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 là cấu trúc dữ liệu chính chứa payload từ Webhooks. Đây là một class pydantic, giúp việc sử dụng với FastAPI trở nên rất dễ dàng. Nếu bạn truyền nó làm tham số cho một webhook endpoint, nó sẽ được xác thực và phân tích tự động thành một đối tượng Python.

Để biết thêm thông tin về payload của webhooks, bạn có thể tham khảo hướng dẫn về Webhooks Payload.

lớp 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

lớp 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

lớp huggingface_hub.WebhookPayloadComment

< >

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

WebhookPayloadDiscussion

lớp 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

lớp huggingface_hub.WebhookPayloadDiscussionChanges

< >

( base: strmergeCommitId: str | None = None )

WebhookPayloadEvent

lớp huggingface_hub.WebhookPayloadEvent

< >

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

WebhookPayloadMovedTo

lớp huggingface_hub.WebhookPayloadMovedTo

< >

( name: strowner: ObjectId )

WebhookPayloadRepo

lớp 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

lớp huggingface_hub.WebhookPayloadUrl

< >

( web: strapi: str | None = None )

WebhookPayloadWebhook

lớp huggingface_hub.WebhookPayloadWebhook

< >

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

Update on GitHub