انتقل إلى المحتوى الرئيسي

الوحدة 8 — رابط المشاركة المؤقّت

launch(share=True) هو المفتاح السحريّ الذي جعل Gradio ينتشر: تحصل على رابط عامّ خلال ثواني، تُرسله لزميل في الطرف الآخر من العالم، فيجرّب عرضك دون تثبيت أيّ شيء. لكن السحر له كلفة يجب معرفتها قبل النقر. هذه الوحدة تشرح ما يفعله share=True بالضبط، وما يجعله مفيدًا، ومتى يصير خطأً.

ماذا يحدث عند share=True

استدعاء بسيط:

import gradio as gr

demo = gr.Interface(fn=lambda x: x.upper(), inputs="text", outputs="text")
demo.launch(share=True)

يطبع Gradio في الطرفيّة:

Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://abcd1234.gradio.live

الرابط الثاني يعمل من أيّ مكان في العالم. الآليّة كالتالي: Gradio يفتح نفقًا عبر خدمة gradio.live، فيمرّر كلّ الطلبات إلى خادمك المحلّيّ. لا حاجة إلى فتح منفذ في الجدار الناريّ، ولا إلى تكوين DNS، ولا إلى استئجار خادم.

ما يُكشَف بالضبط

النفق يعرض الواجهة كما هي على جهازك. هذا يعني:

  • كلّ من يحصل على الرابط يستطيع استعمال العرض بلا مصادقة.
  • الطلبات تصل إلى جهازك وتستهلك موارده (وحدة المعالجة، الذاكرة، GPU).
  • الجهاز نفسه لا يُعرَض: عنوانه غير مكشوف، لكنّ الدالّة التي كتبتها تُنفَّذ عليه.
  • الطلبات تمرّ عبر خوادم gradio.live: هذا يعني ثقة إضافيّة بمشغّل الخدمة.
  • مدّة الرابط 72 ساعة: بعدها يُغلق تلقائيًّا وتحتاج إلى launch(share=True) جديد.

المهمّ هنا هو أنّ الرابط لا يحتاج إلى دعوة. إذا سرّبه شخص في محادثة عامّة، فأيّ زائر يستطيع استعمال عرضك حتّى تُقطعه.

متى يكون رائعًا

  • عرض تجريبيّ مع زبون بعيد خلال مكالمة فيديو: بدل مشاركة الشاشة، أرسل الرابط ودعه يجرّب بيده.
  • جلسة تدريس أو ورشة: طلّاب يجرّبون العرض من هواتفهم دون تثبيت.
  • جمع ملاحظات مبكّرة من فريق داخليّ صغير قبل بناء نسخة إنتاج.
  • اختبار على شبكة عامّة لملاحظة سلوك التطبيق عند تأخّر شبكيّ حقيقيّ، لا محلّيّ فوريّ.

في كلّ هذه الحالات، الجمهور محدود، والزمن قصير، والبيانات غير حسّاسة.

متى يكون خطأً

  • بيانات المستخدم حسّاسة: تحميل صور شخصيّة، أو نصوص خاصّة، ثقة زائدة في نفق مفتوح.
  • النموذج مُكلف: كلّ طلب مِن مجهول يستنزف GPU يُكلّفك «USD» أو ما يعادلها فعليًّا.
  • البنية التحتيّة إنتاجيّة: مشاركة رابط .gradio.live من خادم إنتاج يفتح ثغرة في محيطك الأمنيّ.
  • مدّة الاستعمال متوقّعة أن تكون طويلة: 72 ساعة قصيرة، وستحتاج إلى تجديد الرابط بيدك.

للحالات الأربع أعلاه، الحلّ هو مساحة Hugging Face (الوحدة 9) أو خادم مخصّص خلف عكسيّ (reverse proxy) بمصادقة.

المصادقة البسيطة

قبل التخلّي عن share=True تمامًا، Gradio يوفّر مصادقة أساسيّة بسطر:

demo.launch(
share=True,
auth=("admin", "motDePasseFort2026!"),
)

المتصفّح يعرض حوار مصادقة قياسيًّا قبل تحميل الواجهة. القائمة قد تكون دالّة أيضًا:

def verifier(utilisateur, mot_de_passe):
return mot_de_passe == PIN_DU_JOUR.get(utilisateur)

demo.launch(share=True, auth=verifier)

هذا كافٍ لسير عمل تجريبيّ مع خمسة زملاء. ليس كافيًا لخدمة عامّة: كلمة المرور تُرسَل بترميز بسيط، ولا يوجد إدارة جلسات ولا استرداد كلمة مرور.

الاعتراض على مدّة الرابط

72 ساعة تكفي لعرض ورشة، لكنّها لا تكفي لخدمة داخليّة مستمرّة. الأدوات المفتوحة كـlocaltunnel وngrok تعطي مرونة أطول، لكنّ الحلّ المستدام هو:

  1. مساحة Hugging Face للعروض المفتوحة (رخيصة أو مجّانيّة، دائمة).
  2. خادم صغير خلف Nginx مع شهادة TLS لعرض داخليّ في شركة.
  3. Cloudflare Tunnel للنشر السريع مع نطاق خاصّ ومصادقة (بديل احترافيّ لـshare=True).

الوحدة القادمة تُغطّي الخيار الأوّل، الأكثر شعبيّة.

مثال كامل: عرض مع مصادقة ومدّة معقولة

import gradio as gr, os, secrets

MOT_DE_PASSE = secrets.token_urlsafe(12)
print(f"كلمة المرور لهذه الجلسة: {MOT_DE_PASSE}")

def repondre(message, historique):
return f"استلمت: {message}"

demo = gr.ChatInterface(
fn=repondre,
title="مساعد داخليّ — مؤقّت",
description="متاح خلال ساعات القمّة فقط. رابط ينتهي بعد 72 ساعة.",
)

demo.queue(default_concurrency_limit=2, max_size=10).launch(
share=True,
auth=("equipe", MOT_DE_PASSE),
server_name="127.0.0.1", # للاستماع محلّيّاً فقط، النفق يمرّ منه
show_error=False, # لا تكشف تفاصيل الأخطاء للمستخدم
)

هذا التركيب يوفّر:

  • كلمة مرور مولّدة عشوائيًّا لكلّ جلسة (تُطبع في السجلّ).
  • قائمة انتظار مضبوطة (الوحدة 7).
  • استماع محلّيّ فقط: النفق يعالج التمرير، لا اتصال مباشر بجهازك.
  • إخفاء تفاصيل الأخطاء الفنّيّة، فلا يرى المستخدم كودًا داخليًّا.
اختبر ثمّ شارك

قبل إرسال الرابط لأحد، افتحه في متصفّح ضيف (وضع تصفّح خاصّ) وتحقّق من أنّ الواجهة تعمل، وأنّ المصادقة تُرفَض بكلمة مرور خاطئة، وأنّ الأمثلة تُحمّل. اختبار دقيقتَين يوفّر إحراج «الرابط لا يعمل» عبر البريد.

تنبيهات قانونيّة

مشاركة رابط عامّ حتّى لثواني تُدخلك في مسؤوليّات قانونيّة:

  • بيانات المستخدم: إذا استقبل عرضك بيانات شخصيّة، قد تكون خاضعًا لقوانين حماية البيانات (RGPD في الاتّحاد الأوروبيّ، وما يشابهها في بلدان الخليج والمغرب).
  • حقوق مؤلّف النماذج: كثير من النماذج المفتوحة تحمل رخصًا تمنع الاستعمال التجاريّ. تعرّض العرض قد يُعتبر «استعمالًا تجاريًّا».
  • المحتوى الناتج: إذا أنتج النموذج محتوى مُضلِّلًا أو مسيئًا وشوهد من مستخدم عامّ، مسؤوليّتك عن التوضيح («نموذج تجريبيّ»).

الأداء التقنيّ ممتاز، لكن العقود القانونيّة يجب أن تسبق النقر.

الخلاصة

  • share=True يفتح نفقًا عبر gradio.live لمدّة 72 ساعة، بلا مصادقة تلقائيّة.
  • كلّ من يملك الرابط يستعمل جهازك؛ لا كشف لعنوان الخادم لكنّ الموارد مكشوفة للحمل.
  • auth=(...) يضيف مصادقة أساسيّة كافية لجلسة تجريبيّة، غير كافية لخدمة عامّة.
  • متى لا تُشارك: بيانات حسّاسة، نموذج مُكلف، إنتاج، أو مدّة طويلة — استعمل مساحة Hugging Face أو خادمًا خاصًّا.

الوحدة التالية: نشر العرض على مساحة Hugging Face، الحلّ الأنسب لعرض دائم مجّانيّ أو رخيص.