* 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.
30 KiB
Compression Engines (Bahasa Indonesia)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇳🇬 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
Kompresi OmniRoute dibangun berdasarkan kontrak mesin. Sebuah mode dapat menjalankan satu mesin secara langsung
(caveman atau rtk) atau pipeline bertumpuk deterministik yang mengeksekusi beberapa mesin secara berurutan.
Mode
| Mode | Jalur mesin | Input yang ditujukan |
|---|---|---|
off |
tidak ada | Mempertahankan prompt secara persis |
lite |
Pembantu ringan Caveman | Pembersihan selalu aktif berisiko rendah |
standard |
Caveman | Pemadatan prompt bahasa alami |
aggressive |
Caveman + peringkas riwayat/alat | Sesi obrolan panjang |
ultra |
Caveman + pembantu pemangkasan | Pemulihan batas konteks |
rtk |
RTK | Output terminal, shell, build, pengujian, dan git |
omniglyph |
OmniGlyph | Konteks sebagai gambar pada jalur native penyedia |
stacked |
Pipeline, default rtk -> caveman |
Campuran log alat dan prosa, penghematan maksimum |
Profil kompresi OmniGlyph
Mesin omniglyph (paket omniglyph, 1.4.0+) menerima profil semantik bernama, yang ditetapkan
secara global melalui omniglyph.profile dalam pengaturan kompresi atau per langkah melalui
konfigurasi langkah pipeline bertumpuk:
| Profil | Batasan |
|---|---|
aggressive |
Default. Kebijakan yang diukur oleh bukti yang dipublikasikan — mengubah sistem, dokumentasi alat, dan riwayat padat menjadi gambar |
balanced |
Mempertahankan status aktif secara native, melindungi 8 giliran terakhir, menciutkan riwayat lama yang telah ditutup |
coding-safe |
Mempertahankan otoritas, skema alat, dan output alat aktif secara native, melindungi 12 giliran terakhir |
passthrough |
Merutekan tanpa transformasi; mesin dilewati |
Profil adalah batas atas, bukan batas bawah: mergeCompressionProfileOptions dalam paket
menolak mengizinkan penggantian oleh pemanggil membuka kembali jalur lossy yang telah ditutup profil, sehingga
preserveSystemPrompt: false per langkah tidak dapat mengaktifkan kembali kompresi sistem di bawah coding-safe.
Diukur pada basis kode ini: coding-safe dan balanced menaikkan minCompressChars ke nilai
maksimumnya dan mempertahankan sistem, skema alat, serta hasil alat secara native, sehingga sesi yang belum
mengakumulasi riwayat akan berhenti pada below_min_chars dan mesin tidak mentransformasi apa pun. Itulah
sebabnya default-nya adalah aggressive, bukan profil yang paling aman.
Paket ini menentukan cakupan model dan profilnya sendiri dari konfigurasi lingkungannya. OmniRoute tidak pernah mendelegasikan keputusan tersebut: adapter menetapkan gerbang model ke cakupan paling ketat milik paket, sehingga pengaturan lingkungan host hanya dapat mempersempit daftar izin, tidak pernah memperluasnya melampaui bukti terukur OmniRoute.
Registri Engine
Registri berada di open-sse/services/compression/engines/registry.ts. Engine menyediakan kontrak
bersama:
id: id engine stabil seperticavemanataurtkapply(text, config): jalur eksekusi lama yang digunakan oleh pipeline bertumpukcompress(input, config): jalur eksekusi utama yang mengembalikan teks + statistikgetConfigSchema(): mengembalikan struktur mirip JSON Schema dari konfigurasi yang validvalidateConfig(config): mengembalikan{ valid, errors[] }
Pendaftaran menggunakan registerCompressionEngine(engine) (atau registerEngine untuk kasus lanjutan),
yang memanggil assertValidEngine() dan validateConfig(defaultConfig) sebelum menerimanya.
Gunakan unregisterCompressionEngine(id) untuk menghapus engine saat runtime.
strategySelector.ts mendaftarkan engine bawaan sebelum kompresi dijalankan. Hal ini memungkinkan pratinjau,
kompresi runtime, mode bertumpuk, pengujian, dan engine mendatang menggunakan jalur eksekusi yang sama.
Kompresi deskripsi MCP (terkait)
Registri terpisah mengompresi metadata deskripsi alat MCP pada tingkat registri — lihat
open-sse/mcp-server/descriptionCompressor.ts dan MCP-SERVER.md. Registri ini menggunakan kembali
aturan Caveman, tetapi beroperasi pada metadata alat, bukan payload permintaan.
Engine bawaan tambahan
Selain Caveman, RTK, dan LLMLingua-2, registri menyediakan beberapa engine lossless / struktural khusus (digunakan oleh pipeline bertumpuk, playground, dan pengujian):
| Engine | Id | Fungsinya |
|---|---|---|
| CCR | ccr |
Content-Compress-Retrieve (H4): mengganti blok teks berurutan yang besar dengan referensi berbasis konten, sehingga blok yang berulang/besar dikirim sekali dan selanjutnya dirujuk. |
| headroom | headroom |
SmartCrusher (H3 + N5): pemadatan tabular lossless untuk payload array JSON homogen menjadi bentuk kolumnar [N rows]. |
| ionizer | ionizer |
Pengambilan sampel baris awal/tengah/akhir untuk blok homogen yang sangat besar, dengan menyimpan bagian tengah yang dihilangkan sebagai referensi berbasis konten CCR. |
| session-dedup | session-dedup |
Deduplikasi lintas giliran berbasis konten (terinspirasi TokenMizer): menghilangkan teks yang telah terlihat pada giliran sebelumnya dalam sesi yang sama. |
Instruksi protokol pengambilan CCR (#8033): saat pertama kali CCR mengganti ≥1 blok dalam suatu
permintaan, engine menambahkan satu pesan system idempoten di awal (diawali dengan
sentinel [CCR protocol]) yang mengajarkan kontrak penanda → alat kepada pemanggil: arti
penanda [CCR retrieve hash=<24hex> chars=N], bahwa hash harus disalin apa adanya
(semua 24 karakter heksadesimal — hash yang salah disalin kemungkinan menjadi penyebab kegagalan
"blok tidak ditemukan"), dan bahwa penanda [dedup:ref sha=...] berarti "lihat kembali riwayat", bukan "panggil
alat". Catatan tersebut disisipkan hanya ketika tools[] yang diumumkan pemanggil membuktikan bahwa pemanggil benar-benar dapat
mengakses omniroute_ccr_retrieve (callerSupportsCcrRetrieve() dalam
open-sse/services/compression/engines/ccr/protocolInstruction.ts) — pemanggil biasa yang kompatibel dengan
OpenAI tanpa alat tersebut tidak pernah menerima instruksi untuk memanggil sesuatu yang
tidak dapat diaksesnya. Idempotensi diberlakukan dengan memindai riwayat pesan untuk mencari sentinel
sebelum penyisipan, sehingga permintaan multi-giliran (yang memutar ulang pesan sebelumnya) tidak menumpuk
catatan sekali per giliran.
Caveman
Mode Caveman berfokus pada pemadatan semantik prosa normal:
- mempertahankan blok kode, URL, JSON, jalur, dan data terstruktur
- menghapus kata-kata pengisi, ungkapan keraguan, konteks berulang, dan frasa penghubung yang bertele-tele
- mendukung paket aturan berkas yang mengenali bahasa di
open-sse/services/compression/rules/ - tetap tersedia melalui mode lama
standard,aggressive, danultra
Tampilan dasbornya berada di Dashboard -> Context & Cache -> Caveman.
Proyek hulu Caveman melaporkan token keluaran ~75% lebih sedikit, penghematan keluaran rata-rata 65% dalam tolok ukur
dengan rentang 22-87%, serta alat kompresi masukan sebesar ~46%. OmniRoute menggunakan angka sisi masukan Caveman
saat mendokumentasikan penghematan prompt/konteks bertumpuk; mode keluaran Caveman tetap merupakan fitur
perilaku respons yang terpisah.
RTK
Mode RTK berfokus pada keluaran perintah dan alat:
- mendeteksi kelas keluaran seperti
git status,git branch,git diff, Vitest/Jest/Pytest, pengujian Cargo/Go, build TypeScript/Vite/Webpack, ESLint, audit/instalasi npm, log Docker,find/grepshell, stack trace, dan log generik - menerapkan 49 filter JSON dari
open-sse/services/compression/engines/rtk/filters/ - mendukung pipeline deklaratif bergaya RTK: penghapusan ANSI, penggantian, penghentian singkat berdasarkan kecocokan keluaran, penghapusan/penyimpanan baris, pemotongan per baris, pemotongan bagian awal/akhir/jumlah baris maksimum, dan fallback saat kosong
- mendukung filter proyek berbasis kepercayaan di
.rtk/filters.jsondan filter global diDATA_DIR/rtk/filters.json - menghapus urutan ANSI, derau progres, baris berulang, dan teks standar yang tidak membantu
- mempertahankan kegagalan yang dapat ditindaklanjuti, peringatan, ringkasan, berkas yang berubah, dan konteks bagian akhir
- dapat secara opsional menyimpan keluaran mentah yang telah disunting untuk pemulihan/debugging melalui rute pengelolaan terautentikasi
Tampilan dasbornya berada di Dashboard -> Context & Cache -> RTK.
Detail operasional untuk filter khusus, kepercayaan, verifikasi, dan pemulihan keluaran mentah tersedia di
RTK_COMPRESSION.md.
Proyek hulu RTK melaporkan penghematan 60-90% untuk kompresi keluaran perintah. Contoh dalam README-nya menunjukkan
sesi Claude Code selama 30 menit berkurang dari ~118,000 token menjadi ~23,900, atau menghemat 79.7%.
LLMLingua-2 (Pemangkasan Semantik)
Mode LLMLingua-2 melakukan pemangkasan token semantik pada prosa menggunakan pengklasifikasi token ONNX berukuran kecil, sebagai pelengkap mesin Caveman dan RTK yang berbasis aturan:
- mengompresi prosa hanya dalam pesan non-sistem; blok kode berpagar dan konstruksi lain yang dipertahankan tidak pernah diubah
- menjalankan backend
@atjsh/llmlingua-2(ONNX melalui@huggingface/transformers) dalam thread pekerja, sehingga inferensi model tidak pernah memblokir event loop permintaan - dapat ditumpuk (
stackPriority35): dalam pipeline bertumpuk, mode ini berjalan setelah mesin struktural (CCR, session-dedup, headroom, Caveman), tetapi sebelumultra, karena pemangkasan semantik paling efektif pada teks yang sudah dikompresi secara struktural — mis.rtk -> caveman -> llmlingua - tetap beroperasi saat terjadi kesalahan apa pun (dependensi opsional tidak tersedia, pembuatan pekerja, pemuatan model, inferensi, atau timeout) → teks asli dikembalikan tanpa perubahan, bukan kesalahan
Lokasi mesin: open-sse/services/compression/engines/llmlingua/. Tampilan dasbornya
berada di Dashboard -> Context & Cache -> LLMLingua.
Model
Model default adalah TinyBERT (atjsh/llmlingua-2-js-tinybert-meetingbank, ~57 MB,
cepat). Model BERT-base dengan akurasi lebih tinggi (Arcoldd/llmlingua4j-bert-base-onnx,
~710 MB) tersedia melalui kolom model dalam konfigurasi mesin. @huggingface/transformers
mengunduh model yang dipilih secara tertunda dari HuggingFace Hub ke
${DATA_DIR}/models/llmlingua pada pemanggilan pertama (modelStore.ts); penimpaan konfigurasi modelPath
akan mengarahkannya ke salinan lokal (untuk instalasi offline / terisolasi).
Dependensi opsional & instalasi sesuai permintaan
Stack peer runtime LLMLingua yang dapat dipangkas bersifat opsional. Dua paket dideklarasikan sebagai
optionalDependencies dalam package.json dan tetap eksternal pada build produksi
(scripts/build/prepublish.ts tidak membundelkannya):
| Paket | Versi (pin) | Catatan |
|---|---|---|
@atjsh/llmlingua-2 |
2.0.5 |
Paket entri; mendeklarasikan lainnya sebagai peer |
js-tiktoken |
^1.0.20 |
Tokenizer |
@huggingface/transformers dipatok pada ^4.2.0 (digunakan bersama jalur embedding lokal dan
juga ditelusuri ke dalam bundle mandiri); @atjsh/llmlingua-2@2.0.5 menggunakan dependensi peer
"^3.5.2 || ^4.0.0" untuk paket tersebut, sehingga Transformers.js v3 dan v4 sama-sama didukung. Sejak 2.0.4,
@atjsh/llmlingua-2 tidak lagi memerlukan @tensorflow/tfjs, yang menghapus kontributor tunggal
terbesar (TensorFlow.js) dari stack SLM. Hanya dua paket di atas yang merupakan peer SLM yang
dapat dipangkas. npm install standar (dev) menginstal stack opsional secara otomatis, kecuali dependensi
opsional dihilangkan.
Alasan instalasi sesuai permintaan: paket yang dipublikasikan di npm, bundle mandiri, dan image Docker
dikirim tanpa dependensi ini agar tetap ramping. Jika dependensi tersebut tidak tersedia, pemeriksaan
dependensi milik pekerja (probe resolusi @atjsh/llmlingua-2 dalam worker.ts) akan gagal dan mesin
tetap beroperasi tanpa menampilkan kesalahan — memilih LLMLingua tidak akan melakukan apa pun (teks dikembalikan tanpa perubahan dan tidak ada
kesalahan yang dicatat). Untuk mengaktifkannya di lingkungan yang telah dipangkas, instal stack opsional:
# patok ke versi yang dideklarasikan dalam optionalDependencies di package.json
npm install @atjsh/llmlingua-2@2.0.5 js-tiktoken
Penghapusan @tensorflow/tfjs (2.0.4+) meniadakan kontributor yang sebelumnya dominan sebesar ~800 MB
— ruang yang tersisa digunakan oleh runtime transformers.js + onnxruntime-node,
ditambah model TinyBERT (~57 MB) yang diunduh saat penggunaan pertama (bukan melalui npm).
Per lingkungan:
- Dev /
npm install— diinstal secara otomatis kecuali Anda menggunakan--omit=optional(atau--no-optional). Tidak diperlukan tindakan apa pun. - npm global (
npm i -g omniroute) / mandiri — jalankan perintah instalasi di atas di dalam direktori paket yang telah diinstal, atau instal ulang tanpa menghilangkan dependensi opsional. - Docker — tambahkan perintah instalasi dalam sebuah lapisan image turunan; image yang dipublikasikan sengaja dibuat ramping.
- VPS (PM2) — instal ke dalam
node_modulesmilik aplikasi, lalu mulai ulang proses agar worker memeriksa ulang gate. - Next mandiri mentah (
npm run build→.build/next/standalone/server.js) — trace mandiri TIDAK menyertakan worker maupun dependensi opsional, sehingga engine secara diam-diam terbuka saat gagal.scripts/build/colocate-standalone.mjsmenerapkan kembali keduanya (esbuild worker + closure dependensi opsional ke dalam struktur mandiri); skrip ini berjalan secara otomatis melalui hook npmpostbuildsetelah setiap build. Idempoten, gagal secara lunak ketika dependensi tidak tersedia.
Verifikasi bahwa fitur ini aktif: saat LLMLingua dipilih, prosa nyata benar-benar menyusut (engine
tidak lagi terbuka saat gagal), dan permintaan pertama memicu pengunduhan model ke
${DATA_DIR}/models/llmlingua. Gate sengaja hanya memeriksa @atjsh/llmlingua-2 —
peer lainnya hanya mendukung ESM dan require.resolve melempar error untuk peer tersebut meskipun tersedia — sehingga
worker tetap terbuka saat gagal jika ada peer yang benar-benar tidak tersedia pada waktu import().
Pipeline Bertumpuk
Mode bertumpuk menjalankan langkah-langkah pipeline secara berurutan. Urutan default-nya adalah:
rtk -> caveman
Gunakan ini untuk sesi agen pengodean ketika prompt menggabungkan output perintah dengan prosa dari manusia atau asisten. RTK terlebih dahulu mengurangi log alat yang berisik, lalu Caveman memampatkan bahasa alami yang tersisa.
Langkah-langkah pipeline dikonfigurasi dengan stackedPipeline dalam pengaturan kompresi atau melalui kombinasi kompresi.
Ketika kedua mesin mengurangi payload sama yang memenuhi syarat, penghematannya terakumulasi:
gabungan = 1 - (1 - penghematan RTK) * (1 - penghematan input Caveman)
rata-rata = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%
rentang = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%
Filter Pohon Aksesibilitas MCP
Filter cerdas pohon aksesibilitas MCP adalah lapisan kompresi pascaeksekusi yang berjalan pada hasil alat MCP, bukan pada prompt atau konteks. Filter ini menyasar payload pohon aksesibilitas dan snapshot browser yang panjang, yang dikembalikan oleh alat seperti Playwright, computer-use, dan server MCP otomatisasi browser.
Fungsinya
- Penghapusan derau — menghapus entri generik/teks kosong (
- generic:,- text: "") - Penciutan saudara — ketika ≥
collapseThreshold(default 30) baris berurutan merupakan pengulangan struktural, baris-baris tersebut diciutkan menjadicollapseKeepHead(default 10) baris pertama + ringkasan jumlah +collapseKeepTail(default 5) baris terakhir - Pelestarian ref — jangkar
[ref=eXX]yang diperlukan oleh Playwright/computer-use tidak pernah diubah - Pemotongan tegas — jika teks setelah penciutan masih melebihi
maxTextChars(default 50.000), teks dipotong dengan petunjuk navigasi agar agen dapat melanjutkan pekerjaan
Lokasi mesin
open-sse/services/compression/engines/mcpAccessibility/
index.ts ← titik masuk smartFilterText()
collapseRepeated.ts ← algoritma penciutan saudara
constants.ts ← DEFAULT_MCP_ACCESSIBILITY_CONFIG
Konfigurasi
Dikendalikan oleh compression.mcpAccessibility dalam pengaturan global (migrasi 056). Konfigurasi default:
{
"enabled": true,
"maxTextChars": 50000,
"collapseThreshold": 30,
"collapseKeepHead": 10,
"collapseKeepTail": 5,
"minLengthToProcess": 2000
}
Filter hanya diterapkan pada payload hasil alat yang type-nya adalah "text" dan panjangnya melebihi minLengthToProcess. Filter ini tidak memengaruhi kompresi prompt atau payload permintaan.
Penghematan yang diharapkan
60–80% pada hasil alat snapshot browser, bergantung pada kompleksitas halaman. Algoritma penciutan memiliki kompleksitas O(n) berdasarkan jumlah baris dan menambahkan latensi yang dapat diabaikan.
Perbandingan filter ini dengan mesin kompresi di atas
| Aspek | Caveman / RTK / Bertumpuk | Filter aksesibilitas MCP |
|---|---|---|
| Sasaran | Prompt / konteks permintaan | Hasil alat MCP |
| Pemicu | Pengaturan mode kompresi | compression.mcpAccessibility.enabled |
| Cakupan | Semua pesan SSE | Hanya hasil alat |
| Jangkar ref | Tidak berlaku | Selalu dipertahankan |
Kombinasi Kompresi
Kombinasi kompresi adalah profil kompresi bernama yang dapat ditetapkan ke kombinasi perutean:
compression_combos: menyimpan mode, pipeline, konfigurasi RTK, konfigurasi bahasa, dan penanda defaultcompression_combo_assignments: memetakan kombinasi kompresi ke kombinasi perutean- integrasi runtime menyelesaikan kombinasi kompresi yang ditetapkan sebelum penggantian kombinasi generik
- analitik mencakup
compression_combo_iddanengine
Lokasi di dasbor: Dashboard -> Context & Cache -> Compression Combos.
Permukaan API
| Rute | Tujuan |
|---|---|
/api/settings/compression |
Pengaturan kompresi global (mencakup konfigurasi mcpAccessibility) |
/api/compression/preview |
Pratinjau mode kompresi apa pun |
/api/compression/language-packs |
Mencantumkan paket bahasa Caveman yang tersedia |
/api/context/caveman/config |
Alias pengaturan Caveman |
/api/context/rtk/config |
Default dan pengaturan RTK |
/api/context/rtk/filters |
Katalog filter RTK |
/api/context/rtk/test |
Endpoint pratinjau/pengujian RTK |
/api/context/rtk/raw-output/[id] |
Pemulihan output mentah tersensor yang diautentikasi |
/api/context/combos |
CRUD kombinasi kompresi |
/api/context/combos/[id]/assignments |
CRUD penetapan kombinasi perutean |
/api/context/analytics |
Alias analitik kompresi |
Rute pengelolaan memerlukan autentikasi pengelolaan atau pemeriksaan kebijakan kunci API.
Alat MCP
Kompresi menyediakan lima alat MCP:
| Alat | Cakupan | Tujuan |
|---|---|---|
omniroute_compression_status |
read:compression |
Pengaturan, analitik, statistik cache |
omniroute_compression_configure |
write:compression |
Memperbarui pengaturan global |
omniroute_set_compression_engine |
write:compression |
Menetapkan mode dan pipeline opsional |
omniroute_list_compression_combos |
read:compression |
Mencantumkan kombinasi kompresi |
omniroute_compression_combo_stats |
read:compression |
Membaca analitik kombinasi/mesin |
Cakupan & pengecualian
Embedding tidak pernah dikompresi. open-sse/handlers/embeddings.ts tidak pernah memanggil
mesin kompresi apa pun — isi permintaan/respons diteruskan langsung ke eksekutor tanpa perubahan.
Saat ini hal ini bersifat struktural (embedding dan penyelesaian chat memiliki handler yang terpisah), bukan
pemeriksaan runtime, tetapi ini berarti kekhawatiran distorsi vektor dalam #8034 tidak memiliki permukaan paparan
pada jalur embedding.
Filter pengecualian per model/endpoint (#8034). Untuk penyelesaian chat, operator dapat menentukan
ID model / target provider/model yang tidak boleh dikompresi — pengaman yang berguna jika
kompresi nantinya dihubungkan lebih dekat ke jalur yang berdekatan dengan embedding, dan secara umum berguna
untuk model apa pun yang memerlukan prompt yang sama persis byte demi byte (evaluasi deterministik, prefiks
yang sensitif terhadap cache, dan sebagainya).
- Kolom pengaturan:
exclusions?: string[]pada konfigurasi kompresi global (GET/PUT /api/settings/compression), dipersistenkan melalui namespace kompresikey_valueyang sudah ada (src/lib/db/compression.ts) — tanpa tabel baru. - Tab dasbor: Dashboard → Compression → Exclusions
(
/dashboard/compression/exclusions). - Sintaks pola:
*adalah satu-satunya wildcard. Setiap metakarakter regex lain dalam pola di-escape sebelum pencocokan, sehinggagpt-5.6hanya cocok dengan string literal tersebut, tidak pernah dengangpt-5x6(aman dari ReDoS, terbatas, tanpa kuantifier bersarang). Pola dicocokkan tanpa membedakan huruf besar-kecil terhadap ID model saja maupun gabunganprovider/model—gpt-5-6,openai/gpt-5-6, danopenai/*semuanya berfungsi, dan*saja mengecualikan setiap model. - Pencocokan:
isCompressionExcluded()/normalizeCompressionExclusions()dalamopen-sse/services/compression/exclusions.ts.chatCore.tsmemeriksa target yang dikecualikan tepat setelah menyelesaikan pengaturan kompresi, sebelum mesin apa pun dijalankan, dan memperlakukan kecocokan sama persis seperti saat kompresi dinonaktifkan secara global — isi permintaan terbukti identik byte demi byte. Pelewatan dicatat melaluiwriteCompressionSkip(..., "excluded")agar terlihat dalam analitik. - Default (daftar kosong/tidak ada): identik dengan perilaku sebelum #8034 — tidak ada yang dikecualikan.
Keterbatasan yang diketahui
- LLMLingua-2 (SLM) memerlukan dependensi opsional yang ditempatkan bersama. Worker hanya berjalan dalam build
produksi ketika
@atjsh/llmlingua-2+ peer-nya ditempatkan bersama ke dalamdist/node_modules(lihatscripts/build/colocateOptionals.mjs, #4286). Tanpa dependensi tersebut, engine akan mengalami fail-open (mengembalikan teks asli). Resolusi worker tidak lagi bergantung padaimport.meta.url(yang gagal dalam bundle mandiri) — resolusi tersebut berpatokan pada cwd runtime /argv[1]. - Paket bahasa Caveman
de/fr/jamasih parsial. Paket tersebut menyertakan aturancontext+filler+structural, tetapi tidak memiliki paketdedup/ultra, sehingga intensitasultratidak lebih kuat daripadafulluntuk bahasa-bahasa tersebut (paket ini hanya menggunakan aturannya sendiri — tidak ada fallback diam-diam ke aturandedup/ultrabahasa Inggris, yang dapat merusak teks berbahasa asing).en/es/id/pt-BRsudah lengkap. Kontribusidedup.json+ultra.jsonuntuk paket parsial sangat diharapkan. - Telemetri bertumpuk hanya mencantumkan engine yang melakukan kompresi. Langkah pipeline bertumpuk yang
engine-nya berjalan tetapi menghasilkan penghematan 0 % akan mengembalikan
stats:null, sehingga tidak muncul dalamengineBreakdown— tidak dapat dibedakan dari langkah yang dilewati. Membedakan antara "berjalan, 0 %" dan "dilewati" akan memerlukan perubahan model breakdown dan ditangguhkan.
Validasi
Gate terfokus untuk area ini adalah:
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