mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 08:55:28 +08:00
Move OpenAI chat and responses usage accounting onto the shared tokenizer-aware counters so prompt and output usage stay model-aware and conservatively sized.
37 lines
1.4 KiB
Go
37 lines
1.4 KiB
Go
package openai
|
|
|
|
import "ds2api/internal/util"
|
|
|
|
func BuildChatUsageForModel(model, finalPrompt, finalThinking, finalText string) map[string]any {
|
|
promptTokens := util.CountPromptTokens(finalPrompt, model)
|
|
reasoningTokens := util.CountOutputTokens(finalThinking, model)
|
|
completionTokens := util.CountOutputTokens(finalText, model)
|
|
return map[string]any{
|
|
"prompt_tokens": promptTokens,
|
|
"completion_tokens": reasoningTokens + completionTokens,
|
|
"total_tokens": promptTokens + reasoningTokens + completionTokens,
|
|
"completion_tokens_details": map[string]any{
|
|
"reasoning_tokens": reasoningTokens,
|
|
},
|
|
}
|
|
}
|
|
|
|
func BuildChatUsage(finalPrompt, finalThinking, finalText string) map[string]any {
|
|
return BuildChatUsageForModel("", finalPrompt, finalThinking, finalText)
|
|
}
|
|
|
|
func BuildResponsesUsageForModel(model, finalPrompt, finalThinking, finalText string) map[string]any {
|
|
promptTokens := util.CountPromptTokens(finalPrompt, model)
|
|
reasoningTokens := util.CountOutputTokens(finalThinking, model)
|
|
completionTokens := util.CountOutputTokens(finalText, model)
|
|
return map[string]any{
|
|
"input_tokens": promptTokens,
|
|
"output_tokens": reasoningTokens + completionTokens,
|
|
"total_tokens": promptTokens + reasoningTokens + completionTokens,
|
|
}
|
|
}
|
|
|
|
func BuildResponsesUsage(finalPrompt, finalThinking, finalText string) map[string]any {
|
|
return BuildResponsesUsageForModel("", finalPrompt, finalThinking, finalText)
|
|
}
|