{"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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"}