* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
38 KiB
Compression Engines (العربية)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
يعتمد ضغط OmniRoute على عقود المحركات. يمكن للوضع تشغيل محرك واحد مباشرةً
(caveman أو rtk) أو مسار معالجة تراكبي حتمي ينفّذ عدة محركات بالترتيب.
الأوضاع
| الوضع | مسار المحرك | الإدخال المقصود |
|---|---|---|
off |
لا شيء | الحفاظ التام على الموجّه |
lite |
أدوات Caveman الخفيفة المساعدة | تنقية دائمة منخفضة المخاطر |
standard |
Caveman | تكثيف موجّهات اللغة الطبيعية |
aggressive |
Caveman + ملخّصات السجل/الأدوات | جلسات المحادثة الطويلة |
ultra |
Caveman + أدوات التقليم المساعدة | التعافي من بلوغ حد السياق |
rtk |
RTK | مخرجات الطرفية والصدفة والبناء والاختبار وgit |
omniglyph |
OmniGlyph | السياق كصورة عبر قناة المزوّد الأصلية |
stacked |
مسار معالجة، افتراضيًا rtk -> caveman |
سجلات أدوات ونصوص مختلطة، بأقصى توفير |
ملفات تعريف ضغط OmniGlyph
يقبل محرك omniglyph (الحزمة omniglyph، بالإصدار 1.4.0+) ملف تعريف دلاليًا مسمّى، يُضبط
عموميًا عبر omniglyph.profile في إعدادات الضغط أو لكل خطوة عبر إعدادات خطوة
مسار المعالجة التراكبي:
| ملف التعريف | الحدود |
|---|---|
aggressive |
الافتراضي. السياسة التي قاستها الإيصالات المنشورة — يحوّل النظام ووثائق الأدوات والسجل الكثيف إلى صور |
balanced |
يُبقي الحالة النشطة بصيغتها الأصلية، ويحمي آخر 8 أدوار، ويطوي السجل المغلق الأقدم |
coding-safe |
يُبقي الصلاحيات ومخططات الأدوات ومخرجات الأدوات النشطة بصيغتها الأصلية، ويحمي آخر 12 دورًا |
passthrough |
يوجّه دون تحويل؛ ويجري تخطي المحرك |
ملف التعريف هو حد أقصى، وليس حدًا أدنى: ترفض mergeCompressionProfileOptions في الحزمة
السماح لتجاوز من المستدعي بإعادة فتح مسار فاقد للبيانات كان ملف التعريف قد أغلقه، ولذلك لا يمكن لإعداد
preserveSystemPrompt: false الخاص بخطوة أن يعيد تمكين ضغط النظام ضمن coding-safe.
وفقًا للقياسات على قاعدة الشيفرة هذه: يرفع coding-safe وbalanced قيمة minCompressChars إلى
حدها الأقصى، ويُبقيان النظام ومخططات الأدوات ونتائج الأدوات بصيغتها الأصلية، ولذلك تتوقف الجلسة التي لم
يتراكم فيها سجل بعد عند below_min_chars ولا يحوّل المحرك أي شيء. ولهذا يكون الإعداد الافتراضي
هو aggressive بدلًا من ملف التعريف الأكثر أمانًا.
تحدّد الحزمة نطاق نموذجها وملف تعريفها بنفسها من إعدادات بيئتها. لا يفوّض OmniRoute القرار مطلقًا: يثبّت المهايئ بوابة النموذج على النطاق الأكثر تقييدًا في الحزمة، وبذلك لا يمكن لإعدادات بيئة المضيف سوى تضييق قائمة السماح، ولا يمكنها أبدًا توسيعها إلى ما يتجاوز الإيصالات التي قاسها OmniRoute.
سجل المحركات
يوجد السجل في open-sse/services/compression/engines/registry.ts. تعرض المحركات عقدًا مشتركًا:
id: معرّف ثابت للمحرك مثلcavemanأوrtkapply(text, config): مسار التنفيذ القديم الذي تستخدمه خطوط الأنابيب المكدّسةcompress(input, config): مسار التنفيذ الأساسي الذي يُرجع النص + الإحصاءاتgetConfigSchema(): يُرجع البنية الشبيهة بـ JSON Schema للإعدادات الصالحةvalidateConfig(config): يُرجع{ valid, errors[] }
يستخدم التسجيل registerCompressionEngine(engine) (أو registerEngine للحالات المتقدمة)،
الذي يستدعي assertValidEngine() وvalidateConfig(defaultConfig) قبل القبول.
استخدم unregisterCompressionEngine(id) لإزالة محرك في وقت التشغيل.
يسجّل strategySelector.ts المحركات المضمّنة قبل تشغيل الضغط. يتيح ذلك للمعاينة،
والضغط في وقت التشغيل، والوضع المكدّس، والاختبارات، والمحركات المستقبلية استخدام مسار التنفيذ نفسه.
ضغط أوصاف MCP (ذو صلة)
يضغط سجل منفصل بيانات التعريف الخاصة بأوصاف أدوات MCP على مستوى السجل — راجع
open-sse/mcp-server/descriptionCompressor.ts وMCP-SERVER.md. وهو يعيد استخدام
قواعد Caveman، لكنه يعمل على بيانات تعريف الأدوات، وليس على حمولات الطلبات.
محركات مضمّنة إضافية
إلى جانب Caveman وRTK وLLMLingua-2، يتضمن السجل عدة محركات متخصصة عديمة الفقدان / بنيوية (تستخدمها خطوط الأنابيب المكدّسة، وبيئة التجربة، والاختبارات):
| المحرك | المعرّف | وظيفته |
|---|---|---|
| CCR | ccr |
الضغط-الاسترجاع المعتمد على المحتوى (H4): يستبدل كتل النص الكبيرة المتجاورة بمراجع معنونة بالمحتوى، بحيث تُرسل الكتل المتكررة/الكبيرة مرة واحدة ثم يُشار إليها بعد ذلك. |
| headroom | headroom |
SmartCrusher (H3 + N5): ضغط جدولي ذكي عديم الفقدان لحمولات مصفوفات JSON المتجانسة إلى صيغة عمودية [N rows]. |
| ionizer | ionizer |
أخذ عينات من صفوف البداية/الوسط/النهاية للكتل المتجانسة الكبيرة جدًا، مع تخزين الجزء الأوسط المحذوف كمرجع CCR معنون بالمحتوى. |
| session-dedup | session-dedup |
إزالة التكرار عبر الأدوار بالعنونة وفق المحتوى (مستوحاة من TokenMizer): تحذف النص الذي سبق ظهوره في أدوار سابقة من الجلسة نفسها. |
تعليمة بروتوكول الاسترجاع لـ CCR (#8033): في المرة الأولى التي يستبدل فيها CCR كتلة واحدة أو أكثر في
طلب، يضيف المحرك في البداية رسالة system واحدة متكررة التنفيذ بأمان (تبدأ بالعلامة الحارسة
[CCR protocol]) لتعليم المستدعي عقد العلامة ← الأداة: ما تعنيه علامة
[CCR retrieve hash=<24hex> chars=N]، وأنه يجب نسخ التجزئة حرفيًا
(جميع المحارف السداسية العشرية الـ24 — ويُرجّح أن تكون التجزئات المنسوخة بشكل خاطئ سبب حالات
"تعذّر العثور على الكتلة")، وأن علامة [dedup:ref sha=...] تعني "ارجع إلى السجل"، وليس "استدعِ
الأداة". لا تُحقن الملاحظة إلا عندما تثبت tools[] المُعلن عنها من المستدعي أنه يستطيع
فعليًا الوصول إلى omniroute_ccr_retrieve (callerSupportsCcrRetrieve() في
open-sse/services/compression/engines/ccr/protocolInstruction.ts) — أما المستدعي العادي
المتوافق مع OpenAI الذي لا يملك تلك الأداة، فلا يتلقى أبدًا تعليمة لاستدعاء شيء لا يمكنه
الوصول إليه. ويُفرض تكرار التنفيذ الآمن عبر فحص سجل الرسائل بحثًا عن العلامة الحارسة
قبل الحقن، وبذلك لا تكدّس الطلبات متعددة الأدوار (التي تعيد تشغيل الرسائل السابقة)
الملاحظة مرةً لكل دور.
Caveman
يركّز وضع Caveman على التكثيف الدلالي للنثر العادي:
- يحافظ على كتل الشيفرة وعناوين URL وJSON والمسارات والبيانات المنظّمة
- يزيل الحشو والتحفّظ والسياق المتكرر والعبارات الرابطة المطوّلة
- يدعم حزم قواعد الملفات المدركة للغة في
open-sse/services/compression/rules/ - يظل متاحًا من خلال الأوضاع القديمة
standardوaggressiveوultra
مسار الوصول في لوحة التحكم هو Dashboard -> Context & Cache -> Caveman.
تفيد تقارير Caveman الأصلية بانخفاض رموز الإخراج بنسبة ~75%، ومتوسط توفير في الإخراج بنسبة 65% في الاختبارات المعيارية
ضمن نطاق 22-87%، وبأداة لضغط الإدخال بنسبة ~46%. تستخدم OmniRoute الرقم الخاص بجانب الإدخال في Caveman
عند توثيق وفورات المطالبات/السياق المكدّسة؛ ويظل وضع إخراج Caveman ميزة منفصلة
لسلوك الاستجابة.
RTK
يركّز وضع RTK على مخرجات الأوامر والأدوات:
- يكتشف فئات المخرجات مثل
git statusوgit branchوgit diffوVitest/Jest/Pytest، واختبارات Cargo/Go، وعمليات بناء TypeScript/Vite/Webpack، وESLint، وعمليات تدقيق/تثبيت npm، وسجلات Docker، وأوامر الصدفةfind/grep، وتتبعات المكدس، والسجلات العامة - يطبّق 49 عامل تصفية JSON من
open-sse/services/compression/engines/rtk/filters/ - يدعم خط المعالجة التصريحي بأسلوب RTK: إزالة ANSI، والاستبدال، والاختصار المبكر عند مطابقة المخرجات، وإزالة/الاحتفاظ بالأسطر، والاقتطاع لكل سطر، واقتطاع البداية/النهاية/الحد الأقصى للأسطر، والرجوع الاحتياطي عند الفراغ
- يدعم عوامل تصفية المشروع المقيّدة بالثقة في
.rtk/filters.jsonوعوامل التصفية العامة فيDATA_DIR/rtk/filters.json - يزيل تسلسلات ANSI وضوضاء التقدم والأسطر المتكررة والنصوص النمطية غير المفيدة
- يحافظ على الإخفاقات القابلة للمعالجة والتحذيرات والملخصات والملفات المتغيرة وسياق النهاية
- يمكنه اختياريًا الاحتفاظ بالمخرجات الخام المنقّحة للاسترداد/التصحيح عبر مسارات إدارة موثّقة
مسار الوصول في لوحة التحكم هو Dashboard -> Context & Cache -> RTK.
توجد التفاصيل التشغيلية لعوامل التصفية المخصصة والثقة والتحقق واسترداد المخرجات الخام في
RTK_COMPRESSION.md.
تفيد تقارير RTK الأصلية بتوفير 60-90% عند ضغط مخرجات الأوامر. ويوضح مثال README الخاص به
انخفاض جلسة Claude Code مدتها 30 دقيقة من ~118,000 رمز إلى ~23,900، أي توفير بنسبة 79.7%.
LLMLingua-2 (التقليم الدلالي)
ينفّذ وضع LLMLingua-2 تقليمًا دلاليًا للرموز على النثر باستخدام مصنّف رموز ONNX صغير، مكمّلًا محركي Caveman وRTK القائمين على القواعد:
- يضغط النثر في الرسائل غير التابعة للنظام فقط؛ ولا يغيّر مطلقًا كتل الشيفرة المسيّجة والبُنى الأخرى المحفوظة
- يشغّل الواجهة الخلفية
@atjsh/llmlingua-2(ONNX عبر@huggingface/transformers) في خيط عامل، بحيث لا يحظر استدلال النموذج مطلقًا حلقة أحداث الطلب - قابل للتكديس (
stackPriority35): يعمل في خط معالجة مكدّس بعد المحركات البنيوية (CCR وsession-dedup وheadroom وCaveman)، ولكن قبلultra، لأن التقليم الدلالي يكون أكثر فاعلية على النص المضغوط بنيويًا مسبقًا — مثلrtk -> caveman -> llmlingua - يتجاوز أي خطأ بأمان (فقدان التبعيات الاختيارية، أو إنشاء العامل، أو تحميل النموذج، أو الاستدلال، أو انتهاء المهلة) ← يُعاد النص الأصلي دون تغيير، وليس خطأً مطلقًا
موقع المحرك: open-sse/services/compression/engines/llmlingua/. ومسار الوصول في لوحة التحكم
هو Dashboard -> Context & Cache -> LLMLingua.
النماذج
النموذج الافتراضي هو TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank، بحجم ~57 MB،
وسريع). يتوفر نموذج BERT-base أعلى دقة (Arcoldd/llmlingua4j-bert-base-onnx،
بحجم ~710 MB) عبر حقل model في إعدادات المحرك. تنزّل @huggingface/transformers
النموذج المحدد عند الحاجة من HuggingFace Hub إلى
${DATA_DIR}/models/llmlingua عند أول استدعاء (modelStore.ts)؛ ويمكن بدلًا من ذلك استخدام تجاوز الإعداد
modelPath لتوجيهه إلى نسخة محلية (لعمليات التثبيت غير المتصلة / المعزولة شبكيًا).
التبعيات الاختيارية والتثبيت عند الطلب
تُعد حزمة تبعيات النظير لبيئة تشغيل LLMLingua القابلة للاستبعاد اختيارية. تُعلَن حزمتان بوصفهما
optionalDependencies في package.json وتُتركان خارجيتين في بناء الإنتاج
(scripts/build/prepublish.ts لا يضمّنهما في الحزمة):
| الحزمة | الإصدار (المثبّت) | ملاحظات |
|---|---|---|
@atjsh/llmlingua-2 |
2.0.5 |
حزمة الإدخال؛ تعلن الحزم الأخرى كتبعيات نظيرة |
js-tiktoken |
^1.0.20 |
مُجزّئ الرموز |
ثُبّت @huggingface/transformers عند ^4.2.0 (وهو مشترك مع مسار التضمينات المحلي
ويُضمَّن تتبعه أيضًا في الحزمة المستقلة)؛ ويعتمد @atjsh/llmlingua-2@2.0.5 عليه كتابع نظير بالإصدار
"^3.5.2 || ^4.0.0"، ولذلك يُدعَم كل من Transformers.js v3 وv4. منذ الإصدار 2.0.4،
لم يعد @atjsh/llmlingua-2 يتطلب @tensorflow/tfjs، ما أزال أكبر مكوّن منفرد
(TensorFlow.js) من حزمة SLM. الحزمتان المذكورتان أعلاه فقط هما تبعيتا SLM النظيرتان
القابلتان للاستبعاد. يؤدي تنفيذ npm install قياسي (للتطوير) إلى تثبيت الحزمة الاختيارية تلقائيًا ما لم تُحذف
التبعيات الاختيارية.
سبب التثبيت عند الطلب: تُشحن الحزمة المنشورة على npm والحزمة المستقلة وصورة Docker
من دون هذه التبعيات للحفاظ على صغر الحجم. عند غيابها، يفشل حاجز تبعيات العامل
(اختبار استبانة @atjsh/llmlingua-2 في worker.ts)، ويتجاوز المحرك الفشل بصمت — فيصبح تحديد LLMLingua عملية بلا تأثير (يُعاد النص دون تغيير، ولا
يُسجّل أي خطأ). لتفعيله في بيئة جرى استبعاد التبعيات منها، ثبّت الحزمة الاختيارية:
# ثبّت الإصدارات المعلنة في package.json optionalDependencies
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken
تؤدي إزالة @tensorflow/tfjs (2.0.4+) إلى التخلص من المكوّن الذي كان مهيمنًا سابقًا بحجم ~800 MB
— وتقتصر المساحة المتبقية على بيئات تشغيل transformers.js وonnxruntime-node،
بالإضافة إلى نموذج TinyBERT (~57 MB) الذي يُنزَّل عند أول استخدام (وليس عبر npm).
لكل بيئة:
- التطوير /
npm install— تُثبَّت تلقائيًا ما لم تمرّر--omit=optional(أو--no-optional). لا يلزم اتخاذ أي إجراء. - npm العام (
npm i -g omniroute) / التثبيت المستقل — شغّل أمر التثبيت أعلاه داخل دليل الحزمة المثبّتة، أو أعد التثبيت دون استبعاد التبعيات الاختيارية. - Docker — أضف أمر التثبيت في طبقة صورة مشتقة؛ فالصورة المنشورة تأتي مصغّرة حسب التصميم.
- VPS (PM2) — ثبّت داخل
node_modulesالخاص بالتطبيق، ثم أعد تشغيل العملية لكي يعيد العامل فحص البوابة. - نسخة Next المستقلة الخام (
npm run build→.build/next/standalone/server.js) — لا يتضمن تتبّع النسخة المستقلة العامل ولا التبعيات الاختيارية، لذلك يتجاوز المحرك القيود بصمت عند الفشل. يعيدscripts/build/colocate-standalone.mjsتطبيق كليهما (بناء العامل عبر esbuild + وإغلاق التبعيات الاختيارية داخل شجرة النسخة المستقلة)؛ ويعمل تلقائيًا عبر خطاف npm المسمىpostbuildبعد كل عملية بناء. قابل لإعادة التشغيل دون آثار جانبية، ويتعامل بمرونة مع الفشل عند غياب التبعيات.
تحقّق من أنه نشط: عند تحديد LLMLingua، يتقلّص النص النثري الفعلي بالفعل (إذ يتوقف المحرك
عن تجاوز القيود عند الفشل)، ويؤدي الطلب الأول إلى تنزيل النموذج داخل
${DATA_DIR}/models/llmlingua. تتعمّد البوابة فحص @atjsh/llmlingua-2 فقط —
فالحزم النظيرة الأخرى مخصّصة لـ ESM فقط، ويطرح require.resolve خطأً عند فحصها حتى عندما تكون موجودة — لذلك
يظل العامل متجاوزًا للقيود عند الفشل إذا كانت أي حزمة نظيرة مفقودة بالفعل وقت تنفيذ import().
خطوط الأنابيب المكدّسة
يشغّل الوضع المكدّس خطوات خط الأنابيب بالترتيب. الترتيب الافتراضي هو:
rtk -> caveman
استخدم هذا لجلسات وكلاء البرمجة التي تجمع فيها المطالبة بين مخرجات الأوامر والنص النثري البشري أو الصادر عن المساعد. يقلّل RTK أولًا من سجلات الأدوات المليئة بالضوضاء، ثم يضغط Caveman ما تبقّى من اللغة الطبيعية.
تُضبط خطوات خط الأنابيب باستخدام stackedPipeline في إعدادات الضغط أو من خلال توليفات الضغط.
عندما يقلّل كلا المحرّكين الحمولة المؤهلة نفسها، تتراكم الوفورات:
combined = 1 - (1 - RTK savings) * (1 - Caveman input savings)
average = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
range = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
مرشح شجرة إمكانية الوصول في MCP
مرشح شجرة إمكانية الوصول الذكي في MCP هو طبقة ضغط لاحقة للتنفيذ تعمل على نتائج الأدوات في MCP، وليس على المطالبات أو السياق. ويستهدف حمولات شجرة إمكانية الوصول ولقطات المتصفح المطوّلة التي تُرجعها أدوات مثل Playwright وcomputer-use وخوادم MCP لأتمتة المتصفح.
ما الذي يفعله
- إزالة الضوضاء — يزيل إدخالات العناصر العامة/النصية الفارغة (
- generic:و- text: "") - طيّ العناصر المتجاورة — عند وجود ≥
collapseThreshold(القيمة الافتراضية 30) سطرًا متتاليًا من التكرارات البنيوية، يطويها إلى أولcollapseKeepHead(القيمة الافتراضية 10) أسطر + ملخص للعدد + آخرcollapseKeepTail(القيمة الافتراضية 5) أسطر - الحفاظ على المراجع — لا يتم أبدًا المساس بمرتكزات
[ref=eXX]المطلوبة بواسطة Playwright وcomputer-use - الاقتطاع الصارم — إذا ظل النص بعد الطيّ يتجاوز
maxTextChars(القيمة الافتراضية 50,000)، يُقتطع مع تلميح للتنقل كي يتمكن الوكيل من متابعة العمل
موقع المحرّك
open-sse/services/compression/engines/mcpAccessibility/
index.ts ← smartFilterText() entry point
collapseRepeated.ts ← sibling-collapse algorithm
constants.ts ← DEFAULT_MCP_ACCESSIBILITY_CONFIG
الإعداد
تتحكم compression.mcpAccessibility في الإعدادات العامة (الترحيل 056). الإعداد الافتراضي:
{
"enabled": true,
"maxTextChars": 50000,
"collapseThreshold": 30,
"collapseKeepHead": 10,
"collapseKeepTail": 5,
"minLengthToProcess": 2000
}
لا يُطبّق المرشح إلا على حمولات نتائج الأدوات التي تكون قيمة type فيها هي "text" ويتجاوز طولها minLengthToProcess. ولا يؤثر في ضغط المطالبات أو حمولات الطلبات.
الوفورات المتوقعة
60–80% في نتائج أدوات لقطات المتصفح، اعتمادًا على تعقيد الصفحة. تعمل خوارزمية الطيّ بتعقيد O(n) بالنسبة إلى عدد الأسطر، ولا تضيف سوى زمن انتقال ضئيل.
مقارنة هذا المرشح بمحرّكات الضغط أعلاه
| الجانب | Caveman / RTK / المكدّس | مرشح إمكانية الوصول في MCP |
|---|---|---|
| الهدف | مطالبات الطلبات / السياق | نتائج أدوات MCP |
| المشغّل | إعداد وضع الضغط | compression.mcpAccessibility.enabled |
| النطاق | جميع رسائل SSE | نتائج الأدوات فقط |
| مرتكزات المراجع | لا ينطبق | يُحافظ عليها دون قيد أو شرط |
تركيبات الضغط
تركيبات الضغط هي ملفات تعريف ضغط مُسمّاة يمكن إسنادها إلى تركيبات التوجيه:
compression_combos: يخزّن الوضع وخط الأنابيب وإعدادات RTK وإعدادات اللغة وعلامة الإعداد الافتراضيcompression_combo_assignments: يربط تركيبة ضغط بتركيبة توجيه- يحلّ التكامل في وقت التشغيل تركيبة الضغط المُسنَدة قبل عمليات التجاوز العامة للتركيبات
- تتضمن التحليلات
compression_combo_idوengine
موضعها في لوحة المعلومات: Dashboard -> Context & Cache -> Compression Combos.
واجهة API
| المسار | الغرض |
|---|---|
/api/settings/compression |
إعدادات الضغط العامة (تتضمن إعدادات mcpAccessibility) |
/api/compression/preview |
معاينة أي وضع ضغط |
/api/compression/language-packs |
سرد حزم لغات Caveman المتاحة |
/api/context/caveman/config |
اسم مستعار لإعدادات Caveman |
/api/context/rtk/config |
إعدادات RTK الافتراضية وإعداداته |
/api/context/rtk/filters |
فهرس مرشحات RTK |
/api/context/rtk/test |
نقطة نهاية معاينة/اختبار RTK |
/api/context/rtk/raw-output/[id] |
استعادة المخرجات الأولية المنقّحة مع المصادقة |
/api/context/combos |
عمليات CRUD لتركيبات الضغط |
/api/context/combos/[id]/assignments |
عمليات CRUD لإسناد تركيبات التوجيه |
/api/context/analytics |
اسم مستعار لتحليلات الضغط |
تتطلب مسارات الإدارة مصادقة إدارية أو عمليات تحقق من سياسة مفتاح API.
أدوات MCP
يوفّر الضغط خمس أدوات MCP:
| الأداة | النطاق | الغرض |
|---|---|---|
omniroute_compression_status |
read:compression |
الإعدادات والتحليلات وإحصاءات ذاكرة التخزين المؤقت |
omniroute_compression_configure |
write:compression |
تحديث الإعدادات العامة |
omniroute_set_compression_engine |
write:compression |
تعيين الوضع وخط الأنابيب الاختياري |
omniroute_list_compression_combos |
read:compression |
سرد تركيبات الضغط |
omniroute_compression_combo_stats |
read:compression |
قراءة تحليلات التركيبات/المحرّكات |
النطاق والاستثناءات
لا يتم ضغط التضمينات مطلقًا. لا يستدعي open-sse/handlers/embeddings.ts أي
محرّك ضغط — تمر أجسام الطلبات/الاستجابات مباشرةً إلى المنفّذ دون تعديل.
هذا الأمر هيكلي حاليًا (معالجات التضمينات وإكمالات المحادثة منفصلة)، وليس
تحققًا في وقت التشغيل، لكنه يعني أن المخاوف المتعلقة بتشويه المتجهات في #8034 ليس لها أي سطح تعرّض
في مسار التضمينات.
مرشح الاستثناء لكل نموذج/نقطة نهاية (#8034). بالنسبة إلى إكمالات المحادثة، يمكن للمشغّل تحديد
معرّفات النماذج / أهداف provider/model التي يجب عدم ضغطها مطلقًا — وهو إجراء وقائي مفيد إذا
جرى لاحقًا توصيل الضغط بالقرب من مسار مجاور للتضمينات، ومفيد عمومًا
لأي نموذج تكون فيه المطالبة المتطابقة بايتًا ببايت مهمة (التقييمات الحتمية، والبادئات الحساسة
لذاكرة التخزين المؤقت، وما إلى ذلك).
- حقل الإعدادات:
exclusions?: string[]في إعدادات الضغط العامة (GET/PUT /api/settings/compression)، ويُحفَظ عبر نطاق الضغط الحاليkey_value(src/lib/db/compression.ts) — من دون جدول جديد. - تبويب لوحة المعلومات: Dashboard → Compression → Exclusions
(
/dashboard/compression/exclusions). - صيغة الأنماط:
*هي حرف البدل الوحيد. يُهرَّب كل حرف وصفي آخر للتعبيرات النمطية في النمط قبل المطابقة، ولذلك يطابقgpt-5.6السلسلة الحرفية فقط، ولا يطابق أبدًاgpt-5x6(آمن من ReDoS، ومحدود، ومن دون محددات كمية متداخلة). تُطابَق الأنماط دون حساسية لحالة الأحرف مقابل كل من معرّف النموذج المجرّد والتركيبprovider/model— تعمل جميع الأنماطgpt-5-6وopenai/gpt-5-6وopenai/*، كما أن*وحدها تستثني كل نموذج. - المطابقة:
isCompressionExcluded()/normalizeCompressionExclusions()فيopen-sse/services/compression/exclusions.ts. يتحققchatCore.tsمن الهدف المستثنى مباشرةً بعد تحديد إعدادات الضغط، قبل تشغيل أي محرّك، ويتعامل مع التطابق تمامًا كما لو كان الضغط معطّلًا على مستوى النظام — إذ يظل جسم الطلب مطابقًا على نحو قابل للإثبات بايتًا ببايت. يُسجَّل التخطي عبرwriteCompressionSkip(..., "excluded")لإظهاره في التحليلات. - الإعداد الافتراضي (قائمة فارغة/غائبة): مطابق للسلوك السابق لـ#8034 — لا يُستثنى أي شيء.
القيود المعروفة
- يتطلب LLMLingua-2 (SLM) تبعيات اختيارية موضوعة في الموقع نفسه. لا يعمل العامل في
إصدار إنتاجي إلا عندما تكون
@atjsh/llmlingua-2+ تبعيات الأقران موضوعة معًا فيdist/node_modules(راجعscripts/build/colocateOptionals.mjs، #4286). ومن دونها يفشل المحرك بوضعٍ مفتوح (ويُرجع النص الأصلي). لم يعد حلّ مسار العامل يعتمد علىimport.meta.url(إذ يتعطل في الحزمة المستقلة) — بل يرتكز على دليل العمل الحالي وقت التشغيل /argv[1]. - حزم لغات Caveman
de/fr/jaجزئية. فهي تتضمن قواعدcontext+filler+structuralولكن من دون حزمdedup/ultra، لذا فإن شدةultraليست أقوى منfullلهذه اللغات (فهي تستخدم قواعدها الخاصة فقط — ولا يوجد رجوع ضمني إلى قواعدdedup/ultraالإنجليزية، إذ سيؤدي ذلك إلى تشويه النص الأجنبي). أماen/es/id/pt-BRفهي مكتملة. نرحب بالمساهمات التي تضيفdedup.json+ultra.jsonللحزم الجزئية. - لا يسرد القياس عن بُعد المتراكم إلا المحركات التي أجرت ضغطًا. تُرجع خطوة في خط أنابيب متراكم
شُغّل محركها لكنه حقق توفيرًا بنسبة 0 % القيمة
stats:null، ولذلك لا تظهر فيengineBreakdown— ولا يمكن تمييزها عن خطوة جرى تخطيها. وسيتطلب التمييز بين «تم التشغيل، 0 %» و«تم التخطي» تغييرًا في نموذج التقسيم، ولذلك أُجّل.
التحقق
بوابات التحقق المركزة لهذه المنطقة هي:
node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core