diff --git a/packages/ai/src/api/bedrock-converse-stream.ts b/packages/ai/src/api/bedrock-converse-stream.ts index 7a9e776e..d0af8131 100644 --- a/packages/ai/src/api/bedrock-converse-stream.ts +++ b/packages/ai/src/api/bedrock-converse-stream.ts @@ -260,7 +260,11 @@ export const stream: StreamFunction<"bedrock-converse-stream", BedrockOptions> = } else if (item.contentBlockStop) { handleContentBlockStop(item.contentBlockStop, blocks, output, stream); } else if (item.messageStop) { - output.stopReason = mapStopReason(item.messageStop.stopReason); + const { stopReason, errorMessage } = mapStopReason(item.messageStop.stopReason); + output.stopReason = stopReason; + if (errorMessage) { + output.errorMessage = errorMessage; + } } else if (item.metadata) { handleMetadata(item.metadata, model, output); } else if (item.internalServerException) { @@ -281,7 +285,7 @@ export const stream: StreamFunction<"bedrock-converse-stream", BedrockOptions> = } if (output.stopReason === "error" || output.stopReason === "aborted") { - throw new Error("An unknown error occurred"); + throw new Error(output.errorMessage || "An unknown error occurred"); } stream.push({ type: "done", reason: output.stopReason, message: output }); @@ -932,18 +936,18 @@ function convertToolConfig( return { tools: bedrockTools, toolChoice: bedrockToolChoice }; } -function mapStopReason(reason: string | undefined): StopReason { +function mapStopReason(reason: string | undefined): { stopReason: StopReason; errorMessage?: string } { switch (reason) { case BedrockStopReason.END_TURN: case BedrockStopReason.STOP_SEQUENCE: - return "stop"; + return { stopReason: "stop" }; case BedrockStopReason.MAX_TOKENS: case BedrockStopReason.MODEL_CONTEXT_WINDOW_EXCEEDED: - return "length"; + return { stopReason: "length" }; case BedrockStopReason.TOOL_USE: - return "toolUse"; + return { stopReason: "toolUse" }; default: - return "error"; + return reason ? { stopReason: "error", errorMessage: reason } : { stopReason: "error" }; } }