@langchain/core 1.2.9 → 1.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  3. package/dist/callbacks/dispatch/index.cjs +2 -1
  4. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  5. package/dist/callbacks/dispatch/index.js +2 -1
  6. package/dist/callbacks/dispatch/index.js.map +1 -1
  7. package/dist/indexing/base.cjs +10 -6
  8. package/dist/indexing/base.cjs.map +1 -1
  9. package/dist/indexing/base.js +10 -6
  10. package/dist/indexing/base.js.map +1 -1
  11. package/dist/language_models/base.cjs +1 -1
  12. package/dist/language_models/base.cjs.map +1 -1
  13. package/dist/language_models/base.js +1 -1
  14. package/dist/language_models/base.js.map +1 -1
  15. package/dist/language_models/chat_models.cjs +22 -17
  16. package/dist/language_models/chat_models.cjs.map +1 -1
  17. package/dist/language_models/chat_models.d.cts.map +1 -1
  18. package/dist/language_models/chat_models.d.ts.map +1 -1
  19. package/dist/language_models/chat_models.js +23 -18
  20. package/dist/language_models/chat_models.js.map +1 -1
  21. package/dist/language_models/stream.cjs +0 -2
  22. package/dist/language_models/stream.cjs.map +1 -1
  23. package/dist/language_models/stream.js +0 -2
  24. package/dist/language_models/stream.js.map +1 -1
  25. package/dist/load/index.cjs +7 -5
  26. package/dist/load/index.cjs.map +1 -1
  27. package/dist/load/index.js +7 -5
  28. package/dist/load/index.js.map +1 -1
  29. package/dist/load/serializable.cjs +2 -1
  30. package/dist/load/serializable.cjs.map +1 -1
  31. package/dist/load/serializable.js +2 -1
  32. package/dist/load/serializable.js.map +1 -1
  33. package/dist/load/validation.cjs +4 -3
  34. package/dist/load/validation.cjs.map +1 -1
  35. package/dist/load/validation.js +4 -3
  36. package/dist/load/validation.js.map +1 -1
  37. package/dist/messages/base.cjs +13 -18
  38. package/dist/messages/base.cjs.map +1 -1
  39. package/dist/messages/base.d.cts.map +1 -1
  40. package/dist/messages/base.d.ts.map +1 -1
  41. package/dist/messages/base.js +13 -18
  42. package/dist/messages/base.js.map +1 -1
  43. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  44. package/dist/messages/block_translators/anthropic.js.map +1 -1
  45. package/dist/messages/block_translators/google.cjs +10 -9
  46. package/dist/messages/block_translators/google.cjs.map +1 -1
  47. package/dist/messages/block_translators/google.js +10 -9
  48. package/dist/messages/block_translators/google.js.map +1 -1
  49. package/dist/messages/block_translators/google_vertexai.cjs +14 -12
  50. package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
  51. package/dist/messages/block_translators/google_vertexai.js +14 -12
  52. package/dist/messages/block_translators/google_vertexai.js.map +1 -1
  53. package/dist/messages/block_translators/openai.cjs +212 -164
  54. package/dist/messages/block_translators/openai.cjs.map +1 -1
  55. package/dist/messages/block_translators/openai.js +212 -164
  56. package/dist/messages/block_translators/openai.js.map +1 -1
  57. package/dist/messages/message.cjs.map +1 -1
  58. package/dist/messages/message.d.cts.map +1 -1
  59. package/dist/messages/message.d.ts.map +1 -1
  60. package/dist/messages/message.js.map +1 -1
  61. package/dist/messages/transformers.cjs +12 -8
  62. package/dist/messages/transformers.cjs.map +1 -1
  63. package/dist/messages/transformers.js +12 -8
  64. package/dist/messages/transformers.js.map +1 -1
  65. package/dist/output_parsers/transform.cjs.map +1 -1
  66. package/dist/prompts/chat.cjs +2 -1
  67. package/dist/prompts/chat.cjs.map +1 -1
  68. package/dist/prompts/chat.js +2 -1
  69. package/dist/prompts/chat.js.map +1 -1
  70. package/dist/prompts/few_shot.cjs +6 -4
  71. package/dist/prompts/few_shot.cjs.map +1 -1
  72. package/dist/prompts/few_shot.js +6 -4
  73. package/dist/prompts/few_shot.js.map +1 -1
  74. package/dist/prompts/image.cjs +2 -1
  75. package/dist/prompts/image.cjs.map +1 -1
  76. package/dist/prompts/image.js +2 -1
  77. package/dist/prompts/image.js.map +1 -1
  78. package/dist/prompts/prompt.cjs.map +1 -1
  79. package/dist/prompts/prompt.d.cts.map +1 -1
  80. package/dist/prompts/prompt.d.ts.map +1 -1
  81. package/dist/prompts/prompt.js.map +1 -1
  82. package/dist/prompts/string.cjs +2 -1
  83. package/dist/prompts/string.cjs.map +1 -1
  84. package/dist/prompts/string.js +2 -1
  85. package/dist/prompts/string.js.map +1 -1
  86. package/dist/prompts/template.cjs.map +1 -1
  87. package/dist/prompts/template.js.map +1 -1
  88. package/dist/runnables/base.cjs +60 -40
  89. package/dist/runnables/base.cjs.map +1 -1
  90. package/dist/runnables/base.js +60 -40
  91. package/dist/runnables/base.js.map +1 -1
  92. package/dist/runnables/branch.cjs +16 -12
  93. package/dist/runnables/branch.cjs.map +1 -1
  94. package/dist/runnables/branch.js +16 -12
  95. package/dist/runnables/branch.js.map +1 -1
  96. package/dist/runnables/config.cjs +28 -23
  97. package/dist/runnables/config.cjs.map +1 -1
  98. package/dist/runnables/config.js +28 -23
  99. package/dist/runnables/config.js.map +1 -1
  100. package/dist/runnables/graph.cjs +2 -1
  101. package/dist/runnables/graph.cjs.map +1 -1
  102. package/dist/runnables/graph.js +2 -1
  103. package/dist/runnables/graph.js.map +1 -1
  104. package/dist/runnables/passthrough.cjs +8 -6
  105. package/dist/runnables/passthrough.cjs.map +1 -1
  106. package/dist/runnables/passthrough.js +8 -6
  107. package/dist/runnables/passthrough.js.map +1 -1
  108. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  109. package/dist/singletons/tracer.cjs +4 -1
  110. package/dist/singletons/tracer.cjs.map +1 -1
  111. package/dist/singletons/tracer.js +4 -1
  112. package/dist/singletons/tracer.js.map +1 -1
  113. package/dist/tools/index.cjs +22 -20
  114. package/dist/tools/index.cjs.map +1 -1
  115. package/dist/tools/index.js +22 -20
  116. package/dist/tools/index.js.map +1 -1
  117. package/dist/tracers/base.cjs +11 -10
  118. package/dist/tracers/base.cjs.map +1 -1
  119. package/dist/tracers/base.js +11 -10
  120. package/dist/tracers/base.js.map +1 -1
  121. package/dist/tracers/log_stream.cjs +7 -6
  122. package/dist/tracers/log_stream.cjs.map +1 -1
  123. package/dist/tracers/log_stream.js +7 -6
  124. package/dist/tracers/log_stream.js.map +1 -1
  125. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  126. package/dist/utils/env.cjs.map +1 -1
  127. package/dist/utils/env.d.cts.map +1 -1
  128. package/dist/utils/env.d.ts.map +1 -1
  129. package/dist/utils/env.js.map +1 -1
  130. package/dist/utils/event_source_parse.cjs +1 -3
  131. package/dist/utils/event_source_parse.cjs.map +1 -1
  132. package/dist/utils/event_source_parse.js +1 -3
  133. package/dist/utils/event_source_parse.js.map +1 -1
  134. package/dist/utils/fast-json-patch/src/core.cjs +4 -2
  135. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  136. package/dist/utils/fast-json-patch/src/core.js +4 -2
  137. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  138. package/dist/utils/fast-json-patch/src/helpers.cjs.map +1 -1
  139. package/dist/utils/fast-json-patch/src/helpers.js.map +1 -1
  140. package/dist/utils/js-sha256/hash.cjs.map +1 -1
  141. package/dist/utils/js-sha256/hash.js.map +1 -1
  142. package/dist/utils/json_schema.cjs +4 -2
  143. package/dist/utils/json_schema.cjs.map +1 -1
  144. package/dist/utils/json_schema.js +4 -2
  145. package/dist/utils/json_schema.js.map +1 -1
  146. package/dist/utils/sax-js/sax.cjs +41 -35
  147. package/dist/utils/sax-js/sax.cjs.map +1 -1
  148. package/dist/utils/sax-js/sax.js +41 -35
  149. package/dist/utils/sax-js/sax.js.map +1 -1
  150. package/dist/utils/testing/chat_models.cjs +2 -1
  151. package/dist/utils/testing/chat_models.cjs.map +1 -1
  152. package/dist/utils/testing/chat_models.js +2 -1
  153. package/dist/utils/testing/chat_models.js.map +1 -1
  154. package/dist/utils/tiktoken.cjs.map +1 -1
  155. package/dist/utils/types/zod.cjs.map +1 -1
  156. package/dist/utils/types/zod.js.map +1 -1
  157. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs +9 -9
  158. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -1
  159. package/dist/utils/zod-to-json-schema/parsers/bigint.js +9 -9
  160. package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -1
  161. package/dist/utils/zod-to-json-schema/parsers/date.cjs +1 -3
  162. package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -1
  163. package/dist/utils/zod-to-json-schema/parsers/date.js +1 -3
  164. package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -1
  165. package/dist/utils/zod-to-json-schema/parsers/number.cjs +9 -9
  166. package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -1
  167. package/dist/utils/zod-to-json-schema/parsers/number.js +9 -9
  168. package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -1
  169. package/dist/utils/zod-to-json-schema/parsers/string.cjs +3 -13
  170. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  171. package/dist/utils/zod-to-json-schema/parsers/string.js +3 -13
  172. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  173. package/package.json +6 -6
@@ -1 +1 @@
1
- {"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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"}
1
+ {"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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","names":[],"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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"}
1
+ {"version":3,"file":"anthropic.js","names":[],"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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"}
@@ -3,15 +3,16 @@ const require_utils = require("./utils.cjs");
3
3
  function convertToV1FromChatGoogleMessage(message) {
4
4
  function* iterateContent() {
5
5
  const content = require_utils.iife(() => {
6
- if (typeof message.content === "string") if (message.additional_kwargs.originalTextContentBlock) return [{
7
- ...message.additional_kwargs.originalTextContentBlock,
8
- type: "text"
9
- }];
10
- else return [{
11
- type: "text",
12
- text: message.content
13
- }];
14
- else {
6
+ if (typeof message.content === "string") {
7
+ if (message.additional_kwargs.originalTextContentBlock) return [{
8
+ ...message.additional_kwargs.originalTextContentBlock,
9
+ type: "text"
10
+ }];
11
+ else return [{
12
+ type: "text",
13
+ text: message.content
14
+ }];
15
+ } else {
15
16
  const originalBlock = message.additional_kwargs?.originalTextContentBlock;
16
17
  if (originalBlock?.thoughtSignature) {
17
18
  if (!message.content.some((b) => "thoughtSignature" in b)) {
@@ -1 +1 @@
1
- {"version":3,"file":"google.cjs","names":["iife","_isContentBlock","_isString","_isObject"],"sources":["../../../src/messages/block_translators/google.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { iife, _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\nfunction convertToV1FromChatGoogleMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content = iife(() => {\n if (typeof message.content === \"string\") {\n if (message.additional_kwargs.originalTextContentBlock) {\n return [\n {\n ...message.additional_kwargs.originalTextContentBlock,\n type: \"text\",\n },\n ];\n } else {\n return [{ type: \"text\", text: message.content }];\n }\n } else {\n const originalBlock = message.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown> | undefined;\n if (originalBlock?.thoughtSignature) {\n // During streaming with thinking models, thoughtSignature arrives in\n // a metadata-only chunk and is stored in originalTextContentBlock.\n // When content is an array (due to thinking parts), this signature\n // isn't carried into the content array by mergeContent().\n // Merge it into the last non-thinking text block.\n const hasSignatureInContent = message.content.some(\n (b: Record<string, unknown>) => \"thoughtSignature\" in b\n );\n if (!hasSignatureInContent) {\n const result = [...message.content];\n for (let i = result.length - 1; i >= 0; i--) {\n const block = result[i] as Record<string, unknown>;\n if (block.type === \"text\" && !block.thought) {\n block.thoughtSignature = originalBlock.thoughtSignature;\n return result;\n }\n }\n }\n }\n return message.content;\n }\n });\n for (const block of content) {\n const contentBlockBase: ContentBlock.Standard = iife(() => {\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n return {\n type: \"text\",\n text: block.text,\n };\n } else if (\n _isContentBlock(block, \"inlineData\") &&\n _isObject(block.inlineData) &&\n _isString(block.inlineData.mimeType) &&\n _isString(block.inlineData.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.inlineData.mimeType,\n data: block.inlineData.data,\n };\n } else if (\n _isContentBlock(block, \"functionCall\") &&\n _isObject(block.functionCall) &&\n _isString(block.functionCall.name) &&\n _isObject(block.functionCall.args)\n ) {\n return {\n type: \"tool_call\",\n id: message.id,\n name: block.functionCall.name,\n args: block.functionCall.args,\n };\n } else if (_isContentBlock(block, \"functionResponse\")) {\n return { type: \"non_standard\", value: block };\n } else if (\n _isContentBlock(block, \"fileData\") &&\n _isObject(block.fileData) &&\n _isString(block.fileData.mimeType) &&\n _isString(block.fileData.fileUri)\n ) {\n return {\n type: \"file\",\n mimeType: block.fileData.mimeType,\n fileId: block.fileData.fileUri,\n };\n } else if (_isContentBlock(block, \"executableCode\")) {\n return { type: \"non_standard\", value: block };\n } else if (_isContentBlock(block, \"codeExecutionResult\")) {\n return { type: \"non_standard\", value: block };\n }\n return { type: \"non_standard\", value: block };\n });\n const contentBlock: ContentBlock.Standard = iife(() => {\n if (\"thought\" in block && block.thought) {\n const reasoning: string =\n contentBlockBase.type === \"text\" ? contentBlockBase.text : \"\";\n return {\n type: \"reasoning\",\n reasoning,\n reasoningContentBlock: contentBlockBase,\n };\n } else {\n return contentBlockBase;\n }\n });\n\n const ret: ContentBlock.Standard = {\n thought: block.thought,\n thoughtSignature: block.thoughtSignature,\n partMetadata: block.partMetadata,\n ...contentBlock,\n };\n for (const attribute in ret) {\n if (ret[attribute] === undefined) {\n delete ret[attribute];\n }\n }\n\n yield ret;\n continue;\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatGoogleTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatGoogleMessage,\n translateContentChunk: convertToV1FromChatGoogleMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAC9B,UAAU,iBAAkD;EAC1D,MAAM,UAAUA,cAAAA,WAAW;GACzB,IAAI,OAAO,QAAQ,YAAY,UAC7B,IAAI,QAAQ,kBAAkB,0BAC5B,OAAO,CACL;IACE,GAAG,QAAQ,kBAAkB;IAC7B,MAAM;GACR,CACF;QAEA,OAAO,CAAC;IAAE,MAAM;IAAQ,MAAM,QAAQ;GAAQ,CAAC;QAE5C;IACL,MAAM,gBAAgB,QAAQ,mBAC1B;IACJ,IAAI,eAAe,kBASb;SAAA,CAH0B,QAAQ,QAAQ,MAC3C,MAA+B,sBAAsB,CAE/B,GAAG;MAC1B,MAAM,SAAS,CAAC,GAAG,QAAQ,OAAO;MAClC,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;OAC3C,MAAM,QAAQ,OAAO;OACrB,IAAI,MAAM,SAAS,UAAU,CAAC,MAAM,SAAS;QAC3C,MAAM,mBAAmB,cAAc;QACvC,OAAO;OACT;MACF;KACF;;IAEF,OAAO,QAAQ;GACjB;EACF,CAAC;EACD,KAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,mBAA0CA,cAAAA,WAAW;IACzD,IAAIC,cAAAA,gBAAgB,OAAO,MAAM,KAAKC,cAAAA,UAAU,MAAM,IAAI,GACxD,OAAO;KACL,MAAM;KACN,MAAM,MAAM;IACd;SACK,IACLD,cAAAA,gBAAgB,OAAO,YAAY,KACnCE,cAAAA,UAAU,MAAM,UAAU,KAC1BD,cAAAA,UAAU,MAAM,WAAW,QAAQ,KACnCA,cAAAA,UAAU,MAAM,WAAW,IAAI,GAE/B,OAAO;KACL,MAAM;KACN,UAAU,MAAM,WAAW;KAC3B,MAAM,MAAM,WAAW;IACzB;SACK,IACLD,cAAAA,gBAAgB,OAAO,cAAc,KACrCE,cAAAA,UAAU,MAAM,YAAY,KAC5BD,cAAAA,UAAU,MAAM,aAAa,IAAI,KACjCC,cAAAA,UAAU,MAAM,aAAa,IAAI,GAEjC,OAAO;KACL,MAAM;KACN,IAAI,QAAQ;KACZ,MAAM,MAAM,aAAa;KACzB,MAAM,MAAM,aAAa;IAC3B;SACK,IAAIF,cAAAA,gBAAgB,OAAO,kBAAkB,GAClD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IACLA,cAAAA,gBAAgB,OAAO,UAAU,KACjCE,cAAAA,UAAU,MAAM,QAAQ,KACxBD,cAAAA,UAAU,MAAM,SAAS,QAAQ,KACjCA,cAAAA,UAAU,MAAM,SAAS,OAAO,GAEhC,OAAO;KACL,MAAM;KACN,UAAU,MAAM,SAAS;KACzB,QAAQ,MAAM,SAAS;IACzB;SACK,IAAID,cAAAA,gBAAgB,OAAO,gBAAgB,GAChD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IAAIA,cAAAA,gBAAgB,OAAO,qBAAqB,GACrD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;IAE9C,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;GAC9C,CAAC;GACD,MAAM,eAAsCD,cAAAA,WAAW;IACrD,IAAI,aAAa,SAAS,MAAM,SAG9B,OAAO;KACL,MAAM;KACN,WAHA,iBAAiB,SAAS,SAAS,iBAAiB,OAAO;KAI3D,uBAAuB;IACzB;SAEA,OAAO;GAEX,CAAC;GAED,MAAM,MAA6B;IACjC,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,cAAc,MAAM;IACpB,GAAG;GACL;GACA,KAAK,MAAM,aAAa,KACtB,IAAI,IAAI,eAAe,KAAA,GACrB,OAAO,IAAI;GAIf,MAAM;EAER;CACF;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google.cjs","names":["iife","_isContentBlock","_isString","_isObject"],"sources":["../../../src/messages/block_translators/google.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { iife, _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\nfunction convertToV1FromChatGoogleMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content = iife(() => {\n if (typeof message.content === \"string\") {\n if (message.additional_kwargs.originalTextContentBlock) {\n return [\n {\n ...message.additional_kwargs.originalTextContentBlock,\n type: \"text\",\n },\n ];\n } else {\n return [{ type: \"text\", text: message.content }];\n }\n } else {\n const originalBlock = message.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown> | undefined;\n if (originalBlock?.thoughtSignature) {\n // During streaming with thinking models, thoughtSignature arrives in\n // a metadata-only chunk and is stored in originalTextContentBlock.\n // When content is an array (due to thinking parts), this signature\n // isn't carried into the content array by mergeContent().\n // Merge it into the last non-thinking text block.\n const hasSignatureInContent = message.content.some(\n (b: Record<string, unknown>) => \"thoughtSignature\" in b\n );\n if (!hasSignatureInContent) {\n const result = [...message.content];\n for (let i = result.length - 1; i >= 0; i--) {\n const block = result[i] as Record<string, unknown>;\n if (block.type === \"text\" && !block.thought) {\n block.thoughtSignature = originalBlock.thoughtSignature;\n return result;\n }\n }\n }\n }\n return message.content;\n }\n });\n for (const block of content) {\n const contentBlockBase: ContentBlock.Standard = iife(() => {\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n return {\n type: \"text\",\n text: block.text,\n };\n } else if (\n _isContentBlock(block, \"inlineData\") &&\n _isObject(block.inlineData) &&\n _isString(block.inlineData.mimeType) &&\n _isString(block.inlineData.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.inlineData.mimeType,\n data: block.inlineData.data,\n };\n } else if (\n _isContentBlock(block, \"functionCall\") &&\n _isObject(block.functionCall) &&\n _isString(block.functionCall.name) &&\n _isObject(block.functionCall.args)\n ) {\n return {\n type: \"tool_call\",\n id: message.id,\n name: block.functionCall.name,\n args: block.functionCall.args,\n };\n } else if (_isContentBlock(block, \"functionResponse\")) {\n return { type: \"non_standard\", value: block };\n } else if (\n _isContentBlock(block, \"fileData\") &&\n _isObject(block.fileData) &&\n _isString(block.fileData.mimeType) &&\n _isString(block.fileData.fileUri)\n ) {\n return {\n type: \"file\",\n mimeType: block.fileData.mimeType,\n fileId: block.fileData.fileUri,\n };\n } else if (_isContentBlock(block, \"executableCode\")) {\n return { type: \"non_standard\", value: block };\n } else if (_isContentBlock(block, \"codeExecutionResult\")) {\n return { type: \"non_standard\", value: block };\n }\n return { type: \"non_standard\", value: block };\n });\n const contentBlock: ContentBlock.Standard = iife(() => {\n if (\"thought\" in block && block.thought) {\n const reasoning: string =\n contentBlockBase.type === \"text\" ? contentBlockBase.text : \"\";\n return {\n type: \"reasoning\",\n reasoning,\n reasoningContentBlock: contentBlockBase,\n };\n } else {\n return contentBlockBase;\n }\n });\n\n const ret: ContentBlock.Standard = {\n thought: block.thought,\n thoughtSignature: block.thoughtSignature,\n partMetadata: block.partMetadata,\n ...contentBlock,\n };\n for (const attribute in ret) {\n if (ret[attribute] === undefined) {\n delete ret[attribute];\n }\n }\n\n yield ret;\n continue;\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatGoogleTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatGoogleMessage,\n translateContentChunk: convertToV1FromChatGoogleMessage,\n};\n"],"mappings":"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"}
@@ -3,15 +3,16 @@ import { _isContentBlock, _isObject, _isString, iife } from "./utils.js";
3
3
  function convertToV1FromChatGoogleMessage(message) {
4
4
  function* iterateContent() {
5
5
  const content = iife(() => {
6
- if (typeof message.content === "string") if (message.additional_kwargs.originalTextContentBlock) return [{
7
- ...message.additional_kwargs.originalTextContentBlock,
8
- type: "text"
9
- }];
10
- else return [{
11
- type: "text",
12
- text: message.content
13
- }];
14
- else {
6
+ if (typeof message.content === "string") {
7
+ if (message.additional_kwargs.originalTextContentBlock) return [{
8
+ ...message.additional_kwargs.originalTextContentBlock,
9
+ type: "text"
10
+ }];
11
+ else return [{
12
+ type: "text",
13
+ text: message.content
14
+ }];
15
+ } else {
15
16
  const originalBlock = message.additional_kwargs?.originalTextContentBlock;
16
17
  if (originalBlock?.thoughtSignature) {
17
18
  if (!message.content.some((b) => "thoughtSignature" in b)) {
@@ -1 +1 @@
1
- {"version":3,"file":"google.js","names":[],"sources":["../../../src/messages/block_translators/google.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { iife, _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\nfunction convertToV1FromChatGoogleMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content = iife(() => {\n if (typeof message.content === \"string\") {\n if (message.additional_kwargs.originalTextContentBlock) {\n return [\n {\n ...message.additional_kwargs.originalTextContentBlock,\n type: \"text\",\n },\n ];\n } else {\n return [{ type: \"text\", text: message.content }];\n }\n } else {\n const originalBlock = message.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown> | undefined;\n if (originalBlock?.thoughtSignature) {\n // During streaming with thinking models, thoughtSignature arrives in\n // a metadata-only chunk and is stored in originalTextContentBlock.\n // When content is an array (due to thinking parts), this signature\n // isn't carried into the content array by mergeContent().\n // Merge it into the last non-thinking text block.\n const hasSignatureInContent = message.content.some(\n (b: Record<string, unknown>) => \"thoughtSignature\" in b\n );\n if (!hasSignatureInContent) {\n const result = [...message.content];\n for (let i = result.length - 1; i >= 0; i--) {\n const block = result[i] as Record<string, unknown>;\n if (block.type === \"text\" && !block.thought) {\n block.thoughtSignature = originalBlock.thoughtSignature;\n return result;\n }\n }\n }\n }\n return message.content;\n }\n });\n for (const block of content) {\n const contentBlockBase: ContentBlock.Standard = iife(() => {\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n return {\n type: \"text\",\n text: block.text,\n };\n } else if (\n _isContentBlock(block, \"inlineData\") &&\n _isObject(block.inlineData) &&\n _isString(block.inlineData.mimeType) &&\n _isString(block.inlineData.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.inlineData.mimeType,\n data: block.inlineData.data,\n };\n } else if (\n _isContentBlock(block, \"functionCall\") &&\n _isObject(block.functionCall) &&\n _isString(block.functionCall.name) &&\n _isObject(block.functionCall.args)\n ) {\n return {\n type: \"tool_call\",\n id: message.id,\n name: block.functionCall.name,\n args: block.functionCall.args,\n };\n } else if (_isContentBlock(block, \"functionResponse\")) {\n return { type: \"non_standard\", value: block };\n } else if (\n _isContentBlock(block, \"fileData\") &&\n _isObject(block.fileData) &&\n _isString(block.fileData.mimeType) &&\n _isString(block.fileData.fileUri)\n ) {\n return {\n type: \"file\",\n mimeType: block.fileData.mimeType,\n fileId: block.fileData.fileUri,\n };\n } else if (_isContentBlock(block, \"executableCode\")) {\n return { type: \"non_standard\", value: block };\n } else if (_isContentBlock(block, \"codeExecutionResult\")) {\n return { type: \"non_standard\", value: block };\n }\n return { type: \"non_standard\", value: block };\n });\n const contentBlock: ContentBlock.Standard = iife(() => {\n if (\"thought\" in block && block.thought) {\n const reasoning: string =\n contentBlockBase.type === \"text\" ? contentBlockBase.text : \"\";\n return {\n type: \"reasoning\",\n reasoning,\n reasoningContentBlock: contentBlockBase,\n };\n } else {\n return contentBlockBase;\n }\n });\n\n const ret: ContentBlock.Standard = {\n thought: block.thought,\n thoughtSignature: block.thoughtSignature,\n partMetadata: block.partMetadata,\n ...contentBlock,\n };\n for (const attribute in ret) {\n if (ret[attribute] === undefined) {\n delete ret[attribute];\n }\n }\n\n yield ret;\n continue;\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatGoogleTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatGoogleMessage,\n translateContentChunk: convertToV1FromChatGoogleMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAC9B,UAAU,iBAAkD;EAC1D,MAAM,UAAU,WAAW;GACzB,IAAI,OAAO,QAAQ,YAAY,UAC7B,IAAI,QAAQ,kBAAkB,0BAC5B,OAAO,CACL;IACE,GAAG,QAAQ,kBAAkB;IAC7B,MAAM;GACR,CACF;QAEA,OAAO,CAAC;IAAE,MAAM;IAAQ,MAAM,QAAQ;GAAQ,CAAC;QAE5C;IACL,MAAM,gBAAgB,QAAQ,mBAC1B;IACJ,IAAI,eAAe,kBASb;SAAA,CAH0B,QAAQ,QAAQ,MAC3C,MAA+B,sBAAsB,CAE/B,GAAG;MAC1B,MAAM,SAAS,CAAC,GAAG,QAAQ,OAAO;MAClC,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;OAC3C,MAAM,QAAQ,OAAO;OACrB,IAAI,MAAM,SAAS,UAAU,CAAC,MAAM,SAAS;QAC3C,MAAM,mBAAmB,cAAc;QACvC,OAAO;OACT;MACF;KACF;;IAEF,OAAO,QAAQ;GACjB;EACF,CAAC;EACD,KAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,mBAA0C,WAAW;IACzD,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GACxD,OAAO;KACL,MAAM;KACN,MAAM,MAAM;IACd;SACK,IACL,gBAAgB,OAAO,YAAY,KACnC,UAAU,MAAM,UAAU,KAC1B,UAAU,MAAM,WAAW,QAAQ,KACnC,UAAU,MAAM,WAAW,IAAI,GAE/B,OAAO;KACL,MAAM;KACN,UAAU,MAAM,WAAW;KAC3B,MAAM,MAAM,WAAW;IACzB;SACK,IACL,gBAAgB,OAAO,cAAc,KACrC,UAAU,MAAM,YAAY,KAC5B,UAAU,MAAM,aAAa,IAAI,KACjC,UAAU,MAAM,aAAa,IAAI,GAEjC,OAAO;KACL,MAAM;KACN,IAAI,QAAQ;KACZ,MAAM,MAAM,aAAa;KACzB,MAAM,MAAM,aAAa;IAC3B;SACK,IAAI,gBAAgB,OAAO,kBAAkB,GAClD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,SAAS,QAAQ,KACjC,UAAU,MAAM,SAAS,OAAO,GAEhC,OAAO;KACL,MAAM;KACN,UAAU,MAAM,SAAS;KACzB,QAAQ,MAAM,SAAS;IACzB;SACK,IAAI,gBAAgB,OAAO,gBAAgB,GAChD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IAAI,gBAAgB,OAAO,qBAAqB,GACrD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;IAE9C,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;GAC9C,CAAC;GACD,MAAM,eAAsC,WAAW;IACrD,IAAI,aAAa,SAAS,MAAM,SAG9B,OAAO;KACL,MAAM;KACN,WAHA,iBAAiB,SAAS,SAAS,iBAAiB,OAAO;KAI3D,uBAAuB;IACzB;SAEA,OAAO;GAEX,CAAC;GAED,MAAM,MAA6B;IACjC,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,cAAc,MAAM;IACpB,GAAG;GACL;GACA,KAAK,MAAM,aAAa,KACtB,IAAI,IAAI,eAAe,KAAA,GACrB,OAAO,IAAI;GAIf,MAAM;EAER;CACF;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google.js","names":[],"sources":["../../../src/messages/block_translators/google.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { iife, _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\nfunction convertToV1FromChatGoogleMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n function* iterateContent(): Iterable<ContentBlock.Standard> {\n const content = iife(() => {\n if (typeof message.content === \"string\") {\n if (message.additional_kwargs.originalTextContentBlock) {\n return [\n {\n ...message.additional_kwargs.originalTextContentBlock,\n type: \"text\",\n },\n ];\n } else {\n return [{ type: \"text\", text: message.content }];\n }\n } else {\n const originalBlock = message.additional_kwargs\n ?.originalTextContentBlock as Record<string, unknown> | undefined;\n if (originalBlock?.thoughtSignature) {\n // During streaming with thinking models, thoughtSignature arrives in\n // a metadata-only chunk and is stored in originalTextContentBlock.\n // When content is an array (due to thinking parts), this signature\n // isn't carried into the content array by mergeContent().\n // Merge it into the last non-thinking text block.\n const hasSignatureInContent = message.content.some(\n (b: Record<string, unknown>) => \"thoughtSignature\" in b\n );\n if (!hasSignatureInContent) {\n const result = [...message.content];\n for (let i = result.length - 1; i >= 0; i--) {\n const block = result[i] as Record<string, unknown>;\n if (block.type === \"text\" && !block.thought) {\n block.thoughtSignature = originalBlock.thoughtSignature;\n return result;\n }\n }\n }\n }\n return message.content;\n }\n });\n for (const block of content) {\n const contentBlockBase: ContentBlock.Standard = iife(() => {\n if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n return {\n type: \"text\",\n text: block.text,\n };\n } else if (\n _isContentBlock(block, \"inlineData\") &&\n _isObject(block.inlineData) &&\n _isString(block.inlineData.mimeType) &&\n _isString(block.inlineData.data)\n ) {\n return {\n type: \"file\",\n mimeType: block.inlineData.mimeType,\n data: block.inlineData.data,\n };\n } else if (\n _isContentBlock(block, \"functionCall\") &&\n _isObject(block.functionCall) &&\n _isString(block.functionCall.name) &&\n _isObject(block.functionCall.args)\n ) {\n return {\n type: \"tool_call\",\n id: message.id,\n name: block.functionCall.name,\n args: block.functionCall.args,\n };\n } else if (_isContentBlock(block, \"functionResponse\")) {\n return { type: \"non_standard\", value: block };\n } else if (\n _isContentBlock(block, \"fileData\") &&\n _isObject(block.fileData) &&\n _isString(block.fileData.mimeType) &&\n _isString(block.fileData.fileUri)\n ) {\n return {\n type: \"file\",\n mimeType: block.fileData.mimeType,\n fileId: block.fileData.fileUri,\n };\n } else if (_isContentBlock(block, \"executableCode\")) {\n return { type: \"non_standard\", value: block };\n } else if (_isContentBlock(block, \"codeExecutionResult\")) {\n return { type: \"non_standard\", value: block };\n }\n return { type: \"non_standard\", value: block };\n });\n const contentBlock: ContentBlock.Standard = iife(() => {\n if (\"thought\" in block && block.thought) {\n const reasoning: string =\n contentBlockBase.type === \"text\" ? contentBlockBase.text : \"\";\n return {\n type: \"reasoning\",\n reasoning,\n reasoningContentBlock: contentBlockBase,\n };\n } else {\n return contentBlockBase;\n }\n });\n\n const ret: ContentBlock.Standard = {\n thought: block.thought,\n thoughtSignature: block.thoughtSignature,\n partMetadata: block.partMetadata,\n ...contentBlock,\n };\n for (const attribute in ret) {\n if (ret[attribute] === undefined) {\n delete ret[attribute];\n }\n }\n\n yield ret;\n continue;\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatGoogleTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatGoogleMessage,\n translateContentChunk: convertToV1FromChatGoogleMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAC9B,UAAU,iBAAkD;EAC1D,MAAM,UAAU,WAAW;GACzB,IAAI,OAAO,QAAQ,YAAY,UAAU;IACvC,IAAI,QAAQ,kBAAkB,0BAC5B,OAAO,CACL;KACE,GAAG,QAAQ,kBAAkB;KAC7B,MAAM;IACR,CACF;SAEA,OAAO,CAAC;KAAE,MAAM;KAAQ,MAAM,QAAQ;IAAQ,CAAC;GAEnD,OAAO;IACL,MAAM,gBAAgB,QAAQ,mBAC1B;IACJ,IAAI,eAAe,kBASb;SAAA,CAH0B,QAAQ,QAAQ,MAC3C,MAA+B,sBAAsB,CAE/B,GAAG;MAC1B,MAAM,SAAS,CAAC,GAAG,QAAQ,OAAO;MAClC,KAAK,IAAI,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;OAC3C,MAAM,QAAQ,OAAO;OACrB,IAAI,MAAM,SAAS,UAAU,CAAC,MAAM,SAAS;QAC3C,MAAM,mBAAmB,cAAc;QACvC,OAAO;OACT;MACF;KACF;;IAEF,OAAO,QAAQ;GACjB;EACF,CAAC;EACD,KAAK,MAAM,SAAS,SAAS;GAC3B,MAAM,mBAA0C,WAAW;IACzD,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GACxD,OAAO;KACL,MAAM;KACN,MAAM,MAAM;IACd;SACK,IACL,gBAAgB,OAAO,YAAY,KACnC,UAAU,MAAM,UAAU,KAC1B,UAAU,MAAM,WAAW,QAAQ,KACnC,UAAU,MAAM,WAAW,IAAI,GAE/B,OAAO;KACL,MAAM;KACN,UAAU,MAAM,WAAW;KAC3B,MAAM,MAAM,WAAW;IACzB;SACK,IACL,gBAAgB,OAAO,cAAc,KACrC,UAAU,MAAM,YAAY,KAC5B,UAAU,MAAM,aAAa,IAAI,KACjC,UAAU,MAAM,aAAa,IAAI,GAEjC,OAAO;KACL,MAAM;KACN,IAAI,QAAQ;KACZ,MAAM,MAAM,aAAa;KACzB,MAAM,MAAM,aAAa;IAC3B;SACK,IAAI,gBAAgB,OAAO,kBAAkB,GAClD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,SAAS,QAAQ,KACjC,UAAU,MAAM,SAAS,OAAO,GAEhC,OAAO;KACL,MAAM;KACN,UAAU,MAAM,SAAS;KACzB,QAAQ,MAAM,SAAS;IACzB;SACK,IAAI,gBAAgB,OAAO,gBAAgB,GAChD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;SACvC,IAAI,gBAAgB,OAAO,qBAAqB,GACrD,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;IAE9C,OAAO;KAAE,MAAM;KAAgB,OAAO;IAAM;GAC9C,CAAC;GACD,MAAM,eAAsC,WAAW;IACrD,IAAI,aAAa,SAAS,MAAM,SAG9B,OAAO;KACL,MAAM;KACN,WAHA,iBAAiB,SAAS,SAAS,iBAAiB,OAAO;KAI3D,uBAAuB;IACzB;SAEA,OAAO;GAEX,CAAC;GAED,MAAM,MAA6B;IACjC,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,cAAc,MAAM;IACpB,GAAG;GACL;GACA,KAAK,MAAM,aAAa,KACtB,IAAI,IAAI,eAAe,KAAA,GACrB,OAAO,IAAI;GAIf,MAAM;EAER;CACF;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
@@ -37,21 +37,23 @@ function convertToV1FromChatVertexMessage(message) {
37
37
  };
38
38
  continue;
39
39
  } else if (require_utils._isContentBlock(block, "image_url")) {
40
- if (require_utils._isString(block.image_url)) if (block.image_url.startsWith("data:")) {
41
- const match = block.image_url.match(/^data:([^;]+);base64,(.+)$/);
42
- if (match) yield {
43
- type: "image",
44
- data: match[2],
45
- mimeType: match[1]
46
- };
47
- else yield {
40
+ if (require_utils._isString(block.image_url)) {
41
+ if (block.image_url.startsWith("data:")) {
42
+ const match = block.image_url.match(/^data:([^;]+);base64,(.+)$/);
43
+ if (match) yield {
44
+ type: "image",
45
+ data: match[2],
46
+ mimeType: match[1]
47
+ };
48
+ else yield {
49
+ type: "image",
50
+ url: block.image_url
51
+ };
52
+ } else yield {
48
53
  type: "image",
49
54
  url: block.image_url
50
55
  };
51
- } else yield {
52
- type: "image",
53
- url: block.image_url
54
- };
56
+ }
55
57
  continue;
56
58
  } else if (require_utils._isContentBlock(block, "media") && require_utils._isString(block.mimeType) && require_utils._isString(block.data)) {
57
59
  yield {
@@ -1 +1 @@
1
- {"version":3,"file":"google_vertexai.cjs","names":["_isContentBlock","_isString","iife","_isArray"],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\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 if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAIA,cAAAA,gBAAgB,OAAO,WAAW,KAAKC,cAAAA,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAYC,cAAAA,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACEC,cAAAA,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAIF,cAAAA,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,UAAU,KACjCC,cAAAA,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,MAAM,KAAKC,cAAAA,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAIC,cAAAA,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,OAAO,KAC9BC,cAAAA,UAAU,MAAM,QAAQ,KACxBA,cAAAA,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google_vertexai.cjs","names":["_isContentBlock","_isString","iife","_isArray"],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\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 if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAIA,cAAAA,gBAAgB,OAAO,WAAW,KAAKC,cAAAA,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAYC,cAAAA,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACEC,cAAAA,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAIF,cAAAA,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,UAAU,KACjCC,cAAAA,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,MAAM,KAAKC,cAAAA,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAID,cAAAA,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAIC,cAAAA,UAAU,MAAM,SAAS,GAAG;KAC9B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;MAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;MAChD,IAAI,OACF,MAAM;OAAE,MAAM;OAAS,MAAM,MAAM;OAAI,UAAU,MAAM;MAAG;WAE1D,MAAM;OAAE,MAAM;OAAS,KAAK,MAAM;MAAU;KAEhD,OACE,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD;IACA;GACF,OAAO,IACLD,cAAAA,gBAAgB,OAAO,OAAO,KAC9BC,cAAAA,UAAU,MAAM,QAAQ,KACxBA,cAAAA,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
@@ -37,21 +37,23 @@ function convertToV1FromChatVertexMessage(message) {
37
37
  };
38
38
  continue;
39
39
  } else if (_isContentBlock(block, "image_url")) {
40
- if (_isString(block.image_url)) if (block.image_url.startsWith("data:")) {
41
- const match = block.image_url.match(/^data:([^;]+);base64,(.+)$/);
42
- if (match) yield {
43
- type: "image",
44
- data: match[2],
45
- mimeType: match[1]
46
- };
47
- else yield {
40
+ if (_isString(block.image_url)) {
41
+ if (block.image_url.startsWith("data:")) {
42
+ const match = block.image_url.match(/^data:([^;]+);base64,(.+)$/);
43
+ if (match) yield {
44
+ type: "image",
45
+ data: match[2],
46
+ mimeType: match[1]
47
+ };
48
+ else yield {
49
+ type: "image",
50
+ url: block.image_url
51
+ };
52
+ } else yield {
48
53
  type: "image",
49
54
  url: block.image_url
50
55
  };
51
- } else yield {
52
- type: "image",
53
- url: block.image_url
54
- };
56
+ }
55
57
  continue;
56
58
  } else if (_isContentBlock(block, "media") && _isString(block.mimeType) && _isString(block.data)) {
57
59
  yield {
@@ -1 +1 @@
1
- {"version":3,"file":"google_vertexai.js","names":[],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\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 if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAY,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACE,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAI,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAI,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAI,UAAU,MAAM,SAAS,GAC3B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;KAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;KAChD,IAAI,OACF,MAAM;MAAE,MAAM;MAAS,MAAM,MAAM;MAAI,UAAU,MAAM;KAAG;UAE1D,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD,OACE,MAAM;KAAE,MAAM;KAAS,KAAK,MAAM;IAAU;IAGhD;GACF,OAAO,IACL,gBAAgB,OAAO,OAAO,KAC9B,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}
1
+ {"version":3,"file":"google_vertexai.js","names":[],"sources":["../../../src/messages/block_translators/google_vertexai.ts"],"sourcesContent":["import { AIMessage } from \"../ai.js\";\nimport { ContentBlock } from \"../content/index.js\";\nimport type { StandardContentBlockTranslator } from \"./index.js\";\nimport { _isArray, _isContentBlock, _isString, iife } from \"./utils.js\";\n\nfunction convertToV1FromChatVertexMessage(\n message: AIMessage\n): Array<ContentBlock.Standard> {\n // see `/libs/providers/langchain-google-common/src/utils/gemini.ts:partsToMessageContent`\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 if (_isContentBlock(block, \"reasoning\") && _isString(block.reasoning)) {\n const signature = iife(() => {\n const reasoningIndex = content.indexOf(block);\n if (\n _isArray(message.additional_kwargs?.signatures) &&\n reasoningIndex >= 0\n ) {\n return message.additional_kwargs.signatures.at(reasoningIndex);\n }\n return undefined;\n });\n if (_isString(signature)) {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n signature,\n };\n } else {\n yield {\n type: \"reasoning\",\n reasoning: block.reasoning,\n };\n }\n continue;\n } else if (\n _isContentBlock(block, \"thinking\") &&\n _isString(block.thinking)\n ) {\n // Handle thinking blocks (Anthropic-style format used in some Google models)\n yield {\n type: \"reasoning\",\n reasoning: block.thinking,\n ...(block.signature ? { signature: block.signature } : {}),\n };\n continue;\n } else if (_isContentBlock(block, \"text\") && _isString(block.text)) {\n if (block.text === \"\") {\n continue;\n }\n yield { type: \"text\", text: block.text };\n continue;\n } else if (_isContentBlock(block, \"image_url\")) {\n if (_isString(block.image_url)) {\n if (block.image_url.startsWith(\"data:\")) {\n const dataUrlRegex = /^data:([^;]+);base64,(.+)$/;\n const match = block.image_url.match(dataUrlRegex);\n if (match) {\n yield { type: \"image\", data: match[2], mimeType: match[1] };\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n } else {\n yield { type: \"image\", url: block.image_url };\n }\n }\n continue;\n } else if (\n _isContentBlock(block, \"media\") &&\n _isString(block.mimeType) &&\n _isString(block.data)\n ) {\n yield { type: \"file\", mimeType: block.mimeType, data: block.data };\n continue;\n }\n yield { type: \"non_standard\", value: block };\n }\n for (const toolCall of message.tool_calls ?? []) {\n yield {\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n };\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const ChatVertexTranslator: StandardContentBlockTranslator = {\n translateContent: convertToV1FromChatVertexMessage,\n translateContentChunk: convertToV1FromChatVertexMessage,\n};\n"],"mappings":";;AAKA,SAAS,iCACP,SAC8B;CAE9B,UAAU,iBAAkD;EAC1D,MAAM,UACJ,OAAO,QAAQ,YAAY,WACvB,CAAC;GAAE,MAAM;GAAQ,MAAM,QAAQ;EAAQ,CAAC,IACxC,QAAQ;EACd,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,GAAG;IACrE,MAAM,YAAY,WAAW;KAC3B,MAAM,iBAAiB,QAAQ,QAAQ,KAAK;KAC5C,IACE,SAAS,QAAQ,mBAAmB,UAAU,KAC9C,kBAAkB,GAElB,OAAO,QAAQ,kBAAkB,WAAW,GAAG,cAAc;IAGjE,CAAC;IACD,IAAI,UAAU,SAAS,GACrB,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB;IACF;SAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;IACnB;IAEF;GACF,OAAO,IACL,gBAAgB,OAAO,UAAU,KACjC,UAAU,MAAM,QAAQ,GACxB;IAEA,MAAM;KACJ,MAAM;KACN,WAAW,MAAM;KACjB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;IAC1D;IACA;GACF,OAAO,IAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,GAAG;IAClE,IAAI,MAAM,SAAS,IACjB;IAEF,MAAM;KAAE,MAAM;KAAQ,MAAM,MAAM;IAAK;IACvC;GACF,OAAO,IAAI,gBAAgB,OAAO,WAAW,GAAG;IAC9C,IAAI,UAAU,MAAM,SAAS,GAAG;KAC9B,IAAI,MAAM,UAAU,WAAW,OAAO,GAAG;MAEvC,MAAM,QAAQ,MAAM,UAAU,MAAM,4BAAY;MAChD,IAAI,OACF,MAAM;OAAE,MAAM;OAAS,MAAM,MAAM;OAAI,UAAU,MAAM;MAAG;WAE1D,MAAM;OAAE,MAAM;OAAS,KAAK,MAAM;MAAU;KAEhD,OACE,MAAM;MAAE,MAAM;MAAS,KAAK,MAAM;KAAU;IAEhD;IACA;GACF,OAAO,IACL,gBAAgB,OAAO,OAAO,KAC9B,UAAU,MAAM,QAAQ,KACxB,UAAU,MAAM,IAAI,GACpB;IACA,MAAM;KAAE,MAAM;KAAQ,UAAU,MAAM;KAAU,MAAM,MAAM;IAAK;IACjE;GACF;GACA,MAAM;IAAE,MAAM;IAAgB,OAAO;GAAM;EAC7C;EACA,KAAK,MAAM,YAAY,QAAQ,cAAc,CAAC,GAC5C,MAAM;GACJ,MAAM;GACN,IAAI,SAAS;GACb,MAAM,SAAS;GACf,MAAM,SAAS;EACjB;CAEJ;CACA,OAAO,MAAM,KAAK,eAAe,CAAC;AACpC;AAEA,MAAa,uBAAuD;CAClE,kBAAkB;CAClB,uBAAuB;AACzB"}