Qu’est-ce que TOON ?

TOON
JSON
Optimisation

Nous y sommes tous allés. Vous concevez une invite pour un modèle de langage étendu (LLM) et vous devez transmettre des données structurées. Vous accédez à JSON. Après tout, c’est la norme de l’industrie. Mais alors que vous regardez votre fenêtre contextuelle se remplir d'accolades interminables, de touches répétées et de guillemets autour de nombres entiers simples, vous commencez à vous demander : Y a-t-il une meilleure façon ?

YAML offre de la lisibilité mais souffre d'ambiguïté. CSV est dense mais manque de hiérarchie.

Entrez TOON.

TOON est un format de sérialisation de données qui ressemble à une bouffée d'air frais pour les développeurs et à un langage natif pour les modèles d'IA. Il comble le fossé entre la lisibilité humaine et l’efficacité des machines. Aujourd'hui, approfondissons la syntaxe et les mécanismes de TOON pour comprendre pourquoi il devient rapidement un favori pour l'échange de données à haute efficacité.

La philosophie : sémantique JSON, esthétique YAML

À la base, TOON partage exactement le même modèle de données que JSON. Si vous pouvez le représenter en JSON (primitives (chaînes, nombres, booléens, nuls), objets et tableaux), vous pouvez le représenter en TOON. Cependant, la présentation est radicalement différente.

TOON abandonne les appareils orthodontiques. Il utilise l'indentation pour représenter la hiérarchie, un peu comme YAML. Un objet simple semble propre et accessible :

Cependant, contrairement à YAML, TOON est strict en matière de types. Il n'est pas possible de deviner si « non » signifie « faux » ou si la chaîne « non ». Dans TOON, les chaînes ne nécessitent des guillemets que lorsque cela est absolument nécessaire, par exemple lorsqu'elles contiennent des caractères spéciaux, ressemblent à des nombres ou sont vides. Si vous tapez « message : Hello World », vous obtenez une chaîne. Si vous tapez « count : 42 », vous obtenez un nombre.

identifiant: 123 
nom : Ada 
actif : vrai 

La puissance des tableaux : longueur et tableaux

Là où TOON se démarque vraiment du lot, c'est dans sa gestion des tableaux. Il s'agit de la « fonctionnalité phare » pour l'optimisation des jetons.

Chaque tableau de TOON déclare explicitement sa longueur entre parenthèses, comme « items[3] ». Cela peut sembler redondant pour un humain, mais pour un LLM, c'est un super pouvoir. Il permet au modèle de valider immédiatement la structure et de détecter la troncature. Si le flux s'arrête après deux éléments mais que l'en-tête en promettait trois, l'analyseur sait que quelque chose s'est mal passé.

TOON propose effectivement trois manières de gérer les baies, en choisissant automatiquement la plus efficace :

  1. Inline Primitives : Pour de simples listes de nombres ou de chaînes, TOON le garde compact. tags[3] : administrateur, opérations, développement
  1. Listes standard : Pour les types mixtes, il utilise une syntaxe de liste avec trait d'union similaire à YAML.
  1. Objets tabulaires : Cela change la donne.

Si vous disposez d'un tableau d'objets partageant les mêmes clés (un modèle très courant dans les enregistrements de base de données), TOON passe à un format tabulaire. au lieu de répéter les clés pour chaque ligne, il déclare les clés une fois dans l'en-tête.

Dans l'exemple ci-dessus, users[2]{id,name,role}: nous indique que nous avons 2 lignes et définit le schéma. Les données suivent dans une structure de type CSV. Cela élimine la surcharge massive de jetons liée à la répétition de "id":, "name": et "role": pour chaque utilisateur.

utilisateurs[2]{id,nom,role} : 
1, administrateur Alice, administrateur 
2, Bob Smith, utilisateur 

Délimiteurs et efficacité des jetons

Vous remarquerez peut-être l’utilisation de virgules dans les exemples ci-dessus. TOON prend en charge en fait trois délimiteurs : les virgules (par défaut), les tabulations et les barres (|).

Pourquoi est-ce important ? Tokenisation.

Dans de nombreux tokeniseurs LLM, une virgule suivie d'une citation peut être divisée en plusieurs jetons. Cependant, un caractère de tabulation est souvent symbolisé de manière très propre. TOON vous permet de changer de délimiteur au niveau de l'en-tête du tableau. Si vous utilisez un délimiteur de tabulation, vous n'avez souvent même pas besoin de citer les chaînes contenant des espaces, ce qui compresse davantage vos données.

Le format est suffisamment intelligent pour gérer les « collisions ». Si vos données contiennent le délimiteur actif, TOON cite simplement cette valeur spécifique.

articles[2]{sku,name,qty} : 
A1, nom du widget, 2 
B2, Nom du gadget, 1 

Pliage des touches : aplatir la courbe

Une autre fonctionnalité qui met en évidence l'accent mis par TOON sur l'efficacité est le Key Folding. Les objets profondément imbriqués génèrent généralement un « escalier » d'indentation qui consomme de l'espace horizontal et des jetons.

Si vous avez une hiérarchie profonde dans laquelle les objets intermédiaires n'ont pas de frères et sœurs, TOON peut les réduire en un chemin de notation par points.

Au lieu d'écrire :

Vous pouvez écrire :

données : 
métadonnées : 
éléments[2] : a,b 

Cette fonctionnalité, disponible depuis la spécification v1.5, réduit considérablement le nombre de lignes et les jetons d'indentation. Surtout, cela est entièrement réversible. Lorsque vous décodez les données avec l’expansion du chemin activée, la hiérarchie profonde des objets est parfaitement reconstruite.

data.metadata.items[2] : a,b 

Rigueur et sécurité

Malgré son aspect concis, TOON n'est pas lâche avec les données. Il adhère à un ensemble strict de règles de citation et d’évasion.

Les chaînes restent généralement sans guillemets, ce qui est excellent pour la lisibilité. Cependant, TOON impose des devis pour les cas extrêmes afin de garantir l'intégrité des données. Si une chaîne ressemble à un nombre (par exemple, "05" ou "1e-6"), elle est mise entre guillemets pour éviter qu'elle ne soit analysée comme un nombre. Si une chaîne est un mot réservé comme « true » ou « null », elle est citée.

De plus, TOON normalise les nombres. Il émet des formes décimales canoniques (pas de notation scientifique ni de zéros à droite dans la sortie), garantissant ainsi la cohérence. Il gère même BigInt en toute sécurité ; si un nombre dépasse la plage entière de sécurité, il est sérialisé sous forme de chaîne pour éviter toute perte de précision pendant le transport.

Formes racine

Alors que la plupart d’entre nous travaillent avec des objets racine, TOON est flexible. Il n’est pas nécessaire qu’un document commence par une paire clé-valeur. Il prend en charge les tableaux racine (commençant immédiatement par [N]:) ou même une seule primitive racine. Cette parité avec JSON signifie que vous pouvez échanger TOON dans presque tous les pipelines où JSON est actuellement utilisé, à condition que vous ayez l'analyseur à l'autre extrémité.

Réflexions finales

TOON n'est pas simplement « un autre format ». Il s’agit d’un outil spécialisé pour une époque où les données sont consommées aussi souvent par des modèles probabilistes que par un code déterministe. En combinant le modèle de données rigide de JSON avec la densité de CSV et la lisibilité de YAML, il résout le problème spécifique de l'optimisation de la fenêtre contextuelle sans sacrifier la sécurité des types.

Si vous êtes des agents de construction, peaufinez des modèles ou si vous en avez simplement assez de faire défiler des accolades fermantes sans fin, il est temps de jeter un coup d'œil à TOON.