{"version":3,"file":"standard.cjs","names":["iife"],"sources":["../../src/utils/standard.ts"],"sourcesContent":["import type Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n  BaseMessage,\n  ContentBlock,\n  ResponseMetadata,\n} from \"@langchain/core/messages\";\nimport { iife } from \"./index.js\";\n\nfunction _isStandardAnnotation(\n  annotation: unknown\n): annotation is ContentBlock.Citation {\n  return (\n    typeof annotation === \"object\" &&\n    annotation !== null &&\n    \"type\" in annotation &&\n    annotation.type === \"citation\"\n  );\n}\n\nfunction _formatStandardCitations(\n  annotations: ContentBlock.Citation[]\n): Anthropic.Beta.BetaTextCitation[] {\n  function* iterateAnnotations() {\n    for (const annotation of annotations) {\n      if (_isStandardAnnotation(annotation)) {\n        if (annotation.source === \"char\") {\n          yield {\n            type: \"char_location\" as const,\n            file_id: annotation.url ?? \"\",\n            start_char_index: annotation.startIndex ?? 0,\n            end_char_index: annotation.endIndex ?? 0,\n            document_title: annotation.title ?? null,\n            document_index: 0,\n            cited_text: annotation.citedText ?? \"\",\n          };\n        } else if (annotation.source === \"page\") {\n          yield {\n            type: \"page_location\" as const,\n            file_id: annotation.url ?? \"\",\n            start_page_number: annotation.startIndex ?? 0,\n            end_page_number: annotation.endIndex ?? 0,\n            document_title: annotation.title ?? null,\n            document_index: 0,\n            cited_text: annotation.citedText ?? \"\",\n          };\n        } else if (annotation.source === \"block\") {\n          yield {\n            type: \"content_block_location\" as const,\n            file_id: annotation.url ?? \"\",\n            start_block_index: annotation.startIndex ?? 0,\n            end_block_index: annotation.endIndex ?? 0,\n            document_title: annotation.title ?? null,\n            document_index: 0,\n            cited_text: annotation.citedText ?? \"\",\n          };\n        } else if (annotation.source === \"url\") {\n          yield {\n            type: \"web_search_result_location\" as const,\n            url: annotation.url ?? \"\",\n            title: annotation.title ?? null,\n            encrypted_index: String(annotation.startIndex ?? 0),\n            cited_text: annotation.citedText ?? \"\",\n          };\n        } else if (annotation.source === \"search\") {\n          yield {\n            type: \"search_result_location\" as const,\n            title: annotation.title ?? null,\n            start_block_index: annotation.startIndex ?? 0,\n            end_block_index: annotation.endIndex ?? 0,\n            search_result_index: 0,\n            source: annotation.source ?? \"\",\n            cited_text: annotation.citedText ?? \"\",\n          };\n        }\n      }\n    }\n  }\n  return Array.from(iterateAnnotations());\n}\n\nfunction _formatBase64Data(data: string | Uint8Array): string {\n  if (typeof data === \"string\") return data;\n  else return _encodeUint8Array(data);\n}\n\nfunction _encodeUint8Array(data: Uint8Array): string {\n  const output = [];\n  for (let i = 0, { length } = data; i < length; i++) {\n    output.push(String.fromCharCode(data[i]));\n  }\n  return btoa(output.join(\"\"));\n}\n\nfunction _normalizeMimeType(mimeType?: string | null): string {\n  return (mimeType ?? \"\").split(\";\")[0].toLowerCase();\n}\n\nfunction _extractMetadataValue<T>(\n  metadata: unknown,\n  key: string\n): T | undefined {\n  if (\n    metadata !== undefined &&\n    metadata !== null &&\n    typeof metadata === \"object\" &&\n    key in metadata\n  ) {\n    return (metadata as Record<string, unknown>)[key] as T;\n  }\n  return undefined;\n}\n\nfunction _applyDocumentMetadata(\n  block: Anthropic.Beta.BetaRequestDocumentBlock,\n  metadata: unknown\n): Anthropic.Beta.BetaRequestDocumentBlock {\n  const cacheControl =\n    _extractMetadataValue<Anthropic.Beta.BetaCacheControlEphemeral | null>(\n      metadata,\n      \"cache_control\"\n    );\n  if (cacheControl !== undefined) {\n    block.cache_control = cacheControl;\n  }\n  const citations =\n    _extractMetadataValue<Anthropic.Beta.BetaCitationsConfigParam | null>(\n      metadata,\n      \"citations\"\n    );\n  if (citations !== undefined) {\n    block.citations = citations;\n  }\n  const context = _extractMetadataValue<string | null>(metadata, \"context\");\n  if (context !== undefined) {\n    block.context = context;\n  }\n  const title = _extractMetadataValue<string | null>(metadata, \"title\");\n  if (title !== undefined) {\n    block.title = title;\n  }\n  return block;\n}\n\nfunction _applyImageMetadata(\n  block: Anthropic.Beta.BetaImageBlockParam,\n  metadata: unknown\n): Anthropic.Beta.BetaImageBlockParam {\n  const cacheControl =\n    _extractMetadataValue<Anthropic.Beta.BetaCacheControlEphemeral | null>(\n      metadata,\n      \"cache_control\"\n    );\n  if (cacheControl !== undefined) {\n    block.cache_control = cacheControl;\n  }\n  return block;\n}\n\nfunction _hasAllowedImageMimeType(\n  mimeType: string\n): mimeType is \"image/jpeg\" | \"image/png\" | \"image/gif\" | \"image/webp\" {\n  const ALLOWED_IMAGE_MIME_TYPES = new Set([\n    \"image/jpeg\",\n    \"image/png\",\n    \"image/gif\",\n    \"image/webp\",\n  ]);\n  return ALLOWED_IMAGE_MIME_TYPES.has(mimeType);\n}\n\nexport function _formatStandardContent(\n  message: BaseMessage\n): Anthropic.Beta.BetaContentBlockParam[] {\n  const result: Anthropic.Beta.BetaContentBlockParam[] = [];\n  const responseMetadata = message.response_metadata as ResponseMetadata;\n  const isAnthropicMessage =\n    \"model_provider\" in responseMetadata &&\n    responseMetadata?.model_provider === \"anthropic\";\n  for (const block of message.contentBlocks) {\n    if (block.type === \"text\") {\n      if (block.annotations) {\n        result.push({\n          type: \"text\",\n          text: block.text,\n          citations: _formatStandardCitations(\n            block.annotations as ContentBlock.Citation[]\n          ),\n        });\n      } else {\n        result.push({\n          type: \"text\",\n          text: block.text,\n        });\n      }\n    } else if (block.type === \"tool_call\") {\n      result.push({\n        type: \"tool_use\",\n        id: block.id ?? \"\",\n        name: block.name,\n        input: block.args,\n      });\n    } else if (block.type === \"tool_call_chunk\") {\n      const input = iife(() => {\n        if (typeof block.args !== \"string\") {\n          return block.args;\n        }\n        try {\n          return JSON.parse(block.args);\n        } catch {\n          return {};\n        }\n      });\n      result.push({\n        type: \"tool_use\",\n        id: block.id ?? \"\",\n        name: block.name ?? \"\",\n        input,\n      });\n    } else if (block.type === \"reasoning\" && isAnthropicMessage) {\n      result.push({\n        type: \"thinking\",\n        thinking: block.reasoning,\n        signature: String(block.signature),\n      });\n    } else if (block.type === \"server_tool_call\" && isAnthropicMessage) {\n      if (block.name === \"web_search\") {\n        result.push({\n          type: \"server_tool_use\",\n          name: block.name,\n          id: block.id ?? \"\",\n          input: block.args,\n        });\n      } else if (block.name === \"code_execution\") {\n        result.push({\n          type: \"server_tool_use\",\n          name: block.name,\n          id: block.id ?? \"\",\n          input: block.args,\n        });\n      }\n    } else if (block.type === \"server_tool_call_result\" && isAnthropicMessage) {\n      if (block.name === \"web_search\" && Array.isArray(block.output.urls)) {\n        const content = block.output.urls.map((url) => ({\n          type: \"web_search_result\" as const,\n          title: \"\",\n          encrypted_content: \"\",\n          url,\n        }));\n        result.push({\n          type: \"web_search_tool_result\",\n          tool_use_id: block.toolCallId ?? \"\",\n          content,\n        });\n      } else if (block.name === \"code_execution\") {\n        result.push({\n          type: \"code_execution_tool_result\",\n          tool_use_id: block.toolCallId ?? \"\",\n          // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n          content: block.output as any,\n        });\n      } else if (block.name === \"mcp_tool_result\") {\n        result.push({\n          type: \"mcp_tool_result\",\n          tool_use_id: block.toolCallId ?? \"\",\n          // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n          content: block.output as any,\n        });\n      }\n    } else if (block.type === \"audio\") {\n      throw new Error(\"Anthropic does not support audio content blocks.\");\n    } else if (block.type === \"file\") {\n      const metadata = block.metadata;\n      if (block.fileId) {\n        result.push(\n          _applyDocumentMetadata(\n            {\n              type: \"document\",\n              source: {\n                type: \"file\",\n                file_id: block.fileId,\n              },\n            },\n            metadata\n          )\n        );\n        continue;\n      }\n      if (block.url) {\n        const mimeType = _normalizeMimeType(block.mimeType);\n        if (mimeType === \"application/pdf\" || mimeType === \"\") {\n          result.push(\n            _applyDocumentMetadata(\n              {\n                type: \"document\",\n                source: {\n                  type: \"url\",\n                  url: block.url,\n                },\n              },\n              metadata\n            )\n          );\n          continue;\n        }\n      }\n      if (block.data) {\n        const mimeType = _normalizeMimeType(block.mimeType);\n        if (mimeType === \"\" || mimeType === \"application/pdf\") {\n          result.push(\n            _applyDocumentMetadata(\n              {\n                type: \"document\",\n                source: {\n                  type: \"base64\",\n                  data: _formatBase64Data(block.data),\n                  media_type: \"application/pdf\",\n                },\n              },\n              metadata\n            )\n          );\n        } else if (mimeType === \"text/plain\") {\n          result.push(\n            _applyDocumentMetadata(\n              {\n                type: \"document\",\n                source: {\n                  type: \"text\",\n                  data: _formatBase64Data(block.data),\n                  media_type: \"text/plain\",\n                },\n              },\n              metadata\n            )\n          );\n        } else {\n          if (_hasAllowedImageMimeType(mimeType)) {\n            result.push(\n              _applyDocumentMetadata(\n                {\n                  type: \"document\",\n                  source: {\n                    type: \"content\",\n                    content: [\n                      {\n                        type: \"image\",\n                        source: {\n                          type: \"base64\",\n                          data: _formatBase64Data(block.data),\n                          media_type: mimeType,\n                        },\n                      },\n                    ],\n                  },\n                },\n                metadata\n              )\n            );\n          } else {\n            throw new Error(\n              `Unsupported file mime type for Anthropic base64 source: ${mimeType}`\n            );\n          }\n        }\n        continue;\n      }\n      throw new Error(\n        \"File content block must include a fileId, url, or data property.\"\n      );\n    } else if (block.type === \"image\") {\n      const metadata = block.metadata;\n      if (block.fileId) {\n        result.push(\n          _applyImageMetadata(\n            {\n              type: \"image\",\n              source: {\n                type: \"file\",\n                file_id: block.fileId,\n              },\n            },\n            metadata\n          )\n        );\n        continue;\n      }\n      if (block.url) {\n        result.push(\n          _applyImageMetadata(\n            {\n              type: \"image\",\n              source: {\n                type: \"url\",\n                url: block.url,\n              },\n            },\n            metadata\n          )\n        );\n        continue;\n      }\n      if (block.data) {\n        const mimeType = _normalizeMimeType(block.mimeType) || \"image/png\";\n        if (_hasAllowedImageMimeType(mimeType)) {\n          result.push(\n            _applyImageMetadata(\n              {\n                type: \"image\",\n                source: {\n                  type: \"base64\",\n                  data: _formatBase64Data(block.data),\n                  media_type: mimeType,\n                },\n              },\n              metadata\n            )\n          );\n        }\n        continue;\n      }\n      throw new Error(\n        \"Image content block must include a fileId, url, or data property.\"\n      );\n    } else if (block.type === \"video\") {\n      // no-op\n    } else if (block.type === \"text-plain\") {\n      if (block.data) {\n        result.push(\n          _applyDocumentMetadata(\n            {\n              type: \"document\",\n              source: {\n                type: \"text\",\n                data: _formatBase64Data(block.data),\n                media_type: \"text/plain\",\n              },\n            },\n            block.metadata\n          )\n        );\n      }\n    } else if (block.type === \"non_standard\" && isAnthropicMessage) {\n      result.push(block.value as Anthropic.Beta.BetaContentBlockParam);\n    }\n  }\n  return result;\n}\n"],"mappings":"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"}