{"version":3,"file":"message_inputs.cjs","sources":["../../../../../src/llm/bedrock/utils/message_inputs.ts"],"sourcesContent":["/**\n * Utility functions for converting LangChain messages to Bedrock Converse messages.\n * Ported from @langchain/aws common.js\n */\nimport {\n  type BaseMessage,\n  isAIMessage,\n  parseBase64DataUrl,\n  parseMimeType,\n  MessageContentComplex,\n} from '@langchain/core/messages';\nimport type {\n  BedrockMessage,\n  BedrockSystemContentBlock,\n  BedrockContentBlock,\n  MessageContentReasoningBlock,\n} from '../types';\n\n/**\n * Convert a LangChain reasoning block to a Bedrock reasoning block.\n */\nexport function langchainReasoningBlockToBedrockReasoningBlock(\n  content: MessageContentReasoningBlock\n): {\n  reasoningText?: { text?: string; signature?: string };\n  redactedContent?: Uint8Array;\n} {\n  if (content.reasoningText != null) {\n    return {\n      reasoningText: content.reasoningText,\n    };\n  }\n  if (content.redactedContent != null && content.redactedContent !== '') {\n    return {\n      redactedContent: new Uint8Array(\n        Buffer.from(content.redactedContent, 'base64')\n      ),\n    };\n  }\n  throw new Error('Invalid reasoning content');\n}\n\n/**\n * Concatenate consecutive reasoning blocks in content array.\n */\nexport function concatenateLangchainReasoningBlocks(\n  content: Array<MessageContentComplex | MessageContentReasoningBlock>\n): Array<MessageContentComplex | MessageContentReasoningBlock> {\n  const result: Array<MessageContentComplex | MessageContentReasoningBlock> =\n    [];\n\n  for (const block of content) {\n    if (block.type === 'reasoning_content') {\n      const currentReasoning = block as MessageContentReasoningBlock;\n      const lastIndex = result.length - 1;\n\n      // Check if we can merge with the previous block\n      if (lastIndex >= 0) {\n        const lastBlock = result[lastIndex];\n        if (\n          lastBlock.type === 'reasoning_content' &&\n          (lastBlock as MessageContentReasoningBlock).reasoningText != null &&\n          currentReasoning.reasoningText != null\n        ) {\n          const lastReasoning = lastBlock as MessageContentReasoningBlock;\n          // Merge consecutive reasoning text blocks\n          const lastText = lastReasoning.reasoningText?.text;\n          const currentText = currentReasoning.reasoningText.text;\n          if (\n            lastText != null &&\n            lastText !== '' &&\n            currentText != null &&\n            currentText !== ''\n          ) {\n            lastReasoning.reasoningText!.text = lastText + currentText;\n          } else if (\n            currentReasoning.reasoningText.signature != null &&\n            currentReasoning.reasoningText.signature !== ''\n          ) {\n            lastReasoning.reasoningText!.signature =\n              currentReasoning.reasoningText.signature;\n          }\n          continue;\n        }\n      }\n\n      result.push({ ...block } as MessageContentReasoningBlock);\n    } else {\n      result.push(block);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Extract image info from a base64 string or URL.\n */\nexport function extractImageInfo(base64: string): BedrockContentBlock {\n  // Extract the format from the base64 string\n  const formatMatch = base64.match(/^data:image\\/(\\w+);base64,/);\n  let format: 'gif' | 'jpeg' | 'png' | 'webp' | undefined;\n  if (formatMatch) {\n    const extractedFormat = formatMatch[1].toLowerCase();\n    if (['gif', 'jpeg', 'png', 'webp'].includes(extractedFormat)) {\n      format = extractedFormat as typeof format;\n    }\n  }\n\n  // Remove the data URL prefix if present\n  const base64Data = base64.replace(/^data:image\\/\\w+;base64,/, '');\n\n  // Convert base64 to Uint8Array\n  const binaryString = atob(base64Data);\n  const bytes = new Uint8Array(binaryString.length);\n  for (let i = 0; i < binaryString.length; i += 1) {\n    bytes[i] = binaryString.charCodeAt(i);\n  }\n\n  return {\n    image: {\n      format,\n      source: {\n        bytes,\n      },\n    },\n  };\n}\n\n/**\n * Check if a block has a cache point.\n */\nfunction isDefaultCachePoint(block: unknown): boolean {\n  if (typeof block !== 'object' || block === null) {\n    return false;\n  }\n  if (!('cachePoint' in block)) {\n    return false;\n  }\n  const cachePoint = (block as { cachePoint?: unknown }).cachePoint;\n  if (typeof cachePoint !== 'object' || cachePoint === null) {\n    return false;\n  }\n  if (!('type' in cachePoint)) {\n    return false;\n  }\n  return (cachePoint as { type?: string }).type === 'default';\n}\n\n/**\n * Convert a LangChain content block to a Bedrock Converse content block.\n */\nfunction convertLangChainContentBlockToConverseContentBlock({\n  block,\n  onUnknown = 'throw',\n}: {\n  block: string | MessageContentComplex;\n  onUnknown?: 'throw' | 'passthrough';\n}): BedrockContentBlock {\n  if (typeof block === 'string') {\n    return { text: block };\n  }\n\n  if (block.type === 'text') {\n    return { text: (block as { text: string }).text };\n  }\n\n  if (block.type === 'image_url') {\n    const imageUrl =\n      typeof (block as { image_url: string | { url: string } }).image_url ===\n      'string'\n        ? (block as { image_url: string }).image_url\n        : (block as { image_url: { url: string } }).image_url.url;\n    return extractImageInfo(imageUrl);\n  }\n\n  if (block.type === 'image') {\n    // Handle standard image block format\n    const imageBlock = block as {\n      source_type?: string;\n      url?: string;\n      data?: string;\n      mime_type?: string;\n    };\n    if (\n      imageBlock.source_type === 'url' &&\n      imageBlock.url != null &&\n      imageBlock.url !== ''\n    ) {\n      const parsedData = parseBase64DataUrl({\n        dataUrl: imageBlock.url,\n        asTypedArray: true,\n      });\n      if (parsedData != null) {\n        const parsedMimeType = parseMimeType(parsedData.mime_type);\n        return {\n          image: {\n            format: parsedMimeType.subtype as 'gif' | 'jpeg' | 'png' | 'webp',\n            source: {\n              bytes: parsedData.data as Uint8Array,\n            },\n          },\n        };\n      }\n    } else if (\n      imageBlock.source_type === 'base64' &&\n      imageBlock.data != null &&\n      imageBlock.data !== ''\n    ) {\n      let format: 'gif' | 'jpeg' | 'png' | 'webp' | undefined;\n      if (imageBlock.mime_type != null && imageBlock.mime_type !== '') {\n        const parsedMimeType = parseMimeType(imageBlock.mime_type);\n        format = parsedMimeType.subtype as typeof format;\n      }\n      return {\n        image: {\n          format,\n          source: {\n            bytes: Uint8Array.from(atob(imageBlock.data), (c) =>\n              c.charCodeAt(0)\n            ),\n          },\n        },\n      };\n    }\n    // If it already has the Bedrock image structure, pass through\n    if ((block as { image?: unknown }).image !== undefined) {\n      return {\n        image: (block as { image: unknown }).image,\n      } as BedrockContentBlock;\n    }\n  }\n\n  if (\n    block.type === 'document' &&\n    (block as { document?: unknown }).document !== undefined\n  ) {\n    return {\n      document: (block as { document: unknown }).document,\n    } as BedrockContentBlock;\n  }\n\n  if (isDefaultCachePoint(block)) {\n    return {\n      cachePoint: {\n        type: 'default',\n      },\n    } as BedrockContentBlock;\n  }\n\n  if (onUnknown === 'throw') {\n    throw new Error(`Unsupported content block type: ${block.type}`);\n  } else {\n    return block as unknown as BedrockContentBlock;\n  }\n}\n\n/**\n * Convert a system message to Bedrock system content blocks.\n */\nfunction convertSystemMessageToConverseMessage(\n  msg: BaseMessage\n): BedrockSystemContentBlock[] {\n  if (typeof msg.content === 'string') {\n    return [{ text: msg.content }];\n  } else if (Array.isArray(msg.content) && msg.content.length > 0) {\n    const contentBlocks: BedrockSystemContentBlock[] = [];\n    for (const block of msg.content) {\n      if (\n        typeof block === 'object' &&\n        block.type === 'text' &&\n        typeof (block as { text?: string }).text === 'string'\n      ) {\n        contentBlocks.push({\n          text: (block as { text: string }).text,\n        });\n      } else if (isDefaultCachePoint(block)) {\n        contentBlocks.push({\n          cachePoint: {\n            type: 'default',\n          },\n        } as BedrockSystemContentBlock);\n      } else {\n        break;\n      }\n    }\n    if (msg.content.length === contentBlocks.length) {\n      return contentBlocks;\n    }\n  }\n  throw new Error(\n    'System message content must be either a string, or an array of text blocks, optionally including a cache point.'\n  );\n}\n\n/**\n * Convert an AI message to a Bedrock message.\n */\nfunction convertAIMessageToConverseMessage(msg: BaseMessage): BedrockMessage {\n  // Check for v1 format from other providers (PR #9766 fix)\n  if (msg.response_metadata.output_version === 'v1') {\n    return convertFromV1ToChatBedrockConverseMessage(msg);\n  }\n\n  const assistantMsg: BedrockMessage = {\n    role: 'assistant',\n    content: [],\n  };\n\n  if (typeof msg.content === 'string' && msg.content !== '') {\n    assistantMsg.content?.push({ text: msg.content });\n  } else if (Array.isArray(msg.content)) {\n    const concatenatedBlocks = concatenateLangchainReasoningBlocks(\n      msg.content as Array<MessageContentComplex | MessageContentReasoningBlock>\n    );\n    const contentBlocks: BedrockContentBlock[] = [];\n\n    concatenatedBlocks.forEach((block) => {\n      if (block.type === 'text') {\n        const text = (block as { text?: string }).text ?? '';\n        // Skip completely empty text blocks — LLM sometimes emits these during\n        // response chaining / continuation boundaries. Bedrock rejects empty text.\n        if (text === '') {\n          return;\n        }\n        // Merge whitespace/newlines with previous text blocks to avoid validation errors.\n        const cleanedText = text.replace(/\\n/g, '').trim();\n        if (cleanedText === '') {\n          if (contentBlocks.length > 0) {\n            const lastBlock = contentBlocks[contentBlocks.length - 1];\n            if ('text' in lastBlock) {\n              const mergedTextContent = `${lastBlock.text}${text}`;\n              (lastBlock as { text: string }).text = mergedTextContent;\n            }\n          }\n        } else {\n          contentBlocks.push({ text });\n        }\n      } else if (block.type === 'reasoning_content') {\n        contentBlocks.push({\n          reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(\n            block as MessageContentReasoningBlock\n          ),\n        } as BedrockContentBlock);\n      } else if (isDefaultCachePoint(block)) {\n        contentBlocks.push({\n          cachePoint: {\n            type: 'default',\n          },\n        } as BedrockContentBlock);\n      } else {\n        // Silent healing: unknown content block types are logged and skipped\n        // instead of crashing. This can happen with new LLM features or\n        // edge cases during response chaining.\n        const blockValues = Object.fromEntries(\n          Object.entries(block).filter(([key]) => key !== 'type')\n        );\n        console.warn(\n          `[Bedrock:SilentHeal] Unknown AI message content block type \"${block.type}\" — skipping: ${JSON.stringify(blockValues, null, 2)}`\n        );\n      }\n    });\n\n    assistantMsg.content = [...(assistantMsg.content ?? []), ...contentBlocks];\n  }\n\n  // Important: this must be placed after any reasoning content blocks\n  if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {\n    /**\n     * Bedrock rejects \"final assistant content cannot end with trailing whitespace\"\n     * when a text block has trailing whitespace before tool_use blocks.\n     * Trim trailing whitespace from the last text block to prevent this.\n     */\n    const existingContent = assistantMsg.content ?? [];\n    for (let i = existingContent.length - 1; i >= 0; i--) {\n      const block = existingContent[i];\n      if ('text' in block && typeof block.text === 'string') {\n        block.text = block.text.trimEnd();\n        if (block.text === '') {\n          existingContent.splice(i, 1);\n        }\n        break;\n      }\n    }\n\n    const toolUseBlocks = msg.tool_calls.map((tc) => ({\n      toolUse: {\n        toolUseId: tc.id,\n        name: tc.name,\n        input: tc.args as Record<string, unknown>,\n      },\n    }));\n    assistantMsg.content = [\n      ...existingContent,\n      ...toolUseBlocks,\n    ] as BedrockContentBlock[];\n  }\n\n  return assistantMsg;\n}\n\n/**\n * Convert a v1 format message from other providers to Bedrock format.\n * This handles messages with standard content blocks like tool_call and reasoning.\n * (Implements PR #9766 fix for output_version v1 detection)\n */\nfunction convertFromV1ToChatBedrockConverseMessage(\n  msg: BaseMessage\n): BedrockMessage {\n  const assistantMsg: BedrockMessage = {\n    role: 'assistant',\n    content: [],\n  };\n\n  if (Array.isArray(msg.content)) {\n    for (const block of msg.content) {\n      if (typeof block === 'string') {\n        assistantMsg.content?.push({ text: block });\n      } else if (block.type === 'text') {\n        assistantMsg.content?.push({ text: (block as { text: string }).text });\n      } else if (block.type === 'tool_call') {\n        const toolCall = block as {\n          id: string;\n          name: string;\n          args: Record<string, unknown>;\n        };\n        assistantMsg.content?.push({\n          toolUse: {\n            toolUseId: toolCall.id,\n            name: toolCall.name,\n            input: toolCall.args as Record<string, unknown>,\n          },\n        } as BedrockContentBlock);\n      } else if (block.type === 'reasoning') {\n        const reasoning = block as { reasoning: string };\n        assistantMsg.content?.push({\n          reasoningContent: {\n            reasoningText: { text: reasoning.reasoning },\n          },\n        } as BedrockContentBlock);\n      } else if (block.type === 'reasoning_content') {\n        assistantMsg.content?.push({\n          reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(\n            block as MessageContentReasoningBlock\n          ),\n        } as BedrockContentBlock);\n      }\n    }\n  } else if (typeof msg.content === 'string' && msg.content !== '') {\n    assistantMsg.content?.push({ text: msg.content });\n  }\n\n  // Also handle tool_calls from the message\n  if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {\n    // Check if tool calls are already in content\n    const existingToolUseIds = new Set(\n      assistantMsg.content\n        ?.filter((c) => 'toolUse' in c)\n        .map(\n          (c) => (c as { toolUse: { toolUseId: string } }).toolUse.toolUseId\n        ) ?? []\n    );\n\n    for (const tc of msg.tool_calls) {\n      if (!existingToolUseIds.has(tc.id ?? '')) {\n        assistantMsg.content?.push({\n          toolUse: {\n            toolUseId: tc.id,\n            name: tc.name,\n            input: tc.args as Record<string, unknown>,\n          },\n        } as BedrockContentBlock);\n      }\n    }\n  }\n\n  return assistantMsg;\n}\n\n/**\n * Convert a human message to a Bedrock message.\n */\nfunction convertHumanMessageToConverseMessage(\n  msg: BaseMessage\n): BedrockMessage {\n  const userMessage: BedrockMessage = {\n    role: 'user',\n    content: [],\n  };\n\n  if (typeof msg.content === 'string') {\n    userMessage.content = [{ text: msg.content }];\n  } else if (Array.isArray(msg.content)) {\n    userMessage.content = msg.content.map((block) =>\n      convertLangChainContentBlockToConverseContentBlock({ block })\n    );\n  }\n\n  return userMessage;\n}\n\n/**\n * Convert a tool message to a Bedrock message.\n */\nfunction convertToolMessageToConverseMessage(msg: BaseMessage): BedrockMessage {\n  const toolCallId = (msg as { tool_call_id?: string }).tool_call_id;\n\n  let content: BedrockContentBlock[];\n  if (typeof msg.content === 'string') {\n    content = [{ text: msg.content }];\n  } else if (Array.isArray(msg.content)) {\n    content = msg.content.map((block) =>\n      convertLangChainContentBlockToConverseContentBlock({\n        block,\n        onUnknown: 'passthrough',\n      })\n    );\n  } else {\n    content = [{ text: String(msg.content) }];\n  }\n\n  return {\n    role: 'user',\n    content: [\n      {\n        toolResult: {\n          toolUseId: toolCallId,\n          content: content as { text: string }[],\n        },\n      },\n    ],\n  };\n}\n\n/**\n * Convert LangChain messages to Bedrock Converse messages.\n */\nexport function convertToConverseMessages(messages: BaseMessage[]): {\n  converseMessages: BedrockMessage[];\n  converseSystem: BedrockSystemContentBlock[];\n} {\n  const converseSystem = messages\n    .filter((msg) => msg._getType() === 'system')\n    .flatMap((msg) => convertSystemMessageToConverseMessage(msg));\n\n  const converseMessages = messages\n    .filter((msg) => msg._getType() !== 'system')\n    .map((msg) => {\n      if (msg._getType() === 'ai') {\n        return convertAIMessageToConverseMessage(msg);\n      } else if (msg._getType() === 'human' || msg._getType() === 'generic') {\n        return convertHumanMessageToConverseMessage(msg);\n      } else if (msg._getType() === 'tool') {\n        return convertToolMessageToConverseMessage(msg);\n      } else {\n        throw new Error(`Unsupported message type: ${msg._getType()}`);\n      }\n    });\n\n  // Combine consecutive user tool result messages into a single message\n  const combinedConverseMessages = converseMessages.reduce<BedrockMessage[]>(\n    (acc, curr) => {\n      const lastMessage = acc[acc.length - 1];\n      if (lastMessage == null) {\n        acc.push(curr);\n        return acc;\n      }\n      const lastHasToolResult =\n        lastMessage.content?.some((c) => 'toolResult' in c) === true;\n      const currHasToolResult =\n        curr.content?.some((c) => 'toolResult' in c) === true;\n      if (\n        lastMessage.role === 'user' &&\n        lastHasToolResult &&\n        curr.role === 'user' &&\n        currHasToolResult\n      ) {\n        lastMessage.content = lastMessage.content?.concat(curr.content ?? []);\n      } else {\n        acc.push(curr);\n      }\n      return acc;\n    },\n    []\n  );\n\n  return { converseMessages: combinedConverseMessages, converseSystem };\n}\n"],"names":["parseBase64DataUrl","parseMimeType","isAIMessage"],"mappings":"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"}