From 613527b11283347f3b8fbd108ff696c38b51ee62 Mon Sep 17 00:00:00 2001 From: Nic Luciano Date: Sun, 17 May 2026 13:36:12 -0400 Subject: [PATCH] fix(@effect/ai-amazon-bedrock): emit finish part after metadata so streaming usage is populated --- .../src/AmazonBedrockLanguageModel.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/ai/amazon-bedrock/src/AmazonBedrockLanguageModel.ts b/packages/ai/amazon-bedrock/src/AmazonBedrockLanguageModel.ts index dbcadd08643..fc9c30855bf 100644 --- a/packages/ai/amazon-bedrock/src/AmazonBedrockLanguageModel.ts +++ b/packages/ai/amazon-bedrock/src/AmazonBedrockLanguageModel.ts @@ -638,6 +638,7 @@ const makeStreamResponse: ( let trace: ConverseTrace | undefined = undefined let cacheWriteInputTokens: number | undefined = undefined + let pendingFinishReason: typeof Response.FinishReason.Encoded | undefined = undefined const usage: Mutable = { inputTokens: undefined, outputTokens: undefined, @@ -659,16 +660,7 @@ const makeStreamResponse: ( } case "messageStop": { - const reason = InternalUtilities.resolveFinishReason(event.messageStop.stopReason) - parts.push({ - type: "finish", - reason, - usage, - metadata: { - bedrock: { trace, usage: { cacheWriteInputTokens } } - } - }) - + pendingFinishReason = InternalUtilities.resolveFinishReason(event.messageStop.stopReason) break } @@ -890,6 +882,17 @@ const makeStreamResponse: ( if (Predicate.isNotUndefined(event.metadata.trace)) { trace = event.metadata.trace } + if (Predicate.isNotUndefined(pendingFinishReason)) { + parts.push({ + type: "finish", + reason: pendingFinishReason, + usage, + metadata: { + bedrock: { trace, usage: { cacheWriteInputTokens } } + } + }) + pendingFinishReason = undefined + } break }