diff --git a/backend/internal/service/openai_gateway_response_handling.go b/backend/internal/service/openai_gateway_response_handling.go index 436e431163..8857bdd527 100644 --- a/backend/internal/service/openai_gateway_response_handling.go +++ b/backend/internal/service/openai_gateway_response_handling.go @@ -1015,8 +1015,16 @@ func openAIUsageFromGJSON(value gjson.Result) (OpenAIUsage, bool) { if imageOutputTokens == 0 { imageOutputTokens = value.Get("completion_tokens_details.image_tokens").Int() } + // 图片输入 token(如 gpt-image-2 的 /v1/images/edits 带图请求), + // 上游在 input_tokens_details.image_tokens 单独回传,用于图/文输入分价计费。 + // 普通文本请求该字段为 0,走原路径行为不变。 + imageInputTokens := firstPositiveGJSONInt( + value.Get("input_tokens_details.image_tokens"), + value.Get("prompt_tokens_details.image_tokens"), + ) return OpenAIUsage{ InputTokens: int(inputTokens), + ImageInputTokens: imageInputTokens, OutputTokens: int(outputTokens), CacheCreationInputTokens: cacheCreationTokens, CacheReadInputTokens: cacheReadTokens, diff --git a/backend/internal/service/openai_images.go b/backend/internal/service/openai_images.go index 081b5e741b..0772830c40 100644 --- a/backend/internal/service/openai_images.go +++ b/backend/internal/service/openai_images.go @@ -1146,6 +1146,9 @@ func mergeOpenAIUsage(dst *OpenAIUsage, body []byte) { if parsed.CacheReadInputTokens > 0 { dst.CacheReadInputTokens = parsed.CacheReadInputTokens } + if parsed.ImageInputTokens > 0 { + dst.ImageInputTokens = parsed.ImageInputTokens + } if parsed.ImageOutputTokens > 0 { dst.ImageOutputTokens = parsed.ImageOutputTokens }