* 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.
37 KiB
Extending the Compression Pipeline (Oʻzbekcha)
🌐 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 · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Qisqasi: OmniRoute siqish mexanizmi kengaytiriladigan — maxsus mexanizmlarni roʻyxatdan oʻtkazishingiz, yangi tillar uchun til paketlarini taqdim etishingiz va ketma-ket konveyerlarni tuzishingiz mumkin. Ushbu qoʻllanma buni qanday amalga oshirishni koʻrsatadi.
Tegishli qoʻllanmalar:
- COMPRESSION_GUIDE.md — Toʻliq konveyer sharhi
- COMPRESSION_ENGINES.md — Mexanizmlar reyestri va ichki mexanizmlar
- RTK_COMPRESSION.md — RTK mexanizmi va maxsus filtrlar
- COMPRESSION_RULES_FORMAT.md — Qoidalar paketi formati maʼlumotnomasi
Umumiy koʻrinish
Siqish tizimida 3 ta kengaytirish nuqtasi mavjud:
| Kengaytirish nuqtasi | Qoʻllanish holati | Murakkablik |
|---|---|---|
| Maxsus mexanizm | Mutlaqo yangi siqish algoritmini qoʻshish (masalan, sohaga xos umumlashtiruvchi) | Yuqori |
| Til paketi | Yangi tabiiy tilni qoʻllab-quvvatlash (masalan, hind yoki arab tili) | Oʻrta |
| Ketma-ket konveyer | Mavjud mexanizmlarni maxsus tartibda birlashtirish | Boshlangʻich |
┌─────────────────────────────────────────────────────────────┐
│ Siqish strategiyasi │
│ │
│ Kiruvchi xabarlar ──▶ getEffectiveMode() ──▶ rejim │
│ │ │
│ ┌───────────────────────┼──────────┐ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ "rtk" "lite" "standard" "stacked" │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │ │
│ RTK Lite Caveman engines[] │
│ mexanizmi mexanizmi mexanizmi ketma-ket │
│ │ │ │ │ │ │
│ └─────────┴─────────┴─────────┘ │ │
│ │ │
│ ▼ │
│ Siqilgan natija │
└─────────────────────────────────────────────────────────────┘
Strategiya tanlagichi REJIMGA ASOSLANGAN: har bir soʻrov BITTA rejimni tanlaydi
(rtk / lite / standard / aggressive / ultra / stacked / off).
Faqat "stacked" rejimi bir nechta mexanizmni ketma-ket bogʻlaydi.
Standart avtomatik ishga tushirish rejimi — "lite" (3 bosqichli ustuvorlik zanjiri emas).
Maxsus siqish mexanizmini yozish
Mexanizm interfeysi (open-sse/services/compression/engines/types.ts) har bir mexanizm bajarishi kerak boʻlgan shartnomadir. Unda 5 ta majburiy metod mavjud.
CompressionEngine interfeysi
interface CompressionEngine {
id: string; // Noyob mexanizm identifikatori
name: string; // Koʻrsatiladigan nom
description: string; // Qisqa tavsif
icon: string; // Belgi (emoji yoki URL)
targets: CompressionEngineTarget[]; // ["messages", "tool_results", "code_blocks"]
stackable: boolean; // Ketma-ket konveyerda foydalanish mumkinmi
stackPriority: number; // Ketma-ket konveyerlardagi tartib (kichikroq = oldinroq)
metadata: CompressionEngineMetadata;
apply(body, options?): CompressionResult;
compress(body, config?): CompressionResult;
getConfigSchema(): EngineConfigField[];
validateConfig(config): EngineValidationResult;
}
Minimal misol: boʻsh joylar mexanizmi
Eng sodda mexanizm — xabarlardagi ortiqcha boʻsh joylarni olib tashlaydi.
import type { CompressionEngine } from "omniroute/compression/engines/types";
import { registerCompressionEngine } from "omniroute/compression/engines/registry";
function preserveCodeBlocks(text: string): string {
// Kod bloklari markerlari bo‘yicha ajrating va ularning ichidagi bo‘sh joylarni saqlang
const parts = text.split(/(```[\s\S]*?```)/);
return parts
.map((part) => {
if (part.startsWith("```")) {
return part; // Kod bloklarini o‘zgartirmang
}
return part.replace(/\n{3,}/g, "\n\n"); // Faqat oddiy matnga qo‘llang
})
.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’dan KEYIN ishga tushiring
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;
// Xabarlar massivini ko‘rib chiqing — ham satrli, ham ko‘p qismli kontentni qayta ishlang
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 };
}
// Ko‘p qismli kontent: qismlarni ko‘rib chiqing, faqat matnli qismlarni siqing
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 va boshqalarni saqlang
});
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: [] };
},
};
// Global miqyosda ro‘yxatdan o‘tkazing
registerCompressionEngine(whitespaceEngine);
Maxsus mexanizmlarni qayerga joylashtirish kerak
~/.omniroute/compression/engines/my-engine.ts # Foydalanuvchi darajasida
<project>/compression-engines/my-engine.ts # Loyiha darajasida (ishga tushishda yuklanadi)
Yoki plagindan dasturiy tarzda yuklang:
// Plaginingizda
import {
registerCompressionEngine,
unregisterCompressionEngine,
} from "@omniroute/open-sse/services/compression/engines/registry";
import { myEngine } from "./engines/my-engine";
export default definePlugin({
name: "my-compression-plugin",
// Plagin SDK’si onRequest / onResponse / onError ilgaklarini taqdim etadi. Mexanizmni
// plagin moduli yuklanganda (yoki birinchi onRequest’da) ro‘yxatdan o‘tkazing; uni
// o‘zingizning yakunlash jarayoningizda ro‘yxatdan chiqaring.
onRequest: async (ctx) => {
registerCompressionEngine(myEngine);
},
});
// Yakunlash vaqtida:
// unregisterCompressionEngine("my-engine");
Mexanizmingizni sinash
Mexanizmingizni plagin yoki ishga tushirish funksiyasida ro‘yxatdan o‘tkazing. Ro‘yxatdan o‘tkazilgach, mexanizm strategiya tanlagichida o‘zining id qiymati orqali mavjud bo‘ladi. Uni steklangan konveyerda birlashtirish orqali integratsiyani sinang:
Til paketlarini yaratish
Caveman uslubidagi siqish har bir tabiiy tildagi ortiqcha iboralar, ikkilanishni ifodalovchi jumlalar va sergap tuzilmalarni boshqarish uchun tilga xos qoidalar paketlaridan foydalanadi. OmniRoute tarkibida 6 ta til paketi mavjud: en, es, fr, de, ja, pt-BR.
Paket tuzilishi
Til paketi — open-sse/services/compression/rules/<language>/ ichidagi JSON fayllari katalogidir:
open-sse/services/compression/rules/
├── en/
│ ├── filler.json # Xushmuomalalik iboralari, ikkilanish, odoblilik
│ ├── context.json # Kontekstni qisqartirish qoidalari
│ ├── dedup.json # Takrorlarni olib tashlash qoidalari
│ ├── structural.json # Tinish belgilari, formatlash
│ └── ultra.json # Agressiv siqish qoidalari
├── es/ (xuddi shu tuzilma)
├── fr/ (xuddi shu tuzilma)
├── de/ (xuddi shu tuzilma)
├── ja/ (xuddi shu tuzilma)
└── pt-BR/ (xuddi shu tuzilma)
Qoida anatomiyasi
Har bir qoida quyidagi ko‘rinishga ega (open-sse/services/compression/ruleLoader.ts faylidan):
interface FileRule {
name: string; // Inson o‘qishi uchun qulay nom (kebab-case)
pattern: string; // JavaScript regex andozasi
replacement?: string; // Moslikni nima bilan almashtirish kerak
replacementMap?: Record<string, string>; // YOKI kalit→almashtirish xaritasi
flags?: string; // Regex bayroqlari (odatda "gi")
context?: "all" | "user" | "system" | "assistant";
category?: "filler" | "context" | "structural" | "dedup" | "terse" | "ultra";
minIntensity?: "lite" | "full" | "ultra"; // Ushbu intensivlikdan past bo‘lsa, o‘tkazib yuborish
description?: string; // Hujjatlar
}
Misol: hind tili uchun ortiqcha iboralar qoidalarini qo‘shish
{
"language": "hi",
"category": "filler",
"rules": [
{
"name": "polite_opener",
"pattern": "\\b(?:नमस्ते|नमस्कार|आदरणीय)\\b[,!\\s]*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "lite",
"description": "'नमस्ते' kabi odobli kirish iboralarini olib tashlash"
},
{
"name": "filler_actually",
"pattern": "\\b(?:असल में|वास्तव में|दरअसल)\\b\\s*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "lite",
"description": "'actually' kabi ortiqcha iboralarni olib tashlash"
},
{
"name": "verbose_plea",
"pattern": "\\b(?:कृपया|कृपया आप|अनुरोध है कि आप)\\b\\s*",
"replacement": "",
"context": "all",
"category": "filler",
"minIntensity": "full",
"description": "Hind tilidagi 'please' iborasini olib tashlash"
}
]
}
Tekshirish
Qoida paketlari yuklanayotganda _schema.json asosida tekshiriladi. Tuzilishi noto‘g‘ri bo‘lgan paket yuklanmaydi va xato jurnalga yoziladi:
RULE_LOADER: "hi/filler.json" paketi tekshiruvdan o‘tmadi:
- rules.0.pattern: Noto‘g‘ri regex
- rules.1.context: [all, user, system, assistant] qiymatlaridan biri bo‘lishi kerak
Paket yuklanganda tekshiruv avtomatik ravishda (_schema.json asosida) bajariladi; yaroqsiz paket rad etiladi va yuqoridagi xato jurnalga yoziladi. Paketni tekshirish uchun alohida npm run skripti mavjud emas — paketni yuklang (masalan, serverni ishga tushiring yoki siqish yo‘lini bajaring) va jurnallarni kuzating.
Maxsus til paketini yuklash
import { loadRulePack } from "omniroute/compression/ruleLoader";
await loadRulePack("./my-custom-rules/hi/filler.json");
Yoki uni tan olinadigan joyga joylashtiring:
~/.omniroute/compression/rules/hi/filler.json # Foydalanuvchi darajasida
<project>/.compression/rules/hi/filler.json # Loyiha darajasida
Til paketlari uchun eng yaxshi amaliyotlar
fillerbilan boshlang — bular eng katta ta’sirga ega qoidalardir- Agressiv qoidalarni cheklash uchun
minIntensitydan foydalaning — bu haddan tashqari siqishdan himoya qiladi - Sinov holatlarini kiriting — xatti-harakatni tekshirish uchun JSON fayliga
tests[]massivini qo‘shing - Tartib muhim — oldingi qoidalar birinchi bo‘lib qo‘llanadi; katta ta’sirga ega qoidalarni boshiga joylashtiring
replacementdan ehtiyotkorlik bilan foydalaning — odatda bo‘sh satr to‘g‘ri tanlovdir; hech qachon yangi kontent kiritmang
Tarjima strategiyasi
Qoida paketlarini yangi tilga moslashtirishda:
- Qoida nomlarini tarjima qiling — ular nosozliklarni tuzatish chiqishida ko‘rinadi
- Regex andozalarini moslashtiring — to‘g‘ridan-to‘g‘ri tarjima ko‘pincha ishlamaydi (so‘z chegaralari farq qiladi)
- Haqiqiy suhbatlarda sinab ko‘ring — paket haqiqiy kirish ma’lumotlarida xavfsiz ishlashi kerak
- Madaniy me’yorlarga moslashtiring — masalan, yapon tili paketlarida ingliz tilidagiga qaraganda hurmat ifodalovchi ortiqcha iboralar ko‘proq
Ketma-ket konveyerlar
Ketma-ket konveyer bir nechta mexanizmni ketma-ket ishga tushiradi, bunda har bir mexanizmning chiqishi keyingisiga uzatiladi. mode: stacked ichki tomondan shu tarzda ishlaydi.
Ketma-ket ishlash tartibi
Kirish (10,000 token)
│
▼
┌──────────┐
│ Mexanizm │ ustuvorlik 10
│ A │ ──▶ chiqish: 6,000 token (-40%)
└────┬─────┘
▼
┌──────────┐
│ Mexanizm │ ustuvorlik 50
│ B │ ──▶ chiqish: 2,400 token (-60%)
└────┬─────┘
▼
┌──────────┐
│ Mexanizm │ ustuvorlik 100
│ C │ ──▶ chiqish: 1,200 token (-80%)
└────┬─────┘
│
▼
Yakuniy chiqish (1,200 token, jami ~88% tejash)
mode: "stacked" tanlanganda, mexanizmlar pipeline massivida ko‘rsatilgan tartibda ketma-ket bajariladi.
N-mexanizmning chiqishi N+1-mexanizmning kirishiga aylanadi.
Siqish rejimlari
OmniRoute konfiguratsiya, avtomatik ishga tushirish chegaralari va kombinatsiya qayta belgilashlari asosida har bir so‘rov uchun BITTA rejimni tanlaydi.
Mavjud rejimlar open-sse/services/compression/types.ts faylida (CompressionMode turi) belgilangan:
| Rejim | Mexanizmlar | Qo‘llanish holati |
|---|---|---|
off |
Yo‘q | Barcha siqishni o‘chirish |
rtk |
Faqat RTK | Buyruq chiqishi ko‘p bo‘lgan seanslar (80%+ tejash) |
lite |
Faqat Lite | Ehtiyotkor siqish (tez, xavfsiz) |
standard |
Caveman | Til paketlari yordamida nasriy matnni siqish |
aggressive |
Caveman + Aggressive | Nasriy matnni agressiv siqish + agressiv yakuniy o‘tish |
ultra |
Ultra | Maksimal siqish (yo‘qotishli, eng so‘nggi chora). ultra.modelPath o‘rnatilganda, ixtiyoriy ravishda LLMLingua-2 SLM mexanizmi orqali yo‘naltiriladi (model mavjud bo‘lmasa, qoidalarga asoslangan yo‘lga xatosiz qaytadi). |
stacked |
Maxsus konveyer | Mexanizmlarni istalgan tartibda birlashtirish (quyiga qarang) |
Yuqoridagi rejim mexanizmlaridan tashqari, reyestr tarkibida ketma-ket qo‘llash mumkin bo‘lgan maxsus mexanizmlar ham mavjud — CCR, headroom, ionizer va session-dedup — ular COMPRESSION_ENGINES.md faylida hujjatlashtirilgan.
Rejim tanlovi open-sse/services/compression/strategySelector.ts faylidagi getEffectiveMode() tomonidan belgilanadi:
- Agar siqish o‘chirilgan bo‘lsa:
"off" - Agar kombinatsiya uchun qayta belgilash mavjud bo‘lsa: qayta belgilangan qiymatdan foydalanish
- Agar avtomatik ishga tushirish chegarasidan oshilsa:
autoTriggerModedan foydalanish (standart qiymat:"lite") - Aks holda:
defaultModedan foydalanish
Standart ketma-ket konveyer
mode: "stacked" aniq sozlanganda, standart konveyer quyidagilarni birlashtiradi:
- RTK — buyruq chiqishidagi shovqinni olib tashlash (terminal chiqishida ~80% tejash)
- Caveman — ortiqcha so‘zlarni olib tashlash, nasriy matnni ixchamlashtirish (qolgan matnda ~46%)
- Lite — bo‘sh joylarni yakuniy tozalash + takrorlarni olib tashlash bosqichi
Bu kompozitsiya vositalar faol ishlatiladigan seanslarda 78-95% tejashga erishadi.
Ketma-ket konveyerlarni sozlash
Kombinatsiya konfiguratsiyasida:
{
"compression": {
"mode": "stacked",
"pipeline": [
{ "engine": "rtk", "config": { "intensity": "aggressive" } },
{ "engine": "caveman", "config": { "intensity": "full" } },
{ "engine": "lite", "config": {} }
]
}
}
Mexanizmlarni tashlab ketishingiz, maxsus mexanizmlar qo‘shishingiz yoki ularning tartibini o‘zgartirishingiz mumkin.
Holatni uzatish
Mexanizmlar so‘rov kontekstidagi (options ichidagi) metama’lumotlarni o‘qishi mumkin:
compress(body, config) {
// Oldingi mexanizmlardan metama’lumotlarni o‘qish
const original = options?.compressionComboId; // "my-coding-combo"
// ...
}
Metama’lumotlar faqat o‘qish uchun — mexanizmlar so‘rov kontekstini o‘zgartira olmaydi, faqat o‘z tanasi chiqishini o‘zgartirishi mumkin.
Bajarilish tartibining nozik jihatlari
| Mexanizmlar tartibi | Ta’siri |
|---|---|
| RTK → Caveman → Lite | Tavsiya etiladi (avval shovqinni, keyin tilga oid ortiqchaliklarni, so‘ng bo‘sh joylarni tozalaydi) |
| Lite → RTK → Caveman | Yomon — Lite xom chiqishdagi bo‘sh joylarni olib tashlab, RTK andozalarini moslashtirishni buzadi |
| Caveman → RTK | Yomon — Caveman matnni RTK tanimaydigan tarzda qayta yozishi mumkin |
Avval tool_results kelgan har qanday tartib |
Yaxshiroq — vosita chiqishi eng shovqinli kontentdir |
Qachon ketma-ket qo‘llamaslik kerak
Ketma-ket qo‘llash har doim ham yaxshiroq emas:
- Oddiy xabarlar (vosita chiqishi yo‘q) — bitta Caveman yoki Lite yetarli
- Xarajatga sezgir holatlar — har bir mexanizm ~5-50ms kechikish qo‘shadi
- Muayyan vositalar — qobiq chiqishi uchun odatda RTKning o‘zi yetarli
Maxsus konveyer yaratish
Nomlangan konveyerlar reyestri mavjud emas. Yigʻma konveyer — bu shunchaki applyStackedCompression() funksiyasiga (@omniroute/open-sse/services/compression/strategySelector dan eksport qilinadi) uzatiladigan qadamlarning ichki massivi:
import { applyStackedCompression } from "@omniroute/open-sse/services/compression/strategySelector";
const result = applyStackedCompression(body, [
{ engine: "rtk", intensity: "aggressive" },
{ engine: "caveman", intensity: "full" },
]);
Agar konveyer uzatilmasa, standart qiymat sifatida rtk(standard) → caveman(full) ishlatiladi.
Uni konfiguratsiya orqali boshqarish uchun mode: "stacked" ni belgilang va qadamlar massivini stackedPipeline ostida taqdim eting (config.stackedPipeline dan oʻqiladi):
{
"compression": {
"mode": "stacked",
"stackedPipeline": [
{ "engine": "rtk", "intensity": "aggressive" },
{ "engine": "caveman", "intensity": "full" }
]
}
}
Yuqori oqim bilan sinxronlash siyosati
OmniRoute siqish dvigatellari README faylida bir nechta yuqori oqim loyihalarini eʼtirof etadi ("RTK, Caveman, LLMLingua-2, Troglodita loyihalaridan ilhomlangan"). Hissa qoʻshuvchilar tomonidan tez-tez beriladigan savol: yuqori oqimdagi RTK yangi vosita filtrini yoki Caveman yangi qoidalar toʻplamini qoʻshsa, bu OmniRouteʼga qanday yetib keladi? Ushbu boʻlim rasmiy javobdir.
Yetkazib beriladigan nusxalar va mustaqil implementatsiyalar
| Dvigatel | Yuqori oqimga munosabati | Joylashuvi |
|---|---|---|
| RTK | Mustaqil qayta implementatsiya (undan ilhomlangan, nusxa emas) | open-sse/services/compression/engines/rtk/ |
| Caveman | Mustaqil qayta implementatsiya (undan ilhomlangan) | open-sse/services/compression/engines/cavemanAdapter.ts |
| Headroom | Asosan ichki; faqat gcf/ kodeki gcf-typescript loyihasidan haqiqatan ham yetkazib beriladi (MIT, SPDX bilan belgilangan, faqat umumiy profil) |
open-sse/services/compression/engines/headroom/gcf/ |
| LLMLingua-2 / Troglodita | Ulardan ilhomlangan (llmlingua + session-dedup dvigatellariga asos boʻladi) |
open-sse/services/compression/engines/llmlingua/, session-dedup |
Asosiy jihat: RTK va Caveman — gʻoyalarning (filtrlash qoidalari, qoidalar toʻplamlari)
begona koddan xoli TypeScript implementatsiyalari boʻlib, yetkazib beriladigan manba kod daraxtlari emas. git pull
orqali olinadigan yuqori oqim nusxasi mavjud emas — README faylida aynan shu sababli
"toʻplamga kiritilgan" emas, balki "ilhomlangan" deb yozilgan.
Yuqori oqim yaxshilanishlari qanday birlashtiriladi
Ataylab yuqori oqim relizlarini avtomatik kuzatish ham, compression-sync
yorligʻi ham mavjud emas. Dvigatellar qayta implementatsiya qilingani sababli, yuqori oqimdagi RTK
filtri yoki Caveman qoidalar toʻplami kod sifatida birlashtirilmaydi; u OmniRouteʼning oʻz
formatida yangi qoida/filtr sifatida qayta ifodalanadi (
COMPRESSION_RULES_FORMAT.md fayliga qarang) va odatiy PR orqali
alohida tarzda kiritiladi. Yuqoridagi kengaytirish nuqtalari (maxsus dvigatel, til toʻplami, RTK filtri)
bunday hissa qoʻshishning tasdiqlangan usulidir.
Aynan shu jarayonning yaqindagi misollari:
- Gradle va
dotnetqurish chiqishi uchun RTK filtrlari (v3.8.42) - kubectl / docker-build / composer / gh uchun RTK filtrlari (#2824)
- Caveman uchun indonez tili toʻplami (#3975), shuningdek nemis / fransuz / yapon / xitoy tili toʻplamlari
Headroom (kirishni siqish proksisi)
Headroom toʻliq ichki — mahkamlangan va yetkazib beriladigan gcf kodek surati hamda
OmniRouteʼning oʻz smartcrusher / toon / tabular qatlamlaridan iborat. Yetkazib beriladigan nusxadan tashqari,
kuzatiladigan faol yuqori oqim mavjud emas; gcf yangilanishlari kodek oʻzgarganda
qoʻlda yangilanadi va siqish budjeti darvozasi (check:compression-budget) bilan
qayta tekshiriladi.
Yuqori oqimdan ilhomlangan yaxshilanishni taklif qilish
- Yetkazib beriladigan nusxa yaratmang — yuqori oqim qoida/filtrini OmniRoute formatida qayta ifodalang.
- Uni quyidagi mos kengaytirish nuqtasi orqali qoʻshing (til toʻplami, RTK filtri yoki maxsus dvigatel).
- PR tavsifida yuqori oqim loyihasiga havola bering (mualliflikni eʼtirof etish uchun), uning litsenziyaga ega manba kodini nusxalamang.
- Testlarni qoʻshing va
check:compression-budgetdarvozasidan oʻtish davom etayotganini tasdiqlang.
Chiqish uslubini qoʻshish
Chiqish uslublari (qoʻllanmadagi katalog jadvaliga qarang)
kirish mexanizmlarining javob tomonidagi muqobilidir: siz yuborgan maʼlumotni siqish oʻrniga,
ular modelga tejamkorroq chiqish yaratishni buyuradi. Reyestr
open-sse/services/compression/outputStyles/catalog.ts faylidagi OUTPUT_STYLE_CATALOG boʻlib,
katalogdagi bitta yozuv butun funksiyani tashkil qiladi: injektor, boshqaruv paneli sozlamalari,
saqlash va telemetriya katalogni sanab chiqadi — yangilanishi kerak boʻlgan boshqa roʻyxat yoʻq.
OUTPUT_STYLE_CATALOGga bitta yozuv qoʻshing:id,label,descriptionva ingliz tilidagi uchtalevels(lite,full,ultra) bilan. Kod, yoʻllar, buyruqlar, xatolar va URL manzillar aynan saqlanishi uchun har bir daraja${SHARED_BOUNDARIES}bilan tugashi kerak. Koʻrsatma matni har bir(id, level, language)uchun statik va deterministik boʻlishi shart — faqat${SHARED_BOUNDARIES}interpolatsiyasiga ruxsat beriladi.- Uni tarjima qiling.
i18nostida kamidapt-BRblokini taqdim eting;ponytailvai-have-adhd(en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi) namuna tuzilmalardir. Ataylab faqat bitta tilga moʻljallangan uslub buning oʻrnigalocaleni belgilaydi (terse-cjk→zhkabi) va shunda u faqat shu lokal uchun taklif etiladi. - Matritsa tekshiruvini yangilang — uslub tillarini
tests/unit/compression/output-styles-i18n-matrix.test.tsfaylidagiBASELINE_LANGUAGESga qoʻshing. Yangi, lokal bilan cheklanmagan uslub talab qilinadigan tarjimalarga ega boʻlmasa, yoki kuzatuv muammosi koʻrsatilgan aniqKNOWN_ENGLISH_ONLYyozuvini oʻz ichiga olmasa, tekshiruv muvaffaqiyatsiz yakunlanadi. - Har bir uslub uchun alohida test qoʻshing, bunda
tests/unit/compression/i-have-adhd-catalog.test.tsdan namuna sifatida foydalaning: katalog tuzilmasi, har bir darajadagi chegaralar bandi va har bir tarjima ingliz tilidan nusxalanmay, oʻz tilida yozilganini tasdiqlovchi tayanch tekshiruv. - Manbani koʻrsatish: agar uslub tashqi loyihadan moslashtirilgan boʻlsa, yozuvdagi manba
izohida unga havola bering (masalan,
i-have-adhd→ ayghri/i-have-adhd, MIT) — yuqoridagi “Tashqi loyihadan ilhomlangan takomillashtirishni taklif qilish” qoidasi bilan bir xil.
UI, sxema yoki telemetriyani oʻzgartirish shart emas — bu qismlar katalog asosida render qilinadi.
Eng yaxshi amaliyotlar
Mexanizm ishlab chiqish
- Har doim
validateConfigni amalga oshiring — validatsiyasiz mexanizmlar yashirin nosozliklarga olib keladi - Haqiqiy
targetLatencyMsqiymatini belgilang — undan strategiya selektori mexanizmlarni tanlashda foydalanadi - Boshqaruv paneli uchun
getConfigSchemadan foydalaning — konfiguratsiyani hech qachon foydalanuvchilardan yashirmang - Mexanizmingiz sof boʻlsa,
stackable: trueni qoʻllab-quvvatlang — yon taʼsirga ega mexanizmlar ketma-ket qoʻllanmasligi kerak - Ichki testlarni yozing — mexanizmlarni <1s ichida tekshirish mumkin boʻlishi kerak
Til paketini ishlab chiqish
liteintensivligidan boshlang — qoidalaringiz eng past sozlamada xavfsiz boʻlishi kerak- Qoidalar koʻlamini belgilash uchun
contextdan foydalaning — faqatuserga tegishli qoidalar tasodifan tizim promptlariga taʼsir qila olmaydi - JSON kalitlarini qamrab olishdan saqlaning —
\\bword\\bJSON ichida mos kelib, tuzilmaviy maʼlumotlarni buzishi mumkin - Chekka holatlar bilan sinang — boʻsh kirish, unicode, RTL matn, emojilar
- Mavjud paketlardan shablon sifatida foydalaning —
en/filler.jsoneng mukammal ishlab chiqilgan misoldir
Konveyerni loyihalash
- Optimallashtirishdan oldin profillang — avval
compression_statsyordamida oʻlchang - Qayta amalga oshirishdan koʻra kompozitsiyani afzal koʻring — yangi mexanizm yozishdan oldin Caveman qoidalarini kengaytiring
- Tartib sababini hujjatlashtiring — nima uchun A mexanizmi B mexanizmidan oldin kelishini izohlang
- Barcha 3 intensivlik darajasida sinang —
litetez, ammo yoʻqotishli;ultrasekin, ammo aniq
Maʼlumotnoma: ichki dvigatellar
| Dvigatel ID-si | Birlashtiriladi | Standart stackPriority | Moʻljallar |
|---|---|---|---|
lite |
Ha | 5 | xabarlar, vosita_natijalari |
rtk |
Ha | 10 | vosita_natijalari |
standard (caveman) |
Ha | 20 | xabarlar, vosita_natijalari, kod_bloklari |
aggressive |
Ha | 30 | xabarlar |
ultra |
Ha | 40 | xabarlar, kod_bloklari |
Shuningdek qarang
- COMPRESSION_GUIDE.md — Konveyer haqida umumiy maʼlumot
- COMPRESSION_ENGINES.md — Dvigatellar reyestri maʼlumotnomasi
- COMPRESSION_RULES_FORMAT.md — Qoidalar formati spetsifikatsiyasi
- COMPRESSION_LANGUAGE_PACKS.md — Til paketlari tafsilotlari
- RTK_COMPRESSION.md — RTK dvigateli va maxsus filtrlar
- Manba:
open-sse/services/compression/(117 ta fayl, ~250KB)