* 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.
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 የማመቅ ሞተር ሊሰካ የሚችል ነው — ብጁ ሞተሮችን መመዝገብ፣ ለአዳዲስ ቋንቋዎች የቋንቋ ጥቅሎችን ማቅረብ እና የተደራረቡ የሂደት መስመሮችን ማቀናጀት ይችላሉ። ይህ መመሪያ እንዴት እንደሚደረግ ያሳያል።
ተዛማጅ መመሪያዎች፦
- COMPRESSION_GUIDE.md — የሙሉ የሂደት መስመሩ አጠቃላይ እይታ
- COMPRESSION_ENGINES.md — የሞተር መዝገብ እና አብረው የተካተቱ ሞተሮች
- RTK_COMPRESSION.md — የRTK ሞተር እና ብጁ ማጣሪያዎች
- COMPRESSION_RULES_FORMAT.md — የደንብ ጥቅል ቅርጸት ማጣቀሻ
አጠቃላይ እይታ
የማመቅ ስርዓቱ 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 የቋንቋ ጥቅሎች ጋር ይቀርባል፦ en፣ es፣ fr፣ de፣ ja፣ pt-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 # የፕሮጀክት ደረጃ
ለቋንቋ ጥቅሎች ምርጥ ልምዶች
- በ
fillerይጀምሩ—እነዚህ ከፍተኛው ተፅዕኖ ያላቸው ደንቦች ናቸው - ኃይለኛ ደንቦችን ለመገደብ
minIntensityን ይጠቀሙ—ከመጠን በላይ መጭመቅን ይከላከላል - የሙከራ ኬዞችን ያካትቱ—ባህሪውን ለማረጋገጥ በJSON ውስጥ
tests[]ድርድር ይጨምሩ - ቅደም ተከተል አስፈላጊ ነው—ቀደም ያሉ ደንቦች መጀመሪያ ይተገበራሉ፤ ከፍተኛ ተፅዕኖ ያላቸውን ደንቦች መጀመሪያ ያስቀምጡ
replacementን በጥንቃቄ ይጠቀሙ—ባዶ ሕብረቁምፊ በአብዛኛው ትክክለኛ ነው፤ በፍጹም አዲስ ይዘት አያስገቡ
የትርጉም ስትራቴጂ
የደንብ ጥቅሎችን ለአዲስ ቋንቋ ሲያካባቢያዊ ያደርጉ፦
- የደንብ ስሞቹን ይተርጉሙ—በdebug ውጤት ውስጥ ይታያሉ
- የregex ንድፎቹን ያስማሙ—ቀጥተኛ ትርጉም ብዙ ጊዜ አይሰራም (የቃላት ወሰኖች ይለያያሉ)
- በእውነተኛ ውይይቶች ይፈትኑ—ጥቅሉ በተጨባጭ ግብዓት ላይ ደህንነቱ የተጠበቀ መሆን አለበት
- ከባህላዊ ልማዶች ጋር ያዛምዱ—ለምሳሌ፣ የጃፓንኛ ጥቅሎች ከእንግሊዝኛ የበለጠ የክብር መግለጫ ሙሌቶች አሏቸው
የተደራረቡ ፓይፕላይኖች
የተደራረበ ፓይፕላይን በርካታ ኤንጂኖችን በቅደም ተከተል ያስኬዳል፤ የእያንዳንዱ ኤንጂን ውጤትም ለቀጣዩ ግብዓት ይሆናል። 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 |
ብጁ ፓይፕላይን | ኤንጂኖችን በማንኛውም ቅደም ተከተል ያቀናብሩ (ከታች ይመልከቱ) |
ከላይ ከተጠቀሱት የሁነታ ኤንጂኖች በተጨማሪ፣ መዝገቡ ሊደራረቡ የሚችሉ ልዩ ኤንጂኖችንም ያካትታል — CCR፣ headroom፣ ionizer እና session-dedup — እነዚህም በ COMPRESSION_ENGINES.md ውስጥ ተመዝግበዋል።
የሁነታ ምርጫ የሚወሰነው በopen-sse/services/compression/strategySelector.ts ውስጥ ባለው getEffectiveMode() ነው፦
- መጭመቅ ከተሰናከለ፦
"off" - የጥምር ለውጥ ካለ፦ ለውጡን ይጠቀሙ
- የራስ-ሰር ማስጀመሪያ ገደብ ከታለፈ፦
autoTriggerModeን ይጠቀሙ (ነባሪ፦"lite") - ካልሆነ፦
defaultModeን ይጠቀሙ
ነባሪው የተደራረበ ፓይፕላይን
mode: "stacked" በግልጽ ሲዋቀር፣ ነባሪው ፓይፕላይን የሚከተሉትን ያቀናብራል፦
- RTK — የትዕዛዝ ውጤት ጫጫታን ያስወግዳል (በተርሚናል ውጤት ላይ ~80% ቁጠባ)
- Caveman — አላስፈላጊ ቃላትን ያስወግዳል፣ ጽሑፉን አጭር ያደርጋል (ከቀረው ጽሑፍ ~46%)
- 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) ጋር እንደገና ይረጋገጣሉ።
በዋና ምንጭ የተነሳሳ ማሻሻያ ማቅረብ
- በፕሮጀክቱ ውስጥ ቅጂውን አታካትቱ — የዋናውን ምንጭ ደንብ/ማጣሪያ በOmniRoute ቅርጸት ዳግም ይግለጹ።
- ከታች ባለው ተዛማጅ የማስፋፊያ ነጥብ (የቋንቋ ጥቅል፣ RTK ማጣሪያ ወይም ብጁ ሞተር) በኩል ያክሉት።
- ፈቃድ የያዘውን ምንጭ ከመቅዳት ይልቅ በPR መግለጫው ውስጥ የዋናውን ምንጭ ፕሮጀክት ይጥቀሱ (ዕውቅና)።
- ሙከራዎችን ያካትቱ እና የ
check:compression-budgetመግቢያ አሁንም እንደሚያልፍ ያረጋግጡ።
የውጤት ቅጥ ማከል
የውጤት ቅጦች (የመመሪያውን የካታሎግ ሰንጠረዥ ይመልከቱ)
የግብዓት ሞተሮች በምላሽ በኩል ያላቸው አቻ ናቸው፦ እርስዎ የሚልኩትን ከመጭመቅ ይልቅ፣ ሞዴሉ ወጪው ዝቅተኛ የሆነ ውጤት እንዲያመነጭ ያዝዛሉ። መዝገቡ
OUTPUT_STYLE_CATALOG ሲሆን በopen-sse/services/compression/outputStyles/catalog.ts ውስጥ ይገኛል፣ እና
አንድ የካታሎግ ግቤት ሙሉውን ባህሪ ይወክላል፦ አስገቢው፣ የዳሽቦርድ ቅንብሮች ፓነሉ፣
ዘላቂ ማከማቻው እና ቴሌሜትሪው ሁሉም ካታሎጉን ይዘረዝራሉ — ማዘመን የሚያስፈልገው ሌላ ዝርዝር የለም።
- ወደ
OUTPUT_STYLE_CATALOGአንድ ግቤት ያክሉ፤id፣label፣descriptionእና ሦስቱን የእንግሊዝኛlevels(lite፣full፣ultra) ያካትቱ። ኮድ፣ ዱካዎች፣ ትዕዛዞች፣ ስህተቶች እና URLs ሳይቀየሩ እንዲቆዩ እያንዳንዱ ደረጃ በ${SHARED_BOUNDARIES}መጨረስ አለበት። የመመሪያው ጽሑፍ ለእያንዳንዱ(id, level, language)ቋሚ እና የማይለዋወጥ መሆን አለበት — የሚፈቀደው ብቸኛ ማስገባት${SHARED_BOUNDARIES}ነው። - ይተርጉሙት። ቢያንስ በ
i18nስር የpt-BRብሎክ ያቅርቡ፤ponytailእናi-have-adhd(en፣ pt-BR፣ es፣ de፣ fr፣ it፣ ru፣ zh፣ ja፣ id፣ vi) የማጣቀሻ ቅርጽ ናቸው። ሆን ብሎ ለአንድ ቋንቋ ብቻ የተዘጋጀ ቅጥ በምትኩlocaleያቀናብራል (እንደterse-cjk→zh)፣ ከዚያም በዚያ አካባቢያዊ ቋንቋ ስር ብቻ ይቀርባል። - የማትሪክስ ጥበቃውን ያዘምኑ — የቅጡን ቋንቋዎች በ
tests/unit/compression/output-styles-i18n-matrix.test.tsውስጥ ወዳለውBASELINE_LANGUAGESያክሉ። ግልጽ የሆነ፣ የመከታተያ ጉዳይ ያለውKNOWN_ENGLISH_ONLYግቤት ካልያዘ፣ መግቢያ በአካባቢያዊ ቋንቋ ያልተገደበ እና አስፈላጊዎቹ ትርጉሞች የሌሉት ማንኛውም አዲስ ቅጥ ጌቱን እንዳያልፍ ያደርጋል። - ለእያንዳንዱ ቅጥ ሙከራ ያክሉ፤
tests/unit/compression/i-have-adhd-catalog.test.tsን እንደ አብነት ይጠቀሙ፦ የካታሎግ ቅርጽ፣ በእያንዳንዱ ደረጃ የድንበር አንቀጽ፣ እና እያንዳንዱ ትርጉም ከእንግሊዝኛ ከመቅዳት ይልቅ በራሱ ቋንቋ መጻፉን የሚያረጋግጥ መልህቅ። - ምንጭ መጥቀስ፦ ቅጡ ከሌላ የላይኛው ፕሮጀክት የተወሰደ ከሆነ፣ በግቤቱ ላይ ባለ የምንጭ አስተያየት ውስጥ እውቅና ይስጡ (ለምሳሌ፦
i-have-adhd→ ayghri/i-have-adhd, MIT) — ከላይ ካለው "Proposing an upstream-inspired improvement" ጋር ተመሳሳይ ደንብ ነው።
ምንም የUI፣ የስኪማ ወይም የቴሌሜትሪ ለውጥ አያስፈልግም — እነዚያ ገጽታዎች ከካታሎጉ ይቀርባሉ።
ምርጥ ልምዶች
የሞተር ልማት
- ሁልጊዜ
validateConfigን ይተግብሩ — ማረጋገጫ የሌላቸው ሞተሮች በዝምታ ውድቀቶችን ያስከትላሉ - ተጨባጭ
targetLatencyMsያዘጋጁ — ሞተሮችን ለመምረጥ በስትራቴጂ መራጩ ይጠቀምበታል - ለዳሽቦርዱ
getConfigSchemaን ይጠቀሙ — ውቅረትን ከተጠቃሚዎች ፈጽሞ አይደብቁ - ሞተርዎ ንጹሕ ከሆነ
stackable: trueን ይደግፉ — የጎንዮሽ ተጽዕኖ ያላቸው ሞተሮች መደራረብ የለባቸውም - የመስመር ውስጥ ሙከራዎችን ይጻፉ — ሞተሮች በ<1s ውስጥ ሊረጋገጡ ይገባል
የቋንቋ ጥቅል ልማት
- በ
liteየጥንካሬ ደረጃ ይጀምሩ — ደንቦችዎ በዝቅተኛው ቅንብር ደህንነታቸው የተጠበቀ መሆን አለባቸው - ደንቦችን ለመወሰን
contextን ይጠቀሙ —userብቻ የሆኑ ደንቦች በድንገት የስርዓት መመሪያዎችን ሊነኩ አይችሉም - የJSON ቁልፎችን ከመያዝ ይቆጠቡ —
\\bword\\bበJSON ውስጥ ሊዛመድ እና የተዋቀረ ውሂብን ሊያበላሽ ይችላል - በጠርዝ ሁኔታዎች ይሞክሩ — ባዶ ግብዓት፣ unicode፣ RTL ጽሑፍ፣ ኢሞጂዎች
- ነባር ጥቅሎችን እንደ አብነት ይጠቀሙ —
en/filler.jsonእጅግ የበለጸገው ምሳሌ ነው
የፓይፕላይን ንድፍ
- ከማመቻቸትዎ በፊት መገለጫ ያዘጋጁ — መጀመሪያ በ
compression_statsይለኩ - ዳግም ከመተግበር ይልቅ ማቀናበርን ይምረጡ — አዲስ ሞተር ከመጻፍዎ በፊት የCaveman ደንቦችን ያስፋፉ
- የቅደም ተከተሉን ምክንያት ይመዝግቡ — ሞተር A ከሞተር B በፊት ለምን እንደሚመጣ አስተያየት ይጻፉ
- በሦስቱም የጥንካሬ ደረጃዎች ይሞክሩ —
liteፈጣን ነው ግን መረጃ ሊያጣ ይችላል፣ultraዘገምተኛ ነው ግን ትክክለኛ ነው
ማጣቀሻ፦ አብሮገነብ ሞተሮች
| የሞተር ID | ተደራራቢ | ነባሪ stackPriority | ዒላማዎች |
|---|---|---|---|
lite |
አዎ | 5 | መልዕክቶች፣ የመሣሪያ ውጤቶች |
rtk |
አዎ | 10 | የመሣሪያ ውጤቶች |
standard (caveman) |
አዎ | 20 | መልዕክቶች፣ የመሣሪያ ውጤቶች፣ የኮድ ብሎኮች |
aggressive |
አዎ | 30 | መልዕክቶች |
ultra |
አዎ | 40 | መልዕክቶች፣ የኮድ ብሎኮች |
በተጨማሪ ይመልከቱ
- COMPRESSION_GUIDE.md — የሂደት መስመሩ አጠቃላይ እይታ
- COMPRESSION_ENGINES.md — የሞተር መዝገብ ማጣቀሻ
- COMPRESSION_RULES_FORMAT.md — የደንብ ቅርጸት ዝርዝር መግለጫ
- COMPRESSION_LANGUAGE_PACKS.md — የቋንቋ ጥቅል ዝርዝሮች
- RTK_COMPRESSION.md — RTK ሞተር እና ብጁ ማጣሪያዎች
- ምንጭ፦
open-sse/services/compression/(117 ፋይሎች፣ ~250KB)