From 194bde4651d48769946463d049c99cb49b05968d Mon Sep 17 00:00:00 2001 From: erio Date: Thu, 2 Apr 2026 00:24:35 +0800 Subject: [PATCH] debug: check candidatesTokensDetails in v1internal wrapper --- backend/internal/service/antigravity_gateway_service.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/internal/service/antigravity_gateway_service.go b/backend/internal/service/antigravity_gateway_service.go index 647cf53733..88fb60950c 100644 --- a/backend/internal/service/antigravity_gateway_service.go +++ b/backend/internal/service/antigravity_gateway_service.go @@ -3174,6 +3174,14 @@ func (s *AntigravityGatewayService) handleGeminiStreamingResponse(c *gin.Context // 解包 v1internal 响应 inner, parseErr := s.unwrapV1InternalResponse([]byte(payload)) if parseErr == nil && inner != nil { + // 调试:检查解包前后 candidatesTokensDetails 是否存在 + outerHas := gjson.Get(payload, "response.usageMetadata.candidatesTokensDetails").Exists() + innerHas := gjson.GetBytes(inner, "usageMetadata.candidatesTokensDetails").Exists() + if !outerHas && !innerHas && gjson.GetBytes(inner, "usageMetadata.candidatesTokenCount").Int() > 0 { + logger.LegacyPrintf("service.antigravity_gateway", + "gemini_stream_debug: candidatesTokensDetails missing outer=%t inner=%t outer_usage=%s", + outerHas, innerHas, truncateForLog([]byte(gjson.Get(payload, "response.usageMetadata").Raw), 500)) + } payload = string(inner) }