@langchain/core 1.2.0-dev-1775763803878 → 1.2.1

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 (751) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +1 -1
  3. package/agents.cjs +1 -0
  4. package/agents.d.cts +1 -0
  5. package/agents.d.ts +1 -0
  6. package/agents.js +1 -0
  7. package/caches.cjs +1 -0
  8. package/caches.d.cts +1 -0
  9. package/caches.d.ts +1 -0
  10. package/caches.js +1 -0
  11. package/callbacks/base.cjs +1 -0
  12. package/callbacks/base.d.cts +1 -0
  13. package/callbacks/base.d.ts +1 -0
  14. package/callbacks/base.js +1 -0
  15. package/callbacks/dispatch/web.cjs +1 -0
  16. package/callbacks/dispatch/web.d.cts +1 -0
  17. package/callbacks/dispatch/web.d.ts +1 -0
  18. package/callbacks/dispatch/web.js +1 -0
  19. package/callbacks/dispatch.cjs +1 -0
  20. package/callbacks/dispatch.d.cts +1 -0
  21. package/callbacks/dispatch.d.ts +1 -0
  22. package/callbacks/dispatch.js +1 -0
  23. package/callbacks/manager.cjs +1 -0
  24. package/callbacks/manager.d.cts +1 -0
  25. package/callbacks/manager.d.ts +1 -0
  26. package/callbacks/manager.js +1 -0
  27. package/callbacks/promises.cjs +1 -0
  28. package/callbacks/promises.d.cts +1 -0
  29. package/callbacks/promises.d.ts +1 -0
  30. package/callbacks/promises.js +1 -0
  31. package/chat_history.cjs +1 -0
  32. package/chat_history.d.cts +1 -0
  33. package/chat_history.d.ts +1 -0
  34. package/chat_history.js +1 -0
  35. package/context.cjs +1 -0
  36. package/context.d.cts +1 -0
  37. package/context.d.ts +1 -0
  38. package/context.js +1 -0
  39. package/dist/callbacks/base.cjs +7 -3
  40. package/dist/callbacks/base.cjs.map +1 -1
  41. package/dist/callbacks/base.d.cts +20 -1
  42. package/dist/callbacks/base.d.cts.map +1 -1
  43. package/dist/callbacks/base.d.ts +20 -1
  44. package/dist/callbacks/base.d.ts.map +1 -1
  45. package/dist/callbacks/base.js +7 -3
  46. package/dist/callbacks/base.js.map +1 -1
  47. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  48. package/dist/callbacks/dispatch/index.js.map +1 -1
  49. package/dist/callbacks/manager.cjs +29 -7
  50. package/dist/callbacks/manager.cjs.map +1 -1
  51. package/dist/callbacks/manager.d.cts +4 -0
  52. package/dist/callbacks/manager.d.cts.map +1 -1
  53. package/dist/callbacks/manager.d.ts +4 -0
  54. package/dist/callbacks/manager.d.ts.map +1 -1
  55. package/dist/callbacks/manager.js +23 -1
  56. package/dist/callbacks/manager.js.map +1 -1
  57. package/dist/example_selectors/conditional.cjs.map +1 -1
  58. package/dist/example_selectors/conditional.js.map +1 -1
  59. package/dist/example_selectors/length_based.cjs.map +1 -1
  60. package/dist/example_selectors/length_based.js.map +1 -1
  61. package/dist/example_selectors/semantic_similarity.cjs.map +1 -1
  62. package/dist/example_selectors/semantic_similarity.js.map +1 -1
  63. package/dist/indexing/base.cjs +3 -4
  64. package/dist/indexing/base.cjs.map +1 -1
  65. package/dist/indexing/base.js +1 -1
  66. package/dist/indexing/base.js.map +1 -1
  67. package/dist/language_models/base.cjs +9 -1
  68. package/dist/language_models/base.cjs.map +1 -1
  69. package/dist/language_models/base.d.cts +5 -0
  70. package/dist/language_models/base.d.cts.map +1 -1
  71. package/dist/language_models/base.d.ts +5 -0
  72. package/dist/language_models/base.d.ts.map +1 -1
  73. package/dist/language_models/base.js +9 -1
  74. package/dist/language_models/base.js.map +1 -1
  75. package/dist/language_models/chat_models.cjs +71 -33
  76. package/dist/language_models/chat_models.cjs.map +1 -1
  77. package/dist/language_models/chat_models.d.cts +74 -3
  78. package/dist/language_models/chat_models.d.cts.map +1 -1
  79. package/dist/language_models/chat_models.d.ts +74 -3
  80. package/dist/language_models/chat_models.d.ts.map +1 -1
  81. package/dist/language_models/chat_models.js +72 -34
  82. package/dist/language_models/chat_models.js.map +1 -1
  83. package/dist/language_models/compat.cjs +255 -78
  84. package/dist/language_models/compat.cjs.map +1 -1
  85. package/dist/language_models/compat.d.cts +3 -17
  86. package/dist/language_models/compat.d.cts.map +1 -1
  87. package/dist/language_models/compat.d.ts +3 -17
  88. package/dist/language_models/compat.d.ts.map +1 -1
  89. package/dist/language_models/compat.js +256 -78
  90. package/dist/language_models/compat.js.map +1 -1
  91. package/dist/language_models/event.cjs.map +1 -1
  92. package/dist/language_models/event.d.cts +82 -90
  93. package/dist/language_models/event.d.cts.map +1 -1
  94. package/dist/language_models/event.d.ts +82 -90
  95. package/dist/language_models/event.d.ts.map +1 -1
  96. package/dist/language_models/event.js.map +1 -1
  97. package/dist/language_models/llms.cjs +18 -6
  98. package/dist/language_models/llms.cjs.map +1 -1
  99. package/dist/language_models/llms.d.cts.map +1 -1
  100. package/dist/language_models/llms.d.ts.map +1 -1
  101. package/dist/language_models/llms.js +18 -6
  102. package/dist/language_models/llms.js.map +1 -1
  103. package/dist/language_models/openai_completions_stream.cjs +308 -0
  104. package/dist/language_models/openai_completions_stream.cjs.map +1 -0
  105. package/dist/language_models/openai_completions_stream.d.cts +75 -0
  106. package/dist/language_models/openai_completions_stream.d.cts.map +1 -0
  107. package/dist/language_models/openai_completions_stream.d.ts +75 -0
  108. package/dist/language_models/openai_completions_stream.d.ts.map +1 -0
  109. package/dist/language_models/openai_completions_stream.js +301 -0
  110. package/dist/language_models/openai_completions_stream.js.map +1 -0
  111. package/dist/language_models/stream.cjs +216 -86
  112. package/dist/language_models/stream.cjs.map +1 -1
  113. package/dist/language_models/stream.d.cts +5 -28
  114. package/dist/language_models/stream.d.cts.map +1 -1
  115. package/dist/language_models/stream.d.ts +5 -28
  116. package/dist/language_models/stream.d.ts.map +1 -1
  117. package/dist/language_models/stream.js +216 -86
  118. package/dist/language_models/stream.js.map +1 -1
  119. package/dist/load/import_map.cjs +4 -0
  120. package/dist/load/import_map.cjs.map +1 -1
  121. package/dist/load/import_map.js +4 -0
  122. package/dist/load/import_map.js.map +1 -1
  123. package/dist/load/index.cjs +19 -0
  124. package/dist/load/index.cjs.map +1 -1
  125. package/dist/load/index.d.cts +4 -0
  126. package/dist/load/index.d.cts.map +1 -1
  127. package/dist/load/index.d.ts +4 -0
  128. package/dist/load/index.d.ts.map +1 -1
  129. package/dist/load/index.js +19 -0
  130. package/dist/load/index.js.map +1 -1
  131. package/dist/load/map_keys.cjs +13 -7
  132. package/dist/load/map_keys.cjs.map +1 -1
  133. package/dist/load/map_keys.d.cts.map +1 -1
  134. package/dist/load/map_keys.d.ts.map +1 -1
  135. package/dist/load/map_keys.js +11 -2
  136. package/dist/load/map_keys.js.map +1 -1
  137. package/dist/memory.cjs.map +1 -1
  138. package/dist/memory.js.map +1 -1
  139. package/dist/messages/ai.cjs +12 -9
  140. package/dist/messages/ai.cjs.map +1 -1
  141. package/dist/messages/ai.d.cts.map +1 -1
  142. package/dist/messages/ai.d.ts.map +1 -1
  143. package/dist/messages/ai.js +12 -9
  144. package/dist/messages/ai.js.map +1 -1
  145. package/dist/messages/base.cjs +10 -0
  146. package/dist/messages/base.cjs.map +1 -1
  147. package/dist/messages/base.d.cts +9 -0
  148. package/dist/messages/base.d.cts.map +1 -1
  149. package/dist/messages/base.d.ts +9 -0
  150. package/dist/messages/base.d.ts.map +1 -1
  151. package/dist/messages/base.js +10 -0
  152. package/dist/messages/base.js.map +1 -1
  153. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  154. package/dist/messages/block_translators/anthropic.js.map +1 -1
  155. package/dist/messages/block_translators/bedrock_converse.cjs.map +1 -1
  156. package/dist/messages/block_translators/bedrock_converse.js.map +1 -1
  157. package/dist/messages/block_translators/google.cjs.map +1 -1
  158. package/dist/messages/block_translators/google.js.map +1 -1
  159. package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
  160. package/dist/messages/block_translators/google_vertexai.js.map +1 -1
  161. package/dist/messages/block_translators/index.cjs +2 -0
  162. package/dist/messages/block_translators/index.cjs.map +1 -1
  163. package/dist/messages/block_translators/index.js +2 -0
  164. package/dist/messages/block_translators/index.js.map +1 -1
  165. package/dist/messages/block_translators/openai.cjs.map +1 -1
  166. package/dist/messages/block_translators/openai.js.map +1 -1
  167. package/dist/messages/block_translators/openrouter.cjs +101 -0
  168. package/dist/messages/block_translators/openrouter.cjs.map +1 -0
  169. package/dist/messages/block_translators/openrouter.js +101 -0
  170. package/dist/messages/block_translators/openrouter.js.map +1 -0
  171. package/dist/messages/index.d.cts +2 -2
  172. package/dist/messages/index.d.ts +2 -2
  173. package/dist/messages/modifier.cjs +6 -0
  174. package/dist/messages/modifier.cjs.map +1 -1
  175. package/dist/messages/modifier.d.cts +9 -4
  176. package/dist/messages/modifier.d.cts.map +1 -1
  177. package/dist/messages/modifier.d.ts +9 -4
  178. package/dist/messages/modifier.d.ts.map +1 -1
  179. package/dist/messages/modifier.js +6 -0
  180. package/dist/messages/modifier.js.map +1 -1
  181. package/dist/messages/transformers.cjs.map +1 -1
  182. package/dist/messages/transformers.js.map +1 -1
  183. package/dist/messages/utils.cjs +16 -2
  184. package/dist/messages/utils.cjs.map +1 -1
  185. package/dist/messages/utils.d.cts +9 -1
  186. package/dist/messages/utils.d.cts.map +1 -1
  187. package/dist/messages/utils.d.ts +9 -1
  188. package/dist/messages/utils.d.ts.map +1 -1
  189. package/dist/messages/utils.js +16 -2
  190. package/dist/messages/utils.js.map +1 -1
  191. package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
  192. package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
  193. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
  194. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
  195. package/dist/output_parsers/standard_schema.cjs +3 -0
  196. package/dist/output_parsers/standard_schema.cjs.map +1 -1
  197. package/dist/output_parsers/standard_schema.d.cts +2 -0
  198. package/dist/output_parsers/standard_schema.d.cts.map +1 -1
  199. package/dist/output_parsers/standard_schema.d.ts +2 -0
  200. package/dist/output_parsers/standard_schema.d.ts.map +1 -1
  201. package/dist/output_parsers/standard_schema.js +3 -0
  202. package/dist/output_parsers/standard_schema.js.map +1 -1
  203. package/dist/output_parsers/structured.cjs +3 -0
  204. package/dist/output_parsers/structured.cjs.map +1 -1
  205. package/dist/output_parsers/structured.d.cts +2 -0
  206. package/dist/output_parsers/structured.d.cts.map +1 -1
  207. package/dist/output_parsers/structured.d.ts +2 -0
  208. package/dist/output_parsers/structured.d.ts.map +1 -1
  209. package/dist/output_parsers/structured.js +3 -0
  210. package/dist/output_parsers/structured.js.map +1 -1
  211. package/dist/output_parsers/xml.cjs.map +1 -1
  212. package/dist/output_parsers/xml.js.map +1 -1
  213. package/dist/prompts/base.cjs.map +1 -1
  214. package/dist/prompts/base.js.map +1 -1
  215. package/dist/prompts/chat.cjs.map +1 -1
  216. package/dist/prompts/chat.js.map +1 -1
  217. package/dist/prompts/few_shot.cjs.map +1 -1
  218. package/dist/prompts/few_shot.js.map +1 -1
  219. package/dist/prompts/image.cjs.map +1 -1
  220. package/dist/prompts/image.js.map +1 -1
  221. package/dist/prompts/prompt.cjs +1 -1
  222. package/dist/prompts/prompt.cjs.map +1 -1
  223. package/dist/prompts/prompt.d.cts +1 -1
  224. package/dist/prompts/prompt.d.ts +1 -1
  225. package/dist/prompts/prompt.js +1 -1
  226. package/dist/prompts/prompt.js.map +1 -1
  227. package/dist/prompts/string.cjs.map +1 -1
  228. package/dist/prompts/string.js.map +1 -1
  229. package/dist/prompts/template.cjs +1 -1
  230. package/dist/prompts/template.cjs.map +1 -1
  231. package/dist/prompts/template.js.map +1 -1
  232. package/dist/retrievers/index.cjs.map +1 -1
  233. package/dist/retrievers/index.js.map +1 -1
  234. package/dist/runnables/base.cjs +5 -2
  235. package/dist/runnables/base.cjs.map +1 -1
  236. package/dist/runnables/base.d.cts +43 -0
  237. package/dist/runnables/base.d.cts.map +1 -1
  238. package/dist/runnables/base.d.ts +43 -0
  239. package/dist/runnables/base.d.ts.map +1 -1
  240. package/dist/runnables/base.js +4 -1
  241. package/dist/runnables/base.js.map +1 -1
  242. package/dist/runnables/branch.cjs.map +1 -1
  243. package/dist/runnables/branch.js.map +1 -1
  244. package/dist/runnables/config.cjs +16 -8
  245. package/dist/runnables/config.cjs.map +1 -1
  246. package/dist/runnables/config.d.cts.map +1 -1
  247. package/dist/runnables/config.d.ts.map +1 -1
  248. package/dist/runnables/config.js +16 -8
  249. package/dist/runnables/config.js.map +1 -1
  250. package/dist/runnables/graph.cjs +6 -6
  251. package/dist/runnables/graph.cjs.map +1 -1
  252. package/dist/runnables/graph.js +1 -1
  253. package/dist/runnables/graph.js.map +1 -1
  254. package/dist/runnables/graph_mermaid.cjs.map +1 -1
  255. package/dist/runnables/graph_mermaid.js.map +1 -1
  256. package/dist/runnables/history.cjs +3 -0
  257. package/dist/runnables/history.cjs.map +1 -1
  258. package/dist/runnables/history.d.cts +3 -0
  259. package/dist/runnables/history.d.cts.map +1 -1
  260. package/dist/runnables/history.d.ts +3 -0
  261. package/dist/runnables/history.d.ts.map +1 -1
  262. package/dist/runnables/history.js +3 -0
  263. package/dist/runnables/history.js.map +1 -1
  264. package/dist/runnables/router.cjs.map +1 -1
  265. package/dist/runnables/router.js.map +1 -1
  266. package/dist/runnables/utils.cjs.map +1 -1
  267. package/dist/runnables/utils.js.map +1 -1
  268. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  269. package/dist/singletons/async_local_storage/context.js.map +1 -1
  270. package/dist/singletons/async_local_storage/index.cjs.map +1 -1
  271. package/dist/singletons/async_local_storage/index.js.map +1 -1
  272. package/dist/singletons/callbacks.cjs +1 -1
  273. package/dist/testing/fake_model_builder.cjs +10 -9
  274. package/dist/testing/fake_model_builder.cjs.map +1 -1
  275. package/dist/testing/fake_model_builder.d.cts +1 -2
  276. package/dist/testing/fake_model_builder.d.cts.map +1 -1
  277. package/dist/testing/fake_model_builder.d.ts +1 -2
  278. package/dist/testing/fake_model_builder.d.ts.map +1 -1
  279. package/dist/testing/fake_model_builder.js +10 -9
  280. package/dist/testing/fake_model_builder.js.map +1 -1
  281. package/dist/testing/index.cjs +16 -0
  282. package/dist/testing/index.cjs.map +1 -1
  283. package/dist/testing/index.d.cts +3 -1
  284. package/dist/testing/index.d.ts +3 -1
  285. package/dist/testing/index.js +10 -1
  286. package/dist/testing/index.js.map +1 -1
  287. package/dist/testing/matchers.cjs +3 -1
  288. package/dist/testing/matchers.cjs.map +1 -1
  289. package/dist/testing/matchers.d.cts +8 -4
  290. package/dist/testing/matchers.d.cts.map +1 -1
  291. package/dist/testing/matchers.d.ts +8 -4
  292. package/dist/testing/matchers.d.ts.map +1 -1
  293. package/dist/testing/matchers.js +3 -1
  294. package/dist/testing/matchers.js.map +1 -1
  295. package/dist/tools/index.cjs +4 -1
  296. package/dist/tools/index.cjs.map +1 -1
  297. package/dist/tools/index.d.cts.map +1 -1
  298. package/dist/tools/index.d.ts.map +1 -1
  299. package/dist/tools/index.js +4 -1
  300. package/dist/tools/index.js.map +1 -1
  301. package/dist/tracers/console.cjs +30 -4
  302. package/dist/tracers/console.cjs.map +1 -1
  303. package/dist/tracers/console.d.cts.map +1 -1
  304. package/dist/tracers/console.d.ts.map +1 -1
  305. package/dist/tracers/console.js +28 -1
  306. package/dist/tracers/console.js.map +1 -1
  307. package/dist/tracers/event_stream.cjs.map +1 -1
  308. package/dist/tracers/event_stream.js.map +1 -1
  309. package/dist/tracers/tracer_langchain.cjs +70 -2
  310. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  311. package/dist/tracers/tracer_langchain.d.cts +26 -1
  312. package/dist/tracers/tracer_langchain.d.cts.map +1 -1
  313. package/dist/tracers/tracer_langchain.d.ts +26 -1
  314. package/dist/tracers/tracer_langchain.d.ts.map +1 -1
  315. package/dist/tracers/tracer_langchain.js +70 -3
  316. package/dist/tracers/tracer_langchain.js.map +1 -1
  317. package/dist/utils/async_caller.cjs +132 -8
  318. package/dist/utils/async_caller.cjs.map +1 -1
  319. package/dist/utils/async_caller.d.cts +9 -1
  320. package/dist/utils/async_caller.d.cts.map +1 -1
  321. package/dist/utils/async_caller.d.ts +9 -1
  322. package/dist/utils/async_caller.d.ts.map +1 -1
  323. package/dist/utils/async_caller.js +130 -8
  324. package/dist/utils/async_caller.js.map +1 -1
  325. package/dist/utils/callbacks.cjs.map +1 -1
  326. package/dist/utils/callbacks.js.map +1 -1
  327. package/dist/utils/context.cjs.map +1 -1
  328. package/dist/utils/context.js.map +1 -1
  329. package/dist/utils/env.cjs.map +1 -1
  330. package/dist/utils/env.d.cts.map +1 -1
  331. package/dist/utils/env.d.ts.map +1 -1
  332. package/dist/utils/env.js.map +1 -1
  333. package/dist/utils/event_source_parse.cjs +5 -12
  334. package/dist/utils/event_source_parse.cjs.map +1 -1
  335. package/dist/utils/event_source_parse.js +5 -12
  336. package/dist/utils/event_source_parse.js.map +1 -1
  337. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  338. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  339. package/dist/utils/json_schema.cjs.map +1 -1
  340. package/dist/utils/json_schema.js.map +1 -1
  341. package/dist/utils/p-retry/index.cjs +3 -1
  342. package/dist/utils/p-retry/index.cjs.map +1 -1
  343. package/dist/utils/p-retry/index.js +3 -1
  344. package/dist/utils/p-retry/index.js.map +1 -1
  345. package/dist/utils/sax-js/sax.cjs.map +1 -1
  346. package/dist/utils/sax-js/sax.js.map +1 -1
  347. package/dist/utils/ssrf.cjs.map +1 -1
  348. package/dist/utils/ssrf.js.map +1 -1
  349. package/dist/utils/stream.d.cts +2 -2
  350. package/dist/utils/stream.d.cts.map +1 -1
  351. package/dist/utils/stream.d.ts +2 -2
  352. package/dist/utils/stream.d.ts.map +1 -1
  353. package/dist/utils/testing/chat_models.cjs.map +1 -1
  354. package/dist/utils/testing/chat_models.js.map +1 -1
  355. package/dist/utils/testing/embeddings.cjs.map +1 -1
  356. package/dist/utils/testing/embeddings.js.map +1 -1
  357. package/dist/utils/testing/index.cjs +17 -1
  358. package/dist/utils/testing/index.cjs.map +1 -1
  359. package/dist/utils/testing/index.d.cts +3 -1
  360. package/dist/utils/testing/index.d.ts +3 -1
  361. package/dist/utils/testing/index.js +11 -2
  362. package/dist/utils/testing/index.js.map +1 -1
  363. package/dist/utils/testing/openai_stream_fixtures.cjs +160 -0
  364. package/dist/utils/testing/openai_stream_fixtures.cjs.map +1 -0
  365. package/dist/utils/testing/openai_stream_fixtures.d.cts +12 -0
  366. package/dist/utils/testing/openai_stream_fixtures.d.cts.map +1 -0
  367. package/dist/utils/testing/openai_stream_fixtures.d.ts +12 -0
  368. package/dist/utils/testing/openai_stream_fixtures.d.ts.map +1 -0
  369. package/dist/utils/testing/openai_stream_fixtures.js +155 -0
  370. package/dist/utils/testing/openai_stream_fixtures.js.map +1 -0
  371. package/dist/utils/testing/stream.cjs +136 -0
  372. package/dist/utils/testing/stream.cjs.map +1 -0
  373. package/dist/utils/testing/stream.d.cts +96 -0
  374. package/dist/utils/testing/stream.d.cts.map +1 -0
  375. package/dist/utils/testing/stream.d.ts +96 -0
  376. package/dist/utils/testing/stream.d.ts.map +1 -0
  377. package/dist/utils/testing/stream.js +136 -0
  378. package/dist/utils/testing/stream.js.map +1 -0
  379. package/dist/utils/testing/vectorstores.cjs.map +1 -1
  380. package/dist/utils/testing/vectorstores.js.map +1 -1
  381. package/dist/utils/types/zod.cjs.map +1 -1
  382. package/dist/utils/types/zod.js.map +1 -1
  383. package/dist/utils/uuid/index.cjs +58 -0
  384. package/dist/utils/uuid/index.cjs.map +1 -0
  385. package/dist/utils/uuid/index.d.cts +26 -0
  386. package/dist/utils/uuid/index.d.cts.map +1 -0
  387. package/dist/utils/uuid/index.d.ts +26 -0
  388. package/dist/utils/uuid/index.d.ts.map +1 -0
  389. package/dist/utils/uuid/index.js +41 -0
  390. package/dist/utils/uuid/index.js.map +1 -0
  391. package/dist/utils/uuid/max.cjs +6 -0
  392. package/dist/utils/uuid/max.cjs.map +1 -0
  393. package/dist/utils/uuid/max.js +6 -0
  394. package/dist/utils/uuid/max.js.map +1 -0
  395. package/dist/utils/uuid/nil.cjs +6 -0
  396. package/dist/utils/uuid/nil.cjs.map +1 -0
  397. package/dist/utils/uuid/nil.js +6 -0
  398. package/dist/utils/uuid/nil.js.map +1 -0
  399. package/dist/utils/uuid/parse.cjs +11 -0
  400. package/dist/utils/uuid/parse.cjs.map +1 -0
  401. package/dist/utils/uuid/parse.d.cts +7 -0
  402. package/dist/utils/uuid/parse.d.cts.map +1 -0
  403. package/dist/utils/uuid/parse.d.ts +7 -0
  404. package/dist/utils/uuid/parse.d.ts.map +1 -0
  405. package/dist/utils/uuid/parse.js +11 -0
  406. package/dist/utils/uuid/parse.js.map +1 -0
  407. package/dist/utils/uuid/regex.cjs +6 -0
  408. package/dist/utils/uuid/regex.cjs.map +1 -0
  409. package/dist/utils/uuid/regex.js +6 -0
  410. package/dist/utils/uuid/regex.js.map +1 -0
  411. package/dist/utils/uuid/rng.cjs +9 -0
  412. package/dist/utils/uuid/rng.cjs.map +1 -0
  413. package/dist/utils/uuid/rng.js +9 -0
  414. package/dist/utils/uuid/rng.js.map +1 -0
  415. package/dist/utils/uuid/sha1.cjs +71 -0
  416. package/dist/utils/uuid/sha1.cjs.map +1 -0
  417. package/dist/utils/uuid/sha1.js +71 -0
  418. package/dist/utils/uuid/sha1.js.map +1 -0
  419. package/dist/utils/uuid/stringify.cjs +21 -0
  420. package/dist/utils/uuid/stringify.cjs.map +1 -0
  421. package/dist/utils/uuid/stringify.d.cts +5 -0
  422. package/dist/utils/uuid/stringify.d.cts.map +1 -0
  423. package/dist/utils/uuid/stringify.d.ts +5 -0
  424. package/dist/utils/uuid/stringify.d.ts.map +1 -0
  425. package/dist/utils/uuid/stringify.js +20 -0
  426. package/dist/utils/uuid/stringify.js.map +1 -0
  427. package/dist/utils/uuid/types.d.cts +26 -0
  428. package/dist/utils/uuid/types.d.cts.map +1 -0
  429. package/dist/utils/uuid/types.d.ts +26 -0
  430. package/dist/utils/uuid/types.d.ts.map +1 -0
  431. package/dist/utils/uuid/v1.cjs +69 -0
  432. package/dist/utils/uuid/v1.cjs.map +1 -0
  433. package/dist/utils/uuid/v1.d.cts +8 -0
  434. package/dist/utils/uuid/v1.d.cts.map +1 -0
  435. package/dist/utils/uuid/v1.d.ts +8 -0
  436. package/dist/utils/uuid/v1.d.ts.map +1 -0
  437. package/dist/utils/uuid/v1.js +69 -0
  438. package/dist/utils/uuid/v1.js.map +1 -0
  439. package/dist/utils/uuid/v1ToV6.cjs +14 -0
  440. package/dist/utils/uuid/v1ToV6.cjs.map +1 -0
  441. package/dist/utils/uuid/v1ToV6.js +14 -0
  442. package/dist/utils/uuid/v1ToV6.js.map +1 -0
  443. package/dist/utils/uuid/v35.cjs +36 -0
  444. package/dist/utils/uuid/v35.cjs.map +1 -0
  445. package/dist/utils/uuid/v35.js +34 -0
  446. package/dist/utils/uuid/v35.js.map +1 -0
  447. package/dist/utils/uuid/v4.cjs +25 -0
  448. package/dist/utils/uuid/v4.cjs.map +1 -0
  449. package/dist/utils/uuid/v4.d.cts +8 -0
  450. package/dist/utils/uuid/v4.d.cts.map +1 -0
  451. package/dist/utils/uuid/v4.d.ts +8 -0
  452. package/dist/utils/uuid/v4.d.ts.map +1 -0
  453. package/dist/utils/uuid/v4.js +25 -0
  454. package/dist/utils/uuid/v4.js.map +1 -0
  455. package/dist/utils/uuid/v5.cjs +12 -0
  456. package/dist/utils/uuid/v5.cjs.map +1 -0
  457. package/dist/utils/uuid/v5.d.cts +14 -0
  458. package/dist/utils/uuid/v5.d.cts.map +1 -0
  459. package/dist/utils/uuid/v5.d.ts +14 -0
  460. package/dist/utils/uuid/v5.d.ts.map +1 -0
  461. package/dist/utils/uuid/v5.js +12 -0
  462. package/dist/utils/uuid/v5.js.map +1 -0
  463. package/dist/utils/uuid/v6.cjs +23 -0
  464. package/dist/utils/uuid/v6.cjs.map +1 -0
  465. package/dist/utils/uuid/v6.d.cts +8 -0
  466. package/dist/utils/uuid/v6.d.cts.map +1 -0
  467. package/dist/utils/uuid/v6.d.ts +8 -0
  468. package/dist/utils/uuid/v6.d.ts.map +1 -0
  469. package/dist/utils/uuid/v6.js +23 -0
  470. package/dist/utils/uuid/v6.js.map +1 -0
  471. package/dist/utils/uuid/v7.cjs +57 -0
  472. package/dist/utils/uuid/v7.cjs.map +1 -0
  473. package/dist/utils/uuid/v7.d.cts +8 -0
  474. package/dist/utils/uuid/v7.d.cts.map +1 -0
  475. package/dist/utils/uuid/v7.d.ts +8 -0
  476. package/dist/utils/uuid/v7.d.ts.map +1 -0
  477. package/dist/utils/uuid/v7.js +57 -0
  478. package/dist/utils/uuid/v7.js.map +1 -0
  479. package/dist/utils/uuid/validate.cjs +9 -0
  480. package/dist/utils/uuid/validate.cjs.map +1 -0
  481. package/dist/utils/uuid/validate.d.cts +5 -0
  482. package/dist/utils/uuid/validate.d.cts.map +1 -0
  483. package/dist/utils/uuid/validate.d.ts +5 -0
  484. package/dist/utils/uuid/validate.d.ts.map +1 -0
  485. package/dist/utils/uuid/validate.js +9 -0
  486. package/dist/utils/uuid/validate.js.map +1 -0
  487. package/dist/utils/uuid/version.cjs +10 -0
  488. package/dist/utils/uuid/version.cjs.map +1 -0
  489. package/dist/utils/uuid/version.d.cts +5 -0
  490. package/dist/utils/uuid/version.d.cts.map +1 -0
  491. package/dist/utils/uuid/version.d.ts +5 -0
  492. package/dist/utils/uuid/version.d.ts.map +1 -0
  493. package/dist/utils/uuid/version.js +10 -0
  494. package/dist/utils/uuid/version.js.map +1 -0
  495. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -1
  496. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js.map +1 -1
  497. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -1
  498. package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -1
  499. package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -1
  500. package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -1
  501. package/dist/utils/zod-to-json-schema/parsers/string.cjs +26 -0
  502. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  503. package/dist/utils/zod-to-json-schema/parsers/string.js +26 -0
  504. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  505. package/dist/vectorstores.cjs.map +1 -1
  506. package/dist/vectorstores.js.map +1 -1
  507. package/document_loaders/base.cjs +1 -0
  508. package/document_loaders/base.d.cts +1 -0
  509. package/document_loaders/base.d.ts +1 -0
  510. package/document_loaders/base.js +1 -0
  511. package/document_loaders/langsmith.cjs +1 -0
  512. package/document_loaders/langsmith.d.cts +1 -0
  513. package/document_loaders/langsmith.d.ts +1 -0
  514. package/document_loaders/langsmith.js +1 -0
  515. package/documents.cjs +1 -0
  516. package/documents.d.cts +1 -0
  517. package/documents.d.ts +1 -0
  518. package/documents.js +1 -0
  519. package/embeddings.cjs +1 -0
  520. package/embeddings.d.cts +1 -0
  521. package/embeddings.d.ts +1 -0
  522. package/embeddings.js +1 -0
  523. package/errors.cjs +1 -0
  524. package/errors.d.cts +1 -0
  525. package/errors.d.ts +1 -0
  526. package/errors.js +1 -0
  527. package/example_selectors.cjs +1 -0
  528. package/example_selectors.d.cts +1 -0
  529. package/example_selectors.d.ts +1 -0
  530. package/example_selectors.js +1 -0
  531. package/indexing.cjs +1 -0
  532. package/indexing.d.cts +1 -0
  533. package/indexing.d.ts +1 -0
  534. package/indexing.js +1 -0
  535. package/language_models/base.cjs +1 -0
  536. package/language_models/base.d.cts +1 -0
  537. package/language_models/base.d.ts +1 -0
  538. package/language_models/base.js +1 -0
  539. package/language_models/chat_models.cjs +1 -0
  540. package/language_models/chat_models.d.cts +1 -0
  541. package/language_models/chat_models.d.ts +1 -0
  542. package/language_models/chat_models.js +1 -0
  543. package/language_models/compat.cjs +1 -0
  544. package/language_models/compat.d.cts +1 -0
  545. package/language_models/compat.d.ts +1 -0
  546. package/language_models/compat.js +1 -0
  547. package/language_models/event.cjs +1 -0
  548. package/language_models/event.d.cts +1 -0
  549. package/language_models/event.d.ts +1 -0
  550. package/language_models/event.js +1 -0
  551. package/language_models/llms.cjs +1 -0
  552. package/language_models/llms.d.cts +1 -0
  553. package/language_models/llms.d.ts +1 -0
  554. package/language_models/llms.js +1 -0
  555. package/language_models/openai_completions_stream.cjs +1 -0
  556. package/language_models/openai_completions_stream.d.cts +1 -0
  557. package/language_models/openai_completions_stream.d.ts +1 -0
  558. package/language_models/openai_completions_stream.js +1 -0
  559. package/language_models/profile.cjs +1 -0
  560. package/language_models/profile.d.cts +1 -0
  561. package/language_models/profile.d.ts +1 -0
  562. package/language_models/profile.js +1 -0
  563. package/language_models/stream.cjs +1 -0
  564. package/language_models/stream.d.cts +1 -0
  565. package/language_models/stream.d.ts +1 -0
  566. package/language_models/stream.js +1 -0
  567. package/language_models/structured_output.cjs +1 -0
  568. package/language_models/structured_output.d.cts +1 -0
  569. package/language_models/structured_output.d.ts +1 -0
  570. package/language_models/structured_output.js +1 -0
  571. package/load/serializable.cjs +1 -0
  572. package/load/serializable.d.cts +1 -0
  573. package/load/serializable.d.ts +1 -0
  574. package/load/serializable.js +1 -0
  575. package/load.cjs +1 -0
  576. package/load.d.cts +1 -0
  577. package/load.d.ts +1 -0
  578. package/load.js +1 -0
  579. package/memory.cjs +1 -0
  580. package/memory.d.cts +1 -0
  581. package/memory.d.ts +1 -0
  582. package/memory.js +1 -0
  583. package/messages/tool.cjs +1 -0
  584. package/messages/tool.d.cts +1 -0
  585. package/messages/tool.d.ts +1 -0
  586. package/messages/tool.js +1 -0
  587. package/messages.cjs +1 -0
  588. package/messages.d.cts +1 -0
  589. package/messages.d.ts +1 -0
  590. package/messages.js +1 -0
  591. package/output_parsers/openai_functions.cjs +1 -0
  592. package/output_parsers/openai_functions.d.cts +1 -0
  593. package/output_parsers/openai_functions.d.ts +1 -0
  594. package/output_parsers/openai_functions.js +1 -0
  595. package/output_parsers/openai_tools.cjs +1 -0
  596. package/output_parsers/openai_tools.d.cts +1 -0
  597. package/output_parsers/openai_tools.d.ts +1 -0
  598. package/output_parsers/openai_tools.js +1 -0
  599. package/output_parsers.cjs +1 -0
  600. package/output_parsers.d.cts +1 -0
  601. package/output_parsers.d.ts +1 -0
  602. package/output_parsers.js +1 -0
  603. package/outputs.cjs +1 -0
  604. package/outputs.d.cts +1 -0
  605. package/outputs.d.ts +1 -0
  606. package/outputs.js +1 -0
  607. package/package.json +34 -14
  608. package/prompt_values.cjs +1 -0
  609. package/prompt_values.d.cts +1 -0
  610. package/prompt_values.d.ts +1 -0
  611. package/prompt_values.js +1 -0
  612. package/prompts.cjs +1 -0
  613. package/prompts.d.cts +1 -0
  614. package/prompts.d.ts +1 -0
  615. package/prompts.js +1 -0
  616. package/retrievers/document_compressors.cjs +1 -0
  617. package/retrievers/document_compressors.d.cts +1 -0
  618. package/retrievers/document_compressors.d.ts +1 -0
  619. package/retrievers/document_compressors.js +1 -0
  620. package/retrievers.cjs +1 -0
  621. package/retrievers.d.cts +1 -0
  622. package/retrievers.d.ts +1 -0
  623. package/retrievers.js +1 -0
  624. package/runnables/graph.cjs +1 -0
  625. package/runnables/graph.d.cts +1 -0
  626. package/runnables/graph.d.ts +1 -0
  627. package/runnables/graph.js +1 -0
  628. package/runnables.cjs +1 -0
  629. package/runnables.d.cts +1 -0
  630. package/runnables.d.ts +1 -0
  631. package/runnables.js +1 -0
  632. package/singletons.cjs +1 -0
  633. package/singletons.d.cts +1 -0
  634. package/singletons.d.ts +1 -0
  635. package/singletons.js +1 -0
  636. package/stores.cjs +1 -0
  637. package/stores.d.cts +1 -0
  638. package/stores.d.ts +1 -0
  639. package/stores.js +1 -0
  640. package/structured_query.cjs +1 -0
  641. package/structured_query.d.cts +1 -0
  642. package/structured_query.d.ts +1 -0
  643. package/structured_query.js +1 -0
  644. package/testing.cjs +1 -0
  645. package/testing.d.cts +1 -0
  646. package/testing.d.ts +1 -0
  647. package/testing.js +1 -0
  648. package/tools.cjs +1 -0
  649. package/tools.d.cts +1 -0
  650. package/tools.d.ts +1 -0
  651. package/tools.js +1 -0
  652. package/tracers/base.cjs +1 -0
  653. package/tracers/base.d.cts +1 -0
  654. package/tracers/base.d.ts +1 -0
  655. package/tracers/base.js +1 -0
  656. package/tracers/console.cjs +1 -0
  657. package/tracers/console.d.cts +1 -0
  658. package/tracers/console.d.ts +1 -0
  659. package/tracers/console.js +1 -0
  660. package/tracers/log_stream.cjs +1 -0
  661. package/tracers/log_stream.d.cts +1 -0
  662. package/tracers/log_stream.d.ts +1 -0
  663. package/tracers/log_stream.js +1 -0
  664. package/tracers/run_collector.cjs +1 -0
  665. package/tracers/run_collector.d.cts +1 -0
  666. package/tracers/run_collector.d.ts +1 -0
  667. package/tracers/run_collector.js +1 -0
  668. package/tracers/tracer_langchain.cjs +1 -0
  669. package/tracers/tracer_langchain.d.cts +1 -0
  670. package/tracers/tracer_langchain.d.ts +1 -0
  671. package/tracers/tracer_langchain.js +1 -0
  672. package/types/stream.cjs +1 -0
  673. package/types/stream.d.cts +1 -0
  674. package/types/stream.d.ts +1 -0
  675. package/types/stream.js +1 -0
  676. package/utils/async_caller.cjs +1 -0
  677. package/utils/async_caller.d.cts +1 -0
  678. package/utils/async_caller.d.ts +1 -0
  679. package/utils/async_caller.js +1 -0
  680. package/utils/chunk_array.cjs +1 -0
  681. package/utils/chunk_array.d.cts +1 -0
  682. package/utils/chunk_array.d.ts +1 -0
  683. package/utils/chunk_array.js +1 -0
  684. package/utils/context.cjs +1 -0
  685. package/utils/context.d.cts +1 -0
  686. package/utils/context.d.ts +1 -0
  687. package/utils/context.js +1 -0
  688. package/utils/env.cjs +1 -0
  689. package/utils/env.d.cts +1 -0
  690. package/utils/env.d.ts +1 -0
  691. package/utils/env.js +1 -0
  692. package/utils/event_source_parse.cjs +1 -0
  693. package/utils/event_source_parse.d.cts +1 -0
  694. package/utils/event_source_parse.d.ts +1 -0
  695. package/utils/event_source_parse.js +1 -0
  696. package/utils/format.cjs +1 -0
  697. package/utils/format.d.cts +1 -0
  698. package/utils/format.d.ts +1 -0
  699. package/utils/format.js +1 -0
  700. package/utils/function_calling.cjs +1 -0
  701. package/utils/function_calling.d.cts +1 -0
  702. package/utils/function_calling.d.ts +1 -0
  703. package/utils/function_calling.js +1 -0
  704. package/utils/hash.cjs +1 -0
  705. package/utils/hash.d.cts +1 -0
  706. package/utils/hash.d.ts +1 -0
  707. package/utils/hash.js +1 -0
  708. package/utils/json_patch.cjs +1 -0
  709. package/utils/json_patch.d.cts +1 -0
  710. package/utils/json_patch.d.ts +1 -0
  711. package/utils/json_patch.js +1 -0
  712. package/utils/json_schema.cjs +1 -0
  713. package/utils/json_schema.d.cts +1 -0
  714. package/utils/json_schema.d.ts +1 -0
  715. package/utils/json_schema.js +1 -0
  716. package/utils/math.cjs +1 -0
  717. package/utils/math.d.cts +1 -0
  718. package/utils/math.d.ts +1 -0
  719. package/utils/math.js +1 -0
  720. package/utils/ssrf.cjs +1 -0
  721. package/utils/ssrf.d.cts +1 -0
  722. package/utils/ssrf.d.ts +1 -0
  723. package/utils/ssrf.js +1 -0
  724. package/utils/standard_schema.cjs +1 -0
  725. package/utils/standard_schema.d.cts +1 -0
  726. package/utils/standard_schema.d.ts +1 -0
  727. package/utils/standard_schema.js +1 -0
  728. package/utils/stream.cjs +1 -0
  729. package/utils/stream.d.cts +1 -0
  730. package/utils/stream.d.ts +1 -0
  731. package/utils/stream.js +1 -0
  732. package/utils/testing.cjs +1 -0
  733. package/utils/testing.d.cts +1 -0
  734. package/utils/testing.d.ts +1 -0
  735. package/utils/testing.js +1 -0
  736. package/utils/tiktoken.cjs +1 -0
  737. package/utils/tiktoken.d.cts +1 -0
  738. package/utils/tiktoken.d.ts +1 -0
  739. package/utils/tiktoken.js +1 -0
  740. package/utils/types.cjs +1 -0
  741. package/utils/types.d.cts +1 -0
  742. package/utils/types.d.ts +1 -0
  743. package/utils/types.js +1 -0
  744. package/utils/uuid.cjs +1 -0
  745. package/utils/uuid.d.cts +1 -0
  746. package/utils/uuid.d.ts +1 -0
  747. package/utils/uuid.js +1 -0
  748. package/vectorstores.cjs +1 -0
  749. package/vectorstores.d.cts +1 -0
  750. package/vectorstores.d.ts +1 -0
  751. package/vectorstores.js +1 -0
@@ -6,33 +6,98 @@ import { AIMessageChunk } from "../messages/ai.js";
6
6
  * (`ChatGenerationChunk` / `AIMessageChunk`) output to the new
7
7
  * `ChatModelStreamEvent` protocol.
8
8
  *
9
- * This module is used by `BaseChatModel._streamChatModelEvents` as
10
- * the default implementation when a provider has not yet implemented
11
- * native event streaming.
12
- *
13
9
  * @module
14
10
  */
15
11
  var compat_exports = /* @__PURE__ */ __exportAll({
16
- accumulateContentBlock: () => accumulateContentBlock,
17
12
  convertChunksToEvents: () => convertChunksToEvents,
18
13
  finalizeContentBlock: () => finalizeContentBlock
19
14
  });
15
+ const MIME_TYPE_BY_AUDIO_FORMAT = {
16
+ wav: "audio/wav",
17
+ mp3: "audio/mpeg",
18
+ flac: "audio/flac",
19
+ opus: "audio/opus",
20
+ aac: "audio/aac",
21
+ pcm16: "audio/pcm"
22
+ };
23
+ const MIME_TYPE_BY_IMAGE_FORMAT = {
24
+ png: "image/png",
25
+ jpeg: "image/jpeg",
26
+ jpg: "image/jpeg",
27
+ webp: "image/webp",
28
+ gif: "image/gif"
29
+ };
30
+ function nextBlockIndex(activeBlocks) {
31
+ let next = 0;
32
+ for (const index of activeBlocks.keys()) if (index >= next) next = index + 1;
33
+ return next;
34
+ }
35
+ function getAdditionalKwargs(message) {
36
+ const additional = message.additional_kwargs;
37
+ return additional != null && typeof additional === "object" ? additional : {};
38
+ }
39
+ function extractImageBlocksFromToolOutputs(message) {
40
+ const toolOutputs = getAdditionalKwargs(message).tool_outputs;
41
+ if (!Array.isArray(toolOutputs)) return [];
42
+ const blocks = [];
43
+ for (const entry of toolOutputs) {
44
+ if (entry == null || typeof entry !== "object") continue;
45
+ const record = entry;
46
+ if (record.type !== "image_generation_call") continue;
47
+ const data = typeof record.result === "string" ? record.result : void 0;
48
+ const url = typeof record.url === "string" ? record.url : void 0;
49
+ if (data == null && url == null) continue;
50
+ const outputFormat = typeof record.output_format === "string" ? record.output_format.toLowerCase() : void 0;
51
+ const mimeType = (outputFormat != null ? MIME_TYPE_BY_IMAGE_FORMAT[outputFormat] : void 0) ?? "image/png";
52
+ blocks.push({
53
+ type: "image",
54
+ ...typeof record.id === "string" ? { id: record.id } : {},
55
+ ...url != null ? { url } : {},
56
+ ...data != null ? { data } : {},
57
+ mimeType
58
+ });
59
+ }
60
+ return blocks;
61
+ }
20
62
  /**
21
- * Convert an async iterable of legacy `ChatGenerationChunk`s into
22
- * `ChatModelStreamEvent`s.
63
+ * Get the audio payload from the message.
23
64
  *
24
- * Tracks content blocks by index, synthesizes start/delta/finish events,
25
- * and emits usage updates. Handles both string content and array content
26
- * blocks, as well as tool call chunks.
65
+ * This handles the OpenAI-shaped `additional_kwargs.audio` payload used by
66
+ * legacy chunk streams; other providers must normalize into this shape first.
27
67
  *
28
- * @param chunks - The legacy chunk stream from `_streamResponseChunks`.
29
- * @param options - Optional signal for abort handling.
30
- * @returns An async generator of {@link ChatModelStreamEvent}.
68
+ * @param message - The message to get the audio payload from.
69
+ * @returns The audio payload.
70
+ * @internal
71
+ */
72
+ function getAudioPayload(message) {
73
+ const audio = getAdditionalKwargs(message).audio;
74
+ if (audio == null || typeof audio !== "object") return void 0;
75
+ const record = audio;
76
+ const data = typeof record.data === "string" ? record.data : void 0;
77
+ const url = typeof record.url === "string" ? record.url : void 0;
78
+ const transcript = typeof record.transcript === "string" ? record.transcript : void 0;
79
+ if (data == null && url == null && transcript == null) return void 0;
80
+ const explicitMimeType = typeof record.mime_type === "string" ? record.mime_type : typeof record.mimeType === "string" ? record.mimeType : void 0;
81
+ const format = typeof record.format === "string" ? record.format.toLowerCase() : void 0;
82
+ const mimeType = explicitMimeType ?? (format != null ? MIME_TYPE_BY_AUDIO_FORMAT[format] : void 0) ?? (data != null ? "audio/wav" : "audio/pcm");
83
+ return {
84
+ ...typeof record.id === "string" ? { id: record.id } : {},
85
+ ...data != null ? { data } : {},
86
+ ...url != null ? { url } : {},
87
+ ...transcript != null ? { transcript } : {},
88
+ mimeType
89
+ };
90
+ }
91
+ /**
92
+ * Convert an async iterable of legacy `ChatGenerationChunk`s into
93
+ * `ChatModelStreamEvent`s with typed deltas.
31
94
  */
32
95
  async function* convertChunksToEvents(chunks, options) {
33
96
  const activeBlocks = /* @__PURE__ */ new Map();
34
97
  let messageStarted = false;
35
98
  let lastUsage;
99
+ let audioStream;
100
+ const emittedImageKeys = /* @__PURE__ */ new Set();
36
101
  for await (const chunk of chunks) {
37
102
  options?.signal?.throwIfAborted();
38
103
  const msg = chunk.message;
@@ -40,7 +105,7 @@ async function* convertChunksToEvents(chunks, options) {
40
105
  if (!messageStarted) {
41
106
  messageStarted = true;
42
107
  const startEvent = {
43
- type: "message-start",
108
+ event: "message-start",
44
109
  id: msg.id ?? void 0
45
110
  };
46
111
  if (AIMessageChunk.isInstance(msg) && msg.usage_metadata) {
@@ -60,79 +125,168 @@ async function* convertChunksToEvents(chunks, options) {
60
125
  text: ""
61
126
  };
62
127
  activeBlocks.set(blockIndex, {
63
- started: true,
128
+ type: "text",
64
129
  accumulated: initial
65
130
  });
66
131
  yield {
67
- type: "content-block-start",
132
+ event: "content-block-start",
68
133
  index: blockIndex,
69
134
  content: initial
70
135
  };
71
136
  }
72
137
  const block = activeBlocks.get(blockIndex);
73
- const accumulated = {
74
- type: "text",
75
- text: block.accumulated.text + content
138
+ block.accumulated = {
139
+ ...block.accumulated,
140
+ text: (block.accumulated.text ?? "") + content
76
141
  };
77
- block.accumulated = accumulated;
78
142
  yield {
79
- type: "content-block-delta",
143
+ event: "content-block-delta",
80
144
  index: blockIndex,
81
- content: accumulated
145
+ delta: {
146
+ type: "text-delta",
147
+ text: content
148
+ }
82
149
  };
83
150
  }
84
151
  } else if (Array.isArray(content)) for (const part of content) {
85
152
  const blockIndex = typeof part.index === "number" ? part.index : activeBlocks.size;
86
153
  if (!activeBlocks.has(blockIndex)) {
87
154
  activeBlocks.set(blockIndex, {
88
- started: true,
155
+ type: part.type,
89
156
  accumulated: { ...part }
90
157
  });
91
158
  yield {
92
- type: "content-block-start",
159
+ event: "content-block-start",
93
160
  index: blockIndex,
94
161
  content: { ...part }
95
162
  };
96
163
  } else {
97
164
  const block = activeBlocks.get(blockIndex);
98
- const accumulated = accumulateContentBlock(block.accumulated, part);
99
- block.accumulated = accumulated;
165
+ const delta = contentBlockToDelta(part);
166
+ block.accumulated = applyDeltaToBlock(block.accumulated, delta);
100
167
  yield {
101
- type: "content-block-delta",
168
+ event: "content-block-delta",
102
169
  index: blockIndex,
103
- content: accumulated
170
+ delta
104
171
  };
105
172
  }
106
173
  }
107
174
  if (AIMessageChunk.isInstance(msg) && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) for (const toolChunk of msg.tool_call_chunks) {
108
175
  const blockIndex = typeof toolChunk.index === "number" ? toolChunk.index : activeBlocks.size;
109
- const delta = {
110
- type: "tool_call_chunk",
111
- id: toolChunk.id,
112
- name: toolChunk.name,
113
- args: toolChunk.args,
114
- index: blockIndex
115
- };
116
176
  if (!activeBlocks.has(blockIndex)) {
177
+ const initial = {
178
+ type: "tool_call_chunk",
179
+ id: toolChunk.id,
180
+ name: toolChunk.name,
181
+ args: "",
182
+ index: blockIndex
183
+ };
117
184
  activeBlocks.set(blockIndex, {
118
- started: true,
119
- accumulated: { ...delta }
185
+ type: "tool_call_chunk",
186
+ accumulated: initial
120
187
  });
121
188
  yield {
122
- type: "content-block-start",
189
+ event: "content-block-start",
123
190
  index: blockIndex,
124
- content: { ...delta }
191
+ content: initial
125
192
  };
126
- } else {
127
- const block = activeBlocks.get(blockIndex);
128
- const accumulated = accumulateContentBlock(block.accumulated, delta);
129
- block.accumulated = accumulated;
193
+ }
194
+ const acc = activeBlocks.get(blockIndex).accumulated;
195
+ if (toolChunk.id != null) acc.id = toolChunk.id;
196
+ if (toolChunk.name != null) acc.name = toolChunk.name;
197
+ acc.args = (acc.args ?? "") + (toolChunk.args ?? "");
198
+ yield {
199
+ event: "content-block-delta",
200
+ index: blockIndex,
201
+ delta: {
202
+ type: "block-delta",
203
+ fields: {
204
+ type: "tool_call_chunk",
205
+ ..."id" in acc && acc.id != null ? { id: acc.id } : {},
206
+ ..."name" in acc && acc.name != null ? { name: acc.name } : {},
207
+ args: acc.args
208
+ }
209
+ }
210
+ };
211
+ }
212
+ const audioPayload = getAudioPayload(msg);
213
+ if (audioPayload != null) {
214
+ if (audioStream == null) {
215
+ const index = nextBlockIndex(activeBlocks);
216
+ audioStream = {
217
+ index,
218
+ id: audioPayload.id,
219
+ mimeType: audioPayload.mimeType,
220
+ transcript: ""
221
+ };
222
+ const initial = {
223
+ type: "audio",
224
+ ...audioPayload.id != null ? { id: audioPayload.id } : {},
225
+ ...audioPayload.url != null ? { url: audioPayload.url } : {},
226
+ data: "",
227
+ mimeType: audioPayload.mimeType
228
+ };
229
+ activeBlocks.set(index, {
230
+ type: "audio",
231
+ accumulated: initial
232
+ });
130
233
  yield {
131
- type: "content-block-delta",
132
- index: blockIndex,
133
- content: accumulated
234
+ event: "content-block-start",
235
+ index,
236
+ content: initial
134
237
  };
135
238
  }
239
+ const activeAudio = activeBlocks.get(audioStream.index);
240
+ if (activeAudio != null) {
241
+ const accumulated = activeAudio.accumulated;
242
+ if (audioPayload.id != null && audioStream.id == null) {
243
+ audioStream.id = audioPayload.id;
244
+ accumulated.id = audioPayload.id;
245
+ }
246
+ if (audioPayload.transcript != null) {
247
+ audioStream.transcript += audioPayload.transcript;
248
+ accumulated.transcript = audioStream.transcript;
249
+ yield {
250
+ event: "content-block-delta",
251
+ index: audioStream.index,
252
+ delta: {
253
+ type: "block-delta",
254
+ fields: {
255
+ type: "audio",
256
+ transcript: audioStream.transcript
257
+ }
258
+ }
259
+ };
260
+ }
261
+ if (audioPayload.data != null && audioPayload.data.length > 0) {
262
+ accumulated.data = (accumulated.data ?? "") + audioPayload.data;
263
+ yield {
264
+ event: "content-block-delta",
265
+ index: audioStream.index,
266
+ delta: {
267
+ type: "data-delta",
268
+ data: audioPayload.data,
269
+ encoding: "base64"
270
+ }
271
+ };
272
+ }
273
+ }
274
+ }
275
+ for (const imageBlock of extractImageBlocksFromToolOutputs(msg)) {
276
+ const imageRecord = imageBlock;
277
+ const imageKey = imageRecord.id ?? imageRecord.url ?? (imageRecord.data != null ? `${imageRecord.data.length}:${imageRecord.data.slice(0, 32)}` : void 0);
278
+ if (imageKey != null && emittedImageKeys.has(imageKey)) continue;
279
+ if (imageKey != null) emittedImageKeys.add(imageKey);
280
+ const index = nextBlockIndex(activeBlocks);
281
+ activeBlocks.set(index, {
282
+ type: "image",
283
+ accumulated: imageBlock
284
+ });
285
+ yield {
286
+ event: "content-block-start",
287
+ index,
288
+ content: imageBlock
289
+ };
136
290
  }
137
291
  if (!usageHandledInStart && AIMessageChunk.isInstance(msg) && msg.usage_metadata) {
138
292
  const chunkUsage = msg.usage_metadata;
@@ -143,58 +297,82 @@ async function* convertChunksToEvents(chunks, options) {
143
297
  total_tokens: lastUsage.total_tokens + chunkUsage.total_tokens
144
298
  };
145
299
  yield {
146
- type: "usage",
300
+ event: "usage",
147
301
  usage: { ...lastUsage }
148
302
  };
149
303
  }
150
304
  }
151
305
  for (const [index, block] of activeBlocks) yield {
152
- type: "content-block-finish",
306
+ event: "content-block-finish",
153
307
  index,
154
308
  content: finalizeContentBlock(block.accumulated)
155
309
  };
156
310
  yield {
157
- type: "message-finish",
311
+ event: "message-finish",
158
312
  reason: "stop",
159
313
  ...lastUsage ? { usage: lastUsage } : {}
160
314
  };
161
315
  }
162
316
  /**
163
- * Accumulate a content block delta into the running snapshot.
317
+ * Apply a typed delta to an accumulated content block.
318
+ * @internal
164
319
  */
165
- function accumulateContentBlock(accumulated, delta) {
166
- if (accumulated.type === "text" && delta.type === "text") return {
167
- ...accumulated,
168
- type: "text",
169
- text: accumulated.text + (delta.text ?? "")
170
- };
171
- if (accumulated.type === "reasoning" && delta.type === "reasoning") return {
172
- ...accumulated,
173
- type: "reasoning",
174
- reasoning: accumulated.reasoning + (delta.reasoning ?? "")
175
- };
176
- if ((accumulated.type === "tool_call_chunk" || accumulated.type === "tool_call") && (delta.type === "tool_call_chunk" || delta.type === "tool_call")) {
177
- const accTC = accumulated;
178
- const deltaTC = delta;
179
- return {
180
- ...accumulated,
181
- type: "tool_call_chunk",
182
- id: accTC.id ?? deltaTC.id,
183
- name: accTC.name ?? deltaTC.name,
184
- args: (accTC.args ?? "") + (deltaTC.args ?? ""),
185
- index: accTC.index ?? deltaTC.index
320
+ function applyDeltaToBlock(block, delta) {
321
+ switch (delta.type) {
322
+ case "text-delta":
323
+ if (block.type === "text") return {
324
+ ...block,
325
+ text: (block.text ?? "") + delta.text
326
+ };
327
+ return block;
328
+ case "reasoning-delta":
329
+ if (block.type === "thinking") return {
330
+ ...block,
331
+ thinking: (block.thinking ?? "") + delta.reasoning
332
+ };
333
+ if (block.type === "reasoning") return {
334
+ ...block,
335
+ reasoning: (block.reasoning ?? "") + delta.reasoning
336
+ };
337
+ return block;
338
+ case "data-delta": return {
339
+ ...block,
340
+ data: (block.data ?? "") + delta.data
341
+ };
342
+ case "block-delta": return {
343
+ ...block,
344
+ ...delta.fields
186
345
  };
346
+ default: throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);
187
347
  }
188
- return {
189
- ...accumulated,
190
- ...delta
348
+ }
349
+ function contentBlockToDelta(block) {
350
+ if (block.type === "text") return {
351
+ type: "text-delta",
352
+ text: block.text
353
+ };
354
+ if (block.type === "reasoning") return {
355
+ type: "reasoning-delta",
356
+ reasoning: block.reasoning
357
+ };
358
+ if (block.type === "thinking" && typeof block.thinking === "string") return {
359
+ type: "reasoning-delta",
360
+ reasoning: block.thinking
191
361
  };
362
+ if (typeof block.data === "string") return {
363
+ type: "data-delta",
364
+ data: block.data,
365
+ encoding: "base64"
366
+ };
367
+ if (typeof block.type === "string") return {
368
+ type: "block-delta",
369
+ fields: { ...block }
370
+ };
371
+ throw new Error(`Unsupported content block delta: ${JSON.stringify(block)}`);
192
372
  }
193
373
  /**
194
374
  * Finalize a content block for the finish event.
195
- *
196
- * For tool calls, attempts to parse the accumulated args JSON string
197
- * into an object, upgrading from `tool_call_chunk` to `tool_call`.
375
+ * For tool calls, parse the accumulated JSON args string.
198
376
  */
199
377
  function finalizeContentBlock(block) {
200
378
  if (block.type === "tool_call_chunk") {
@@ -221,6 +399,6 @@ function finalizeContentBlock(block) {
221
399
  return block;
222
400
  }
223
401
  //#endregion
224
- export { accumulateContentBlock, compat_exports, convertChunksToEvents, finalizeContentBlock };
402
+ export { compat_exports, convertChunksToEvents, finalizeContentBlock };
225
403
 
226
404
  //# sourceMappingURL=compat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compat.js","names":[],"sources":["../../src/language_models/compat.ts"],"sourcesContent":["/**\n * Compatibility bridge: converts legacy `_streamResponseChunks`\n * (`ChatGenerationChunk` / `AIMessageChunk`) output to the new\n * `ChatModelStreamEvent` protocol.\n *\n * This module is used by `BaseChatModel._streamChatModelEvents` as\n * the default implementation when a provider has not yet implemented\n * native event streaming.\n *\n * @module\n */\n\nimport { AIMessageChunk } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { ChatGenerationChunk } from \"../outputs.js\";\nimport type { ChatModelStreamEvent } from \"./event.js\";\n\n/**\n * Convert an async iterable of legacy `ChatGenerationChunk`s into\n * `ChatModelStreamEvent`s.\n *\n * Tracks content blocks by index, synthesizes start/delta/finish events,\n * and emits usage updates. Handles both string content and array content\n * blocks, as well as tool call chunks.\n *\n * @param chunks - The legacy chunk stream from `_streamResponseChunks`.\n * @param options - Optional signal for abort handling.\n * @returns An async generator of {@link ChatModelStreamEvent}.\n */\nexport async function* convertChunksToEvents(\n chunks: AsyncIterable<ChatGenerationChunk>,\n options?: { signal?: AbortSignal }\n): AsyncGenerator<ChatModelStreamEvent> {\n // Track active content blocks for the bridge\n const activeBlocks = new Map<\n number,\n { started: boolean; accumulated: ContentBlock }\n >();\n let messageStarted = false;\n let lastUsage:\n | { input_tokens: number; output_tokens: number; total_tokens: number }\n | undefined;\n\n for await (const chunk of chunks) {\n options?.signal?.throwIfAborted();\n\n const msg = chunk.message;\n\n // Emit message-start on the first chunk\n let usageHandledInStart = false;\n if (!messageStarted) {\n messageStarted = true;\n const startEvent: ChatModelStreamEvent = {\n type: \"message-start\" as const,\n id: msg.id ?? undefined,\n };\n // If first chunk has usage (e.g., Anthropic input tokens)\n if (AIMessageChunk.isInstance(msg) && msg.usage_metadata) {\n (startEvent as { usage?: unknown }).usage = msg.usage_metadata;\n lastUsage = { ...msg.usage_metadata };\n usageHandledInStart = true;\n }\n yield startEvent;\n }\n\n // Process content from the chunk\n const content = msg.content;\n if (typeof content === \"string\") {\n if (content !== \"\") {\n // Simple string content → single text block at index 0\n const blockIndex = 0;\n\n if (!activeBlocks.has(blockIndex)) {\n const initial: ContentBlock.Text = { type: \"text\", text: \"\" };\n activeBlocks.set(blockIndex, {\n started: true,\n accumulated: initial,\n });\n yield {\n type: \"content-block-start\" as const,\n index: blockIndex,\n content: initial,\n };\n }\n\n const block = activeBlocks.get(blockIndex)!;\n const prevText = (block.accumulated as ContentBlock.Text).text;\n const accumulated: ContentBlock.Text = {\n type: \"text\",\n text: prevText + content,\n };\n block.accumulated = accumulated;\n\n yield {\n type: \"content-block-delta\" as const,\n index: blockIndex,\n content: accumulated,\n };\n }\n } else if (Array.isArray(content)) {\n for (const part of content) {\n const blockIndex =\n typeof part.index === \"number\" ? part.index : activeBlocks.size;\n\n if (!activeBlocks.has(blockIndex)) {\n activeBlocks.set(blockIndex, {\n started: true,\n accumulated: { ...part },\n });\n yield {\n type: \"content-block-start\" as const,\n index: blockIndex,\n content: { ...part },\n };\n } else {\n // Accumulate into existing block\n const block = activeBlocks.get(blockIndex)!;\n const accumulated = accumulateContentBlock(block.accumulated, part);\n block.accumulated = accumulated;\n\n yield {\n type: \"content-block-delta\" as const,\n index: blockIndex,\n content: accumulated,\n };\n }\n }\n }\n\n // Handle tool call chunks from the legacy path\n if (\n AIMessageChunk.isInstance(msg) &&\n msg.tool_call_chunks &&\n msg.tool_call_chunks.length > 0\n ) {\n for (const toolChunk of msg.tool_call_chunks) {\n const blockIndex =\n typeof toolChunk.index === \"number\"\n ? toolChunk.index\n : activeBlocks.size;\n\n const delta: ContentBlock = {\n type: \"tool_call_chunk\" as const,\n id: toolChunk.id,\n name: toolChunk.name,\n args: toolChunk.args,\n index: blockIndex,\n };\n\n if (!activeBlocks.has(blockIndex)) {\n activeBlocks.set(blockIndex, {\n started: true,\n accumulated: { ...delta },\n });\n yield {\n type: \"content-block-start\" as const,\n index: blockIndex,\n content: { ...delta },\n };\n } else {\n const block = activeBlocks.get(blockIndex)!;\n const accumulated = accumulateContentBlock(block.accumulated, delta);\n block.accumulated = accumulated;\n\n yield {\n type: \"content-block-delta\" as const,\n index: blockIndex,\n content: accumulated,\n };\n }\n }\n }\n\n // Accumulate usage (legacy chunks use additive usage, not snapshots)\n if (\n !usageHandledInStart &&\n AIMessageChunk.isInstance(msg) &&\n msg.usage_metadata\n ) {\n const chunkUsage = msg.usage_metadata;\n if (!lastUsage) {\n lastUsage = { ...chunkUsage };\n } else {\n lastUsage = {\n input_tokens: lastUsage.input_tokens + chunkUsage.input_tokens,\n output_tokens: lastUsage.output_tokens + chunkUsage.output_tokens,\n total_tokens: lastUsage.total_tokens + chunkUsage.total_tokens,\n };\n }\n yield { type: \"usage\" as const, usage: { ...lastUsage } };\n }\n }\n\n // Emit content-block-finish for all active blocks\n for (const [index, block] of activeBlocks) {\n const finalized = finalizeContentBlock(block.accumulated);\n yield {\n type: \"content-block-finish\" as const,\n index,\n content: finalized,\n };\n }\n\n // Emit message-finish\n yield {\n type: \"message-finish\" as const,\n reason: \"stop\" as const,\n ...(lastUsage ? { usage: lastUsage } : {}),\n };\n}\n\n/**\n * Accumulate a content block delta into the running snapshot.\n */\nexport function accumulateContentBlock(\n accumulated: ContentBlock,\n delta: ContentBlock\n): ContentBlock {\n if (accumulated.type === \"text\" && delta.type === \"text\") {\n return {\n ...accumulated,\n type: \"text\" as const,\n text:\n (accumulated as ContentBlock.Text).text +\n ((delta as ContentBlock.Text).text ?? \"\"),\n } as ContentBlock.Text;\n }\n\n if (accumulated.type === \"reasoning\" && delta.type === \"reasoning\") {\n return {\n ...accumulated,\n type: \"reasoning\" as const,\n reasoning:\n (accumulated as ContentBlock.Reasoning).reasoning +\n ((delta as ContentBlock.Reasoning).reasoning ?? \"\"),\n } as ContentBlock.Reasoning;\n }\n\n if (\n (accumulated.type === \"tool_call_chunk\" ||\n accumulated.type === \"tool_call\") &&\n (delta.type === \"tool_call_chunk\" || delta.type === \"tool_call\")\n ) {\n const accTC = accumulated as ContentBlock.Tools.ToolCallChunk;\n const deltaTC = delta as ContentBlock.Tools.ToolCallChunk;\n return {\n ...accumulated,\n type: \"tool_call_chunk\" as const,\n id: accTC.id ?? deltaTC.id,\n name: accTC.name ?? deltaTC.name,\n args: (accTC.args ?? \"\") + (deltaTC.args ?? \"\"),\n index: accTC.index ?? deltaTC.index,\n } as ContentBlock.Tools.ToolCallChunk;\n }\n\n // For block types we don't know how to merge, just spread the delta over\n return { ...accumulated, ...delta };\n}\n\n/**\n * Finalize a content block for the finish event.\n *\n * For tool calls, attempts to parse the accumulated args JSON string\n * into an object, upgrading from `tool_call_chunk` to `tool_call`.\n */\nexport function finalizeContentBlock(block: ContentBlock): ContentBlock {\n if (block.type === \"tool_call_chunk\") {\n const chunk = block as ContentBlock.Tools.ToolCallChunk;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(chunk.args ?? \"{}\");\n } catch {\n // If JSON parsing fails, return as invalid tool call\n return {\n type: \"invalid_tool_call\" as const,\n id: chunk.id,\n name: chunk.name,\n args: chunk.args,\n error: \"Failed to parse tool call arguments as JSON\",\n } as ContentBlock.Tools.InvalidToolCall;\n }\n return {\n type: \"tool_call\" as const,\n id: chunk.id,\n name: chunk.name!,\n args: parsedArgs,\n } as ContentBlock.Tools.ToolCall;\n }\n\n return block;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"compat.js","names":[],"sources":["../../src/language_models/compat.ts"],"sourcesContent":["/**\n * Compatibility bridge: converts legacy `_streamResponseChunks`\n * (`ChatGenerationChunk` / `AIMessageChunk`) output to the new\n * `ChatModelStreamEvent` protocol.\n *\n * @module\n */\n\nimport { AIMessageChunk } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { ChatGenerationChunk } from \"../outputs.js\";\nimport type { ChatModelStreamEvent, ContentBlockDelta } from \"./event.js\";\n\nconst MIME_TYPE_BY_AUDIO_FORMAT: Record<string, string> = {\n wav: \"audio/wav\",\n mp3: \"audio/mpeg\",\n flac: \"audio/flac\",\n opus: \"audio/opus\",\n aac: \"audio/aac\",\n pcm16: \"audio/pcm\",\n};\n\nconst MIME_TYPE_BY_IMAGE_FORMAT: Record<string, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n webp: \"image/webp\",\n gif: \"image/gif\",\n};\n\ntype AudioStreamState = {\n index: number;\n id?: string;\n mimeType: string;\n transcript: string;\n};\n\nfunction nextBlockIndex(activeBlocks: Map<number, unknown>): number {\n let next = 0;\n for (const index of activeBlocks.keys()) {\n if (index >= next) next = index + 1;\n }\n return next;\n}\n\nfunction getAdditionalKwargs(message: unknown): Record<string, unknown> {\n const additional = (message as { additional_kwargs?: unknown })\n .additional_kwargs;\n return additional != null && typeof additional === \"object\"\n ? (additional as Record<string, unknown>)\n : {};\n}\n\nfunction extractImageBlocksFromToolOutputs(message: unknown): ContentBlock[] {\n const toolOutputs = getAdditionalKwargs(message).tool_outputs;\n if (!Array.isArray(toolOutputs)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const entry of toolOutputs) {\n if (entry == null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n if (record.type !== \"image_generation_call\") continue;\n\n const data = typeof record.result === \"string\" ? record.result : undefined;\n const url = typeof record.url === \"string\" ? record.url : undefined;\n if (data == null && url == null) continue;\n\n const outputFormat =\n typeof record.output_format === \"string\"\n ? record.output_format.toLowerCase()\n : undefined;\n const mimeType =\n (outputFormat != null\n ? MIME_TYPE_BY_IMAGE_FORMAT[outputFormat]\n : undefined) ?? \"image/png\";\n\n blocks.push({\n type: \"image\",\n ...(typeof record.id === \"string\" ? { id: record.id } : {}),\n ...(url != null ? { url } : {}),\n ...(data != null ? { data } : {}),\n mimeType,\n } as ContentBlock);\n }\n return blocks;\n}\n\n/**\n * Get the audio payload from the message.\n *\n * This handles the OpenAI-shaped `additional_kwargs.audio` payload used by\n * legacy chunk streams; other providers must normalize into this shape first.\n *\n * @param message - The message to get the audio payload from.\n * @returns The audio payload.\n * @internal\n */\nfunction getAudioPayload(message: unknown):\n | {\n id?: string;\n data?: string;\n url?: string;\n transcript?: string;\n mimeType: string;\n }\n | undefined {\n const audio = getAdditionalKwargs(message).audio;\n if (audio == null || typeof audio !== \"object\") return undefined;\n const record = audio as Record<string, unknown>;\n\n const data = typeof record.data === \"string\" ? record.data : undefined;\n const url = typeof record.url === \"string\" ? record.url : undefined;\n const transcript =\n typeof record.transcript === \"string\" ? record.transcript : undefined;\n if (data == null && url == null && transcript == null) return undefined;\n\n const explicitMimeType =\n typeof record.mime_type === \"string\"\n ? record.mime_type\n : typeof record.mimeType === \"string\"\n ? record.mimeType\n : undefined;\n const format =\n typeof record.format === \"string\" ? record.format.toLowerCase() : undefined;\n const mimeType =\n explicitMimeType ??\n (format != null ? MIME_TYPE_BY_AUDIO_FORMAT[format] : undefined) ??\n (data != null ? \"audio/wav\" : \"audio/pcm\");\n\n return {\n ...(typeof record.id === \"string\" ? { id: record.id } : {}),\n ...(data != null ? { data } : {}),\n ...(url != null ? { url } : {}),\n ...(transcript != null ? { transcript } : {}),\n mimeType,\n };\n}\n\n/**\n * Convert an async iterable of legacy `ChatGenerationChunk`s into\n * `ChatModelStreamEvent`s with typed deltas.\n */\nexport async function* convertChunksToEvents(\n chunks: AsyncIterable<ChatGenerationChunk>,\n options?: { signal?: AbortSignal }\n): AsyncGenerator<ChatModelStreamEvent> {\n const activeBlocks = new Map<\n number,\n { type: string; accumulated: ContentBlock }\n >();\n let messageStarted = false;\n let lastUsage:\n | { input_tokens: number; output_tokens: number; total_tokens: number }\n | undefined;\n let audioStream: AudioStreamState | undefined;\n const emittedImageKeys = new Set<string>();\n\n for await (const chunk of chunks) {\n options?.signal?.throwIfAborted();\n\n const msg = chunk.message;\n\n // Message start\n let usageHandledInStart = false;\n if (!messageStarted) {\n messageStarted = true;\n const startEvent: ChatModelStreamEvent = {\n event: \"message-start\" as const,\n id: msg.id ?? undefined,\n };\n if (AIMessageChunk.isInstance(msg) && msg.usage_metadata) {\n (startEvent as { usage?: unknown }).usage = msg.usage_metadata;\n lastUsage = { ...msg.usage_metadata };\n usageHandledInStart = true;\n }\n yield startEvent;\n }\n\n // Process content\n const content = msg.content;\n if (typeof content === \"string\") {\n if (content !== \"\") {\n const blockIndex = 0;\n if (!activeBlocks.has(blockIndex)) {\n const initial: ContentBlock.Text = { type: \"text\", text: \"\" };\n activeBlocks.set(blockIndex, {\n type: \"text\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: initial,\n };\n }\n const block = activeBlocks.get(blockIndex)!;\n block.accumulated = {\n ...block.accumulated,\n text: ((block.accumulated as { text?: string }).text ?? \"\") + content,\n };\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta: { type: \"text-delta\" as const, text: content },\n };\n }\n } else if (Array.isArray(content)) {\n for (const part of content) {\n const blockIndex =\n typeof part.index === \"number\" ? part.index : activeBlocks.size;\n\n if (!activeBlocks.has(blockIndex)) {\n activeBlocks.set(blockIndex, {\n type: part.type,\n accumulated: { ...part },\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: { ...part },\n };\n } else {\n const block = activeBlocks.get(blockIndex)!;\n const delta = contentBlockToDelta(part);\n block.accumulated = applyDeltaToBlock(block.accumulated, delta);\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta,\n };\n }\n }\n }\n\n // Tool call chunks\n if (\n AIMessageChunk.isInstance(msg) &&\n msg.tool_call_chunks &&\n msg.tool_call_chunks.length > 0\n ) {\n for (const toolChunk of msg.tool_call_chunks) {\n const blockIndex =\n typeof toolChunk.index === \"number\"\n ? toolChunk.index\n : activeBlocks.size;\n\n if (!activeBlocks.has(blockIndex)) {\n const initial: ContentBlock = {\n type: \"tool_call_chunk\" as const,\n id: toolChunk.id,\n name: toolChunk.name,\n args: \"\",\n index: blockIndex,\n };\n activeBlocks.set(blockIndex, {\n type: \"tool_call_chunk\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index: blockIndex,\n content: initial,\n };\n }\n\n // Accumulate tool call args internally, emit incremental content chunks.\n const block = activeBlocks.get(blockIndex)!;\n const acc = block.accumulated as {\n args?: string;\n id?: string;\n name?: string;\n };\n if (toolChunk.id != null) acc.id = toolChunk.id;\n if (toolChunk.name != null) acc.name = toolChunk.name;\n acc.args = (acc.args ?? \"\") + (toolChunk.args ?? \"\");\n yield {\n event: \"content-block-delta\" as const,\n index: blockIndex,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"tool_call_chunk\",\n ...(\"id\" in acc && acc.id != null ? { id: acc.id } : {}),\n ...(\"name\" in acc && acc.name != null ? { name: acc.name } : {}),\n args: acc.args,\n },\n },\n };\n }\n }\n\n const audioPayload = getAudioPayload(msg);\n if (audioPayload != null) {\n if (audioStream == null) {\n const index = nextBlockIndex(activeBlocks);\n audioStream = {\n index,\n id: audioPayload.id,\n mimeType: audioPayload.mimeType,\n transcript: \"\",\n };\n const initial = {\n type: \"audio\",\n ...(audioPayload.id != null ? { id: audioPayload.id } : {}),\n ...(audioPayload.url != null ? { url: audioPayload.url } : {}),\n data: \"\",\n mimeType: audioPayload.mimeType,\n } as ContentBlock;\n activeBlocks.set(index, {\n type: \"audio\",\n accumulated: initial,\n });\n yield {\n event: \"content-block-start\" as const,\n index,\n content: initial,\n };\n }\n\n const activeAudio = activeBlocks.get(audioStream.index);\n if (activeAudio != null) {\n const accumulated = activeAudio.accumulated as ContentBlock & {\n data?: string;\n transcript?: string;\n };\n if (audioPayload.id != null && audioStream.id == null) {\n audioStream.id = audioPayload.id;\n (accumulated as { id?: string }).id = audioPayload.id;\n }\n if (audioPayload.transcript != null) {\n audioStream.transcript += audioPayload.transcript;\n accumulated.transcript = audioStream.transcript;\n yield {\n event: \"content-block-delta\" as const,\n index: audioStream.index,\n delta: {\n type: \"block-delta\" as const,\n fields: {\n type: \"audio\",\n transcript: audioStream.transcript,\n },\n },\n };\n }\n if (audioPayload.data != null && audioPayload.data.length > 0) {\n accumulated.data = (accumulated.data ?? \"\") + audioPayload.data;\n yield {\n event: \"content-block-delta\" as const,\n index: audioStream.index,\n delta: {\n type: \"data-delta\" as const,\n data: audioPayload.data,\n encoding: \"base64\" as const,\n },\n };\n }\n }\n }\n\n for (const imageBlock of extractImageBlocksFromToolOutputs(msg)) {\n const imageRecord = imageBlock as ContentBlock & {\n id?: string;\n url?: string;\n data?: string;\n };\n const imageKey =\n imageRecord.id ??\n imageRecord.url ??\n (imageRecord.data != null\n ? `${imageRecord.data.length}:${imageRecord.data.slice(0, 32)}`\n : undefined);\n if (imageKey != null && emittedImageKeys.has(imageKey)) continue;\n if (imageKey != null) emittedImageKeys.add(imageKey);\n\n const index = nextBlockIndex(activeBlocks);\n activeBlocks.set(index, {\n type: \"image\",\n accumulated: imageBlock,\n });\n yield {\n event: \"content-block-start\" as const,\n index,\n content: imageBlock,\n };\n }\n\n // Usage\n if (\n !usageHandledInStart &&\n AIMessageChunk.isInstance(msg) &&\n msg.usage_metadata\n ) {\n const chunkUsage = msg.usage_metadata;\n if (!lastUsage) {\n lastUsage = { ...chunkUsage };\n } else {\n lastUsage = {\n input_tokens: lastUsage.input_tokens + chunkUsage.input_tokens,\n output_tokens: lastUsage.output_tokens + chunkUsage.output_tokens,\n total_tokens: lastUsage.total_tokens + chunkUsage.total_tokens,\n };\n }\n yield { event: \"usage\" as const, usage: { ...lastUsage } };\n }\n }\n\n // Finish all blocks\n for (const [index, block] of activeBlocks) {\n const finalized = finalizeContentBlock(block.accumulated);\n yield {\n event: \"content-block-finish\" as const,\n index,\n content: finalized,\n };\n }\n\n yield {\n event: \"message-finish\" as const,\n reason: \"stop\" as const,\n ...(lastUsage ? { usage: lastUsage } : {}),\n };\n}\n\n/**\n * Apply a typed delta to an accumulated content block.\n * @internal\n */\nfunction applyDeltaToBlock(\n block: ContentBlock,\n delta: ContentBlockDelta\n): ContentBlock {\n switch (delta.type) {\n case \"text-delta\":\n if (block.type === \"text\") {\n return {\n ...block,\n text: (block.text ?? \"\") + delta.text,\n };\n }\n return block;\n case \"reasoning-delta\":\n if (block.type === \"thinking\") {\n return {\n ...block,\n thinking: (block.thinking ?? \"\") + delta.reasoning,\n };\n }\n if (block.type === \"reasoning\") {\n return {\n ...block,\n reasoning: (block.reasoning ?? \"\") + delta.reasoning,\n };\n }\n return block;\n case \"data-delta\":\n return {\n ...block,\n data: (block.data ?? \"\") + delta.data,\n };\n case \"block-delta\":\n return { ...block, ...delta.fields } as ContentBlock;\n default:\n throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);\n }\n}\n\nfunction contentBlockToDelta(block: ContentBlock): ContentBlockDelta {\n if (block.type === \"text\") {\n return { type: \"text-delta\", text: (block as ContentBlock.Text).text };\n }\n if (block.type === \"reasoning\") {\n return {\n type: \"reasoning-delta\",\n reasoning: (block as ContentBlock.Reasoning).reasoning,\n };\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return {\n type: \"reasoning-delta\",\n reasoning: block.thinking,\n };\n }\n if (typeof block.data === \"string\") {\n return {\n type: \"data-delta\",\n data: block.data,\n encoding: \"base64\",\n };\n }\n if (typeof block.type === \"string\") {\n return {\n type: \"block-delta\",\n fields: {\n ...(block as unknown as { type: string } & Record<string, unknown>),\n },\n };\n }\n\n throw new Error(`Unsupported content block delta: ${JSON.stringify(block)}`);\n}\n\n/**\n * Finalize a content block for the finish event.\n * For tool calls, parse the accumulated JSON args string.\n */\nexport function finalizeContentBlock(block: ContentBlock): ContentBlock {\n if (block.type === \"tool_call_chunk\") {\n const chunk = block as ContentBlock.Tools.ToolCallChunk;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(chunk.args ?? \"{}\");\n } catch {\n return {\n type: \"invalid_tool_call\" as const,\n id: chunk.id,\n name: chunk.name,\n args: chunk.args,\n error: \"Failed to parse tool call arguments as JSON\",\n } as ContentBlock.Tools.InvalidToolCall;\n }\n return {\n type: \"tool_call\" as const,\n id: chunk.id,\n name: chunk.name!,\n args: parsedArgs,\n } as ContentBlock.Tools.ToolCall;\n }\n\n return block;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types directly as accumulated\n * snapshots.\n *\n * ## Design Principles\n *\n * 1. **Content blocks are the universal carrier.** Events carry {@link ContentBlock}\n * instances directly the block's `type` field is the discriminant. New content\n * block types automatically work without protocol changes.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Accumulated snapshots.** Each {@link ContentBlockDeltaEvent} carries the\n * accumulated state of the content block so far. Aggregation logic lives in the\n * provider adapter, not the consumer. Consumers who need incremental deltas\n * track previous state and diff.\n *\n * 4. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 5. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, ...)\n * -> ContentBlockStart(index=1, ...) // can start before 0 finishes\n * -> ContentBlockDelta(index=0, ...)\n * -> ContentBlockDelta(index=1, ...) // interleaved\n * -> ContentBlockFinish(index=0, ...) // blocks finish independently\n * -> ContentBlockDelta(index=1, ...)\n * -> ContentBlockFinish(index=1, ...)\n * -> UsageUpdate(...) // may appear at any point\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type {\n ContentBlock,\n PartialContentBlock,\n} from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n type: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: UsageMetadata;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n type: \"message-finish\";\n /** Why the model stopped generating. */\n reason: FinishReason;\n /** Final usage snapshot. */\n usage?: UsageMetadata;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n responseMetadata?: Record<string, unknown>;\n}\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * // Text block starting\n * { type: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n *\n * // Tool call starting\n * { type: \"content-block-start\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\", args: \"\" } }\n *\n * // Reasoning starting\n * { type: \"content-block-start\", index: 2,\n * content: { type: \"reasoning\", reasoning: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n type: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * Carries the **accumulated state** of the content block so far.\n * The content is deeply partial not all fields may be populated during\n * streaming (e.g., a tool call may have `name` but `args` is still being\n * streamed as a partial JSON string).\n *\n * Consumers who need incremental deltas (e.g., new tokens only) should\n * track the previous state and diff against the new accumulated state.\n *\n * Aggregation into `AIMessage` is trivial:\n * `message.content[event.index] = event.content`\n *\n * @example\n * ```ts\n * // First text delta — accumulated so far\n * { type: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \"Hello\" } }\n *\n * // Second text delta — accumulated so far\n * { type: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n *\n * // Tool call args — accumulated so far\n * { type: \"content-block-delta\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\", args: '{\"q\":\"wea' } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n type: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Accumulated state of the content block after this update. Deeply partial. */\n content: PartialContentBlock;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * The `content` carries the **finalized** block. For tool calls, this means\n * args have been parsed from a JSON string into an object.\n *\n * @example\n * ```ts\n * // Finalized text block\n * { type: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"The weather is sunny.\" } }\n *\n * // Finalized tool call (args parsed)\n * { type: \"content-block-finish\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\",\n * args: { q: \"weather\" } } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n type: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted whenever the provider reports updated usage information.\n *\n * May appear at any point during streaming. Each event carries a\n * **running snapshot** of usage (not an additive delta), so consumers\n * can simply take the latest value.\n *\n * @example\n * ```ts\n * // After message_start (Anthropic: input tokens known)\n * { type: \"usage\", usage: { input_tokens: 1234, output_tokens: 0, total_tokens: 1234 } }\n *\n * // After streaming completes\n * { type: \"usage\", usage: { input_tokens: 1234, output_tokens: 567, total_tokens: 1801 } }\n * ```\n */\nexport interface UsageUpdateEvent {\n type: \"usage\";\n /** Current usage snapshot. */\n usage: UsageMetadata;\n}\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n *\n * Provider adapters map recognized events to standard {@link ChatModelStreamEvent}\n * types and forward everything else as `ProviderEvent`. This ensures no information\n * is silently dropped.\n *\n * @example\n * ```ts\n * // OpenAI server-side web search in progress\n * { type: \"provider\", provider: \"openai\",\n * name: \"response.web_search_call.searching\",\n * payload: { item_id: \"ws_123\", output_index: 0 } }\n *\n * // Anthropic context management signal\n * { type: \"provider\", provider: \"anthropic\",\n * name: \"context_management\",\n * payload: { ... } }\n * ```\n */\nexport interface ProviderEvent {\n type: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n type: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n/**\n * Union of all chat model stream event types.\n *\n * This is the type yielded by `ChatModelStream[Symbol.asyncIterator]()`.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
1
+ {"version":3,"file":"event.cjs","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types on lifecycle boundaries\n * and explicit delta variants for incremental updates during streaming.\n *\n * ## Design Principles\n *\n * 1. **Content-block deltas have explicit merge semantics.** Text,\n * reasoning, and data deltas append to named fields. Generic block deltas\n * shallow-merge fields onto the active content block.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 4. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, content=...)\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \"Hello\" })\n * -> ContentBlockDelta(index=0, delta={ type: \"text-delta\", text: \" world\" })\n * -> ContentBlockFinish(index=0, content=...)\n * -> UsageUpdate(...)\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n// ─── Message Lifecycle ──────────────────────────────────────────\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n event: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: Partial<UsageMetadata>;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n event: \"message-finish\";\n /** Why the model stopped generating. */\n reason?: FinishReason;\n /** Final usage snapshot. */\n usage?: Partial<UsageMetadata>;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n responseMetadata?: Record<string, unknown>;\n}\n\n// ─── Content Block Lifecycle ────────────────────────────────────\n// See https://github.com/langchain-ai/agent-protocol/blob/main/streaming/protocol.cddl\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * { event: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n event: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n// ─── Content Block Deltas ───────────────────────────────────────\n\n/**\n * Incremental text content. Append `text` to the active block's `text` field.\n */\nexport interface TextDelta {\n type: \"text-delta\";\n /** The new text to append. */\n text: string;\n}\n\n/**\n * Incremental reasoning content. Append `reasoning` to the active block's\n * `reasoning` field.\n */\nexport interface ReasoningDelta {\n type: \"reasoning-delta\";\n /** The new reasoning text to append. */\n reasoning: string;\n}\n\n/**\n * Incremental encoded data. Append `data` to the active multimodal block's\n * data field.\n */\nexport interface DataDelta {\n type: \"data-delta\";\n /** Encoded data chunk to append. */\n data: string;\n /** Encoding for the data chunk. Defaults to `\"base64\"` when omitted. */\n encoding?: \"base64\";\n}\n\n/**\n * Generic content block field update. Shallow-merge `fields` onto the active\n * content block.\n */\nexport interface BlockDelta {\n type: \"block-delta\";\n /** Fields to shallow-merge onto the active content block. */\n fields: { type: string } & Record<string, unknown>;\n}\n\n/**\n * Union of all content block delta types.\n */\nexport type ContentBlockDelta =\n | TextDelta\n | ReasoningDelta\n | DataDelta\n | BlockDelta;\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * The `delta` field carries the incremental content block update.\n * Accumulation rules:\n * - `text-delta` append `text` to the active block's text field\n * - `reasoning-delta` append `reasoning` to the active block's reasoning field\n * - `data-delta` → append `data` to the active block's data field\n * - `block-delta` shallow-merge `fields` onto the active block\n *\n * @example\n * ```ts\n * // Text token\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"text-delta\", text: \" world\" } }\n *\n * // Tool call args snapshot\n * { event: \"content-block-delta\", index: 1,\n * delta: { type: \"block-delta\",\n * fields: { type: \"tool_call_chunk\", args: '{\"q\":\"wea' } } } }\n *\n * // Provider-specific field (e.g., signature)\n * { event: \"content-block-delta\", index: 0,\n * delta: { type: \"block-delta\",\n * fields: { type: \"reasoning\", signature: \"sig_abc\" } } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n event: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Incremental content block delta. */\n delta: ContentBlockDelta;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * @example\n * ```ts\n * { event: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n event: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n// ─── Usage ──────────────────────────────────────────────────────\n\n/**\n * Emitted whenever the provider reports updated usage information.\n * Each event carries a **running snapshot** (not an additive delta).\n */\nexport interface UsageUpdateEvent {\n event: \"usage\";\n /** Current usage snapshot. */\n usage: Partial<UsageMetadata>;\n}\n\n// ─── Provider Passthrough ───────────────────────────────────────\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n */\nexport interface ProviderEvent {\n event: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n// ─── Error ──────────────────────────────────────────────────────\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n event: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n// ─── Union ──────────────────────────────────────────────────────\n\n/**\n * Union of all chat model stream event types.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}