from
The counts a call actually consumed, read off the framework's own Usage.
Usage.promptTokens becomes inputTokens, Usage.completionTokens becomes outputTokens, and Usage.totalTokens carries straight across. cachedInputTokens and reasoningTokens stay null, because core Usage does not report either one.