Hub Python Library documentation
خادم Webhooks
خادم 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
< source >( *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).
@webhook_endpoint
huggingface_hub.webhook_endpoint
< source >( path: str | None = None )
مُزيِّن لبدء 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
< 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
فئة huggingface_hub.WebhookPayloadDiscussionChanges
< source >( base: strmergeCommitId: str | None = None )
WebhookPayloadEvent
فئة 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 )