usage is null on every chunk of a streamed responseToken counts appear for non-streamed calls and never for streamed onesYour own cost tracking reads zero while the provider bills normallyL'utilisation ne peut être connue qu'une fois la génération terminée, il n'y a donc rien à mettre dans les premiers fragments. Plutôt que d'envoyer une valeur provisoire, l'API laisse le champ à null et ajoute un fragment final quand les chiffres existent.
Ce fragment final a un tableau choices vide. Le code qui arrête de lire dès qu'il voit finish_reason, ou qui ignore les fragments sans delta, jette justement le fragment dont il a besoin.
Toutes les implémentations compatibles OpenAI ne prennent pas en charge l'option. Là où elle manque, vous pouvez soit estimer localement, soit lire les chiffres qui font foi dans le journal du fournisseur.
Demandez l'usage et regardez la dernière ligne du flux :
curl -N 'YOUR_BASE_URL/chat/completions' \
-H 'Authorization: Bearer YOUR_KEY' -H 'Content-Type: application/json' \
-d '{"model":"MODEL","stream":true,"stream_options":{"include_usage":true},"messages":[{"role":"user","content":"hi"}]}' | tail -3
Le fragment qui précède [DONE] doit contenir un objet usage rempli avec un tableau choices vide.
Dernière vérification le 2026-10-01. Rédigé à partir de problèmes diagnostiqués sur une passerelle compatible OpenAI en production, pas compilé à partir d'autres sites.