{"version":3,"file":"anthropic.cjs","names":["_isString","_isNumber","_isContentBlock","_isObject","_isArray","iife","safeParseJson"],"sources":["../../../src/messages/block_translators/anthropic.ts"],"sourcesContent":["import type { StandardContentBlockTranslator } from \"./index.js\";\nimport type { ContentBlock } from \"../content/index.js\";\nimport type { AIMessageChunk, AIMessage } from \"../ai.js\";\nimport type { BaseMessage, BaseMessageChunk } from \"../base.js\";\nimport {\n  _isArray,\n  _isContentBlock,\n  _isNumber,\n  _isObject,\n  _isString,\n  safeParseJson,\n  iife,\n} from \"./utils.js\";\n\nfunction convertAnthropicAnnotation(\n  citation: ContentBlock\n): ContentBlock.Citation | undefined {\n  if (\n    citation.type === \"char_location\" &&\n    _isString(citation.document_title) &&\n    _isNumber(citation.start_char_index) &&\n    _isNumber(citation.end_char_index) &&\n    _isString(citation.cited_text)\n  ) {\n    const {\n      document_title,\n      start_char_index,\n      end_char_index,\n      cited_text,\n      ...rest\n    } = citation;\n    return {\n      ...rest,\n      type: \"citation\",\n      source: \"char\",\n      title: document_title ?? undefined,\n      startIndex: start_char_index,\n      endIndex: end_char_index,\n      citedText: cited_text,\n    };\n  }\n  if (\n    citation.type === \"page_location\" &&\n    _isString(citation.document_title) &&\n    _isNumber(citation.start_page_number) &&\n    _isNumber(citation.end_page_number) &&\n    _isString(citation.cited_text)\n  ) {\n    const {\n      document_title,\n      start_page_number,\n      end_page_number,\n      cited_text,\n      ...rest\n    } = citation;\n    return {\n      ...rest,\n      type: \"citation\",\n      source: \"page\",\n      title: document_title ?? undefined,\n      startIndex: start_page_number,\n      endIndex: end_page_number,\n      citedText: cited_text,\n    };\n  }\n  if (\n    citation.type === \"content_block_location\" &&\n    _isString(citation.document_title) &&\n    _isNumber(citation.start_block_index) &&\n    _isNumber(citation.end_block_index) &&\n    _isString(citation.cited_text)\n  ) {\n    const {\n      document_title,\n      start_block_index,\n      end_block_index,\n      cited_text,\n      ...rest\n    } = citation;\n    return {\n      ...rest,\n      type: \"citation\",\n      source: \"block\",\n      title: document_title ?? undefined,\n      startIndex: start_block_index,\n      endIndex: end_block_index,\n      citedText: cited_text,\n    };\n  }\n  if (\n    citation.type === \"web_search_result_location\" &&\n    _isString(citation.url) &&\n    _isString(citation.title) &&\n    _isString(citation.encrypted_index) &&\n    _isString(citation.cited_text)\n  ) {\n    const { url, title, encrypted_index, cited_text, ...rest } = citation;\n    return {\n      ...rest,\n      type: \"citation\",\n      source: \"url\",\n      url,\n      title,\n      startIndex: Number(encrypted_index),\n      endIndex: Number(encrypted_index),\n      citedText: cited_text,\n    };\n  }\n  if (\n    citation.type === \"search_result_location\" &&\n    _isString(citation.source) &&\n    _isString(citation.title) &&\n    _isNumber(citation.start_block_index) &&\n    _isNumber(citation.end_block_index) &&\n    _isString(citation.cited_text)\n  ) {\n    const {\n      source,\n      title,\n      start_block_index,\n      end_block_index,\n      cited_text,\n      ...rest\n    } = citation;\n    return {\n      ...rest,\n      type: \"citation\",\n      source: \"search\",\n      url: source,\n      title: title ?? undefined,\n      startIndex: start_block_index,\n      endIndex: end_block_index,\n      citedText: cited_text,\n    };\n  }\n  return undefined;\n}\n\n/**\n * Converts an Anthropic content block to a standard V1 content block.\n *\n * This function handles the conversion of Anthropic-specific content blocks\n * (document and image blocks) to the standardized V1 format. It supports\n * various source types including base64 data, URLs, file IDs, and text data.\n *\n * @param block - The Anthropic content block to convert\n * @returns A standard V1 content block if conversion is successful, undefined otherwise\n *\n * @example\n * ```typescript\n * const anthropicBlock = {\n *   type: \"image\",\n *   source: {\n *     type: \"base64\",\n *     media_type: \"image/png\",\n *     data: \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n *   }\n * };\n *\n * const standardBlock = convertToV1FromAnthropicContentBlock(anthropicBlock);\n * // Returns: { type: \"image\", mimeType: \"image/png\", data: \"...\" }\n * ```\n */\nexport function convertToV1FromAnthropicContentBlock(\n  block: ContentBlock\n): ContentBlock.Standard | undefined {\n  if (\n    _isContentBlock(block, \"document\") &&\n    _isObject(block.source) &&\n    \"type\" in block.source\n  ) {\n    if (\n      block.source.type === \"base64\" &&\n      _isString(block.source.media_type) &&\n      _isString(block.source.data)\n    ) {\n      return {\n        type: \"file\",\n        mimeType: block.source.media_type,\n        data: block.source.data,\n      };\n    } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n      return {\n        type: \"file\",\n        url: block.source.url,\n      };\n    } else if (\n      block.source.type === \"file\" &&\n      _isString(block.source.file_id)\n    ) {\n      return {\n        type: \"file\",\n        fileId: block.source.file_id,\n      };\n    } else if (block.source.type === \"text\" && _isString(block.source.data)) {\n      return {\n        type: \"file\",\n        mimeType: String(block.source.media_type ?? \"text/plain\"),\n        data: block.source.data,\n      };\n    }\n  } else if (\n    _isContentBlock(block, \"image\") &&\n    _isObject(block.source) &&\n    \"type\" in block.source\n  ) {\n    if (\n      block.source.type === \"base64\" &&\n      _isString(block.source.media_type) &&\n      _isString(block.source.data)\n    ) {\n      return {\n        type: \"image\",\n        mimeType: block.source.media_type,\n        data: block.source.data,\n      };\n    } else if (block.source.type === \"url\" && _isString(block.source.url)) {\n      return {\n        type: \"image\",\n        url: block.source.url,\n      };\n    } else if (\n      block.source.type === \"file\" &&\n      _isString(block.source.file_id)\n    ) {\n      return {\n        type: \"image\",\n        fileId: block.source.file_id,\n      };\n    }\n  }\n  return undefined;\n}\n\n/**\n * Converts an array of content blocks from Anthropic format to v1 standard format.\n *\n * This function processes each content block in the input array, attempting to convert\n * Anthropic-specific block formats (like image blocks with source objects, document blocks, etc.)\n * to the standardized v1 content block format. If a block cannot be converted, it is\n * passed through as-is with a type assertion to ContentBlock.Standard.\n *\n * @param content - Array of content blocks in Anthropic format to be converted\n * @returns Array of content blocks in v1 standard format\n */\nexport function convertToV1FromAnthropicInput(\n  content: Array<ContentBlock>\n): Array<ContentBlock.Standard> {\n  function* iterateContent(): Iterable<ContentBlock.Standard> {\n    for (const block of content) {\n      const stdBlock = convertToV1FromAnthropicContentBlock(block);\n      if (stdBlock) {\n        yield stdBlock;\n      } else {\n        yield block as ContentBlock.Standard;\n      }\n    }\n  }\n  return Array.from(iterateContent());\n}\n\n/**\n * Converts an Anthropic AI message to an array of v1 standard content blocks.\n *\n * This function processes an AI message containing Anthropic-specific content blocks\n * and converts them to the standardized v1 content block format.\n *\n * @param message - The AI message containing Anthropic-formatted content blocks\n * @returns Array of content blocks in v1 standard format\n *\n * @example\n * ```typescript\n * const message = new AIMessage([\n *   { type: \"text\", text: \"Hello world\" },\n *   { type: \"thinking\", text: \"Let me think about this...\" },\n *   { type: \"tool_use\", id: \"123\", name: \"calculator\", input: { a: 1, b: 2 } }\n * ]);\n *\n * const standardBlocks = convertToV1FromAnthropicMessage(message);\n * // Returns:\n * // [\n * //   { type: \"text\", text: \"Hello world\" },\n * //   { type: \"reasoning\", reasoning: \"Let me think about this...\" },\n * //   { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }\n * // ]\n * ```\n */\nexport function convertToV1FromAnthropicMessage(\n  message: AIMessage\n): Array<ContentBlock.Standard> {\n  function* iterateContent(): Iterable<ContentBlock.Standard> {\n    const content =\n      typeof message.content === \"string\"\n        ? [{ type: \"text\", text: message.content }]\n        : message.content;\n    for (const block of content) {\n      // TextBlock\n      if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n        const { text, citations, ...rest } = block;\n        if (_isArray(citations) && citations.length) {\n          const _citations = citations.reduce<ContentBlock.Citation[]>(\n            (acc, item) => {\n              const citation = convertAnthropicAnnotation(item as ContentBlock);\n              if (citation) {\n                return [...acc, citation];\n              }\n              return acc;\n            },\n            []\n          );\n          yield {\n            ...rest,\n            type: \"text\",\n            text,\n            annotations: _citations,\n          };\n          continue;\n        } else {\n          yield {\n            ...rest,\n            type: \"text\",\n            text,\n          };\n          continue;\n        }\n      }\n      // ThinkingBlock\n      else if (\n        _isContentBlock(block, \"thinking\") &&\n        _isString(block.thinking)\n      ) {\n        const { thinking, signature, ...rest } = block;\n        yield {\n          ...rest,\n          type: \"reasoning\",\n          reasoning: thinking,\n          signature,\n        };\n        continue;\n      }\n      // RedactedThinkingBlock\n      else if (_isContentBlock(block, \"redacted_thinking\")) {\n        yield { type: \"non_standard\", value: block };\n        continue;\n      }\n      // ToolUseBlock\n      else if (\n        _isContentBlock(block, \"tool_use\") &&\n        _isString(block.name) &&\n        _isString(block.id)\n      ) {\n        yield {\n          type: \"tool_call\",\n          id: block.id,\n          name: block.name,\n          args: block.input,\n        };\n        continue;\n      }\n      // message chunks can have input_json_delta contents\n      else if (_isContentBlock(block, \"input_json_delta\")) {\n        if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {\n          const tool_call_chunk = message.tool_call_chunks[0];\n          yield {\n            type: \"tool_call_chunk\",\n            id: tool_call_chunk.id,\n            name: tool_call_chunk.name,\n            args: tool_call_chunk.args,\n            index: tool_call_chunk.index,\n          };\n          continue;\n        }\n      }\n      // ServerToolUseBlock\n      else if (\n        _isContentBlock(block, \"server_tool_use\") &&\n        _isString(block.name) &&\n        _isString(block.id)\n      ) {\n        const { name, id } = block;\n        if (name === \"web_search\") {\n          const query = iife(() => {\n            if (typeof block.input === \"string\") {\n              return block.input;\n            } else if (_isObject(block.input) && _isString(block.input.query)) {\n              return block.input.query;\n            } else if (_isString(block.partial_json)) {\n              const json = safeParseJson<{ query?: string }>(\n                block.partial_json\n              );\n              if (json?.query) {\n                return json.query;\n              }\n            }\n            return \"\";\n          });\n          yield {\n            id,\n            type: \"server_tool_call\",\n            name: \"web_search\",\n            args: { query },\n          };\n          continue;\n        } else if (block.name === \"code_execution\") {\n          const code = iife(() => {\n            if (typeof block.input === \"string\") {\n              return block.input;\n            } else if (_isObject(block.input) && _isString(block.input.code)) {\n              return block.input.code;\n            } else if (_isString(block.partial_json)) {\n              const json = safeParseJson<{ code?: string }>(block.partial_json);\n              if (json?.code) {\n                return json.code;\n              }\n            }\n            return \"\";\n          });\n          yield {\n            id,\n            type: \"server_tool_call\",\n            name: \"code_execution\",\n            args: { code },\n          };\n          continue;\n        }\n      }\n      // WebSearchToolResultBlock\n      else if (\n        _isContentBlock(block, \"web_search_tool_result\") &&\n        _isString(block.tool_use_id) &&\n        _isArray(block.content)\n      ) {\n        const { content, tool_use_id } = block;\n        const urls = content.reduce<string[]>((acc, content) => {\n          if (_isContentBlock(content, \"web_search_result\")) {\n            return [...acc, content.url as string];\n          }\n          return acc;\n        }, []);\n        yield {\n          type: \"server_tool_call_result\",\n          name: \"web_search\",\n          toolCallId: tool_use_id,\n          status: \"success\",\n          output: {\n            urls,\n          },\n        };\n        continue;\n      }\n      // CodeExecutionToolResultBlock\n      else if (\n        _isContentBlock(block, \"code_execution_tool_result\") &&\n        _isString(block.tool_use_id) &&\n        _isObject(block.content)\n      ) {\n        yield {\n          type: \"server_tool_call_result\",\n          name: \"code_execution\",\n          toolCallId: block.tool_use_id,\n          status: \"success\",\n          output: block.content,\n        };\n        continue;\n      }\n      // MCPToolUseBlock\n      else if (_isContentBlock(block, \"mcp_tool_use\")) {\n        yield {\n          id: block.id,\n          type: \"server_tool_call\",\n          name: \"mcp_tool_use\",\n          args: block.input,\n        };\n        continue;\n      }\n      // MCPToolResultBlock\n      else if (\n        _isContentBlock(block, \"mcp_tool_result\") &&\n        _isString(block.tool_use_id) &&\n        _isObject(block.content)\n      ) {\n        yield {\n          type: \"server_tool_call_result\",\n          name: \"mcp_tool_use\",\n          toolCallId: block.tool_use_id,\n          status: \"success\",\n          output: block.content,\n        };\n        continue;\n      }\n      // ContainerUploadBlock\n      else if (_isContentBlock(block, \"container_upload\")) {\n        yield {\n          type: \"server_tool_call\",\n          name: \"container_upload\",\n          args: block.input,\n        };\n        continue;\n      }\n      // SearchResultBlockParam\n      else if (_isContentBlock(block, \"search_result\")) {\n        yield { id: block.id, type: \"non_standard\", value: block };\n        continue;\n      }\n      // ToolResultBlockParam\n      else if (_isContentBlock(block, \"tool_result\")) {\n        yield { id: block.id, type: \"non_standard\", value: block };\n        continue;\n      } else {\n        // For all other blocks, we try to convert them to a standard block\n        const stdBlock = convertToV1FromAnthropicContentBlock(block);\n        if (stdBlock) {\n          yield stdBlock;\n          continue;\n        }\n      }\n      yield { type: \"non_standard\", value: block };\n    }\n  }\n  return Array.from(iterateContent());\n}\n\nexport const ChatAnthropicTranslator: StandardContentBlockTranslator = {\n  translateContent: convertToV1FromAnthropicMessage,\n  translateContentChunk: convertToV1FromAnthropicMessage,\n};\n\nfunction _isAIMessageChunk(message: unknown): message is AIMessageChunk {\n  return (\n    typeof (message as BaseMessage)?._getType === \"function\" &&\n    typeof (message as BaseMessageChunk).concat === \"function\" &&\n    (message as BaseMessageChunk)._getType() === \"ai\"\n  );\n}\n"],"mappings":"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"}