From 468a750e032451459e4aed463f29bd61db866d25 Mon Sep 17 00:00:00 2001 From: Und3rf10w Date: Fri, 28 Feb 2025 17:10:05 -0500 Subject: [PATCH] fix(provider/amazon-bedrock): Mimic doGenerate reasoning response formatting --- .../src/bedrock-chat-language-model.ts | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/packages/amazon-bedrock/src/bedrock-chat-language-model.ts b/packages/amazon-bedrock/src/bedrock-chat-language-model.ts index a6b3dde63890..0302ac582edd 100644 --- a/packages/amazon-bedrock/src/bedrock-chat-language-model.ts +++ b/packages/amazon-bedrock/src/bedrock-chat-language-model.ts @@ -223,6 +223,35 @@ export class BedrockChatLanguageModel implements LanguageModelV1 { } : undefined; + const reasoningDetails = (response.output?.message?.content || []) + .filter( + part => + part.reasoningContent && + (('reasoningText' in part.reasoningContent && + part.reasoningContent.reasoningText.text != null) || + ('redactedReasoning' in part.reasoningContent && + part.reasoningContent.redactedReasoning.data != null)), + ) + .map(part => { + const reasoningContent = part.reasoningContent!; + + if ('reasoningText' in reasoningContent) { + return { + type: 'text' as const, + text: reasoningContent.reasoningText.text, + ...(reasoningContent.reasoningText.signature && { + signature: reasoningContent.reasoningText.signature, + }), + }; + } else { + // Must be redactedReasoning + return { + type: 'redacted' as const, + data: reasoningContent.redactedReasoning.data, + }; + } + }); + return { text: response.output?.message?.content @@ -246,35 +275,7 @@ export class BedrockChatLanguageModel implements LanguageModelV1 { rawCall: { rawPrompt, rawSettings }, rawResponse: { headers: responseHeaders }, warnings, - reasoning: - response.output?.message?.content - ?.filter( - part => - part.reasoningContent && - (('reasoningText' in part.reasoningContent && - part.reasoningContent.reasoningText.text != null) || - ('redactedReasoning' in part.reasoningContent && - part.reasoningContent.redactedReasoning.data != null)), - ) - ?.map(part => { - const reasoningContent = part.reasoningContent!; - - if ('reasoningText' in reasoningContent) { - return { - type: 'text' as const, - text: reasoningContent.reasoningText.text, - ...(reasoningContent.reasoningText.signature && { - signature: reasoningContent.reasoningText.signature, - }), - }; - } else { - // Must be redactedReasoning - return { - type: 'redacted' as const, - data: reasoningContent.redactedReasoning.data, - }; - } - }) || undefined, + reasoning: reasoningDetails, ...(providerMetadata && { providerMetadata }), }; }