Aller au contenu
OmniRoute source

Compression Engines (Français)

Les combinaisons de compression sont des profils de compression nommés qui peuvent être attribués à des combinaisons de routage :

  • compression_combos : stocke le mode, le pipeline, la configuration RTK, la configuration linguistique et l’indicateur par défaut
  • compression_combo_assignments : associe une combinaison de compression à une combinaison de routage
  • l’intégration à l’exécution résout une combinaison de compression attribuée avant les substitutions génériques de combinaison
  • les données analytiques incluent compression_combo_id et engine

Interface du tableau de bord : Tableau de bord -> Contexte et cache -> Combinaisons de compression.

Route Objectif
/api/settings/compression Paramètres globaux de compression (inclut la configuration mcpAccessibility)
/api/compression/preview Prévisualiser n’importe quel mode de compression
/api/compression/language-packs Répertorier les packs linguistiques Caveman disponibles
/api/context/caveman/config Alias des paramètres Caveman
/api/context/rtk/config Valeurs par défaut et paramètres RTK
/api/context/rtk/filters Catalogue de filtres RTK
/api/context/rtk/test Point de terminaison de prévisualisation/test RTK
/api/context/rtk/raw-output/[id] Récupération authentifiée de la sortie brute expurgée
/api/context/combos Opérations CRUD sur les combinaisons de compression
/api/context/combos/[id]/assignments Opérations CRUD sur les attributions aux combinaisons de routage
/api/context/analytics Alias des données analytiques de compression

Les routes de gestion nécessitent une authentification de gestion ou des contrôles de stratégie par clé d’API.

La compression expose cinq outils MCP :

Outil Portée Objectif
omniroute_compression_status read:compression Paramètres, données analytiques, statistiques du cache
omniroute_compression_configure write:compression Mettre à jour les paramètres globaux
omniroute_set_compression_engine write:compression Définir le mode et le pipeline facultatif
omniroute_list_compression_combos read:compression Répertorier les combinaisons de compression
omniroute_compression_combo_stats read:compression Consulter les données analytiques par combinaison/moteur

Les embeddings ne sont jamais compressés. open-sse/handlers/embeddings.ts n’appelle jamais de moteur de compression — les corps des requêtes/réponses sont transmis directement à l’exécuteur sans modification. Cette séparation est actuellement structurelle (les embeddings et les complétions de chat utilisent des gestionnaires distincts), et non un contrôle à l’exécution, mais cela signifie que le problème de distorsion vectorielle décrit dans #8034 n’a aucune surface d’exposition dans le chemin des embeddings.

Filtre d’exclusion par modèle/point de terminaison (#8034). Pour les complétions de chat, un opérateur peut désigner des identifiants de modèle/cibles provider/model qui ne doivent jamais être compressés — une mesure de protection utile si la compression est ultérieurement intégrée plus près d’un chemin adjacent aux embeddings, et généralement utile pour tout modèle dont l’invite doit rester strictement identique octet par octet (évaluations déterministes, préfixes sensibles au cache, etc.).

  • Champ de paramétrage : exclusions?: string[] dans la configuration globale de compression (GET/PUT /api/settings/compression), persisté via l’espace de noms de compression key_value existant (src/lib/db/compression.ts) — aucune nouvelle table.
  • Onglet du tableau de bord : Tableau de bord → Compression → Exclusions (/dashboard/compression/exclusions).
  • Syntaxe des motifs : * est le seul caractère générique. Tous les autres métacaractères d’expression régulière d’un motif sont échappés avant la recherche de correspondance, de sorte que gpt-5.6 correspond uniquement à la chaîne littérale, jamais à gpt-5x6 (sans risque de ReDoS, borné, sans quantificateurs imbriqués). Les motifs sont comparés sans tenir compte de la casse à la fois à l’identifiant de modèle seul et à la valeur composite provider/model — gpt-5-6, openai/gpt-5-6, et openai/* fonctionnent tous, et * seul exclut tous les modèles.
  • Correspondance : isCompressionExcluded() / normalizeCompressionExclusions() dans open-sse/services/compression/exclusions.ts. chatCore.ts vérifie la cible exclue immédiatement après avoir résolu les paramètres de compression, avant l’exécution de tout moteur, et traite une correspondance exactement comme si la compression était désactivée globalement — le corps de la requête est de manière démontrable identique octet par octet. L’omission est enregistrée via writeCompressionSkip(..., "excluded") afin d’être visible dans les données analytiques.
  • Valeur par défaut (liste vide/absente) : comportement identique à celui précédant #8034 — rien n’est exclu.
  • LLMLingua-2 (SLM) nécessite que les dépendances optionnelles soient colocalisées. Le worker ne fonctionne dans une build de production que lorsque @atjsh/llmlingua-2 et ses dépendances homologues sont colocalisés dans dist/node_modules (voir scripts/build/colocateOptionals.mjs, #4286). Sans eux, le moteur échoue en mode ouvert (il renvoie le texte d’origine). La résolution du worker ne dépend plus de import.meta.url (qui échoue dans le bundle autonome) — elle s’appuie sur le cwd d’exécution / argv[1].
  • Les packs linguistiques Caveman de / fr / ja sont partiels. Ils fournissent des règles context + filler + structural, mais aucun pack dedup / ultra ; l’intensité ultra n’est donc pas supérieure à full pour ces langues (elles utilisent uniquement leurs propres règles — il n’existe aucun repli silencieux vers les règles anglaises dedup/ultra, qui déformeraient le texte en langue étrangère). Les packs en / es / id / pt-BR sont complets. Les contributions de fichiers dedup.json + ultra.json pour les packs partiels sont les bienvenues.
  • La télémétrie empilée répertorie uniquement les moteurs ayant effectué une compression. Une étape d’un pipeline empilé dont le moteur s’est exécuté, mais n’a produit aucun gain, renvoie stats:null et n’apparaît donc pas dans engineBreakdown — ce qui la rend impossible à distinguer d’une étape ignorée. Distinguer « exécutée, 0 % » de « ignorée » nécessiterait une modification du modèle de ventilation et est reporté.

Les portes ciblées pour ce domaine sont :

Fenêtre de terminal
node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core

Code source d’OmniRoute (a58000c7685f)

HagiCode

HagiCode est un espace de développement agentique qui associe workflows structurés, exécution multi-agent et vues Hero Dungeon.

Transformez vos idées en logiciels utiles grâce à un workflow agentique plus intelligent, rapide et agréable.

Interface principale de HagiCode en thème clair
  • SmartDes workflows structurés transforment une intention en parcours exécutable, de l’idée à la livraison.
  • EfficientLes workflows multi-agents font avancer recherche, réalisation et revue en parallèle.
  • FunHero Dungeon rend les longues sessions de code plus visuelles et collaboratives.
Visiter HagiCode