@langchain/core 1.2.0-dev-1775763803878 → 1.2.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 (737) hide show
  1. package/CHANGELOG.md +120 -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/tracers/console.cjs +30 -4
  296. package/dist/tracers/console.cjs.map +1 -1
  297. package/dist/tracers/console.d.cts.map +1 -1
  298. package/dist/tracers/console.d.ts.map +1 -1
  299. package/dist/tracers/console.js +28 -1
  300. package/dist/tracers/console.js.map +1 -1
  301. package/dist/tracers/event_stream.cjs.map +1 -1
  302. package/dist/tracers/event_stream.js.map +1 -1
  303. package/dist/tracers/tracer_langchain.cjs +70 -2
  304. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  305. package/dist/tracers/tracer_langchain.d.cts +26 -1
  306. package/dist/tracers/tracer_langchain.d.cts.map +1 -1
  307. package/dist/tracers/tracer_langchain.d.ts +26 -1
  308. package/dist/tracers/tracer_langchain.d.ts.map +1 -1
  309. package/dist/tracers/tracer_langchain.js +70 -3
  310. package/dist/tracers/tracer_langchain.js.map +1 -1
  311. package/dist/utils/async_caller.cjs +3 -2
  312. package/dist/utils/async_caller.cjs.map +1 -1
  313. package/dist/utils/async_caller.js +2 -1
  314. package/dist/utils/async_caller.js.map +1 -1
  315. package/dist/utils/callbacks.cjs.map +1 -1
  316. package/dist/utils/callbacks.js.map +1 -1
  317. package/dist/utils/context.cjs.map +1 -1
  318. package/dist/utils/context.js.map +1 -1
  319. package/dist/utils/env.cjs.map +1 -1
  320. package/dist/utils/env.d.cts.map +1 -1
  321. package/dist/utils/env.d.ts.map +1 -1
  322. package/dist/utils/env.js.map +1 -1
  323. package/dist/utils/event_source_parse.cjs +5 -12
  324. package/dist/utils/event_source_parse.cjs.map +1 -1
  325. package/dist/utils/event_source_parse.js +5 -12
  326. package/dist/utils/event_source_parse.js.map +1 -1
  327. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  328. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  329. package/dist/utils/json_schema.cjs.map +1 -1
  330. package/dist/utils/json_schema.js.map +1 -1
  331. package/dist/utils/sax-js/sax.cjs.map +1 -1
  332. package/dist/utils/sax-js/sax.js.map +1 -1
  333. package/dist/utils/ssrf.cjs.map +1 -1
  334. package/dist/utils/ssrf.js.map +1 -1
  335. package/dist/utils/stream.d.cts +2 -2
  336. package/dist/utils/stream.d.cts.map +1 -1
  337. package/dist/utils/stream.d.ts +2 -2
  338. package/dist/utils/stream.d.ts.map +1 -1
  339. package/dist/utils/testing/chat_models.cjs.map +1 -1
  340. package/dist/utils/testing/chat_models.js.map +1 -1
  341. package/dist/utils/testing/embeddings.cjs.map +1 -1
  342. package/dist/utils/testing/embeddings.js.map +1 -1
  343. package/dist/utils/testing/index.cjs +17 -1
  344. package/dist/utils/testing/index.cjs.map +1 -1
  345. package/dist/utils/testing/index.d.cts +3 -1
  346. package/dist/utils/testing/index.d.ts +3 -1
  347. package/dist/utils/testing/index.js +11 -2
  348. package/dist/utils/testing/index.js.map +1 -1
  349. package/dist/utils/testing/openai_stream_fixtures.cjs +160 -0
  350. package/dist/utils/testing/openai_stream_fixtures.cjs.map +1 -0
  351. package/dist/utils/testing/openai_stream_fixtures.d.cts +12 -0
  352. package/dist/utils/testing/openai_stream_fixtures.d.cts.map +1 -0
  353. package/dist/utils/testing/openai_stream_fixtures.d.ts +12 -0
  354. package/dist/utils/testing/openai_stream_fixtures.d.ts.map +1 -0
  355. package/dist/utils/testing/openai_stream_fixtures.js +155 -0
  356. package/dist/utils/testing/openai_stream_fixtures.js.map +1 -0
  357. package/dist/utils/testing/stream.cjs +136 -0
  358. package/dist/utils/testing/stream.cjs.map +1 -0
  359. package/dist/utils/testing/stream.d.cts +96 -0
  360. package/dist/utils/testing/stream.d.cts.map +1 -0
  361. package/dist/utils/testing/stream.d.ts +96 -0
  362. package/dist/utils/testing/stream.d.ts.map +1 -0
  363. package/dist/utils/testing/stream.js +136 -0
  364. package/dist/utils/testing/stream.js.map +1 -0
  365. package/dist/utils/testing/vectorstores.cjs.map +1 -1
  366. package/dist/utils/testing/vectorstores.js.map +1 -1
  367. package/dist/utils/types/zod.cjs.map +1 -1
  368. package/dist/utils/types/zod.js.map +1 -1
  369. package/dist/utils/uuid/index.cjs +58 -0
  370. package/dist/utils/uuid/index.cjs.map +1 -0
  371. package/dist/utils/uuid/index.d.cts +26 -0
  372. package/dist/utils/uuid/index.d.cts.map +1 -0
  373. package/dist/utils/uuid/index.d.ts +26 -0
  374. package/dist/utils/uuid/index.d.ts.map +1 -0
  375. package/dist/utils/uuid/index.js +41 -0
  376. package/dist/utils/uuid/index.js.map +1 -0
  377. package/dist/utils/uuid/max.cjs +6 -0
  378. package/dist/utils/uuid/max.cjs.map +1 -0
  379. package/dist/utils/uuid/max.js +6 -0
  380. package/dist/utils/uuid/max.js.map +1 -0
  381. package/dist/utils/uuid/nil.cjs +6 -0
  382. package/dist/utils/uuid/nil.cjs.map +1 -0
  383. package/dist/utils/uuid/nil.js +6 -0
  384. package/dist/utils/uuid/nil.js.map +1 -0
  385. package/dist/utils/uuid/parse.cjs +11 -0
  386. package/dist/utils/uuid/parse.cjs.map +1 -0
  387. package/dist/utils/uuid/parse.d.cts +7 -0
  388. package/dist/utils/uuid/parse.d.cts.map +1 -0
  389. package/dist/utils/uuid/parse.d.ts +7 -0
  390. package/dist/utils/uuid/parse.d.ts.map +1 -0
  391. package/dist/utils/uuid/parse.js +11 -0
  392. package/dist/utils/uuid/parse.js.map +1 -0
  393. package/dist/utils/uuid/regex.cjs +6 -0
  394. package/dist/utils/uuid/regex.cjs.map +1 -0
  395. package/dist/utils/uuid/regex.js +6 -0
  396. package/dist/utils/uuid/regex.js.map +1 -0
  397. package/dist/utils/uuid/rng.cjs +9 -0
  398. package/dist/utils/uuid/rng.cjs.map +1 -0
  399. package/dist/utils/uuid/rng.js +9 -0
  400. package/dist/utils/uuid/rng.js.map +1 -0
  401. package/dist/utils/uuid/sha1.cjs +71 -0
  402. package/dist/utils/uuid/sha1.cjs.map +1 -0
  403. package/dist/utils/uuid/sha1.js +71 -0
  404. package/dist/utils/uuid/sha1.js.map +1 -0
  405. package/dist/utils/uuid/stringify.cjs +21 -0
  406. package/dist/utils/uuid/stringify.cjs.map +1 -0
  407. package/dist/utils/uuid/stringify.d.cts +5 -0
  408. package/dist/utils/uuid/stringify.d.cts.map +1 -0
  409. package/dist/utils/uuid/stringify.d.ts +5 -0
  410. package/dist/utils/uuid/stringify.d.ts.map +1 -0
  411. package/dist/utils/uuid/stringify.js +20 -0
  412. package/dist/utils/uuid/stringify.js.map +1 -0
  413. package/dist/utils/uuid/types.d.cts +26 -0
  414. package/dist/utils/uuid/types.d.cts.map +1 -0
  415. package/dist/utils/uuid/types.d.ts +26 -0
  416. package/dist/utils/uuid/types.d.ts.map +1 -0
  417. package/dist/utils/uuid/v1.cjs +69 -0
  418. package/dist/utils/uuid/v1.cjs.map +1 -0
  419. package/dist/utils/uuid/v1.d.cts +8 -0
  420. package/dist/utils/uuid/v1.d.cts.map +1 -0
  421. package/dist/utils/uuid/v1.d.ts +8 -0
  422. package/dist/utils/uuid/v1.d.ts.map +1 -0
  423. package/dist/utils/uuid/v1.js +69 -0
  424. package/dist/utils/uuid/v1.js.map +1 -0
  425. package/dist/utils/uuid/v1ToV6.cjs +14 -0
  426. package/dist/utils/uuid/v1ToV6.cjs.map +1 -0
  427. package/dist/utils/uuid/v1ToV6.js +14 -0
  428. package/dist/utils/uuid/v1ToV6.js.map +1 -0
  429. package/dist/utils/uuid/v35.cjs +36 -0
  430. package/dist/utils/uuid/v35.cjs.map +1 -0
  431. package/dist/utils/uuid/v35.js +34 -0
  432. package/dist/utils/uuid/v35.js.map +1 -0
  433. package/dist/utils/uuid/v4.cjs +25 -0
  434. package/dist/utils/uuid/v4.cjs.map +1 -0
  435. package/dist/utils/uuid/v4.d.cts +8 -0
  436. package/dist/utils/uuid/v4.d.cts.map +1 -0
  437. package/dist/utils/uuid/v4.d.ts +8 -0
  438. package/dist/utils/uuid/v4.d.ts.map +1 -0
  439. package/dist/utils/uuid/v4.js +25 -0
  440. package/dist/utils/uuid/v4.js.map +1 -0
  441. package/dist/utils/uuid/v5.cjs +12 -0
  442. package/dist/utils/uuid/v5.cjs.map +1 -0
  443. package/dist/utils/uuid/v5.d.cts +14 -0
  444. package/dist/utils/uuid/v5.d.cts.map +1 -0
  445. package/dist/utils/uuid/v5.d.ts +14 -0
  446. package/dist/utils/uuid/v5.d.ts.map +1 -0
  447. package/dist/utils/uuid/v5.js +12 -0
  448. package/dist/utils/uuid/v5.js.map +1 -0
  449. package/dist/utils/uuid/v6.cjs +23 -0
  450. package/dist/utils/uuid/v6.cjs.map +1 -0
  451. package/dist/utils/uuid/v6.d.cts +8 -0
  452. package/dist/utils/uuid/v6.d.cts.map +1 -0
  453. package/dist/utils/uuid/v6.d.ts +8 -0
  454. package/dist/utils/uuid/v6.d.ts.map +1 -0
  455. package/dist/utils/uuid/v6.js +23 -0
  456. package/dist/utils/uuid/v6.js.map +1 -0
  457. package/dist/utils/uuid/v7.cjs +57 -0
  458. package/dist/utils/uuid/v7.cjs.map +1 -0
  459. package/dist/utils/uuid/v7.d.cts +8 -0
  460. package/dist/utils/uuid/v7.d.cts.map +1 -0
  461. package/dist/utils/uuid/v7.d.ts +8 -0
  462. package/dist/utils/uuid/v7.d.ts.map +1 -0
  463. package/dist/utils/uuid/v7.js +57 -0
  464. package/dist/utils/uuid/v7.js.map +1 -0
  465. package/dist/utils/uuid/validate.cjs +9 -0
  466. package/dist/utils/uuid/validate.cjs.map +1 -0
  467. package/dist/utils/uuid/validate.d.cts +5 -0
  468. package/dist/utils/uuid/validate.d.cts.map +1 -0
  469. package/dist/utils/uuid/validate.d.ts +5 -0
  470. package/dist/utils/uuid/validate.d.ts.map +1 -0
  471. package/dist/utils/uuid/validate.js +9 -0
  472. package/dist/utils/uuid/validate.js.map +1 -0
  473. package/dist/utils/uuid/version.cjs +10 -0
  474. package/dist/utils/uuid/version.cjs.map +1 -0
  475. package/dist/utils/uuid/version.d.cts +5 -0
  476. package/dist/utils/uuid/version.d.cts.map +1 -0
  477. package/dist/utils/uuid/version.d.ts +5 -0
  478. package/dist/utils/uuid/version.d.ts.map +1 -0
  479. package/dist/utils/uuid/version.js +10 -0
  480. package/dist/utils/uuid/version.js.map +1 -0
  481. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -1
  482. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js.map +1 -1
  483. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -1
  484. package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -1
  485. package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -1
  486. package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -1
  487. package/dist/utils/zod-to-json-schema/parsers/string.cjs +26 -0
  488. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  489. package/dist/utils/zod-to-json-schema/parsers/string.js +26 -0
  490. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  491. package/dist/vectorstores.cjs.map +1 -1
  492. package/dist/vectorstores.js.map +1 -1
  493. package/document_loaders/base.cjs +1 -0
  494. package/document_loaders/base.d.cts +1 -0
  495. package/document_loaders/base.d.ts +1 -0
  496. package/document_loaders/base.js +1 -0
  497. package/document_loaders/langsmith.cjs +1 -0
  498. package/document_loaders/langsmith.d.cts +1 -0
  499. package/document_loaders/langsmith.d.ts +1 -0
  500. package/document_loaders/langsmith.js +1 -0
  501. package/documents.cjs +1 -0
  502. package/documents.d.cts +1 -0
  503. package/documents.d.ts +1 -0
  504. package/documents.js +1 -0
  505. package/embeddings.cjs +1 -0
  506. package/embeddings.d.cts +1 -0
  507. package/embeddings.d.ts +1 -0
  508. package/embeddings.js +1 -0
  509. package/errors.cjs +1 -0
  510. package/errors.d.cts +1 -0
  511. package/errors.d.ts +1 -0
  512. package/errors.js +1 -0
  513. package/example_selectors.cjs +1 -0
  514. package/example_selectors.d.cts +1 -0
  515. package/example_selectors.d.ts +1 -0
  516. package/example_selectors.js +1 -0
  517. package/indexing.cjs +1 -0
  518. package/indexing.d.cts +1 -0
  519. package/indexing.d.ts +1 -0
  520. package/indexing.js +1 -0
  521. package/language_models/base.cjs +1 -0
  522. package/language_models/base.d.cts +1 -0
  523. package/language_models/base.d.ts +1 -0
  524. package/language_models/base.js +1 -0
  525. package/language_models/chat_models.cjs +1 -0
  526. package/language_models/chat_models.d.cts +1 -0
  527. package/language_models/chat_models.d.ts +1 -0
  528. package/language_models/chat_models.js +1 -0
  529. package/language_models/compat.cjs +1 -0
  530. package/language_models/compat.d.cts +1 -0
  531. package/language_models/compat.d.ts +1 -0
  532. package/language_models/compat.js +1 -0
  533. package/language_models/event.cjs +1 -0
  534. package/language_models/event.d.cts +1 -0
  535. package/language_models/event.d.ts +1 -0
  536. package/language_models/event.js +1 -0
  537. package/language_models/llms.cjs +1 -0
  538. package/language_models/llms.d.cts +1 -0
  539. package/language_models/llms.d.ts +1 -0
  540. package/language_models/llms.js +1 -0
  541. package/language_models/openai_completions_stream.cjs +1 -0
  542. package/language_models/openai_completions_stream.d.cts +1 -0
  543. package/language_models/openai_completions_stream.d.ts +1 -0
  544. package/language_models/openai_completions_stream.js +1 -0
  545. package/language_models/profile.cjs +1 -0
  546. package/language_models/profile.d.cts +1 -0
  547. package/language_models/profile.d.ts +1 -0
  548. package/language_models/profile.js +1 -0
  549. package/language_models/stream.cjs +1 -0
  550. package/language_models/stream.d.cts +1 -0
  551. package/language_models/stream.d.ts +1 -0
  552. package/language_models/stream.js +1 -0
  553. package/language_models/structured_output.cjs +1 -0
  554. package/language_models/structured_output.d.cts +1 -0
  555. package/language_models/structured_output.d.ts +1 -0
  556. package/language_models/structured_output.js +1 -0
  557. package/load/serializable.cjs +1 -0
  558. package/load/serializable.d.cts +1 -0
  559. package/load/serializable.d.ts +1 -0
  560. package/load/serializable.js +1 -0
  561. package/load.cjs +1 -0
  562. package/load.d.cts +1 -0
  563. package/load.d.ts +1 -0
  564. package/load.js +1 -0
  565. package/memory.cjs +1 -0
  566. package/memory.d.cts +1 -0
  567. package/memory.d.ts +1 -0
  568. package/memory.js +1 -0
  569. package/messages/tool.cjs +1 -0
  570. package/messages/tool.d.cts +1 -0
  571. package/messages/tool.d.ts +1 -0
  572. package/messages/tool.js +1 -0
  573. package/messages.cjs +1 -0
  574. package/messages.d.cts +1 -0
  575. package/messages.d.ts +1 -0
  576. package/messages.js +1 -0
  577. package/output_parsers/openai_functions.cjs +1 -0
  578. package/output_parsers/openai_functions.d.cts +1 -0
  579. package/output_parsers/openai_functions.d.ts +1 -0
  580. package/output_parsers/openai_functions.js +1 -0
  581. package/output_parsers/openai_tools.cjs +1 -0
  582. package/output_parsers/openai_tools.d.cts +1 -0
  583. package/output_parsers/openai_tools.d.ts +1 -0
  584. package/output_parsers/openai_tools.js +1 -0
  585. package/output_parsers.cjs +1 -0
  586. package/output_parsers.d.cts +1 -0
  587. package/output_parsers.d.ts +1 -0
  588. package/output_parsers.js +1 -0
  589. package/outputs.cjs +1 -0
  590. package/outputs.d.cts +1 -0
  591. package/outputs.d.ts +1 -0
  592. package/outputs.js +1 -0
  593. package/package.json +34 -14
  594. package/prompt_values.cjs +1 -0
  595. package/prompt_values.d.cts +1 -0
  596. package/prompt_values.d.ts +1 -0
  597. package/prompt_values.js +1 -0
  598. package/prompts.cjs +1 -0
  599. package/prompts.d.cts +1 -0
  600. package/prompts.d.ts +1 -0
  601. package/prompts.js +1 -0
  602. package/retrievers/document_compressors.cjs +1 -0
  603. package/retrievers/document_compressors.d.cts +1 -0
  604. package/retrievers/document_compressors.d.ts +1 -0
  605. package/retrievers/document_compressors.js +1 -0
  606. package/retrievers.cjs +1 -0
  607. package/retrievers.d.cts +1 -0
  608. package/retrievers.d.ts +1 -0
  609. package/retrievers.js +1 -0
  610. package/runnables/graph.cjs +1 -0
  611. package/runnables/graph.d.cts +1 -0
  612. package/runnables/graph.d.ts +1 -0
  613. package/runnables/graph.js +1 -0
  614. package/runnables.cjs +1 -0
  615. package/runnables.d.cts +1 -0
  616. package/runnables.d.ts +1 -0
  617. package/runnables.js +1 -0
  618. package/singletons.cjs +1 -0
  619. package/singletons.d.cts +1 -0
  620. package/singletons.d.ts +1 -0
  621. package/singletons.js +1 -0
  622. package/stores.cjs +1 -0
  623. package/stores.d.cts +1 -0
  624. package/stores.d.ts +1 -0
  625. package/stores.js +1 -0
  626. package/structured_query.cjs +1 -0
  627. package/structured_query.d.cts +1 -0
  628. package/structured_query.d.ts +1 -0
  629. package/structured_query.js +1 -0
  630. package/testing.cjs +1 -0
  631. package/testing.d.cts +1 -0
  632. package/testing.d.ts +1 -0
  633. package/testing.js +1 -0
  634. package/tools.cjs +1 -0
  635. package/tools.d.cts +1 -0
  636. package/tools.d.ts +1 -0
  637. package/tools.js +1 -0
  638. package/tracers/base.cjs +1 -0
  639. package/tracers/base.d.cts +1 -0
  640. package/tracers/base.d.ts +1 -0
  641. package/tracers/base.js +1 -0
  642. package/tracers/console.cjs +1 -0
  643. package/tracers/console.d.cts +1 -0
  644. package/tracers/console.d.ts +1 -0
  645. package/tracers/console.js +1 -0
  646. package/tracers/log_stream.cjs +1 -0
  647. package/tracers/log_stream.d.cts +1 -0
  648. package/tracers/log_stream.d.ts +1 -0
  649. package/tracers/log_stream.js +1 -0
  650. package/tracers/run_collector.cjs +1 -0
  651. package/tracers/run_collector.d.cts +1 -0
  652. package/tracers/run_collector.d.ts +1 -0
  653. package/tracers/run_collector.js +1 -0
  654. package/tracers/tracer_langchain.cjs +1 -0
  655. package/tracers/tracer_langchain.d.cts +1 -0
  656. package/tracers/tracer_langchain.d.ts +1 -0
  657. package/tracers/tracer_langchain.js +1 -0
  658. package/types/stream.cjs +1 -0
  659. package/types/stream.d.cts +1 -0
  660. package/types/stream.d.ts +1 -0
  661. package/types/stream.js +1 -0
  662. package/utils/async_caller.cjs +1 -0
  663. package/utils/async_caller.d.cts +1 -0
  664. package/utils/async_caller.d.ts +1 -0
  665. package/utils/async_caller.js +1 -0
  666. package/utils/chunk_array.cjs +1 -0
  667. package/utils/chunk_array.d.cts +1 -0
  668. package/utils/chunk_array.d.ts +1 -0
  669. package/utils/chunk_array.js +1 -0
  670. package/utils/context.cjs +1 -0
  671. package/utils/context.d.cts +1 -0
  672. package/utils/context.d.ts +1 -0
  673. package/utils/context.js +1 -0
  674. package/utils/env.cjs +1 -0
  675. package/utils/env.d.cts +1 -0
  676. package/utils/env.d.ts +1 -0
  677. package/utils/env.js +1 -0
  678. package/utils/event_source_parse.cjs +1 -0
  679. package/utils/event_source_parse.d.cts +1 -0
  680. package/utils/event_source_parse.d.ts +1 -0
  681. package/utils/event_source_parse.js +1 -0
  682. package/utils/format.cjs +1 -0
  683. package/utils/format.d.cts +1 -0
  684. package/utils/format.d.ts +1 -0
  685. package/utils/format.js +1 -0
  686. package/utils/function_calling.cjs +1 -0
  687. package/utils/function_calling.d.cts +1 -0
  688. package/utils/function_calling.d.ts +1 -0
  689. package/utils/function_calling.js +1 -0
  690. package/utils/hash.cjs +1 -0
  691. package/utils/hash.d.cts +1 -0
  692. package/utils/hash.d.ts +1 -0
  693. package/utils/hash.js +1 -0
  694. package/utils/json_patch.cjs +1 -0
  695. package/utils/json_patch.d.cts +1 -0
  696. package/utils/json_patch.d.ts +1 -0
  697. package/utils/json_patch.js +1 -0
  698. package/utils/json_schema.cjs +1 -0
  699. package/utils/json_schema.d.cts +1 -0
  700. package/utils/json_schema.d.ts +1 -0
  701. package/utils/json_schema.js +1 -0
  702. package/utils/math.cjs +1 -0
  703. package/utils/math.d.cts +1 -0
  704. package/utils/math.d.ts +1 -0
  705. package/utils/math.js +1 -0
  706. package/utils/ssrf.cjs +1 -0
  707. package/utils/ssrf.d.cts +1 -0
  708. package/utils/ssrf.d.ts +1 -0
  709. package/utils/ssrf.js +1 -0
  710. package/utils/standard_schema.cjs +1 -0
  711. package/utils/standard_schema.d.cts +1 -0
  712. package/utils/standard_schema.d.ts +1 -0
  713. package/utils/standard_schema.js +1 -0
  714. package/utils/stream.cjs +1 -0
  715. package/utils/stream.d.cts +1 -0
  716. package/utils/stream.d.ts +1 -0
  717. package/utils/stream.js +1 -0
  718. package/utils/testing.cjs +1 -0
  719. package/utils/testing.d.cts +1 -0
  720. package/utils/testing.d.ts +1 -0
  721. package/utils/testing.js +1 -0
  722. package/utils/tiktoken.cjs +1 -0
  723. package/utils/tiktoken.d.cts +1 -0
  724. package/utils/tiktoken.d.ts +1 -0
  725. package/utils/tiktoken.js +1 -0
  726. package/utils/types.cjs +1 -0
  727. package/utils/types.d.cts +1 -0
  728. package/utils/types.d.ts +1 -0
  729. package/utils/types.js +1 -0
  730. package/utils/uuid.cjs +1 -0
  731. package/utils/uuid.d.cts +1 -0
  732. package/utils/uuid.d.ts +1 -0
  733. package/utils/uuid.js +1 -0
  734. package/vectorstores.cjs +1 -0
  735. package/vectorstores.d.cts +1 -0
  736. package/vectorstores.d.ts +1 -0
  737. package/vectorstores.js +1 -0
@@ -5,10 +5,6 @@ const require_ai = require("../messages/ai.cjs");
5
5
  /**
6
6
  * Typed stream classes for chat model streaming.
7
7
  *
8
- * Provides {@link ChatModelStream} and typed sub-stream accessors that
9
- * implement both `AsyncIterable` (for incremental consumption) and
10
- * `PromiseLike` (for simple `await`).
11
- *
12
8
  * @module
13
9
  */
14
10
  var stream_exports = /* @__PURE__ */ require_runtime.__exportAll({
@@ -47,10 +43,6 @@ var ReplayBuffer = class {
47
43
  const toWake = this.waiters.splice(0);
48
44
  for (const waiter of toWake) waiter();
49
45
  }
50
- /**
51
- * Create an async iterator that replays cached events from the
52
- * beginning, then follows live events as they arrive.
53
- */
54
46
  async *iterate() {
55
47
  if (this.finished) {
56
48
  if (this.error) throw this.error;
@@ -77,27 +69,146 @@ var ReplayBuffer = class {
77
69
  }
78
70
  }
79
71
  };
80
- /** Extract a string field from a loosely-typed content block. */
81
- function getStringField(obj, field) {
82
- const val = obj[field];
83
- return typeof val === "string" ? val : "";
72
+ /**
73
+ * Apply a typed delta to an accumulated content block.
74
+ *
75
+ * - `text-delta` append text
76
+ * - `reasoning-delta` → append reasoning text
77
+ * - `data-delta` → append encoded data to `data`
78
+ * - `block-delta` → shallow merge fields
79
+ *
80
+ * @internal
81
+ */
82
+ function applyDelta(block, delta) {
83
+ switch (delta.type) {
84
+ case "text-delta":
85
+ if (block.type === "text") return {
86
+ ...block,
87
+ text: (block.text ?? "") + delta.text
88
+ };
89
+ return block;
90
+ case "reasoning-delta":
91
+ if (block.type === "thinking") return {
92
+ ...block,
93
+ thinking: (block.thinking ?? "") + delta.reasoning
94
+ };
95
+ if (block.type === "reasoning") return {
96
+ ...block,
97
+ reasoning: (block.reasoning ?? "") + delta.reasoning
98
+ };
99
+ return block;
100
+ case "data-delta": return {
101
+ ...block,
102
+ data: (block.data ?? "") + delta.data
103
+ };
104
+ case "block-delta": return {
105
+ ...block,
106
+ ...delta.fields
107
+ };
108
+ default: throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);
109
+ }
84
110
  }
85
- /** Check if a delta event carries a text content block. */
86
- function isTextDelta(event) {
87
- return event.type === "content-block-delta" && event.content.type === "text";
111
+ /**
112
+ * Returns the typed delta carried by a content-block delta event.
113
+ *
114
+ * Stream protocol compliant language models store incremental updates in
115
+ * `event.delta`, e.g. `{ type: "text-delta", text: "hello" }`. Some models and
116
+ * adapters still emit the older content-shaped form on `event.content`, e.g.
117
+ * `{ type: "text", text: "hello" }`, which predates explicit delta event
118
+ * variants.
119
+ *
120
+ * Keep accepting that content-shaped form here so {@link ChatModelStream}
121
+ * remains a tolerant consumer while producers migrate to protocol compliant
122
+ * typed deltas.
123
+ *
124
+ * @internal
125
+ */
126
+ function getEventDelta(event) {
127
+ if (event.event !== "content-block-delta") return void 0;
128
+ if ("delta" in event && event.delta) return event.delta;
129
+ const content = event.content;
130
+ if (content == null || typeof content !== "object") return void 0;
131
+ const block = content;
132
+ if (block.type === "text" && typeof block.text === "string") return {
133
+ type: "text-delta",
134
+ text: block.text
135
+ };
136
+ if (block.type === "reasoning" && typeof block.reasoning === "string") return {
137
+ type: "reasoning-delta",
138
+ reasoning: block.reasoning
139
+ };
140
+ if (block.type === "thinking" && typeof block.thinking === "string") return {
141
+ type: "reasoning-delta",
142
+ reasoning: block.thinking
143
+ };
144
+ if (typeof block.data === "string") return {
145
+ type: "data-delta",
146
+ data: block.data,
147
+ encoding: "base64"
148
+ };
149
+ if (typeof block.type === "string") return {
150
+ type: "block-delta",
151
+ fields: {
152
+ ...block,
153
+ type: block.type
154
+ }
155
+ };
88
156
  }
89
- /** Check if a delta event carries a reasoning content block. */
90
- function isReasoningDelta(event) {
91
- return event.type === "content-block-delta" && event.content.type === "reasoning";
157
+ function getReasoningDelta(content) {
158
+ if (content == null || typeof content !== "object") return void 0;
159
+ const block = content;
160
+ if (block.type === "reasoning" && typeof block.reasoning === "string") return block.reasoning;
161
+ if (block.type === "thinking" && typeof block.thinking === "string") return block.thinking;
92
162
  }
93
- /** Check if a finish event carries a tool_call content block. */
94
- function isToolCallFinish(event) {
95
- return event.type === "content-block-finish" && event.content.type === "tool_call";
163
+ function isReasoningContent(content) {
164
+ if (content == null || typeof content !== "object") return false;
165
+ const type = content.type;
166
+ return type === "reasoning" || type === "thinking";
167
+ }
168
+ /**
169
+ * Normalize protocol-compatible partial usage into Core's concrete usage shape.
170
+ *
171
+ * Some stream sources emit usage snapshots without every aggregate token field.
172
+ * Keep the stream event input permissive, then normalize at read time so
173
+ * high-level Core consumers always receive a complete {@link UsageMetadata}.
174
+ */
175
+ function normalizeUsage(usage) {
176
+ if (!usage) return void 0;
177
+ return {
178
+ ...usage,
179
+ input_tokens: usage.input_tokens ?? 0,
180
+ output_tokens: usage.output_tokens ?? 0,
181
+ total_tokens: usage.total_tokens ?? 0
182
+ };
183
+ }
184
+ function parseToolArgs(value) {
185
+ if (value != null && typeof value === "object" && !Array.isArray(value)) return value;
186
+ if (typeof value !== "string" || value.length === 0) return {};
187
+ try {
188
+ const parsed = JSON.parse(value);
189
+ return parsed != null && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
190
+ } catch {
191
+ return {};
192
+ }
193
+ }
194
+ function standardizeToolBlock(block) {
195
+ const record = block;
196
+ if (block.type === "tool_call") return block;
197
+ if (block.type !== "tool_call_chunk" && block.type !== "tool_use" && block.type !== "input_json_delta") return block;
198
+ const name = typeof record.name === "string" ? record.name : void 0;
199
+ if (name == null) return block;
200
+ const args = record.args ?? record.input;
201
+ return {
202
+ ...record,
203
+ type: "tool_call",
204
+ name,
205
+ args: parseToolArgs(args)
206
+ };
96
207
  }
97
208
  /**
98
209
  * Typed stream for text content.
99
210
  *
100
- * - **Iterate**: yields incremental text deltas (new tokens only).
211
+ * - **Iterate**: yields incremental text deltas.
101
212
  * - **Await**: resolves to the complete concatenated text.
102
213
  * - **`.full`**: yields the running accumulated text after each delta.
103
214
  */
@@ -108,30 +219,27 @@ var TextContentStream = class {
108
219
  constructor(buffer) {
109
220
  this._buffer = buffer;
110
221
  }
111
- /**
112
- * Yields the accumulated text so far after each delta.
113
- */
222
+ /** Yields the accumulated text so far after each delta. */
114
223
  get full() {
115
224
  const buffer = this._buffer;
116
225
  return { async *[Symbol.asyncIterator]() {
117
- for await (const event of buffer.iterate()) if (isTextDelta(event)) yield getStringField(event.content, "text");
226
+ let accumulated = "";
227
+ for await (const event of buffer.iterate()) {
228
+ const delta = getEventDelta(event);
229
+ if (delta?.type === "text-delta") {
230
+ accumulated += delta.text;
231
+ yield accumulated;
232
+ }
233
+ }
118
234
  } };
119
235
  }
120
- /**
121
- * Yields incremental text deltas (new tokens only).
122
- * Computed by diffing successive accumulated states.
123
- */
236
+ /** Yields incremental text deltas. */
124
237
  [Symbol.asyncIterator]() {
125
238
  const buffer = this._buffer;
126
239
  async function* gen() {
127
- const prevLen = /* @__PURE__ */ new Map();
128
- for await (const event of buffer.iterate()) if (isTextDelta(event)) {
129
- const full = getStringField(event.content, "text");
130
- const prev = prevLen.get(event.index) ?? 0;
131
- if (full.length > prev) {
132
- yield full.slice(prev);
133
- prevLen.set(event.index, full.length);
134
- }
240
+ for await (const event of buffer.iterate()) {
241
+ const delta = getEventDelta(event);
242
+ if (delta?.type === "text-delta") yield delta.text;
135
243
  }
136
244
  }
137
245
  return gen();
@@ -162,7 +270,7 @@ var ToolCallsStream = class {
162
270
  const buffer = this._buffer;
163
271
  return { async *[Symbol.asyncIterator]() {
164
272
  const calls = [];
165
- for await (const event of buffer.iterate()) if (isToolCallFinish(event)) {
273
+ for await (const event of buffer.iterate()) if (event.event === "content-block-finish" && event.content.type === "tool_call") {
166
274
  calls.push(event.content);
167
275
  yield [...calls];
168
276
  }
@@ -171,7 +279,7 @@ var ToolCallsStream = class {
171
279
  [Symbol.asyncIterator]() {
172
280
  const buffer = this._buffer;
173
281
  async function* gen() {
174
- for await (const event of buffer.iterate()) if (isToolCallFinish(event)) yield event.content;
282
+ for await (const event of buffer.iterate()) if (event.event === "content-block-finish" && event.content.type === "tool_call") yield event.content;
175
283
  }
176
284
  return gen();
177
285
  }
@@ -197,21 +305,50 @@ var ReasoningContentStream = class {
197
305
  get full() {
198
306
  const buffer = this._buffer;
199
307
  return { async *[Symbol.asyncIterator]() {
200
- for await (const event of buffer.iterate()) if (isReasoningDelta(event)) yield getStringField(event.content, "reasoning");
308
+ let accumulated = "";
309
+ let seenReasoning = false;
310
+ for await (const event of buffer.iterate()) if (event.event === "content-block-start") {
311
+ if (!isReasoningContent(event.content)) {
312
+ if (seenReasoning) return;
313
+ continue;
314
+ }
315
+ seenReasoning = true;
316
+ const delta = getReasoningDelta(event.content);
317
+ if (delta == null || delta.length === 0) continue;
318
+ accumulated += delta;
319
+ yield accumulated;
320
+ } else if (event.event === "content-block-delta") {
321
+ const eventDelta = getEventDelta(event);
322
+ if (eventDelta?.type !== "reasoning-delta") continue;
323
+ seenReasoning = true;
324
+ const delta = eventDelta.reasoning;
325
+ if (delta == null || delta.length === 0) continue;
326
+ accumulated += delta;
327
+ yield accumulated;
328
+ } else if (event.event === "content-block-finish" && isReasoningContent(event.content)) return;
329
+ else if (event.event === "message-finish") return;
201
330
  } };
202
331
  }
203
332
  [Symbol.asyncIterator]() {
204
333
  const buffer = this._buffer;
205
334
  async function* gen() {
206
- const prevLen = /* @__PURE__ */ new Map();
207
- for await (const event of buffer.iterate()) if (isReasoningDelta(event)) {
208
- const full = getStringField(event.content, "reasoning");
209
- const prev = prevLen.get(event.index) ?? 0;
210
- if (full.length > prev) {
211
- yield full.slice(prev);
212
- prevLen.set(event.index, full.length);
335
+ let seenReasoning = false;
336
+ for await (const event of buffer.iterate()) if (event.event === "content-block-start") {
337
+ if (!isReasoningContent(event.content)) {
338
+ if (seenReasoning) return;
339
+ continue;
213
340
  }
214
- }
341
+ seenReasoning = true;
342
+ const delta = getReasoningDelta(event.content);
343
+ if (delta != null && delta.length > 0) yield delta;
344
+ } else if (event.event === "content-block-delta") {
345
+ const eventDelta = getEventDelta(event);
346
+ if (eventDelta?.type !== "reasoning-delta") continue;
347
+ seenReasoning = true;
348
+ const delta = eventDelta.reasoning;
349
+ if (delta != null && delta.length > 0) yield delta;
350
+ } else if (event.event === "content-block-finish" && isReasoningContent(event.content)) return;
351
+ else if (event.event === "message-finish") return;
215
352
  }
216
353
  return gen();
217
354
  }
@@ -225,9 +362,6 @@ var ReasoningContentStream = class {
225
362
  };
226
363
  /**
227
364
  * Typed stream for usage metadata.
228
- *
229
- * - **Iterate**: yields usage snapshots as they arrive.
230
- * - **Await**: resolves to the final usage snapshot.
231
365
  */
232
366
  var UsageMetadataStream = class {
233
367
  /** @internal */
@@ -239,9 +373,16 @@ var UsageMetadataStream = class {
239
373
  [Symbol.asyncIterator]() {
240
374
  const buffer = this._buffer;
241
375
  async function* gen() {
242
- for await (const event of buffer.iterate()) if (event.type === "usage") yield event.usage;
243
- else if (event.type === "message-start" && event.usage) yield event.usage;
244
- else if (event.type === "message-finish" && event.usage) yield event.usage;
376
+ for await (const event of buffer.iterate()) if (event.event === "usage") {
377
+ const usage = normalizeUsage(event.usage);
378
+ if (usage) yield usage;
379
+ } else if (event.event === "message-start" && event.usage) {
380
+ const usage = normalizeUsage(event.usage);
381
+ if (usage) yield usage;
382
+ } else if (event.event === "message-finish" && event.usage) {
383
+ const usage = normalizeUsage(event.usage);
384
+ if (usage) yield usage;
385
+ }
245
386
  }
246
387
  return gen();
247
388
  }
@@ -249,11 +390,7 @@ var UsageMetadataStream = class {
249
390
  return (async () => {
250
391
  let latest;
251
392
  for await (const usage of this) latest = usage;
252
- return latest ?? {
253
- input_tokens: 0,
254
- output_tokens: 0,
255
- total_tokens: 0
256
- };
393
+ return latest;
257
394
  })().then(onfulfilled, onrejected);
258
395
  }
259
396
  };
@@ -262,10 +399,6 @@ var UsageMetadataStream = class {
262
399
  *
263
400
  * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access
264
401
  * and `PromiseLike<AIMessage>` for simple `await` usage.
265
- *
266
- * All sub-streams are replay-safe: multiple consumers reading from the
267
- * same stream work correctly because each gets its own cursor over the
268
- * shared buffer.
269
402
  */
270
403
  var ChatModelStream = class {
271
404
  /** @internal */
@@ -284,76 +417,73 @@ var ChatModelStream = class {
284
417
  this._buffer.setError(err instanceof Error ? err : new Error(String(err)));
285
418
  }
286
419
  }
287
- /** Iterate over raw {@link ChatModelStreamEvent}s. */
288
420
  [Symbol.asyncIterator]() {
289
421
  return this._buffer.iterate();
290
422
  }
291
- /** Text content deltas / full text. */
292
423
  get text() {
293
424
  return new TextContentStream(this._buffer);
294
425
  }
295
- /** Completed tool calls. */
296
426
  get toolCalls() {
297
427
  return new ToolCallsStream(this._buffer);
298
428
  }
299
- /** Reasoning content (chain-of-thought). */
300
429
  get reasoning() {
301
430
  return new ReasoningContentStream(this._buffer);
302
431
  }
303
- /** Usage metadata snapshots. */
304
432
  get usage() {
305
433
  return new UsageMetadataStream(this._buffer);
306
434
  }
307
- /** The fully assembled `AIMessage`, available once the stream finishes. */
308
435
  get output() {
309
- return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };
436
+ return this._assembleMessage();
310
437
  }
311
- /** Allows `await stream` to resolve to the fully assembled `AIMessage`. */
312
438
  then(onfulfilled, onrejected) {
313
439
  return this._assembleMessage().then(onfulfilled, onrejected);
314
440
  }
315
- /**
316
- * Assemble all stream events into a finalized `AIMessage`.
317
- * @internal
318
- */
441
+ /** @internal */
319
442
  async _assembleMessage() {
320
443
  const contentBlocks = [];
321
444
  let id;
322
445
  let usage;
323
- let responseMetadata = {};
446
+ let metadata = {};
324
447
  let finishReason;
325
- for await (const event of this._buffer.iterate()) switch (event.type) {
448
+ for await (const event of this._buffer.iterate()) switch (event.event) {
326
449
  case "message-start":
327
450
  id = event.id ?? id;
328
- if (event.usage) usage = event.usage;
451
+ if (event.usage) usage = normalizeUsage(event.usage);
329
452
  break;
330
453
  case "content-block-start":
331
- case "content-block-delta":
332
454
  contentBlocks[event.index] = event.content;
333
455
  break;
456
+ case "content-block-delta": {
457
+ const current = contentBlocks[event.index];
458
+ const delta = getEventDelta(event);
459
+ if (current) {
460
+ if (delta) contentBlocks[event.index] = applyDelta(current, delta);
461
+ }
462
+ break;
463
+ }
334
464
  case "content-block-finish":
335
465
  contentBlocks[event.index] = event.content;
336
466
  break;
337
467
  case "usage":
338
- usage = event.usage;
468
+ usage = normalizeUsage(event.usage);
339
469
  break;
340
470
  case "message-finish":
341
471
  finishReason = event.reason;
342
- if (event.usage) usage = event.usage;
343
- if (event.responseMetadata) responseMetadata = {
344
- ...responseMetadata,
472
+ if (event.usage) usage = normalizeUsage(event.usage);
473
+ if (event.responseMetadata) metadata = {
474
+ ...metadata,
345
475
  ...event.responseMetadata
346
476
  };
347
477
  break;
348
478
  default: break;
349
479
  }
350
- const filteredBlocks = contentBlocks.filter((b) => b != null);
480
+ const filteredBlocks = contentBlocks.filter((b) => b != null).map(standardizeToolBlock);
351
481
  return new require_ai.AIMessage({
352
482
  id,
353
483
  content: filteredBlocks,
354
484
  usage_metadata: usage,
355
485
  response_metadata: {
356
- ...responseMetadata,
486
+ ...metadata,
357
487
  ...finishReason ? { finish_reason: finishReason } : {},
358
488
  output_version: "v1"
359
489
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stream.cjs","names":["AIMessage"],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * Provides {@link ChatModelStream} and typed sub-stream accessors that\n * implement both `AsyncIterable` (for incremental consumption) and\n * `PromiseLike` (for simple `await`).\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type {\n ChatModelStreamEvent,\n ContentBlockDeltaEvent,\n ContentBlockFinishEvent,\n} from \"./event.js\";\n\n// ─── Replay Buffer ──────────────────────────────────────────────\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n // Wake ALL waiting consumers — each reads from their own cursor\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n /**\n * Create an async iterator that replays cached events from the\n * beginning, then follows live events as they arrive.\n */\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n // Fast path: stream already done, replay everything\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n // Live path: follow events as they arrive\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n // Wait for new data\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n// ─── Helpers ────────────────────────────────────────────────────\n\n/** Extract a string field from a loosely-typed content block. */\nfunction getStringField(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n obj: Record<string, any>,\n field: string\n): string {\n const val = obj[field];\n return typeof val === \"string\" ? val : \"\";\n}\n\n/** Check if a delta event carries a text content block. */\nfunction isTextDelta(\n event: ChatModelStreamEvent\n): event is ContentBlockDeltaEvent & {\n content: { type: \"text\"; text?: string };\n} {\n return event.type === \"content-block-delta\" && event.content.type === \"text\";\n}\n\n/** Check if a delta event carries a reasoning content block. */\nfunction isReasoningDelta(\n event: ChatModelStreamEvent\n): event is ContentBlockDeltaEvent & {\n content: { type: \"reasoning\"; reasoning?: string };\n} {\n return (\n event.type === \"content-block-delta\" && event.content.type === \"reasoning\"\n );\n}\n\n/** Check if a finish event carries a tool_call content block. */\nfunction isToolCallFinish(\n event: ChatModelStreamEvent\n): event is ContentBlockFinishEvent & {\n content: ContentBlock.Tools.ToolCall;\n} {\n return (\n event.type === \"content-block-finish\" && event.content.type === \"tool_call\"\n );\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas (new tokens only).\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /**\n * Yields the accumulated text so far after each delta.\n */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const event of buffer.iterate()) {\n if (isTextDelta(event)) {\n yield getStringField(\n event.content as Record<string, unknown>,\n \"text\"\n );\n }\n }\n },\n };\n }\n\n /**\n * Yields incremental text deltas (new tokens only).\n * Computed by diffing successive accumulated states.\n */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n const prevLen = new Map<number, number>();\n for await (const event of buffer.iterate()) {\n if (isTextDelta(event)) {\n const full = getStringField(\n event.content as Record<string, unknown>,\n \"text\"\n );\n const prev = prevLen.get(event.index) ?? 0;\n if (full.length > prev) {\n yield full.slice(prev);\n prevLen.set(event.index, full.length);\n }\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (isToolCallFinish(event)) {\n calls.push(event.content);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (isToolCallFinish(event)) {\n yield event.content;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const event of buffer.iterate()) {\n if (isReasoningDelta(event)) {\n yield getStringField(\n event.content as Record<string, unknown>,\n \"reasoning\"\n );\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n const prevLen = new Map<number, number>();\n for await (const event of buffer.iterate()) {\n if (isReasoningDelta(event)) {\n const full = getStringField(\n event.content as Record<string, unknown>,\n \"reasoning\"\n );\n const prev = prevLen.get(event.index) ?? 0;\n if (full.length > prev) {\n yield full.slice(prev);\n prevLen.set(event.index, full.length);\n }\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n *\n * - **Iterate**: yields usage snapshots as they arrive.\n * - **Await**: resolves to the final usage snapshot.\n */\nexport class UsageMetadataStream\n implements AsyncIterable<UsageMetadata>, PromiseLike<UsageMetadata>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.type === \"usage\") {\n yield event.usage;\n } else if (event.type === \"message-start\" && event.usage) {\n yield event.usage;\n } else if (event.type === \"message-finish\" && event.usage) {\n yield event.usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest ?? { input_tokens: 0, output_tokens: 0, total_tokens: 0 };\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n *\n * All sub-streams are replay-safe: multiple consumers reading from the\n * same stream work correctly because each gets its own cursor over the\n * shared buffer.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n /** Iterate over raw {@link ChatModelStreamEvent}s. */\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n /** Text content deltas / full text. */\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n /** Completed tool calls. */\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n /** Reasoning content (chain-of-thought). */\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n /** Usage metadata snapshots. */\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n /** The fully assembled `AIMessage`, available once the stream finishes. */\n get output(): PromiseLike<AIMessage> {\n return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };\n }\n\n /** Allows `await stream` to resolve to the fully assembled `AIMessage`. */\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /**\n * Assemble all stream events into a finalized `AIMessage`.\n * @internal\n */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let responseMetadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.type) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = event.usage;\n break;\n\n case \"content-block-start\":\n case \"content-block-delta\":\n // Overwrite with the latest accumulated snapshot\n contentBlocks[event.index] = event.content as ContentBlock;\n break;\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = event.usage;\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = event.usage;\n if (event.responseMetadata) {\n responseMetadata = {\n ...responseMetadata,\n ...event.responseMetadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks.filter(\n (b): b is ContentBlock => b != null\n );\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...responseMetadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,IAAM,eAAN,MAAmB;CACjB,SAAyC,EAAE;CAC3C,WAAmB;CACnB,UAAqC,EAAE;CACvC,QAA8B;CAE9B,KAAK,OAAmC;AACtC,OAAK,OAAO,KAAK,MAAM;EAEvB,MAAM,SAAS,KAAK,QAAQ,OAAO,EAAE;AACrC,OAAK,MAAM,UAAU,OACnB,SAAQ;;CAIZ,SAAe;AACb,OAAK,WAAW;EAChB,MAAM,SAAS,KAAK,QAAQ,OAAO,EAAE;AACrC,OAAK,MAAM,UAAU,OACnB,SAAQ;;CAIZ,SAAS,KAAkB;AACzB,OAAK,QAAQ;AACb,OAAK,WAAW;EAChB,MAAM,SAAS,KAAK,QAAQ,OAAO,EAAE;AACrC,OAAK,MAAM,UAAU,OACnB,SAAQ;;;;;;CAQZ,OAAO,UAAgD;AAErD,MAAI,KAAK,UAAU;AACjB,OAAI,KAAK,MAAO,OAAM,KAAK;AAC3B,UAAO,KAAK;AACZ;;EAIF,IAAI,SAAS;AACb,SAAO,MAAM;AACX,UAAO,SAAS,KAAK,OAAO,QAAQ;AAClC,UAAM,KAAK,OAAO;AAClB;;AAEF,OAAI,KAAK,UAAU;AACjB,QAAI,KAAK,MAAO,OAAM,KAAK;AAC3B;;AAGF,SAAM,IAAI,SAAe,YAAY;AACnC,QAAI,SAAS,KAAK,OAAO,UAAU,KAAK,UAAU;AAChD,cAAS;AACT;;AAEF,SAAK,QAAQ,KAAK,QAAQ;KAC1B;;;;;AAQR,SAAS,eAEP,KACA,OACQ;CACR,MAAM,MAAM,IAAI;AAChB,QAAO,OAAO,QAAQ,WAAW,MAAM;;;AAIzC,SAAS,YACP,OAGA;AACA,QAAO,MAAM,SAAS,yBAAyB,MAAM,QAAQ,SAAS;;;AAIxE,SAAS,iBACP,OAGA;AACA,QACE,MAAM,SAAS,yBAAyB,MAAM,QAAQ,SAAS;;;AAKnE,SAAS,iBACP,OAGA;AACA,QACE,MAAM,SAAS,0BAA0B,MAAM,QAAQ,SAAS;;;;;;;;;AAapE,IAAa,oBAAb,MAEA;;CAEE;;CAGA,YAAY,QAAsB;AAChC,OAAK,UAAU;;;;;CAMjB,IAAI,OAA8B;EAChC,MAAM,SAAS,KAAK;AACpB,SAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,YAAY,MAAM,CACpB,OAAM,eACJ,MAAM,SACN,OACD;KAIR;;;;;;CAOH,CAAC,OAAO,iBAAwC;EAC9C,MAAM,SAAS,KAAK;EACpB,gBAAgB,MAAM;GACpB,MAAM,0BAAU,IAAI,KAAqB;AACzC,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,YAAY,MAAM,EAAE;IACtB,MAAM,OAAO,eACX,MAAM,SACN,OACD;IACD,MAAM,OAAO,QAAQ,IAAI,MAAM,MAAM,IAAI;AACzC,QAAI,KAAK,SAAS,MAAM;AACtB,WAAM,KAAK,MAAM,KAAK;AACtB,aAAQ,IAAI,MAAM,OAAO,KAAK,OAAO;;;;AAK7C,SAAO,KAAK;;CAGd,KACE,aACA,YACkC;AAQlC,UAPiB,YAAY;GAC3B,IAAI,OAAO;AACX,cAAW,MAAM,SAAS,KACxB,SAAQ;AAEV,UAAO;MACL,CACW,KAAK,aAAa,WAAW;;;;;;;;;;AAahD,IAAa,kBAAb,MAIA;;CAEE;;CAGA,YAAY,QAAsB;AAChC,OAAK,UAAU;;CAGjB,IAAI,OAA0D;EAC5D,MAAM,SAAS,KAAK;AACpB,SAAO,EACL,QAAQ,OAAO,iBAAiB;GAC9B,MAAM,QAA4C,EAAE;AACpD,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,iBAAiB,MAAM,EAAE;AAC3B,UAAM,KAAK,MAAM,QAAQ;AACzB,UAAM,CAAC,GAAG,MAAM;;KAIvB;;CAGH,CAAC,OAAO,iBAA6D;EACnE,MAAM,SAAS,KAAK;EACpB,gBAAgB,MAAM;AACpB,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,iBAAiB,MAAM,CACzB,OAAM,MAAM;;AAIlB,SAAO,KAAK;;CAGd,KACE,aAKA,YACkC;AAQlC,UAPiB,YAAY;GAC3B,MAAM,QAA4C,EAAE;AACpD,cAAW,MAAM,QAAQ,KACvB,OAAM,KAAK,KAAK;AAElB,UAAO;MACL,CACW,KAAK,aAAa,WAAW;;;;;;;AAUhD,IAAa,yBAAb,MAEA;;CAEE;;CAGA,YAAY,QAAsB;AAChC,OAAK,UAAU;;CAGjB,IAAI,OAA8B;EAChC,MAAM,SAAS,KAAK;AACpB,SAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,iBAAiB,MAAM,CACzB,OAAM,eACJ,MAAM,SACN,YACD;KAIR;;CAGH,CAAC,OAAO,iBAAwC;EAC9C,MAAM,SAAS,KAAK;EACpB,gBAAgB,MAAM;GACpB,MAAM,0BAAU,IAAI,KAAqB;AACzC,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,iBAAiB,MAAM,EAAE;IAC3B,MAAM,OAAO,eACX,MAAM,SACN,YACD;IACD,MAAM,OAAO,QAAQ,IAAI,MAAM,MAAM,IAAI;AACzC,QAAI,KAAK,SAAS,MAAM;AACtB,WAAM,KAAK,MAAM,KAAK;AACtB,aAAQ,IAAI,MAAM,OAAO,KAAK,OAAO;;;;AAK7C,SAAO,KAAK;;CAGd,KACE,aACA,YACkC;AAQlC,UAPiB,YAAY;GAC3B,IAAI,OAAO;AACX,cAAW,MAAM,SAAS,KACxB,SAAQ;AAEV,UAAO;MACL,CACW,KAAK,aAAa,WAAW;;;;;;;;;AAYhD,IAAa,sBAAb,MAEA;;CAEE;;CAGA,YAAY,QAAsB;AAChC,OAAK,UAAU;;CAGjB,CAAC,OAAO,iBAA+C;EACrD,MAAM,SAAS,KAAK;EACpB,gBAAgB,MAAM;AACpB,cAAW,MAAM,SAAS,OAAO,SAAS,CACxC,KAAI,MAAM,SAAS,QACjB,OAAM,MAAM;YACH,MAAM,SAAS,mBAAmB,MAAM,MACjD,OAAM,MAAM;YACH,MAAM,SAAS,oBAAoB,MAAM,MAClD,OAAM,MAAM;;AAIlB,SAAO,KAAK;;CAGd,KACE,aAGA,YACkC;AAQlC,UAPiB,YAAY;GAC3B,IAAI;AACJ,cAAW,MAAM,SAAS,KACxB,UAAS;AAEX,UAAO,UAAU;IAAE,cAAc;IAAG,eAAe;IAAG,cAAc;IAAG;MACrE,CACW,KAAK,aAAa,WAAW;;;;;;;;;;;;;AAgBhD,IAAa,kBAAb,MAEA;;CAEE;;CAGA,YAAY,QAA6C;AACvD,OAAK,UAAU,IAAI,cAAc;AACjC,OAAK,SAAS,OAAO;;;CAIvB,MAAc,SACZ,QACe;AACf,MAAI;AACF,cAAW,MAAM,SAAS,OACxB,MAAK,QAAQ,KAAK,MAAM;AAE1B,QAAK,QAAQ,QAAQ;WACd,KAAK;AACZ,QAAK,QAAQ,SACX,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CACpD;;;;CAKL,CAAC,OAAO,iBAAsD;AAC5D,SAAO,KAAK,QAAQ,SAAS;;;CAI/B,IAAI,OAA0B;AAC5B,SAAO,IAAI,kBAAkB,KAAK,QAAQ;;;CAI5C,IAAI,YAA6B;AAC/B,SAAO,IAAI,gBAAgB,KAAK,QAAQ;;;CAI1C,IAAI,YAAoC;AACtC,SAAO,IAAI,uBAAuB,KAAK,QAAQ;;;CAIjD,IAAI,QAA6B;AAC/B,SAAO,IAAI,oBAAoB,KAAK,QAAQ;;;CAI9C,IAAI,SAAiC;AACnC,SAAO,EAAE,OAAO,KAAK,QAAQ,KAAK,kBAAkB,CAAC,KAAK,KAAK,IAAI,EAAE;;;CAIvE,KACE,aAGA,YACkC;AAClC,SAAO,KAAK,kBAAkB,CAAC,KAAK,aAAa,WAAW;;;;;;CAO9D,MAAc,mBAAuC;EACnD,MAAM,gBAAiD,EAAE;EACzD,IAAI;EACJ,IAAI;EACJ,IAAI,mBAA4C,EAAE;EAClD,IAAI;AAEJ,aAAW,MAAM,SAAS,KAAK,QAAQ,SAAS,CAC9C,SAAQ,MAAM,MAAd;GACE,KAAK;AACH,SAAK,MAAM,MAAM;AACjB,QAAI,MAAM,MAAO,SAAQ,MAAM;AAC/B;GAEF,KAAK;GACL,KAAK;AAEH,kBAAc,MAAM,SAAS,MAAM;AACnC;GAEF,KAAK;AACH,kBAAc,MAAM,SAAS,MAAM;AACnC;GAEF,KAAK;AACH,YAAQ,MAAM;AACd;GAEF,KAAK;AACH,mBAAe,MAAM;AACrB,QAAI,MAAM,MAAO,SAAQ,MAAM;AAC/B,QAAI,MAAM,iBACR,oBAAmB;KACjB,GAAG;KACH,GAAG,MAAM;KACV;AAEH;GAEF,QACE;;EAIN,MAAM,iBAAiB,cAAc,QAClC,MAAyB,KAAK,KAChC;AAED,SAAO,IAAIA,WAAAA,UAAU;GACnB;GACA,SAAS;GACT,gBAAgB;GAChB,mBAAmB;IACjB,GAAG;IACH,GAAI,eAAe,EAAE,eAAe,cAAc,GAAG,EAAE;IACvD,gBAAgB;IACjB;GACF,CAAC"}
1
+ {"version":3,"file":"stream.cjs","names":["AIMessage"],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent, ContentBlockDelta } from \"./event.js\";\n\ntype UsageMetadataLike = Partial<UsageMetadata>;\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n private events: ChatModelStreamEvent[] = [];\n private finished = false;\n private waiters: Array<() => void> = [];\n private error: Error | null = null;\n\n push(event: ChatModelStreamEvent): void {\n this.events.push(event);\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n finish(): void {\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n setError(err: Error): void {\n this.error = err;\n this.finished = true;\n const toWake = this.waiters.splice(0);\n for (const waiter of toWake) {\n waiter();\n }\n }\n\n async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n if (this.finished) {\n if (this.error) throw this.error;\n yield* this.events;\n return;\n }\n\n let cursor = 0;\n while (true) {\n while (cursor < this.events.length) {\n yield this.events[cursor]!;\n cursor++;\n }\n if (this.finished) {\n if (this.error) throw this.error;\n return;\n }\n await new Promise<void>((resolve) => {\n if (cursor < this.events.length || this.finished) {\n resolve();\n return;\n }\n this.waiters.push(resolve);\n });\n }\n }\n}\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text-delta` → append text\n * - `reasoning-delta` → append reasoning text\n * - `data-delta` → append encoded data to `data`\n * - `block-delta` → shallow merge fields\n *\n * @internal\n */\nfunction applyDelta(\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\n/**\n * Returns the typed delta carried by a content-block delta event.\n *\n * Stream protocol compliant language models store incremental updates in\n * `event.delta`, e.g. `{ type: \"text-delta\", text: \"hello\" }`. Some models and\n * adapters still emit the older content-shaped form on `event.content`, e.g.\n * `{ type: \"text\", text: \"hello\" }`, which predates explicit delta event\n * variants.\n *\n * Keep accepting that content-shaped form here so {@link ChatModelStream}\n * remains a tolerant consumer while producers migrate to protocol compliant\n * typed deltas.\n *\n * @internal\n */\nfunction getEventDelta(\n event: ChatModelStreamEvent\n): ContentBlockDelta | undefined {\n if (event.event !== \"content-block-delta\") return undefined;\n if (\"delta\" in event && event.delta) return event.delta;\n\n const content = (event as { content?: unknown }).content;\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as { type?: string } & Record<string, unknown>;\n if (block.type === \"text\" && typeof block.text === \"string\") {\n return { type: \"text-delta\", text: block.text };\n }\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return { type: \"reasoning-delta\", reasoning: block.reasoning };\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return { type: \"reasoning-delta\", reasoning: block.thinking };\n }\n if (typeof block.data === \"string\") {\n return { type: \"data-delta\", data: block.data, encoding: \"base64\" };\n }\n if (typeof block.type === \"string\") {\n return { type: \"block-delta\", fields: { ...block, type: block.type } };\n }\n return undefined;\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n if (content == null || typeof content !== \"object\") return undefined;\n const block = content as {\n type?: string;\n reasoning?: unknown;\n thinking?: unknown;\n };\n if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n return block.reasoning;\n }\n if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n return block.thinking;\n }\n return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n if (content == null || typeof content !== \"object\") return false;\n const type = (content as { type?: unknown }).type;\n return type === \"reasoning\" || type === \"thinking\";\n}\n\n/**\n * Normalize protocol-compatible partial usage into Core's concrete usage shape.\n *\n * Some stream sources emit usage snapshots without every aggregate token field.\n * Keep the stream event input permissive, then normalize at read time so\n * high-level Core consumers always receive a complete {@link UsageMetadata}.\n */\nfunction normalizeUsage(\n usage: UsageMetadataLike | undefined\n): UsageMetadata | undefined {\n if (!usage) return undefined;\n return {\n ...usage,\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: usage.total_tokens ?? 0,\n };\n}\n\nfunction parseToolArgs(value: unknown): Record<string, unknown> {\n if (value != null && typeof value === \"object\" && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n if (typeof value !== \"string\" || value.length === 0) return {};\n try {\n const parsed = JSON.parse(value);\n return parsed != null &&\n typeof parsed === \"object\" &&\n !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction standardizeToolBlock(block: ContentBlock): ContentBlock {\n const record = block as Record<string, unknown>;\n if (block.type === \"tool_call\") return block;\n if (\n block.type !== \"tool_call_chunk\" &&\n block.type !== \"tool_use\" &&\n block.type !== \"input_json_delta\"\n ) {\n return block;\n }\n\n const name = typeof record.name === \"string\" ? record.name : undefined;\n if (name == null) return block;\n\n const args = record.args ?? record.input;\n return {\n ...record,\n type: \"tool_call\",\n name,\n args: parseToolArgs(args),\n } as ContentBlock;\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n /** Yields the accumulated text so far after each delta. */\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n for await (const event of buffer.iterate()) {\n const delta = getEventDelta(event);\n if (delta?.type === \"text-delta\") {\n accumulated += delta.text;\n yield accumulated;\n }\n }\n },\n };\n }\n\n /** Yields incremental text deltas. */\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n const delta = getEventDelta(event);\n if (delta?.type === \"text-delta\") {\n yield delta.text;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n implements\n AsyncIterable<ContentBlock.Tools.ToolCall>,\n PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n calls.push(event.content as ContentBlock.Tools.ToolCall);\n yield [...calls];\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (\n event.event === \"content-block-finish\" &&\n event.content.type === \"tool_call\"\n ) {\n yield event.content as ContentBlock.Tools.ToolCall;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n onfulfilled?:\n | ((\n value: Array<ContentBlock.Tools.ToolCall>\n ) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n const calls: Array<ContentBlock.Tools.ToolCall> = [];\n for await (const call of this) {\n calls.push(call);\n }\n return calls;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n implements AsyncIterable<string>, PromiseLike<string>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n get full(): AsyncIterable<string> {\n const buffer = this._buffer;\n return {\n async *[Symbol.asyncIterator]() {\n let accumulated = \"\";\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (event.event === \"content-block-delta\") {\n const eventDelta = getEventDelta(event);\n if (eventDelta?.type !== \"reasoning-delta\") continue;\n seenReasoning = true;\n const delta = eventDelta.reasoning;\n if (delta == null || delta.length === 0) continue;\n accumulated += delta;\n yield accumulated;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n },\n };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<string> {\n const buffer = this._buffer;\n async function* gen() {\n let seenReasoning = false;\n for await (const event of buffer.iterate()) {\n if (event.event === \"content-block-start\") {\n if (!isReasoningContent(event.content)) {\n if (seenReasoning) return;\n continue;\n }\n seenReasoning = true;\n const delta = getReasoningDelta(event.content);\n if (delta != null && delta.length > 0) yield delta;\n } else if (event.event === \"content-block-delta\") {\n const eventDelta = getEventDelta(event);\n if (eventDelta?.type !== \"reasoning-delta\") continue;\n seenReasoning = true;\n const delta = eventDelta.reasoning;\n if (delta != null && delta.length > 0) yield delta;\n } else if (\n event.event === \"content-block-finish\" &&\n isReasoningContent(event.content)\n ) {\n return;\n } else if (event.event === \"message-finish\") {\n return;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = string, TResult2 = never>(\n onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let text = \"\";\n for await (const delta of this) {\n text += delta;\n }\n return text;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n implements\n AsyncIterable<UsageMetadata>,\n PromiseLike<UsageMetadata | undefined>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(buffer: ReplayBuffer) {\n this._buffer = buffer;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n const buffer = this._buffer;\n async function* gen() {\n for await (const event of buffer.iterate()) {\n if (event.event === \"usage\") {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-start\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n } else if (event.event === \"message-finish\" && event.usage) {\n const usage = normalizeUsage(event.usage);\n if (usage) yield usage;\n }\n }\n }\n return gen();\n }\n\n then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n onfulfilled?:\n | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n const promise = (async () => {\n let latest: UsageMetadata | undefined;\n for await (const usage of this) {\n latest = usage;\n }\n return latest;\n })();\n return promise.then(onfulfilled, onrejected);\n }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n /** @internal */\n private _buffer: ReplayBuffer;\n\n /** @internal */\n constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n this._buffer = new ReplayBuffer();\n this._consume(source);\n }\n\n /** @internal */\n private async _consume(\n source: AsyncIterable<ChatModelStreamEvent>\n ): Promise<void> {\n try {\n for await (const event of source) {\n this._buffer.push(event);\n }\n this._buffer.finish();\n } catch (err) {\n this._buffer.setError(\n err instanceof Error ? err : new Error(String(err))\n );\n }\n }\n\n [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n return this._buffer.iterate();\n }\n\n get text(): TextContentStream {\n return new TextContentStream(this._buffer);\n }\n\n get toolCalls(): ToolCallsStream {\n return new ToolCallsStream(this._buffer);\n }\n\n get reasoning(): ReasoningContentStream {\n return new ReasoningContentStream(this._buffer);\n }\n\n get usage(): UsageMetadataStream {\n return new UsageMetadataStream(this._buffer);\n }\n\n get output(): PromiseLike<AIMessage> {\n return this._assembleMessage();\n }\n\n then<TResult1 = AIMessage, TResult2 = never>(\n onfulfilled?:\n | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): PromiseLike<TResult1 | TResult2> {\n return this._assembleMessage().then(onfulfilled, onrejected);\n }\n\n /** @internal */\n private async _assembleMessage(): Promise<AIMessage> {\n const contentBlocks: Array<ContentBlock | undefined> = [];\n let id: string | undefined;\n let usage: UsageMetadata | undefined;\n let metadata: Record<string, unknown> = {};\n let finishReason: string | undefined;\n\n for await (const event of this._buffer.iterate()) {\n switch (event.event) {\n case \"message-start\":\n id = event.id ?? id;\n if (event.usage) usage = normalizeUsage(event.usage);\n break;\n\n case \"content-block-start\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"content-block-delta\": {\n const current = contentBlocks[event.index];\n const delta = getEventDelta(event);\n if (current) {\n if (delta) contentBlocks[event.index] = applyDelta(current, delta);\n }\n break;\n }\n\n case \"content-block-finish\":\n contentBlocks[event.index] = event.content;\n break;\n\n case \"usage\":\n usage = normalizeUsage(event.usage);\n break;\n\n case \"message-finish\":\n finishReason = event.reason;\n if (event.usage) usage = normalizeUsage(event.usage);\n if (event.responseMetadata) {\n metadata = {\n ...metadata,\n ...event.responseMetadata,\n };\n }\n break;\n\n default:\n break;\n }\n }\n\n const filteredBlocks = contentBlocks\n .filter((b): b is ContentBlock => b != null)\n .map(standardizeToolBlock);\n\n return new AIMessage({\n id,\n content: filteredBlocks,\n usage_metadata: usage,\n response_metadata: {\n ...metadata,\n ...(finishReason ? { finish_reason: finishReason } : {}),\n output_version: \"v1\" as const,\n },\n });\n }\n}\n"],"mappings":"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"}
@@ -20,16 +20,12 @@ declare class ReplayBuffer {
20
20
  push(event: ChatModelStreamEvent): void;
21
21
  finish(): void;
22
22
  setError(err: Error): void;
23
- /**
24
- * Create an async iterator that replays cached events from the
25
- * beginning, then follows live events as they arrive.
26
- */
27
23
  iterate(): AsyncGenerator<ChatModelStreamEvent>;
28
24
  }
29
25
  /**
30
26
  * Typed stream for text content.
31
27
  *
32
- * - **Iterate**: yields incremental text deltas (new tokens only).
28
+ * - **Iterate**: yields incremental text deltas.
33
29
  * - **Await**: resolves to the complete concatenated text.
34
30
  * - **`.full`**: yields the running accumulated text after each delta.
35
31
  */
@@ -38,14 +34,9 @@ declare class TextContentStream implements AsyncIterable<string>, PromiseLike<st
38
34
  private _buffer;
39
35
  /** @internal */
40
36
  constructor(buffer: ReplayBuffer);
41
- /**
42
- * Yields the accumulated text so far after each delta.
43
- */
37
+ /** Yields the accumulated text so far after each delta. */
44
38
  get full(): AsyncIterable<string>;
45
- /**
46
- * Yields incremental text deltas (new tokens only).
47
- * Computed by diffing successive accumulated states.
48
- */
39
+ /** Yields incremental text deltas. */
49
40
  [Symbol.asyncIterator](): AsyncIterator<string>;
50
41
  then<TResult1 = string, TResult2 = never>(onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
51
42
  }
@@ -80,27 +71,20 @@ declare class ReasoningContentStream implements AsyncIterable<string>, PromiseLi
80
71
  }
81
72
  /**
82
73
  * Typed stream for usage metadata.
83
- *
84
- * - **Iterate**: yields usage snapshots as they arrive.
85
- * - **Await**: resolves to the final usage snapshot.
86
74
  */
87
- declare class UsageMetadataStream implements AsyncIterable<UsageMetadata>, PromiseLike<UsageMetadata> {
75
+ declare class UsageMetadataStream implements AsyncIterable<UsageMetadata>, PromiseLike<UsageMetadata | undefined> {
88
76
  /** @internal */
89
77
  private _buffer;
90
78
  /** @internal */
91
79
  constructor(buffer: ReplayBuffer);
92
80
  [Symbol.asyncIterator](): AsyncIterator<UsageMetadata>;
93
- then<TResult1 = UsageMetadata, TResult2 = never>(onfulfilled?: ((value: UsageMetadata) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
81
+ then<TResult1 = UsageMetadata | undefined, TResult2 = never>(onfulfilled?: ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
94
82
  }
95
83
  /**
96
84
  * The main stream object returned by chat model streaming.
97
85
  *
98
86
  * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access
99
87
  * and `PromiseLike<AIMessage>` for simple `await` usage.
100
- *
101
- * All sub-streams are replay-safe: multiple consumers reading from the
102
- * same stream work correctly because each gets its own cursor over the
103
- * shared buffer.
104
88
  */
105
89
  declare class ChatModelStream implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage> {
106
90
  /** @internal */
@@ -108,19 +92,12 @@ declare class ChatModelStream implements AsyncIterable<ChatModelStreamEvent>, Pr
108
92
  /** @internal */
109
93
  constructor(source: AsyncIterable<ChatModelStreamEvent>);
110
94
  private _consume;
111
- /** Iterate over raw {@link ChatModelStreamEvent}s. */
112
95
  [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent>;
113
- /** Text content deltas / full text. */
114
96
  get text(): TextContentStream;
115
- /** Completed tool calls. */
116
97
  get toolCalls(): ToolCallsStream;
117
- /** Reasoning content (chain-of-thought). */
118
98
  get reasoning(): ReasoningContentStream;
119
- /** Usage metadata snapshots. */
120
99
  get usage(): UsageMetadataStream;
121
- /** The fully assembled `AIMessage`, available once the stream finishes. */
122
100
  get output(): PromiseLike<AIMessage>;
123
- /** Allows `await stream` to resolve to the fully assembled `AIMessage`. */
124
101
  then<TResult1 = AIMessage, TResult2 = never>(onfulfilled?: ((value: AIMessage) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
125
102
  private _assembleMessage;
126
103
  }