Getting promptTokens, completionTokens and totalTokens from Usage has always been 0 in Stream mode. How can I get tokens when Streaming?

If I use below code: String systemMsg = "Please answer user's question based on the knowledge, and today is {current_date}.";

    this.chatClient = ChatClient.builder(chatModel)
            .defaultOptions(Objects.requireNonNull(prompt.getOptions()))
            .defaultSystem(systemMsg)
            .defaultAdvisors(
                    new MessageChatMemoryAdvisor(chatMemory, conversationId, 10)
            )
            .build();

    String promptMsg = """
            This is the knowledge_base information:
            ---------------------
            {question_answer_context}
            ---------------------
    """;

    return this.chatClient.prompt()
            .system(s -> s.params(Map.of("current_date", LocalDate.now().toString())))
            .user(u -> u.text(prompt.getContents()))
            .advisors(
                    new QuestionAnswerAdvisor(vectorStore, searchRequest, promptMsg)
            )
            **.stream()**
            .chatResponse();

Part of ChatResponse is blow: {"metadata" : { "model" : "gpt-4o-2024-08-06", "rateLimit" : { "requestsLimit" : 0, "requestsRemaining" : 0, "requestsReset" : 0.0, "tokensRemaining" : 0, "tokensLimit" : 0, "tokensReset" : 0.0 }, "usage" : { "promptTokens" : 0, "completionTokens" : 0, "totalTokens" : 0, "nativeUsage" : { "promptTokens" : 0, "totalTokens" : 0, "completionTokens" : 0 }, "generationTokens" : 0 }, "promptMetadata" : [ ], "empty" : true }}

**But when I use no stream ** String systemMsg = "Please answer user's question based on the knowledge, and today is {current_date}.";

    this.chatClient = ChatClient.builder(chatModel)
            .defaultOptions(Objects.requireNonNull(prompt.getOptions()))
            .defaultSystem(systemMsg)
            .defaultAdvisors(
                    new MessageChatMemoryAdvisor(chatMemory, conversationId, 10)
            )
            .build();

    String promptMsg = """
            This is the knowledge_base information:
            ---------------------
            {question_answer_context}
            ---------------------
    """;

    return this.chatClient.prompt()
            .system(s -> s.params(Map.of("current_date", LocalDate.now().toString())))
            .user(u -> u.text(prompt.getContents()))
            .advisors(
                    new QuestionAnswerAdvisor(vectorStore, searchRequest, promptMsg)
            )
            **.call()**
            .chatResponse();

Then I can get the tokens {"metadata" : { "model" : "gpt-4o-2024-08-06", "rateLimit" : { "requestsLimit" : 0, "requestsRemaining" : 0, "requestsReset" : 0.0, "tokensRemaining" : 0, "tokensLimit" : 0, "tokensReset" : 0.0 }, "usage" : { "promptTokens" : 1649, "completionTokens" : 261, "totalTokens" : 1910, "nativeUsage" : { "promptTokens" : 0, "totalTokens" : 0, "completionTokens" : 0 }, "generationTokens" : 0 }, "promptMetadata" : [ ], "empty" : true }}

How can I fix this issue?

Comment From: FredLiu0813

I found the answer in previous issues, please close this issue, thanks. when streaming, set streamUsage=true in options.