Hub Python Library documentation
Máy chủ Webhooks
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_hubtrong 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 đặtHF_HUB_DISABLE_EXPERIMENTAL_WARNING=1như 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
< source >( *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ếuNone, 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ườngWEBHOOK_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.
WebhooksServerlà 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ụngWebhooksServer(pip install --upgrade gradio).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
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_endpointlà 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ụngwebhook_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
< 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
lớp 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
lớp huggingface_hub.WebhookPayloadComment
< source >( id: strauthor: ObjectIdhidden: boolcontent: str | None = Noneurl: WebhookPayloadUrl )
WebhookPayloadDiscussion
lớp 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
lớp huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
lớp huggingface_hub.WebhookPayloadEvent
< source >( action: typing.Literal['create', 'delete', 'move', 'update']scope: str )
WebhookPayloadMovedTo
WebhookPayloadRepo
lớp 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 )