diff --git a/src/xAI.Tests/SanityChecks.cs b/src/xAI.Tests/SanityChecks.cs index 3540cea..aaf3ad0 100644 --- a/src/xAI.Tests/SanityChecks.cs +++ b/src/xAI.Tests/SanityChecks.cs @@ -255,6 +255,7 @@ void AssertIntegrationTest(ChatResponse response, Func getDateCalls) Assert.NotNull(response); Assert.NotNull(response.ModelId); Assert.NotEmpty(response.Messages); + Assert.NotNull(response.Usage); // Verify client-side tool was invoked Assert.True(getDateCalls() >= 1); diff --git a/src/xAI/GrokChatClient.cs b/src/xAI/GrokChatClient.cs index 27d5ed2..04694e1 100644 --- a/src/xAI/GrokChatClient.cs +++ b/src/xAI/GrokChatClient.cs @@ -94,8 +94,10 @@ async IAsyncEnumerable CompleteChatStreamingCore(IEnumerable ((List)update.Contents).AddRange(output.Delta.ToolCalls.AsContents(text, citations)); - if (update.Contents.Any()) - yield return update; + if (MapToUsage(chunk.Usage) is { } usage) + update.Contents.Add(new UsageContent(usage) { RawRepresentation = chunk.Usage }); + + yield return update; } } } @@ -277,6 +279,8 @@ codeResult.RawRepresentation is ToolCall codeToolCall && { InputTokenCount = usage.PromptTokens, OutputTokenCount = usage.CompletionTokens, + CachedInputTokenCount = usage.CachedPromptTextTokens, + ReasoningTokenCount = usage.ReasoningTokens, TotalTokenCount = usage.TotalTokens };