{"version":3,"file":"core.mjs","sources":["../../../src/messages/core.ts"],"sourcesContent":["// src/messages.ts\nimport {\n  AIMessageChunk,\n  HumanMessage,\n  ToolMessage,\n  AIMessage,\n  BaseMessage,\n} from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type * as t from '@/types';\nimport { Providers, MessageTypes } from '@/common';\n\nexport function getConverseOverrideMessage({\n  userMessage,\n  lastMessageX,\n  lastMessageY,\n}: {\n  userMessage: string[];\n  lastMessageX: AIMessageChunk | null;\n  lastMessageY: ToolMessage;\n}): HumanMessage {\n  const content = `\nUser: ${userMessage[1]}\n\n---\n# YOU HAVE ALREADY RESPONDED TO THE LATEST USER MESSAGE:\n\n# Observations:\n- ${lastMessageX?.content}\n\n# Tool Calls:\n- ${lastMessageX?.tool_calls?.join('\\n- ')}\n\n# Tool Responses:\n- ${lastMessageY.content}\n`;\n\n  return new HumanMessage(content);\n}\n\nconst _allowedTypes = ['image_url', 'text', 'tool_use', 'tool_result'];\nconst allowedTypesByProvider: Record<string, string[]> = {\n  default: _allowedTypes,\n  [Providers.ANTHROPIC]: [..._allowedTypes, 'thinking', 'redacted_thinking'],\n  [Providers.BEDROCK]: [..._allowedTypes, 'reasoning_content'],\n  [Providers.OPENAI]: _allowedTypes,\n};\n\nconst modifyContent = ({\n  provider,\n  messageType,\n  content,\n}: {\n  provider: Providers;\n  messageType: string;\n  content: t.ExtendedMessageContent[];\n}): t.ExtendedMessageContent[] => {\n  const allowedTypes =\n    allowedTypesByProvider[provider] ?? allowedTypesByProvider.default;\n  return content.map((item) => {\n    if (\n      item &&\n      typeof item === 'object' &&\n      'type' in item &&\n      item.type != null &&\n      item.type\n    ) {\n      let newType = item.type;\n      if (newType.endsWith('_delta')) {\n        newType = newType.replace('_delta', '');\n      }\n      if (!allowedTypes.includes(newType)) {\n        newType = 'text';\n      }\n\n      /* Handle the edge case for empty object 'tool_use' input in AI messages */\n      if (\n        messageType === 'ai' &&\n        newType === 'tool_use' &&\n        'input' in item &&\n        item.input === ''\n      ) {\n        return { ...item, type: newType, input: '{}' };\n      }\n\n      return { ...item, type: newType };\n    }\n    return item;\n  });\n};\n\ntype ContentBlock =\n  | Partial<t.BedrockReasoningContentText>\n  | t.MessageDeltaUpdate;\n\nfunction reduceBlocks(blocks: ContentBlock[]): ContentBlock[] {\n  const reduced: ContentBlock[] = [];\n\n  for (const block of blocks) {\n    const lastBlock = reduced[reduced.length - 1] as ContentBlock | undefined;\n\n    // Merge consecutive 'reasoning_content'\n    if (\n      block.type === 'reasoning_content' &&\n      lastBlock?.type === 'reasoning_content'\n    ) {\n      // append text if exists\n      if (block.reasoningText?.text != null && block.reasoningText.text) {\n        (\n          lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n        ).text =\n          (lastBlock.reasoningText?.text ?? '') + block.reasoningText.text;\n      }\n      // preserve the signature if exists\n      if (\n        block.reasoningText?.signature != null &&\n        block.reasoningText.signature\n      ) {\n        (\n          lastBlock.reasoningText as t.BedrockReasoningContentText['reasoningText']\n        ).signature = block.reasoningText.signature;\n      }\n    }\n    // Merge consecutive 'text'\n    else if (block.type === 'text' && lastBlock?.type === 'text') {\n      lastBlock.text += block.text;\n    }\n    // add a new block as it's a different type or first element\n    else {\n      // deep copy to avoid mutation of original\n      reduced.push(JSON.parse(JSON.stringify(block)));\n    }\n  }\n\n  return reduced;\n}\n\nexport function modifyDeltaProperties(\n  provider: Providers,\n  obj?: AIMessageChunk\n): AIMessageChunk | undefined {\n  if (!obj || typeof obj !== 'object') return obj;\n\n  const messageType = (obj as Partial<AIMessageChunk>)._getType\n    ? obj._getType()\n    : '';\n\n  if (provider === Providers.BEDROCK && Array.isArray(obj.content)) {\n    obj.content = reduceBlocks(obj.content as ContentBlock[]);\n  }\n  if (Array.isArray(obj.content)) {\n    obj.content = modifyContent({\n      provider,\n      messageType,\n      content: obj.content,\n    });\n  }\n  if (\n    (obj as Partial<AIMessageChunk>).lc_kwargs &&\n    Array.isArray(obj.lc_kwargs.content)\n  ) {\n    if (provider === Providers.BEDROCK) {\n      obj.lc_kwargs.content = reduceBlocks(\n        obj.lc_kwargs.content as ContentBlock[]\n      );\n    }\n    obj.lc_kwargs.content = modifyContent({\n      provider,\n      messageType,\n      content: obj.lc_kwargs.content,\n    });\n  }\n  return obj;\n}\n\nexport function formatAnthropicMessage(message: AIMessageChunk): AIMessage {\n  if (!message.tool_calls || message.tool_calls.length === 0) {\n    return new AIMessage({ content: message.content });\n  }\n\n  const toolCallMap = new Map(message.tool_calls.map((tc) => [tc.id, tc]));\n  let formattedContent: string | t.ExtendedMessageContent[];\n\n  if (Array.isArray(message.content)) {\n    formattedContent = message.content.reduce<t.ExtendedMessageContent[]>(\n      (acc, item) => {\n        if (typeof item === 'object') {\n          const extendedItem = item as t.ExtendedMessageContent;\n          if (\n            extendedItem.type === 'text' &&\n            extendedItem.text != null &&\n            extendedItem.text\n          ) {\n            acc.push({ type: 'text', text: extendedItem.text });\n          } else if (\n            extendedItem.type === 'tool_use' &&\n            extendedItem.id != null &&\n            extendedItem.id\n          ) {\n            const toolCall = toolCallMap.get(extendedItem.id);\n            if (toolCall) {\n              acc.push({\n                type: 'tool_use',\n                id: extendedItem.id,\n                name: toolCall.name,\n                input: toolCall.args as unknown as string,\n              });\n            }\n          } else if (\n            'input' in extendedItem &&\n            extendedItem.input != null &&\n            extendedItem.input\n          ) {\n            try {\n              const parsedInput = JSON.parse(extendedItem.input);\n              const toolCall = message.tool_calls?.find(\n                (tc) => tc.args.input === parsedInput.input\n              );\n              if (toolCall) {\n                acc.push({\n                  type: 'tool_use',\n                  id: toolCall.id,\n                  name: toolCall.name,\n                  input: toolCall.args as unknown as string,\n                });\n              }\n            } catch {\n              if (extendedItem.input) {\n                acc.push({ type: 'text', text: extendedItem.input });\n              }\n            }\n          }\n        } else if (typeof item === 'string') {\n          acc.push({ type: 'text', text: item });\n        }\n        return acc;\n      },\n      []\n    );\n  } else if (typeof message.content === 'string') {\n    formattedContent = message.content;\n  } else {\n    formattedContent = [];\n  }\n\n  // const formattedToolCalls: ToolCall[] = message.tool_calls.map(toolCall => ({\n  //   id: toolCall.id ?? '',\n  //   name: toolCall.name,\n  //   args: toolCall.args,\n  //   type: 'tool_call',\n  // }));\n\n  const formattedToolCalls: t.AgentToolCall[] = message.tool_calls.map(\n    (toolCall) => ({\n      id: toolCall.id ?? '',\n      type: 'function',\n      function: {\n        name: toolCall.name,\n        arguments: toolCall.args,\n      },\n    })\n  );\n\n  return new AIMessage({\n    content: formattedContent,\n    tool_calls: formattedToolCalls as ToolCall[],\n    additional_kwargs: {\n      ...message.additional_kwargs,\n    },\n  });\n}\n\nexport function convertMessagesToContent(\n  messages: BaseMessage[]\n): t.MessageContentComplex[] {\n  const processedContent: t.MessageContentComplex[] = [];\n\n  const addContentPart = (message: BaseMessage | null): void => {\n    const content =\n      message?.lc_kwargs.content != null\n        ? message.lc_kwargs.content\n        : message?.content;\n    if (content === undefined) {\n      return;\n    }\n    if (typeof content === 'string') {\n      processedContent.push({\n        type: 'text',\n        text: content,\n      });\n    } else if (Array.isArray(content)) {\n      const filteredContent = content.filter(\n        (item) => item != null && item.type !== 'tool_use'\n      );\n      processedContent.push(...filteredContent);\n    }\n  };\n\n  let currentAIMessageIndex = -1;\n  const toolCallMap = new Map<string, t.CustomToolCall>();\n\n  for (let i = 0; i < messages.length; i++) {\n    const message = messages[i] as BaseMessage | null;\n    const messageType = message?._getType();\n\n    if (\n      messageType === 'ai' &&\n      ((message as AIMessage).tool_calls?.length ?? 0) > 0\n    ) {\n      const tool_calls = (message as AIMessage).tool_calls || [];\n      for (const tool_call of tool_calls) {\n        if (tool_call.id == null || !tool_call.id) {\n          continue;\n        }\n\n        toolCallMap.set(tool_call.id, tool_call);\n      }\n\n      addContentPart(message);\n      currentAIMessageIndex = processedContent.length - 1;\n      continue;\n    } else if (\n      messageType === 'tool' &&\n      (message as ToolMessage).tool_call_id\n    ) {\n      const id = (message as ToolMessage).tool_call_id;\n      const output = (message as ToolMessage).content;\n      const tool_call = toolCallMap.get(id);\n      if (currentAIMessageIndex === -1) {\n        processedContent.push({ type: 'text', text: '' });\n        currentAIMessageIndex = processedContent.length - 1;\n      }\n      const contentPart = processedContent[currentAIMessageIndex];\n      processedContent.push({\n        type: 'tool_call',\n        tool_call: Object.assign({}, tool_call, { output }),\n      });\n      const tool_call_ids = contentPart.tool_call_ids || [];\n      tool_call_ids.push(id);\n      contentPart.tool_call_ids = tool_call_ids;\n      continue;\n    } else if (messageType !== 'ai') {\n      continue;\n    }\n\n    addContentPart(message);\n  }\n\n  return processedContent;\n}\n\nexport function formatAnthropicArtifactContent(messages: BaseMessage[]): void {\n  const lastMessage = messages[messages.length - 1];\n  // Use getType() instead of instanceof to avoid module mismatch issues\n  if (lastMessage.getType() !== 'tool') return;\n  const lastToolMessage = lastMessage as ToolMessage;\n\n  // Find the latest AIMessage with tool_calls that this tool message belongs to\n  const latestAIParentIndex = findLastIndex(\n    messages,\n    (msg) =>\n      (msg instanceof AIMessageChunk &&\n        (msg.tool_calls?.length ?? 0) > 0 &&\n        msg.tool_calls?.some((tc) => tc.id === lastToolMessage.tool_call_id)) ??\n      false\n  );\n\n  if (latestAIParentIndex === -1) return;\n\n  // Check if any tool message after the AI message has array artifact content\n  // Use getType() instead of instanceof to avoid module mismatch issues\n  const hasArtifactContent = messages.some(\n    (msg, i) =>\n      i > latestAIParentIndex &&\n      msg.getType() === MessageTypes.TOOL &&\n      (msg as ToolMessage).artifact != null &&\n      (msg as ToolMessage).artifact?.content != null &&\n      Array.isArray((msg as ToolMessage).artifact.content)\n  );\n\n  if (!hasArtifactContent) return;\n\n  const message = messages[latestAIParentIndex] as AIMessageChunk;\n  const toolCallIds = message.tool_calls?.map((tc) => tc.id) ?? [];\n\n  for (let j = latestAIParentIndex + 1; j < messages.length; j++) {\n    const msg = messages[j];\n    // Use getType() instead of instanceof to avoid module mismatch issues\n    if (\n      msg.getType() === MessageTypes.TOOL &&\n      toolCallIds.includes((msg as ToolMessage).tool_call_id) &&\n      (msg as ToolMessage).artifact != null &&\n      Array.isArray((msg as ToolMessage).artifact?.content) &&\n      Array.isArray(msg.content)\n    ) {\n      msg.content = (msg.content as t.MessageContentComplex[]).concat(\n        (msg as ToolMessage).artifact.content\n      );\n    }\n  }\n}\n\nexport function formatArtifactPayload(messages: BaseMessage[]): void {\n  const lastMessageY = messages[messages.length - 1];\n  // Use getType() instead of instanceof to avoid module mismatch issues\n  if (lastMessageY.getType() !== 'tool') return;\n  const lastToolMessage = lastMessageY as ToolMessage;\n\n  // Find the latest AIMessage with tool_calls that this tool message belongs to\n  const latestAIParentIndex = findLastIndex(\n    messages,\n    (msg) =>\n      (msg instanceof AIMessageChunk &&\n        (msg.tool_calls?.length ?? 0) > 0 &&\n        msg.tool_calls?.some((tc) => tc.id === lastToolMessage.tool_call_id)) ??\n      false\n  );\n\n  if (latestAIParentIndex === -1) return;\n\n  // Check if any tool message after the AI message has array artifact content\n  // Use getType() instead of instanceof to avoid module mismatch issues\n  const hasArtifactContent = messages.some(\n    (msg, i) =>\n      i > latestAIParentIndex &&\n      msg.getType() === MessageTypes.TOOL &&\n      (msg as ToolMessage).artifact != null &&\n      (msg as ToolMessage).artifact?.content != null &&\n      Array.isArray((msg as ToolMessage).artifact.content)\n  );\n\n  if (!hasArtifactContent) return;\n\n  // Collect all relevant tool messages and their artifacts\n  // Use getType() instead of instanceof to avoid module mismatch issues\n  const relevantMessages = messages\n    .slice(latestAIParentIndex + 1)\n    .filter((msg) => msg.getType() === MessageTypes.TOOL) as ToolMessage[];\n\n  // Aggregate all content and artifacts\n  const aggregatedContent: t.MessageContentComplex[] = [];\n\n  relevantMessages.forEach((msg) => {\n    if (!Array.isArray(msg.artifact?.content)) {\n      return;\n    }\n    let currentContent = msg.content;\n    if (!Array.isArray(currentContent)) {\n      currentContent = [\n        {\n          type: 'text',\n          text: msg.content,\n        },\n      ];\n    }\n    aggregatedContent.push(...currentContent);\n    msg.content =\n      'Tool response is included in the next message as a Human message';\n    aggregatedContent.push(...msg.artifact.content);\n  });\n\n  // Add single HumanMessage with all aggregated content\n  if (aggregatedContent.length > 0) {\n    messages.push(new HumanMessage({ content: aggregatedContent }));\n  }\n}\n\nexport function findLastIndex<T>(\n  array: T[],\n  predicate: (value: T) => boolean\n): number {\n  for (let i = array.length - 1; i >= 0; i--) {\n    if (predicate(array[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n"],"names":[],"mappings":"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"}