* 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.
33 KiB
Compression Engines (Deutsch)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇬🇷 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
Die OmniRoute-Komprimierung basiert auf Engine-Verträgen. Ein Modus kann eine Engine direkt
ausführen (caveman oder rtk) oder eine deterministische gestapelte Pipeline, die mehrere Engines nacheinander ausführt.
Modi
| Modus | Engine-Pfad | Vorgesehene Eingabe |
|---|---|---|
off |
keine | Exakte Beibehaltung des Prompts |
lite |
Caveman-Lite-Hilfsfunktionen | Risikoarme, stets aktive Bereinigung |
standard |
Caveman | Verdichtung natürlichsprachlicher Prompts |
aggressive |
Caveman + Verlaufs-/Tool-Zusammenfasser | Lange Chat-Sitzungen |
ultra |
Caveman + Bereinigungs-Hilfsfunktionen | Wiederherstellung bei Erreichen des Kontextlimits |
rtk |
RTK | Terminal-, Shell-, Build-, Test- und Git-Ausgaben |
omniglyph |
OmniGlyph | Kontext als Bild über die native Provider-Schnittstelle |
stacked |
Pipeline, standardmäßig rtk -> caveman |
Gemischte Tool-Protokolle und Fließtext, maximale Einsparungen |
OmniGlyph-Komprimierungsprofile
Die omniglyph-Engine (Paket omniglyph, 1.4.0+) akzeptiert ein benanntes semantisches Profil, das
global über omniglyph.profile in den Komprimierungseinstellungen oder für jeden Schritt über die
Schrittkonfiguration der gestapelten Pipeline festgelegt wird:
| Profil | Abgrenzung |
|---|---|
aggressive |
Standard. Die Richtlinie, die in den veröffentlichten Messbelegen gemessen wurde — wandelt System, Tool-Dokumentation und dichten Verlauf in Bilder um |
balanced |
Behält den aktiven Zustand nativ bei, schützt die letzten 8 Gesprächsrunden und verdichtet älteren abgeschlossenen Verlauf |
coding-safe |
Behält Autorität, Tool-Schemata und aktive Tool-Ausgaben nativ bei und schützt die letzten 12 Gesprächsrunden |
passthrough |
Leitet ohne Transformation weiter; die Engine wird übersprungen |
Das Profil ist eine Obergrenze, keine Untergrenze: mergeCompressionProfileOptions im Paket
verhindert, dass eine Überschreibung durch den Aufrufer einen verlustbehafteten Pfad wieder öffnet, den das Profil geschlossen hat. Daher kann ein schrittspezifisches
preserveSystemPrompt: false die Systemkomprimierung unter coding-safe nicht wieder aktivieren.
An dieser Codebasis gemessen: coding-safe und balanced setzen minCompressChars auf den
Maximalwert und behalten System, Tool-Schemata und Tool-Ergebnisse nativ bei. Daher endet eine Sitzung, in der sich
noch kein Verlauf angesammelt hat, mit below_min_chars, und die Engine transformiert nichts. Aus diesem
Grund ist aggressive die Standardeinstellung und nicht das sicherste Profil.
Das Paket ermittelt seinen eigenen Modellbereich und sein Profil aus seiner Umgebungskonfiguration. OmniRoute delegiert diese Entscheidung niemals: Der Adapter fixiert die Modellbeschränkung auf den restriktivsten Bereich des Pakets, sodass Einstellungen der Host-Umgebung die Positivliste nur einschränken, aber niemals über die von OmniRoute gemessenen Belege hinaus erweitern können.
Engine-Registry
Die Registry befindet sich in open-sse/services/compression/engines/registry.ts. Engines stellen einen gemeinsamen
Vertrag bereit:
id: stabile Engine-ID wiecavemanoderrtkapply(text, config): älterer Ausführungspfad, der von gestapelten Pipelines verwendet wirdcompress(input, config): primärer Ausführungspfad, der Text und Statistiken zurückgibtgetConfigSchema(): gibt die JSON-Schema-ähnliche Struktur der gültigen Konfiguration zurückvalidateConfig(config): gibt{ valid, errors[] }zurück
Die Registrierung verwendet registerCompressionEngine(engine) (oder registerEngine für fortgeschrittene Fälle),
wodurch vor der Annahme assertValidEngine() und validateConfig(defaultConfig) aufgerufen werden.
Verwende unregisterCompressionEngine(id), um eine Engine zur Laufzeit zu entfernen.
strategySelector.ts registriert die integrierten Engines, bevor die Komprimierung ausgeführt wird. Dadurch können Vorschau,
Laufzeitkomprimierung, gestapelter Modus, Tests und zukünftige Engines denselben Ausführungspfad verwenden.
Komprimierung von MCP-Beschreibungen (verwandt)
Eine separate Registry komprimiert die Beschreibungsmetadaten von MCP-Tools auf Registry-Ebene — siehe
open-sse/mcp-server/descriptionCompressor.ts und MCP-SERVER.md. Sie verwendet
Caveman-Regeln wieder, arbeitet jedoch mit Tool-Metadaten und nicht mit Anfrage-Payloads.
Zusätzliche integrierte Engines
Neben Caveman, RTK und LLMLingua-2 enthält die Registry mehrere spezialisierte verlustfreie / strukturelle Engines (verwendet von gestapelten Pipelines, dem Playground und Tests):
| Engine | ID | Funktionsweise |
|---|---|---|
| CCR | ccr |
Content-Compress-Retrieve (H4): Ersetzt große zusammenhängende Textblöcke durch inhaltsadressierte Referenzen, sodass wiederholte/große Blöcke einmal gesendet und anschließend referenziert werden. |
| headroom | headroom |
SmartCrusher (H3 + N5): Verlustfreie tabellarische Kompaktierung homogener JSON-Array-Payloads in eine spaltenorientierte Form [N rows]. |
| ionizer | ionizer |
Zeilen-Sampling am Anfang, in der Mitte und am Ende für sehr große homogene Blöcke, wobei der ausgelassene Mittelteil als inhaltsadressierte CCR-Referenz gespeichert wird. |
| session-dedup | session-dedup |
Inhaltsadressierte turnübergreifende Deduplizierung (von TokenMizer inspiriert): Blendet Text aus, der bereits in früheren Turns derselben Sitzung vorkam. |
CCR-Retrieve-Protokollanweisung (#8033): Wenn CCR zum ersten Mal ≥1 Block in einer
Anfrage ersetzt, stellt die Engine eine einzelne, idempotente system-Nachricht voran (beginnend mit dem
Sentinel [CCR protocol]), die dem Aufrufer den Vertrag zwischen Marker und Tool erklärt: was ein
Marker [CCR retrieve hash=<24hex> chars=N] bedeutet, dass der Hash unverändert kopiert werden muss
(alle 24 Hexadezimalzeichen — falsch kopierte Hashes sind die wahrscheinliche Ursache für
Fehler vom Typ „Block nicht gefunden“), und dass ein Marker [dedup:ref sha=...] „im Verlauf
nachsehen“ und nicht „das Tool aufrufen“ bedeutet. Der Hinweis wird nur eingefügt, wenn die
angekündigten tools[] des Aufrufers belegen, dass dieser omniroute_ccr_retrieve tatsächlich
erreichen kann (callerSupportsCcrRetrieve() in
open-sse/services/compression/engines/ccr/protocolInstruction.ts) — ein einfacher
OpenAI-kompatibler Aufrufer ohne dieses Tool erhält niemals die Anweisung, etwas aufzurufen,
das er nicht erreichen kann. Die Idempotenz wird gewährleistet, indem der Nachrichtenverlauf
vor dem Einfügen nach dem Sentinel durchsucht wird, sodass sich der Hinweis bei Anfragen über
mehrere Turns hinweg (die vorherige Nachrichten erneut übermitteln) nicht einmal pro Turn
anhäuft.
Caveman
Der Caveman-Modus konzentriert sich auf die semantische Verdichtung normaler Prosa:
- bewahrt Codeblöcke, URLs, JSON, Pfade und strukturierte Daten
- entfernt Füllwörter, Relativierungen, wiederholten Kontext und weitschweifige Verknüpfungsformulierungen
- unterstützt sprachspezifische Dateiregelpakete in
open-sse/services/compression/rules/ - bleibt über die bisherigen Modi
standard,aggressiveundultraverfügbar
Die entsprechende Dashboard-Oberfläche befindet sich unter Dashboard -> Context & Cache -> Caveman.
Das Caveman-Upstream-Projekt berichtet von ~75% weniger Ausgabetokens, durchschnittlichen Einsparungen
von 65% bei der Ausgabe in Benchmarks mit einer Spanne von 22-87% sowie von einem Tool mit ~46%
Eingabekompression. OmniRoute verwendet bei der Dokumentation kombinierter Einsparungen für Prompts und
Kontext den eingabeseitigen Caveman-Wert; der Caveman-Ausgabemodus bleibt eine separate Funktion zur
Steuerung des Antwortverhaltens.
RTK
Der RTK-Modus konzentriert sich auf die Ausgabe von Befehlen und Tools:
- erkennt Ausgabeklassen wie
git status,git branch,git diff, Vitest/Jest/Pytest, Cargo-/Go-Tests, TypeScript-/Vite-/Webpack-Builds, ESLint, npm-Audits/-Installationen, Docker-Protokolle, Shell-find/grep, Stacktraces und generische Protokolle - wendet 49 JSON-Filter aus
open-sse/services/compression/engines/rtk/filters/an - unterstützt die deklarative Pipeline im RTK-Stil: Entfernen von ANSI-Sequenzen, Ersetzen, Kurzschluss bei übereinstimmender Ausgabe, Entfernen/Beibehalten von Zeilen, Kürzung einzelner Zeilen, Head-/Tail-/Maximalzeilen-Kürzung und Fallback bei leerer Ausgabe
- unterstützt vertrauensabhängige Projektfilter in
.rtk/filters.jsonund globale Filter inDATA_DIR/rtk/filters.json - entfernt ANSI-Sequenzen, Fortschrittsrauschen, wiederholte Zeilen und wenig hilfreichen Standardtext
- bewahrt relevante Fehler, Warnungen, Zusammenfassungen, geänderte Dateien und abschließenden Kontext
- kann optional geschwärzte Rohausgaben für Wiederherstellung und Debugging über authentifizierte Verwaltungsrouten aufbewahren
Die entsprechende Dashboard-Oberfläche befindet sich unter Dashboard -> Context & Cache -> RTK.
Betriebsdetails zu benutzerdefinierten Filtern, Vertrauen, Verifizierung und Wiederherstellung von
Rohausgaben finden Sie in RTK_COMPRESSION.md.
Das RTK-Upstream-Projekt berichtet von Einsparungen von 60-90% bei der Komprimierung von Befehlsausgaben.
Das Beispiel in der README zeigt eine 30-minütige Claude-Code-Sitzung, die von ~118,000 Tokens auf
~23,900 reduziert wird, was einer Einsparung von 79.7% entspricht.
LLMLingua-2 (Semantische Bereinigung)
Der LLMLingua-2-Modus führt eine semantische Token-Bereinigung von Prosa mithilfe eines kleinen ONNX-Token-Klassifikators durch und ergänzt damit die regelbasierten Caveman- und RTK-Engines:
- komprimiert ausschließlich Prosa in Nicht-Systemnachrichten; mit Begrenzungszeichen versehene Codeblöcke und andere geschützte Konstrukte werden niemals verändert
- führt das Backend
@atjsh/llmlingua-2(ONNX über@huggingface/transformers) in einem Worker-Thread aus, sodass die Modellinferenz niemals die Ereignisschleife der Anfrage blockiert - ist kombinierbar (
stackPriority35): In einer kombinierten Pipeline wird es nach den strukturellen Engines (CCR, session-dedup, headroom, Caveman), aber vorultraausgeführt, da die semantische Bereinigung bei bereits strukturell komprimiertem Text am effektivsten ist — z. B.rtk -> caveman -> llmlingua - bleibt bei jedem Fehler funktionsfähig (fehlende optionale Abhängigkeiten, Start des Workers, Laden des Modells, Inferenz oder Zeitüberschreitung) → der ursprüngliche Text wird unverändert zurückgegeben, niemals ein Fehler
Speicherort der Engine: open-sse/services/compression/engines/llmlingua/. Die entsprechende
Dashboard-Oberfläche befindet sich unter Dashboard -> Context & Cache -> LLMLingua.
Modelle
Das Standardmodell ist TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 MB,
schnell). Ein genaueres BERT-base-Modell (Arcoldd/llmlingua4j-bert-base-onnx,
~710 MB) ist über das Feld model der Engine-Konfiguration verfügbar. @huggingface/transformers
lädt das ausgewählte Modell beim ersten Aufruf verzögert vom HuggingFace Hub nach
${DATA_DIR}/models/llmlingua herunter (modelStore.ts); durch Überschreiben der Konfiguration
modelPath kann stattdessen eine lokale Kopie verwendet werden (Offline-/Air-Gap-Installationen).
Optionale Abhängigkeiten und bedarfsgesteuerte Installation
Der entfernbare LLMLingua-Runtime-Peer-Stack ist optional. Zwei Pakete sind in
package.json als optionalDependencies deklariert und werden beim Produktions-Build
extern gehalten (scripts/build/prepublish.ts bündelt sie nicht):
| Paket | Version (fixiert) | Hinweise |
|---|---|---|
@atjsh/llmlingua-2 |
2.0.5 |
Einstiegspaket; deklariert die anderen als Peers |
js-tiktoken |
^1.0.20 |
Tokenizer |
@huggingface/transformers ist auf ^4.2.0 festgelegt (wird mit dem lokalen Embedding-Pfad
geteilt und auch in das eigenständige Bundle aufgenommen); @atjsh/llmlingua-2@2.0.5 verwendet
es als Peer mit "^3.5.2 || ^4.0.0", sodass sowohl Transformers.js v3 als auch v4 unterstützt
werden. Seit 2.0.4 benötigt @atjsh/llmlingua-2 nicht mehr @tensorflow/tfjs, wodurch der größte
einzelne Bestandteil (TensorFlow.js) aus dem SLM-Stack entfernt wurde. Nur die beiden oben genannten
Pakete sind entfernbare SLM-Peers. Ein reguläres npm install (Entwicklung) installiert den optionalen
Stack automatisch, sofern optionale Abhängigkeiten nicht ausgelassen werden.
Warum bedarfsgesteuert: Das auf npm veröffentlichte Paket, das eigenständige Bundle und das
Docker-Image werden ohne diese Abhängigkeiten ausgeliefert, um schlank zu bleiben. Wenn sie fehlen,
schlägt die Abhängigkeitsprüfung des Workers (eine Auflösungsprüfung für @atjsh/llmlingua-2 in
worker.ts) fehl, und die Engine bleibt stillschweigend funktionsfähig — die Auswahl von LLMLingua
führt zu keiner Änderung (der Text wird unverändert zurückgegeben und es wird kein Fehler protokolliert).
Um es in einer bereinigten Umgebung zu aktivieren, installieren Sie den optionalen Stack:
# auf die in package.json unter optionalDependencies deklarierten Versionen festlegen
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken
Durch die Entfernung von @tensorflow/tfjs (2.0.4+) entfällt der zuvor dominierende Beitrag von
~800 MB — der verbleibende Speicherbedarf besteht aus den Laufzeitumgebungen von transformers.js und
onnxruntime-node sowie dem TinyBERT-Modell (~57 MB), das bei der ersten Verwendung heruntergeladen
wird (nicht über npm).
Je Umgebung:
- Entwicklung /
npm install— wird automatisch installiert, sofern nicht--omit=optional(oder--no-optional) übergeben wurde. Keine Aktion erforderlich. - Globales npm (
npm i -g omniroute) / eigenständig — führen Sie den obigen Installationsbefehl im Verzeichnis des installierten Pakets aus oder installieren Sie es erneut, ohne optionale Abhängigkeiten auszulassen. - Docker — fügen Sie den Installationsbefehl in einer abgeleiteten Image-Schicht hinzu; das veröffentlichte Image ist bewusst schlank gehalten.
- VPS (PM2) — installieren Sie die Abhängigkeiten in
node_modulesder Anwendung und starten Sie anschließend den Prozess neu, damit der Worker den Prüfmechanismus erneut testet. - Unverarbeitetes Next-Standalone (
npm run build→.build/next/standalone/server.js) — der Standalone-Trace enthält WEDER den Worker NOCH die optionalen Abhängigkeiten, sodass die Engine unbemerkt im Fail-Open-Modus arbeitet.scripts/build/colocate-standalone.mjsfügt beides erneut hinzu (Worker-esbuild + Abschluss der optionalen Abhängigkeiten im Standalone-Verzeichnis); das Skript wird nach jedem Build automatisch über den npm-Hookpostbuildausgeführt. Idempotent und fehlertolerant, wenn Abhängigkeiten fehlen.
Überprüfen, ob die Funktion aktiv ist: Wenn LLMLingua ausgewählt ist, wird echter Fließtext tatsächlich gekürzt (die Engine
arbeitet nicht mehr im Fail-Open-Modus), und die erste Anfrage löst den Download des Modells nach
${DATA_DIR}/models/llmlingua aus. Der Prüfmechanismus testet absichtlich nur @atjsh/llmlingua-2 —
die anderen Peers sind ausschließlich ESM-basiert, und require.resolve löst bei ihnen selbst dann einen Fehler aus, wenn sie vorhanden sind — daher
arbeitet der Worker weiterhin im Fail-Open-Modus, wenn zum Zeitpunkt von import() tatsächlich ein Peer fehlt.
Gestapelte Pipelines
Im gestapelten Modus werden Pipeline-Schritte der Reihe nach ausgeführt. Der Standard ist:
rtk -> caveman
Verwenden Sie diesen Modus für Sitzungen mit Coding-Agenten, bei denen ein Prompt Befehlsausgaben mit Text von Menschen oder Assistenten kombiniert. RTK reduziert zunächst umfangreiche Tool-Protokolle, anschließend komprimiert Caveman die verbleibende natürliche Sprache.
Pipeline-Schritte werden über stackedPipeline in den Komprimierungseinstellungen oder über Komprimierungskombinationen konfiguriert.
Wenn beide Engines dieselbe geeignete Nutzlast reduzieren, summieren sich die Einsparungen:
kombiniert = 1 - (1 - RTK-Einsparung) * (1 - Caveman-Eingabeeinsparung)
Durchschnitt = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
Bereich = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
MCP-Filter für Barrierefreiheitsbäume
Der intelligente MCP-Filter für Barrierefreiheitsbäume ist eine nachgelagerte Komprimierungsebene, die auf MCP-Tool-Ergebnisse angewendet wird, nicht auf Prompts oder Kontext. Er ist für die umfangreichen Nutzlasten von Barrierefreiheitsbäumen und Browser-Snapshots vorgesehen, die von Tools wie Playwright, Computer-Use und MCP-Servern zur Browserautomatisierung zurückgegeben werden.
Funktionsweise
- Entfernung von Rauschen — entfernt leere generische/Text-Einträge (
- generic:,- text: "") - Zusammenfassung gleichgeordneter Elemente — wenn ≥
collapseThreshold(Standard: 30) aufeinanderfolgende Zeilen strukturelle Wiederholungen sind, werden sie auf die erstencollapseKeepHead(Standard: 10) Zeilen + eine Zusammenfassung mit der Anzahl + die letztencollapseKeepTail(Standard: 5) Zeilen reduziert - Beibehaltung von Referenzen — die von Playwright/Computer-Use benötigten
[ref=eXX]-Anker werden niemals verändert - Harte Kürzung — wenn der Text nach der Zusammenfassung weiterhin
maxTextChars(Standard: 50.000) überschreitet, wird er mit einem Navigationshinweis gekürzt, damit der Agent weiterarbeiten kann
Speicherort der Engine
open-sse/services/compression/engines/mcpAccessibility/
index.ts ← Einstiegspunkt smartFilterText()
collapseRepeated.ts ← Algorithmus zur Zusammenfassung gleichgeordneter Elemente
constants.ts ← DEFAULT_MCP_ACCESSIBILITY_CONFIG
Konfiguration
Die Steuerung erfolgt über compression.mcpAccessibility in den globalen Einstellungen (Migration 056). Standardkonfiguration:
{
"enabled": true,
"maxTextChars": 50000,
"collapseThreshold": 30,
"collapseKeepHead": 10,
"collapseKeepTail": 5,
"minLengthToProcess": 2000
}
Der Filter wird nur auf Tool-Ergebnis-Nutzlasten angewendet, deren type "text" ist und deren Länge minLengthToProcess überschreitet. Er wirkt sich weder auf die Prompt-Komprimierung noch auf Anfragenutzlasten aus.
Erwartete Einsparungen
60–80 % bei Tool-Ergebnissen aus Browser-Snapshots, abhängig von der Komplexität der Seite. Der Zusammenfassungsalgorithmus hat bezüglich der Zeilenanzahl eine Laufzeitkomplexität von O(n) und verursacht eine vernachlässigbare Latenz.
Vergleich dieses Filters mit den oben genannten Komprimierungs-Engines
| Aspekt | Caveman / RTK / Stacked | MCP-Filter für Barrierefreiheit |
|---|---|---|
| Ziel | Anfrage-Prompts / Kontext | MCP-Tool-Ergebnisse |
| Auslöser | Einstellung des Komprimierungsmodus | compression.mcpAccessibility.enabled |
| Geltungsbereich | Alle SSE-Nachrichten | Nur Tool-Ergebnisse |
| Referenzanker | Nicht zutreffend | Werden bedingungslos beibehalten |
Komprimierungskombinationen
Komprimierungskombinationen sind benannte Komprimierungsprofile, die Routing-Kombinationen zugewiesen werden können:
compression_combos: speichert Modus, Pipeline, RTK-Konfiguration, Sprachkonfiguration und Standardmarkierungcompression_combo_assignments: ordnet eine Komprimierungskombination einer Routing-Kombination zu- die Laufzeitintegration löst eine zugewiesene Komprimierungskombination vor generischen Überschreibungen der Kombination auf
- Analysen enthalten
compression_combo_idundengine
Dashboard-Bereich: Dashboard -> Context & Cache -> Compression Combos.
API-Oberfläche
| Route | Zweck |
|---|---|
/api/settings/compression |
Globale Komprimierungseinstellungen (einschließlich mcpAccessibility-Konfiguration) |
/api/compression/preview |
Vorschau eines beliebigen Komprimierungsmodus |
/api/compression/language-packs |
Verfügbare Caveman-Sprachpakete auflisten |
/api/context/caveman/config |
Alias für Caveman-Einstellungen |
/api/context/rtk/config |
RTK-Standardwerte und -Einstellungen |
/api/context/rtk/filters |
RTK-Filterkatalog |
/api/context/rtk/test |
RTK-Vorschau-/Test-Endpunkt |
/api/context/rtk/raw-output/[id] |
Authentifizierte Wiederherstellung redigierter Rohausgaben |
/api/context/combos |
CRUD für Komprimierungskombinationen |
/api/context/combos/[id]/assignments |
CRUD für Zuweisungen zu Routing-Kombinationen |
/api/context/analytics |
Alias für Komprimierungsanalysen |
Verwaltungsrouten erfordern eine Verwaltungsauthentifizierung oder API-Schlüssel-Richtlinienprüfungen.
MCP-Tools
Die Komprimierung stellt fünf MCP-Tools bereit:
| Tool | Umfang | Zweck |
|---|---|---|
omniroute_compression_status |
read:compression |
Einstellungen, Analysen, Cache-Statistiken |
omniroute_compression_configure |
write:compression |
Globale Einstellungen aktualisieren |
omniroute_set_compression_engine |
write:compression |
Modus und optionale Pipeline festlegen |
omniroute_list_compression_combos |
read:compression |
Komprimierungskombinationen auflisten |
omniroute_compression_combo_stats |
read:compression |
Kombinations-/Engine-Analysen abrufen |
Umfang und Ausschlüsse
Embeddings werden niemals komprimiert. open-sse/handlers/embeddings.ts ruft niemals eine
Komprimierungs-Engine auf — die Anfrage-/Antwortinhalte werden unverändert direkt an den Executor
weitergegeben. Dies ist derzeit strukturell bedingt (Embeddings und Chat Completions werden von
getrennten Handlern verarbeitet) und keine Laufzeitprüfung. Das bedeutet jedoch, dass das Problem
der Vektorverzerrung aus #8034 im Embeddings-Pfad keine Angriffsfläche hat.
Ausschlussfilter pro Modell/Endpunkt (#8034). Für Chat Completions kann ein Betreiber
Modell-IDs bzw. provider/model-Ziele angeben, die niemals komprimiert werden dürfen — eine
nützliche Schutzmaßnahme, falls die Komprimierung später näher an einen Embeddings-nahen Pfad
angebunden wird, und allgemein nützlich für jedes Modell, bei dem der Prompt bytegenau erhalten
bleiben muss (deterministische Auswertungen, cache-sensitive Präfixe usw.).
- Einstellungsfeld:
exclusions?: string[]in der globalen Komprimierungskonfiguration (GET/PUT /api/settings/compression), persistiert über den vorhandenenkey_value-Namensraum für die Komprimierung (src/lib/db/compression.ts) — keine neue Tabelle. - Dashboard-Registerkarte: Dashboard → Compression → Exclusions
(
/dashboard/compression/exclusions). - Mustersyntax:
*ist der einzige Platzhalter. Jedes andere reguläre Ausdrucksmetazeichen in einem Muster wird vor dem Abgleich maskiert, sodassgpt-5.6nur mit der exakten Zeichenfolge übereinstimmt, niemals mitgpt-5x6(ReDoS-sicher, begrenzt, keine verschachtelten Quantifizierer). Muster werden ohne Berücksichtigung der Groß-/Kleinschreibung sowohl mit der reinen Modell-ID als auch mit der zusammengesetzten Angabeprovider/modelabgeglichen —gpt-5-6,openai/gpt-5-6undopenai/*funktionieren alle, und*allein schließt jedes Modell aus. - Abgleich:
isCompressionExcluded()/normalizeCompressionExclusions()inopen-sse/services/compression/exclusions.ts.chatCore.tsprüft das ausgeschlossene Ziel unmittelbar nach dem Auflösen der Komprimierungseinstellungen, bevor eine Engine ausgeführt wird, und behandelt eine Übereinstimmung genau so, als wäre die Komprimierung global deaktiviert — der Anfrageinhalt bleibt nachweislich byteidentisch. Das Überspringen wird überwriteCompressionSkip(..., "excluded")für die Sichtbarkeit in Analysen erfasst. - Standardwert (leere/nicht vorhandene Liste): identisch mit dem Verhalten vor #8034 — nichts wird ausgeschlossen.
Bekannte Einschränkungen
- LLMLingua-2 (SLM) erfordert gemeinsam platzierte optionale Abhängigkeiten. Der Worker wird in einem
Produktions-Build nur ausgeführt, wenn
@atjsh/llmlingua-2und seine Peer-Abhängigkeiten gemeinsam unterdist/node_modulesplatziert sind (siehescripts/build/colocateOptionals.mjs, #4286). Ohne sie arbeitet die Engine nach dem Fail-open-Prinzip (sie gibt den ursprünglichen Text zurück). Die Auflösung des Workers hängt nicht mehr vonimport.meta.urlab (dies schlägt im eigenständigen Bundle fehl), sondern orientiert sich zur Laufzeit am cwd / anargv[1]. - Die Caveman-Sprachpakete
de/fr/jasind unvollständig. Sie enthalten Regeln fürcontext+filler+structural, aber keine Pakete fürdedup/ultra, sodass die Intensitätultrafür diese Sprachen nicht stärker ist alsfull(sie verwenden ausschließlich ihre eigenen Regeln — es gibt keinen stillen Rückgriff auf die englischendedup-/ultra-Regeln, der fremdsprachigen Text verstümmeln würde).en/es/id/pt-BRsind vollständig. Beiträge in Form vondedup.json+ultra.jsonfür die unvollständigen Pakete sind willkommen. - Die Telemetrie gestapelter Pipelines listet nur Engines auf, die eine Komprimierung erzielt haben. Ein Schritt einer gestapelten Pipeline, dessen
Engine ausgeführt wurde, aber 0 % Einsparung erzielte, gibt
stats:nullzurück und erscheint daher nicht inengineBreakdown— er ist somit nicht von einem übersprungenen Schritt zu unterscheiden. Die Unterscheidung zwischen „ausgeführt, 0 %“ und „übersprungen“ würde eine Änderung des Aufschlüsselungsmodells erfordern und wird zurückgestellt.
Validierung
Die gezielten Prüfungen für diesen Bereich sind:
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