diff --git a/js/plugins/google-cloud/src/telemetry/generate.ts b/js/plugins/google-cloud/src/telemetry/generate.ts index f235a3ab3d..b2450f4c9f 100644 --- a/js/plugins/google-cloud/src/telemetry/generate.ts +++ b/js/plugins/google-cloud/src/telemetry/generate.ts @@ -299,6 +299,18 @@ class GenerateTelemetry implements Telemetry { output.candidates.forEach((cand, candIdx) => { const parts = cand.message.content.length; + const candCounts = parts > 1 ? ` (${candIdx + 1} of ${parts})` : ''; + logger.logStructured(`Output Candidate[${path}, ${model}]${candCounts}`, { + ...sharedMetadata, + candidateIndex: candIdx, + totalCandidates: candidates, + messageIndex: cand.index, + finishReason: cand.finishReason, + finishMessage: cand.finishMessage, + role: cand.message.role, + usage: cand.usage, + custom: cand.custom, + }); cand.message.content.forEach((part, partIdx) => { const partCounts = this.toPartCounts( partIdx, @@ -321,6 +333,12 @@ class GenerateTelemetry implements Telemetry { finishReason: cand.finishReason, }); }); + if (output.usage) { + logger.logStructured(`Usage[${path}, ${model}]`, { + ...sharedMetadata, + usage: output.usage, + }); + } }); } diff --git a/js/plugins/google-cloud/tests/logs_test.ts b/js/plugins/google-cloud/tests/logs_test.ts index 596c3bb503..127d198a90 100644 --- a/js/plugins/google-cloud/tests/logs_test.ts +++ b/js/plugins/google-cloud/tests/logs_test.ts @@ -185,6 +185,18 @@ describe('GoogleCloudLogs no I/O', () => { logMessages.includes('[info] Output[testFlow, testModel]'), false ); + assert.equal( + logMessages.includes( + '[info] Output Candidate[testFlow > sub1 > sub2 > testModel, testModel]' + ), + false + ); + assert.equal( + logMessages.includes( + '[info] Usage[testFlow > sub1 > sub2 > testModel, testModel]' + ), + false + ); }); }); @@ -336,6 +348,18 @@ describe('GoogleCloudLogs', () => { logMessages.includes('[info] Output[testFlow, testFlow]'), true ); + assert.equal( + logMessages.includes( + '[info] Output Candidate[testFlow > sub1 > sub2 > testModel, testModel]' + ), + true + ); + assert.equal( + logMessages.includes( + '[info] Usage[testFlow > sub1 > sub2 > testModel, testModel]' + ), + true + ); }); });