Dynamic Context Swapping & Truncation: Bulletproof Context Management
Gary Gitton
Architecture de Gestion du Débordement de Contexte
Ce document décrit l’architecture interne et la philosophie de conception de LLMBastion pour la gestion des limites de fenêtres de contexte des modèles (Context Overflow).
1. Philosophie “Pass-Plat” (Proxy Transparent)
LLMBastion est conçu pour fonctionner comme un proxy de transit transparent de haute performance (“pass-plat”). Cette philosophie dicte des règles de conception strictes concernant la manipulation des prompts et de l’historique :
- Pas de modification implicite opaque : La passerelle ne doit jamais effectuer de réécriture de texte, de résumé (summarization) ou de manipulations sémantiques cachées à l’insu de l’utilisateur. Toute altération sémantique masquerait le comportement réel du modèle amont et briserait la reproductibilité des appels.
- Transparence et Observabilité absolues : Si une action corrective est menée (troncation de l’histoire, bascule de modèle), elle doit être immédiatement et explicitement signalée via des en-têtes HTTP de télémétrie (
X-Bastion-Context-Warning,X-Bastion-Context-Truncated). - Contrôle total par le client : L’utilisateur final doit pouvoir configurer et désactiver chaque étape de la récupération de contexte à chaque niveau (paramètres globaux ou surcharge dynamique à la requête).
2. Mécanismes de Récupération de Contexte
Lorsqu’une requête entrante dépasse la capacité (max_context_length) du modèle cible initial, LLMBastion applique deux stratégies configurables :
A. Dynamic Context Swapping (Bascule Dynamique)
- Si activée, LLMBastion parcourt le catalogue de modèles disponibles pour trouver un modèle amont compatible avec les règles de conformité et le budget, mais doté d’une fenêtre de contexte plus large.
- La requête est alors réacheminée de manière transparente vers ce modèle plus robuste.
- Un en-tête
X-Bastion-Context-Warningest injecté pour informer le consommateur de la bascule.
B. Smart Truncation (Troncation Intelligente)
- Si la bascule n’est pas possible ou désactivée, mais que la troncation intelligente est autorisée, LLMBastion prunit l’historique des messages intermédiaires.
- Règles de troncation :
- Le message système (System Prompt) est impérativement préservé pour conserver les consignes de sécurité et de comportement.
- Le dernier message utilisateur (la requête active) est préservé à 100%.
- Les messages intermédiaires (historique des tours précédents) sont retirés séquentiellement (du plus ancien au plus récent) jusqu’à ce que la taille totale du prompt s’insère dans le budget de tokens du modèle.
- Un en-tête
X-Bastion-Context-Truncated: trueest retourné dans la réponse.
3. Résolution des Configurations (Precedence Tree)
Les configurations de débordement de contexte sont résolues selon un arbre de priorité strict :
[ Surcharges Dynamiques dans la Requête (RoutingConfig) ]
│ (Prend le dessus en priorité absolue)
▼
[ Paramètres de Conformité Globaux dans la Base (account_settings / "security") ]
│ (Défini par les administrateurs de la console)
▼
[ Comportements par défaut du Plan de Facturation (Hobby/Starter/Pro) ]
Exemple de surcharge dynamique dans le payload JSON :
{
"model": "gpt-4",
"messages": [...],
"routing": {
"strategy": "auto",
"context_swapping": false,
"smart_truncation": true
}
}
4. Flux de Décision Interne
Le diagramme suivant illustre le parcours d’une requête au sein du composant ContextOrchestrationMiddleware :
graph TD
Start([Requête Reçue]) --> Est[Estimation des Tokens]
Est --> Check{Taille > Limite du Modèle?}
Check -- Non --> RunNext[Exécuter le Pipeline]
Check -- Oui --> LoadToggles[Résoudre les Toggles de l'utilisateur]
LoadToggles --> SwappingCheck{Swapping activé?}
SwappingCheck -- Oui --> FindBigger[Chercher un modèle plus large]
FindBigger --> Swapped{Modèle trouvé?}
Swapped -- Oui --> SwapModel[Permuter le modèle & ajouter X-Bastion-Context-Warning] --> RunNext
Swapped -- Non --> TruncationCheck
SwappingCheck -- Non --> TruncationCheck{Troncation activée?}
TruncationCheck -- Oui --> Truncate[Tronquer les messages intermédiaires]
Truncate --> Fits{Taille finale <= Limite?}
Fits -- Oui --> AddTruncHeader[Ajouter l'en-tête X-Bastion-Context-Truncated] --> RunNext
Fits -- Non --> Fail[400 Context Length Exceeded]
TruncationCheck -- Non --> Fail