{"version":3,"file":"message_inputs.cjs","sources":["../../../../../src/llm/anthropic/utils/message_inputs.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable no-console */\n/**\n * This util file contains functions for converting LangChain messages to Anthropic messages.\n */\nimport {\n  type BaseMessage,\n  type SystemMessage,\n  HumanMessage,\n  type AIMessage,\n  type ToolMessage,\n  isAIMessage,\n  type StandardContentBlockConverter,\n  type StandardTextBlock,\n  type StandardImageBlock,\n  type StandardFileBlock,\n  MessageContentComplex,\n  isDataContentBlock,\n  convertToProviderContentBlock,\n  parseBase64DataUrl,\n} from '@langchain/core/messages';\nimport { ToolCall } from '@langchain/core/messages/tool';\nimport {\n  AnthropicImageBlockParam,\n  AnthropicMessageCreateParams,\n  AnthropicTextBlockParam,\n  AnthropicDocumentBlockParam,\n  AnthropicThinkingBlockParam,\n  AnthropicRedactedThinkingBlockParam,\n  AnthropicServerToolUseBlockParam,\n  AnthropicWebSearchToolResultBlockParam,\n  isAnthropicImageBlockParam,\n  AnthropicSearchResultBlockParam,\n  AnthropicCompactionBlockParam,\n  AnthropicToolResponse,\n} from '../types';\n\nfunction _formatImage(imageUrl: string) {\n  const parsed = parseBase64DataUrl({ dataUrl: imageUrl });\n  if (parsed) {\n    return {\n      type: 'base64',\n      media_type: parsed.mime_type,\n      data: parsed.data,\n    };\n  }\n  let parsedUrl: URL;\n\n  try {\n    parsedUrl = new URL(imageUrl);\n  } catch {\n    throw new Error(\n      [\n        `Malformed image URL: ${JSON.stringify(\n          imageUrl\n        )}. Content blocks of type 'image_url' must be a valid http, https, or base64-encoded data URL.`,\n        'Example: data:image/png;base64,/9j/4AAQSk...',\n        'Example: https://example.com/image.jpg',\n      ].join('\\n\\n')\n    );\n  }\n\n  if (parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:') {\n    return {\n      type: 'url',\n      url: imageUrl,\n    };\n  }\n\n  throw new Error(\n    [\n      `Invalid image URL protocol: ${JSON.stringify(\n        parsedUrl.protocol\n      )}. Anthropic only supports images as http, https, or base64-encoded data URLs on 'image_url' content blocks.`,\n      'Example: data:image/png;base64,/9j/4AAQSk...',\n      'Example: https://example.com/image.jpg',\n    ].join('\\n\\n')\n  );\n}\n\nfunction _ensureMessageContents(\n  messages: BaseMessage[]\n): (SystemMessage | HumanMessage | AIMessage)[] {\n  // Merge runs of human/tool messages into single human messages with content blocks.\n  const updatedMsgs = [];\n  for (const message of messages) {\n    if (message._getType() === 'tool') {\n      if (typeof message.content === 'string') {\n        const previousMessage = updatedMsgs[updatedMsgs.length - 1];\n        if (\n          previousMessage._getType() === 'human' &&\n          Array.isArray(previousMessage.content) &&\n          'type' in previousMessage.content[0] &&\n          previousMessage.content[0].type === 'tool_result'\n        ) {\n          // If the previous message was a tool result, we merge this tool message into it.\n          (previousMessage.content as MessageContentComplex[]).push({\n            type: 'tool_result',\n            content: message.content,\n            tool_use_id: (message as ToolMessage).tool_call_id,\n          });\n        } else {\n          // If not, we create a new human message with the tool result.\n          updatedMsgs.push(\n            new HumanMessage({\n              content: [\n                {\n                  type: 'tool_result',\n                  content: message.content,\n                  tool_use_id: (message as ToolMessage).tool_call_id,\n                },\n              ],\n            })\n          );\n        }\n      } else {\n        updatedMsgs.push(\n          new HumanMessage({\n            content: [\n              {\n                type: 'tool_result',\n                // rare case: message.content could be undefined\n                ...(message.content != null\n                  ? { content: _formatContent(message) }\n                  : {}),\n                tool_use_id: (message as ToolMessage).tool_call_id,\n              },\n            ],\n          })\n        );\n      }\n    } else {\n      updatedMsgs.push(message);\n    }\n  }\n  return updatedMsgs;\n}\n\nexport function _convertLangChainToolCallToAnthropic(\n  toolCall: ToolCall\n): AnthropicToolResponse {\n  if (toolCall.id === undefined) {\n    throw new Error('Anthropic requires all tool calls to have an \"id\".');\n  }\n  return {\n    type: 'tool_use',\n    id: toolCall.id,\n    name: toolCall.name,\n    input: toolCall.args,\n  };\n}\n\nconst standardContentBlockConverter: StandardContentBlockConverter<{\n  text: AnthropicTextBlockParam;\n  image: AnthropicImageBlockParam;\n  file: AnthropicDocumentBlockParam;\n}> = {\n  providerName: 'anthropic',\n\n  fromStandardTextBlock(block: StandardTextBlock): AnthropicTextBlockParam {\n    return {\n      type: 'text',\n      text: block.text,\n      ...('citations' in (block.metadata ?? {})\n        ? { citations: block.metadata!.citations }\n        : {}),\n      ...('cache_control' in (block.metadata ?? {})\n        ? { cache_control: block.metadata!.cache_control }\n        : {}),\n    } as AnthropicTextBlockParam;\n  },\n\n  fromStandardImageBlock(block: StandardImageBlock): AnthropicImageBlockParam {\n    if (block.source_type === 'url') {\n      const data = parseBase64DataUrl({\n        dataUrl: block.url,\n        asTypedArray: false,\n      });\n      if (data) {\n        return {\n          type: 'image',\n          source: {\n            type: 'base64',\n            data: data.data,\n            media_type: data.mime_type,\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n        } as AnthropicImageBlockParam;\n      } else {\n        return {\n          type: 'image',\n          source: {\n            type: 'url',\n            url: block.url,\n            media_type: block.mime_type ?? '',\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n        } as AnthropicImageBlockParam;\n      }\n    } else {\n      if (block.source_type === 'base64') {\n        return {\n          type: 'image',\n          source: {\n            type: 'base64',\n            data: block.data,\n            media_type: block.mime_type ?? '',\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n        } as AnthropicImageBlockParam;\n      } else {\n        throw new Error(`Unsupported image source type: ${block.source_type}`);\n      }\n    }\n  },\n\n  fromStandardFileBlock(block: StandardFileBlock): AnthropicDocumentBlockParam {\n    const mime_type = (block.mime_type ?? '').split(';')[0];\n\n    if (block.source_type === 'url') {\n      if (mime_type === 'application/pdf' || mime_type === '') {\n        return {\n          type: 'document',\n          source: {\n            type: 'url',\n            url: block.url,\n            media_type: block.mime_type ?? '',\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n          ...('citations' in (block.metadata ?? {})\n            ? { citations: block.metadata!.citations }\n            : {}),\n          ...('context' in (block.metadata ?? {})\n            ? { context: block.metadata!.context }\n            : {}),\n          ...('title' in (block.metadata ?? {})\n            ? { title: block.metadata!.title }\n            : {}),\n        } as AnthropicDocumentBlockParam;\n      }\n      throw new Error(\n        `Unsupported file mime type for file url source: ${block.mime_type}`\n      );\n    } else if (block.source_type === 'text') {\n      if (mime_type === 'text/plain' || mime_type === '') {\n        return {\n          type: 'document',\n          source: {\n            type: 'text',\n            data: block.text,\n            media_type: block.mime_type ?? '',\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n          ...('citations' in (block.metadata ?? {})\n            ? { citations: block.metadata!.citations }\n            : {}),\n          ...('context' in (block.metadata ?? {})\n            ? { context: block.metadata!.context }\n            : {}),\n          ...('title' in (block.metadata ?? {})\n            ? { title: block.metadata!.title }\n            : {}),\n        } as AnthropicDocumentBlockParam;\n      } else {\n        throw new Error(\n          `Unsupported file mime type for file text source: ${block.mime_type}`\n        );\n      }\n    } else if (block.source_type === 'base64') {\n      if (mime_type === 'application/pdf' || mime_type === '') {\n        return {\n          type: 'document',\n          source: {\n            type: 'base64',\n            data: block.data,\n            media_type: 'application/pdf',\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n          ...('citations' in (block.metadata ?? {})\n            ? { citations: block.metadata!.citations }\n            : {}),\n          ...('context' in (block.metadata ?? {})\n            ? { context: block.metadata!.context }\n            : {}),\n          ...('title' in (block.metadata ?? {})\n            ? { title: block.metadata!.title }\n            : {}),\n        } as AnthropicDocumentBlockParam;\n      } else if (\n        ['image/jpeg', 'image/png', 'image/gif', 'image/webp'].includes(\n          mime_type\n        )\n      ) {\n        return {\n          type: 'document',\n          source: {\n            type: 'content',\n            content: [\n              {\n                type: 'image',\n                source: {\n                  type: 'base64',\n                  data: block.data,\n                  media_type: mime_type as\n                    | 'image/jpeg'\n                    | 'image/png'\n                    | 'image/gif'\n                    | 'image/webp',\n                },\n              },\n            ],\n          },\n          ...('cache_control' in (block.metadata ?? {})\n            ? { cache_control: block.metadata!.cache_control }\n            : {}),\n          ...('citations' in (block.metadata ?? {})\n            ? { citations: block.metadata!.citations }\n            : {}),\n          ...('context' in (block.metadata ?? {})\n            ? { context: block.metadata!.context }\n            : {}),\n          ...('title' in (block.metadata ?? {})\n            ? { title: block.metadata!.title }\n            : {}),\n        } as AnthropicDocumentBlockParam;\n      } else {\n        throw new Error(\n          `Unsupported file mime type for file base64 source: ${block.mime_type}`\n        );\n      }\n    } else {\n      throw new Error(`Unsupported file source type: ${block.source_type}`);\n    }\n  },\n};\n\nfunction _formatContent(message: BaseMessage) {\n  const toolTypes = [\n    'tool_use',\n    'tool_result',\n    'input_json_delta',\n    'server_tool_use',\n    'web_search_tool_result',\n    'web_search_result',\n  ];\n  const textTypes = ['text', 'text_delta'];\n  const { content } = message;\n\n  if (typeof content === 'string') {\n    return content;\n  } else {\n    const contentBlocks = content.map((contentPart) => {\n      /**\n       * Handle malformed blocks that have server tool fields mixed with text type.\n       * These can occur when server_tool_use blocks get mislabeled during aggregation.\n       * Correct their type ONLY if we can confirm it's a server tool by checking the ID prefix.\n       * Anthropic needs both server_tool_use and web_search_tool_result blocks for citations to work.\n       */\n      if (\n        'id' in contentPart &&\n        'name' in contentPart &&\n        'input' in contentPart &&\n        contentPart.type === 'text'\n      ) {\n        const rawPart = contentPart as Record<string, unknown>;\n        const id = rawPart.id as string;\n\n        // Only correct if this is definitely a server tool (ID starts with 'srvtoolu_')\n        if (id && id.startsWith('srvtoolu_')) {\n          let input = rawPart.input;\n\n          // Ensure input is an object\n          if (typeof input === 'string') {\n            try {\n              input = JSON.parse(input);\n            } catch {\n              input = {};\n            }\n          }\n\n          const corrected: AnthropicServerToolUseBlockParam = {\n            type: 'server_tool_use',\n            id,\n            name: 'web_search',\n            input: input as Record<string, unknown>,\n          };\n\n          return corrected;\n        }\n\n        // If it's not a server tool, skip it (return null to filter it out)\n        return null;\n      }\n\n      /**\n       * Handle malformed web_search_tool_result blocks marked as text.\n       * These have tool_use_id and nested content - fix their type instead of filtering.\n       * Only correct if we can confirm it's a web search result by checking the tool_use_id prefix.\n       *\n       * Handles both success results (array content) and error results (object with error_code).\n       */\n      if (\n        'tool_use_id' in contentPart &&\n        'content' in contentPart &&\n        contentPart.type === 'text'\n      ) {\n        const rawPart = contentPart as Record<string, unknown>;\n        const toolUseId = rawPart.tool_use_id as string;\n        const content = rawPart.content;\n\n        // Only correct if this is definitely a server tool result (tool_use_id starts with 'srvtoolu_')\n        if (toolUseId && toolUseId.startsWith('srvtoolu_')) {\n          // Verify content is either an array (success) or error object\n          const isValidContent =\n            Array.isArray(content) ||\n            (content != null &&\n              typeof content === 'object' &&\n              'type' in content &&\n              (content as Record<string, unknown>).type ===\n                'web_search_tool_result_error');\n\n          if (isValidContent) {\n            const corrected: AnthropicWebSearchToolResultBlockParam = {\n              type: 'web_search_tool_result',\n              tool_use_id: toolUseId,\n              content:\n                content as AnthropicWebSearchToolResultBlockParam['content'],\n            };\n            return corrected;\n          }\n        }\n\n        // If it's not a recognized server tool result format, skip it (return null to filter it out)\n        return null;\n      }\n\n      if (isDataContentBlock(contentPart)) {\n        return convertToProviderContentBlock(\n          contentPart,\n          standardContentBlockConverter\n        );\n      }\n\n      const cacheControl =\n        'cache_control' in contentPart ? contentPart.cache_control : undefined;\n\n      if (contentPart.type === 'image_url') {\n        let source;\n        if (typeof contentPart.image_url === 'string') {\n          source = _formatImage(contentPart.image_url);\n        } else {\n          source = _formatImage(contentPart.image_url.url);\n        }\n        return {\n          type: 'image' as const, // Explicitly setting the type as \"image\"\n          source,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n        };\n      } else if (isAnthropicImageBlockParam(contentPart)) {\n        return contentPart;\n      } else if (contentPart.type === 'document') {\n        // PDF\n        return {\n          ...contentPart,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n        };\n      } else if (contentPart.type === 'thinking') {\n        const block: AnthropicThinkingBlockParam = {\n          type: 'thinking' as const, // Explicitly setting the type as \"thinking\"\n          thinking: contentPart.thinking,\n          signature: contentPart.signature,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n        };\n        return block;\n      } else if (contentPart.type === 'redacted_thinking') {\n        const block: AnthropicRedactedThinkingBlockParam = {\n          type: 'redacted_thinking' as const, // Explicitly setting the type as \"redacted_thinking\"\n          data: contentPart.data,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n        };\n        return block;\n      } else if (contentPart.type === 'search_result') {\n        const block: AnthropicSearchResultBlockParam = {\n          type: 'search_result' as const,\n          title: contentPart.title,\n          source: contentPart.source,\n          ...('cache_control' in contentPart && contentPart.cache_control\n            ? { cache_control: contentPart.cache_control }\n            : {}),\n          ...('citations' in contentPart && contentPart.citations\n            ? { citations: contentPart.citations }\n            : {}),\n          content: contentPart.content,\n        };\n        return block;\n      } else if (contentPart.type === 'compaction') {\n        const block: AnthropicCompactionBlockParam = {\n          type: 'compaction' as const,\n          content: contentPart.content,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n        };\n        return block;\n      } else if (\n        textTypes.find((t) => t === contentPart.type) &&\n        'text' in contentPart\n      ) {\n        // Assuming contentPart is of type MessageContentText here\n        return {\n          type: 'text' as const, // Explicitly setting the type as \"text\"\n          text: contentPart.text,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n          ...('citations' in contentPart && contentPart.citations\n            ? { citations: contentPart.citations }\n            : {}),\n        };\n      } else if (toolTypes.find((t) => t === contentPart.type)) {\n        const contentPartCopy = { ...contentPart };\n        if ('index' in contentPartCopy) {\n          // Anthropic does not support passing the index field here, so we remove it.\n          delete contentPartCopy.index;\n        }\n\n        if (contentPartCopy.type === 'input_json_delta') {\n          // `input_json_delta` type only represents yielding partial tool inputs\n          // and is not a valid type for Anthropic messages.\n          contentPartCopy.type = 'tool_use';\n        }\n\n        if ('input' in contentPartCopy) {\n          // Anthropic tool use inputs should be valid objects, when applicable.\n          if (typeof contentPartCopy.input === 'string') {\n            try {\n              contentPartCopy.input = JSON.parse(contentPartCopy.input);\n            } catch {\n              contentPartCopy.input = {};\n            }\n          }\n        }\n\n        /**\n         * For multi-turn conversations with citations, we must preserve ALL blocks\n         * including server_tool_use, web_search_tool_result, and web_search_result.\n         * Citations reference search results by index, so filtering changes indices and breaks references.\n         *\n         * The ToolNode already handles skipping server tool invocations via the srvtoolu_ prefix check.\n         */\n\n        // TODO: Fix when SDK types are fixed\n        return {\n          ...contentPartCopy,\n          ...(cacheControl ? { cache_control: cacheControl } : {}),\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        } as any;\n      } else if (\n        'functionCall' in contentPart &&\n        contentPart.functionCall &&\n        typeof contentPart.functionCall === 'object' &&\n        isAIMessage(message)\n      ) {\n        const correspondingToolCall = message.tool_calls?.find(\n          (toolCall) => toolCall.name === contentPart.functionCall.name\n        );\n        if (!correspondingToolCall) {\n          throw new Error(\n            `Could not find tool call for function call ${contentPart.functionCall.name}`\n          );\n        }\n        // Google GenAI models include a `functionCall` object inside content. We should ignore it as Anthropic will not support it.\n        return {\n          id: correspondingToolCall.id,\n          type: 'tool_use',\n          name: correspondingToolCall.name,\n          input: contentPart.functionCall.args,\n        };\n      } else {\n        console.error(\n          'Unsupported content part:',\n          JSON.stringify(contentPart, null, 2)\n        );\n        throw new Error('Unsupported message content format');\n      }\n    });\n    return contentBlocks.filter((block) => block !== null);\n  }\n}\n\n/**\n * Formats messages as a prompt for the model.\n * Used in LangSmith, export is important here.\n * @param messages The base messages to format as a prompt.\n * @returns The formatted prompt.\n */\nexport function _convertMessagesToAnthropicPayload(\n  messages: BaseMessage[]\n): AnthropicMessageCreateParams {\n  const mergedMessages = _ensureMessageContents(messages);\n  let system;\n  if (mergedMessages.length > 0 && mergedMessages[0]._getType() === 'system') {\n    system = messages[0].content;\n  }\n  const conversationMessages =\n    system !== undefined ? mergedMessages.slice(1) : mergedMessages;\n  const formattedMessages = conversationMessages.map((message) => {\n    let role;\n    if (message._getType() === 'human') {\n      role = 'user' as const;\n    } else if (message._getType() === 'ai') {\n      role = 'assistant' as const;\n    } else if (message._getType() === 'tool') {\n      role = 'user' as const;\n    } else if (message._getType() === 'system') {\n      throw new Error(\n        'System messages are only permitted as the first passed message.'\n      );\n    } else {\n      throw new Error(`Message type \"${message._getType()}\" is not supported.`);\n    }\n    if (isAIMessage(message) && !!message.tool_calls?.length) {\n      if (typeof message.content === 'string') {\n        if (message.content === '') {\n          return {\n            role,\n            content: message.tool_calls.map(\n              _convertLangChainToolCallToAnthropic\n            ),\n          };\n        } else {\n          return {\n            role,\n            content: [\n              { type: 'text', text: message.content },\n              ...message.tool_calls.map(_convertLangChainToolCallToAnthropic),\n            ],\n          };\n        }\n      } else {\n        const { content } = message;\n        const hasMismatchedToolCalls = !message.tool_calls.every(\n          (toolCall) =>\n            !!content.find(\n              (contentPart) =>\n                (contentPart.type === 'tool_use' ||\n                  contentPart.type === 'input_json_delta' ||\n                  contentPart.type === 'server_tool_use') &&\n                contentPart.id === toolCall.id\n            )\n        );\n        if (hasMismatchedToolCalls) {\n          console.warn(\n            'The \"tool_calls\" field on a message is only respected if content is a string.'\n          );\n        }\n        return {\n          role,\n          content: _formatContent(message),\n        };\n      }\n    } else {\n      return {\n        role,\n        content: _formatContent(message),\n      };\n    }\n  });\n  return {\n    messages: mergeMessages(formattedMessages),\n    system,\n  } as AnthropicMessageCreateParams;\n}\n\nfunction mergeMessages(messages: AnthropicMessageCreateParams['messages']) {\n  if (!messages || messages.length <= 1) {\n    return messages;\n  }\n\n  const result: AnthropicMessageCreateParams['messages'] = [];\n  let currentMessage = messages[0];\n\n  type ContentBlocks = Exclude<\n    AnthropicMessageCreateParams['messages'][number]['content'],\n    string\n  >;\n  const normalizeContent = (\n    content: AnthropicMessageCreateParams['messages'][number]['content']\n  ): ContentBlocks => {\n    if (typeof content === 'string') {\n      return [{ type: 'text', text: content }];\n    }\n    return content;\n  };\n\n  const isToolResultMessage = (msg: (typeof messages)[0]) => {\n    if (msg.role !== 'user') return false;\n\n    if (typeof msg.content === 'string') {\n      return false;\n    }\n\n    return (\n      Array.isArray(msg.content) &&\n      msg.content.every((item) => item.type === 'tool_result')\n    );\n  };\n\n  for (let i = 1; i < messages.length; i += 1) {\n    const nextMessage = messages[i];\n\n    if (\n      isToolResultMessage(currentMessage) &&\n      isToolResultMessage(nextMessage)\n    ) {\n      // Merge the messages by combining their content arrays\n      currentMessage = {\n        ...currentMessage,\n        content: [\n          ...normalizeContent(currentMessage.content),\n          ...normalizeContent(nextMessage.content),\n        ],\n      };\n    } else {\n      result.push(currentMessage);\n      currentMessage = nextMessage;\n    }\n  }\n\n  result.push(currentMessage);\n  return result;\n}\n"],"names":["parseBase64DataUrl","messages","HumanMessage","isDataContentBlock","convertToProviderContentBlock","isAnthropicImageBlockParam","isAIMessage"],"mappings":"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"}