Quand un appel en flux se comporte mal, ce que vous avez est un mur de lignes d'événements et de données, et les trois choses qui vous intéressent y sont éparpillées : ce que le modèle a réellement dit, pourquoi il s'est arrêté, et ce qu'il a consommé. Le texte arrive en fragments, les arguments d'outils en JSON partiel qui n'analyse qu'à la dernière pièce, et l'usage est réparti entre le premier événement et le dernier. Ici tout est recomposé. Les deux formes de flux courantes sont gérées, car en pratique les deux sont collées, et les événements qui n'analysent pas sont signalés plutôt que sautés en silence.
Fonctionnalités
Texte recomposé depuis ses deltas, dans l’ordre
Arguments d’outils reconstruits depuis du JSON partiel et mis en forme
Raison d’arrêt, modèle et usage extraits
Gère la forme par blocs et la forme choices/delta
Lignes data répétées jointes comme l’exige la spécification
Commentaires de maintien ignorés plutôt que comptés
Événements d’erreur affichés plutôt que sautés
Chaque événement dépliable, avec un compte par nom
Comment utiliser Visionneuse de flux SSE
Collez le flux brut
Lisez le texte recomposé
Vérifiez la raison d’arrêt et l’usage
Dépliez des événements précis si quelque chose reste inexpliqué
Exemple
Entrée
delta: {"type":"text_delta","text":"Order 4471 "}
Sortie
Order 4471 shipped on 30 August.
Des fragments répartis sur six événements, recomposés dans l’ordre.
Erreurs courantes et dépannage
Aucun texte ne sort. — Le flux s’est peut-être terminé avant tout contenu — regardez la liste d’événements et la raison d’arrêt. Un refus ou un événement d’erreur produisent un flux valide et vide.
Les arguments d’outils sont tronqués. — Ils arrivent en JSON partiel sur plusieurs événements. Si le flux a été coupé, le JSON ne se ferme jamais et le fragment brut est affiché.
Certains événements n’analysent pas. — Souvent un flux coupé en plein événement à la copie. Ceux-là sont signalés avec leur index plutôt qu’abandonnés.
Les chiffres d’usage semblent incomplets. — Ils sont répartis dans le flux : tokens d’entrée au début, de sortie à la fin. Un flux privé de ses derniers événements en perd la moitié.
Foire aux questions
Que sont les server-sent events ?
Un format de flux simple : des lignes champ/valeur, événements séparés par des lignes vides. C’est ce qu’utilisent les réponses d’API en flux, d’où le mur qu’un appel raté vous laisse.
Quelles formes de flux sont gérées ?
La forme par blocs, où le texte arrive en deltas typés dans des blocs de contenu, et la forme choices/delta. Les deux sont reconnues automatiquement.
Pourquoi les arguments arrivent-ils en morceaux ?
Ils sont diffusés en JSON partiel pour que le client puisse commencer à afficher avant la fin de l’appel. Les fragments n’analysent donc qu’à l’arrivée du dernier, et un flux tronqué laisse du JSON invalide.
Puis-je voir ce que cela a coûté ?
Le bloc d’usage est extrait quand il est présent, lectures de cache comprises. Il dit ce que l’appel a consommé ; les outils de coût prennent le relais.
Le flux est-il envoyé quelque part ?
Non. Un flux contient toute la réponse et souvent le prompt qui l’a produite, et toute l’analyse se fait dans le navigateur.