Pré-version, l'API n'est pas encore publique
Compressez le JSON avant qu'il n'atteigne le modèle.
Tokendoo est un codec structurel sans perte pour le JSON en route vers un LLM, exécuté en périphérie. La valeur d'origine est exactement récupérable, garanti par des tests par propriétés sur plus de 1 000 cas générés, pas par une politique.
ratio de tokens wire médian, fixtures de référence, réglages livrés
Ratio wire : charge compressée seule. La légende de format coûte 97 à 174 tokens et peut effacer le gain sur les petites charges.
corpus synthétique publié · comptes cl100k_base exacts · 2026-08-06
01 / Le problème
Les données structurées paient une taxe de structure.
Un tableau JSON de 1 000 lignes énonce ses clés 1 000 fois. Accolades, guillemets, noms de champs, valeurs répétées : l'API facture chacun d'eux, à chaque requête, au prix du token.
La prose porte du sens ; la structure se porte surtout elle-même. La répétition est la seule partie d'une charge utile qu'on peut retirer puis restituer à l'identique, c'est donc la seule que Tokendoo touche.
02 / Fonctionnement
Quatre transformations, dans l'ordre.
Chacune est structurelle et réversible, et n'est conservée que si elle rend la charge utile plus petite. Quand rien n'aide, le codec émet l'entrée inchangée et le dit dans l'en-tête.
Canonicalisation
Espaces supprimés, clés triées, nombres normalisés. Une entrée déterministe pour tout ce qui suit.
{ "sku": "a-114", "qty": 2 }{"qty":2,"sku":"a-114"}Dictionnaire de clés, désactivé par défaut
Les clés répétées deviennent des ordinaux en base 36, plus une table. Sur le corpus de référence, il n'a pas passé la barre des ≥ 10 % de gain en tokens : il reste désactivé tant qu'il ne fait pas ses preuves.
{"quantity":2,"status":"active"}{"0":2,"1":"active"} k:["quantity","status"]Repli tabulaire
Un tableau d'objets de même forme devient un schéma plus des lignes de valeurs. Les clés sont énoncées une fois, et non une fois par enregistrement.
[{"qty":2,"sku":"a-114"},
{"qty":1,"sku":"a-115"}]["__T",["qty","sku"], [[2,"a-114"],[1,"a-115"]]]
Internement des valeurs
Les chaînes répétées dans la charge utile rejoignent une table et sont référencées par ordinal. La table est livrée avec la sortie, et chaque chiffre de cette page la compte.
"eu-west-1" × 40
"0" × 40 v:["eu-west-1"]
Le résultat est une chaîne T2, T246:…, plus un dictionnaire JSON. Les deux parties comptent dans chaque ratio ; annoncer un gain sans le dictionnaire le surestimerait.
03 / Exemple en direct
Trois charges utiles, compressées dans votre navigateur.
Il n'y a pas de champ de saisie, à dessein. Une page qui collecterait des données pour démontrer un produit fondé sur leur non-collecte se réfuterait elle-même. Ces trois fixtures sont livrées avec la page ; rien ne quitte votre onglet.
ratio de tokens, cette charge utile
Entrée
/_nuxt/homogeneous_100.C1heiKFQ.txt
04 / Mesures
La table avec laquelle nous décidons.
Comptes cl100k_base exacts sur un corpus synthétique publié, mesuré le 2026-08-06 avec les réglages livrés : repli tabulaire et internement activés, dictionnaire de clés désactivé. Chaque compte de sortie inclut le dictionnaire.
| fixture | nature | tokens avant | tokens après | ratio tokens | ratio octets |
|---|---|---|---|---|---|
homogeneous_100 | 100 enregistrements, un schéma | 2 903 | 1 327 | 0,457 | 0,321 |
homogeneous_1000 | 1 000 enregistrements, un schéma | 29 003 | 9 427 | 0,325 | 0,242 |
realistic_api | réponse d'API mixte | 3 200 | 2 789 | 0,872 | 0,791 |
size_10k | charge mixte ≈ 10 Ko | 3 860 | 1 624 | 0,421 | 0,299 |
size_100k | charge mixte ≈ 100 Ko | 39 983 | 13 087 | 0,327 | 0,242 |
size_250k | charge mixte ≈ 250 Ko | 98 603 | 32 627 | 0,331 | 0,242 |
prose_heavy | longues valeurs textuelles, structure mince | 2 965 | 2 975 | 1,003 | 1,001 |
fixtures de référence, ratio de tokens médian 0,421. Le corpus et le banc de mesure sont publiés dans le dépôt ; relancer le banc reproduit chaque compte.
La dernière ligne est le cas où l'outil ne fait rien : la compression structurelle n'a pas de prise sur la prose, et prose_heavy ressort 0,3 % plus gros. La ligne reste sur cette page : un chiffre vérifiable vaut plus qu'un chiffre flatteur.
05 / Zéro rétention
Rien à divulguer, par construction.
Corps de requêtes, en-têtes et adresses IP ne sont jamais journalisés, mis en cache ni stockés : aucun chemin de code ne le permet. Les réponses d'erreur ne portent que des champs structurels et ne reproduisent jamais le contenu.
La télémétrie se limite à sept compteurs numériques anonymes :
bytes_beforebytes_aftertokens_beforetokens_aftermodelatency_msstatus
L'invariant est garanti par des tests qui font échouer le build, pas promis dans une politique. L'avis de confidentialité que vous cherchez, c'est cette section.
06 / État & feuille de route
Ce qui est livré, ce qui se mesure, ce qui attend.
au 2026-08-07
Construit, pré-version
POST /v1/compressPOST /v1/decompress- Rust compilé en WebAssembly, exécuté sur Cloudflare Workers
- Mode JSON uniquement ; entrées jusqu'à 256 Kio
- Aller-retour sans perte sur les valeurs JSON, garanti par plus de 1 000 cas de tests par propriétés
En cours de mesure
- Si un modèle répond aussi bien sur l'entrée compressée que sur l'originale. Nous ne l'affirmons pas ; c'est précisément ce qui se mesure. Le banc existe ; aucun modèle n'a encore répondu.
- Le coût de la légende qui apprend le format au modèle : 97 à 174 tokens, de quoi effacer le gain sur les petites charges. Il est compté, pas caché.
Reporté
- Mode code : utile, il est nécessairement avec perte, ce qui rompt la garantie d'aller-retour. Il attend que ce compromis puisse être explicite.
- Mode texte : la prose est à un ratio de 1,003 ; la compression structurelle n'y a pas de prise.
- Facturation et clés d'API : après les mesures ci-dessus, pas avant.
07 / Liste d'attente
Un champ, un e-mail, puis le silence.
L'API n'est pas encore ouverte. Laissez une adresse et vous recevrez exactement un e-mail à l'ouverture.