Merge pull request #1278 from rainu/openai-expose-token-details

openai: expose all available token usage details
This commit is contained in:
Travis Cline
2025-08-24 17:33:54 +02:00
committed by GitHub
2 changed files with 37 additions and 12 deletions
+27 -8
View File
@@ -356,11 +356,18 @@ type ChatCompletionChoice struct {
// ChatUsage is the usage of a chat completion request.
type ChatUsage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokensDetails struct {
CachedTokens int `json:"cached_tokens"`
AudioTokens int `json:"audio_tokens"`
} `json:"prompt_tokens_details"`
CompletionTokensDetails struct {
ReasoningTokens int `json:"reasoning_tokens"`
ReasoningTokens int `json:"reasoning_tokens"`
AudioTokens int `json:"audio_tokens"`
AcceptedPredictionTokens int `json:"accepted_prediction_tokens"`
RejectedPredictionTokens int `json:"rejected_prediction_tokens"`
} `json:"completion_tokens_details"`
}
@@ -376,11 +383,18 @@ type ChatCompletionResponse struct {
}
type Usage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokensDetails struct {
CachedTokens int `json:"cached_tokens"`
AudioTokens int `json:"audio_tokens"`
} `json:"prompt_tokens_details"`
CompletionTokensDetails struct {
ReasoningTokens int `json:"reasoning_tokens"`
ReasoningTokens int `json:"reasoning_tokens"`
AudioTokens int `json:"audio_tokens"`
AcceptedPredictionTokens int `json:"accepted_prediction_tokens"`
RejectedPredictionTokens int `json:"rejected_prediction_tokens"`
} `json:"completion_tokens_details"`
}
@@ -584,6 +598,11 @@ func combineStreamingChatResponse(
response.Usage.CompletionTokens = streamResponse.Usage.CompletionTokens
response.Usage.PromptTokens = streamResponse.Usage.PromptTokens
response.Usage.TotalTokens = streamResponse.Usage.TotalTokens
response.Usage.PromptTokensDetails.AudioTokens = streamResponse.Usage.PromptTokensDetails.AudioTokens
response.Usage.PromptTokensDetails.CachedTokens = streamResponse.Usage.PromptTokensDetails.CachedTokens
response.Usage.CompletionTokensDetails.AudioTokens = streamResponse.Usage.CompletionTokensDetails.AudioTokens
response.Usage.CompletionTokensDetails.AcceptedPredictionTokens = streamResponse.Usage.CompletionTokensDetails.AcceptedPredictionTokens
response.Usage.CompletionTokensDetails.RejectedPredictionTokens = streamResponse.Usage.CompletionTokensDetails.RejectedPredictionTokens
response.Usage.CompletionTokensDetails.ReasoningTokens = streamResponse.Usage.CompletionTokensDetails.ReasoningTokens
}
+10 -4
View File
@@ -187,10 +187,16 @@ func (o *LLM) GenerateContent(ctx context.Context, messages []llms.MessageConten
ReasoningContent: c.Message.ReasoningContent,
StopReason: fmt.Sprint(c.FinishReason),
GenerationInfo: map[string]any{
"CompletionTokens": result.Usage.CompletionTokens,
"PromptTokens": result.Usage.PromptTokens,
"TotalTokens": result.Usage.TotalTokens,
"ReasoningTokens": result.Usage.CompletionTokensDetails.ReasoningTokens,
"CompletionTokens": result.Usage.CompletionTokens,
"PromptTokens": result.Usage.PromptTokens,
"TotalTokens": result.Usage.TotalTokens,
"ReasoningTokens": result.Usage.CompletionTokensDetails.ReasoningTokens,
"PromptAudioTokens": result.Usage.PromptTokensDetails.AudioTokens,
"PromptCachedTokens": result.Usage.PromptTokensDetails.CachedTokens,
"CompletionAudioTokens": result.Usage.CompletionTokensDetails.AudioTokens,
"CompletionReasoningTokens": result.Usage.CompletionTokensDetails.ReasoningTokens,
"CompletionAcceptedPredictionTokens": result.Usage.CompletionTokensDetails.AcceptedPredictionTokens,
"CompletionRejectedPredictionTokens": result.Usage.CompletionTokensDetails.RejectedPredictionTokens,
},
}