Une skill token-router sans perte utilisant le modèle Gemma4 2b pour réduire de 99 % le coût en tokens de Codex et Claude Code
(github.com/sleeplesshan)Bonjour,
Pour celles et ceux qui utilisent habituellement des agents IA comme Claude Code ou Codex pour analyser de gros volumes de logs ou modifier du code legacy, et qui se retrouvent vite confrontés à des coûts en tokens et des temps de latence qui explosent, je partage ici la skill que j’ai créée.
Il s’agit de token-router, un routeur de contexte hybride conçu pour traiter les gros fichiers avec le principe « l’exploration en local gratuitement, le raisonnement dans le cloud avec de hautes performances ».
🛑 Quel problème cela résout-il ?
Si vous envoyez tel quel à un LLM cloud un log de déploiement d’infrastructure de plus de 2 000 lignes ou un énorme fichier de code source, les tokens d’entrée sont massivement gaspillés et le temps d’attente s’allonge.
Pour réduire ce coût, on peut être tenté de faire résumer le code à l’avance par un petit modèle, mais cette approche est risquée. Dès qu’une ligne d’erreur ou une définition de variable manque, l’IA cloud perd le contexte et peut produire une réponse complètement à côté.
Dans les versions récentes, j’ai également étendu le routage aux longs fichiers d’instructions statiques d’agent qui se répètent à chaque tour, comme CLAUDE.md, AGENTS.md ou .cursorrules. En revanche, il est impossible de réduire après coup le coût en tokens des longs fichiers racine déjà injectés automatiquement ; il est donc recommandé de garder les fichiers d’instructions racine courts, puis de déplacer les longues règles spécifiques à une tâche dans des fichiers de référence séparés afin de ne les router qu’au moment nécessaire.
🧠 Comment cela fonctionne-t-il ? (du point de vue de l’utilisateur)
Cet outil ne résume pas le texte : il découpe strictement l’original pour n’en extraire que ce qui est nécessaire.
- Exploration locale (Local Triage) : sur mon ordinateur, via Ollama, il exécute un modèle Gemma 4 2B léger. Ce modèle local repère rapidement uniquement les numéros de ligne précis (coordonnées) correspondant à la question de l’utilisateur.
- Extraction de l’original (Raw Slicing) : un script Python découpe alors sur disque des fragments de texte propres, strictement identiques à l’original, à partir de ces numéros de ligne.
- Raisonnement cloud (Reasoning) : le modèle cloud principal ne reçoit que des fragments originaux denses, débarrassés du bruit inutile, ainsi qu’une carte de la structure du fichier, et peut se concentrer uniquement sur le débogage et l’écriture de code.
Comme il transmet l’original non transformé, on peut exploiter à 100 % les capacités de raisonnement du modèle cloud tout en réduisant drastiquement les coûts.
À ce jour, trois modes sont pris en charge : error_log, heavy_code et agent_context. Le mode agent_context sert à retrouver uniquement les lignes originales pertinentes pour la tâche en cours dans des documents de référence d’instructions d’agent comme CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules ou agent-context/*.md.
📊 Résultats de test sur mon PC
- Gros log d’infrastructure (2 000 lignes) : contexte d’entrée réduit de 41 711 tokens à 131 tokens (99,69 % d’économie, temps de traitement de 5,37 secondes).
- Code source legacy avec bug (2 155 lignes) : l’équivalent de 7 520 tokens a été ramené à seulement 70 tokens pour l’envoi (99,06 % d’économie, temps de traitement de 4,46 secondes).
🛠️ Ce qui était pratique à l’usage en conditions réelles
- Évite de faire ramer le PC : on peut craindre qu’un usage d’IA locale ralentisse l’ordinateur. Avec cet outil, dès que l’extraction des coordonnées de routage est terminée, le modèle local est immédiatement libéré de la VRAM.
- Extension intelligente du contexte vers l’arrière : si l’extrait de code récupéré est trop étroit pour comprendre les dépendances avant et après, l’IA cloud ne répond pas au hasard : un garde-fou de prompt lui permet de redemander au script « redécoupe une plage plus large ».
- Streaming pour gros fichiers : même si un fichier est si volumineux qu’il dépasse la mémoire du modèle local, une logique de streaming côté backend scanne d’abord les mots-clés et la fin du fichier, ce qui permet de rester en sécurité.
- Prise en charge de Claude Code : la dernière version inclut aussi un bootstrap
CLAUDE.mdcompact pour Claude Code. Les longues instructions spécifiques à Claude peuvent être placées dans un fichier de référence séparé et utilisées viaagent_context.
Le projet est publié gratuitement sous licence MIT et peut être utilisé immédiatement, soit comme script autonome, soit sous forme de skill pour OpenAI Codex. Dans Claude Code également, on peut appeler le même script routeur en s’appuyant sur le bootstrap CLAUDE.md. J’espère que cela aidera la productivité des développeurs qui manipulent souvent de gros logs ou du code lourd.
Je serais ravi de recevoir vos retours et avis sur l’architecture ou l’optimisation des prompts !
2 commentaires
C’est une bonne astuce, je l’ai essayée rapidement.
Quand je générais le JSON à envoyer en Python, il arrivait parfois que des erreurs se produisent à cause d’une syntaxe JSON invalide ; lorsque je suis passé à 4b ou à qwen2.5-coder:7b, le taux d’erreur a nettement diminué.
Oh, merci beaucoup d’avoir testé ça immédiatement après la publication, et d’avoir même laissé un retour comparatif détaillé selon la taille des modèles !
Comme vous l’avez indiqué, les très petits modèles de la classe 2B semblent parfois avoir des limites dans des environnements mêlant logs complexes ou caractères spéciaux : ils peuvent rompre les contraintes du prompt système et produire un JSON non conforme à la syntaxe. Si vous avez un peu de marge en ressources VRAM, les modèles de la famille Qwen 2.5 Coder 7B ou Gemma 4B semblent clairement produire des coordonnées de routage bien plus stables.
Si d’autres personnes rencontrent aussi des erreurs de syntaxe JSON pendant leurs tests, il pourrait être plus utile d’essayer l’exécution en passant à un modèle plus grand via la configuration de variable d’environnement, comme ceci :
OLLAMA_MODEL=qwen2.5-coder:7b python3 scripts/router.py ...Merci d’avoir partagé ce précieux retour de benchmark en conditions réelles.