@langchain/core 1.1.39 → 1.2.0-dev-1775763803878

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 (313) hide show
  1. package/dist/callbacks/base.d.cts.map +1 -1
  2. package/dist/callbacks/base.d.ts.map +1 -1
  3. package/dist/language_models/base.cjs +1 -1
  4. package/dist/language_models/base.cjs.map +1 -1
  5. package/dist/language_models/base.js +1 -1
  6. package/dist/language_models/base.js.map +1 -1
  7. package/dist/language_models/chat_models.cjs +60 -0
  8. package/dist/language_models/chat_models.cjs.map +1 -1
  9. package/dist/language_models/chat_models.d.cts +55 -0
  10. package/dist/language_models/chat_models.d.cts.map +1 -1
  11. package/dist/language_models/chat_models.d.ts +55 -0
  12. package/dist/language_models/chat_models.d.ts.map +1 -1
  13. package/dist/language_models/chat_models.js +60 -0
  14. package/dist/language_models/chat_models.js.map +1 -1
  15. package/dist/language_models/compat.cjs +235 -0
  16. package/dist/language_models/compat.cjs.map +1 -0
  17. package/dist/language_models/compat.d.cts +34 -0
  18. package/dist/language_models/compat.d.cts.map +1 -0
  19. package/dist/language_models/compat.d.ts +34 -0
  20. package/dist/language_models/compat.d.ts.map +1 -0
  21. package/dist/language_models/compat.js +226 -0
  22. package/dist/language_models/compat.js.map +1 -0
  23. package/dist/language_models/event.cjs +12 -0
  24. package/dist/language_models/event.cjs.map +1 -0
  25. package/dist/language_models/event.d.cts +193 -0
  26. package/dist/language_models/event.d.cts.map +1 -0
  27. package/dist/language_models/event.d.ts +193 -0
  28. package/dist/language_models/event.d.ts.map +1 -0
  29. package/dist/language_models/event.js +7 -0
  30. package/dist/language_models/event.js.map +1 -0
  31. package/dist/language_models/stream.cjs +376 -0
  32. package/dist/language_models/stream.cjs.map +1 -0
  33. package/dist/language_models/stream.d.cts +129 -0
  34. package/dist/language_models/stream.d.cts.map +1 -0
  35. package/dist/language_models/stream.d.ts +129 -0
  36. package/dist/language_models/stream.d.ts.map +1 -0
  37. package/dist/language_models/stream.js +365 -0
  38. package/dist/language_models/stream.js.map +1 -0
  39. package/dist/load/import_map.cjs +6 -0
  40. package/dist/load/import_map.cjs.map +1 -1
  41. package/dist/load/import_map.js +8 -2
  42. package/dist/load/import_map.js.map +1 -1
  43. package/dist/messages/content/index.cjs.map +1 -1
  44. package/dist/messages/content/index.d.cts +5 -1
  45. package/dist/messages/content/index.d.cts.map +1 -1
  46. package/dist/messages/content/index.d.ts +5 -1
  47. package/dist/messages/content/index.d.ts.map +1 -1
  48. package/dist/messages/content/index.js.map +1 -1
  49. package/dist/messages/index.d.cts +2 -2
  50. package/dist/messages/index.d.ts +2 -2
  51. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts +1 -1
  52. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts +1 -1
  53. package/dist/types/type-utils.d.cts +2 -1
  54. package/dist/types/type-utils.d.cts.map +1 -1
  55. package/dist/types/type-utils.d.ts +2 -1
  56. package/dist/types/type-utils.d.ts.map +1 -1
  57. package/package.json +34 -1
  58. package/agents.cjs +0 -1
  59. package/agents.d.cts +0 -1
  60. package/agents.d.ts +0 -1
  61. package/agents.js +0 -1
  62. package/caches.cjs +0 -1
  63. package/caches.d.cts +0 -1
  64. package/caches.d.ts +0 -1
  65. package/caches.js +0 -1
  66. package/callbacks/base.cjs +0 -1
  67. package/callbacks/base.d.cts +0 -1
  68. package/callbacks/base.d.ts +0 -1
  69. package/callbacks/base.js +0 -1
  70. package/callbacks/dispatch/web.cjs +0 -1
  71. package/callbacks/dispatch/web.d.cts +0 -1
  72. package/callbacks/dispatch/web.d.ts +0 -1
  73. package/callbacks/dispatch/web.js +0 -1
  74. package/callbacks/dispatch.cjs +0 -1
  75. package/callbacks/dispatch.d.cts +0 -1
  76. package/callbacks/dispatch.d.ts +0 -1
  77. package/callbacks/dispatch.js +0 -1
  78. package/callbacks/manager.cjs +0 -1
  79. package/callbacks/manager.d.cts +0 -1
  80. package/callbacks/manager.d.ts +0 -1
  81. package/callbacks/manager.js +0 -1
  82. package/callbacks/promises.cjs +0 -1
  83. package/callbacks/promises.d.cts +0 -1
  84. package/callbacks/promises.d.ts +0 -1
  85. package/callbacks/promises.js +0 -1
  86. package/chat_history.cjs +0 -1
  87. package/chat_history.d.cts +0 -1
  88. package/chat_history.d.ts +0 -1
  89. package/chat_history.js +0 -1
  90. package/context.cjs +0 -1
  91. package/context.d.cts +0 -1
  92. package/context.d.ts +0 -1
  93. package/context.js +0 -1
  94. package/document_loaders/base.cjs +0 -1
  95. package/document_loaders/base.d.cts +0 -1
  96. package/document_loaders/base.d.ts +0 -1
  97. package/document_loaders/base.js +0 -1
  98. package/document_loaders/langsmith.cjs +0 -1
  99. package/document_loaders/langsmith.d.cts +0 -1
  100. package/document_loaders/langsmith.d.ts +0 -1
  101. package/document_loaders/langsmith.js +0 -1
  102. package/documents.cjs +0 -1
  103. package/documents.d.cts +0 -1
  104. package/documents.d.ts +0 -1
  105. package/documents.js +0 -1
  106. package/embeddings.cjs +0 -1
  107. package/embeddings.d.cts +0 -1
  108. package/embeddings.d.ts +0 -1
  109. package/embeddings.js +0 -1
  110. package/errors.cjs +0 -1
  111. package/errors.d.cts +0 -1
  112. package/errors.d.ts +0 -1
  113. package/errors.js +0 -1
  114. package/example_selectors.cjs +0 -1
  115. package/example_selectors.d.cts +0 -1
  116. package/example_selectors.d.ts +0 -1
  117. package/example_selectors.js +0 -1
  118. package/indexing.cjs +0 -1
  119. package/indexing.d.cts +0 -1
  120. package/indexing.d.ts +0 -1
  121. package/indexing.js +0 -1
  122. package/language_models/base.cjs +0 -1
  123. package/language_models/base.d.cts +0 -1
  124. package/language_models/base.d.ts +0 -1
  125. package/language_models/base.js +0 -1
  126. package/language_models/chat_models.cjs +0 -1
  127. package/language_models/chat_models.d.cts +0 -1
  128. package/language_models/chat_models.d.ts +0 -1
  129. package/language_models/chat_models.js +0 -1
  130. package/language_models/llms.cjs +0 -1
  131. package/language_models/llms.d.cts +0 -1
  132. package/language_models/llms.d.ts +0 -1
  133. package/language_models/llms.js +0 -1
  134. package/language_models/profile.cjs +0 -1
  135. package/language_models/profile.d.cts +0 -1
  136. package/language_models/profile.d.ts +0 -1
  137. package/language_models/profile.js +0 -1
  138. package/language_models/structured_output.cjs +0 -1
  139. package/language_models/structured_output.d.cts +0 -1
  140. package/language_models/structured_output.d.ts +0 -1
  141. package/language_models/structured_output.js +0 -1
  142. package/load/serializable.cjs +0 -1
  143. package/load/serializable.d.cts +0 -1
  144. package/load/serializable.d.ts +0 -1
  145. package/load/serializable.js +0 -1
  146. package/load.cjs +0 -1
  147. package/load.d.cts +0 -1
  148. package/load.d.ts +0 -1
  149. package/load.js +0 -1
  150. package/memory.cjs +0 -1
  151. package/memory.d.cts +0 -1
  152. package/memory.d.ts +0 -1
  153. package/memory.js +0 -1
  154. package/messages/tool.cjs +0 -1
  155. package/messages/tool.d.cts +0 -1
  156. package/messages/tool.d.ts +0 -1
  157. package/messages/tool.js +0 -1
  158. package/messages.cjs +0 -1
  159. package/messages.d.cts +0 -1
  160. package/messages.d.ts +0 -1
  161. package/messages.js +0 -1
  162. package/output_parsers/openai_functions.cjs +0 -1
  163. package/output_parsers/openai_functions.d.cts +0 -1
  164. package/output_parsers/openai_functions.d.ts +0 -1
  165. package/output_parsers/openai_functions.js +0 -1
  166. package/output_parsers/openai_tools.cjs +0 -1
  167. package/output_parsers/openai_tools.d.cts +0 -1
  168. package/output_parsers/openai_tools.d.ts +0 -1
  169. package/output_parsers/openai_tools.js +0 -1
  170. package/output_parsers.cjs +0 -1
  171. package/output_parsers.d.cts +0 -1
  172. package/output_parsers.d.ts +0 -1
  173. package/output_parsers.js +0 -1
  174. package/outputs.cjs +0 -1
  175. package/outputs.d.cts +0 -1
  176. package/outputs.d.ts +0 -1
  177. package/outputs.js +0 -1
  178. package/prompt_values.cjs +0 -1
  179. package/prompt_values.d.cts +0 -1
  180. package/prompt_values.d.ts +0 -1
  181. package/prompt_values.js +0 -1
  182. package/prompts.cjs +0 -1
  183. package/prompts.d.cts +0 -1
  184. package/prompts.d.ts +0 -1
  185. package/prompts.js +0 -1
  186. package/retrievers/document_compressors.cjs +0 -1
  187. package/retrievers/document_compressors.d.cts +0 -1
  188. package/retrievers/document_compressors.d.ts +0 -1
  189. package/retrievers/document_compressors.js +0 -1
  190. package/retrievers.cjs +0 -1
  191. package/retrievers.d.cts +0 -1
  192. package/retrievers.d.ts +0 -1
  193. package/retrievers.js +0 -1
  194. package/runnables/graph.cjs +0 -1
  195. package/runnables/graph.d.cts +0 -1
  196. package/runnables/graph.d.ts +0 -1
  197. package/runnables/graph.js +0 -1
  198. package/runnables.cjs +0 -1
  199. package/runnables.d.cts +0 -1
  200. package/runnables.d.ts +0 -1
  201. package/runnables.js +0 -1
  202. package/singletons.cjs +0 -1
  203. package/singletons.d.cts +0 -1
  204. package/singletons.d.ts +0 -1
  205. package/singletons.js +0 -1
  206. package/stores.cjs +0 -1
  207. package/stores.d.cts +0 -1
  208. package/stores.d.ts +0 -1
  209. package/stores.js +0 -1
  210. package/structured_query.cjs +0 -1
  211. package/structured_query.d.cts +0 -1
  212. package/structured_query.d.ts +0 -1
  213. package/structured_query.js +0 -1
  214. package/tools.cjs +0 -1
  215. package/tools.d.cts +0 -1
  216. package/tools.d.ts +0 -1
  217. package/tools.js +0 -1
  218. package/tracers/base.cjs +0 -1
  219. package/tracers/base.d.cts +0 -1
  220. package/tracers/base.d.ts +0 -1
  221. package/tracers/base.js +0 -1
  222. package/tracers/console.cjs +0 -1
  223. package/tracers/console.d.cts +0 -1
  224. package/tracers/console.d.ts +0 -1
  225. package/tracers/console.js +0 -1
  226. package/tracers/log_stream.cjs +0 -1
  227. package/tracers/log_stream.d.cts +0 -1
  228. package/tracers/log_stream.d.ts +0 -1
  229. package/tracers/log_stream.js +0 -1
  230. package/tracers/run_collector.cjs +0 -1
  231. package/tracers/run_collector.d.cts +0 -1
  232. package/tracers/run_collector.d.ts +0 -1
  233. package/tracers/run_collector.js +0 -1
  234. package/tracers/tracer_langchain.cjs +0 -1
  235. package/tracers/tracer_langchain.d.cts +0 -1
  236. package/tracers/tracer_langchain.d.ts +0 -1
  237. package/tracers/tracer_langchain.js +0 -1
  238. package/types/stream.cjs +0 -1
  239. package/types/stream.d.cts +0 -1
  240. package/types/stream.d.ts +0 -1
  241. package/types/stream.js +0 -1
  242. package/utils/async_caller.cjs +0 -1
  243. package/utils/async_caller.d.cts +0 -1
  244. package/utils/async_caller.d.ts +0 -1
  245. package/utils/async_caller.js +0 -1
  246. package/utils/chunk_array.cjs +0 -1
  247. package/utils/chunk_array.d.cts +0 -1
  248. package/utils/chunk_array.d.ts +0 -1
  249. package/utils/chunk_array.js +0 -1
  250. package/utils/context.cjs +0 -1
  251. package/utils/context.d.cts +0 -1
  252. package/utils/context.d.ts +0 -1
  253. package/utils/context.js +0 -1
  254. package/utils/env.cjs +0 -1
  255. package/utils/env.d.cts +0 -1
  256. package/utils/env.d.ts +0 -1
  257. package/utils/env.js +0 -1
  258. package/utils/event_source_parse.cjs +0 -1
  259. package/utils/event_source_parse.d.cts +0 -1
  260. package/utils/event_source_parse.d.ts +0 -1
  261. package/utils/event_source_parse.js +0 -1
  262. package/utils/format.cjs +0 -1
  263. package/utils/format.d.cts +0 -1
  264. package/utils/format.d.ts +0 -1
  265. package/utils/format.js +0 -1
  266. package/utils/function_calling.cjs +0 -1
  267. package/utils/function_calling.d.cts +0 -1
  268. package/utils/function_calling.d.ts +0 -1
  269. package/utils/function_calling.js +0 -1
  270. package/utils/hash.cjs +0 -1
  271. package/utils/hash.d.cts +0 -1
  272. package/utils/hash.d.ts +0 -1
  273. package/utils/hash.js +0 -1
  274. package/utils/json_patch.cjs +0 -1
  275. package/utils/json_patch.d.cts +0 -1
  276. package/utils/json_patch.d.ts +0 -1
  277. package/utils/json_patch.js +0 -1
  278. package/utils/json_schema.cjs +0 -1
  279. package/utils/json_schema.d.cts +0 -1
  280. package/utils/json_schema.d.ts +0 -1
  281. package/utils/json_schema.js +0 -1
  282. package/utils/math.cjs +0 -1
  283. package/utils/math.d.cts +0 -1
  284. package/utils/math.d.ts +0 -1
  285. package/utils/math.js +0 -1
  286. package/utils/ssrf.cjs +0 -1
  287. package/utils/ssrf.d.cts +0 -1
  288. package/utils/ssrf.d.ts +0 -1
  289. package/utils/ssrf.js +0 -1
  290. package/utils/standard_schema.cjs +0 -1
  291. package/utils/standard_schema.d.cts +0 -1
  292. package/utils/standard_schema.d.ts +0 -1
  293. package/utils/standard_schema.js +0 -1
  294. package/utils/stream.cjs +0 -1
  295. package/utils/stream.d.cts +0 -1
  296. package/utils/stream.d.ts +0 -1
  297. package/utils/stream.js +0 -1
  298. package/utils/testing.cjs +0 -1
  299. package/utils/testing.d.cts +0 -1
  300. package/utils/testing.d.ts +0 -1
  301. package/utils/testing.js +0 -1
  302. package/utils/tiktoken.cjs +0 -1
  303. package/utils/tiktoken.d.cts +0 -1
  304. package/utils/tiktoken.d.ts +0 -1
  305. package/utils/tiktoken.js +0 -1
  306. package/utils/types.cjs +0 -1
  307. package/utils/types.d.cts +0 -1
  308. package/utils/types.d.ts +0 -1
  309. package/utils/types.js +0 -1
  310. package/vectorstores.cjs +0 -1
  311. package/vectorstores.d.cts +0 -1
  312. package/vectorstores.d.ts +0 -1
  313. package/vectorstores.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","names":[],"sources":["../../src/language_models/event.ts"],"mappings":";;;;;;;UAuDiB,iBAAA;EACf,IAAA;EA6FA;EA3FA,EAAA;EA2F4B;;AAqB9B;;EA3GE,KAAA,GAAQ,aAAA;AAAA;;;;;;;AAmIV;;KAxHY,YAAA;;;;UAKK,kBAAA;EACf,IAAA;EAqHoB;EAnHpB,MAAA,EAAQ,YAAA;EA0IoB;EAxI5B,KAAA,GAAQ,aAAA;EAwIoB;EAtI5B,gBAAA,GAAmB,MAAA;AAAA;;;;;AAmJrB;;;;;;;;;AAaA;;;;;UA3IiB,sBAAA;EACf,IAAA;EA+IE;EA7IF,KAAA;EA+IE;EA7IF,OAAA,EAAS,YAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAgCM,sBAAA;EACf,IAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,mBAAA;AAAA;;;;;;;;;;;;;;;;;;;UAqBM,uBAAA;EACf,IAAA;;EAEA,KAAA;;EAEA,OAAA,EAAS,YAAA;AAAA;;;;;;;;;;;;;;;;;UAmBM,gBAAA;EACf,IAAA;;EAEA,KAAA,EAAO,aAAA;AAAA;;;;;;;;;;;;;;;;;;;;;UAuBQ,aAAA;EACf,IAAA;;EAEA,QAAA;;EAEA,IAAA;;EAEA,OAAA;AAAA;;;;UAMe,gBAAA;EACf,IAAA;;EAEA,OAAA;;EAEA,IAAA;AAAA;;;;;;KAQU,oBAAA,GACR,iBAAA,GACA,kBAAA,GACA,sBAAA,GACA,sBAAA,GACA,uBAAA,GACA,gBAAA,GACA,aAAA,GACA,gBAAA"}
@@ -0,0 +1,7 @@
1
+ import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
+ //#region src/language_models/event.ts
3
+ var event_exports = /* @__PURE__ */ __exportAll({});
4
+ //#endregion
5
+ export { event_exports };
6
+
7
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","names":[],"sources":["../../src/language_models/event.ts"],"sourcesContent":["/**\n * Chat model streaming event protocol.\n *\n * Defines a content-block-centric event model for streaming chat model responses.\n * Events carry LangChain {@link ContentBlock} types directly as accumulated\n * snapshots.\n *\n * ## Design Principles\n *\n * 1. **Content blocks are the universal carrier.** Events carry {@link ContentBlock}\n * instances directly — the block's `type` field is the discriminant. New content\n * block types automatically work without protocol changes.\n *\n * 2. **Lifecycle completeness.** Every streamable entity has explicit start and finish\n * events. Consumers never need to infer boundaries from absence of events.\n *\n * 3. **Accumulated snapshots.** Each {@link ContentBlockDeltaEvent} carries the\n * accumulated state of the content block so far. Aggregation logic lives in the\n * provider adapter, not the consumer. Consumers who need incremental deltas\n * track previous state and diff.\n *\n * 4. **Interleaving allowed.** Content blocks may interleave (e.g., parallel tool calls).\n * The only invariant: a block's start precedes its deltas, and its deltas precede\n * its finish. No ordering constraint between different blocks.\n *\n * 5. **Provider passthrough.** Native provider events that don't map to standard types\n * are forwarded as {@link ProviderEvent} rather than silently dropped.\n *\n * ## Lifecycle Contract\n *\n * ```\n * MessageStart\n * -> ContentBlockStart(index=0, ...)\n * -> ContentBlockStart(index=1, ...) // can start before 0 finishes\n * -> ContentBlockDelta(index=0, ...)\n * -> ContentBlockDelta(index=1, ...) // interleaved\n * -> ContentBlockFinish(index=0, ...) // blocks finish independently\n * -> ContentBlockDelta(index=1, ...)\n * -> ContentBlockFinish(index=1, ...)\n * -> UsageUpdate(...) // may appear at any point\n * -> MessageFinish(reason, usage?)\n * ```\n *\n * @module\n */\n\nimport type {\n ContentBlock,\n PartialContentBlock,\n} from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\n\n/**\n * Emitted once at the start of a model response.\n */\nexport interface MessageStartEvent {\n type: \"message-start\";\n /** Optional message ID assigned by the provider. */\n id?: string;\n /**\n * Initial usage snapshot, if the provider reports input token counts\n * before content begins streaming (e.g., Anthropic's `message_start`).\n */\n usage?: UsageMetadata;\n}\n\n/**\n * Finish reason for a model response.\n *\n * - `\"stop\"`: Natural end of generation.\n * - `\"length\"`: Hit max token limit.\n * - `\"tool_use\"`: Model is requesting tool execution.\n * - `\"content_filter\"`: Content was filtered by safety systems.\n */\nexport type FinishReason = \"stop\" | \"length\" | \"tool_use\" | \"content_filter\";\n\n/**\n * Emitted once when the model response is complete.\n */\nexport interface MessageFinishEvent {\n type: \"message-finish\";\n /** Why the model stopped generating. */\n reason: FinishReason;\n /** Final usage snapshot. */\n usage?: UsageMetadata;\n /** Provider-specific response metadata (model name, response ID, headers, etc.). */\n responseMetadata?: Record<string, unknown>;\n}\n\n/**\n * Emitted when a new content block begins streaming.\n *\n * @example\n * ```ts\n * // Text block starting\n * { type: \"content-block-start\", index: 0,\n * content: { type: \"text\", text: \"\" } }\n *\n * // Tool call starting\n * { type: \"content-block-start\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\", args: \"\" } }\n *\n * // Reasoning starting\n * { type: \"content-block-start\", index: 2,\n * content: { type: \"reasoning\", reasoning: \"\" } }\n * ```\n */\nexport interface ContentBlockStartEvent {\n type: \"content-block-start\";\n /** Positional index of this block within the message. */\n index: number;\n /** Initial state of the content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted for each incremental update within a content block.\n *\n * Carries the **accumulated state** of the content block so far.\n * The content is deeply partial — not all fields may be populated during\n * streaming (e.g., a tool call may have `name` but `args` is still being\n * streamed as a partial JSON string).\n *\n * Consumers who need incremental deltas (e.g., new tokens only) should\n * track the previous state and diff against the new accumulated state.\n *\n * Aggregation into `AIMessage` is trivial:\n * `message.content[event.index] = event.content`\n *\n * @example\n * ```ts\n * // First text delta — accumulated so far\n * { type: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \"Hello\" } }\n *\n * // Second text delta — accumulated so far\n * { type: \"content-block-delta\", index: 0,\n * content: { type: \"text\", text: \"Hello world\" } }\n *\n * // Tool call args — accumulated so far\n * { type: \"content-block-delta\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\", args: '{\"q\":\"wea' } }\n * ```\n */\nexport interface ContentBlockDeltaEvent {\n type: \"content-block-delta\";\n /** Positional index of the block being updated. */\n index: number;\n /** Accumulated state of the content block after this update. Deeply partial. */\n content: PartialContentBlock;\n}\n\n/**\n * Emitted when a content block is complete.\n *\n * The `content` carries the **finalized** block. For tool calls, this means\n * args have been parsed from a JSON string into an object.\n *\n * @example\n * ```ts\n * // Finalized text block\n * { type: \"content-block-finish\", index: 0,\n * content: { type: \"text\", text: \"The weather is sunny.\" } }\n *\n * // Finalized tool call (args parsed)\n * { type: \"content-block-finish\", index: 1,\n * content: { type: \"tool_call\", id: \"call_1\", name: \"search\",\n * args: { q: \"weather\" } } }\n * ```\n */\nexport interface ContentBlockFinishEvent {\n type: \"content-block-finish\";\n /** Positional index of the completed block. */\n index: number;\n /** Finalized content block. */\n content: ContentBlock;\n}\n\n/**\n * Emitted whenever the provider reports updated usage information.\n *\n * May appear at any point during streaming. Each event carries a\n * **running snapshot** of usage (not an additive delta), so consumers\n * can simply take the latest value.\n *\n * @example\n * ```ts\n * // After message_start (Anthropic: input tokens known)\n * { type: \"usage\", usage: { input_tokens: 1234, output_tokens: 0, total_tokens: 1234 } }\n *\n * // After streaming completes\n * { type: \"usage\", usage: { input_tokens: 1234, output_tokens: 567, total_tokens: 1801 } }\n * ```\n */\nexport interface UsageUpdateEvent {\n type: \"usage\";\n /** Current usage snapshot. */\n usage: UsageMetadata;\n}\n\n/**\n * Passthrough for native provider events that don't map to standard types.\n *\n * Provider adapters map recognized events to standard {@link ChatModelStreamEvent}\n * types and forward everything else as `ProviderEvent`. This ensures no information\n * is silently dropped.\n *\n * @example\n * ```ts\n * // OpenAI server-side web search in progress\n * { type: \"provider\", provider: \"openai\",\n * name: \"response.web_search_call.searching\",\n * payload: { item_id: \"ws_123\", output_index: 0 } }\n *\n * // Anthropic context management signal\n * { type: \"provider\", provider: \"anthropic\",\n * name: \"context_management\",\n * payload: { ... } }\n * ```\n */\nexport interface ProviderEvent {\n type: \"provider\";\n /** Provider identifier (e.g., `\"openai\"`, `\"anthropic\"`, `\"google\"`). */\n provider: string;\n /** Raw event type name from the provider SDK. */\n name: string;\n /** Raw event payload from the provider SDK. */\n payload: unknown;\n}\n\n/**\n * Emitted on unrecoverable stream errors.\n */\nexport interface StreamErrorEvent {\n type: \"error\";\n /** Human-readable error message. */\n message: string;\n /** Optional error code for programmatic handling. */\n code?: string;\n}\n\n/**\n * Union of all chat model stream event types.\n *\n * This is the type yielded by `ChatModelStream[Symbol.asyncIterator]()`.\n */\nexport type ChatModelStreamEvent =\n | MessageStartEvent\n | MessageFinishEvent\n | ContentBlockStartEvent\n | ContentBlockDeltaEvent\n | ContentBlockFinishEvent\n | UsageUpdateEvent\n | ProviderEvent\n | StreamErrorEvent;\n"],"mappings":""}
@@ -0,0 +1,376 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_ai = require("../messages/ai.cjs");
4
+ //#region src/language_models/stream.ts
5
+ /**
6
+ * Typed stream classes for chat model streaming.
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
+ * @module
13
+ */
14
+ var stream_exports = /* @__PURE__ */ require_runtime.__exportAll({
15
+ ChatModelStream: () => ChatModelStream,
16
+ ReasoningContentStream: () => ReasoningContentStream,
17
+ TextContentStream: () => TextContentStream,
18
+ ToolCallsStream: () => ToolCallsStream,
19
+ UsageMetadataStream: () => UsageMetadataStream
20
+ });
21
+ /**
22
+ * A buffer that caches emitted events for replay.
23
+ *
24
+ * Multiple consumers can independently iterate the same buffer —
25
+ * each gets its own cursor. Events are never consumed or removed.
26
+ *
27
+ * @internal
28
+ */
29
+ var ReplayBuffer = class {
30
+ events = [];
31
+ finished = false;
32
+ waiters = [];
33
+ error = null;
34
+ push(event) {
35
+ this.events.push(event);
36
+ const toWake = this.waiters.splice(0);
37
+ for (const waiter of toWake) waiter();
38
+ }
39
+ finish() {
40
+ this.finished = true;
41
+ const toWake = this.waiters.splice(0);
42
+ for (const waiter of toWake) waiter();
43
+ }
44
+ setError(err) {
45
+ this.error = err;
46
+ this.finished = true;
47
+ const toWake = this.waiters.splice(0);
48
+ for (const waiter of toWake) waiter();
49
+ }
50
+ /**
51
+ * Create an async iterator that replays cached events from the
52
+ * beginning, then follows live events as they arrive.
53
+ */
54
+ async *iterate() {
55
+ if (this.finished) {
56
+ if (this.error) throw this.error;
57
+ yield* this.events;
58
+ return;
59
+ }
60
+ let cursor = 0;
61
+ while (true) {
62
+ while (cursor < this.events.length) {
63
+ yield this.events[cursor];
64
+ cursor++;
65
+ }
66
+ if (this.finished) {
67
+ if (this.error) throw this.error;
68
+ return;
69
+ }
70
+ await new Promise((resolve) => {
71
+ if (cursor < this.events.length || this.finished) {
72
+ resolve();
73
+ return;
74
+ }
75
+ this.waiters.push(resolve);
76
+ });
77
+ }
78
+ }
79
+ };
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 : "";
84
+ }
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";
88
+ }
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";
92
+ }
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";
96
+ }
97
+ /**
98
+ * Typed stream for text content.
99
+ *
100
+ * - **Iterate**: yields incremental text deltas (new tokens only).
101
+ * - **Await**: resolves to the complete concatenated text.
102
+ * - **`.full`**: yields the running accumulated text after each delta.
103
+ */
104
+ var TextContentStream = class {
105
+ /** @internal */
106
+ _buffer;
107
+ /** @internal */
108
+ constructor(buffer) {
109
+ this._buffer = buffer;
110
+ }
111
+ /**
112
+ * Yields the accumulated text so far after each delta.
113
+ */
114
+ get full() {
115
+ const buffer = this._buffer;
116
+ return { async *[Symbol.asyncIterator]() {
117
+ for await (const event of buffer.iterate()) if (isTextDelta(event)) yield getStringField(event.content, "text");
118
+ } };
119
+ }
120
+ /**
121
+ * Yields incremental text deltas (new tokens only).
122
+ * Computed by diffing successive accumulated states.
123
+ */
124
+ [Symbol.asyncIterator]() {
125
+ const buffer = this._buffer;
126
+ 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
+ }
135
+ }
136
+ }
137
+ return gen();
138
+ }
139
+ then(onfulfilled, onrejected) {
140
+ return (async () => {
141
+ let text = "";
142
+ for await (const delta of this) text += delta;
143
+ return text;
144
+ })().then(onfulfilled, onrejected);
145
+ }
146
+ };
147
+ /**
148
+ * Typed stream for tool calls.
149
+ *
150
+ * - **Iterate**: yields individual `ToolCall` objects as each completes.
151
+ * - **Await**: resolves to the full array.
152
+ * - **`.full`**: yields the accumulated array after each new tool call.
153
+ */
154
+ var ToolCallsStream = class {
155
+ /** @internal */
156
+ _buffer;
157
+ /** @internal */
158
+ constructor(buffer) {
159
+ this._buffer = buffer;
160
+ }
161
+ get full() {
162
+ const buffer = this._buffer;
163
+ return { async *[Symbol.asyncIterator]() {
164
+ const calls = [];
165
+ for await (const event of buffer.iterate()) if (isToolCallFinish(event)) {
166
+ calls.push(event.content);
167
+ yield [...calls];
168
+ }
169
+ } };
170
+ }
171
+ [Symbol.asyncIterator]() {
172
+ const buffer = this._buffer;
173
+ async function* gen() {
174
+ for await (const event of buffer.iterate()) if (isToolCallFinish(event)) yield event.content;
175
+ }
176
+ return gen();
177
+ }
178
+ then(onfulfilled, onrejected) {
179
+ return (async () => {
180
+ const calls = [];
181
+ for await (const call of this) calls.push(call);
182
+ return calls;
183
+ })().then(onfulfilled, onrejected);
184
+ }
185
+ };
186
+ /**
187
+ * Typed stream for reasoning content (chain-of-thought).
188
+ * Same interface as {@link TextContentStream} but for reasoning blocks.
189
+ */
190
+ var ReasoningContentStream = class {
191
+ /** @internal */
192
+ _buffer;
193
+ /** @internal */
194
+ constructor(buffer) {
195
+ this._buffer = buffer;
196
+ }
197
+ get full() {
198
+ const buffer = this._buffer;
199
+ return { async *[Symbol.asyncIterator]() {
200
+ for await (const event of buffer.iterate()) if (isReasoningDelta(event)) yield getStringField(event.content, "reasoning");
201
+ } };
202
+ }
203
+ [Symbol.asyncIterator]() {
204
+ const buffer = this._buffer;
205
+ 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);
213
+ }
214
+ }
215
+ }
216
+ return gen();
217
+ }
218
+ then(onfulfilled, onrejected) {
219
+ return (async () => {
220
+ let text = "";
221
+ for await (const delta of this) text += delta;
222
+ return text;
223
+ })().then(onfulfilled, onrejected);
224
+ }
225
+ };
226
+ /**
227
+ * Typed stream for usage metadata.
228
+ *
229
+ * - **Iterate**: yields usage snapshots as they arrive.
230
+ * - **Await**: resolves to the final usage snapshot.
231
+ */
232
+ var UsageMetadataStream = class {
233
+ /** @internal */
234
+ _buffer;
235
+ /** @internal */
236
+ constructor(buffer) {
237
+ this._buffer = buffer;
238
+ }
239
+ [Symbol.asyncIterator]() {
240
+ const buffer = this._buffer;
241
+ 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;
245
+ }
246
+ return gen();
247
+ }
248
+ then(onfulfilled, onrejected) {
249
+ return (async () => {
250
+ let latest;
251
+ for await (const usage of this) latest = usage;
252
+ return latest ?? {
253
+ input_tokens: 0,
254
+ output_tokens: 0,
255
+ total_tokens: 0
256
+ };
257
+ })().then(onfulfilled, onrejected);
258
+ }
259
+ };
260
+ /**
261
+ * The main stream object returned by chat model streaming.
262
+ *
263
+ * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access
264
+ * 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
+ */
270
+ var ChatModelStream = class {
271
+ /** @internal */
272
+ _buffer;
273
+ /** @internal */
274
+ constructor(source) {
275
+ this._buffer = new ReplayBuffer();
276
+ this._consume(source);
277
+ }
278
+ /** @internal */
279
+ async _consume(source) {
280
+ try {
281
+ for await (const event of source) this._buffer.push(event);
282
+ this._buffer.finish();
283
+ } catch (err) {
284
+ this._buffer.setError(err instanceof Error ? err : new Error(String(err)));
285
+ }
286
+ }
287
+ /** Iterate over raw {@link ChatModelStreamEvent}s. */
288
+ [Symbol.asyncIterator]() {
289
+ return this._buffer.iterate();
290
+ }
291
+ /** Text content deltas / full text. */
292
+ get text() {
293
+ return new TextContentStream(this._buffer);
294
+ }
295
+ /** Completed tool calls. */
296
+ get toolCalls() {
297
+ return new ToolCallsStream(this._buffer);
298
+ }
299
+ /** Reasoning content (chain-of-thought). */
300
+ get reasoning() {
301
+ return new ReasoningContentStream(this._buffer);
302
+ }
303
+ /** Usage metadata snapshots. */
304
+ get usage() {
305
+ return new UsageMetadataStream(this._buffer);
306
+ }
307
+ /** The fully assembled `AIMessage`, available once the stream finishes. */
308
+ get output() {
309
+ return { then: (onf, onr) => this._assembleMessage().then(onf, onr) };
310
+ }
311
+ /** Allows `await stream` to resolve to the fully assembled `AIMessage`. */
312
+ then(onfulfilled, onrejected) {
313
+ return this._assembleMessage().then(onfulfilled, onrejected);
314
+ }
315
+ /**
316
+ * Assemble all stream events into a finalized `AIMessage`.
317
+ * @internal
318
+ */
319
+ async _assembleMessage() {
320
+ const contentBlocks = [];
321
+ let id;
322
+ let usage;
323
+ let responseMetadata = {};
324
+ let finishReason;
325
+ for await (const event of this._buffer.iterate()) switch (event.type) {
326
+ case "message-start":
327
+ id = event.id ?? id;
328
+ if (event.usage) usage = event.usage;
329
+ break;
330
+ case "content-block-start":
331
+ case "content-block-delta":
332
+ contentBlocks[event.index] = event.content;
333
+ break;
334
+ case "content-block-finish":
335
+ contentBlocks[event.index] = event.content;
336
+ break;
337
+ case "usage":
338
+ usage = event.usage;
339
+ break;
340
+ case "message-finish":
341
+ finishReason = event.reason;
342
+ if (event.usage) usage = event.usage;
343
+ if (event.responseMetadata) responseMetadata = {
344
+ ...responseMetadata,
345
+ ...event.responseMetadata
346
+ };
347
+ break;
348
+ default: break;
349
+ }
350
+ const filteredBlocks = contentBlocks.filter((b) => b != null);
351
+ return new require_ai.AIMessage({
352
+ id,
353
+ content: filteredBlocks,
354
+ usage_metadata: usage,
355
+ response_metadata: {
356
+ ...responseMetadata,
357
+ ...finishReason ? { finish_reason: finishReason } : {},
358
+ output_version: "v1"
359
+ }
360
+ });
361
+ }
362
+ };
363
+ //#endregion
364
+ exports.ChatModelStream = ChatModelStream;
365
+ exports.ReasoningContentStream = ReasoningContentStream;
366
+ exports.TextContentStream = TextContentStream;
367
+ exports.ToolCallsStream = ToolCallsStream;
368
+ exports.UsageMetadataStream = UsageMetadataStream;
369
+ Object.defineProperty(exports, "stream_exports", {
370
+ enumerable: true,
371
+ get: function() {
372
+ return stream_exports;
373
+ }
374
+ });
375
+
376
+ //# sourceMappingURL=stream.cjs.map
@@ -0,0 +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":"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"}
@@ -0,0 +1,129 @@
1
+ import { ContentBlock } from "../messages/content/index.cjs";
2
+ import { UsageMetadata } from "../messages/metadata.cjs";
3
+ import { AIMessage } from "../messages/ai.cjs";
4
+ import { ChatModelStreamEvent } from "./event.cjs";
5
+
6
+ //#region src/language_models/stream.d.ts
7
+ /**
8
+ * A buffer that caches emitted events for replay.
9
+ *
10
+ * Multiple consumers can independently iterate the same buffer —
11
+ * each gets its own cursor. Events are never consumed or removed.
12
+ *
13
+ * @internal
14
+ */
15
+ declare class ReplayBuffer {
16
+ private events;
17
+ private finished;
18
+ private waiters;
19
+ private error;
20
+ push(event: ChatModelStreamEvent): void;
21
+ finish(): void;
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
+ iterate(): AsyncGenerator<ChatModelStreamEvent>;
28
+ }
29
+ /**
30
+ * Typed stream for text content.
31
+ *
32
+ * - **Iterate**: yields incremental text deltas (new tokens only).
33
+ * - **Await**: resolves to the complete concatenated text.
34
+ * - **`.full`**: yields the running accumulated text after each delta.
35
+ */
36
+ declare class TextContentStream implements AsyncIterable<string>, PromiseLike<string> {
37
+ /** @internal */
38
+ private _buffer;
39
+ /** @internal */
40
+ constructor(buffer: ReplayBuffer);
41
+ /**
42
+ * Yields the accumulated text so far after each delta.
43
+ */
44
+ get full(): AsyncIterable<string>;
45
+ /**
46
+ * Yields incremental text deltas (new tokens only).
47
+ * Computed by diffing successive accumulated states.
48
+ */
49
+ [Symbol.asyncIterator](): AsyncIterator<string>;
50
+ then<TResult1 = string, TResult2 = never>(onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
51
+ }
52
+ /**
53
+ * Typed stream for tool calls.
54
+ *
55
+ * - **Iterate**: yields individual `ToolCall` objects as each completes.
56
+ * - **Await**: resolves to the full array.
57
+ * - **`.full`**: yields the accumulated array after each new tool call.
58
+ */
59
+ declare class ToolCallsStream implements AsyncIterable<ContentBlock.Tools.ToolCall>, PromiseLike<Array<ContentBlock.Tools.ToolCall>> {
60
+ /** @internal */
61
+ private _buffer;
62
+ /** @internal */
63
+ constructor(buffer: ReplayBuffer);
64
+ get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>>;
65
+ [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall>;
66
+ then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(onfulfilled?: ((value: Array<ContentBlock.Tools.ToolCall>) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
67
+ }
68
+ /**
69
+ * Typed stream for reasoning content (chain-of-thought).
70
+ * Same interface as {@link TextContentStream} but for reasoning blocks.
71
+ */
72
+ declare class ReasoningContentStream implements AsyncIterable<string>, PromiseLike<string> {
73
+ /** @internal */
74
+ private _buffer;
75
+ /** @internal */
76
+ constructor(buffer: ReplayBuffer);
77
+ get full(): AsyncIterable<string>;
78
+ [Symbol.asyncIterator](): AsyncIterator<string>;
79
+ then<TResult1 = string, TResult2 = never>(onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
80
+ }
81
+ /**
82
+ * Typed stream for usage metadata.
83
+ *
84
+ * - **Iterate**: yields usage snapshots as they arrive.
85
+ * - **Await**: resolves to the final usage snapshot.
86
+ */
87
+ declare class UsageMetadataStream implements AsyncIterable<UsageMetadata>, PromiseLike<UsageMetadata> {
88
+ /** @internal */
89
+ private _buffer;
90
+ /** @internal */
91
+ constructor(buffer: ReplayBuffer);
92
+ [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>;
94
+ }
95
+ /**
96
+ * The main stream object returned by chat model streaming.
97
+ *
98
+ * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access
99
+ * 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
+ */
105
+ declare class ChatModelStream implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage> {
106
+ /** @internal */
107
+ private _buffer;
108
+ /** @internal */
109
+ constructor(source: AsyncIterable<ChatModelStreamEvent>);
110
+ private _consume;
111
+ /** Iterate over raw {@link ChatModelStreamEvent}s. */
112
+ [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent>;
113
+ /** Text content deltas / full text. */
114
+ get text(): TextContentStream;
115
+ /** Completed tool calls. */
116
+ get toolCalls(): ToolCallsStream;
117
+ /** Reasoning content (chain-of-thought). */
118
+ get reasoning(): ReasoningContentStream;
119
+ /** Usage metadata snapshots. */
120
+ get usage(): UsageMetadataStream;
121
+ /** The fully assembled `AIMessage`, available once the stream finishes. */
122
+ get output(): PromiseLike<AIMessage>;
123
+ /** Allows `await stream` to resolve to the fully assembled `AIMessage`. */
124
+ then<TResult1 = AIMessage, TResult2 = never>(onfulfilled?: ((value: AIMessage) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null): PromiseLike<TResult1 | TResult2>;
125
+ private _assembleMessage;
126
+ }
127
+ //#endregion
128
+ export { ChatModelStream, ReasoningContentStream, TextContentStream, ToolCallsStream, UsageMetadataStream };
129
+ //# sourceMappingURL=stream.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.cts","names":[],"sources":["../../src/language_models/stream.ts"],"mappings":"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"}