* 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.
46 KiB
Compression Engines (Русский)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 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 · 🇱🇰 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 lite | Постоянная очистка с низким риском |
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 SchemavalidateConfig(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 |
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, команды оболочки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) в рабочем потоке, поэтому инференс модели никогда не блокирует цикл обработки запросов - поддерживает объединение в стек (
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 МБ,
быстрая). Модель BERT-base с более высокой точностью (Arcoldd/llmlingua4j-bert-base-onnx,
~710 МБ) доступна через поле 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 МБ
— оставшийся объём занимают среды выполнения transformers.js и onnxruntime-node,
а также модель TinyBERT (~57 МБ), загружаемая при первом использовании (не через 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 (
- 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()
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. Он не влияет на сжатие промптов или данные запросов.
Ожидаемая экономия
60–80% для результатов инструментов снимков браузера в зависимости от сложности страницы. Алгоритм сворачивания имеет сложность O(n) по количеству строк и добавляет незначительную задержку.
Сравнение этого фильтра с указанными выше движками сжатия
| Аспект | Caveman / RTK / Stacked | Фильтр доступности 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) требует совместного размещения необязательных зависимостей. Воркер запускается в
production-сборке, только когда
@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