Hub Python Library documentation

خادم Webhooks

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

خادم Webhooks

تُعدّ Webhooks أساسًا للميزات المتعلقة بـ MLOps. فهي تتيح لك الاستماع إلى التغييرات الجديدة في مستودعات محددة أو في جميع المستودعات التابعة لمستخدمين أو منظمات معينة ترغب في متابعتها. لمعرفة المزيد حول Webhooks في Huggingface Hub، يمكنك قراءة دليل Webhooks.

اطّلع على هذا الدليل للحصول على شرح خطوة بخطوة حول كيفية إعداد خادم الويب هوك الخاص بك ونشره كـ Space.

هذه ميزة تجريبية. وهذا يعني أننا ما زلنا نعمل على تحسين واجهة برمجة التطبيقات (API). قد تُدخل تغييرات كاسرة في المستقبل دون إشعار مسبق. تأكد من تثبيت إصدار huggingface_hub في متطلباتك. يتم إطلاق تحذير عند استخدام ميزة تجريبية. يمكنك تعطيله عن طريق تعيين HF_HUB_DISABLE_EXPERIMENTAL_WARNING=1 كمتغير بيئة.

الخادم

الخادم هو تطبيق Gradio. يحتوي على واجهة مستخدم لعرض التعليمات لك أو لمستخدميك، وواجهة برمجية (API) للاستماع إلى webhooks. تنفيذ نقطة نهاية webhook بسيطة إلى حد ما، إذ يكفي تزيين دالة. يمكنك بعد ذلك تصحيح الأخطاء عن طريق إعادة توجيه webhooks إلى جهازك (باستخدام نفق Gradio) قبل نشره على Space.

WebhooksServer

huggingface_hub.WebhooksServer

< >

( *args**kwargs )

المعاملات

  • ui (gradio.Blocks، اختياري) — مثال على واجهة Gradio يُستخدم كصفحة هبوط للمساحة. إذا كان None، يتم إنشاء واجهة تعرض تعليمات حول الخطافات (webhooks) المُهيأة.
  • webhook_secret (str, اختياري) — مفتاح سري للتحقق من طلبات webhook الواردة. يمكنك تعيين هذا القيمة إلى أي سر تريده طالما قمت بتكوينه أيضًا في لوحة إعدادات webhooks الخاصة بك. يمكنك أيضًا تعيين هذا القيمة كمتغير البيئة WEBHOOK_SECRET. إذا لم يتم توفير أي سر، فإن نقاط نهاية webhook تُفتح دون أي أمان.

تتيح لك فئة WebhooksServer() إنشاء نسخة من تطبيق Gradio يمكنها استقبال خطافات Huggingface. يمكن تسجيل هذه الخطافات باستخدام مُزيّن add_webhook(). تُضاف نقاط نهاية الخطافات إلى التطبيق كنقطة نهاية POST إلى موجّه FastAPI. بمجرد تسجيل جميع الخطافات، يجب استدعاء طريقة launch لبدء التطبيق.

يُوصى بقبول WebhookPayload كحجة أولى لدالة الويب هوك. وهو نموذج Pydantic يحتوي على جميع المعلومات المتعلقة بحدث الويب هوك. سيتم تحليل البيانات تلقائياً من أجلك.

اطّلع على دليل webhooks للحصول على شرح خطوة بخطوة حول كيفية إعداد WebhooksServer ونشره على Space.

WebhooksServer تجريبي. قد تتغير واجهته البرمجية (API) في المستقبل.

يجب أن يكون gradio مثبّتًا لاستخدام WebhooksServer (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, اختياري) — مسار عنوان URL لتسجيل دالة webhook. إذا لم يُقدَّم، فسيتم استخدام اسم الدالة كمسار. في جميع الأحوال، تُسجَّل جميع webhooks تحت /webhooks.

مُزيِّن لبدء WebhooksServer() وتسجيل الدالة المُزيَّنة كنقطة نهاية webhook.

هذا مساعد للبدء بسرعة. إذا كنت بحاجة إلى مرونة أكبر (صفحة هبوط مخصصة أو سري Webhook)، يمكنك استخدام WebhooksServer() مباشرةً. يمكنك تسجيل نقاط نهاية Webhook متعددة (على نفس الخادم) من خلال استخدام هذا الزخّار (decorator) عدة مرات.

اطّلع على دليل webhooks للحصول على شرح خطوة بخطوة حول كيفية إعداد خادمك ونشره على Space.

webhook_endpoint تجريبي. قد تتغير واجهته البرمجية (API) في المستقبل.

يجب أن يكون gradio مثبّتًا لاستخدام webhook_endpoint (pip install --upgrade gradio).

أمثلة: الاستخدام الافتراضي هو تسجيل دالة كنقطة نهاية (endpoint) لـ 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.

الاستخدام المتقدم: تسجيل دالة كنقطة نهاية (endpoint) لـ webhook وبدء الخادم يدويًا. يكون هذا مفيدًا إذا كنت تشغّله في دفتر ملاحظات (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()

حمولة

WebhookPayload هي بنية البيانات الرئيسية التي تحتوي على الحمولة (payload) القادمة من Webhooks. وهي فئة pydantic مما يجعل استخدامها مع FastAPI سهلاً للغاية. إذا مررتها كمعامل إلى نقطة نهاية webhook، فسيتم التحقق منها وتحليلها تلقائياً ككائن Python.

لمزيد من المعلومات حول حمولة webhooks، يمكنك الرجوع إلى دليل حمولة Webhooks.

فئة 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

فئة huggingface_hub.WebhookPayloadDiscussionChanges

< >

( base: strmergeCommitId: str | None = None )

WebhookPayloadEvent

فئة 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