Files
OmniRoute/docs/i18n/uz/docs/compression/EXTENDING_COMPRESSION.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

37 KiB
Raw Blame History

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:


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 boyicha ajrating va ularning ichidagi bosh joylarni saqlang
  const parts = text.split(/(```[\s\S]*?```)/);
  return parts
    .map((part) => {
      if (part.startsWith("```")) {
        return part; // Kod bloklarini ozgartirmang
      }
      return part.replace(/\n{3,}/g, "\n\n"); // Faqat oddiy matnga qollang
    })
    .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/rtkdan 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 korib chiqing — ham satrli, ham kop 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 };
      }
      // Kop qismli kontent: qismlarni korib 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 royxatdan otkazing
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 SDKsi onRequest / onResponse / onError ilgaklarini taqdim etadi. Mexanizmni
  // plagin moduli yuklanganda (yoki birinchi onRequestda) royxatdan otkazing; uni
  // ozingizning yakunlash jarayoningizda royxatdan chiqaring.
  onRequest: async (ctx) => {
    registerCompressionEngine(myEngine);
  },
});

// Yakunlash vaqtida:
// unregisterCompressionEngine("my-engine");

Mexanizmingizni sinash

Mexanizmingizni plagin yoki ishga tushirish funksiyasida royxatdan otkazing. Royxatdan otkazilgach, mexanizm strategiya tanlagichida ozining id qiymati orqali mavjud boladi. 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 korinishga ega (open-sse/services/compression/ruleLoader.ts faylidan):

interface FileRule {
  name: string; // Inson oqishi 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 bolsa, otkazib yuborish
  description?: string; // Hujjatlar
}

Misol: hind tili uchun ortiqcha iboralar qoidalarini qoshish

{
  "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 notogri bolgan paket yuklanmaydi va xato jurnalga yoziladi:

RULE_LOADER: "hi/filler.json" paketi tekshiruvdan otmadi:
  - rules.0.pattern: Notogri regex
  - rules.1.context: [all, user, system, assistant] qiymatlaridan biri bolishi 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 yolini 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

  1. filler bilan boshlang — bular eng katta tasirga ega qoidalardir
  2. Agressiv qoidalarni cheklash uchun minIntensitydan foydalaning — bu haddan tashqari siqishdan himoya qiladi
  3. Sinov holatlarini kiriting — xatti-harakatni tekshirish uchun JSON fayliga tests[] massivini qoshing
  4. Tartib muhim — oldingi qoidalar birinchi bolib qollanadi; katta tasirga ega qoidalarni boshiga joylashtiring
  5. replacementdan ehtiyotkorlik bilan foydalaning — odatda bosh satr togri tanlovdir; hech qachon yangi kontent kiritmang

Tarjima strategiyasi

Qoida paketlarini yangi tilga moslashtirishda:

  1. Qoida nomlarini tarjima qiling — ular nosozliklarni tuzatish chiqishida korinadi
  2. Regex andozalarini moslashtiring — togridan-togri tarjima kopincha ishlamaydi (soz chegaralari farq qiladi)
  3. Haqiqiy suhbatlarda sinab koring — paket haqiqiy kirish malumotlarida xavfsiz ishlashi kerak
  4. Madaniy meyorlarga moslashtiring — masalan, yapon tili paketlarida ingliz tilidagiga qaraganda hurmat ifodalovchi ortiqcha iboralar koproq

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 korsatilgan 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 sorov uchun BITTA rejimni tanlaydi. Mavjud rejimlar open-sse/services/compression/types.ts faylida (CompressionMode turi) belgilangan:

Rejim Mexanizmlar Qollanish holati
off Yoq Barcha siqishni ochirish
rtk Faqat RTK Buyruq chiqishi kop bolgan 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 otish
ultra Ultra Maksimal siqish (yoqotishli, eng songgi chora). ultra.modelPath ornatilganda, ixtiyoriy ravishda LLMLingua-2 SLM mexanizmi orqali yonaltiriladi (model mavjud bolmasa, qoidalarga asoslangan yolga xatosiz qaytadi).
stacked Maxsus konveyer Mexanizmlarni istalgan tartibda birlashtirish (quyiga qarang)

Yuqoridagi rejim mexanizmlaridan tashqari, reyestr tarkibida ketma-ket qollash mumkin bolgan 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:

  1. Agar siqish ochirilgan bolsa: "off"
  2. Agar kombinatsiya uchun qayta belgilash mavjud bolsa: qayta belgilangan qiymatdan foydalanish
  3. Agar avtomatik ishga tushirish chegarasidan oshilsa: autoTriggerModedan foydalanish (standart qiymat: "lite")
  4. Aks holda: defaultModedan foydalanish

Standart ketma-ket konveyer

mode: "stacked" aniq sozlanganda, standart konveyer quyidagilarni birlashtiradi:

  1. RTK — buyruq chiqishidagi shovqinni olib tashlash (terminal chiqishida ~80% tejash)
  2. Caveman — ortiqcha sozlarni olib tashlash, nasriy matnni ixchamlashtirish (qolgan matnda ~46%)
  3. Lite — bosh 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 qoshishingiz yoki ularning tartibini ozgartirishingiz mumkin.

Holatni uzatish

Mexanizmlar sorov kontekstidagi (options ichidagi) metamalumotlarni oqishi mumkin:

compress(body, config) {
  // Oldingi mexanizmlardan metamalumotlarni oqish
  const original = options?.compressionComboId;  // "my-coding-combo"
  // ...
}

Metamalumotlar faqat oqish uchun — mexanizmlar sorov kontekstini ozgartira olmaydi, faqat oz tanasi chiqishini ozgartirishi mumkin.

Bajarilish tartibining nozik jihatlari

Mexanizmlar tartibi Tasiri
RTK → Caveman → Lite Tavsiya etiladi (avval shovqinni, keyin tilga oid ortiqchaliklarni, song bosh joylarni tozalaydi)
Lite → RTK → Caveman Yomon — Lite xom chiqishdagi bosh 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 qollamaslik kerak

Ketma-ket qollash har doim ham yaxshiroq emas:

  • Oddiy xabarlar (vosita chiqishi yoq) — bitta Caveman yoki Lite yetarli
  • Xarajatga sezgir holatlar — har bir mexanizm ~5-50ms kechikish qoshadi
  • Muayyan vositalar — qobiq chiqishi uchun odatda RTKning ozi 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 dotnet qurish 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

  1. Yetkazib beriladigan nusxa yaratmang — yuqori oqim qoida/filtrini OmniRoute formatida qayta ifodalang.
  2. Uni quyidagi mos kengaytirish nuqtasi orqali qoʻshing (til toʻplami, RTK filtri yoki maxsus dvigatel).
  3. PR tavsifida yuqori oqim loyihasiga havola bering (mualliflikni eʼtirof etish uchun), uning litsenziyaga ega manba kodini nusxalamang.
  4. Testlarni qoʻshing va check:compression-budget darvozasidan 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.

  1. OUTPUT_STYLE_CATALOGga bitta yozuv qoʻshing: id, label, description va ingliz tilidagi uchta levels (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.
  2. Uni tarjima qiling. i18n ostida kamida pt-BR blokini taqdim eting; ponytail va i-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ʻrniga localeni belgilaydi (terse-cjkzh kabi) va shunda u faqat shu lokal uchun taklif etiladi.
  3. Matritsa tekshiruvini yangilang — uslub tillarini tests/unit/compression/output-styles-i18n-matrix.test.ts faylidagi BASELINE_LANGUAGESga qoʻshing. Yangi, lokal bilan cheklanmagan uslub talab qilinadigan tarjimalarga ega boʻlmasa, yoki kuzatuv muammosi koʻrsatilgan aniq KNOWN_ENGLISH_ONLY yozuvini oʻz ichiga olmasa, tekshiruv muvaffaqiyatsiz yakunlanadi.
  4. 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.
  5. 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

  1. Har doim validateConfigni amalga oshiring — validatsiyasiz mexanizmlar yashirin nosozliklarga olib keladi
  2. Haqiqiy targetLatencyMs qiymatini belgilang — undan strategiya selektori mexanizmlarni tanlashda foydalanadi
  3. Boshqaruv paneli uchun getConfigSchemadan foydalaning — konfiguratsiyani hech qachon foydalanuvchilardan yashirmang
  4. Mexanizmingiz sof boʻlsa, stackable: trueni qoʻllab-quvvatlang — yon taʼsirga ega mexanizmlar ketma-ket qoʻllanmasligi kerak
  5. Ichki testlarni yozing — mexanizmlarni <1s ichida tekshirish mumkin boʻlishi kerak

Til paketini ishlab chiqish

  1. lite intensivligidan boshlang — qoidalaringiz eng past sozlamada xavfsiz boʻlishi kerak
  2. Qoidalar koʻlamini belgilash uchun contextdan foydalaning — faqat userga tegishli qoidalar tasodifan tizim promptlariga taʼsir qila olmaydi
  3. JSON kalitlarini qamrab olishdan saqlaning\\bword\\b JSON ichida mos kelib, tuzilmaviy maʼlumotlarni buzishi mumkin
  4. Chekka holatlar bilan sinang — boʻsh kirish, unicode, RTL matn, emojilar
  5. Mavjud paketlardan shablon sifatida foydalaningen/filler.json eng mukammal ishlab chiqilgan misoldir

Konveyerni loyihalash

  1. Optimallashtirishdan oldin profillang — avval compression_stats yordamida oʻlchang
  2. Qayta amalga oshirishdan koʻra kompozitsiyani afzal koʻring — yangi mexanizm yozishdan oldin Caveman qoidalarini kengaytiring
  3. Tartib sababini hujjatlashtiring — nima uchun A mexanizmi B mexanizmidan oldin kelishini izohlang
  4. Barcha 3 intensivlik darajasida sinanglite tez, ammo yoʻqotishli; ultra sekin, 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