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 normallyZużycia nie da się poznać, zanim generowanie się nie skończy, więc we wczesnych fragmentach nie ma czego wstawić. Zamiast wysyłać wartość zastępczą, API zostawia pole puste i dodaje ostatni fragment, gdy liczby już istnieją.
Ten ostatni fragment ma pustą tablicę choices. Kod, który przestaje czytać, gdy tylko zobaczy finish_reason, albo pomija fragmenty bez delty, wyrzuca dokładnie ten fragment, którego potrzebuje.
Nie każda implementacja zgodna z OpenAI obsługuje tę opcję. Tam, gdzie jej brak, możesz albo szacować lokalnie, albo czytać wiążące liczby z logu samego dostawcy.
Poproś o usage i spójrz na ostatnią linię strumienia:
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
Fragment przed [DONE] powinien zawierać wypełniony obiekt usage z pustą tablicą choices.
Ostatnio sprawdzono 2026-10-01. Napisane na podstawie problemów zdiagnozowanych na działającej bramce zgodnej z OpenAI, a nie zebrane z innych stron.