* 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.
36 KiB
Extending the Compression Pipeline (Türkçe)
🌐 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 · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Kısaca: OmniRoute'un sıkıştırma motoru takılabilir yapıdadır — özel motorlar kaydedebilir, yeni diller için dil paketleri sunabilir ve yığınlanmış işlem hatları oluşturabilirsiniz. Bu kılavuz bunun nasıl yapılacağını gösterir.
İlgili kılavuzlar:
- COMPRESSION_GUIDE.md — İşlem hattının tam genel görünümü
- COMPRESSION_ENGINES.md — Motor kayıt defteri ve yerleşik motorlar
- RTK_COMPRESSION.md — RTK motoru ve özel filtreler
- COMPRESSION_RULES_FORMAT.md — Kural paketi biçimi başvurusu
Genel Bakış
Sıkıştırma sisteminin 3 genişletme noktası vardır:
| Genişletme noktası | Kullanım alanı | Zorluk |
|---|---|---|
| Özel motor | Yepyeni bir sıkıştırma algoritması ekleme (ör. alana özgü özetleyici) | İleri |
| Dil paketi | Yeni bir doğal dil için destek ekleme (ör. Hintçe, Arapça) | Orta |
| Yığınlanmış işlem hattı | Mevcut motorları özel bir sırayla birleştirme | Başlangıç |
┌─────────────────────────────────────────────────────────────┐
│ Sıkıştırma Stratejisi │
│ │
│ Girdi mesajları ──▶ getEffectiveMode() ──▶ mod │
│ │ │
│ ┌───────────────────────┼──────────┐ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ "rtk" "lite" "standard" "stacked" │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ RTK Lite Caveman engines[] │
│ motoru motoru motoru zincirli │
│ │ │ │ │ │ │
│ └─────────┴─────────┴─────────┘ │ │
│ │ │
│ ▼ │
│ Sıkıştırılmış çıktı │
└─────────────────────────────────────────────────────────────┘
Strateji seçici MOD TABANLIDIR: her istek BİR mod seçer
(rtk / lite / standard / aggressive / ultra / stacked / off).
Yalnızca "stacked" modu birden fazla motoru sıralı olarak zincirler.
Varsayılan otomatik tetikleme modu "lite"tır (3 katmanlı bir öncelik zinciri değildir).
Özel Bir Sıkıştırma Motoru Yazma
Motor arayüzü (open-sse/services/compression/engines/types.ts), her motorun karşılaması gereken sözleşmedir. 5 zorunlu yöntemi vardır.
CompressionEngine Arayüzü
interface CompressionEngine {
id: string; // Benzersiz motor kimliği
name: string; // Görünen ad
description: string; // Kısa açıklama
icon: string; // Simge (emoji veya URL)
targets: CompressionEngineTarget[]; // ["messages", "tool_results", "code_blocks"]
stackable: boolean; // Yığınlanmış bir işlem hattında kullanılabilir
stackPriority: number; // Yığınlanmış işlem hatlarındaki sıra (düşük = daha erken)
metadata: CompressionEngineMetadata;
apply(body, options?): CompressionResult;
compress(body, config?): CompressionResult;
getConfigSchema(): EngineConfigField[];
validateConfig(config): EngineValidationResult;
}
Minimal Örnek: Boşluk Motoru
Mümkün olan en basit motor — mesajlardaki fazladan boşlukları kaldırır.
import type { CompressionEngine } from "omniroute/compression/engines/types";
import { registerCompressionEngine } from "omniroute/compression/engines/registry";
function preserveCodeBlocks(text: string): string {
// Kod bloğu işaretçilerine göre ayır ve bunların içindeki boşlukları koru
const parts = text.split(/(```[\s\S]*?```)/);
return parts
.map((part) => {
if (part.startsWith("```")) {
return part; // Kod bloklarını değiştirme
}
return part.replace(/\n{3,}/g, "\n\n"); // Yalnızca düz yazıya uygula
})
.join("");
}
const whitespaceEngine: CompressionEngine = {
id: "whitespace",
name: "Whitespace Stripper",
description: "Removes extra whitespace and blank lines",
icon: "📝",
targets: ["messages", "tool_results"],
stackable: true,
stackPriority: 100, // caveman/rtk'den SONRA çalıştır
metadata: {
id: "whitespace",
name: "Whitespace Stripper",
description: "Removes extra whitespace and blank lines",
inputScope: "messages",
targetLatencyMs: 5,
supportsPreview: true,
stable: true,
},
apply(body, options) {
return this.compress(body, options?.config);
},
compress(body, config = {}) {
let originalLength = 0;
let compressedLength = 0;
// İleti dizisini dolaş — hem dize hem de çok parçalı içeriği işle
const compressedBody = (body.messages || []).map((msg) => {
if (typeof msg.content === "string") {
originalLength += msg.content.length;
let compressed = msg.content
.replace(/[ \t]+/g, " ")
.replace(/\n{3,}/g, "\n\n")
.replace(/^\s+|\s+$/gm, "");
compressedLength += compressed.length;
return { ...msg, content: compressed };
}
// Çok parçalı içerik: parçaları dolaş, yalnızca metin parçalarını sıkıştır
if (Array.isArray(msg.content)) {
const newParts = msg.content.map((part) => {
if (part.type === "text" && typeof part.text === "string") {
originalLength += part.text.length;
let compressed = part.text
.replace(/[ \t]+/g, " ")
.replace(/\n{3,}/g, "\n\n")
.replace(/^\s+|\s+$/gm, "");
compressedLength += compressed.length;
return { ...part, text: compressed };
}
return part; // image_url, tool_use vb. değerleri koru
});
return { ...msg, content: newParts };
}
return msg;
});
return {
body: { ...body, messages: compressedBody },
stats: {
originalTokens: Math.ceil(originalLength / 4),
compressedTokens: Math.ceil(compressedLength / 4),
savingsPercent: originalLength > 0 ? 100 * (1 - compressedLength / originalLength) : 0,
techniques: ["whitespace-collapse"],
engineId: "whitespace",
},
};
},
getConfigSchema() {
return [
{
key: "preserveCodeBlocks",
type: "boolean",
label: "Preserve code blocks",
defaultValue: true,
description: "Don't touch whitespace inside ```code``` blocks",
},
];
},
validateConfig(config) {
if (config.preserveCodeBlocks !== undefined && typeof config.preserveCodeBlocks !== "boolean") {
return { valid: false, errors: ["preserveCodeBlocks must be a boolean"] };
}
return { valid: true, errors: [] };
},
};
// Genel olarak kaydet
registerCompressionEngine(whitespaceEngine);
Özel Motorların Yerleştirileceği Konum
~/.omniroute/compression/engines/my-engine.ts # Kullanıcı düzeyi
<project>/compression-engines/my-engine.ts # Proje düzeyi (başlangıçta yüklenir)
Alternatif olarak bir eklentiden program aracılığıyla yükleyin:
// Eklentinizde
import {
registerCompressionEngine,
unregisterCompressionEngine,
} from "@omniroute/open-sse/services/compression/engines/registry";
import { myEngine } from "./engines/my-engine";
export default definePlugin({
name: "my-compression-plugin",
// Eklenti SDK'sı onRequest / onResponse / onError kancalarını sunar. Motoru,
// eklenti modülü yüklenirken (veya ilk onRequest çağrısında) kaydedin; kendi
// kapatma yolunuzdan kaydını kaldırın.
onRequest: async (ctx) => {
registerCompressionEngine(myEngine);
},
});
// Kapatma sırasında:
// unregisterCompressionEngine("my-engine");
Motorunuzu Test Etme
Motorunuzu bir eklentide veya başlangıç işlevinde kaydedin. Kaydedildikten sonra motor, id değeri aracılığıyla strateji seçicide kullanılabilir olacaktır. Yığınlanmış bir işlem hattında birleştirerek entegrasyonu test edin:
Dil Paketleri Oluşturma
Mağara adamı tarzı sıkıştırma, her doğal dildeki dolgu ifadelerini, kaçamak anlatımları ve gereksiz uzun kalıpları işlemek için dile özgü kural paketleri kullanır. OmniRoute, 6 dil paketiyle birlikte gelir: en, es, fr, de, ja, pt-BR.
Paket Yapısı
Bir dil paketi, open-sse/services/compression/rules/<language>/ altında bulunan JSON dosyalarından oluşan bir dizindir:
open-sse/services/compression/rules/
├── en/
│ ├── filler.json # Nezaket ifadeleri, kaçamak anlatımlar, kibarlık
│ ├── context.json # Bağlamı azaltan kurallar
│ ├── dedup.json # Tekilleştirme kuralları
│ ├── structural.json # Noktalama, biçimlendirme
│ └── ultra.json # Agresif sıkıştırma kuralları
├── es/ (aynı yapı)
├── fr/ (aynı yapı)
├── de/ (aynı yapı)
├── ja/ (aynı yapı)
└── pt-BR/ (aynı yapı)
Kural Anatomisi
Her kural şu yapıya sahiptir (open-sse/services/compression/ruleLoader.ts dosyasından):
interface FileRule {
name: string; // İnsan tarafından okunabilir ad (kebab-case)
pattern: string; // JavaScript düzenli ifade kalıbı
replacement?: string; // Eşleşmenin neyle değiştirileceği
replacementMap?: Record<string, string>; // VEYA anahtar→değiştirme eşlemesi
flags?: string; // Düzenli ifade bayrakları (genellikle "gi")
context?: "all" | "user" | "system" | "assistant";
category?: "filler" | "context" | "structural" | "dedup" | "terse" | "ultra";
minIntensity?: "lite" | "full" | "ultra"; // Bu yoğunluğun altında atla
description?: string; // Dokümantasyon
}
Örnek: Hintçe Dolgu Kuralları Ekleme
{
"language": "hi",
"category": "filler",
"rules": [
{
"name": "polite_opener",
"pattern": "\\b(?:नमस्ते|नमस्कार|आदरणीय)\\b[,!\\s]*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "lite",
"description": "'नमस्ते' gibi nazik giriş ifadelerini kaldır"
},
{
"name": "filler_actually",
"pattern": "\\b(?:असल में|वास्तव में|दरअसल)\\b\\s*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "lite",
"description": "'Aslında' gibi dolgu ifadelerini kaldır"
},
{
"name": "verbose_plea",
"pattern": "\\b(?:कृपया|कृपया आप|अनुरोध है कि आप)\\b\\s*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "full",
"description": "Hintçedeki 'lütfen' ifadesini kaldır"
}
]
}
Doğrulama
Kural paketleri yükleme sırasında _schema.json şemasına göre doğrulanır. Hatalı yapıya sahip bir paket yüklenemez ve bir hata günlüğe kaydedilir:
RULE_LOADER: "hi/filler.json" paketi doğrulamayı geçemedi:
- rules.0.pattern: Geçersiz düzenli ifade
- rules.1.context: [all, user, system, assistant] değerlerinden biri olmalıdır
Doğrulama, bir paket yüklendiğinde (_schema.json şemasına göre) otomatik olarak çalışır; geçersiz bir paket reddedilir ve yukarıdaki hata günlüğe kaydedilir. Paket doğrulaması için ayrı bir npm run betiği yoktur — paketi yükleyin (ör. sunucuyu başlatın veya sıkıştırma yolunu çalıştırın) ve günlükleri izleyin.
Özel Bir Dil Paketini Yükleme
import { loadRulePack } from "omniroute/compression/ruleLoader";
await loadRulePack("./my-custom-rules/hi/filler.json");
Alternatif olarak, tanınan bir konuma yerleştirin:
~/.omniroute/compression/rules/hi/filler.json # Kullanıcı düzeyi
<project>/.compression/rules/hi/filler.json # Proje düzeyi
Dil Paketleri İçin En İyi Uygulamalar
fillerile başlayın — bunlar en yüksek etkiye sahip kurallardır- Agresif kuralları sınırlamak için
minIntensitykullanın — aşırı sıkıştırmaya karşı koruma sağlar - Test senaryoları ekleyin — davranışı doğrulamak için JSON dosyasına
tests[]dizisi ekleyin - Sıralama önemlidir — önceki kurallar ilk olarak uygulanır; yüksek etkili kuralları başa yerleştirin
replacementkonusunda ölçülü olun — boş dize genellikle doğrudur; asla yeni içerik eklemeyin
Çeviri Stratejisi
Kural paketlerini yeni bir dile yerelleştirirken:
- Kural adlarını çevirin — hata ayıklama çıktısında görünürler
- Düzenli ifade kalıplarını uyarlayın — doğrudan çeviri çoğu zaman işe yaramaz (sözcük sınırları farklıdır)
- Gerçek konuşmalarla test edin — paket gerçek girdiler üzerinde güvenli olmalıdır
- Kültürel geleneklere uyum sağlayın — örneğin Japonca paketlerde İngilizceye kıyasla daha fazla saygı ifadesi niteliğinde dolgu bulunur
Yığınlanmış İşlem Hatları
Yığınlanmış işlem hattı, birden fazla motoru sırayla çalıştırır ve her motorun çıktısı bir sonraki motoru besler. mode: stacked dahili olarak bu şekilde çalışır.
Yığınlama Nasıl Çalışır?
Girdi (10.000 belirteç)
│
▼
┌──────────┐
│ Motor │ öncelik 10
│ A │ ──▶ çıktı: 6.000 belirteç (-%40)
└────┬─────┘
▼
┌──────────┐
│ Motor │ öncelik 50
│ B │ ──▶ çıktı: 2.400 belirteç (-%60)
└────┬─────┘
▼
┌──────────┐
│ Motor │ öncelik 100
│ C │ ──▶ çıktı: 1.200 belirteç (-%80)
└────┬─────┘
│
▼
Nihai çıktı (1.200 belirteç, toplamda ~%88 tasarruf)
mode: "stacked" seçildiğinde motorlar, pipeline dizisinde belirtilen sırayla çalıştırılır.
N numaralı motorun çıktısı, N+1 numaralı motorun girdisi olur.
Sıkıştırma Modları
OmniRoute; yapılandırmaya, otomatik tetikleme eşiklerine ve kombinasyon geçersiz kılmalarına göre her istek için BİR mod seçer.
Kullanılabilir modlar open-sse/services/compression/types.ts dosyasında tanımlanmıştır (CompressionMode türü):
| Mod | Motorlar | Kullanım amacı |
|---|---|---|
off |
Yok | Tüm sıkıştırmayı devre dışı bırakır |
rtk |
Yalnızca RTK | Komut çıktısının yoğun olduğu oturumlar (%80+ tasarruf) |
lite |
Yalnızca Lite | Muhafazakâr sıkıştırma (hızlı, güvenli) |
standard |
Caveman | Dil paketleriyle düz yazı sıkıştırması |
aggressive |
Caveman + Aggressive | Agresif düz yazı sıkıştırması + agresif son geçiş |
ultra |
Ultra | Maksimum sıkıştırma (kayıplı, son çare). ultra.modelPath ayarlandığında isteğe bağlı olarak LLMLingua-2 SLM motoru üzerinden yönlendirilir (model kullanılamadığında kural tabanlı yola açık geçiş yapar). |
stacked |
Özel işlem hattı | Motorları istenilen sırada birleştirir (aşağıya bakın) |
Yukarıdaki mod motorlarına ek olarak kayıt defteri, yığınlanabilir özel motorlar da içerir — CCR, headroom, ionizer ve session-dedup — bunlar COMPRESSION_ENGINES.md belgesinde açıklanmıştır.
Mod seçimi, open-sse/services/compression/strategySelector.ts içindeki getEffectiveMode() tarafından belirlenir:
- Sıkıştırma devre dışıysa:
"off" - Bir kombinasyon geçersiz kılması varsa: geçersiz kılmayı kullan
- Otomatik tetikleme eşiği aşılmışsa:
autoTriggerModekullan (varsayılan:"lite") - Aksi takdirde:
defaultModekullan
Varsayılan Yığınlanmış İşlem Hattı
mode: "stacked" açıkça yapılandırıldığında varsayılan işlem hattı şunları birleştirir:
- RTK — komut çıktısındaki gürültüyü ayıklar (terminal çıktısında ~%80 tasarruf)
- Caveman — dolgu ifadelerini kaldırır, düz yazıyı özlü hâle getirir (kalan metinde ~%46)
- Lite — son boşluk düzenleme + yinelenenleri kaldırma geçişi
Bu bileşim, araç kullanımının yoğun olduğu oturumlarda %78-95 tasarruf sağlar.
Yığınlanmış İşlem Hatlarını Yapılandırma
Kombinasyon yapılandırmasında:
{
"compression": {
"mode": "stacked",
"pipeline": [
{ "engine": "rtk", "config": { "intensity": "aggressive" } },
{ "engine": "caveman", "config": { "intensity": "full" } },
{ "engine": "lite", "config": {} }
]
}
}
Motorları atlayabilir, özel motorlar ekleyebilir veya sıralarını değiştirebilirsiniz.
Durum Aktarımı
Motorlar, istek bağlamındaki (options içinde) meta verileri okuyabilir:
compress(body, config) {
// Önceki motorların meta verilerini oku
const original = options?.compressionComboId; // "my-coding-combo"
// ...
}
Meta veriler salt okunurdur — motorlar istek bağlamını değiştiremez, yalnızca kendi gövde çıktılarını değiştirebilir.
Çalıştırma Sırasındaki İncelikler
| Motor sırası | Etki |
|---|---|
| RTK → Caveman → Lite | Önerilen (önce gürültüyü, ardından dili ve son olarak boşlukları ayıklar) |
| Lite → RTK → Caveman | Kötü — Lite, ham çıktıdaki boşlukları ayıklayarak RTK'nin kalıp eşleştirmesinin başarısız olmasına neden olur |
| Caveman → RTK | Kötü — Caveman, metni RTK'nin tanımayacağı biçimlerde yeniden yazabilir |
Önce tool_results olacak herhangi bir sıra |
Daha iyi — araç çıktısı en gürültülü içeriktir |
Ne Zaman Yığınlama YAPILMAMALI?
Yığınlama her zaman daha iyi değildir:
- Basit mesajlar (araç çıktısı yok) — tek başına Caveman veya Lite yeterlidir
- Maliyet duyarlı kullanım — her motor ~5-50ms gecikme ekler
- Belirli araçlar — kabuk çıktısı için genellikle yalnızca RTK yeterlidir
Özel İşlem Hattı Oluşturma
Adlandırılmış bir işlem hattı kayıt defteri yoktur. Yığınlanmış bir işlem hattı, applyStackedCompression() işlevine (@omniroute/open-sse/services/compression/strategySelector paketinden dışa aktarılır) iletilen satır içi bir adım dizisinden ibarettir:
import { applyStackedCompression } from "@omniroute/open-sse/services/compression/strategySelector";
const result = applyStackedCompression(body, [
{ engine: "rtk", intensity: "aggressive" },
{ engine: "caveman", intensity: "full" },
]);
Bir işlem hattı iletmediğinizde varsayılan olarak rtk(standard) → caveman(full) kullanılır.
Bunu yapılandırmadan yönetmek için mode: "stacked" ayarını yapın ve adım dizisini stackedPipeline altında (config.stackedPipeline üzerinden okunur) sağlayın:
{
"compression": {
"mode": "stacked",
"stackedPipeline": [
{ "engine": "rtk", "intensity": "aggressive" },
{ "engine": "caveman", "intensity": "full" }
]
}
}
Üst Kaynak Senkronizasyon Politikası
OmniRoute'un sıkıştırma motorları README dosyasında çeşitli üst kaynak projelere atıfta bulunur ("RTK, Caveman, LLMLingua-2 ve Troglodita'dan esinlenilmiştir"). Katkıda bulunanların sıkça sorduğu bir soru şudur: Üst kaynak RTK'ye yeni bir araç filtresi veya Caveman'e yeni bir kural paketi eklendiğinde, bu yenilik OmniRoute'a nasıl ulaşır? Bu bölüm, bu sorunun kesin yanıtıdır.
Depoya alınmış kopyalar ve bağımsız uygulamalar
| Motor | Üst kaynakla ilişkisi | Konum |
|---|---|---|
| RTK | Bağımsız yeniden uygulama (esinlenilmiş, kopyalanmamıştır) | open-sse/services/compression/engines/rtk/ |
| Caveman | Bağımsız yeniden uygulama (esinlenilmiştir) | open-sse/services/compression/engines/cavemanAdapter.ts |
| Headroom | Büyük ölçüde dahilîdir; yalnızca gcf/ codec'i gcf-typescript projesinden gerçek anlamda depoya alınmıştır (MIT, SPDX işaretli, yalnızca genel profil) |
open-sse/services/compression/engines/headroom/gcf/ |
| LLMLingua-2 / Troglodita | Esinlenilmiştir (llmlingua + session-dedup motorlarına yön verir) |
open-sse/services/compression/engines/llmlingua/, session-dedup |
Önemli nokta: RTK ve Caveman, fikirlerin (filtre kuralları, kural paketleri)
temiz oda yöntemiyle geliştirilmiş TypeScript uygulamalarıdır; depoya alınmış kaynak
ağaçları değildir. git pull ile çekilebilecek bir üst kaynak kopyası yoktur — README'de
"paketlenmiştir" yerine "esinlenilmiştir" denmesinin nedeni de tam olarak budur.
Üst kaynak iyileştirmeleri nasıl birleştirilir?
Tasarım gereği otomatik üst kaynak sürüm takibi ve compression-sync
etiketi yoktur. Motorlar yeniden uygulamalar olduğundan, üst kaynaktaki bir RTK
filtresi veya Caveman kural paketi kod olarak birleştirilmez; bunun yerine
OmniRoute'un kendi biçiminde yeni bir kural/filtre olarak yeniden ifade edilir
(bkz. COMPRESSION_RULES_FORMAT.md) ve normal bir
PR aracılığıyla gerektiğinde eklenir. Yukarıdaki genişletme noktaları (özel motor,
dil paketi, RTK filtresi), bu tür katkılar için onaylanmış yöntemlerdir.
Bu akışın yakın tarihli örnekleri:
- Gradle ve
dotnetderleme çıktısı için RTK filtreleri (v3.8.42) - kubectl / docker-build / composer / gh için RTK filtreleri (#2824)
- Caveman Endonezce dil paketi (#3975) ile Almanca / Fransızca / Japonca / Çince paketleri
Headroom (girdi sıkıştırma proxy'si)
Headroom tamamen dahilîdir — sabitlenmiş, depoya alınmış bir gcf codec anlık
görüntüsünün yanı sıra OmniRoute'un kendi smartcrusher / toon / tabular
katmanlarından oluşur. Depoya alınmış kopyanın ötesinde takip edilecek aktif bir
üst kaynak yoktur; gcf güncellemeleri codec değiştiğinde elle yenilenir ve
sıkıştırma bütçesi geçidine (check:compression-budget) göre yeniden doğrulanır.
Üst kaynaktan esinlenen bir iyileştirme önerme
- Depoya almayın — üst kaynak kuralını/filtresini OmniRoute'un biçiminde yeniden ifade edin.
- Aşağıdaki eşleşen genişletme noktası üzerinden ekleyin (dil paketi, RTK filtresi veya özel motor).
- Lisans taşıyan kaynak kodunu kopyalamak yerine PR açıklamasında üst kaynak projeye atıfta bulunun.
- Testleri ekleyin ve
check:compression-budgetgeçidinin hâlâ başarıyla geçildiğini doğrulayın.
Bir Çıktı Stili Ekleme
Çıktı stilleri (kılavuzun katalog tablosuna bakın), girdi motorlarının yanıt tarafındaki karşılığıdır: gönderdiklerinizi sıkıştırmak yerine, modele daha düşük maliyetli çıktı üretmesi talimatını verirler. Kayıt defteri open-sse/services/compression/outputStyles/catalog.ts içindeki OUTPUT_STYLE_CATALOG sabitidir ve tek bir katalog girdisi özelliğin tamamını oluşturur: enjektör, kontrol paneli ayarları bölümü, kalıcılık ve telemetri katalogdaki girdileri listeler; güncellenecek başka bir liste yoktur.
OUTPUT_STYLE_CATALOGiçineid,label,descriptionve İngilizce üçlevels(lite,full,ultra) alanını içeren bir girdi ekleyin. Kodun, yolların, komutların, hataların ve URL'lerin olduğu gibi kalması için her seviye${SHARED_BOUNDARIES}ile bitmelidir. Talimat metni her(id, level, language)birleşimi için statik ve deterministik olmalıdır; izin verilen tek enterpolasyon${SHARED_BOUNDARIES}değeridir.- Çevirin.
i18naltında en az birpt-BRbloğu sağlayın;ponytailvei-have-adhd(en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi) referans yapıdır. Bilinçli olarak tek dilli olan bir stil bunun yerinelocaledeğerini ayarlar (terse-cjk→zhgibi) ve ardından yalnızca o yerel ayar altında sunulur. - Matris korumasını güncelleyin — stilin dillerini
tests/unit/compression/output-styles-i18n-matrix.test.tsiçindekiBASELINE_LANGUAGESöğesine ekleyin. Bu denetim, açık bir takip talebi içerenKNOWN_ENGLISH_ONLYgirdisi taşımadığı sürece, gerekli çevirilere sahip olmayan ve yerel ayarla sınırlandırılmamış her yeni stilde başarısız olur. - Stile özel bir test ekleyin ve bunu
tests/unit/compression/i-have-adhd-catalog.test.tsörneğine göre oluşturun: katalog yapısı, her seviye için sınırlar maddesi ve her çevirinin İngilizceden kopyalanmak yerine kendi dilinde yazıldığını doğrulayan bir sabitleme. - Atıf: Stil başka bir üst kaynak projeden uyarlandıysa, girdideki bir kaynak yorumunda projeyi belirtin (ör.
i-have-adhd→ ayghri/i-have-adhd, MIT); yukarıdaki "Üst kaynaktan esinlenen bir iyileştirme önerme" bölümüyle aynı kural geçerlidir.
Herhangi bir kullanıcı arayüzü, şema veya telemetri değişikliği gerekmez; bu yüzeyler katalogdan oluşturulur.
En İyi Uygulamalar
Motor Geliştirme
- Her zaman
validateConfiguygulayın — doğrulaması olmayan motorlar sessiz hatalara neden olur - Gerçekçi bir
targetLatencyMsayarlayın — strateji seçici bunu motorları seçmek için kullanır - Kontrol paneli için
getConfigSchemakullanın — yapılandırmayı hiçbir zaman kullanıcılardan gizlemeyin - Motorunuz safsa
stackable: truedesteği sağlayın — yan etkileri olan motorlar birlikte yığınlanmamalıdır - Satır içi testler yazın — motorlar 1 saniyeden kısa sürede doğrulanabilmelidir
Dil Paketi Geliştirme
liteyoğunluğuyla başlayın — kurallarınız en düşük ayarda güvenli olmalıdır- Kuralların kapsamını belirlemek için
contextkullanın — yalnızcauseriçin olan kurallar sistem istemlerini yanlışlıkla etkileyemez - JSON anahtarlarını yakalamaktan kaçının —
\\bword\\b, JSON içinde eşleşerek yapılandırılmış verileri bozabilir - Uç durumlarla test edin — boş girdi, unicode, RTL metin, emojiler
- Mevcut paketleri şablon olarak kullanın —
en/filler.jsonen gelişmiş örnektir
İşlem Hattı Tasarımı
- Optimize etmeden önce profil çıkarın — önce
compression_statsile ölçüm yapın - Yeniden uygulamak yerine bileşimi tercih edin — yeni bir motor yazmadan önce Caveman kurallarını genişletin
- Sıralama gerekçesini belgeleyin — A motorunun neden B motorundan önce geldiğini yorumda açıklayın
- 3 yoğunluk seviyesinin tamamında test edin —
litehızlıdır ancak kayıplıdır,ultrayavaştır ancak hassastır
Referans: Yerleşik Motorlar
| Motor Kimliği | Yığınlanabilir | Varsayılan stackPriority | Hedefler |
|---|---|---|---|
lite |
Evet | 5 | mesajlar, araç_sonuçları |
rtk |
Evet | 10 | araç_sonuçları |
standard (caveman) |
Evet | 20 | mesajlar, araç_sonuçları, kod_blokları |
aggressive |
Evet | 30 | mesajlar |
ultra |
Evet | 40 | mesajlar, kod_blokları |
Ayrıca Bakınız
- COMPRESSION_GUIDE.md — İşlem hattına genel bakış
- COMPRESSION_ENGINES.md — Motor kayıt sistemi referansı
- COMPRESSION_RULES_FORMAT.md — Kural biçimi belirtimi
- COMPRESSION_LANGUAGE_PACKS.md — Dil paketi ayrıntıları
- RTK_COMPRESSION.md — RTK motoru ve özel filtreler
- Kaynak:
open-sse/services/compression/(117 dosya, ~250KB)