Files
OmniRoute/docs/i18n/bg/docs/compression/COMPRESSION_ENGINES.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* 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.
2026-09-18 13:16:46 -03:00

48 KiB
Raw Blame History

Compression Engines (Български)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇩 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 Изход от терминал, shell, компилация, тестове и 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 или rtk
  • apply(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, регистърът включва няколко специализирани енджина за компресиране без загуби / структурно компресиране (използвани от подредени конвейери, интерактивната среда и тестовете):

Енджин Id Какво прави
CCR ccr Content-Compress-Retrieve (H4): заменя големи непрекъснати текстови блокове с адресирани по съдържание препратки, така че повтарящите се/големите блокове да се изпращат веднъж и след това да се реферират.
headroom headroom SmartCrusher (H3 + N5): таблично уплътняване без загуби на съдържания с хомогенни JSON масиви в колонна форма [N rows].
ionizer ionizer Избира редове от началото/средата/края на много големи хомогенни блокове, като съхранява пропуснатата среда като адресирана по съдържание CCR препратка.
session-dedup session-dedup Адресирано по съдържание премахване на дублиране между ходове (вдъхновено от TokenMizer): пропуска текст, който вече е виждан в по-ранни ходове от същата сесия.

Инструкция за протокола за извличане на CCR (#8033): първия път, когато CCR замени ≥1 блок в заявка, енджинът добавя в началото едно идемпотентно system съобщение (започващо със сентинела [CCR protocol]), което обяснява на извикващата страна договора между маркера и инструмента: какво означава маркерът [CCR retrieve hash=<24hex> chars=N], че хешът трябва да бъде копиран дословно (всичките 24 шестнадесетични знака — неправилно копираните хешове са вероятната причина за грешките „block not found“), както и че маркерът [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, shell команди 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 показва как 30-минутна сесия на Claude Code намалява от ~118,000 токена до ~23,900, или спестява 79.7%.

LLMLingua-2 (Семантично съкращаване)

Режимът LLMLingua-2 извършва семантично съкращаване на токени в обикновен текст чрез малък ONNX класификатор на токени, допълвайки базираните на правила механизми Caveman и RTK:

  • компресира обикновения текст само в несистемни съобщения; оградените блокове с код и другите запазвани конструкции никога не се променят
  • изпълнява бекенда @atjsh/llmlingua-2 (ONNX чрез @huggingface/transformers) в работна нишка, така че извеждането на модела никога да не блокира цикъла за обработка на заявки
  • може да се комбинира (stackPriority 35): в комбиниран конвейер се изпълнява след структурните механизми (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 не извършва нищо (текстът се връща непроменен, без регистрирана грешка). За да го активирате в среда с премахнати зависимости, инсталирайте незадължителния стек:

# фиксирайте версиите, декларирани в optionalDependencies на package.json
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 сървъри за автоматизация на браузъри.

Какво прави

  1. Премахване на излишното съдържание — премахва празни общи/текстови записи (- generic:, - text: "")
  2. Свиване на еднотипни елементи — когато ≥ collapseThreshold (по подразбиране 30) последователни реда са структурни повторения, ги свива до първите collapseKeepHead (по подразбиране 10) реда + обобщение с броя + последните collapseKeepTail (по подразбиране 5) реда
  3. Запазване на референциите — маркерите [ref=eXX], необходими за Playwright/computer-use, никога не се променят
  4. Принудително съкращаване — ако след свиването текстът все още надвишава maxTextChars (по подразбиране 50 000), го съкращава с подсказка за навигация, така че агентът да може да продължи работата си

Местоположение на механизма

open-sse/services/compression/engines/mcpAccessibility/
  index.ts            ← входна точка на smartFilterText()
  collapseRepeated.ts ← алгоритъм за свиване на еднотипни елементи
  constants.ts        ← DEFAULT_MCP_ACCESSIBILITY_CONFIG

Конфигурация

Управлява се чрез compression.mcpAccessibility в глобалните настройки (миграция 056). Конфигурация по подразбиране:

{
  "enabled": true,
  "maxTextChars": 50000,
  "collapseThreshold": 30,
  "collapseKeepHead": 10,
  "collapseKeepTail": 5,
  "minLengthToProcess": 2000
}

Филтърът се прилага само към полезни товари от резултати на инструменти, чийто type е "text" и чиято дължина надвишава minLengthToProcess. Той не засяга компресирането на подкани или полезните товари на заявките.

Очаквани спестявания

6080% при резултатите от инструменти за моментни снимки на браузъра в зависимост от сложността на страницата. Алгоритъмът за свиване е с времева сложност 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/modelgpt-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 + зависимостите от тип peer са съвместно разположени в dist/node_modules (вижте scripts/build/colocateOptionals.mjs, #4286). Без тях механизмът преминава в режим fail-open (връща оригиналния текст). Разрешаването на работния процес вече не зависи от import.meta.url (той не работи в самостоятелния пакет) — вместо това се базира на cwd / argv[1] на средата за изпълнение.
  • Езиковите пакети de / fr / ja на Caveman са частични. Те включват правила за 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