Files
OmniRoute/docs/i18n/no/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

31 KiB
Raw Blame History

Compression Engines (Norsk)

🌐 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 · 🇮🇳 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-komprimering er bygget rundt motorkontrakter. En modus kan kjøre én motor direkte (caveman eller rtk) eller en deterministisk, stablet pipeline som kjører flere motorer i rekkefølge.

Moduser

Modus Motorbane Tiltenkt inndata
off ingen Nøyaktig bevaring av ledeteksten
lite Caveman lite-hjelpere Alltid aktiv opprydding med lav risiko
standard Caveman Komprimering av ledetekster i naturlig språk
aggressive Caveman + historikk-/verktøysammendrag Lange chatteøkter
ultra Caveman + beskjæringshjelpere Gjenoppretting ved kontekstgrensen
rtk RTK Utdata fra terminal, skall, bygging, tester og git
omniglyph OmniGlyph Kontekst som bilde via leverandørens opprinnelige grensesnitt
stacked Pipeline, standard rtk -> caveman Blandede verktøylogger og prosa, maksimal besparelse

OmniGlyph-komprimeringsprofiler

omniglyph-motoren (pakken omniglyph, 1.4.0+) godtar en navngitt semantisk profil, som angis globalt via omniglyph.profile i komprimeringsinnstillingene eller per trinn via trinnkonfigurasjonen til den stablede pipelinen:

Profil Avgrensning
aggressive Standard. Policyen som de publiserte målingene målte — avbilder system, verktøydokumentasjon og tett historikk
balanced Beholder aktiv tilstand i opprinnelig format, beskytter de siste 8 rundene og slår sammen eldre, avsluttet historikk
coding-safe Beholder autoritet, verktøyskjemaer og aktive verktøyutdata i opprinnelig format, og beskytter de siste 12 rundene
passthrough Ruter uten å transformere; motoren hoppes over

Profilen er et tak, ikke et gulv: mergeCompressionProfileOptions i pakken nekter å la en overstyring fra en innringer gjenåpne en tapsutsatt kanal som profilen har lukket, slik at en trinnspesifikk preserveSystemPrompt: false ikke kan aktivere systemkomprimering på nytt under coding-safe.

Målt på denne kodebasen: coding-safe og balanced hever minCompressChars til maksimumsverdien og beholder system, verktøyskjemaer og verktøyresultater i opprinnelig format, slik at en økt som ennå ikke har akkumulert historikk, stopper ved below_min_chars, og motoren transformerer ingenting. Det er derfor standarden er aggressive i stedet for den sikreste profilen.

Pakken fastsetter sitt eget modellomfang og sin egen profil fra miljøkonfigurasjonen. OmniRoute delegerer aldri avgjørelsen: adapteren låser modellporten til pakkens mest restriktive omfang, slik at innstillinger i vertsmiljøet bare kan begrense tillatelseslisten, aldri utvide den utover OmniRoutes målte resultater.

Motorregister

Registeret finnes i open-sse/services/compression/engines/registry.ts. Motorene tilbyr en felles kontrakt:

  • id: stabil motor-ID, for eksempel caveman eller rtk
  • apply(text, config): eldre kjøringssti brukt av stablede pipelines
  • compress(input, config): primær kjøringssti som returnerer tekst + statistikk
  • getConfigSchema(): returnerer den JSON-Schema-lignende strukturen for gyldig konfigurasjon
  • validateConfig(config): returnerer { valid, errors[] }

Registrering bruker registerCompressionEngine(engine) (eller registerEngine for avanserte tilfeller), som kaller assertValidEngine() og validateConfig(defaultConfig) før motoren godtas. Bruk unregisterCompressionEngine(id) for å fjerne en motor under kjøring.

strategySelector.ts registrerer de innebygde motorene før komprimeringen kjøres. Dette gjør at forhåndsvisning, kjøretidskomprimering, stablet modus, tester og fremtidige motorer kan bruke den samme kjøringsstien.

Komprimering av MCP-beskrivelser (relatert)

Et separat register komprimerer beskrivelsesmetadata for MCP-verktøy på registernivå se open-sse/mcp-server/descriptionCompressor.ts og MCP-SERVER.md. Det gjenbruker Caveman-regler, men opererer på verktøymetadata, ikke forespørselsnyttelaster.

Ytterligere innebygde motorer

I tillegg til Caveman, RTK og LLMLingua-2 inneholder registeret flere spesialiserte tapsfrie / strukturelle motorer (brukt av stablede pipelines, testmiljøet og tester):

Motor ID Hva den gjør
CCR ccr Content-Compress-Retrieve (H4): erstatter store sammenhengende tekstblokker med innholdsadresserte referanser, slik at gjentatte/store blokker sendes én gang og deretter refereres til.
headroom headroom SmartCrusher (H3 + N5): tapsfri tabellkomprimering av homogene JSON-array-nyttelaster til et kolonnebasert [N rows]-format.
ionizer ionizer Utvalg av rader fra begynnelsen, midten og slutten av svært store homogene blokker, der den utelatte midtdelen lagres som en CCR-innholdsadressert referanse.
session-dedup session-dedup Innholdsadressert deduplisering på tvers av dialogrunder (inspirert av TokenMizer): utelater tekst som allerede er sett i tidligere dialogrunder i samme økt.

Instruksjon for CCR-henteprotokollen (#8033): Første gang CCR erstatter ≥1 blokk i en forespørsel, legger motoren til én enkelt, idempotent system-melding først (som begynner med sentinelen [CCR protocol]) for å lære opp den som kaller, i kontrakten mellom markør og verktøy: hva en [CCR retrieve hash=<24hex> chars=N]-markør betyr, at hashen må kopieres ordrett (alle 24 heksadesimale tegn feilkopierte hasher er den sannsynlige årsaken til treff med «blokk ikke funnet»), og at en [dedup:ref sha=...]-markør betyr «se tilbake i historikken», ikke «kall verktøyet». Merknaden settes inn bare når den som kaller, sine annonserte tools[] beviser at den faktisk kan nå omniroute_ccr_retrieve (callerSupportsCcrRetrieve() i open-sse/services/compression/engines/ccr/protocolInstruction.ts) en vanlig OpenAI-kompatibel klient uten dette verktøyet mottar aldri en instruksjon om å kalle noe den ikke kan nå. Idempotens håndheves ved å søke gjennom meldingshistorikken etter sentinelen før innsetting, slik at forespørsler over flere dialogrunder (som spiller av tidligere meldinger på nytt) ikke stabler merknaden én gang per dialogrunde.

Caveman

Caveman-modus fokuserer på semantisk kondensering av vanlig prosa:

  • bevarer kodeblokker, URL-er, JSON, stier og strukturerte data
  • fjerner fyllord, forbehold, gjentatt kontekst og omstendelige bindeformuleringer
  • støtter språktilpassede filregelpakker i open-sse/services/compression/rules/
  • er fortsatt tilgjengelig gjennom de eldre modusene standard, aggressive og ultra

Dashbordvisningen er Dashboard -> Context & Cache -> Caveman.

Oppstrømsprosjektet Caveman rapporterer ~75% færre utdata-tokener, gjennomsnittlig 65% reduksjon i utdata i referansetester med et spenn på 22-87%, og et verktøy med ~46% komprimering av inndata. OmniRoute bruker Cavemans tall for inndatasiden ved dokumentasjon av kombinerte besparelser for ledetekst/kontekst. Cavemans utdatamodus er fortsatt en separat funksjon for responsatferd.

RTK

RTK-modus fokuserer på utdata fra kommandoer og verktøy:

  • oppdager utdataklasser som git status, git branch, git diff, Vitest/Jest/Pytest, Cargo-/Go-tester, TypeScript-/Vite-/Webpack-bygg, ESLint, npm-revisjoner/installasjoner, Docker-logger, skallkommandoene find/grep, stakkspor og generiske logger
  • bruker 49 JSON-filtre fra open-sse/services/compression/engines/rtk/filters/
  • støtter den deklarative pipelinen i RTK-stil: fjerning av ANSI, erstatning, kortslutning ved samsvarende utdata, fjerning/bevaring av linjer, avkorting per linje, avkorting av begynnelse/slutt/maksimalt antall linjer og reserveverdi ved tomt resultat
  • støtter prosjektfiltre underlagt tillitskontroll i .rtk/filters.json og globale filtre i DATA_DIR/rtk/filters.json
  • fjerner ANSI-sekvenser, fremdriftsstøy, gjentatte linjer og lite nyttig standardtekst
  • bevarer feil som kan følges opp, advarsler, sammendrag, endrede filer og kontekst på slutten
  • kan valgfritt beholde sladdede rådata for gjenoppretting/feilsøking gjennom autentiserte administrasjonsruter

Dashbordvisningen er Dashboard -> Context & Cache -> RTK.

Driftsdetaljer for egendefinerte filtre, tillit, verifisering og gjenoppretting av rådata finnes i RTK_COMPRESSION.md.

Oppstrømsprosjektet RTK rapporterer 60-90% besparelse ved komprimering av kommandoutdata. Eksempelet i README-filen viser at en 30-minutters Claude Code-økt går fra ~118,000 tokener til ~23,900, eller en besparelse på 79.7%.

LLMLingua-2 (semantisk beskjæring)

LLMLingua-2-modus utfører semantisk tokenbeskjæring på prosa ved hjelp av en liten ONNX-tokenklassifikator, som utfyller de regelbaserte Caveman- og RTK-motorene:

  • komprimerer bare prosa i meldinger som ikke er systemmeldinger; inngjerdede kodeblokker og andre bevarte konstruksjoner endres aldri
  • kjører @atjsh/llmlingua-2-bakenden (ONNX via @huggingface/transformers) i en arbeidertråd, slik at modellinferens aldri blokkerer forespørselens hendelsesløkke
  • kan stables (stackPriority 35): I en stablet pipeline kjører den etter de strukturelle motorene (CCR, session-dedup, headroom, Caveman), men før ultra, siden semantisk beskjæring er mest effektiv på tekst som allerede er strukturelt komprimert f.eks. rtk -> caveman -> llmlingua
  • går videre ved enhver feil (manglende valgfrie avhengigheter, oppstart av arbeider, modellinnlasting, inferens eller tidsavbrudd) → originalteksten returneres uendret, aldri en feil

Motorplassering: open-sse/services/compression/engines/llmlingua/. Dashbordvisningen er Dashboard -> Context & Cache -> LLMLingua.

Modeller

Standardmodellen er TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 MB, rask). En mer nøyaktig BERT-base-modell (Arcoldd/llmlingua4j-bert-base-onnx, ~710 MB) er tilgjengelig via feltet model i motorkonfigurasjonen. @huggingface/transformers laster den valgte modellen ned ved behov fra HuggingFace Hub til ${DATA_DIR}/models/llmlingua ved første kall (modelStore.ts); en overstyring med modelPath i konfigurasjonen peker i stedet til en lokal kopi (for frakoblede / isolerte installasjoner).

Valgfrie avhengigheter og behovsstyrt installasjon

Den fjernbare LLMLingua-kjøretidsstakken med peer-avhengigheter er valgfri. To pakker er deklarert som optionalDependencies i package.json og holdes eksterne av produksjonsbygget (scripts/build/prepublish.ts inkluderer dem ikke i pakken):

Pakke Versjon (låst) Merknader
@atjsh/llmlingua-2 2.0.5 Inngangspakke; deklarerer de andre som peer-pakker
js-tiktoken ^1.0.20 Tokenisator

@huggingface/transformers er låst til ^4.2.0 (deles med den lokale banen for innebygginger og spores også inn i den frittstående pakken); @atjsh/llmlingua-2@2.0.5 bruker den som peer-avhengighet med "^3.5.2 || ^4.0.0", så både Transformers.js v3 og v4 støttes. Fra og med 2.0.4 krever @atjsh/llmlingua-2 ikke lenger @tensorflow/tfjs, noe som fjernet den største enkeltstående bidragsyteren (TensorFlow.js) fra SLM-stakken. Bare de to pakkene ovenfor er fjernbare SLM- peer-avhengigheter. En standard npm install (utvikling) installerer den valgfrie stakken automatisk med mindre valgfrie avhengigheter utelates.

Hvorfor behovsstyrt: Den npm-publiserte pakken, den frittstående pakken og Docker-avbildningen leveres uten disse avhengighetene for å holde størrelsen nede. Når de mangler, mislykkes arbeiderens avhengighetskontroll (en @atjsh/llmlingua-2-oppløsningskontroll i worker.ts), og motoren går stille videre valg av LLMLingua blir en no-op (teksten returneres uendret, og ingen feil logges). Installer den valgfrie stakken for å aktivere den i et redusert miljø:

# lås til versjonene som er deklarert i package.json optionalDependencies
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken

Fjerningen av @tensorflow/tfjs (2.0.4+) eliminerer den tidligere dominerende bidragsyteren på ~800 MB det gjenværende fotavtrykket består av kjøretidsmiljøene transformers.js + onnxruntime-node, samt TinyBERT-modellen (~57 MB), som lastes ned ved første gangs bruk (ikke via npm).

Per miljø:

  • Utvikling / npm install — installeres automatisk med mindre du brukte --omit=optional (eller --no-optional). Ingen handling er nødvendig.
  • Global npm (npm i -g omniroute) / frittstående — kjør installasjonskommandoen ovenfor i katalogen til den installerte pakken, eller installer på nytt uten å utelate valgfrie avhengigheter.
  • Docker — legg til installasjonskommandoen i et avledet bildelag; det publiserte bildet leveres bevisst i en minimal utgave.
  • VPS (PM2) — installer i appens node_modules, og start deretter prosessen på nytt slik at arbeidsprosessen kontrollerer porten på nytt.
  • Rå Next-frittstående (npm run build.build/next/standalone/server.js) — den frittstående sporingen leveres VERKEN med arbeidsprosessen eller de valgfrie avhengighetene, så motoren går stille over til åpen modus ved feil. scripts/build/colocate-standalone.mjs legger til begge deler på nytt (esbuild for arbeidsprosessen + rekursiv inkludering av valgfrie avhengigheter i det frittstående treet); det kjøres automatisk via npm-hooken postbuild etter hver bygging. Idempotent og fortsetter uten feil når avhengigheter mangler.

Bekreft at den er aktiv: Når LLMLingua er valgt, blir faktisk prosa reelt forkortet (motoren slutter å gå over til åpen modus ved feil), og den første forespørselen utløser nedlasting av modellen til ${DATA_DIR}/models/llmlingua. Porten kontrollerer med hensikt bare @atjsh/llmlingua-2 — de andre peer-avhengighetene er kun ESM, og require.resolve kaster feil for dem selv når de finnes — så arbeidsprosessen går fortsatt over til åpen modus ved feil hvis en peer-avhengighet faktisk mangler på import()-tidspunktet.

Stablede pipelines

Stablet modus kjører pipeline-trinn i rekkefølge. Standardrekkefølgen er:

rtk -> caveman

Bruk dette for økter med kodeagenter der en ledetekst kombinerer utdata fra kommandoer med tekst fra mennesker eller assistenter. RTK reduserer først støyende verktøylogger, og deretter komprimerer Caveman det gjenværende naturlige språket.

Pipeline-trinn konfigureres med stackedPipeline i komprimeringsinnstillingene eller gjennom komprimeringskombinasjoner.

Når begge motorene reduserer den samme kvalifiserte nyttelasten, forsterkes besparelsene:

kombinert    = 1 - (1 - RTK-besparelse) * (1 - Caveman-inndatabesparelse)
gjennomsnitt = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
intervall    = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%

MCP-filter for tilgjengelighetstre

MCP-smartfilteret for tilgjengelighetstrær er et komprimeringslag som kjøres etter utførelse på MCP-verktøyresultater, ikke på ledetekster eller kontekst. Det er rettet mot de omfattende nyttelastene med tilgjengelighetstrær og nettleserøyeblikksbilder som returneres av verktøy som Playwright, computer-use og MCP-servere for nettleserautomatisering.

Hva det gjør

  1. Fjerning av støy — fjerner tomme generiske oppføringer og tekstoppføringer (- generic:, - text: "")
  2. Sammenfolding av sideordnede elementer — når ≥ collapseThreshold (standardverdi 30) sammenhengende linjer er strukturelle gjentakelser, foldes de sammen til de første collapseKeepHead (standardverdi 10) linjene + et sammendrag med antall + de siste collapseKeepTail (standardverdi 5) linjene
  3. Bevaring av referanser[ref=eXX]-ankre som kreves av Playwright/computer-use, blir aldri endret
  4. Fast avkorting — hvis teksten etter sammenfolding fortsatt overstiger maxTextChars (standardverdi 50 000), avkortes den med et navigasjonstips slik at agenten kan fortsette arbeidet

Plassering av motoren

open-sse/services/compression/engines/mcpAccessibility/
  index.ts            ← inngangspunkt for smartFilterText()
  collapseRepeated.ts ← algoritme for sammenfolding av sideordnede elementer
  constants.ts        ← DEFAULT_MCP_ACCESSIBILITY_CONFIG

Konfigurasjon

Styres av compression.mcpAccessibility i de globale innstillingene (migrering 056). Standardkonfigurasjon:

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

Filteret brukes bare på nyttelaster med verktøyresultater der type er "text", og der lengden overstiger minLengthToProcess. Det påvirker ikke komprimering av ledetekster eller forespørselsnyttelaster.

Forventede besparelser

6080 % på verktøyresultater med nettleserøyeblikksbilder, avhengig av sidens kompleksitet. Sammenfoldingsalgoritmen er O(n) i antall linjer og gir ubetydelig ekstra forsinkelse.

Dette filteret sammenlignet med komprimeringsmotorene ovenfor

Aspekt Caveman / RTK / stablet MCP-filter for tilgjengelighet
Mål Ledetekster/kontekst i forespørsler MCP-verktøyresultater
Utløser Innstilling for komprimeringsmodus compression.mcpAccessibility.enabled
Omfang Alle SSE-meldinger Bare verktøyresultater
Referanseankre Ikke relevant Bevares uten unntak

Komprimeringskombinasjoner

Komprimeringskombinasjoner er navngitte komprimeringsprofiler som kan tilordnes rutingskombinasjoner:

  • compression_combos: lagrer modus, pipeline, RTK-konfigurasjon, språkkonfigurasjon og standardmarkør
  • compression_combo_assignments: knytter en komprimeringskombinasjon til en rutingskombinasjon
  • kjøretidsintegrasjonen løser en tilordnet komprimeringskombinasjon før generelle overstyringer for kombinasjoner
  • analyse inkluderer compression_combo_id og engine

Plassering i kontrollpanelet: Dashboard -> Context & Cache -> Compression Combos.

API-grensesnitt

Rute Formål
/api/settings/compression Globale komprimeringsinnstillinger (inkluderer mcpAccessibility-oppsett)
/api/compression/preview Forhåndsvis en hvilken som helst komprimeringsmodus
/api/compression/language-packs Vis tilgjengelige Caveman-språkpakker
/api/context/caveman/config Alias for Caveman-innstillinger
/api/context/rtk/config RTK-standardverdier og -innstillinger
/api/context/rtk/filters RTK-filterkatalog
/api/context/rtk/test Endepunkt for RTK-forhåndsvisning/-testing
/api/context/rtk/raw-output/[id] Autentisert gjenoppretting av sladdet råutdata
/api/context/combos CRUD for komprimeringskombinasjoner
/api/context/combos/[id]/assignments CRUD for tilordning av rutingskombinasjoner
/api/context/analytics Alias for komprimeringsanalyse

Administrasjonsruter krever administrasjonsautentisering eller kontroll av API-nøkkelpolicy.

MCP-verktøy

Komprimering eksponerer fem MCP-verktøy:

Verktøy Omfang Formål
omniroute_compression_status read:compression Innstillinger, analyse og hurtigbufferstatistikk
omniroute_compression_configure write:compression Oppdater globale innstillinger
omniroute_set_compression_engine write:compression Angi modus og valgfri pipeline
omniroute_list_compression_combos read:compression Vis komprimeringskombinasjoner
omniroute_compression_combo_stats read:compression Les analyse for kombinasjoner/motorer

Omfang og ekskluderinger

Embeddings komprimeres aldri. open-sse/handlers/embeddings.ts kaller aldri noen komprimeringsmotor — forespørsels-/responskroppene sendes rett til eksekveringskomponenten uten endringer. Dette er strukturelt i dag (embeddings og chat-fullføringer har separate håndteringskomponenter), ikke en kjøretidskontroll, men det betyr at bekymringen for vektorforvrengning i #8034 ikke har noen eksponeringsflate i embeddings-flyten.

Ekskluderingsfilter per modell/endepunkt (#8034). For chat-fullføringer kan en operatør angi modell-ID-er / provider/model-mål som aldri skal komprimeres — et sikkerhetstiltak som er nyttig hvis komprimering senere kobles nærmere en embeddings-tilgrensende flyt, og generelt nyttig for alle modeller der en eksakt byte-for-byte-prompt er viktig (deterministiske evalueringer, hurtigbufferfølsomme prefikser osv.).

  • Innstillingsfelt: exclusions?: string[] i den globale komprimeringskonfigurasjonen (GET/PUT /api/settings/compression), lagret via det eksisterende key_value-navnerommet for komprimering (src/lib/db/compression.ts) — ingen ny tabell.
  • Fane i kontrollpanelet: Dashboard → Compression → Exclusions (/dashboard/compression/exclusions).
  • Mønstersyntaks: * er det eneste jokertegnet. Alle andre regex-metategn i et mønster blir escapet før samsvarskontroll, slik at gpt-5.6 bare samsvarer med den bokstavelige strengen, aldri gpt-5x6 (ReDoS-sikkert, avgrenset, ingen nestede kvantifikatorer). Mønstre samsvares uten hensyn til store og små bokstaver mot både den rene modell-ID-en og den sammensatte provider/model-verdien — gpt-5-6, openai/gpt-5-6 og openai/* fungerer alle, og * alene ekskluderer alle modeller.
  • Samsvarskontroll: isCompressionExcluded() / normalizeCompressionExclusions() i open-sse/services/compression/exclusions.ts. chatCore.ts kontrollerer det ekskluderte målet rett etter at komprimeringsinnstillingene er løst, før noen motor kjører, og behandler et samsvar nøyaktig som om komprimering var globalt deaktivert — forespørselskroppen er beviselig byte-for-byte-identisk. Hoppet registreres via writeCompressionSkip(..., "excluded") for synlighet i analysen.
  • Standard (tom/manglende liste): identisk med oppførselen før #8034 — ingenting ekskluderes.

Kjente begrensninger

  • LLMLingua-2 (SLM) krever samlokaliserte valgfrie avhengigheter. Workeren kjører bare i et produksjonsbygg når @atjsh/llmlingua-2 + peer-avhengigheter er samlokalisert i dist/node_modules (se scripts/build/colocateOptionals.mjs, #4286). Uten dem går motoren over til sikker standardatferd (returnerer originalteksten). Worker-oppløsning avhenger ikke lenger av import.meta.url (den feiler i den frittstående pakken) — den forankres i kjøretidsmiljøets cwd / argv[1].
  • Caveman-språkpakkene de / fr / ja er ufullstendige. De leveres med regler for context + filler + structural, men uten pakker for dedup / ultra, så intensiteten ultra er ikke sterkere enn full for disse språkene (de bruker bare sine egne regler — det finnes ingen skjult tilbakefall til de engelske dedup/ultra-reglene, som ville ha ødelagt fremmedspråklig tekst). en / es / id / pt-BR er komplette. Bidrag med dedup.json + ultra.json for de ufullstendige pakkene er velkomne.
  • Stablet telemetri viser bare motorer som utførte komprimering. Et trinn i en stablet pipeline der motoren kjørte, men ga 0 % besparelse, returnerer stats:null og vises derfor ikke i engineBreakdown — det kan ikke skilles fra et trinn som ble hoppet over. Å skille mellom «kjørte, 0 %» og «hoppet over» ville kreve en endring i oversiktsmodellen og er utsatt.

Validering

De målrettede kontrollene for dette området er:

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