fix(token-usage): fix token usage recording for failed API calls (#7667)

Co-authored-by: Bryan Morgan <bryanmorgan@google.com>
This commit is contained in:
Nick Salerni
2025-09-05 11:22:51 -07:00
committed by GitHub
parent 5634be70f1
commit a7bfab4d96
@@ -151,19 +151,26 @@ export class LoggingContentGenerator implements ContentGenerator {
startTime: number, startTime: number,
userPromptId: string, userPromptId: string,
): AsyncGenerator<GenerateContentResponse> { ): AsyncGenerator<GenerateContentResponse> {
let lastResponse: GenerateContentResponse | undefined;
const responses: GenerateContentResponse[] = []; const responses: GenerateContentResponse[] = [];
let lastUsageMetadata: GenerateContentResponseUsageMetadata | undefined; let lastUsageMetadata: GenerateContentResponseUsageMetadata | undefined;
try { try {
for await (const response of stream) { for await (const response of stream) {
responses.push(response); responses.push(response);
lastResponse = response;
if (response.usageMetadata) { if (response.usageMetadata) {
lastUsageMetadata = response.usageMetadata; lastUsageMetadata = response.usageMetadata;
} }
yield response; yield response;
} }
// Only log successful API response if no error occurred
const durationMs = Date.now() - startTime;
this._logApiResponse(
durationMs,
responses[0]?.modelVersion || '',
userPromptId,
lastUsageMetadata,
JSON.stringify(responses),
);
} catch (error) { } catch (error) {
const durationMs = Date.now() - startTime; const durationMs = Date.now() - startTime;
this._logApiError( this._logApiError(
@@ -174,16 +181,6 @@ export class LoggingContentGenerator implements ContentGenerator {
); );
throw error; throw error;
} }
const durationMs = Date.now() - startTime;
if (lastResponse) {
this._logApiResponse(
durationMs,
responses[0]?.modelVersion || '',
userPromptId,
lastUsageMetadata,
JSON.stringify(responses),
);
}
} }
async countTokens(req: CountTokensParameters): Promise<CountTokensResponse> { async countTokens(req: CountTokensParameters): Promise<CountTokensResponse> {