تشخيص النظام وتحليلات الاستخدام
يمنح Libre WebUI المسؤولين شاشتين مباشرتين للمثيل: صفحة النظام لتشخيص المضيف ووقت التشغيل، وصفحة الاستخدام لتحليلات استخدام النماذج والموفّرين. تقتصر كلتاهما على المسؤولين في الواجهة الخلفية والواجهة المرئية. تبقى قراءة الصفحتين داخل النشر؛ أما القياس الخارجي الاختياري فهو مسار مراقبة مستقل يضبطه المشغّل.
يمكن الوصول إليهما من عناصر المسؤول في الشريط الجانبي، أو اختصارات المسؤول في
قائمة علامات التبويب، أو مباشرة عبر /system و/usage. لا يستطيع غير المسؤولين
فتح أي منهما، وتُغلق علامات تبويب المسؤول إذا فقد حساب مسجل الدخول الدور admin.
تشخيص النظام
تعرض صفحة النظام (/system):
- المضيف: اسم المضيف والمنصة وإصدار النواة والمعمارية ومدة التشغيل وعدد وحدات CPU المنطقية وطراز CPU ومتوسط الحمل وما إذا كانت العملية تبدو داخل حاوية. لا توجد نسبة مئوية لاستخدام CPU؛ فالحمل المعروض هو متوسط الحمل فقط.
- وقت التشغيل: إصدار التطبيق وإصدار Node.js ومعرّف العملية ومدة تشغيلها ودليل العمل.
- الذاكرة: إجمالي ذاكرة المضيف والمتاح والمستخدم منها، إلى جانب RSS للعملية وأرقام heap.
- أنظمة الملفات: السعة والاستخدام لنظام ملفات وقت التشغيل (
/) ودليل البيانات (DATA_DIR). - الشبكة: أسماء الواجهات وعناوينها، مع عدادات البايتات المستلمة والمرسلة على Linux.
- Docker: إصدار المحرك ونظام تشغيل المضيف والنواة وCPU والذاكرة كما يبلغ عنها المحرك، وعدد الحاويات مع قائمة مختصرة بها عند توفر socket Docker.
تُحدّث الصفحة كل 30 ثانية أثناء تركيز علامتها، وبها زر تحديث يدوي. نقطة نهاية
الواجهة الخلفية هي GET /api/system، وتحميها المصادقة ودور مسؤول نشط وحد معدل لكل
مستخدم يبلغ 120 طلبًا في 15 دقيقة. لا تُخزّن الاستجابات مؤقتًا أبدًا
(Cache-Control: no-store)، ويجمع كل طلب قيمًا حديثة.
الاعتماد على socket Docker
تحل فقرة Docker نقطة نهايتها بالطريقة نفسها التي يحل بها وقت تشغيل Work والطرفية
التفاعلية: WORK_DOCKER_SOCKET عند تعيينه (ويكون دائمًا مسار socket Unix محليًا)،
وإلا DOCKER_HOST — عنوان unix:// أو نقطة tcp:// عبر HTTP عادي، مثل وكيل مفلتر
لواجهة Docker API — وإلا /var/run/docker.sock. لا تُستعلم عمدًا نقاط النهاية
ssh:// وnpipe://، ولا tcp:// عند تفعيل التحقق من TLS. تقتصر الطلبات بدقة على
طلبات GET للقراءة فقط إلى المحرك (الإصدار والمعلومات وقائمة الحاويات)، بمهلة
4 ثوانٍ وحجم استجابة محدود، وتُحد قائمة الحاويات عند 100 إدخال.
عند غياب socket صالح، تستمر بقية الصفحة في العمل: توضح لوحة Docker سبب عدم التوفر — socket غير مركب، أو مركب وغير مقروء، أو daemon غير قابل للوصول، أو نقطة نهاية بعيدة — بدل إفشال الطلب كله.
ما تكشفه الصفحة ولمن
تُختصر قائمة الحاويات عمدًا إلى: معرّف قصير واسم وصورة وحالة ووقت إنشاء. لا تُدرج متغيرات البيئة أو الوسوم أو مواضع التركيب أو أوامر الحاويات أو حمولات الفحص، ولا تظهر بيانات اعتماد في أي موضع من الاستجابة.
مع ذلك، تعرض الصفحة تفاصيل حقيقية للبنية التحتية: اسم المضيف ودليل العمل وعناوين IP
الداخلية وأسماء وصور كل الحاويات على مضيف Docker، لا حاويات Libre WebUI وحدها. وهذا
يتفق مع نموذج الثقة: في نشر Docker، يكون كل مسؤول Libre WebUI فعليًا مسؤولًا عن
المضيف (راجع Docker). امنح الدور admin وفقًا لذلك.
تحليلات الاستخدام
ترسم صفحة الاستخدام أعمال النماذج والموفّرين المنسوبة إلى المستخدمين. يحدث القياس عند كل حد تنفيذ مدعوم، ويشمل حاليًا:
- استدعاءات محادثة Ollama المحلية، بما فيها Chat الأصلي وWork المدعوم بـ Ollama؛
- استدعاءات محادثة CLI للوكلاء المثبتين واستدعاءات محرك Strands؛
- المحادثات المدعومة بالإضافات، المتدفقة وغير المتدفقة؛
- التضمينات وتوليد الصور وتحويل الكلام إلى نص والنص إلى كلام والصوت والفيديو عبر الإضافات؛
- واستدعاءات Work المدعومة بالإضافات.
لا تُنسب عمليات الخلفية التي لا يملكها مستخدم إلى حساب اصطناعي عمدًا، ولذلك لا تُقاس. ويظل الاستدعاء مسجلًا إذا فشل أو أُلغي.
يسجل كل حدث:
- معرّف المزوّد/الإضافة ولقطة لاسمه المعروض (تستخدم
ollamaوagent-cli:*السجل نفسه الذي تستخدمه مزوّدات الإضافات) - الإمكانية (
chatوembeddingوimageوsttوttsوaudioوvideo) - النموذج
- الحالة:
successأوerrorأوcancelled(يُحسب التدفق المقطوع كملغى) - أعداد الرموز فقط عندما يعيد المزوّد بيانات استخدام وصفية
- عدادات وحدات تناسب الإمكانية (حروف لـ TTS، وصور، ومدخلات تضمين، ووظائف للفيديو، وبايتات للصوت)
- المدة الكاملة وطابع زمني
- معرّف المستخدم صاحب الطلب
لا يُخزّن شيء آخر. لا تُكتب المطالبات أو الردود أو نقاط نهاية الموفّرين أو بيانات
الاعتماد أو أجسام أخطائهم أبدًا في جدول الاستخدام — ويُسجّل الاستدعاء الفاشل فقط
كـstatus = 'error'. تعيش الأحداث في قاعدة بيانات التطبيق المحددة (SQLite في
الوضع الفردي وPostgreSQL في وضع الفريق) وتُحفظ لمدة 400 يوم؛ وتُحذف الصفوف
الأقدم بصورة انتهازية عند الكتابة، بما لا يزيد على مرة يوميًا. القياس قائم على بذل
أفضل جهد، ولا يمكنه أبدًا التسبب في فشل طلب نموذج أو موفّر.
تقدم الصفحة نطاقات 7 و30 و90 يومًا عبر نقطة واحدة للمسؤولين فقط،
GET /api/plugins/usage?days=<1..365> (الافتراضي 30). وتعرض إجمالي الاستدعاءات
والرموز المبلّغ عنها ومعدل النجاح ومتوسط زمن الاستجابة ونسبة الاستدعاءات التي أبلغت
عن استهلاك رموز. وقراءة الصفحة عملية للقراءة فقط تعتمد على سجل الاستخدام الموجود
في النشر.
استخدام الوكلاء
يعرض قسم الوكلاء قرب أعلى الصفحة (استدعاءات وكلاء CLI ومحرك Strands) Claude Code وCodex وOpenCode وPi وStrands بصورة منفصلة. ويشمل استدعاءات كل وكيل ورموزه المبلّغ عنها واستدعاءاته الفاشلة أو الملغاة ومتوسط المدة وما يصل إلى 20 من أكثر النماذج استخدامًا. تغطي إجماليات الوكلاء جميع الاستدعاءات المطابقة للفترة المحددة، بصرف النظر عن حدود العرض في جدولي المزوّدين والنماذج الأكبر. وهي أجزاء من إجماليات الصفحة، وليست أحداث فوترة إضافية.
يعرض الوكيل الذي لا يملك سجلات لا توجد استدعاءات مسجّلة في هذه الفترة. لا يدل ذلك على تثبيت CLI الخاص به أو تسجيل الدخول إليه. وتعرض الاستدعاءات دون بيانات رموز وصفية لم يُبلَّغ عن الرموز؛ ولا تُقدّر العدادات المفقودة. تُحدّث الصفحة كل 20 ثانية أثناء ظهورها، كما توفر تحديثًا يدويًا.
يسجل استخدام CLI عملية استدعاء واحدة وعدادات الرموز التي يبلّغ عنها ذلك CLI. تحل اللقطات التراكمية محل القديمة، وتُزال التقارير المكررة لكل خطوة. تُجمع عدادات الذاكرة المؤقتة والاستدلال وفق بروتوكول كل CLI دون احتساب الأجزاء الفرعية مرتين. تحتفظ الاستدعاءات الملغاة والردود الجزئية التي تنتهي بفشل بنتيجتها الفعلية.
تُنسب استدعاءات Strands إلى الوكيل Strands. لا يملك المحرك مزوّد نماذج خاصًا به؛ فكل استدعاء نموذج يجريه يمر عبر مزوّدي Ollama أو الإضافات في Libre WebUI. لا تُستورد الاستدعاءات من خارج LWUI. وتبقى السجلات القديمة بلا عدادات رموز غير مقاسة.
تعرض نقطة النهاية هذا التفصيل المحدود في agents، بما يشمل الأسماء الخمسة المدعومة حتى عندما تكون عداداتها صفرًا. لا تكتشف القراءة نماذج CLI ولا تطلق وكلاء ولا تتصل بالمزوّدين. تستطيع الخوادم الأقدم التي تفتقد هذا الحقل عرض إدخالات الوكلاء المسجلة في تفصيل المزوّدين؛ ولا تُعرض إدخالات الوكلاء المفقودة على تلك الخوادم كاستخدام صفري مؤكد.
استكشاف النماذج والموفّرين
تربط ألوان النماذج بين الرسم اليومي وتقويم النشاط السنوي وجدول النماذج وأشرطة الموفّرين. وترافق الألوانَ أسماءُ النماذج والقيم ومؤشرات التحديد. ويغطي تقويم النشاط دائمًا آخر 365 يومًا بصرف النظر عن النطاق المحدد؛ ويحدد لون كل يوم النموذج الأكثر استخدامًا فيه.
ويتبدّل الرسم اليومي بين المكالمات والرموز. مرّر المؤشر فوق نموذج في وسيلة الإيضاح أو انقل إليه تركيز لوحة المفاتيح لتتبع خطه. وحدّد النموذج لإبقائه مميزًا، أو حدّده مجددًا لإلغاء التمييز، أو اختر عرض جميع النماذج لإعادة الضبط. ويوفّر جدول النماذج أيضًا إجراء تمييز. ويغيّر التمييزُ التركيزَ البصري مع الحفاظ على المجاميع اليومية وقيم الجدول ومجاميع الموفّرين.
حرّك المؤشر عبر الرسم أو استخدم استكشاف الاستخدام اليومي لفحص مجموع يوم وتفصيله حسب النموذج. ويدعم المنزلق اليومي التنقل بلوحة المفاتيح: تنتقل مفاتيح الأسهم بين الأيام، ويصل Home وEnd إلى أول يوم وآخره. وتستخدم الفترات اليومية وتسمياتها التوقيت العالمي UTC.
ويعرض الرسم افتراضيًا أكثر 12 اسم نموذج استدعاءً في الفترة المحددة، بما في ذلك عند عرض الرموز. ويظل كل نموذج قابلًا للفحص على حدة: ركّز على نموذج أو حدّده في الجدول أو في تفاصيل الموفّر لتحميل خطه اليومي الدقيق، حتى لو كان خارج تلك الاثني عشر. وتذكر رسالة التحميل اسم النموذج المطلوب أثناء جلب سجله.
ويُفصل خط النموذج الإضافي عن نماذج أخرى، وتستبعد المجموعة المتبقية استدعاءاته ورموزه المبلّغ عنها وإخفاقاته. ويحتوي الرسم على 13 خط نموذج مسمى كحد أقصى إلى جانب المجموعة المتبقية، وتظل قيمها اليومية متوافقة مع المجاميع نفسها. اختر عرض جميع النماذج للعودة إلى العرض الافتراضي.
وتجمع الخطوط اليومية الاستدعاءات التي تحمل اسم النموذج المسجل نفسه عبر الموفّرين. ويحتفظ جدول النماذج بإدخالات منفصلة لكل موفّر/نموذج، فقد يظهر النموذج نفسه تحت أكثر من موفّر. وتحتفظ النماذج المسماة بألوان فردية في الجدول وفي أشرطة الموفّرين، بما في ذلك النماذج خارج الرسم الافتراضي.
وتعرض تفاصيل الموفّرين حصة كل موفّر من الطلبات، وشريطًا مقسّمًا حسب النموذج، والرموز المبلّغ عنها، والاستدعاءات الفاشلة أو الملغاة، ومتوسط زمن الاستجابة. ويظل مزيج الإمكانات متاحًا أسفل تفصيلي النماذج والموفّرين.
لا تشمل مجاميع الرموز إلا الاستدعاءات التي أبلغ فيها الموفّر عن بيانات الاستخدام. وتُظهر نسبة التغطية الإبلاغَ الجزئي؛ ولا تُقدَّر أعداد الرموز الناقصة أبدًا من الطلبات ولا من نموذج آخر. وتعرض الفترة التي لا رموز مبلّغًا عنها فيها شرحًا في عرض الرموز، ويظل سجل طلباتها متاحًا في عرض المكالمات.
وتتضمن نقطة النهاية نقاطًا يومية لكل نموذج في modelSeries. ويطلب معامل الاستعلام
الاختياري model اسم نموذج مسجلًا واحدًا بالضبط إلى جانب الاثني عشر الافتراضية، مثل
GET /api/plugins/usage?days=30&model=<encoded-model-name>. وهي نقطة النهاية نفسها
المقصورة على المسؤولين والمخصصة للقراءة فقط: تستعلم سجل الاستخدام المحلي ولا تتصل
بموفّر نماذج لجلب السجل.
ويثبّت المعامل الاختياري to حدَّ نهاية الطلب عند ختم زمني Unix بالمللي ثانية. وهو
يتطلب model ولا يقبل إلا عددًا صحيحًا آمنًا غير سالب لا يتجاوز وقت الخادم الحالي.
ويرسل المتصفح قيمة range.to الخاصة بنظرة عامة عند تحميل نموذج مفرد، فيحافظ على حدود
يومها وسنتها بتوقيت UTC ويستبعد الاستدعاءات اللاحقة لذلك الختم. ومن دون to تستخدم
نقطة النهاية الوقت الحالي.
ويُبقي تحميل نموذج بطاقات النظرة العامة وجدولها ومجاميع موفّريها وألوانها كما هي. ولا يُضاف خطه اليومي إلا إذا طابقت حدود الوقت والمجاميع اليومية في الاستجابة تلك النظرة العامة. ولا يجمّد الحد الزمني قاعدة البيانات: فإذا غيّرت عمليات التعبئة التاريخية أو الحذف تلك المجاميع، يحدّث المتصفح النظرة العامة قبل عرض خط النموذج.
وإذا أغفل خادم أقدم modelSeries، يعرض الرسم السلسلة المجمّعة جميع النماذج مع شرح
بأن التفصيل حسب النموذج غير متاح. ويظل جدول النماذج متاحًا؛ ولا يستنتج المتصفح السجل
اليومي لكل نموذج من مجاميع الفترة ولا من التقويم السنوي.
لا يوجد مفتاح لتعطيل القياس. ولأن البيانات مجمعة بين الحسابات، يقتصر فحصها على المسؤولين.
تعرض صفحة الاستخدام الاستدعاءات والوحدات والرموز وزمن الاستجابة والنتائج. أضف حوكمة التكلفة عندما تحتاج الأحداث إلى أسعار ذات تواريخ سريان، أو تفصيل الإنفاق، أو الميزانيات، أو التنبيهات، أو التصدير المحاسبي. تبقى الأحداث التي لا تطابق سعرًا أو لا يبلغ موفّرها عن الاستخدام ظاهرة بلا تسعير بدل اعتبارها مجانية.
إسناد OpenRouter
منذ 0.18.0، تعرّف الطلبات إلى OpenRouter التطبيق عبر ترويسات إسناد التطبيق لدى
OpenRouter (HTTP-Referer: https://librewebui.org وعنوان التطبيق وتلميحات الفئة).
لا تُرسل هذه الترويسات إلا عندما يتجه الطلب إلى https://openrouter.ai نفسه، ولا
تُرسل إلى مسار مخصص أو مستضاف ذاتيًا، ولا تضيف شيئًا إلى ما يُخزّن محليًا.