@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
@@ -0,0 +1,155 @@
1
+ //#region src/utils/testing/openai_stream_fixtures.ts
2
+ function asAsyncIterable(items) {
3
+ return { async *[Symbol.asyncIterator]() {
4
+ for (const item of items) yield item;
5
+ } };
6
+ }
7
+ function openAITextOnlyChunksWithUsage(model = "test-model") {
8
+ const chunks = openAITextOnlyChunks(model);
9
+ const last = chunks[chunks.length - 1];
10
+ chunks[chunks.length - 1] = {
11
+ ...last,
12
+ usage: {
13
+ prompt_tokens: 10,
14
+ completion_tokens: 2,
15
+ total_tokens: 12
16
+ }
17
+ };
18
+ return chunks;
19
+ }
20
+ function openAITextOnlyChunks(model = "test-model") {
21
+ return [
22
+ {
23
+ id: "chatcmpl-text",
24
+ model,
25
+ choices: [{
26
+ index: 0,
27
+ delta: {
28
+ role: "assistant",
29
+ content: "Hello"
30
+ },
31
+ finish_reason: null
32
+ }]
33
+ },
34
+ {
35
+ id: "chatcmpl-text",
36
+ model,
37
+ choices: [{
38
+ index: 0,
39
+ delta: { content: " world" },
40
+ finish_reason: null
41
+ }]
42
+ },
43
+ {
44
+ id: "chatcmpl-text",
45
+ model,
46
+ choices: [{
47
+ index: 0,
48
+ delta: {},
49
+ finish_reason: "stop"
50
+ }]
51
+ }
52
+ ];
53
+ }
54
+ function openAIReasoningTextChunks(model = "test-model") {
55
+ return [
56
+ {
57
+ id: "chatcmpl-reason",
58
+ model,
59
+ choices: [{
60
+ index: 0,
61
+ delta: {
62
+ role: "assistant",
63
+ reasoning_content: "Let me reason..."
64
+ },
65
+ finish_reason: null
66
+ }]
67
+ },
68
+ {
69
+ id: "chatcmpl-reason",
70
+ model,
71
+ choices: [{
72
+ index: 0,
73
+ delta: { content: "Answer." },
74
+ finish_reason: null
75
+ }]
76
+ },
77
+ {
78
+ id: "chatcmpl-reason",
79
+ model,
80
+ choices: [{
81
+ index: 0,
82
+ delta: {},
83
+ finish_reason: "stop"
84
+ }]
85
+ }
86
+ ];
87
+ }
88
+ function openAIToolCallChunks(model = "test-model") {
89
+ return [
90
+ {
91
+ id: "chatcmpl-tools",
92
+ model,
93
+ choices: [{
94
+ index: 0,
95
+ delta: {
96
+ role: "assistant",
97
+ content: "Let me search."
98
+ },
99
+ finish_reason: null
100
+ }]
101
+ },
102
+ {
103
+ id: "chatcmpl-tools",
104
+ model,
105
+ choices: [{
106
+ index: 0,
107
+ delta: { tool_calls: [{
108
+ index: 0,
109
+ id: "call_abc",
110
+ type: "function",
111
+ function: {
112
+ name: "web_search",
113
+ arguments: "{\"query\""
114
+ }
115
+ }] },
116
+ finish_reason: null
117
+ }]
118
+ },
119
+ {
120
+ id: "chatcmpl-tools",
121
+ model,
122
+ choices: [{
123
+ index: 0,
124
+ delta: { tool_calls: [{
125
+ index: 0,
126
+ function: { arguments: ":\"weather\"}" }
127
+ }] },
128
+ finish_reason: null
129
+ }]
130
+ },
131
+ {
132
+ id: "chatcmpl-tools",
133
+ model,
134
+ choices: [{
135
+ index: 0,
136
+ delta: {},
137
+ finish_reason: "tool_calls"
138
+ }]
139
+ }
140
+ ];
141
+ }
142
+ function sseResponseFromOpenAIChunks(chunks) {
143
+ const encoder = new TextEncoder();
144
+ return new Response(new ReadableStream({ start(controller) {
145
+ for (const chunk of chunks) controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`));
146
+ controller.close();
147
+ } }), {
148
+ status: 200,
149
+ headers: { "Content-Type": "text/event-stream" }
150
+ });
151
+ }
152
+ //#endregion
153
+ export { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks };
154
+
155
+ //# sourceMappingURL=openai_stream_fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_stream_fixtures.js","names":[],"sources":["../../../src/utils/testing/openai_stream_fixtures.ts"],"sourcesContent":["import type { OpenAICompletionsStreamChunk } from \"../../language_models/openai_completions_stream.js\";\n\nexport function asAsyncIterable<T>(items: T[]): AsyncIterable<T> {\n return {\n async *[Symbol.asyncIterator]() {\n for (const item of items) {\n yield item;\n }\n },\n };\n}\n\nexport function openAITextOnlyChunksWithUsage(\n model = \"test-model\"\n): OpenAICompletionsStreamChunk[] {\n const chunks = openAITextOnlyChunks(model);\n const last = chunks[chunks.length - 1]!;\n chunks[chunks.length - 1] = {\n ...last,\n usage: {\n prompt_tokens: 10,\n completion_tokens: 2,\n total_tokens: 12,\n },\n };\n return chunks;\n}\n\nexport function openAITextOnlyChunks(\n model = \"test-model\"\n): OpenAICompletionsStreamChunk[] {\n return [\n {\n id: \"chatcmpl-text\",\n model,\n choices: [\n {\n index: 0,\n delta: { role: \"assistant\", content: \"Hello\" },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-text\",\n model,\n choices: [\n {\n index: 0,\n delta: { content: \" world\" },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-text\",\n model,\n choices: [{ index: 0, delta: {}, finish_reason: \"stop\" }],\n },\n ];\n}\n\nexport function openAIReasoningTextChunks(\n model = \"test-model\"\n): OpenAICompletionsStreamChunk[] {\n return [\n {\n id: \"chatcmpl-reason\",\n model,\n choices: [\n {\n index: 0,\n delta: { role: \"assistant\", reasoning_content: \"Let me reason...\" },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-reason\",\n model,\n choices: [\n {\n index: 0,\n delta: { content: \"Answer.\" },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-reason\",\n model,\n choices: [{ index: 0, delta: {}, finish_reason: \"stop\" }],\n },\n ];\n}\n\nexport function openAIToolCallChunks(\n model = \"test-model\"\n): OpenAICompletionsStreamChunk[] {\n return [\n {\n id: \"chatcmpl-tools\",\n model,\n choices: [\n {\n index: 0,\n delta: { role: \"assistant\", content: \"Let me search.\" },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-tools\",\n model,\n choices: [\n {\n index: 0,\n delta: {\n tool_calls: [\n {\n index: 0,\n id: \"call_abc\",\n type: \"function\",\n function: { name: \"web_search\", arguments: '{\"query\"' },\n },\n ],\n },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-tools\",\n model,\n choices: [\n {\n index: 0,\n delta: {\n tool_calls: [\n {\n index: 0,\n function: { arguments: ':\"weather\"}' },\n },\n ],\n },\n finish_reason: null,\n },\n ],\n },\n {\n id: \"chatcmpl-tools\",\n model,\n choices: [{ index: 0, delta: {}, finish_reason: \"tool_calls\" }],\n },\n ];\n}\n\nexport function sseResponseFromOpenAIChunks(\n chunks: OpenAICompletionsStreamChunk[]\n): Response {\n const encoder = new TextEncoder();\n return new Response(\n new ReadableStream({\n start(controller) {\n for (const chunk of chunks) {\n controller.enqueue(\n encoder.encode(`data: ${JSON.stringify(chunk)}\\n\\n`)\n );\n }\n controller.close();\n },\n }),\n { status: 200, headers: { \"Content-Type\": \"text/event-stream\" } }\n );\n}\n"],"mappings":";AAEA,SAAgB,gBAAmB,OAA8B;AAC/D,QAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,OAAK,MAAM,QAAQ,MACjB,OAAM;IAGX;;AAGH,SAAgB,8BACd,QAAQ,cACwB;CAChC,MAAM,SAAS,qBAAqB,MAAM;CAC1C,MAAM,OAAO,OAAO,OAAO,SAAS;AACpC,QAAO,OAAO,SAAS,KAAK;EAC1B,GAAG;EACH,OAAO;GACL,eAAe;GACf,mBAAmB;GACnB,cAAc;GACf;EACF;AACD,QAAO;;AAGT,SAAgB,qBACd,QAAQ,cACwB;AAChC,QAAO;EACL;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO;KAAE,MAAM;KAAa,SAAS;KAAS;IAC9C,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO,EAAE,SAAS,UAAU;IAC5B,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CAAC;IAAE,OAAO;IAAG,OAAO,EAAE;IAAE,eAAe;IAAQ,CAAC;GAC1D;EACF;;AAGH,SAAgB,0BACd,QAAQ,cACwB;AAChC,QAAO;EACL;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO;KAAE,MAAM;KAAa,mBAAmB;KAAoB;IACnE,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO,EAAE,SAAS,WAAW;IAC7B,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CAAC;IAAE,OAAO;IAAG,OAAO,EAAE;IAAE,eAAe;IAAQ,CAAC;GAC1D;EACF;;AAGH,SAAgB,qBACd,QAAQ,cACwB;AAChC,QAAO;EACL;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO;KAAE,MAAM;KAAa,SAAS;KAAkB;IACvD,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO,EACL,YAAY,CACV;KACE,OAAO;KACP,IAAI;KACJ,MAAM;KACN,UAAU;MAAE,MAAM;MAAc,WAAW;MAAY;KACxD,CACF,EACF;IACD,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CACP;IACE,OAAO;IACP,OAAO,EACL,YAAY,CACV;KACE,OAAO;KACP,UAAU,EAAE,WAAW,iBAAe;KACvC,CACF,EACF;IACD,eAAe;IAChB,CACF;GACF;EACD;GACE,IAAI;GACJ;GACA,SAAS,CAAC;IAAE,OAAO;IAAG,OAAO,EAAE;IAAE,eAAe;IAAc,CAAC;GAChE;EACF;;AAGH,SAAgB,4BACd,QACU;CACV,MAAM,UAAU,IAAI,aAAa;AACjC,QAAO,IAAI,SACT,IAAI,eAAe,EACjB,MAAM,YAAY;AAChB,OAAK,MAAM,SAAS,OAClB,YAAW,QACT,QAAQ,OAAO,SAAS,KAAK,UAAU,MAAM,CAAC,MAAM,CACrD;AAEH,aAAW,OAAO;IAErB,CAAC,EACF;EAAE,QAAQ;EAAK,SAAS,EAAE,gBAAgB,qBAAqB;EAAE,CAClE"}
@@ -0,0 +1,136 @@
1
+ //#region src/utils/testing/stream.ts
2
+ function isChatModelStream(received) {
3
+ if (received == null || typeof received !== "object") return false;
4
+ const stream = received;
5
+ return typeof stream.text !== "undefined" && typeof stream.toolCalls !== "undefined" && typeof stream.reasoning !== "undefined" && typeof stream.usage !== "undefined" && typeof stream.output !== "undefined" && typeof stream[Symbol.asyncIterator] === "function";
6
+ }
7
+ function matchesPartialObject(actual, expected, equals) {
8
+ if (actual == null) return false;
9
+ return Object.entries(expected).every(([key, value]) => equals(actual[key], value));
10
+ }
11
+ function matchesStreamUsage(actual, expected, equals) {
12
+ if (actual == null) return false;
13
+ return matchesPartialObject(actual, expected, equals);
14
+ }
15
+ function getOutputText(message) {
16
+ return message.content.find((block) => block.type === "text")?.text;
17
+ }
18
+ function matchesStreamOutput(message, expected, equals) {
19
+ if (expected.id !== void 0 && message.id !== expected.id) return false;
20
+ if (expected.text !== void 0 && getOutputText(message) !== expected.text) return false;
21
+ if (expected.toolCalls !== void 0) {
22
+ const calls = message.tool_calls ?? [];
23
+ if (calls.length !== expected.toolCalls.length) return false;
24
+ for (let i = 0; i < expected.toolCalls.length; i++) {
25
+ const call = calls[i];
26
+ const exp = expected.toolCalls[i];
27
+ if (call?.name !== exp.name || !equals(call.args, exp.args)) return false;
28
+ }
29
+ }
30
+ if (expected.usage !== void 0 && !matchesStreamUsage(message.usage_metadata, expected.usage, equals)) return false;
31
+ if (expected.responseMetadata !== void 0 && !matchesPartialObject(message.response_metadata, expected.responseMetadata, equals)) return false;
32
+ return true;
33
+ }
34
+ function invalidStreamResult(received, matcherName, utils) {
35
+ return {
36
+ pass: false,
37
+ message: () => `${utils.matcherHint(matcherName)}\n\nExpected: ChatModelStream (return value of model.streamEvents("Hello"))\nReceived: ${utils.printReceived(received)}`,
38
+ actual: received,
39
+ expected: "ChatModelStream"
40
+ };
41
+ }
42
+ function applyNot(pass, isNot) {
43
+ return isNot ? !pass : pass;
44
+ }
45
+ async function toHaveStreamText(received, expected) {
46
+ const { isNot, utils } = this;
47
+ const matcherName = "toHaveStreamText";
48
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
49
+ const actual = await received.text;
50
+ return {
51
+ pass: applyNot(actual === expected, isNot),
52
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream text: ${isNot ? "not " : ""}${utils.printExpected(expected)}\nReceived stream text: ${utils.printReceived(actual)}`,
53
+ actual,
54
+ expected
55
+ };
56
+ }
57
+ async function toHaveStreamReasoning(received, expected) {
58
+ const { isNot, utils } = this;
59
+ const matcherName = "toHaveStreamReasoning";
60
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
61
+ const actual = await received.reasoning;
62
+ return {
63
+ pass: applyNot(actual === expected, isNot),
64
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream reasoning: ${isNot ? "not " : ""}${utils.printExpected(expected)}\nReceived stream reasoning: ${utils.printReceived(actual)}`,
65
+ actual,
66
+ expected
67
+ };
68
+ }
69
+ async function toHaveStreamToolCalls(received, expected) {
70
+ const { isNot, utils } = this;
71
+ const matcherName = "toHaveStreamToolCalls";
72
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
73
+ const actual = await received.toolCalls;
74
+ let pass = actual.length === expected.length && expected.every((exp, i) => {
75
+ const call = actual[i];
76
+ return call?.name === exp.name && this.equals(call.args, exp.args);
77
+ });
78
+ pass = applyNot(pass, isNot);
79
+ return {
80
+ pass,
81
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream tool calls: ${utils.printExpected(expected)}\nReceived stream tool calls: ${utils.printReceived(actual.map((tc) => ({
82
+ name: tc.name,
83
+ args: tc.args
84
+ })))}`,
85
+ actual: actual.map((tc) => ({
86
+ name: tc.name,
87
+ args: tc.args
88
+ })),
89
+ expected
90
+ };
91
+ }
92
+ async function toHaveStreamUsage(received, expected) {
93
+ const { isNot, utils } = this;
94
+ const matcherName = "toHaveStreamUsage";
95
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
96
+ const actual = await received.usage;
97
+ return {
98
+ pass: applyNot(matchesStreamUsage(actual, expected, this.equals), isNot),
99
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream usage: ${utils.printExpected(expected)}\nReceived stream usage: ${utils.printReceived(actual)}`,
100
+ actual,
101
+ expected
102
+ };
103
+ }
104
+ async function toHaveStreamOutput(received, expected) {
105
+ const { isNot, utils } = this;
106
+ const matcherName = "toHaveStreamOutput";
107
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
108
+ const message = await received.output;
109
+ return {
110
+ pass: applyNot(matchesStreamOutput(message, expected, this.equals), isNot),
111
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream output: ${utils.printExpected(expected)}\nReceived stream output: ${utils.printReceived({
112
+ id: message.id,
113
+ text: getOutputText(message),
114
+ tool_calls: message.tool_calls?.map((tc) => ({
115
+ name: tc.name,
116
+ args: tc.args
117
+ })),
118
+ usage_metadata: message.usage_metadata,
119
+ response_metadata: message.response_metadata
120
+ })}`,
121
+ actual: message,
122
+ expected
123
+ };
124
+ }
125
+ /** Stream matchers for `expect.extend()`. */
126
+ const streamMatchers = {
127
+ toHaveStreamText,
128
+ toHaveStreamReasoning,
129
+ toHaveStreamToolCalls,
130
+ toHaveStreamUsage,
131
+ toHaveStreamOutput
132
+ };
133
+ //#endregion
134
+ exports.streamMatchers = streamMatchers;
135
+
136
+ //# sourceMappingURL=stream.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.cjs","names":[],"sources":["../../../src/utils/testing/stream.ts"],"sourcesContent":["import type { AIMessage } from \"../../messages/index.js\";\nimport type { UsageMetadata } from \"../../messages/metadata.js\";\nimport { ChatModelStream } from \"../../language_models/stream.js\";\n\n/**\n * The `this` context that Vitest provides to custom matchers via `expect.extend`.\n * @see https://vitest.dev/guide/extending-matchers.html\n */\ninterface ExpectExtendThis {\n isNot?: boolean;\n equals(a: unknown, b: unknown): boolean;\n utils: {\n matcherHint(\n name: string,\n received?: string,\n expected?: string,\n options?: { isNot?: boolean }\n ): string;\n printReceived(value: unknown): string;\n printExpected(value: unknown): string;\n };\n}\n\ninterface ExpectationResult {\n pass: boolean;\n message: () => string;\n actual?: unknown;\n expected?: unknown;\n}\n\nfunction isChatModelStream(received: unknown): received is ChatModelStream {\n if (received == null || typeof received !== \"object\") {\n return false;\n }\n const stream = received as ChatModelStream;\n return (\n typeof stream.text !== \"undefined\" &&\n typeof stream.toolCalls !== \"undefined\" &&\n typeof stream.reasoning !== \"undefined\" &&\n typeof stream.usage !== \"undefined\" &&\n typeof stream.output !== \"undefined\" &&\n typeof stream[Symbol.asyncIterator] === \"function\"\n );\n}\n\nfunction matchesPartialObject(\n actual: Record<string, unknown> | undefined,\n expected: Record<string, unknown>,\n equals: ExpectExtendThis[\"equals\"]\n): boolean {\n if (actual == null) {\n return false;\n }\n return Object.entries(expected).every(([key, value]) =>\n equals(actual[key], value)\n );\n}\n\nfunction matchesStreamUsage(\n actual: UsageMetadata | undefined,\n expected: StreamUsageExpectation,\n equals: ExpectExtendThis[\"equals\"]\n): boolean {\n if (actual == null) {\n return false;\n }\n return matchesPartialObject(\n actual as Record<string, unknown>,\n expected as Record<string, unknown>,\n equals\n );\n}\n\nfunction getOutputText(message: AIMessage): string | undefined {\n const content = message.content as Array<{ type: string; text?: string }>;\n return content.find((block) => block.type === \"text\")?.text;\n}\n\nfunction matchesStreamOutput(\n message: AIMessage,\n expected: StreamOutputExpectation,\n equals: ExpectExtendThis[\"equals\"]\n): boolean {\n if (expected.id !== undefined && message.id !== expected.id) {\n return false;\n }\n if (expected.text !== undefined && getOutputText(message) !== expected.text) {\n return false;\n }\n if (expected.toolCalls !== undefined) {\n const calls = message.tool_calls ?? [];\n if (calls.length !== expected.toolCalls.length) {\n return false;\n }\n for (let i = 0; i < expected.toolCalls.length; i++) {\n const call = calls[i];\n const exp = expected.toolCalls[i]!;\n if (call?.name !== exp.name || !equals(call.args, exp.args)) {\n return false;\n }\n }\n }\n if (\n expected.usage !== undefined &&\n !matchesStreamUsage(message.usage_metadata, expected.usage, equals)\n ) {\n return false;\n }\n if (\n expected.responseMetadata !== undefined &&\n !matchesPartialObject(\n message.response_metadata as Record<string, unknown>,\n expected.responseMetadata,\n equals\n )\n ) {\n return false;\n }\n return true;\n}\n\nfunction invalidStreamResult(\n received: unknown,\n matcherName: string,\n utils: ExpectExtendThis[\"utils\"]\n): ExpectationResult {\n return {\n pass: false,\n message: () =>\n `${utils.matcherHint(matcherName)}\\n\\n` +\n `Expected: ChatModelStream (return value of model.streamEvents(\"Hello\"))\\n` +\n `Received: ${utils.printReceived(received)}`,\n actual: received,\n expected: \"ChatModelStream\",\n };\n}\n\nfunction applyNot(pass: boolean, isNot?: boolean): boolean {\n return isNot ? !pass : pass;\n}\n\nexport async function toHaveStreamText(\n this: ExpectExtendThis,\n received: unknown,\n expected: string\n): Promise<ExpectationResult> {\n const { isNot, utils } = this;\n const matcherName = \"toHaveStreamText\";\n\n if (!isChatModelStream(received)) {\n return invalidStreamResult(received, matcherName, utils);\n }\n\n const actual = await received.text;\n const pass = applyNot(actual === expected, isNot);\n\n return {\n pass,\n message: () =>\n `${utils.matcherHint(matcherName, undefined, undefined, { isNot })}\\n\\n` +\n `Expected stream text: ${isNot ? \"not \" : \"\"}${utils.printExpected(expected)}\\n` +\n `Received stream text: ${utils.printReceived(actual)}`,\n actual,\n expected,\n };\n}\n\nexport async function toHaveStreamReasoning(\n this: ExpectExtendThis,\n received: unknown,\n expected: string\n): Promise<ExpectationResult> {\n const { isNot, utils } = this;\n const matcherName = \"toHaveStreamReasoning\";\n\n if (!isChatModelStream(received)) {\n return invalidStreamResult(received, matcherName, utils);\n }\n\n const actual = await received.reasoning;\n const pass = applyNot(actual === expected, isNot);\n\n return {\n pass,\n message: () =>\n `${utils.matcherHint(matcherName, undefined, undefined, { isNot })}\\n\\n` +\n `Expected stream reasoning: ${isNot ? \"not \" : \"\"}${utils.printExpected(expected)}\\n` +\n `Received stream reasoning: ${utils.printReceived(actual)}`,\n actual,\n expected,\n };\n}\n\nexport type StreamToolCallExpectation = {\n name: string;\n args: Record<string, unknown>;\n};\n\nexport type StreamUsageExpectation = {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n input_token_details?: Record<string, unknown>;\n output_token_details?: Record<string, unknown>;\n};\n\nexport type StreamOutputExpectation = {\n id?: string;\n text?: string;\n toolCalls?: StreamToolCallExpectation[];\n usage?: StreamUsageExpectation;\n responseMetadata?: Record<string, unknown>;\n};\n\nexport async function toHaveStreamToolCalls(\n this: ExpectExtendThis,\n received: unknown,\n expected: StreamToolCallExpectation[]\n): Promise<ExpectationResult> {\n const { isNot, utils } = this;\n const matcherName = \"toHaveStreamToolCalls\";\n\n if (!isChatModelStream(received)) {\n return invalidStreamResult(received, matcherName, utils);\n }\n\n const actual = await received.toolCalls;\n\n let pass =\n actual.length === expected.length &&\n expected.every((exp, i) => {\n const call = actual[i];\n return call?.name === exp.name && this.equals(call.args, exp.args);\n });\n pass = applyNot(pass, isNot);\n\n return {\n pass,\n message: () =>\n `${utils.matcherHint(matcherName, undefined, undefined, { isNot })}\\n\\n` +\n `Expected stream tool calls: ${utils.printExpected(expected)}\\n` +\n `Received stream tool calls: ${utils.printReceived(\n actual.map((tc) => ({ name: tc.name, args: tc.args }))\n )}`,\n actual: actual.map((tc) => ({ name: tc.name, args: tc.args })),\n expected,\n };\n}\n\nexport async function toHaveStreamUsage(\n this: ExpectExtendThis,\n received: unknown,\n expected: StreamUsageExpectation\n): Promise<ExpectationResult> {\n const { isNot, utils } = this;\n const matcherName = \"toHaveStreamUsage\";\n\n if (!isChatModelStream(received)) {\n return invalidStreamResult(received, matcherName, utils);\n }\n\n const actual = await received.usage;\n const pass = applyNot(\n matchesStreamUsage(actual, expected, this.equals),\n isNot\n );\n\n return {\n pass,\n message: () =>\n `${utils.matcherHint(matcherName, undefined, undefined, { isNot })}\\n\\n` +\n `Expected stream usage: ${utils.printExpected(expected)}\\n` +\n `Received stream usage: ${utils.printReceived(actual)}`,\n actual,\n expected,\n };\n}\n\nexport async function toHaveStreamOutput(\n this: ExpectExtendThis,\n received: unknown,\n expected: StreamOutputExpectation\n): Promise<ExpectationResult> {\n const { isNot, utils } = this;\n const matcherName = \"toHaveStreamOutput\";\n\n if (!isChatModelStream(received)) {\n return invalidStreamResult(received, matcherName, utils);\n }\n\n const message = await received.output;\n const pass = applyNot(\n matchesStreamOutput(message, expected, this.equals),\n isNot\n );\n\n return {\n pass,\n message: () =>\n `${utils.matcherHint(matcherName, undefined, undefined, { isNot })}\\n\\n` +\n `Expected stream output: ${utils.printExpected(expected)}\\n` +\n `Received stream output: ${utils.printReceived({\n id: message.id,\n text: getOutputText(message),\n tool_calls: message.tool_calls?.map((tc) => ({\n name: tc.name,\n args: tc.args,\n })),\n usage_metadata: message.usage_metadata,\n response_metadata: message.response_metadata,\n })}`,\n actual: message,\n expected,\n };\n}\n\n/** Stream matchers for `expect.extend()`. */\nexport const streamMatchers = {\n toHaveStreamText,\n toHaveStreamReasoning,\n toHaveStreamToolCalls,\n toHaveStreamUsage,\n toHaveStreamOutput,\n};\n\n/**\n * Custom assertion helpers for values returned by `BaseChatModel.streamEvents()`.\n *\n * These matchers consume the stream lazily through the corresponding\n * `ChatModelStream` promise-backed properties.\n *\n * @typeParam R - The assertion return type provided by the test framework.\n */\nexport interface StreamMatchers<R = unknown> {\n /**\n * Asserts that the stream resolves to the expected concatenated text.\n *\n * @param expected - The exact text expected from `ChatModelStream.text`.\n */\n toHaveStreamText(expected: string): R;\n\n /**\n * Asserts that the stream resolves to the expected concatenated reasoning text.\n *\n * @param expected - The exact reasoning text expected from `ChatModelStream.reasoning`.\n */\n toHaveStreamReasoning(expected: string): R;\n\n /**\n * Asserts that the stream resolves to the expected ordered tool calls.\n *\n * @param expected - Tool call names and arguments expected from `ChatModelStream.toolCalls`.\n */\n toHaveStreamToolCalls(expected: StreamToolCallExpectation[]): R;\n\n /**\n * Asserts that the stream resolves to usage metadata matching the expected fields.\n *\n * @param expected - A partial usage metadata object expected from `ChatModelStream.usage`.\n */\n toHaveStreamUsage(expected: StreamUsageExpectation): R;\n\n /**\n * Asserts that the final streamed output message matches the expected fields.\n *\n * @param expected - A partial output expectation checked against `ChatModelStream.output`.\n */\n toHaveStreamOutput(expected: StreamOutputExpectation): R;\n}\n"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ //#region src/utils/testing/stream.d.ts
2
+ /**
3
+ * The `this` context that Vitest provides to custom matchers via `expect.extend`.
4
+ * @see https://vitest.dev/guide/extending-matchers.html
5
+ */
6
+ interface ExpectExtendThis {
7
+ isNot?: boolean;
8
+ equals(a: unknown, b: unknown): boolean;
9
+ utils: {
10
+ matcherHint(name: string, received?: string, expected?: string, options?: {
11
+ isNot?: boolean;
12
+ }): string;
13
+ printReceived(value: unknown): string;
14
+ printExpected(value: unknown): string;
15
+ };
16
+ }
17
+ interface ExpectationResult {
18
+ pass: boolean;
19
+ message: () => string;
20
+ actual?: unknown;
21
+ expected?: unknown;
22
+ }
23
+ declare function toHaveStreamText(this: ExpectExtendThis, received: unknown, expected: string): Promise<ExpectationResult>;
24
+ declare function toHaveStreamReasoning(this: ExpectExtendThis, received: unknown, expected: string): Promise<ExpectationResult>;
25
+ type StreamToolCallExpectation = {
26
+ name: string;
27
+ args: Record<string, unknown>;
28
+ };
29
+ type StreamUsageExpectation = {
30
+ input_tokens?: number;
31
+ output_tokens?: number;
32
+ total_tokens?: number;
33
+ input_token_details?: Record<string, unknown>;
34
+ output_token_details?: Record<string, unknown>;
35
+ };
36
+ type StreamOutputExpectation = {
37
+ id?: string;
38
+ text?: string;
39
+ toolCalls?: StreamToolCallExpectation[];
40
+ usage?: StreamUsageExpectation;
41
+ responseMetadata?: Record<string, unknown>;
42
+ };
43
+ declare function toHaveStreamToolCalls(this: ExpectExtendThis, received: unknown, expected: StreamToolCallExpectation[]): Promise<ExpectationResult>;
44
+ declare function toHaveStreamUsage(this: ExpectExtendThis, received: unknown, expected: StreamUsageExpectation): Promise<ExpectationResult>;
45
+ declare function toHaveStreamOutput(this: ExpectExtendThis, received: unknown, expected: StreamOutputExpectation): Promise<ExpectationResult>;
46
+ /** Stream matchers for `expect.extend()`. */
47
+ declare const streamMatchers: {
48
+ toHaveStreamText: typeof toHaveStreamText;
49
+ toHaveStreamReasoning: typeof toHaveStreamReasoning;
50
+ toHaveStreamToolCalls: typeof toHaveStreamToolCalls;
51
+ toHaveStreamUsage: typeof toHaveStreamUsage;
52
+ toHaveStreamOutput: typeof toHaveStreamOutput;
53
+ };
54
+ /**
55
+ * Custom assertion helpers for values returned by `BaseChatModel.streamEvents()`.
56
+ *
57
+ * These matchers consume the stream lazily through the corresponding
58
+ * `ChatModelStream` promise-backed properties.
59
+ *
60
+ * @typeParam R - The assertion return type provided by the test framework.
61
+ */
62
+ interface StreamMatchers<R = unknown> {
63
+ /**
64
+ * Asserts that the stream resolves to the expected concatenated text.
65
+ *
66
+ * @param expected - The exact text expected from `ChatModelStream.text`.
67
+ */
68
+ toHaveStreamText(expected: string): R;
69
+ /**
70
+ * Asserts that the stream resolves to the expected concatenated reasoning text.
71
+ *
72
+ * @param expected - The exact reasoning text expected from `ChatModelStream.reasoning`.
73
+ */
74
+ toHaveStreamReasoning(expected: string): R;
75
+ /**
76
+ * Asserts that the stream resolves to the expected ordered tool calls.
77
+ *
78
+ * @param expected - Tool call names and arguments expected from `ChatModelStream.toolCalls`.
79
+ */
80
+ toHaveStreamToolCalls(expected: StreamToolCallExpectation[]): R;
81
+ /**
82
+ * Asserts that the stream resolves to usage metadata matching the expected fields.
83
+ *
84
+ * @param expected - A partial usage metadata object expected from `ChatModelStream.usage`.
85
+ */
86
+ toHaveStreamUsage(expected: StreamUsageExpectation): R;
87
+ /**
88
+ * Asserts that the final streamed output message matches the expected fields.
89
+ *
90
+ * @param expected - A partial output expectation checked against `ChatModelStream.output`.
91
+ */
92
+ toHaveStreamOutput(expected: StreamOutputExpectation): R;
93
+ }
94
+ //#endregion
95
+ export { StreamMatchers, StreamOutputExpectation, StreamToolCallExpectation, StreamUsageExpectation, streamMatchers, toHaveStreamOutput, toHaveStreamReasoning, toHaveStreamText, toHaveStreamToolCalls, toHaveStreamUsage };
96
+ //# sourceMappingURL=stream.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.cts","names":[],"sources":["../../../src/utils/testing/stream.ts"],"mappings":";;;;;UAQU,gBAAA;EACR,KAAA;EACA,MAAA,CAAO,CAAA,WAAY,CAAA;EACnB,KAAA;IACE,WAAA,CACE,IAAA,UACA,QAAA,WACA,QAAA,WACA,OAAA;MAAY,KAAA;IAAA;IAEd,aAAA,CAAc,KAAA;IACd,aAAA,CAAc,KAAA;EAAA;AAAA;AAAA,UAIR,iBAAA;EACR,IAAA;EACA,OAAA;EACA,MAAA;EACA,QAAA;AAAA;AAAA,iBAkHoB,gBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,WACC,OAAA,CAAQ,iBAAA;AAAA,iBAsBW,qBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,WACC,OAAA,CAAQ,iBAAA;AAAA,KAsBC,yBAAA;EACV,IAAA;EACA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGI,sBAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA,GAAsB,MAAA;EACtB,oBAAA,GAAuB,MAAA;AAAA;AAAA,KAGb,uBAAA;EACV,EAAA;EACA,IAAA;EACA,SAAA,GAAY,yBAAA;EACZ,KAAA,GAAQ,sBAAA;EACR,gBAAA,GAAmB,MAAA;AAAA;AAAA,iBAGC,qBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,yBAAA,KACT,OAAA,CAAQ,iBAAA;AAAA,iBA+BW,iBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,sBAAA,GACT,OAAA,CAAQ,iBAAA;AAAA,iBAyBW,kBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,uBAAA,GACT,OAAA,CAAQ,iBAAA;;cAmCE,cAAA;;;;;;;;;;;;;;;UAgBI,cAAA;EAlKN;;;AAsBX;;EAkJE,gBAAA,CAAiB,QAAA,WAAmB,CAAA;EAhJxB;;;;;EAuJZ,qBAAA,CAAsB,QAAA,WAAmB,CAAA;EApJ/B;;;;;EA2JV,qBAAA,CAAsB,QAAA,EAAU,yBAAA,KAA8B,CAAA;EAxJ9D;;;;;EA+JA,iBAAA,CAAkB,QAAA,EAAU,sBAAA,GAAyB,CAAA;EA7JxB;AAG/B;;;;EAiKE,kBAAA,CAAmB,QAAA,EAAU,uBAAA,GAA0B,CAAA;AAAA"}
@@ -0,0 +1,96 @@
1
+ //#region src/utils/testing/stream.d.ts
2
+ /**
3
+ * The `this` context that Vitest provides to custom matchers via `expect.extend`.
4
+ * @see https://vitest.dev/guide/extending-matchers.html
5
+ */
6
+ interface ExpectExtendThis {
7
+ isNot?: boolean;
8
+ equals(a: unknown, b: unknown): boolean;
9
+ utils: {
10
+ matcherHint(name: string, received?: string, expected?: string, options?: {
11
+ isNot?: boolean;
12
+ }): string;
13
+ printReceived(value: unknown): string;
14
+ printExpected(value: unknown): string;
15
+ };
16
+ }
17
+ interface ExpectationResult {
18
+ pass: boolean;
19
+ message: () => string;
20
+ actual?: unknown;
21
+ expected?: unknown;
22
+ }
23
+ declare function toHaveStreamText(this: ExpectExtendThis, received: unknown, expected: string): Promise<ExpectationResult>;
24
+ declare function toHaveStreamReasoning(this: ExpectExtendThis, received: unknown, expected: string): Promise<ExpectationResult>;
25
+ type StreamToolCallExpectation = {
26
+ name: string;
27
+ args: Record<string, unknown>;
28
+ };
29
+ type StreamUsageExpectation = {
30
+ input_tokens?: number;
31
+ output_tokens?: number;
32
+ total_tokens?: number;
33
+ input_token_details?: Record<string, unknown>;
34
+ output_token_details?: Record<string, unknown>;
35
+ };
36
+ type StreamOutputExpectation = {
37
+ id?: string;
38
+ text?: string;
39
+ toolCalls?: StreamToolCallExpectation[];
40
+ usage?: StreamUsageExpectation;
41
+ responseMetadata?: Record<string, unknown>;
42
+ };
43
+ declare function toHaveStreamToolCalls(this: ExpectExtendThis, received: unknown, expected: StreamToolCallExpectation[]): Promise<ExpectationResult>;
44
+ declare function toHaveStreamUsage(this: ExpectExtendThis, received: unknown, expected: StreamUsageExpectation): Promise<ExpectationResult>;
45
+ declare function toHaveStreamOutput(this: ExpectExtendThis, received: unknown, expected: StreamOutputExpectation): Promise<ExpectationResult>;
46
+ /** Stream matchers for `expect.extend()`. */
47
+ declare const streamMatchers: {
48
+ toHaveStreamText: typeof toHaveStreamText;
49
+ toHaveStreamReasoning: typeof toHaveStreamReasoning;
50
+ toHaveStreamToolCalls: typeof toHaveStreamToolCalls;
51
+ toHaveStreamUsage: typeof toHaveStreamUsage;
52
+ toHaveStreamOutput: typeof toHaveStreamOutput;
53
+ };
54
+ /**
55
+ * Custom assertion helpers for values returned by `BaseChatModel.streamEvents()`.
56
+ *
57
+ * These matchers consume the stream lazily through the corresponding
58
+ * `ChatModelStream` promise-backed properties.
59
+ *
60
+ * @typeParam R - The assertion return type provided by the test framework.
61
+ */
62
+ interface StreamMatchers<R = unknown> {
63
+ /**
64
+ * Asserts that the stream resolves to the expected concatenated text.
65
+ *
66
+ * @param expected - The exact text expected from `ChatModelStream.text`.
67
+ */
68
+ toHaveStreamText(expected: string): R;
69
+ /**
70
+ * Asserts that the stream resolves to the expected concatenated reasoning text.
71
+ *
72
+ * @param expected - The exact reasoning text expected from `ChatModelStream.reasoning`.
73
+ */
74
+ toHaveStreamReasoning(expected: string): R;
75
+ /**
76
+ * Asserts that the stream resolves to the expected ordered tool calls.
77
+ *
78
+ * @param expected - Tool call names and arguments expected from `ChatModelStream.toolCalls`.
79
+ */
80
+ toHaveStreamToolCalls(expected: StreamToolCallExpectation[]): R;
81
+ /**
82
+ * Asserts that the stream resolves to usage metadata matching the expected fields.
83
+ *
84
+ * @param expected - A partial usage metadata object expected from `ChatModelStream.usage`.
85
+ */
86
+ toHaveStreamUsage(expected: StreamUsageExpectation): R;
87
+ /**
88
+ * Asserts that the final streamed output message matches the expected fields.
89
+ *
90
+ * @param expected - A partial output expectation checked against `ChatModelStream.output`.
91
+ */
92
+ toHaveStreamOutput(expected: StreamOutputExpectation): R;
93
+ }
94
+ //#endregion
95
+ export { StreamMatchers, StreamOutputExpectation, StreamToolCallExpectation, StreamUsageExpectation, streamMatchers, toHaveStreamOutput, toHaveStreamReasoning, toHaveStreamText, toHaveStreamToolCalls, toHaveStreamUsage };
96
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","names":[],"sources":["../../../src/utils/testing/stream.ts"],"mappings":";;;;;UAQU,gBAAA;EACR,KAAA;EACA,MAAA,CAAO,CAAA,WAAY,CAAA;EACnB,KAAA;IACE,WAAA,CACE,IAAA,UACA,QAAA,WACA,QAAA,WACA,OAAA;MAAY,KAAA;IAAA;IAEd,aAAA,CAAc,KAAA;IACd,aAAA,CAAc,KAAA;EAAA;AAAA;AAAA,UAIR,iBAAA;EACR,IAAA;EACA,OAAA;EACA,MAAA;EACA,QAAA;AAAA;AAAA,iBAkHoB,gBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,WACC,OAAA,CAAQ,iBAAA;AAAA,iBAsBW,qBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,WACC,OAAA,CAAQ,iBAAA;AAAA,KAsBC,yBAAA;EACV,IAAA;EACA,IAAA,EAAM,MAAA;AAAA;AAAA,KAGI,sBAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA,GAAsB,MAAA;EACtB,oBAAA,GAAuB,MAAA;AAAA;AAAA,KAGb,uBAAA;EACV,EAAA;EACA,IAAA;EACA,SAAA,GAAY,yBAAA;EACZ,KAAA,GAAQ,sBAAA;EACR,gBAAA,GAAmB,MAAA;AAAA;AAAA,iBAGC,qBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,yBAAA,KACT,OAAA,CAAQ,iBAAA;AAAA,iBA+BW,iBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,sBAAA,GACT,OAAA,CAAQ,iBAAA;AAAA,iBAyBW,kBAAA,CACpB,IAAA,EAAM,gBAAA,EACN,QAAA,WACA,QAAA,EAAU,uBAAA,GACT,OAAA,CAAQ,iBAAA;;cAmCE,cAAA;;;;;;;;;;;;;;;UAgBI,cAAA;EAlKN;;;AAsBX;;EAkJE,gBAAA,CAAiB,QAAA,WAAmB,CAAA;EAhJxB;;;;;EAuJZ,qBAAA,CAAsB,QAAA,WAAmB,CAAA;EApJ/B;;;;;EA2JV,qBAAA,CAAsB,QAAA,EAAU,yBAAA,KAA8B,CAAA;EAxJ9D;;;;;EA+JA,iBAAA,CAAkB,QAAA,EAAU,sBAAA,GAAyB,CAAA;EA7JxB;AAG/B;;;;EAiKE,kBAAA,CAAmB,QAAA,EAAU,uBAAA,GAA0B,CAAA;AAAA"}
@@ -0,0 +1,136 @@
1
+ //#region src/utils/testing/stream.ts
2
+ function isChatModelStream(received) {
3
+ if (received == null || typeof received !== "object") return false;
4
+ const stream = received;
5
+ return typeof stream.text !== "undefined" && typeof stream.toolCalls !== "undefined" && typeof stream.reasoning !== "undefined" && typeof stream.usage !== "undefined" && typeof stream.output !== "undefined" && typeof stream[Symbol.asyncIterator] === "function";
6
+ }
7
+ function matchesPartialObject(actual, expected, equals) {
8
+ if (actual == null) return false;
9
+ return Object.entries(expected).every(([key, value]) => equals(actual[key], value));
10
+ }
11
+ function matchesStreamUsage(actual, expected, equals) {
12
+ if (actual == null) return false;
13
+ return matchesPartialObject(actual, expected, equals);
14
+ }
15
+ function getOutputText(message) {
16
+ return message.content.find((block) => block.type === "text")?.text;
17
+ }
18
+ function matchesStreamOutput(message, expected, equals) {
19
+ if (expected.id !== void 0 && message.id !== expected.id) return false;
20
+ if (expected.text !== void 0 && getOutputText(message) !== expected.text) return false;
21
+ if (expected.toolCalls !== void 0) {
22
+ const calls = message.tool_calls ?? [];
23
+ if (calls.length !== expected.toolCalls.length) return false;
24
+ for (let i = 0; i < expected.toolCalls.length; i++) {
25
+ const call = calls[i];
26
+ const exp = expected.toolCalls[i];
27
+ if (call?.name !== exp.name || !equals(call.args, exp.args)) return false;
28
+ }
29
+ }
30
+ if (expected.usage !== void 0 && !matchesStreamUsage(message.usage_metadata, expected.usage, equals)) return false;
31
+ if (expected.responseMetadata !== void 0 && !matchesPartialObject(message.response_metadata, expected.responseMetadata, equals)) return false;
32
+ return true;
33
+ }
34
+ function invalidStreamResult(received, matcherName, utils) {
35
+ return {
36
+ pass: false,
37
+ message: () => `${utils.matcherHint(matcherName)}\n\nExpected: ChatModelStream (return value of model.streamEvents("Hello"))\nReceived: ${utils.printReceived(received)}`,
38
+ actual: received,
39
+ expected: "ChatModelStream"
40
+ };
41
+ }
42
+ function applyNot(pass, isNot) {
43
+ return isNot ? !pass : pass;
44
+ }
45
+ async function toHaveStreamText(received, expected) {
46
+ const { isNot, utils } = this;
47
+ const matcherName = "toHaveStreamText";
48
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
49
+ const actual = await received.text;
50
+ return {
51
+ pass: applyNot(actual === expected, isNot),
52
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream text: ${isNot ? "not " : ""}${utils.printExpected(expected)}\nReceived stream text: ${utils.printReceived(actual)}`,
53
+ actual,
54
+ expected
55
+ };
56
+ }
57
+ async function toHaveStreamReasoning(received, expected) {
58
+ const { isNot, utils } = this;
59
+ const matcherName = "toHaveStreamReasoning";
60
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
61
+ const actual = await received.reasoning;
62
+ return {
63
+ pass: applyNot(actual === expected, isNot),
64
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream reasoning: ${isNot ? "not " : ""}${utils.printExpected(expected)}\nReceived stream reasoning: ${utils.printReceived(actual)}`,
65
+ actual,
66
+ expected
67
+ };
68
+ }
69
+ async function toHaveStreamToolCalls(received, expected) {
70
+ const { isNot, utils } = this;
71
+ const matcherName = "toHaveStreamToolCalls";
72
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
73
+ const actual = await received.toolCalls;
74
+ let pass = actual.length === expected.length && expected.every((exp, i) => {
75
+ const call = actual[i];
76
+ return call?.name === exp.name && this.equals(call.args, exp.args);
77
+ });
78
+ pass = applyNot(pass, isNot);
79
+ return {
80
+ pass,
81
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream tool calls: ${utils.printExpected(expected)}\nReceived stream tool calls: ${utils.printReceived(actual.map((tc) => ({
82
+ name: tc.name,
83
+ args: tc.args
84
+ })))}`,
85
+ actual: actual.map((tc) => ({
86
+ name: tc.name,
87
+ args: tc.args
88
+ })),
89
+ expected
90
+ };
91
+ }
92
+ async function toHaveStreamUsage(received, expected) {
93
+ const { isNot, utils } = this;
94
+ const matcherName = "toHaveStreamUsage";
95
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
96
+ const actual = await received.usage;
97
+ return {
98
+ pass: applyNot(matchesStreamUsage(actual, expected, this.equals), isNot),
99
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream usage: ${utils.printExpected(expected)}\nReceived stream usage: ${utils.printReceived(actual)}`,
100
+ actual,
101
+ expected
102
+ };
103
+ }
104
+ async function toHaveStreamOutput(received, expected) {
105
+ const { isNot, utils } = this;
106
+ const matcherName = "toHaveStreamOutput";
107
+ if (!isChatModelStream(received)) return invalidStreamResult(received, matcherName, utils);
108
+ const message = await received.output;
109
+ return {
110
+ pass: applyNot(matchesStreamOutput(message, expected, this.equals), isNot),
111
+ message: () => `${utils.matcherHint(matcherName, void 0, void 0, { isNot })}\n\nExpected stream output: ${utils.printExpected(expected)}\nReceived stream output: ${utils.printReceived({
112
+ id: message.id,
113
+ text: getOutputText(message),
114
+ tool_calls: message.tool_calls?.map((tc) => ({
115
+ name: tc.name,
116
+ args: tc.args
117
+ })),
118
+ usage_metadata: message.usage_metadata,
119
+ response_metadata: message.response_metadata
120
+ })}`,
121
+ actual: message,
122
+ expected
123
+ };
124
+ }
125
+ /** Stream matchers for `expect.extend()`. */
126
+ const streamMatchers = {
127
+ toHaveStreamText,
128
+ toHaveStreamReasoning,
129
+ toHaveStreamToolCalls,
130
+ toHaveStreamUsage,
131
+ toHaveStreamOutput
132
+ };
133
+ //#endregion
134
+ export { streamMatchers };
135
+
136
+ //# sourceMappingURL=stream.js.map