Files
OmniRoute/docs/i18n/am/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

42 KiB

Extending the Compression Pipeline (አማርኛ)

🌐 Languages: 🇺🇸 English · 🇸🇦 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 · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


በአጭሩ: የOmniRoute የማመቅ ሞተር ሊሰካ የሚችል ነው — ብጁ ሞተሮችን መመዝገብ፣ ለአዳዲስ ቋንቋዎች የቋንቋ ጥቅሎችን ማቅረብ እና የተደራረቡ የሂደት መስመሮችን ማቀናጀት ይችላሉ። ይህ መመሪያ እንዴት እንደሚደረግ ያሳያል።

ተዛማጅ መመሪያዎች፦


አጠቃላይ እይታ

የማመቅ ስርዓቱ 3 የማስፋፊያ ነጥቦች አሉት፦

የማስፋፊያ ነጥብ የአጠቃቀም ሁኔታ የአስቸጋሪነት ደረጃ
ብጁ ሞተር ሙሉ በሙሉ አዲስ የማመቅ አልጎሪዝም ማከል (ለምሳሌ፣ ለተወሰነ ዘርፍ የተዘጋጀ ማጠቃለያ ሰጪ) ከፍተኛ
የቋንቋ ጥቅል ለአዲስ የተፈጥሮ ቋንቋ ድጋፍ ማከል (ለምሳሌ፣ ሂንዲ፣ ዓረብኛ) መካከለኛ
የተደራረበ የሂደት መስመር ነባር ሞተሮችን በብጁ ቅደም ተከተል ማቀናጀት ጀማሪ
┌─────────────────────────────────────────────────────────────┐
│                    የማመቅ ስትራቴጂ                           │
│                                                              │
│   የግቤት መልዕክቶች ──▶ getEffectiveMode() ──▶ mode          │
│                                              │               │
│                      ┌───────────────────────┼──────────┐    │
│                      │         │         │         │    │    │
│                      ▼         ▼         ▼         ▼    │    │
│                   "rtk"    "lite"   "standard" "stacked"    │
│                      │         │         │         │    │    │
│                      ▼         ▼         ▼         ▼    │    │
│                   RTK       Lite     Caveman   engines[]   │
│                   ሞተር      ሞተር      ሞተር      በሰንሰለት   │
│                      │         │         │         │    │    │
│                      └─────────┴─────────┴─────────┘    │    │
│                                      │                    │
│                                      ▼                    │
│                              የታመቀ ውጤት                   │
└─────────────────────────────────────────────────────────────┘

የስትራቴጂው መራጭ በMODE ላይ የተመሰረተ ነው፦ እያንዳንዱ ጥያቄ አንድ mode ይመርጣል
(rtk / lite / standard / aggressive / ultra / stacked / off)።
ብዙ ሞተሮችን በቅደም ተከተል የሚያገናኘው "stacked" mode ብቻ ነው።
ነባሪው በራስ-ሰር የሚጀምር mode "lite" ነው (ባለ3-ደረጃ የቅድሚያ ሰንሰለት አይደለም)።

ብጁ የማመቅ ሞተር መጻፍ

የሞተሩ በይነገጽ (open-sse/services/compression/engines/types.ts) እያንዳንዱ ሞተር ሊያሟላው የሚገባ ውል ነው። 5 አስፈላጊ ሜቶዶች አሉት።

CompressionEngine በይነገጽ

interface CompressionEngine {
  id: string; // ልዩ የሞተር ID
  name: string; // የማሳያ ስም
  description: string; // አጭር መግለጫ
  icon: string; // አዶ (ኢሞጂ ወይም URL)
  targets: CompressionEngineTarget[]; // ["messages", "tool_results", "code_blocks"]
  stackable: boolean; // በተደራረበ የሂደት መስመር ውስጥ መጠቀም ይቻላል
  stackPriority: number; // በተደራረቡ የሂደት መስመሮች ውስጥ ያለው ቅደም ተከተል (ዝቅተኛ = ቀደም ያለ)
  metadata: CompressionEngineMetadata;

  apply(body, options?): CompressionResult;
  compress(body, config?): CompressionResult;
  getConfigSchema(): EngineConfigField[];
  validateConfig(config): EngineValidationResult;
}

አነስተኛ ምሳሌ፦ የነጭ ቦታ ሞተር

በጣም ቀላሉ ሞተር — ከመልዕክቶች ውስጥ ተጨማሪ ነጭ ቦታን ያስወግዳል።

import type { CompressionEngine } from "omniroute/compression/engines/types";
import { registerCompressionEngine } from "omniroute/compression/engines/registry";

function preserveCodeBlocks(text: string): string {
  // በኮድ ብሎክ ምልክቶች ይከፋፍሉ እና በውስጣቸው ያለውን ክፍተት ይጠብቁ
  const parts = text.split(/(```[\s\S]*?```)/);
  return parts
    .map((part) => {
      if (part.startsWith("```")) {
        return part; // የኮድ ብሎኮችን አያሻሽሉ
      }
      return part.replace(/\n{3,}/g, "\n\n"); // በጽሑፍ ላይ ብቻ ይተግብሩ
    })
    .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 በኋላ ያሂዱ

  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;

    // የመልዕክቶችን ድርድር ያቋርጡ — ሕብረቁምፊ እና ባለብዙ ክፍል ይዘትን ይያዙ
    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 };
      }
      // ባለብዙ ክፍል ይዘት፦ ክፍሎቹን ያቋርጡ፣ የጽሑፍ ክፍሎችን ብቻ ይጨምቁ
      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፣ ወዘተ ይጠብቁ።
        });
        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: [] };
  },
};

// በዓለም አቀፍ ደረጃ ይመዝገቡ
registerCompressionEngine(whitespaceEngine);

ብጁ ሞተሮችን የሚያስቀምጡበት ቦታ

~/.omniroute/compression/engines/my-engine.ts    # የተጠቃሚ ደረጃ
<project>/compression-engines/my-engine.ts        # የፕሮጀክት ደረጃ (ሲጀመር የሚጫን)

ወይም ከፕለጊን በፕሮግራም ይጫኑ፦

// በፕለጊንዎ ውስጥ
import {
  registerCompressionEngine,
  unregisterCompressionEngine,
} from "@omniroute/open-sse/services/compression/engines/registry";
import { myEngine } from "./engines/my-engine";

export default definePlugin({
  name: "my-compression-plugin",
  // የፕለጊኑ SDK የonRequest / onResponse / onError ማያያዣዎችን ያቀርባል።
  // የፕለጊኑ ሞጁል ሲጫን (ወይም በመጀመሪያው onRequest) ሞተሩን ይመዝግቡ፤
  // ከራስዎ የማፍረሻ መንገድ ደግሞ ምዝገባውን ይሰርዙ።
  onRequest: async (ctx) => {
    registerCompressionEngine(myEngine);
  },
});

// በማፍረስ ጊዜ፦
// unregisterCompressionEngine("my-engine");

ሞተርዎን መፈተሽ

ሞተርዎን በፕለጊን ወይም በማስጀመሪያ ፋንክሽን ውስጥ ይመዝግቡ። አንዴ ከተመዘገበ፣ ሞተሩ በid አማካኝነት በስትራቴጂ መምረጫው ውስጥ ይገኛል። በተደራራቢ የማስኬጃ መስመር ውስጥ በማቀናበር ውህደቱን ይፈትሹ፦


የቋንቋ ጥቅሎችን መፍጠር

የCaveman ቅጥ መጭመቅ በእያንዳንዱ ተፈጥሯዊ ቋንቋ ውስጥ ሙሌት ቃላትን፣ አሻሚ አገላለጾችን እና ረዥም የአጻጻፍ ንድፎችን ለመቆጣጠር ለቋንቋው የተወሰኑ የደንብ ጥቅሎችን ይጠቀማል። OmniRoute ከ6 የቋንቋ ጥቅሎች ጋር ይቀርባል፦ enesfrdejapt-BR

የጥቅል መዋቅር

የቋንቋ ጥቅል በopen-sse/services/compression/rules/<language>/ ስር ያሉ JSON ፋይሎች ማውጫ ነው፦

open-sse/services/compression/rules/
├── en/
│   ├── filler.json          # ሰላምታዎች፣ አሻሚ አገላለጾች፣ ጨዋነት
│   ├── context.json         # ዐውድን የሚቀንሱ ደንቦች
│   ├── dedup.json           # ብዜትን የማስወገድ ደንቦች
│   ├── structural.json      # ሥርዓተ ነጥብ፣ ቅርጸት
│   └── ultra.json           # ኃይለኛ የመጭመቅ ደንቦች
├── es/  (ተመሳሳይ መዋቅር)
├── fr/  (ተመሳሳይ መዋቅር)
├── de/  (ተመሳሳይ መዋቅር)
├── ja/  (ተመሳሳይ መዋቅር)
└── pt-BR/ (ተመሳሳይ መዋቅር)

የደንብ አወቃቀር

እያንዳንዱ ደንብ ይህን ቅርጽ አለው (ከopen-sse/services/compression/ruleLoader.ts)፦

interface FileRule {
  name: string; // ለሰው የሚነበብ ስም (kebab-case)
  pattern: string; // JavaScript regex ንድፍ
  replacement?: string; // ተዛማጁ የሚተካበት ይዘት
  replacementMap?: Record<string, string>; // ወይም የቁልፍ→ምትክ ካርታ
  flags?: string; // Regex ሰንደቆች (በተለምዶ "gi")
  context?: "all" | "user" | "system" | "assistant";
  category?: "filler" | "context" | "structural" | "dedup" | "terse" | "ultra";
  minIntensity?: "lite" | "full" | "ultra"; // ከዚህ የጥንካሬ ደረጃ በታች ከሆነ ዝለል
  description?: string; // ሰነድ
}

ምሳሌ፦ የሂንዲ ሙሌት ደንቦችን መጨመር

{
  "language": "hi",
  "category": "filler",
  "rules": [
    {
      "name": "polite_opener",
      "pattern": "\\b(?:नमस्ते|नमस्कार|आदरणीय)\\b[,!\\s]*",
      "replacement": "",
      "context": "all",
      "category": "filler",
      "minIntensity": "lite",
      "description": "እንደ 'नमस्ते' ያሉ የጨዋነት መክፈቻዎችን አስወግድ"
    },
    {
      "name": "filler_actually",
      "pattern": "\\b(?:असल में|वास्तव में|दरअसल)\\b\\s*",
      "replacement": "",
      "context": "all",
      "category": "filler",
      "minIntensity": "lite",
      "description": "የ'actually' ሙሌት ቃላትን አስወግድ"
    },
    {
      "name": "verbose_plea",
      "pattern": "\\b(?:कृपया|कृपया आप|अनुरोध है कि आप)\\b\\s*",
      "replacement": "",
      "context": "all",
      "category": "filler",
      "minIntensity": "full",
      "description": "በሂንዲ ውስጥ 'please'ን አስወግድ"
    }
  ]
}

ማረጋገጫ

የደንብ ጥቅሎች በሚጫኑበት ጊዜ ከ_schema.json ጋር ይረጋገጣሉ። የተሳሳተ መዋቅር ያለው ጥቅል መጫን ይሳነዋል እና ስህተት ይመዘገባል፦

RULE_LOADER: የ"hi/filler.json" ጥቅል ማረጋገጫው አልተሳካም፦
  - rules.0.pattern: ልክ ያልሆነ regex
  - rules.1.context: ከ[all, user, system, assistant] አንዱ መሆን አለበት

ማረጋገጫው ጥቅል ሲጫን (ከ_schema.json ጋር) በራስ-ሰር ይከናወናል፤ ልክ ያልሆነ ጥቅል ውድቅ ይደረጋል እና ከላይ ያለው ስህተት ይመዘገባል። ለጥቅል ማረጋገጫ የተለየ npm run ስክሪፕት የለም—ጥቅሉን ይጫኑ (ለምሳሌ፣ ሰርቨሩን ያስጀምሩ ወይም የመጭመቂያ መንገዱን ያስኬዱ) እና መዝገቦቹን ይከታተሉ።

ብጁ የቋንቋ ጥቅል መጫን

import { loadRulePack } from "omniroute/compression/ruleLoader";

await loadRulePack("./my-custom-rules/hi/filler.json");

ወይም ዕውቅና ባለው ቦታ ያስቀምጡት፦

~/.omniroute/compression/rules/hi/filler.json  # የተጠቃሚ ደረጃ
<project>/.compression/rules/hi/filler.json   # የፕሮጀክት ደረጃ

ለቋንቋ ጥቅሎች ምርጥ ልምዶች

  1. filler ይጀምሩ—እነዚህ ከፍተኛው ተፅዕኖ ያላቸው ደንቦች ናቸው
  2. ኃይለኛ ደንቦችን ለመገደብ minIntensityን ይጠቀሙ—ከመጠን በላይ መጭመቅን ይከላከላል
  3. የሙከራ ኬዞችን ያካትቱ—ባህሪውን ለማረጋገጥ በJSON ውስጥ tests[] ድርድር ይጨምሩ
  4. ቅደም ተከተል አስፈላጊ ነው—ቀደም ያሉ ደንቦች መጀመሪያ ይተገበራሉ፤ ከፍተኛ ተፅዕኖ ያላቸውን ደንቦች መጀመሪያ ያስቀምጡ
  5. replacementን በጥንቃቄ ይጠቀሙ—ባዶ ሕብረቁምፊ በአብዛኛው ትክክለኛ ነው፤ በፍጹም አዲስ ይዘት አያስገቡ

የትርጉም ስትራቴጂ

የደንብ ጥቅሎችን ለአዲስ ቋንቋ ሲያካባቢያዊ ያደርጉ፦

  1. የደንብ ስሞቹን ይተርጉሙ—በdebug ውጤት ውስጥ ይታያሉ
  2. የregex ንድፎቹን ያስማሙ—ቀጥተኛ ትርጉም ብዙ ጊዜ አይሰራም (የቃላት ወሰኖች ይለያያሉ)
  3. በእውነተኛ ውይይቶች ይፈትኑ—ጥቅሉ በተጨባጭ ግብዓት ላይ ደህንነቱ የተጠበቀ መሆን አለበት
  4. ከባህላዊ ልማዶች ጋር ያዛምዱ—ለምሳሌ፣ የጃፓንኛ ጥቅሎች ከእንግሊዝኛ የበለጠ የክብር መግለጫ ሙሌቶች አሏቸው

የተደራረቡ ፓይፕላይኖች

የተደራረበ ፓይፕላይን በርካታ ኤንጂኖችን በቅደም ተከተል ያስኬዳል፤ የእያንዳንዱ ኤንጂን ውጤትም ለቀጣዩ ግብዓት ይሆናል። mode: stacked በውስጣዊ አሠራሩ የሚሰራው በዚህ መንገድ ነው።

መደራረብ እንዴት እንደሚሰራ

ግብዓት (10,000 ቶከኖች)
        │
        ▼
   ┌──────────┐
   │  ኤንጂን   │  ቅድሚያ 10
   │  A       │  ──▶ ውጤት: 6,000 ቶከኖች (-40%)
   └────┬─────┘
        ▼
   ┌──────────┐
   │  ኤንጂን   │  ቅድሚያ 50
   │  B       │  ──▶ ውጤት: 2,400 ቶከኖች (-60%)
   └────┬─────┘
        ▼
   ┌──────────┐
   │  ኤንጂን   │  ቅድሚያ 100
   │  C       │  ──▶ ውጤት: 1,200 ቶከኖች (-80%)
   └────┬─────┘
        │
        ▼
የመጨረሻ ውጤት (1,200 ቶከኖች፣ በድምሩ ~88% ቁጠባ)

mode: "stacked" ሲመረጥ፣ ኤንጂኖቹ በpipeline ድርድር ውስጥ በተገለጸው ቅደም ተከተል አንድ በአንድ ይፈጸማሉ። የኤንጂን N ውጤት የኤንጂን N+1 ግብዓት ይሆናል።

የመጭመቂያ ሁነታዎች

OmniRoute በውቅር፣ ራስ-ሰር ማስጀመሪያ ገደቦች እና የጥምር ለውጦች መሠረት ለእያንዳንዱ ጥያቄ አንድ ሁነታ ይመርጣል። የሚገኙት ሁነታዎች በopen-sse/services/compression/types.ts (CompressionMode ዓይነት) ውስጥ ተገልጸዋል፦

ሁነታ ኤንጂኖች የአጠቃቀም ሁኔታ
off ምንም ሁሉንም መጭመቅ ያሰናክሉ
rtk RTK ብቻ የትዕዛዝ ውጤት የበዛባቸው ክፍለ ጊዜዎች (80%+ ቁጠባ)
lite Lite ብቻ ጥንቃቄ የተሞላበት መጭመቅ (ፈጣን፣ አስተማማኝ)
standard Caveman ከቋንቋ ጥቅሎች ጋር የጽሑፍ መጭመቅ
aggressive Caveman + Aggressive ከፍተኛ የጽሑፍ መጭመቅ + ከፍተኛ የመጨረሻ ዙር
ultra Ultra ከፍተኛው መጭመቅ (መረጃ ሊያጠፋ የሚችል፣ እንደ የመጨረሻ አማራጭ)። ultra.modelPath ሲዋቀር፣ እንደ አማራጭ በLLMLingua-2 SLM ኤንጂን በኩል ይመራል (ሞዴሉ ከሌለ ወደ በደንብ-ላይ-የተመሠረተው መንገድ ይመለሳል)።
stacked ብጁ ፓይፕላይን ኤንጂኖችን በማንኛውም ቅደም ተከተል ያቀናብሩ (ከታች ይመልከቱ)

ከላይ ከተጠቀሱት የሁነታ ኤንጂኖች በተጨማሪ፣ መዝገቡ ሊደራረቡ የሚችሉ ልዩ ኤንጂኖችንም ያካትታል — CCRheadroomionizer እና session-dedup — እነዚህም በ COMPRESSION_ENGINES.md ውስጥ ተመዝግበዋል።

የሁነታ ምርጫ የሚወሰነው በopen-sse/services/compression/strategySelector.ts ውስጥ ባለው getEffectiveMode() ነው፦

  1. መጭመቅ ከተሰናከለ፦ "off"
  2. የጥምር ለውጥ ካለ፦ ለውጡን ይጠቀሙ
  3. የራስ-ሰር ማስጀመሪያ ገደብ ከታለፈ፦ autoTriggerModeን ይጠቀሙ (ነባሪ፦ "lite")
  4. ካልሆነ፦ defaultModeን ይጠቀሙ

ነባሪው የተደራረበ ፓይፕላይን

mode: "stacked" በግልጽ ሲዋቀር፣ ነባሪው ፓይፕላይን የሚከተሉትን ያቀናብራል፦

  1. RTK — የትዕዛዝ ውጤት ጫጫታን ያስወግዳል (በተርሚናል ውጤት ላይ ~80% ቁጠባ)
  2. Caveman — አላስፈላጊ ቃላትን ያስወግዳል፣ ጽሑፉን አጭር ያደርጋል (ከቀረው ጽሑፍ ~46%)
  3. Lite — የመጨረሻ ነጭ ቦታ + ድግግሞሽ ማስወገጃ ዙር

ይህ ጥምረት ብዙ መሣሪያዎች በሚጠቀሙ ክፍለ ጊዜዎች ላይ 78-95% ቁጠባ ያስገኛል።

የተደራረቡ ፓይፕላይኖችን ማዋቀር

በጥምር ውቅር ውስጥ፦

{
  "compression": {
    "mode": "stacked",
    "pipeline": [
      { "engine": "rtk", "config": { "intensity": "aggressive" } },
      { "engine": "caveman", "config": { "intensity": "full" } },
      { "engine": "lite", "config": {} }
    ]
  }
}

ኤንጂኖችን መተው፣ ብጁ ኤንጂኖችን ማከል ወይም ቅደም ተከተላቸውን መለወጥ ይችላሉ።

ሁኔታን ማስተላለፍ

ኤንጂኖች ከጥያቄው አውድ (በoptions ውስጥ) ሜታዳታን ማንበብ ይችላሉ፦

compress(body, config) {
  // ከቀደሙት ኤንጂኖች ሜታዳታን ያንብቡ
  const original = options?.compressionComboId;  // "my-coding-combo"
  // ...
}

ሜታዳታው ለንባብ ብቻ ነው — ኤንጂኖች የጥያቄውን አውድ መቀየር አይችሉም፤ የራሳቸውን የይዘት ውጤት ብቻ መቀየር ይችላሉ።

የአፈጻጸም ቅደም ተከተል ላይ ሊያጋጥሙ የሚችሉ ችግሮች

የኤንጂን ቅደም ተከተል ውጤት
RTK → Caveman → Lite የሚመከር (በመጀመሪያ ጫጫታን፣ ቀጥሎ ቋንቋን፣ ከዚያም ነጭ ቦታን ያስወግዳል)
Lite → RTK → Caveman መጥፎ — Lite ከጥሬ ውጤት ነጭ ቦታን ስለሚያስወግድ የRTK የስርዓተ-ጥለት ማዛመድ እንዳይሰራ ያደርጋል
Caveman → RTK መጥፎ — Caveman ጽሑፉን RTK ሊያውቀው በማይችልበት መንገድ እንደገና ሊጽፈው ይችላል
tool_results በመጀመሪያ ያለበት ማንኛውም ቅደም ተከተል የተሻለ — የመሣሪያ ውጤት ከሁሉም የበለጠ ጫጫታ ያለው ይዘት ነው

መቼ መደራረብ እንደሌለበት

መደራረብ ሁልጊዜ የተሻለ አይደለም፦

  • ቀላል መልዕክቶች (የመሣሪያ ውጤት የሌላቸው) — Caveman ወይም Lite ብቻ በቂ ነው
  • ወጪን የሚያስቀድሙ — እያንዳንዱ ኤንጂን ~5-50ms መዘግየት ይጨምራል
  • የተወሰኑ መሣሪያዎች — ለሼል ውጤት ብዙውን ጊዜ RTK ብቻ በቂ ነው

ብጁ ፓይፕላይን መገንባት

የተሰየመ የpipeline መዝገብ የለም። stacked pipeline ማለት ለapplyStackedCompression() (ከ@omniroute/open-sse/services/compression/strategySelector የሚላክ) የሚተላለፍ inline የደረጃዎች array ብቻ ነው፦

import { applyStackedCompression } from "@omniroute/open-sse/services/compression/strategySelector";

const result = applyStackedCompression(body, [
  { engine: "rtk", intensity: "aggressive" },
  { engine: "caveman", intensity: "full" },
]);

pipeline ካላስተላለፉ፣ በነባሪ rtk(standard) → caveman(full) ይጠቀማል።

ከውቅር ለመቆጣጠር፣ mode: "stacked" ያዘጋጁ እና የደረጃዎቹን array በstackedPipeline ስር ያቅርቡ (ከconfig.stackedPipeline ይነበባል)፦

{
  "compression": {
    "mode": "stacked",
    "stackedPipeline": [
      { "engine": "rtk", "intensity": "aggressive" },
      { "engine": "caveman", "intensity": "full" }
    ]
  }
}

የዋና ምንጭ ማመሳሰል ፖሊሲ

የOmniRoute ማመቂያ ሞተሮች README ውስጥ ለበርካታ የዋና ምንጭ ፕሮጀክቶች ዕውቅና ይሰጣሉ ("በRTK፣ Caveman፣ LLMLingua-2፣ Troglodita የተነሳሳ")። አበርካቾች በተደጋጋሚ የሚጠይቁት ጥያቄ፦ ዋናው RTK አዲስ የመሣሪያ ማጣሪያ ሲጨምር ወይም Caveman የደንብ ጥቅል ሲጨምር፣ ያ ወደ OmniRoute እንዴት ይደርሳል? ይህ ክፍል በጉዳዩ ላይ ሥልጣን ያለው መልስ ነው።

በፕሮጀክቱ ውስጥ የተካተቱ ቅጂዎች ከገለልተኛ ትግበራዎች ጋር ሲነጻጸሩ

ሞተር ከዋናው ምንጭ ጋር ያለው ግንኙነት አካባቢ
RTK ገለልተኛ ዳግም ትግበራ (በእሱ የተነሳሳ እንጂ ቅጂ አይደለም) open-sse/services/compression/engines/rtk/
Caveman ገለልተኛ ዳግም ትግበራ (በእሱ የተነሳሳ) open-sse/services/compression/engines/cavemanAdapter.ts
Headroom በአብዛኛው ውስጣዊ ነው፤ ከgcf-typescript በእውነት የተካተተውgcf/ ኮዴክ ብቻ ነው (MIT፣ SPDX ምልክት የተደረገበት፣ አጠቃላይ መገለጫ ብቻ) open-sse/services/compression/engines/headroom/gcf/
LLMLingua-2 / Troglodita በእነሱ የተነሳሳ (የllmlingua + session-dedup ሞተሮችን ያንቀሳቅሳሉ) open-sse/services/compression/engines/llmlingua/, session-dedup

ዋናው ነጥብ፦ RTK እና Caveman የ_ሐሳቦቹ_ (የማጣሪያ ደንቦች፣ የደንብ ጥቅሎች) ከባዶ የተገነቡ TypeScript ትግበራዎች ናቸው እንጂ በፕሮጀክቱ ውስጥ የተካተቱ የምንጭ ዛፎች አይደሉም። git pull ማድረግ የሚቻልበት የዋና ምንጭ ቅጂ የለም — README "bundled" ከማለት ይልቅ "inspired by" የሚለውም በትክክል ለዚህ ነው።

የዋና ምንጭ ማሻሻያዎች እንዴት እንደሚዋሃዱ

ራስ-ሰር የዋና ምንጭ ልቀት ክትትል እና compression-sync መለያ የለም — ይህም ሆን ተብሎ ነው። ሞተሮቹ ዳግም ትግበራዎች ስለሆኑ፣ የዋናው RTK ማጣሪያ ወይም የCaveman ደንብ ጥቅል እንደ ኮድ አይዋሃድም፤ ይልቁንም በOmniRoute የራሱ ቅርጸት እንደ አዲስ ደንብ/ማጣሪያ ዳግም ይገለጻል (COMPRESSION_RULES_FORMAT.mdን ይመልከቱ) እና በመደበኛ PR በየአጋጣሚው ይገባል። ከላይ ያሉት የማስፋፊያ ነጥቦች (ብጁ ሞተር፣ የቋንቋ ጥቅል፣ RTK ማጣሪያ) አንድን ለማበርከት የተፈቀደው መንገድ ናቸው።

ይህንን ፍሰት በትክክል የሚያሳዩ የቅርብ ጊዜ ምሳሌዎች፦

  • ለGradle እና dotnet የግንባታ ውፅዓት RTK ማጣሪያዎች (v3.8.42)
  • ለkubectl / docker-build / composer / gh RTK ማጣሪያዎች (#2824)
  • የCaveman የኢንዶኔዥያ ቋንቋ ጥቅል (#3975)፣ እንዲሁም የጀርመንኛ / ፈረንሳይኛ / ጃፓንኛ / ቻይንኛ ጥቅሎች

Headroom (የግቤት ማመቂያ ፕሮክሲ)

Headroom ሙሉ በሙሉ ውስጣዊ ነው — በአንድ ስሪት ላይ የተቆለፈ የgcf ኮዴክ ቅጽበተ-ቅጂ እና የOmniRoute የራሱ smartcrusher / toon / tabular ንብርብሮች። ከተካተተው ቅጂ ባሻገር ለመከታተል የቀጥታ ዋና ምንጭ የለም፤ ኮዴኩ ሲቀየር የgcf ዝማኔዎች በእጅ ይታደሳሉ እና ከማመቂያ በጀት መግቢያ (check:compression-budget) ጋር እንደገና ይረጋገጣሉ።

በዋና ምንጭ የተነሳሳ ማሻሻያ ማቅረብ

  1. በፕሮጀክቱ ውስጥ ቅጂውን አታካትቱ — የዋናውን ምንጭ ደንብ/ማጣሪያ በOmniRoute ቅርጸት ዳግም ይግለጹ።
  2. ከታች ባለው ተዛማጅ የማስፋፊያ ነጥብ (የቋንቋ ጥቅል፣ RTK ማጣሪያ ወይም ብጁ ሞተር) በኩል ያክሉት።
  3. ፈቃድ የያዘውን ምንጭ ከመቅዳት ይልቅ በPR መግለጫው ውስጥ የዋናውን ምንጭ ፕሮጀክት ይጥቀሱ (ዕውቅና)።
  4. ሙከራዎችን ያካትቱ እና የcheck:compression-budget መግቢያ አሁንም እንደሚያልፍ ያረጋግጡ።

የውጤት ቅጥ ማከል

የውጤት ቅጦች (የመመሪያውን የካታሎግ ሰንጠረዥ ይመልከቱ) የግብዓት ሞተሮች በምላሽ በኩል ያላቸው አቻ ናቸው፦ እርስዎ የሚልኩትን ከመጭመቅ ይልቅ፣ ሞዴሉ ወጪው ዝቅተኛ የሆነ ውጤት እንዲያመነጭ ያዝዛሉ። መዝገቡ OUTPUT_STYLE_CATALOG ሲሆን በopen-sse/services/compression/outputStyles/catalog.ts ውስጥ ይገኛል፣ እና አንድ የካታሎግ ግቤት ሙሉውን ባህሪ ይወክላል፦ አስገቢው፣ የዳሽቦርድ ቅንብሮች ፓነሉ፣ ዘላቂ ማከማቻው እና ቴሌሜትሪው ሁሉም ካታሎጉን ይዘረዝራሉ — ማዘመን የሚያስፈልገው ሌላ ዝርዝር የለም።

  1. ወደ OUTPUT_STYLE_CATALOG አንድ ግቤት ያክሉidlabeldescription እና ሦስቱን የእንግሊዝኛ levels (litefullultra) ያካትቱ። ኮድ፣ ዱካዎች፣ ትዕዛዞች፣ ስህተቶች እና URLs ሳይቀየሩ እንዲቆዩ እያንዳንዱ ደረጃ በ ${SHARED_BOUNDARIES} መጨረስ አለበት። የመመሪያው ጽሑፍ ለእያንዳንዱ (id, level, language) ቋሚ እና የማይለዋወጥ መሆን አለበት — የሚፈቀደው ብቸኛ ማስገባት ${SHARED_BOUNDARIES} ነው።
  2. ይተርጉሙት። ቢያንስ በi18n ስር የpt-BR ብሎክ ያቅርቡ፤ ponytail እና i-have-adhd (en፣ pt-BR፣ es፣ de፣ fr፣ it፣ ru፣ zh፣ ja፣ id፣ vi) የማጣቀሻ ቅርጽ ናቸው። ሆን ብሎ ለአንድ ቋንቋ ብቻ የተዘጋጀ ቅጥ በምትኩ locale ያቀናብራል (እንደ terse-cjkzh)፣ ከዚያም በዚያ አካባቢያዊ ቋንቋ ስር ብቻ ይቀርባል።
  3. የማትሪክስ ጥበቃውን ያዘምኑ — የቅጡን ቋንቋዎች በ tests/unit/compression/output-styles-i18n-matrix.test.ts ውስጥ ወዳለው BASELINE_LANGUAGES ያክሉ። ግልጽ የሆነ፣ የመከታተያ ጉዳይ ያለው KNOWN_ENGLISH_ONLY ግቤት ካልያዘ፣ መግቢያ በአካባቢያዊ ቋንቋ ያልተገደበ እና አስፈላጊዎቹ ትርጉሞች የሌሉት ማንኛውም አዲስ ቅጥ ጌቱን እንዳያልፍ ያደርጋል።
  4. ለእያንዳንዱ ቅጥ ሙከራ ያክሉtests/unit/compression/i-have-adhd-catalog.test.tsን እንደ አብነት ይጠቀሙ፦ የካታሎግ ቅርጽ፣ በእያንዳንዱ ደረጃ የድንበር አንቀጽ፣ እና እያንዳንዱ ትርጉም ከእንግሊዝኛ ከመቅዳት ይልቅ በራሱ ቋንቋ መጻፉን የሚያረጋግጥ መልህቅ።
  5. ምንጭ መጥቀስ፦ ቅጡ ከሌላ የላይኛው ፕሮጀክት የተወሰደ ከሆነ፣ በግቤቱ ላይ ባለ የምንጭ አስተያየት ውስጥ እውቅና ይስጡ (ለምሳሌ፦ i-have-adhd → ayghri/i-have-adhd, MIT) — ከላይ ካለው "Proposing an upstream-inspired improvement" ጋር ተመሳሳይ ደንብ ነው።

ምንም የUI፣ የስኪማ ወይም የቴሌሜትሪ ለውጥ አያስፈልግም — እነዚያ ገጽታዎች ከካታሎጉ ይቀርባሉ።


ምርጥ ልምዶች

የሞተር ልማት

  1. ሁልጊዜ validateConfigን ይተግብሩ — ማረጋገጫ የሌላቸው ሞተሮች በዝምታ ውድቀቶችን ያስከትላሉ
  2. ተጨባጭ targetLatencyMs ያዘጋጁ — ሞተሮችን ለመምረጥ በስትራቴጂ መራጩ ይጠቀምበታል
  3. ለዳሽቦርዱ getConfigSchemaን ይጠቀሙ — ውቅረትን ከተጠቃሚዎች ፈጽሞ አይደብቁ
  4. ሞተርዎ ንጹሕ ከሆነ stackable: trueን ይደግፉ — የጎንዮሽ ተጽዕኖ ያላቸው ሞተሮች መደራረብ የለባቸውም
  5. የመስመር ውስጥ ሙከራዎችን ይጻፉ — ሞተሮች በ<1s ውስጥ ሊረጋገጡ ይገባል

የቋንቋ ጥቅል ልማት

  1. lite የጥንካሬ ደረጃ ይጀምሩ — ደንቦችዎ በዝቅተኛው ቅንብር ደህንነታቸው የተጠበቀ መሆን አለባቸው
  2. ደንቦችን ለመወሰን contextን ይጠቀሙuser ብቻ የሆኑ ደንቦች በድንገት የስርዓት መመሪያዎችን ሊነኩ አይችሉም
  3. የJSON ቁልፎችን ከመያዝ ይቆጠቡ\\bword\\b በJSON ውስጥ ሊዛመድ እና የተዋቀረ ውሂብን ሊያበላሽ ይችላል
  4. በጠርዝ ሁኔታዎች ይሞክሩ — ባዶ ግብዓት፣ unicode፣ RTL ጽሑፍ፣ ኢሞጂዎች
  5. ነባር ጥቅሎችን እንደ አብነት ይጠቀሙen/filler.json እጅግ የበለጸገው ምሳሌ ነው

የፓይፕላይን ንድፍ

  1. ከማመቻቸትዎ በፊት መገለጫ ያዘጋጁ — መጀመሪያ በcompression_stats ይለኩ
  2. ዳግም ከመተግበር ይልቅ ማቀናበርን ይምረጡ — አዲስ ሞተር ከመጻፍዎ በፊት የCaveman ደንቦችን ያስፋፉ
  3. የቅደም ተከተሉን ምክንያት ይመዝግቡ — ሞተር A ከሞተር B በፊት ለምን እንደሚመጣ አስተያየት ይጻፉ
  4. በሦስቱም የጥንካሬ ደረጃዎች ይሞክሩlite ፈጣን ነው ግን መረጃ ሊያጣ ይችላል፣ ultra ዘገምተኛ ነው ግን ትክክለኛ ነው

ማጣቀሻ፦ አብሮገነብ ሞተሮች

የሞተር ID ተደራራቢ ነባሪ stackPriority ዒላማዎች
lite አዎ 5 መልዕክቶች፣ የመሣሪያ ውጤቶች
rtk አዎ 10 የመሣሪያ ውጤቶች
standard (caveman) አዎ 20 መልዕክቶች፣ የመሣሪያ ውጤቶች፣ የኮድ ብሎኮች
aggressive አዎ 30 መልዕክቶች
ultra አዎ 40 መልዕክቶች፣ የኮድ ብሎኮች

በተጨማሪ ይመልከቱ