@langchain/core 1.0.0-alpha.6 → 1.0.0

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 (245) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/LICENSE +6 -6
  3. package/README.md +2 -23
  4. package/dist/agents.d.ts.map +1 -1
  5. package/dist/caches/base.d.cts.map +1 -1
  6. package/dist/callbacks/base.d.cts.map +1 -1
  7. package/dist/callbacks/base.d.ts.map +1 -1
  8. package/dist/callbacks/manager.cjs +9 -64
  9. package/dist/callbacks/manager.cjs.map +1 -1
  10. package/dist/callbacks/manager.d.cts +1 -23
  11. package/dist/callbacks/manager.d.cts.map +1 -1
  12. package/dist/callbacks/manager.d.ts +1 -23
  13. package/dist/callbacks/manager.d.ts.map +1 -1
  14. package/dist/callbacks/manager.js +10 -63
  15. package/dist/callbacks/manager.js.map +1 -1
  16. package/dist/chat_history.cjs +0 -4
  17. package/dist/chat_history.cjs.map +1 -1
  18. package/dist/chat_history.d.cts +1 -3
  19. package/dist/chat_history.d.cts.map +1 -1
  20. package/dist/chat_history.d.ts +1 -3
  21. package/dist/chat_history.d.ts.map +1 -1
  22. package/dist/chat_history.js +0 -4
  23. package/dist/chat_history.js.map +1 -1
  24. package/dist/document_loaders/base.cjs +1 -13
  25. package/dist/document_loaders/base.cjs.map +1 -1
  26. package/dist/document_loaders/base.d.cts +0 -9
  27. package/dist/document_loaders/base.d.cts.map +1 -1
  28. package/dist/document_loaders/base.d.ts +0 -9
  29. package/dist/document_loaders/base.d.ts.map +1 -1
  30. package/dist/document_loaders/base.js +1 -13
  31. package/dist/document_loaders/base.js.map +1 -1
  32. package/dist/document_loaders/langsmith.d.cts +1 -1
  33. package/dist/language_models/base.cjs.map +1 -1
  34. package/dist/language_models/base.d.cts +0 -16
  35. package/dist/language_models/base.d.cts.map +1 -1
  36. package/dist/language_models/base.d.ts +0 -16
  37. package/dist/language_models/base.d.ts.map +1 -1
  38. package/dist/language_models/base.js.map +1 -1
  39. package/dist/language_models/chat_models.cjs +10 -83
  40. package/dist/language_models/chat_models.cjs.map +1 -1
  41. package/dist/language_models/chat_models.d.cts +21 -55
  42. package/dist/language_models/chat_models.d.cts.map +1 -1
  43. package/dist/language_models/chat_models.d.ts +21 -55
  44. package/dist/language_models/chat_models.d.ts.map +1 -1
  45. package/dist/language_models/chat_models.js +11 -83
  46. package/dist/language_models/chat_models.js.map +1 -1
  47. package/dist/language_models/llms.cjs +0 -56
  48. package/dist/language_models/llms.cjs.map +1 -1
  49. package/dist/language_models/llms.d.cts +1 -43
  50. package/dist/language_models/llms.d.cts.map +1 -1
  51. package/dist/language_models/llms.d.ts +1 -43
  52. package/dist/language_models/llms.d.ts.map +1 -1
  53. package/dist/language_models/llms.js +0 -56
  54. package/dist/language_models/llms.js.map +1 -1
  55. package/dist/load/import_map.cjs +1 -7
  56. package/dist/load/import_map.cjs.map +1 -1
  57. package/dist/load/import_map.js +1 -7
  58. package/dist/load/import_map.js.map +1 -1
  59. package/dist/messages/ai.cjs +4 -0
  60. package/dist/messages/ai.cjs.map +1 -1
  61. package/dist/messages/ai.js +4 -0
  62. package/dist/messages/ai.js.map +1 -1
  63. package/dist/messages/block_translators/anthropic.cjs +191 -144
  64. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  65. package/dist/messages/block_translators/anthropic.js +191 -144
  66. package/dist/messages/block_translators/anthropic.js.map +1 -1
  67. package/dist/messages/block_translators/index.cjs +2 -2
  68. package/dist/messages/block_translators/index.cjs.map +1 -1
  69. package/dist/messages/block_translators/index.js +4 -4
  70. package/dist/messages/block_translators/index.js.map +1 -1
  71. package/dist/messages/block_translators/openai.cjs +78 -22
  72. package/dist/messages/block_translators/openai.cjs.map +1 -1
  73. package/dist/messages/block_translators/openai.js +78 -22
  74. package/dist/messages/block_translators/openai.js.map +1 -1
  75. package/dist/messages/content/tools.cjs +1 -5
  76. package/dist/messages/content/tools.cjs.map +1 -1
  77. package/dist/messages/content/tools.d.cts +1 -85
  78. package/dist/messages/content/tools.d.cts.map +1 -1
  79. package/dist/messages/content/tools.d.ts +1 -85
  80. package/dist/messages/content/tools.d.ts.map +1 -1
  81. package/dist/messages/content/tools.js +1 -5
  82. package/dist/messages/content/tools.js.map +1 -1
  83. package/dist/messages/metadata.cjs.map +1 -1
  84. package/dist/messages/metadata.d.cts +3 -0
  85. package/dist/messages/metadata.d.cts.map +1 -1
  86. package/dist/messages/metadata.d.ts +3 -0
  87. package/dist/messages/metadata.d.ts.map +1 -1
  88. package/dist/messages/metadata.js.map +1 -1
  89. package/dist/messages/tool.cjs +2 -0
  90. package/dist/messages/tool.cjs.map +1 -1
  91. package/dist/messages/tool.d.cts +2 -0
  92. package/dist/messages/tool.d.cts.map +1 -1
  93. package/dist/messages/tool.d.ts +2 -0
  94. package/dist/messages/tool.d.ts.map +1 -1
  95. package/dist/messages/tool.js +2 -0
  96. package/dist/messages/tool.js.map +1 -1
  97. package/dist/output_parsers/json.cjs +5 -0
  98. package/dist/output_parsers/json.cjs.map +1 -1
  99. package/dist/output_parsers/json.d.cts +2 -0
  100. package/dist/output_parsers/json.d.cts.map +1 -1
  101. package/dist/output_parsers/json.d.ts +2 -0
  102. package/dist/output_parsers/json.d.ts.map +1 -1
  103. package/dist/output_parsers/json.js +5 -0
  104. package/dist/output_parsers/json.js.map +1 -1
  105. package/dist/prompts/base.cjs +0 -36
  106. package/dist/prompts/base.cjs.map +1 -1
  107. package/dist/prompts/base.d.cts +0 -16
  108. package/dist/prompts/base.d.cts.map +1 -1
  109. package/dist/prompts/base.d.ts +0 -16
  110. package/dist/prompts/base.d.ts.map +1 -1
  111. package/dist/prompts/base.js +0 -36
  112. package/dist/prompts/base.js.map +1 -1
  113. package/dist/prompts/chat.cjs +1 -5
  114. package/dist/prompts/chat.cjs.map +1 -1
  115. package/dist/prompts/chat.d.cts +1 -4
  116. package/dist/prompts/chat.d.cts.map +1 -1
  117. package/dist/prompts/chat.d.ts +1 -4
  118. package/dist/prompts/chat.d.ts.map +1 -1
  119. package/dist/prompts/chat.js +1 -5
  120. package/dist/prompts/chat.js.map +1 -1
  121. package/dist/prompts/dict.d.cts +1 -1
  122. package/dist/prompts/dict.d.ts +1 -1
  123. package/dist/prompts/few_shot.d.cts +2 -2
  124. package/dist/prompts/few_shot.d.ts +2 -2
  125. package/dist/prompts/image.d.cts +1 -1
  126. package/dist/prompts/image.d.ts +1 -1
  127. package/dist/prompts/index.d.cts +2 -2
  128. package/dist/prompts/index.d.ts +2 -2
  129. package/dist/prompts/pipeline.d.cts +1 -1
  130. package/dist/prompts/pipeline.d.ts +1 -1
  131. package/dist/prompts/prompt.d.cts +2 -2
  132. package/dist/prompts/prompt.d.ts +2 -2
  133. package/dist/retrievers/index.cjs +3 -18
  134. package/dist/retrievers/index.cjs.map +1 -1
  135. package/dist/retrievers/index.d.cts +2 -27
  136. package/dist/retrievers/index.d.cts.map +1 -1
  137. package/dist/retrievers/index.d.ts +2 -27
  138. package/dist/retrievers/index.d.ts.map +1 -1
  139. package/dist/retrievers/index.js +3 -18
  140. package/dist/retrievers/index.js.map +1 -1
  141. package/dist/runnables/base.cjs +24 -63
  142. package/dist/runnables/base.cjs.map +1 -1
  143. package/dist/runnables/base.d.cts +10 -39
  144. package/dist/runnables/base.d.cts.map +1 -1
  145. package/dist/runnables/base.d.ts +10 -39
  146. package/dist/runnables/base.d.ts.map +1 -1
  147. package/dist/runnables/base.js +24 -63
  148. package/dist/runnables/base.js.map +1 -1
  149. package/dist/runnables/graph.cjs +1 -1
  150. package/dist/runnables/graph.cjs.map +1 -1
  151. package/dist/runnables/graph.js +2 -2
  152. package/dist/runnables/graph.js.map +1 -1
  153. package/dist/runnables/graph_mermaid.cjs +1 -10
  154. package/dist/runnables/graph_mermaid.cjs.map +1 -1
  155. package/dist/runnables/graph_mermaid.js +1 -10
  156. package/dist/runnables/graph_mermaid.js.map +1 -1
  157. package/dist/runnables/history.cjs +1 -1
  158. package/dist/runnables/history.cjs.map +1 -1
  159. package/dist/runnables/history.d.cts +2 -2
  160. package/dist/runnables/history.d.cts.map +1 -1
  161. package/dist/runnables/history.d.ts +2 -2
  162. package/dist/runnables/history.d.ts.map +1 -1
  163. package/dist/runnables/history.js +1 -1
  164. package/dist/runnables/history.js.map +1 -1
  165. package/dist/stores.cjs.map +1 -1
  166. package/dist/stores.d.cts +3 -29
  167. package/dist/stores.d.cts.map +1 -1
  168. package/dist/stores.d.ts +3 -29
  169. package/dist/stores.d.ts.map +1 -1
  170. package/dist/stores.js.map +1 -1
  171. package/dist/tools/index.cjs +12 -4
  172. package/dist/tools/index.cjs.map +1 -1
  173. package/dist/tools/index.js +12 -4
  174. package/dist/tools/index.js.map +1 -1
  175. package/dist/tools/types.cjs.map +1 -1
  176. package/dist/tools/types.d.cts +4 -0
  177. package/dist/tools/types.d.cts.map +1 -1
  178. package/dist/tools/types.d.ts +4 -0
  179. package/dist/tools/types.d.ts.map +1 -1
  180. package/dist/tools/types.js.map +1 -1
  181. package/dist/tracers/base.cjs +1 -1
  182. package/dist/tracers/base.cjs.map +1 -1
  183. package/dist/tracers/base.d.cts +1 -1
  184. package/dist/tracers/base.js +2 -2
  185. package/dist/tracers/base.js.map +1 -1
  186. package/dist/tracers/log_stream.d.cts +1 -1
  187. package/dist/tracers/log_stream.d.ts +1 -1
  188. package/dist/tracers/tracer_langchain.cjs +1 -0
  189. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  190. package/dist/tracers/tracer_langchain.d.cts +2 -2
  191. package/dist/tracers/tracer_langchain.js +1 -0
  192. package/dist/tracers/tracer_langchain.js.map +1 -1
  193. package/dist/utils/env.cjs +1 -9
  194. package/dist/utils/env.cjs.map +1 -1
  195. package/dist/utils/env.d.cts +2 -6
  196. package/dist/utils/env.d.cts.map +1 -1
  197. package/dist/utils/env.d.ts +2 -6
  198. package/dist/utils/env.d.ts.map +1 -1
  199. package/dist/utils/env.js +2 -9
  200. package/dist/utils/env.js.map +1 -1
  201. package/dist/utils/testing/message_history.cjs +1 -1
  202. package/dist/utils/testing/message_history.cjs.map +1 -1
  203. package/dist/utils/testing/message_history.d.cts +1 -1
  204. package/dist/utils/testing/message_history.d.cts.map +1 -1
  205. package/dist/utils/testing/message_history.d.ts +1 -1
  206. package/dist/utils/testing/message_history.d.ts.map +1 -1
  207. package/dist/utils/testing/message_history.js +1 -1
  208. package/dist/utils/testing/message_history.js.map +1 -1
  209. package/dist/utils/types/index.cjs +6 -0
  210. package/dist/utils/types/index.d.cts +2 -2
  211. package/dist/utils/types/index.d.ts +2 -2
  212. package/dist/utils/types/index.js +5 -2
  213. package/dist/utils/types/zod.cjs +23 -0
  214. package/dist/utils/types/zod.cjs.map +1 -1
  215. package/dist/utils/types/zod.d.cts +11 -1
  216. package/dist/utils/types/zod.d.cts.map +1 -1
  217. package/dist/utils/types/zod.d.ts +11 -1
  218. package/dist/utils/types/zod.d.ts.map +1 -1
  219. package/dist/utils/types/zod.js +21 -1
  220. package/dist/utils/types/zod.js.map +1 -1
  221. package/package.json +121 -154
  222. package/dist/runnables/remote.cjs +0 -399
  223. package/dist/runnables/remote.cjs.map +0 -1
  224. package/dist/runnables/remote.d.cts +0 -73
  225. package/dist/runnables/remote.d.cts.map +0 -1
  226. package/dist/runnables/remote.d.ts +0 -73
  227. package/dist/runnables/remote.d.ts.map +0 -1
  228. package/dist/runnables/remote.js +0 -393
  229. package/dist/runnables/remote.js.map +0 -1
  230. package/dist/tracers/initialize.cjs +0 -46
  231. package/dist/tracers/initialize.cjs.map +0 -1
  232. package/dist/tracers/initialize.d.cts +0 -26
  233. package/dist/tracers/initialize.d.cts.map +0 -1
  234. package/dist/tracers/initialize.d.ts +0 -26
  235. package/dist/tracers/initialize.d.ts.map +0 -1
  236. package/dist/tracers/initialize.js +0 -39
  237. package/dist/tracers/initialize.js.map +0 -1
  238. package/dist/tracers/tracer_langchain_v1.cjs +0 -168
  239. package/dist/tracers/tracer_langchain_v1.cjs.map +0 -1
  240. package/dist/tracers/tracer_langchain_v1.d.cts +0 -64
  241. package/dist/tracers/tracer_langchain_v1.d.cts.map +0 -1
  242. package/dist/tracers/tracer_langchain_v1.d.ts +0 -64
  243. package/dist/tracers/tracer_langchain_v1.d.ts.map +0 -1
  244. package/dist/tracers/tracer_langchain_v1.js +0 -162
  245. package/dist/tracers/tracer_langchain_v1.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","names":["fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>","initParams: AIMessageFields<TStructure>","toolCalls","obj: unknown","x: BaseMessage","x: BaseMessageChunk","fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>","initParams: AIMessageChunkFields<TStructure>","toolCalls: ToolCall[]","invalidToolCalls: InvalidToolCall[]","parsedArgs: Record<string, unknown> | null","chunk: AIMessageChunk<TStructure>","combinedFields: AIMessageChunkFields"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import { parsePartialJson } from \"../utils/json.js\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: ToolCall[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [toolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls = toolCalls ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [];\n initParams.invalid_tool_calls = [];\n }\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n }));\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...missingToolCalls.map((block) => ({\n ...block,\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n }))\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is AIMessage {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure\n >\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (fields.tool_call_chunks === undefined) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const groupedToolCallChunks = fields.tool_call_chunks.reduce(\n (acc, chunk) => {\n const matchedChunkIndex = acc.findIndex(([match]) => {\n // If chunk has an id and index, match if both are present\n if (\n \"id\" in chunk &&\n chunk.id &&\n \"index\" in chunk &&\n chunk.index !== undefined\n ) {\n return chunk.id === match.id && chunk.index === match.index;\n }\n // If chunk has an id, we match on id\n if (\"id\" in chunk && chunk.id) {\n return chunk.id === match.id;\n }\n // If chunk has an index, we match on index\n if (\"index\" in chunk && chunk.index !== undefined) {\n return chunk.index === match.index;\n }\n return false;\n });\n if (matchedChunkIndex !== -1) {\n acc[matchedChunkIndex].push(chunk);\n } else {\n acc.push([chunk]);\n }\n return acc;\n },\n [] as ToolCallChunk[][]\n );\n\n const toolCalls: ToolCall[] = [];\n const invalidToolCalls: InvalidToolCall[] = [];\n for (const chunks of groupedToolCallChunks) {\n let parsedArgs: Record<string, unknown> | null = null;\n const name = chunks[0]?.name ?? \"\";\n const joinedArgs = chunks.map((c) => c.args || \"\").join(\"\");\n const argsStr = joinedArgs.length ? joinedArgs : \"{}\";\n const id = chunks[0]?.id;\n try {\n parsedArgs = parsePartialJson(argsStr);\n if (\n !id ||\n parsedArgs === null ||\n typeof parsedArgs !== \"object\" ||\n Array.isArray(parsedArgs)\n ) {\n throw new Error(\"Malformed tool call chunk args.\");\n }\n toolCalls.push({\n name,\n args: parsedArgs,\n id,\n type: \"tool_call\",\n });\n } catch {\n invalidToolCalls.push({\n name,\n args: argsStr,\n id,\n error: \"Malformed args.\",\n type: \"invalid_tool_call\",\n });\n }\n }\n initParams = {\n ...fields,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n static isInstance(obj: unknown): obj is AIMessageChunk {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n"],"mappings":";;;;;;;AAiCA,IAAa,YAAb,cACU,YAEV;CACE,AAAS,OAAO;CAEhB,aAA0B,CAAE;CAE5B,qBAAyC,CAAE;CAE3C;CAEA,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;EACrB;CACF;CAED,YACEA,QACA;EACA,IAAIC;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,EACrD,aAAa;GACX,SAAS;GACT,YAAY,CAAE;GACd,oBAAoB,CAAE;GACtB,mBAAmB,CAAE;EACtB;OACI;GACL,aAAa;GACb,MAAM,eAAe,WAAW,mBAAmB;GACnD,MAAM,YAAY,WAAW;AAC7B,OACE,EAAE,gBAAgB,SAClB,aAAa,SAAS,MACrB,cAAc,UAAa,UAAU,WAAW,IAEjD,QAAQ,KACN;IACE;IACA;IACA;IACA;GACD,EAAC,KAAK,IAAI,CACZ;AAEH,OAAI;AACF,QAAI,EAAE,gBAAgB,SAAS,cAAc,QAAW;KACtD,MAAM,CAACC,aAAW,iBAAiB,GACjC,sBAAsB,aAAa;KACrC,WAAW,aAAaA,eAAa,CAAE;KACvC,WAAW,qBAAqB,oBAAoB,CAAE;IACvD,OAAM;KACL,WAAW,aAAa,WAAW,cAAc,CAAE;KACnD,WAAW,qBAAqB,WAAW,sBAAsB,CAAE;IACpE;GACF,QAAO;IAEN,WAAW,aAAa,CAAE;IAC1B,WAAW,qBAAqB,CAAE;GACnC;AACD,OAAI,WAAW,kBAAkB,QAAW;IAE1C,WAAW,cAAc,KACvB,GAAG,WAAW,WAAW,IAAI,CAAC,cAAc;KAC1C,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;IAChB,GAAE,CACJ;IAED,MAAM,mBAAmB,WAAW,cACjC,OACC,CAAC,UACC,MAAM,SAAS,YAClB,CACA,OACC,CAAC,UACC,CAAC,WAAW,YAAY,KACtB,CAAC,aACC,SAAS,OAAO,MAAM,MAAM,SAAS,SAAS,MAAM,KACvD,CACJ;AACH,QAAI,iBAAiB,SAAS,GAC5B,WAAW,aAAa,iBAAiB,IAAI,CAAC,WAAW;KACvD,MAAM;KACN,IAAI,MAAM;KACV,MAAM,MAAM;KACZ,MAAM,MAAM;IACb,GAAE;GAEN;EACF;EAGD,MAAM,WAAW;AACjB,MAAI,OAAO,eAAe,UAAU;GAClC,KAAK,aAAa,WAAW,cAAc,KAAK;GAChD,KAAK,qBACH,WAAW,sBAAsB,KAAK;EACzC;EACD,KAAK,iBAAiB,WAAW;CAClC;CAED,OAAO,UAAU;AACf,SAAO;CACR;CAED,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAK;EAE3C;EAED,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YAAY;GACnB,MAAM,mBAAmB,KAAK,WAAW,OACvC,CAAC,UACC,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,MAAM,EAAE,SAAS,MAAM,KAAK,CAClE;GACD,OAAO,KACL,GAAG,iBAAiB,IAAI,CAAC,WAAW;IAClC,GAAG;IACH,MAAM;IACN,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;GACb,GAAE,CACJ;EACF;AAED,SAAO;CACR;CAED,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;EACtB;CACF;CAED,OAAO,WAAWC,KAAgC;AAChD,SAAO,MAAM,WAAW,IAAI,IAAI,IAAI,SAAS;CAC9C;AACF;;;;AAKD,SAAgB,YACdC,GAC4B;AAC5B,QAAO,EAAE,UAAU,KAAK;AACzB;;;;AAKD,SAAgB,iBACdC,GACiC;AACjC,QAAO,EAAE,UAAU,KAAK;AACzB;;;;;AAYD,IAAa,iBAAb,cAGU,iBAEV;CACE,AAAS,OAAO;CAEhB,aAA0B,CAAE;CAE5B,qBAAyC,CAAE;CAE3C,mBAAqC,CAAE;CAEvC;CAEA,YACEC,QAGA;EACA,IAAIC;AACJ,MAAI,OAAO,WAAW,YAAY,MAAM,QAAQ,OAAO,EACrD,aAAa;GACX,SAAS;GACT,YAAY,CAAE;GACd,oBAAoB,CAAE;GACtB,kBAAkB,CAAE;EACrB;WACQ,OAAO,qBAAqB,QACrC,aAAa;GACX,GAAG;GACH,YAAY,OAAO,cAAc,CAAE;GACnC,oBAAoB,CAAE;GACtB,kBAAkB,CAAE;GACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;EACP;OACI;GACL,MAAM,wBAAwB,OAAO,iBAAiB,OACpD,CAAC,KAAK,UAAU;IACd,MAAM,oBAAoB,IAAI,UAAU,CAAC,CAAC,MAAM,KAAK;AAEnD,SACE,QAAQ,SACR,MAAM,MACN,WAAW,SACX,MAAM,UAAU,OAEhB,QAAO,MAAM,OAAO,MAAM,MAAM,MAAM,UAAU,MAAM;AAGxD,SAAI,QAAQ,SAAS,MAAM,GACzB,QAAO,MAAM,OAAO,MAAM;AAG5B,SAAI,WAAW,SAAS,MAAM,UAAU,OACtC,QAAO,MAAM,UAAU,MAAM;AAE/B,YAAO;IACR,EAAC;AACF,QAAI,sBAAsB,IACxB,IAAI,mBAAmB,KAAK,MAAM;SAElC,IAAI,KAAK,CAAC,KAAM,EAAC;AAEnB,WAAO;GACR,GACD,CAAE,EACH;GAED,MAAMC,YAAwB,CAAE;GAChC,MAAMC,mBAAsC,CAAE;AAC9C,QAAK,MAAM,UAAU,uBAAuB;IAC1C,IAAIC,aAA6C;IACjD,MAAM,OAAO,OAAO,IAAI,QAAQ;IAChC,MAAM,aAAa,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,KAAK,GAAG;IAC3D,MAAM,UAAU,WAAW,SAAS,aAAa;IACjD,MAAM,KAAK,OAAO,IAAI;AACtB,QAAI;KACF,aAAa,iBAAiB,QAAQ;AACtC,SACE,CAAC,MACD,eAAe,QACf,OAAO,eAAe,YACtB,MAAM,QAAQ,WAAW,CAEzB,OAAM,IAAI,MAAM;KAElB,UAAU,KAAK;MACb;MACA,MAAM;MACN;MACA,MAAM;KACP,EAAC;IACH,QAAO;KACN,iBAAiB,KAAK;MACpB;MACA,MAAM;MACN;MACA,OAAO;MACP,MAAM;KACP,EAAC;IACH;GACF;GACD,aAAa;IACX,GAAG;IACH,YAAY;IACZ,oBAAoB;IACpB,gBACE,OAAO,mBAAmB,SACtB,OAAO,iBACP;GACP;EACF;EAGD,MAAM,WAAW;EACjB,KAAK,mBACH,WAAW,oBAAoB,KAAK;EACtC,KAAK,aAAa,WAAW,cAAc,KAAK;EAChD,KAAK,qBACH,WAAW,sBAAsB,KAAK;EACxC,KAAK,iBAAiB,WAAW;CAClC;CAED,IAAI,aAAqC;AAEvC,SAAO;GACL,GAAG,MAAM;GACT,YAAY;GACZ,oBAAoB;GACpB,kBAAkB;EACnB;CACF;CAED,OAAO,UAAU;AACf,SAAO;CACR;CAED,IAAI,gBAA8C;AAChD,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,KAAK,kBAAkB,mBAAmB,KAE1C,QAAO,KAAK;AAGd,MACE,KAAK,qBACL,oBAAoB,KAAK,qBACzB,OAAO,KAAK,kBAAkB,mBAAmB,UACjD;GACA,MAAM,aAAa,cAAc,KAAK,kBAAkB,eAAe;AACvE,OAAI,WACF,QAAO,WAAW,iBAAiB,KAAK;EAE3C;EAED,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,YACP;OAAI,OAAO,KAAK,YAAY,UAAU;IACpC,MAAM,mBAAmB,KAAK,QAC3B,OAAO,CAAC,UAAU,MAAM,SAAS,YAAY,CAC7C,IAAI,CAAC,UAAU,MAAM,GAAG;AAC3B,SAAK,MAAM,YAAY,KAAK,WAC1B,KAAI,SAAS,MAAM,CAAC,iBAAiB,SAAS,SAAS,GAAG,EACxD,OAAO,KAAK;KACV,GAAG;KACH,MAAM;KACN,IAAI,SAAS;KACb,MAAM,SAAS;KACf,MAAM,SAAS;IAChB,EAAC;GAGP;;AAGH,SAAO;CACR;CAED,IAAa,mBAA4C;AACvD,SAAO;GACL,GAAG,MAAM;GACT,YAAY,KAAK;GACjB,kBAAkB,KAAK;GACvB,oBAAoB,KAAK;GACzB,gBAAgB,KAAK;EACtB;CACF;CAED,OAAOC,OAAmC;EACxC,MAAMC,iBAAuC;GAC3C,SAAS,aAAa,KAAK,SAAS,MAAM,QAAQ;GAClD,mBAAmB,YACjB,KAAK,mBACL,MAAM,kBACP;GACD,mBAAmB,sBACjB,KAAK,mBACL,MAAM,kBACP;GACD,kBAAkB,CAAE;GACpB,IAAI,KAAK,MAAM,MAAM;EACtB;AACD,MACE,KAAK,qBAAqB,UAC1B,MAAM,qBAAqB,QAC3B;GACA,MAAM,eAAe,YACnB,KAAK,kBACL,MAAM,iBACP;AACD,OAAI,iBAAiB,UAAa,aAAa,SAAS,GACtD,eAAe,mBAAmB;EAErC;AACD,MACE,KAAK,mBAAmB,UACxB,MAAM,mBAAmB,QAEzB,eAAe,iBAAiB,mBAC9B,KAAK,gBACL,MAAM,eACP;EAEH,MAAM,MAAM,KAAK;AACjB,SAAO,IAAI,IAAI;CAChB;CAED,OAAO,WAAWT,KAAqC;AACrD,SAAO,MAAM,WAAW,IAAI,IAAI,IAAI,SAAS;CAC9C;AACF"}
1
+ {"version":3,"file":"ai.js","names":["fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>","initParams: AIMessageFields<TStructure>","toolCalls","obj: unknown","x: BaseMessage","x: BaseMessageChunk","fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>","initParams: AIMessageChunkFields<TStructure>","toolCalls: ToolCall[]","invalidToolCalls: InvalidToolCall[]","parsedArgs: Record<string, unknown> | null","chunk: AIMessageChunk<TStructure>","combinedFields: AIMessageChunkFields"],"sources":["../../src/messages/ai.ts"],"sourcesContent":["import { parsePartialJson } from \"../utils/json.js\";\nimport {\n BaseMessage,\n BaseMessageChunk,\n mergeContent,\n _mergeDicts,\n _mergeLists,\n BaseMessageFields,\n} from \"./base.js\";\nimport { getTranslator } from \"./block_translators/index.js\";\nimport { ContentBlock } from \"./content/index.js\";\nimport {\n $InferMessageContent,\n $InferMessageProperty,\n MessageStructure,\n} from \"./message.js\";\nimport { mergeResponseMetadata, mergeUsageMetadata } from \"./metadata.js\";\nimport {\n InvalidToolCall,\n ToolCall,\n ToolCallChunk,\n defaultToolCallParser,\n} from \"./tool.js\";\nimport { Constructor } from \"./utils.js\";\n\nexport interface AIMessageFields<\n TStructure extends MessageStructure = MessageStructure\n> extends BaseMessageFields<TStructure, \"ai\"> {\n tool_calls?: ToolCall[];\n invalid_tool_calls?: InvalidToolCall[];\n usage_metadata?: $InferMessageProperty<TStructure, \"ai\", \"usage_metadata\">;\n}\n\nexport class AIMessage<TStructure extends MessageStructure = MessageStructure>\n extends BaseMessage<TStructure, \"ai\">\n implements AIMessageFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n usage_metadata?: AIMessageFields<TStructure>[\"usage_metadata\"];\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n };\n }\n\n constructor(\n fields: $InferMessageContent<TStructure, \"ai\"> | AIMessageFields<TStructure>\n ) {\n let initParams: AIMessageFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n additional_kwargs: {},\n };\n } else {\n initParams = fields;\n const rawToolCalls = initParams.additional_kwargs?.tool_calls;\n const toolCalls = initParams.tool_calls;\n if (\n !(rawToolCalls == null) &&\n rawToolCalls.length > 0 &&\n (toolCalls === undefined || toolCalls.length === 0)\n ) {\n console.warn(\n [\n \"New LangChain packages are available that more efficiently handle\",\n \"tool calling.\\n\\nPlease upgrade your packages to versions that set\",\n \"message tool calls. e.g., `pnpm install @langchain/anthropic`,\",\n \"pnpm install @langchain/openai`, etc.\",\n ].join(\" \")\n );\n }\n try {\n if (!(rawToolCalls == null) && toolCalls === undefined) {\n const [toolCalls, invalidToolCalls] =\n defaultToolCallParser(rawToolCalls);\n initParams.tool_calls = toolCalls ?? [];\n initParams.invalid_tool_calls = invalidToolCalls ?? [];\n } else {\n initParams.tool_calls = initParams.tool_calls ?? [];\n initParams.invalid_tool_calls = initParams.invalid_tool_calls ?? [];\n }\n } catch {\n // Do nothing if parsing fails\n initParams.tool_calls = [];\n initParams.invalid_tool_calls = [];\n }\n\n // Convert content to content blocks if output version is v1\n if (\n initParams.response_metadata !== undefined &&\n \"output_version\" in initParams.response_metadata &&\n initParams.response_metadata.output_version === \"v1\"\n ) {\n initParams.contentBlocks =\n initParams.content as Array<ContentBlock.Standard>;\n initParams.content = undefined;\n }\n\n if (initParams.contentBlocks !== undefined) {\n // Add constructor tool calls as content blocks\n initParams.contentBlocks.push(\n ...initParams.tool_calls.map((toolCall) => ({\n type: \"tool_call\" as const,\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n }))\n );\n // Add content block tool calls that aren't in the constructor tool calls\n const missingToolCalls = initParams.contentBlocks\n .filter<ContentBlock.Tools.ToolCall>(\n (block): block is ContentBlock.Tools.ToolCall =>\n block.type === \"tool_call\"\n )\n .filter(\n (block) =>\n !initParams.tool_calls?.some(\n (toolCall) =>\n toolCall.id === block.id && toolCall.name === block.name\n )\n );\n if (missingToolCalls.length > 0) {\n initParams.tool_calls = missingToolCalls.map((block) => ({\n type: \"tool_call\" as const,\n id: block.id!,\n name: block.name,\n args: block.args as Record<string, unknown>,\n }));\n }\n }\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n if (typeof initParams !== \"string\") {\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n }\n this.usage_metadata = initParams.usage_metadata;\n }\n\n static lc_name() {\n return \"AIMessage\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n const missingToolCalls = this.tool_calls.filter(\n (block) =>\n !blocks.some((b) => b.id === block.id && b.name === block.name)\n );\n blocks.push(\n ...missingToolCalls.map((block) => ({\n ...block,\n type: \"tool_call\" as const,\n id: block.id,\n name: block.name,\n args: block.args,\n }))\n );\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n static isInstance(obj: unknown): obj is AIMessage {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n\n/**\n * @deprecated Use {@link AIMessage.isInstance} instead\n */\nexport function isAIMessage<TStructure extends MessageStructure>(\n x: BaseMessage\n): x is AIMessage<TStructure> {\n return x._getType() === \"ai\";\n}\n\n/**\n * @deprecated Use {@link AIMessageChunk.isInstance} instead\n */\nexport function isAIMessageChunk<TStructure extends MessageStructure>(\n x: BaseMessageChunk\n): x is AIMessageChunk<TStructure> {\n return x._getType() === \"ai\";\n}\n\nexport type AIMessageChunkFields<\n TStructure extends MessageStructure = MessageStructure\n> = AIMessageFields<TStructure> & {\n tool_call_chunks?: ToolCallChunk[];\n};\n\n/**\n * Represents a chunk of an AI message, which can be concatenated with\n * other AI message chunks.\n */\nexport class AIMessageChunk<\n TStructure extends MessageStructure = MessageStructure\n >\n extends BaseMessageChunk<TStructure, \"ai\">\n implements AIMessage<TStructure>, AIMessageChunkFields<TStructure>\n{\n readonly type = \"ai\" as const;\n\n tool_calls?: ToolCall[] = [];\n\n invalid_tool_calls?: InvalidToolCall[] = [];\n\n tool_call_chunks?: ToolCallChunk[] = [];\n\n usage_metadata?: AIMessageChunkFields<TStructure>[\"usage_metadata\"];\n\n constructor(\n fields:\n | $InferMessageContent<TStructure, \"ai\">\n | AIMessageChunkFields<TStructure>\n ) {\n let initParams: AIMessageChunkFields<TStructure>;\n if (typeof fields === \"string\" || Array.isArray(fields)) {\n initParams = {\n content: fields,\n tool_calls: [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n };\n } else if (fields.tool_call_chunks === undefined) {\n initParams = {\n ...fields,\n tool_calls: fields.tool_calls ?? [],\n invalid_tool_calls: [],\n tool_call_chunks: [],\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n } else {\n const groupedToolCallChunks = fields.tool_call_chunks.reduce(\n (acc, chunk) => {\n const matchedChunkIndex = acc.findIndex(([match]) => {\n // If chunk has an id and index, match if both are present\n if (\n \"id\" in chunk &&\n chunk.id &&\n \"index\" in chunk &&\n chunk.index !== undefined\n ) {\n return chunk.id === match.id && chunk.index === match.index;\n }\n // If chunk has an id, we match on id\n if (\"id\" in chunk && chunk.id) {\n return chunk.id === match.id;\n }\n // If chunk has an index, we match on index\n if (\"index\" in chunk && chunk.index !== undefined) {\n return chunk.index === match.index;\n }\n return false;\n });\n if (matchedChunkIndex !== -1) {\n acc[matchedChunkIndex].push(chunk);\n } else {\n acc.push([chunk]);\n }\n return acc;\n },\n [] as ToolCallChunk[][]\n );\n\n const toolCalls: ToolCall[] = [];\n const invalidToolCalls: InvalidToolCall[] = [];\n for (const chunks of groupedToolCallChunks) {\n let parsedArgs: Record<string, unknown> | null = null;\n const name = chunks[0]?.name ?? \"\";\n const joinedArgs = chunks.map((c) => c.args || \"\").join(\"\");\n const argsStr = joinedArgs.length ? joinedArgs : \"{}\";\n const id = chunks[0]?.id;\n try {\n parsedArgs = parsePartialJson(argsStr);\n if (\n !id ||\n parsedArgs === null ||\n typeof parsedArgs !== \"object\" ||\n Array.isArray(parsedArgs)\n ) {\n throw new Error(\"Malformed tool call chunk args.\");\n }\n toolCalls.push({\n name,\n args: parsedArgs,\n id,\n type: \"tool_call\",\n });\n } catch {\n invalidToolCalls.push({\n name,\n args: argsStr,\n id,\n error: \"Malformed args.\",\n type: \"invalid_tool_call\",\n });\n }\n }\n initParams = {\n ...fields,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n usage_metadata:\n fields.usage_metadata !== undefined\n ? fields.usage_metadata\n : undefined,\n };\n }\n // Sadly, TypeScript only allows super() calls at root if the class has\n // properties with initializers, so we have to check types twice.\n super(initParams);\n this.tool_call_chunks =\n initParams.tool_call_chunks ?? this.tool_call_chunks;\n this.tool_calls = initParams.tool_calls ?? this.tool_calls;\n this.invalid_tool_calls =\n initParams.invalid_tool_calls ?? this.invalid_tool_calls;\n this.usage_metadata = initParams.usage_metadata;\n }\n\n get lc_aliases(): Record<string, string> {\n // exclude snake case conversion to pascal case\n return {\n ...super.lc_aliases,\n tool_calls: \"tool_calls\",\n invalid_tool_calls: \"invalid_tool_calls\",\n tool_call_chunks: \"tool_call_chunks\",\n };\n }\n\n static lc_name() {\n return \"AIMessageChunk\";\n }\n\n get contentBlocks(): Array<ContentBlock.Standard> {\n if (\n this.response_metadata &&\n \"output_version\" in this.response_metadata &&\n this.response_metadata.output_version === \"v1\"\n ) {\n return this.content as Array<ContentBlock.Standard>;\n }\n\n if (\n this.response_metadata &&\n \"model_provider\" in this.response_metadata &&\n typeof this.response_metadata.model_provider === \"string\"\n ) {\n const translator = getTranslator(this.response_metadata.model_provider);\n if (translator) {\n return translator.translateContent(this);\n }\n }\n\n const blocks = super.contentBlocks;\n\n if (this.tool_calls) {\n if (typeof this.content !== \"string\") {\n const contentToolCalls = this.content\n .filter((block) => block.type === \"tool_call\")\n .map((block) => block.id);\n for (const toolCall of this.tool_calls) {\n if (toolCall.id && !contentToolCalls.includes(toolCall.id)) {\n blocks.push({\n ...toolCall,\n type: \"tool_call\",\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.args,\n });\n }\n }\n }\n }\n\n return blocks;\n }\n\n override get _printableFields(): Record<string, unknown> {\n return {\n ...super._printableFields,\n tool_calls: this.tool_calls,\n tool_call_chunks: this.tool_call_chunks,\n invalid_tool_calls: this.invalid_tool_calls,\n usage_metadata: this.usage_metadata,\n };\n }\n\n concat(chunk: AIMessageChunk<TStructure>) {\n const combinedFields: AIMessageChunkFields = {\n content: mergeContent(this.content, chunk.content),\n additional_kwargs: _mergeDicts(\n this.additional_kwargs,\n chunk.additional_kwargs\n ),\n response_metadata: mergeResponseMetadata(\n this.response_metadata,\n chunk.response_metadata\n ),\n tool_call_chunks: [],\n id: this.id ?? chunk.id,\n };\n if (\n this.tool_call_chunks !== undefined ||\n chunk.tool_call_chunks !== undefined\n ) {\n const rawToolCalls = _mergeLists(\n this.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[],\n chunk.tool_call_chunks as ContentBlock.Tools.ToolCallChunk[]\n );\n if (rawToolCalls !== undefined && rawToolCalls.length > 0) {\n combinedFields.tool_call_chunks = rawToolCalls;\n }\n }\n if (\n this.usage_metadata !== undefined ||\n chunk.usage_metadata !== undefined\n ) {\n combinedFields.usage_metadata = mergeUsageMetadata(\n this.usage_metadata,\n chunk.usage_metadata\n );\n }\n const Cls = this.constructor as Constructor<this>;\n return new Cls(combinedFields);\n }\n\n static isInstance(obj: unknown): obj is AIMessageChunk {\n return super.isInstance(obj) && obj.type === \"ai\";\n }\n}\n"],"mappings":"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"}
@@ -92,39 +92,40 @@ function convertAnthropicAnnotation(citation) {
92
92
  * ```
93
93
  */
94
94
  function convertToV1FromAnthropicContentBlock(block) {
95
- if (require_utils._isContentBlock(block, "document") && require_utils._isObject(block.source) && "type" in block.source) if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
96
- type: "file",
97
- mimeType: block.source.media_type,
98
- data: block.source.data
99
- };
100
- else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
101
- type: "file",
102
- url: block.source.url
103
- };
104
- else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
105
- type: "file",
106
- fileId: block.source.file_id
107
- };
108
- else if (block.source.type === "text" && require_utils._isString(block.source.data)) return {
109
- type: "file",
110
- mimeType: String(block.source.media_type ?? "text/plain"),
111
- data: block.source.data
112
- };
113
- else return block;
114
- else if (require_utils._isContentBlock(block, "image") && require_utils._isObject(block.source) && "type" in block.source) if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
115
- type: "image",
116
- mimeType: block.source.media_type,
117
- data: block.source.data
118
- };
119
- else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
120
- type: "image",
121
- url: block.source.url
122
- };
123
- else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
124
- type: "image",
125
- fileId: block.source.file_id
126
- };
127
- else return block;
95
+ if (require_utils._isContentBlock(block, "document") && require_utils._isObject(block.source) && "type" in block.source) {
96
+ if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
97
+ type: "file",
98
+ mimeType: block.source.media_type,
99
+ data: block.source.data
100
+ };
101
+ else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
102
+ type: "file",
103
+ url: block.source.url
104
+ };
105
+ else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
106
+ type: "file",
107
+ fileId: block.source.file_id
108
+ };
109
+ else if (block.source.type === "text" && require_utils._isString(block.source.data)) return {
110
+ type: "file",
111
+ mimeType: String(block.source.media_type ?? "text/plain"),
112
+ data: block.source.data
113
+ };
114
+ } else if (require_utils._isContentBlock(block, "image") && require_utils._isObject(block.source) && "type" in block.source) {
115
+ if (block.source.type === "base64" && require_utils._isString(block.source.media_type) && require_utils._isString(block.source.data)) return {
116
+ type: "image",
117
+ mimeType: block.source.media_type,
118
+ data: block.source.data
119
+ };
120
+ else if (block.source.type === "url" && require_utils._isString(block.source.url)) return {
121
+ type: "image",
122
+ url: block.source.url
123
+ };
124
+ else if (block.source.type === "file" && require_utils._isString(block.source.file_id)) return {
125
+ type: "image",
126
+ fileId: block.source.file_id
127
+ };
128
+ }
128
129
  return void 0;
129
130
  }
130
131
  /**
@@ -180,133 +181,179 @@ function convertToV1FromAnthropicMessage(message) {
180
181
  type: "text",
181
182
  text: message.content
182
183
  }] : message.content;
183
- for (const block of content) if (require_utils._isContentBlock(block, "text") && require_utils._isString(block.text)) {
184
- const { text, citations,...rest } = block;
185
- if (require_utils._isArray(citations) && citations.length) {
186
- const _citations = citations.reduce((acc, item) => {
187
- const citation = convertAnthropicAnnotation(item);
188
- if (citation) return [...acc, citation];
184
+ for (const block of content) {
185
+ if (require_utils._isContentBlock(block, "text") && require_utils._isString(block.text)) {
186
+ const { text, citations,...rest } = block;
187
+ if (require_utils._isArray(citations) && citations.length) {
188
+ const _citations = citations.reduce((acc, item) => {
189
+ const citation = convertAnthropicAnnotation(item);
190
+ if (citation) return [...acc, citation];
191
+ return acc;
192
+ }, []);
193
+ yield {
194
+ ...rest,
195
+ type: "text",
196
+ text,
197
+ annotations: _citations
198
+ };
199
+ continue;
200
+ } else {
201
+ yield {
202
+ ...rest,
203
+ type: "text",
204
+ text
205
+ };
206
+ continue;
207
+ }
208
+ } else if (require_utils._isContentBlock(block, "thinking") && require_utils._isString(block.thinking)) {
209
+ const { thinking, signature,...rest } = block;
210
+ yield {
211
+ ...rest,
212
+ type: "reasoning",
213
+ reasoning: thinking,
214
+ signature
215
+ };
216
+ continue;
217
+ } else if (require_utils._isContentBlock(block, "redacted_thinking")) {
218
+ yield {
219
+ type: "non_standard",
220
+ value: block
221
+ };
222
+ continue;
223
+ } else if (require_utils._isContentBlock(block, "tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) {
224
+ yield {
225
+ type: "tool_call",
226
+ id: block.id,
227
+ name: block.name,
228
+ args: block.input
229
+ };
230
+ continue;
231
+ } else if (require_utils._isContentBlock(block, "input_json_delta")) {
232
+ if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {
233
+ const tool_call_chunk = message.tool_call_chunks[0];
234
+ yield {
235
+ type: "tool_call_chunk",
236
+ id: tool_call_chunk.id,
237
+ name: tool_call_chunk.name,
238
+ args: tool_call_chunk.args,
239
+ index: tool_call_chunk.index
240
+ };
241
+ continue;
242
+ }
243
+ } else if (require_utils._isContentBlock(block, "server_tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) {
244
+ const { name, id } = block;
245
+ if (name === "web_search") {
246
+ const query = require_utils.iife(() => {
247
+ if (typeof block.input === "string") return block.input;
248
+ else if (require_utils._isObject(block.input) && require_utils._isString(block.input.query)) return block.input.query;
249
+ else if (require_utils._isString(block.partial_json)) {
250
+ const json = require_utils.safeParseJson(block.partial_json);
251
+ if (json?.query) return json.query;
252
+ }
253
+ return "";
254
+ });
255
+ yield {
256
+ id,
257
+ type: "server_tool_call",
258
+ name: "web_search",
259
+ args: { query }
260
+ };
261
+ continue;
262
+ } else if (block.name === "code_execution") {
263
+ const code = require_utils.iife(() => {
264
+ if (typeof block.input === "string") return block.input;
265
+ else if (require_utils._isObject(block.input) && require_utils._isString(block.input.code)) return block.input.code;
266
+ else if (require_utils._isString(block.partial_json)) {
267
+ const json = require_utils.safeParseJson(block.partial_json);
268
+ if (json?.code) return json.code;
269
+ }
270
+ return "";
271
+ });
272
+ yield {
273
+ id,
274
+ type: "server_tool_call",
275
+ name: "code_execution",
276
+ args: { code }
277
+ };
278
+ continue;
279
+ }
280
+ } else if (require_utils._isContentBlock(block, "web_search_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isArray(block.content)) {
281
+ const { content: content$1, tool_use_id } = block;
282
+ const urls = content$1.reduce((acc, content$2) => {
283
+ if (require_utils._isContentBlock(content$2, "web_search_result")) return [...acc, content$2.url];
189
284
  return acc;
190
285
  }, []);
191
286
  yield {
192
- ...rest,
193
- type: "text",
194
- text,
195
- annotations: _citations
287
+ type: "server_tool_call_result",
288
+ name: "web_search",
289
+ toolCallId: tool_use_id,
290
+ status: "success",
291
+ output: { urls }
196
292
  };
197
- } else yield {
198
- ...rest,
199
- type: "text",
200
- text
201
- };
202
- } else if (require_utils._isContentBlock(block, "thinking") && require_utils._isString(block.thinking)) {
203
- const { thinking, signature,...rest } = block;
204
- yield {
205
- ...rest,
206
- type: "reasoning",
207
- reasoning: thinking,
208
- signature
209
- };
210
- } else if (require_utils._isContentBlock(block, "redacted_thinking")) continue;
211
- else if (require_utils._isContentBlock(block, "tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) yield {
212
- type: "tool_call",
213
- id: block.id,
214
- name: block.name,
215
- args: block.input
216
- };
217
- else if (require_utils._isContentBlock(block, "input_json_delta")) {
218
- if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {
219
- const tool_call_chunk = message.tool_call_chunks[0];
293
+ continue;
294
+ } else if (require_utils._isContentBlock(block, "code_execution_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isObject(block.content)) {
220
295
  yield {
221
- type: "tool_call_chunk",
222
- id: tool_call_chunk.id,
223
- name: tool_call_chunk.name,
224
- args: tool_call_chunk.args,
225
- index: tool_call_chunk.index
296
+ type: "server_tool_call_result",
297
+ name: "code_execution",
298
+ toolCallId: block.tool_use_id,
299
+ status: "success",
300
+ output: block.content
226
301
  };
227
- }
228
- } else if (require_utils._isContentBlock(block, "server_tool_use") && require_utils._isString(block.name) && require_utils._isString(block.id)) {
229
- const { name, id } = block;
230
- if (name === "web_search") {
231
- const query = require_utils.iife(() => {
232
- if (typeof block.input === "string") return block.input;
233
- else if (require_utils._isObject(block.input) && require_utils._isString(block.input.query)) return block.input.query;
234
- else if (require_utils._isString(block.partial_json)) {
235
- const json = require_utils.safeParseJson(block.partial_json);
236
- if (json?.query) return json.query;
237
- }
238
- return "";
239
- });
302
+ continue;
303
+ } else if (require_utils._isContentBlock(block, "mcp_tool_use")) {
240
304
  yield {
241
- id,
242
- type: "web_search_call",
243
- query
305
+ id: block.id,
306
+ type: "server_tool_call",
307
+ name: "mcp_tool_use",
308
+ args: block.input
244
309
  };
245
- } else if (block.name === "code_execution") {
246
- const code = require_utils.iife(() => {
247
- if (typeof block.input === "string") return block.input;
248
- else if (require_utils._isObject(block.input) && require_utils._isString(block.input.code)) return block.input.code;
249
- else if (require_utils._isString(block.partial_json)) {
250
- const json = require_utils.safeParseJson(block.partial_json);
251
- if (json?.code) return json.code;
252
- }
253
- return "";
254
- });
310
+ continue;
311
+ } else if (require_utils._isContentBlock(block, "mcp_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isObject(block.content)) {
255
312
  yield {
256
- id,
257
- type: "code_interpreter_call",
258
- code
313
+ type: "server_tool_call_result",
314
+ name: "mcp_tool_use",
315
+ toolCallId: block.tool_use_id,
316
+ status: "success",
317
+ output: block.content
259
318
  };
260
- }
261
- } else if (require_utils._isContentBlock(block, "web_search_tool_result") && require_utils._isString(block.tool_use_id) && require_utils._isArray(block.content)) {
262
- const { content: content$1, tool_use_id } = block;
263
- const urls = content$1.reduce((acc, content$2) => {
264
- if (require_utils._isContentBlock(content$2, "web_search_result")) return [...acc, content$2.url];
265
- return acc;
266
- }, []);
267
- yield {
268
- id: tool_use_id,
269
- type: "web_search_result",
270
- urls
271
- };
272
- } else if (require_utils._isContentBlock(block, "code_execution_tool_result") && require_utils._isString(block.tool_use_id)) {
273
- const { content: content$1, tool_use_id } = block;
274
- const output = require_utils.iife(() => {
275
- if (content$1.type === "code_execution_tool_result_error") return [{
276
- type: "code_interpreter_output",
277
- returnCode: 1,
278
- stderr: content$1.error_code
279
- }];
280
- if (content$1.type === "code_execution_result") {
281
- const fileIds = Array.isArray(content$1.content) ? content$1.content.filter((content$2) => content$2.type === "code_execution_output").map((content$2) => content$2.file_id) : [];
282
- return [{
283
- type: "code_interpreter_output",
284
- returnCode: content$1.return_code ?? 0,
285
- stderr: content$1.stderr,
286
- stdout: content$1.stdout,
287
- fileIds
288
- }];
319
+ continue;
320
+ } else if (require_utils._isContentBlock(block, "container_upload")) {
321
+ yield {
322
+ type: "server_tool_call",
323
+ name: "container_upload",
324
+ args: block.input
325
+ };
326
+ continue;
327
+ } else if (require_utils._isContentBlock(block, "search_result")) {
328
+ yield {
329
+ id: block.id,
330
+ type: "non_standard",
331
+ value: block
332
+ };
333
+ continue;
334
+ } else if (require_utils._isContentBlock(block, "tool_result")) {
335
+ yield {
336
+ id: block.id,
337
+ type: "non_standard",
338
+ value: block
339
+ };
340
+ continue;
341
+ } else {
342
+ const stdBlock = convertToV1FromAnthropicContentBlock(block);
343
+ if (stdBlock) {
344
+ yield stdBlock;
345
+ continue;
289
346
  }
290
- return [];
291
- });
347
+ }
292
348
  yield {
293
- id: tool_use_id,
294
- type: "code_interpreter_result",
295
- output
349
+ type: "non_standard",
350
+ value: block
296
351
  };
297
- } else if (block.type === "mcp_tool_use") continue;
298
- else if (block.type === "mcp_tool_result") continue;
299
- else if (block.type === "container_upload") continue;
300
- else if (block.type === "search_result") continue;
301
- else if (block.type === "tool_result") continue;
302
- else {
303
- const stdBlock = convertToV1FromAnthropicContentBlock(block);
304
- if (stdBlock) yield stdBlock;
305
352
  }
306
353
  }
307
354
  return Array.from(iterateContent());
308
355
  }
309
- const anthropicTranslator = {
356
+ const ChatAnthropicTranslator = {
310
357
  translateContent: convertToV1FromAnthropicMessage,
311
358
  translateContentChunk: convertToV1FromAnthropicMessage
312
359
  };
@@ -315,6 +362,6 @@ function _isAIMessageChunk(message) {
315
362
  }
316
363
 
317
364
  //#endregion
318
- exports.anthropicTranslator = anthropicTranslator;
365
+ exports.ChatAnthropicTranslator = ChatAnthropicTranslator;
319
366
  exports.convertToV1FromAnthropicInput = convertToV1FromAnthropicInput;
320
367
  //# sourceMappingURL=anthropic.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.cjs","names":["citation: ContentBlock","_isString","_isNumber","block: ContentBlock","_isContentBlock","_isObject","content: Array<ContentBlock>","message: AIMessage","_isArray","iife","safeParseJson","content","anthropicTranslator: StandardContentBlockTranslator","message: unknown"],"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 } else {\n return block as ContentBlock.Standard;\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 } else {\n return block as ContentBlock.Standard;\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\ntype AnthropicCodeExecutionToolResult = {\n type: \"code_execution_tool_result\";\n tool_use_id: string;\n content:\n | {\n // BetaCodeExecutionToolResultError\n type: \"code_execution_tool_result_error\";\n error_code: string;\n }\n | {\n // BetaCodeExecutionResultBlock\n type: \"code_execution_result\";\n stderr: string;\n stdout: string;\n return_code: number;\n content: {\n // BetaCodeExecutionOutputBlock\n type: \"code_execution_output\";\n file_id: string;\n }[];\n };\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 } else {\n yield {\n ...rest,\n type: \"text\",\n text,\n };\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 }\n // RedactedThinkingBlock\n else if (_isContentBlock(block, \"redacted_thinking\")) {\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 }\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 }\n // TODO: implement\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: \"web_search_call\",\n query,\n };\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: \"code_interpreter_call\",\n code,\n };\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 id: tool_use_id,\n type: \"web_search_result\",\n urls,\n };\n }\n // CodeExecutionToolResultBlock\n else if (\n _isContentBlock(block, \"code_execution_tool_result\") &&\n _isString(block.tool_use_id)\n ) {\n // We just make a type assertion here instead of deep checking every property\n // since `code_execution_tool_result` is an anthropic only block\n const { content, tool_use_id } =\n block as AnthropicCodeExecutionToolResult;\n const output = iife(() => {\n if (content.type === \"code_execution_tool_result_error\") {\n return [\n {\n type: \"code_interpreter_output\" as const,\n returnCode: 1,\n stderr: content.error_code,\n },\n ];\n }\n if (content.type === \"code_execution_result\") {\n const fileIds = Array.isArray(content.content)\n ? content.content\n .filter((content) => content.type === \"code_execution_output\")\n .map((content) => content.file_id)\n : [];\n return [\n {\n type: \"code_interpreter_output\" as const,\n returnCode: content.return_code ?? 0,\n stderr: content.stderr,\n stdout: content.stdout,\n fileIds,\n },\n ];\n }\n return [];\n });\n yield {\n id: tool_use_id,\n type: \"code_interpreter_result\",\n output,\n };\n }\n // MCPToolUseBlock\n else if (block.type === \"mcp_tool_use\") {\n continue;\n }\n // MCPToolResultBlock\n else if (block.type === \"mcp_tool_result\") {\n continue;\n }\n // ContainerUploadBlock\n else if (block.type === \"container_upload\") {\n continue;\n }\n // SearchResultBlockParam\n else if (block.type === \"search_result\") {\n continue;\n }\n // ToolResultBlockParam\n else if (block.type === \"tool_result\") {\n // TODO: Implement\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 } else {\n // TODO: non standard?\n }\n }\n }\n }\n return Array.from(iterateContent());\n}\n\nexport const anthropicTranslator: 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":["citation: ContentBlock","_isString","_isNumber","block: ContentBlock","_isContentBlock","_isObject","content: Array<ContentBlock>","message: AIMessage","_isArray","iife","safeParseJson","content","ChatAnthropicTranslator: StandardContentBlockTranslator","message: unknown"],"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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"}