@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
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.cjs","names":["BaseChatModel","AIMessage","toJsonSchema","ChatGenerationChunk","AIMessageChunk","RunnableLambda"],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.cjs","names":["BaseChatModel","AIMessage","toJsonSchema","ChatGenerationChunk","AIMessageChunk","RunnableLambda"],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chat_models.js","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.js","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"sourcesContent":["import { CallbackManagerForLLMRun } from \"../../callbacks/manager.js\";\nimport {\n BaseChatModel,\n BaseChatModelCallOptions,\n BaseChatModelParams,\n} from \"../../language_models/chat_models.js\";\nimport { BaseLLMParams } from \"../../language_models/llms.js\";\nimport {\n BaseMessage,\n AIMessage,\n AIMessageChunk,\n} from \"../../messages/index.js\";\nimport { type ChatResult, ChatGenerationChunk } from \"../../outputs.js\";\nimport { Runnable, RunnableLambda } from \"../../runnables/base.js\";\nimport { StructuredTool } from \"../../tools/index.js\";\nimport {\n StructuredOutputMethodParams,\n BaseLanguageModelInput,\n StructuredOutputMethodOptions,\n} from \"../../language_models/base.js\";\n\nimport { toJsonSchema } from \"../json_schema.js\";\nimport { InteropZodType } from \"../types/zod.js\";\n\n/** Minimal shape actually needed by `bindTools` */\nexport interface ToolSpec {\n name: string;\n description?: string;\n schema: InteropZodType | Record<string, unknown>; // Either a Zod schema *or* a plain JSON-Schema object\n}\n\n/**\n * Interface specific to the Fake Streaming Chat model.\n */\nexport interface FakeStreamingChatModelCallOptions extends BaseChatModelCallOptions {}\n/**\n * Interface for the Constructor-field specific to the Fake Streaming Chat model (all optional because we fill in defaults).\n */\nexport interface FakeStreamingChatModelFields extends BaseChatModelParams {\n /** Milliseconds to pause between fallback char-by-char chunks */\n sleep?: number;\n\n /** Full AI messages to fall back to when no `chunks` supplied */\n responses?: BaseMessage[];\n\n /** Exact chunks to emit (can include tool-call deltas) */\n chunks?: AIMessageChunk[];\n\n /** How tool specs are formatted in `bindTools` */\n toolStyle?: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\";\n\n /** Throw this error instead of streaming (useful in tests) */\n thrownErrorString?: string;\n}\n\nexport class FakeChatModel extends BaseChatModel {\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake\";\n }\n\n async _generate(\n messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (options?.stop?.length) {\n return {\n generations: [\n {\n message: new AIMessage(options.stop[0]),\n text: options.stop[0],\n },\n ],\n };\n }\n const text = messages\n .map((m) => {\n if (typeof m.content === \"string\") {\n return m.content;\n }\n return JSON.stringify(m.content, null, 2);\n })\n .join(\"\\n\");\n await runManager?.handleLLMNewToken(text);\n return {\n generations: [\n {\n message: new AIMessage(text),\n text,\n },\n ],\n llmOutput: {},\n };\n }\n}\n\nexport class FakeStreamingChatModel extends BaseChatModel<FakeStreamingChatModelCallOptions> {\n sleep = 50;\n\n responses: BaseMessage[] = [];\n\n chunks: AIMessageChunk[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n thrownErrorString?: string;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n constructor({\n sleep = 50,\n responses = [],\n chunks = [],\n toolStyle = \"openai\",\n thrownErrorString,\n ...rest\n }: FakeStreamingChatModelFields & BaseLLMParams) {\n super(rest);\n this.sleep = sleep;\n this.responses = responses;\n this.chunks = chunks;\n this.toolStyle = toolStyle;\n this.thrownErrorString = thrownErrorString;\n }\n\n _llmType() {\n return \"fake\";\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n /* creating a *new* instance – mirrors LangChain .bind semantics for type-safety and avoiding noise */\n const next = new FakeStreamingChatModel({\n sleep: this.sleep,\n responses: this.responses,\n chunks: this.chunks,\n toolStyle: this.toolStyle,\n thrownErrorString: this.thrownErrorString,\n });\n next.tools = merged;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n async _generate(\n messages: BaseMessage[],\n _options: this[\"ParsedCallOptions\"],\n _runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n\n const content = this.responses?.[0]?.content ?? messages[0].content ?? \"\";\n\n const generation: ChatResult = {\n generations: [\n {\n text: \"\",\n message: new AIMessage({\n content,\n tool_calls: this.chunks?.[0]?.tool_calls,\n }),\n },\n ],\n };\n\n return generation;\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.thrownErrorString) {\n throw new Error(this.thrownErrorString);\n }\n if (this.chunks?.length) {\n for (const msgChunk of this.chunks) {\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: msgChunk.content,\n tool_calls: msgChunk.tool_calls,\n additional_kwargs: msgChunk.additional_kwargs ?? {},\n }),\n text: msgChunk.content?.toString() ?? \"\",\n });\n\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n msgChunk.content as string,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n return;\n }\n\n const fallback =\n this.responses?.[0] ??\n new AIMessage(\n typeof _messages[0].content === \"string\" ? _messages[0].content : \"\"\n );\n const text = typeof fallback.content === \"string\" ? fallback.content : \"\";\n\n for (const ch of text) {\n await new Promise((r) => setTimeout(r, this.sleep));\n const cg = new ChatGenerationChunk({\n message: new AIMessageChunk({ content: ch }),\n text: ch,\n });\n if (options.signal?.aborted) break;\n yield cg;\n await runManager?.handleLLMNewToken(\n ch,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: cg }\n );\n }\n }\n}\n\n/**\n * Interface for the input parameters specific to the Fake List Chat model.\n */\nexport interface FakeChatInput extends BaseChatModelParams {\n /** Responses to return */\n responses: string[];\n\n /** Time to sleep in milliseconds between responses */\n sleep?: number;\n\n emitCustomEvent?: boolean;\n\n /**\n * Generation info to include on the last chunk during streaming.\n * This gets merged into response_metadata by the base chat model.\n * Useful for testing response_metadata propagation (e.g., finish_reason).\n */\n generationInfo?: Record<string, unknown>;\n}\n\nexport interface FakeListChatModelCallOptions extends BaseChatModelCallOptions {\n thrownErrorString?: string;\n}\n\n/**\n * A fake Chat Model that returns a predefined list of responses. It can be used\n * for testing purposes.\n * @example\n * ```typescript\n * const chat = new FakeListChatModel({\n * responses: [\"I'll callback later.\", \"You 'console' them!\"]\n * });\n *\n * const firstMessage = new HumanMessage(\"You want to hear a JavaScript joke?\");\n * const secondMessage = new HumanMessage(\"How do you cheer up a JavaScript developer?\");\n *\n * // Call the chat model with a message and log the response\n * const firstResponse = await chat.call([firstMessage]);\n * console.log({ firstResponse });\n *\n * const secondResponse = await chat.call([secondMessage]);\n * console.log({ secondResponse });\n * ```\n */\nexport class FakeListChatModel extends BaseChatModel<FakeListChatModelCallOptions> {\n static lc_name() {\n return \"FakeListChatModel\";\n }\n\n lc_serializable = true;\n\n responses: string[];\n\n i = 0;\n\n sleep?: number;\n\n emitCustomEvent = false;\n\n generationInfo?: Record<string, unknown>;\n\n private tools: (StructuredTool | ToolSpec)[] = [];\n\n toolStyle: \"openai\" | \"anthropic\" | \"bedrock\" | \"google\" = \"openai\";\n\n constructor(params: FakeChatInput) {\n super(params);\n const { responses, sleep, emitCustomEvent, generationInfo } = params;\n this.responses = responses;\n this.sleep = sleep;\n this.emitCustomEvent = emitCustomEvent ?? this.emitCustomEvent;\n this.generationInfo = generationInfo;\n }\n\n _combineLLMOutput() {\n return [];\n }\n\n _llmType(): string {\n return \"fake-list\";\n }\n\n async _generate(\n _messages: BaseMessage[],\n options?: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n if (options?.stop?.length) {\n return {\n generations: [this._formatGeneration(options.stop[0])],\n };\n } else {\n const response = this._currentResponse();\n this._incrementResponse();\n\n return {\n generations: [this._formatGeneration(response)],\n llmOutput: {},\n };\n }\n }\n\n _formatGeneration(text: string) {\n return {\n message: new AIMessage(text),\n text,\n };\n }\n\n async *_streamResponseChunks(\n _messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const response = this._currentResponse();\n this._incrementResponse();\n if (this.emitCustomEvent) {\n await runManager?.handleCustomEvent(\"some_test_event\", {\n someval: true,\n });\n }\n\n const responseChars = [...response];\n for (let i = 0; i < responseChars.length; i++) {\n const text = responseChars[i];\n const isLastChunk = i === responseChars.length - 1;\n await this._sleepIfRequested();\n if (options?.thrownErrorString) {\n throw new Error(options.thrownErrorString);\n }\n // Include generationInfo on the last chunk (like real providers do)\n // This gets merged into response_metadata by the base chat model\n const chunk = this._createResponseChunk(\n text,\n isLastChunk ? this.generationInfo : undefined\n );\n if (options.signal?.aborted) break;\n yield chunk;\n // oxlint-disable-next-line no-void\n void runManager?.handleLLMNewToken(text);\n }\n }\n\n async _sleepIfRequested() {\n if (this.sleep !== undefined) {\n await this._sleep();\n }\n }\n\n async _sleep() {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), this.sleep);\n });\n }\n\n _createResponseChunk(\n text: string,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n generationInfo?: Record<string, any>\n ): ChatGenerationChunk {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({ content: text }),\n text,\n generationInfo,\n });\n }\n\n _currentResponse() {\n return this.responses[this.i];\n }\n\n _incrementResponse() {\n if (this.i < this.responses.length - 1) {\n this.i += 1;\n } else {\n this.i = 0;\n }\n }\n\n bindTools(tools: (StructuredTool | ToolSpec)[]) {\n const merged = [...this.tools, ...tools];\n\n const toolDicts = merged.map((t) => {\n switch (this.toolStyle) {\n case \"openai\":\n return {\n type: \"function\",\n function: {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n },\n };\n case \"anthropic\":\n return {\n name: t.name,\n description: t.description,\n input_schema: toJsonSchema(t.schema),\n };\n case \"bedrock\":\n return {\n toolSpec: {\n name: t.name,\n description: t.description,\n inputSchema: toJsonSchema(t.schema),\n },\n };\n case \"google\":\n return {\n name: t.name,\n description: t.description,\n parameters: toJsonSchema(t.schema),\n };\n default:\n throw new Error(`Unsupported tool style: ${this.toolStyle}`);\n }\n });\n\n const wrapped =\n this.toolStyle === \"google\"\n ? [{ functionDeclarations: toolDicts }]\n : toolDicts;\n\n const next = new FakeListChatModel({\n responses: this.responses,\n sleep: this.sleep,\n emitCustomEvent: this.emitCustomEvent,\n generationInfo: this.generationInfo,\n });\n next.tools = merged;\n next.toolStyle = this.toolStyle;\n next.i = this.i;\n\n return next.withConfig({ tools: wrapped } as BaseChatModelCallOptions);\n }\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, false>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, true>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<true>\n ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n withStructuredOutput<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput extends Record<string, any> = Record<string, any>,\n >(\n _params:\n | StructuredOutputMethodParams<RunOutput, boolean>\n | InteropZodType<RunOutput>\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n _config?: StructuredOutputMethodOptions<boolean>\n ):\n | Runnable<BaseLanguageModelInput, RunOutput>\n | Runnable<\n BaseLanguageModelInput,\n { raw: BaseMessage; parsed: RunOutput }\n > {\n return RunnableLambda.from(async (input) => {\n const message = await this.invoke(input);\n if (message.tool_calls?.[0]?.args) {\n return message.tool_calls[0].args as RunOutput;\n }\n if (typeof message.content === \"string\") {\n return JSON.parse(message.content);\n }\n throw new Error(\"No structured output found\");\n }) as Runnable;\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.cjs","names":["Embeddings"],"sources":["../../../src/utils/testing/embeddings.ts"],"sourcesContent":["import { Embeddings, EmbeddingsParams } from \"../../embeddings.js\";\n\n/**\n * An interface that defines additional parameters specific to the\n * SyntheticEmbeddings class.\n */\ninterface SyntheticEmbeddingsParams extends EmbeddingsParams {\n vectorSize: number;\n}\n\n/**\n * A class that provides synthetic embeddings by overriding the\n * embedDocuments and embedQuery methods to generate embeddings based on\n * the input documents. The embeddings are generated by converting each\n * document into chunks, calculating a numerical value for each chunk, and\n * returning an array of these values as the embedding.\n */\nexport class SyntheticEmbeddings\n extends Embeddings\n implements SyntheticEmbeddingsParams\n{\n vectorSize: number;\n\n constructor(params?: SyntheticEmbeddingsParams) {\n super(params ?? {});\n this.vectorSize = params?.vectorSize ?? 4;\n }\n\n /**\n * Generates synthetic embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of synthetic embeddings for each document.\n */\n async embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.all(documents.map((doc) => this.embedQuery(doc)));\n }\n\n /**\n * Generates a synthetic embedding for a document. The document is\n * converted into chunks, a numerical value is calculated for each chunk,\n * and an array of these values is returned as the embedding.\n * @param document The document to generate an embedding for.\n * @returns A promise that resolves with a synthetic embedding for the document.\n */\n async embedQuery(document: string): Promise<number[]> {\n let doc = document;\n\n // Only use the letters (and space) from the document, and make them lower case\n doc = doc.toLowerCase().replaceAll(/[^a-z ]/g, \"\");\n\n // Pad the document to make sure it has a divisible number of chunks\n const padMod = doc.length % this.vectorSize;\n const padGapSize = padMod === 0 ? 0 : this.vectorSize - padMod;\n const padSize = doc.length + padGapSize;\n doc = doc.padEnd(padSize, \" \");\n\n // Break it into chunks\n const chunkSize = doc.length / this.vectorSize;\n const docChunk = [];\n for (let co = 0; co < doc.length; co += chunkSize) {\n docChunk.push(doc.slice(co, co + chunkSize));\n }\n\n // Turn each chunk into a number\n const ret: number[] = docChunk.map((s) => {\n let sum = 0;\n // Get a total value by adding the value of each character in the string\n for (let co = 0; co < s.length; co += 1) {\n sum += s === \" \" ? 0 : s.charCodeAt(co);\n }\n // Reduce this to a number between 0 and 25 inclusive\n // Then get the fractional number by dividing it by 26\n const ret = (sum % 26) / 26;\n return ret;\n });\n\n return ret;\n }\n}\n\n/**\n * A class that provides fake embeddings by overriding the embedDocuments\n * and embedQuery methods to return fixed values.\n */\nexport class FakeEmbeddings extends Embeddings {\n constructor(params?: EmbeddingsParams) {\n super(params ?? {});\n }\n\n /**\n * Generates fixed embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of fixed embeddings for each document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.resolve(documents.map(() => [0.1, 0.2, 0.3, 0.4]));\n }\n\n /**\n * Generates a fixed embedding for a query.\n * @param _ The query to generate an embedding for.\n * @returns A promise that resolves with a fixed embedding for the query.\n */\n embedQuery(_: string): Promise<number[]> {\n return Promise.resolve([0.1, 0.2, 0.3, 0.4]);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,sBAAb,cACUA,mBAAAA,WAEV;CACE;CAEA,YAAY,QAAoC;AAC9C,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,aAAa,QAAQ,cAAc;;;;;;;CAQ1C,MAAM,eAAe,WAA0C;AAC7D,SAAO,QAAQ,IAAI,UAAU,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC;;;;;;;;;CAUlE,MAAM,WAAW,UAAqC;EACpD,IAAI,MAAM;AAGV,QAAM,IAAI,aAAa,CAAC,WAAW,YAAY,GAAG;EAGlD,MAAM,SAAS,IAAI,SAAS,KAAK;EACjC,MAAM,aAAa,WAAW,IAAI,IAAI,KAAK,aAAa;EACxD,MAAM,UAAU,IAAI,SAAS;AAC7B,QAAM,IAAI,OAAO,SAAS,IAAI;EAG9B,MAAM,YAAY,IAAI,SAAS,KAAK;EACpC,MAAM,WAAW,EAAE;AACnB,OAAK,IAAI,KAAK,GAAG,KAAK,IAAI,QAAQ,MAAM,UACtC,UAAS,KAAK,IAAI,MAAM,IAAI,KAAK,UAAU,CAAC;AAgB9C,SAZsB,SAAS,KAAK,MAAM;GACxC,IAAI,MAAM;AAEV,QAAK,IAAI,KAAK,GAAG,KAAK,EAAE,QAAQ,MAAM,EACpC,QAAO,MAAM,MAAM,IAAI,EAAE,WAAW,GAAG;AAKzC,UADa,MAAM,KAAM;IAEzB;;;;;;;AAUN,IAAa,iBAAb,cAAoCA,mBAAAA,WAAW;CAC7C,YAAY,QAA2B;AACrC,QAAM,UAAU,EAAE,CAAC;;;;;;;CAQrB,eAAe,WAA0C;AACvD,SAAO,QAAQ,QAAQ,UAAU,UAAU;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC,CAAC;;;;;;;CAQnE,WAAW,GAA8B;AACvC,SAAO,QAAQ,QAAQ;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC"}
1
+ {"version":3,"file":"embeddings.cjs","names":["Embeddings"],"sources":["../../../src/utils/testing/embeddings.ts"],"sourcesContent":["import { Embeddings, EmbeddingsParams } from \"../../embeddings.js\";\n\n/**\n * An interface that defines additional parameters specific to the\n * SyntheticEmbeddings class.\n */\ninterface SyntheticEmbeddingsParams extends EmbeddingsParams {\n vectorSize: number;\n}\n\n/**\n * A class that provides synthetic embeddings by overriding the\n * embedDocuments and embedQuery methods to generate embeddings based on\n * the input documents. The embeddings are generated by converting each\n * document into chunks, calculating a numerical value for each chunk, and\n * returning an array of these values as the embedding.\n */\nexport class SyntheticEmbeddings\n extends Embeddings\n implements SyntheticEmbeddingsParams\n{\n vectorSize: number;\n\n constructor(params?: SyntheticEmbeddingsParams) {\n super(params ?? {});\n this.vectorSize = params?.vectorSize ?? 4;\n }\n\n /**\n * Generates synthetic embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of synthetic embeddings for each document.\n */\n async embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.all(documents.map((doc) => this.embedQuery(doc)));\n }\n\n /**\n * Generates a synthetic embedding for a document. The document is\n * converted into chunks, a numerical value is calculated for each chunk,\n * and an array of these values is returned as the embedding.\n * @param document The document to generate an embedding for.\n * @returns A promise that resolves with a synthetic embedding for the document.\n */\n async embedQuery(document: string): Promise<number[]> {\n let doc = document;\n\n // Only use the letters (and space) from the document, and make them lower case\n doc = doc.toLowerCase().replaceAll(/[^a-z ]/g, \"\");\n\n // Pad the document to make sure it has a divisible number of chunks\n const padMod = doc.length % this.vectorSize;\n const padGapSize = padMod === 0 ? 0 : this.vectorSize - padMod;\n const padSize = doc.length + padGapSize;\n doc = doc.padEnd(padSize, \" \");\n\n // Break it into chunks\n const chunkSize = doc.length / this.vectorSize;\n const docChunk = [];\n for (let co = 0; co < doc.length; co += chunkSize) {\n docChunk.push(doc.slice(co, co + chunkSize));\n }\n\n // Turn each chunk into a number\n const ret: number[] = docChunk.map((s) => {\n let sum = 0;\n // Get a total value by adding the value of each character in the string\n for (let co = 0; co < s.length; co += 1) {\n sum += s === \" \" ? 0 : s.charCodeAt(co);\n }\n // Reduce this to a number between 0 and 25 inclusive\n // Then get the fractional number by dividing it by 26\n const ret = (sum % 26) / 26;\n return ret;\n });\n\n return ret;\n }\n}\n\n/**\n * A class that provides fake embeddings by overriding the embedDocuments\n * and embedQuery methods to return fixed values.\n */\nexport class FakeEmbeddings extends Embeddings {\n constructor(params?: EmbeddingsParams) {\n super(params ?? {});\n }\n\n /**\n * Generates fixed embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of fixed embeddings for each document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.resolve(documents.map(() => [0.1, 0.2, 0.3, 0.4]));\n }\n\n /**\n * Generates a fixed embedding for a query.\n * @param _ The query to generate an embedding for.\n * @returns A promise that resolves with a fixed embedding for the query.\n */\n embedQuery(_: string): Promise<number[]> {\n return Promise.resolve([0.1, 0.2, 0.3, 0.4]);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,sBAAb,cACUA,mBAAAA,WAEV;CACE;CAEA,YAAY,QAAoC;AAC9C,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,aAAa,QAAQ,cAAc;;;;;;;CAQ1C,MAAM,eAAe,WAA0C;AAC7D,SAAO,QAAQ,IAAI,UAAU,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC;;;;;;;;;CAUlE,MAAM,WAAW,UAAqC;EACpD,IAAI,MAAM;AAGV,QAAM,IAAI,aAAa,CAAC,WAAW,YAAY,GAAG;EAGlD,MAAM,SAAS,IAAI,SAAS,KAAK;EACjC,MAAM,aAAa,WAAW,IAAI,IAAI,KAAK,aAAa;EACxD,MAAM,UAAU,IAAI,SAAS;AAC7B,QAAM,IAAI,OAAO,SAAS,IAAI;EAG9B,MAAM,YAAY,IAAI,SAAS,KAAK;EACpC,MAAM,WAAW,EAAE;AACnB,OAAK,IAAI,KAAK,GAAG,KAAK,IAAI,QAAQ,MAAM,UACtC,UAAS,KAAK,IAAI,MAAM,IAAI,KAAK,UAAU,CAAC;AAgB9C,SAZsB,SAAS,KAAK,MAAM;GACxC,IAAI,MAAM;AAEV,QAAK,IAAI,KAAK,GAAG,KAAK,EAAE,QAAQ,MAAM,EACpC,QAAO,MAAM,MAAM,IAAI,EAAE,WAAW,GAAG;AAKzC,UADa,MAAM,KAAM;IAIjB;;;;;;;AAQd,IAAa,iBAAb,cAAoCA,mBAAAA,WAAW;CAC7C,YAAY,QAA2B;AACrC,QAAM,UAAU,EAAE,CAAC;;;;;;;CAQrB,eAAe,WAA0C;AACvD,SAAO,QAAQ,QAAQ,UAAU,UAAU;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC,CAAC;;;;;;;CAQnE,WAAW,GAA8B;AACvC,SAAO,QAAQ,QAAQ;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"embeddings.js","names":[],"sources":["../../../src/utils/testing/embeddings.ts"],"sourcesContent":["import { Embeddings, EmbeddingsParams } from \"../../embeddings.js\";\n\n/**\n * An interface that defines additional parameters specific to the\n * SyntheticEmbeddings class.\n */\ninterface SyntheticEmbeddingsParams extends EmbeddingsParams {\n vectorSize: number;\n}\n\n/**\n * A class that provides synthetic embeddings by overriding the\n * embedDocuments and embedQuery methods to generate embeddings based on\n * the input documents. The embeddings are generated by converting each\n * document into chunks, calculating a numerical value for each chunk, and\n * returning an array of these values as the embedding.\n */\nexport class SyntheticEmbeddings\n extends Embeddings\n implements SyntheticEmbeddingsParams\n{\n vectorSize: number;\n\n constructor(params?: SyntheticEmbeddingsParams) {\n super(params ?? {});\n this.vectorSize = params?.vectorSize ?? 4;\n }\n\n /**\n * Generates synthetic embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of synthetic embeddings for each document.\n */\n async embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.all(documents.map((doc) => this.embedQuery(doc)));\n }\n\n /**\n * Generates a synthetic embedding for a document. The document is\n * converted into chunks, a numerical value is calculated for each chunk,\n * and an array of these values is returned as the embedding.\n * @param document The document to generate an embedding for.\n * @returns A promise that resolves with a synthetic embedding for the document.\n */\n async embedQuery(document: string): Promise<number[]> {\n let doc = document;\n\n // Only use the letters (and space) from the document, and make them lower case\n doc = doc.toLowerCase().replaceAll(/[^a-z ]/g, \"\");\n\n // Pad the document to make sure it has a divisible number of chunks\n const padMod = doc.length % this.vectorSize;\n const padGapSize = padMod === 0 ? 0 : this.vectorSize - padMod;\n const padSize = doc.length + padGapSize;\n doc = doc.padEnd(padSize, \" \");\n\n // Break it into chunks\n const chunkSize = doc.length / this.vectorSize;\n const docChunk = [];\n for (let co = 0; co < doc.length; co += chunkSize) {\n docChunk.push(doc.slice(co, co + chunkSize));\n }\n\n // Turn each chunk into a number\n const ret: number[] = docChunk.map((s) => {\n let sum = 0;\n // Get a total value by adding the value of each character in the string\n for (let co = 0; co < s.length; co += 1) {\n sum += s === \" \" ? 0 : s.charCodeAt(co);\n }\n // Reduce this to a number between 0 and 25 inclusive\n // Then get the fractional number by dividing it by 26\n const ret = (sum % 26) / 26;\n return ret;\n });\n\n return ret;\n }\n}\n\n/**\n * A class that provides fake embeddings by overriding the embedDocuments\n * and embedQuery methods to return fixed values.\n */\nexport class FakeEmbeddings extends Embeddings {\n constructor(params?: EmbeddingsParams) {\n super(params ?? {});\n }\n\n /**\n * Generates fixed embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of fixed embeddings for each document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.resolve(documents.map(() => [0.1, 0.2, 0.3, 0.4]));\n }\n\n /**\n * Generates a fixed embedding for a query.\n * @param _ The query to generate an embedding for.\n * @returns A promise that resolves with a fixed embedding for the query.\n */\n embedQuery(_: string): Promise<number[]> {\n return Promise.resolve([0.1, 0.2, 0.3, 0.4]);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,sBAAb,cACU,WAEV;CACE;CAEA,YAAY,QAAoC;AAC9C,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,aAAa,QAAQ,cAAc;;;;;;;CAQ1C,MAAM,eAAe,WAA0C;AAC7D,SAAO,QAAQ,IAAI,UAAU,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC;;;;;;;;;CAUlE,MAAM,WAAW,UAAqC;EACpD,IAAI,MAAM;AAGV,QAAM,IAAI,aAAa,CAAC,WAAW,YAAY,GAAG;EAGlD,MAAM,SAAS,IAAI,SAAS,KAAK;EACjC,MAAM,aAAa,WAAW,IAAI,IAAI,KAAK,aAAa;EACxD,MAAM,UAAU,IAAI,SAAS;AAC7B,QAAM,IAAI,OAAO,SAAS,IAAI;EAG9B,MAAM,YAAY,IAAI,SAAS,KAAK;EACpC,MAAM,WAAW,EAAE;AACnB,OAAK,IAAI,KAAK,GAAG,KAAK,IAAI,QAAQ,MAAM,UACtC,UAAS,KAAK,IAAI,MAAM,IAAI,KAAK,UAAU,CAAC;AAgB9C,SAZsB,SAAS,KAAK,MAAM;GACxC,IAAI,MAAM;AAEV,QAAK,IAAI,KAAK,GAAG,KAAK,EAAE,QAAQ,MAAM,EACpC,QAAO,MAAM,MAAM,IAAI,EAAE,WAAW,GAAG;AAKzC,UADa,MAAM,KAAM;IAEzB;;;;;;;AAUN,IAAa,iBAAb,cAAoC,WAAW;CAC7C,YAAY,QAA2B;AACrC,QAAM,UAAU,EAAE,CAAC;;;;;;;CAQrB,eAAe,WAA0C;AACvD,SAAO,QAAQ,QAAQ,UAAU,UAAU;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC,CAAC;;;;;;;CAQnE,WAAW,GAA8B;AACvC,SAAO,QAAQ,QAAQ;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC"}
1
+ {"version":3,"file":"embeddings.js","names":[],"sources":["../../../src/utils/testing/embeddings.ts"],"sourcesContent":["import { Embeddings, EmbeddingsParams } from \"../../embeddings.js\";\n\n/**\n * An interface that defines additional parameters specific to the\n * SyntheticEmbeddings class.\n */\ninterface SyntheticEmbeddingsParams extends EmbeddingsParams {\n vectorSize: number;\n}\n\n/**\n * A class that provides synthetic embeddings by overriding the\n * embedDocuments and embedQuery methods to generate embeddings based on\n * the input documents. The embeddings are generated by converting each\n * document into chunks, calculating a numerical value for each chunk, and\n * returning an array of these values as the embedding.\n */\nexport class SyntheticEmbeddings\n extends Embeddings\n implements SyntheticEmbeddingsParams\n{\n vectorSize: number;\n\n constructor(params?: SyntheticEmbeddingsParams) {\n super(params ?? {});\n this.vectorSize = params?.vectorSize ?? 4;\n }\n\n /**\n * Generates synthetic embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of synthetic embeddings for each document.\n */\n async embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.all(documents.map((doc) => this.embedQuery(doc)));\n }\n\n /**\n * Generates a synthetic embedding for a document. The document is\n * converted into chunks, a numerical value is calculated for each chunk,\n * and an array of these values is returned as the embedding.\n * @param document The document to generate an embedding for.\n * @returns A promise that resolves with a synthetic embedding for the document.\n */\n async embedQuery(document: string): Promise<number[]> {\n let doc = document;\n\n // Only use the letters (and space) from the document, and make them lower case\n doc = doc.toLowerCase().replaceAll(/[^a-z ]/g, \"\");\n\n // Pad the document to make sure it has a divisible number of chunks\n const padMod = doc.length % this.vectorSize;\n const padGapSize = padMod === 0 ? 0 : this.vectorSize - padMod;\n const padSize = doc.length + padGapSize;\n doc = doc.padEnd(padSize, \" \");\n\n // Break it into chunks\n const chunkSize = doc.length / this.vectorSize;\n const docChunk = [];\n for (let co = 0; co < doc.length; co += chunkSize) {\n docChunk.push(doc.slice(co, co + chunkSize));\n }\n\n // Turn each chunk into a number\n const ret: number[] = docChunk.map((s) => {\n let sum = 0;\n // Get a total value by adding the value of each character in the string\n for (let co = 0; co < s.length; co += 1) {\n sum += s === \" \" ? 0 : s.charCodeAt(co);\n }\n // Reduce this to a number between 0 and 25 inclusive\n // Then get the fractional number by dividing it by 26\n const ret = (sum % 26) / 26;\n return ret;\n });\n\n return ret;\n }\n}\n\n/**\n * A class that provides fake embeddings by overriding the embedDocuments\n * and embedQuery methods to return fixed values.\n */\nexport class FakeEmbeddings extends Embeddings {\n constructor(params?: EmbeddingsParams) {\n super(params ?? {});\n }\n\n /**\n * Generates fixed embeddings for a list of documents.\n * @param documents List of documents to generate embeddings for.\n * @returns A promise that resolves with a list of fixed embeddings for each document.\n */\n embedDocuments(documents: string[]): Promise<number[][]> {\n return Promise.resolve(documents.map(() => [0.1, 0.2, 0.3, 0.4]));\n }\n\n /**\n * Generates a fixed embedding for a query.\n * @param _ The query to generate an embedding for.\n * @returns A promise that resolves with a fixed embedding for the query.\n */\n embedQuery(_: string): Promise<number[]> {\n return Promise.resolve([0.1, 0.2, 0.3, 0.4]);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,sBAAb,cACU,WAEV;CACE;CAEA,YAAY,QAAoC;AAC9C,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,aAAa,QAAQ,cAAc;;;;;;;CAQ1C,MAAM,eAAe,WAA0C;AAC7D,SAAO,QAAQ,IAAI,UAAU,KAAK,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC;;;;;;;;;CAUlE,MAAM,WAAW,UAAqC;EACpD,IAAI,MAAM;AAGV,QAAM,IAAI,aAAa,CAAC,WAAW,YAAY,GAAG;EAGlD,MAAM,SAAS,IAAI,SAAS,KAAK;EACjC,MAAM,aAAa,WAAW,IAAI,IAAI,KAAK,aAAa;EACxD,MAAM,UAAU,IAAI,SAAS;AAC7B,QAAM,IAAI,OAAO,SAAS,IAAI;EAG9B,MAAM,YAAY,IAAI,SAAS,KAAK;EACpC,MAAM,WAAW,EAAE;AACnB,OAAK,IAAI,KAAK,GAAG,KAAK,IAAI,QAAQ,MAAM,UACtC,UAAS,KAAK,IAAI,MAAM,IAAI,KAAK,UAAU,CAAC;AAgB9C,SAZsB,SAAS,KAAK,MAAM;GACxC,IAAI,MAAM;AAEV,QAAK,IAAI,KAAK,GAAG,KAAK,EAAE,QAAQ,MAAM,EACpC,QAAO,MAAM,MAAM,IAAI,EAAE,WAAW,GAAG;AAKzC,UADa,MAAM,KAAM;IAIjB;;;;;;;AAQd,IAAa,iBAAb,cAAoC,WAAW;CAC7C,YAAY,QAA2B;AACrC,QAAM,UAAU,EAAE,CAAC;;;;;;;CAQrB,eAAe,WAA0C;AACvD,SAAO,QAAQ,QAAQ,UAAU,UAAU;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC,CAAC;;;;;;;CAQnE,WAAW,GAA8B;AACvC,SAAO,QAAQ,QAAQ;GAAC;GAAK;GAAK;GAAK;GAAI,CAAC"}
@@ -1,5 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
3
+ const require_stream = require("./stream.cjs");
4
+ const require_openai_stream_fixtures = require("./openai_stream_fixtures.cjs");
3
5
  const require_chat_models = require("./chat_models.cjs");
4
6
  const require_embeddings = require("./embeddings.cjs");
5
7
  const require_llms = require("./llms.cjs");
@@ -27,7 +29,14 @@ var testing_exports = /* @__PURE__ */ require_runtime.__exportAll({
27
29
  FakeTracer: () => require_message_history.FakeTracer,
28
30
  FakeVectorStore: () => require_vectorstores.FakeVectorStore,
29
31
  SingleRunExtractor: () => require_tracers.SingleRunExtractor,
30
- SyntheticEmbeddings: () => require_embeddings.SyntheticEmbeddings
32
+ SyntheticEmbeddings: () => require_embeddings.SyntheticEmbeddings,
33
+ asAsyncIterable: () => require_openai_stream_fixtures.asAsyncIterable,
34
+ openAIReasoningTextChunks: () => require_openai_stream_fixtures.openAIReasoningTextChunks,
35
+ openAITextOnlyChunks: () => require_openai_stream_fixtures.openAITextOnlyChunks,
36
+ openAITextOnlyChunksWithUsage: () => require_openai_stream_fixtures.openAITextOnlyChunksWithUsage,
37
+ openAIToolCallChunks: () => require_openai_stream_fixtures.openAIToolCallChunks,
38
+ sseResponseFromOpenAIChunks: () => require_openai_stream_fixtures.sseResponseFromOpenAIChunks,
39
+ streamMatchers: () => require_stream.streamMatchers
31
40
  });
32
41
  //#endregion
33
42
  exports.FakeChatMessageHistory = require_message_history.FakeChatMessageHistory;
@@ -46,6 +55,13 @@ exports.FakeTracer = require_message_history.FakeTracer;
46
55
  exports.FakeVectorStore = require_vectorstores.FakeVectorStore;
47
56
  exports.SingleRunExtractor = require_tracers.SingleRunExtractor;
48
57
  exports.SyntheticEmbeddings = require_embeddings.SyntheticEmbeddings;
58
+ exports.asAsyncIterable = require_openai_stream_fixtures.asAsyncIterable;
59
+ exports.openAIReasoningTextChunks = require_openai_stream_fixtures.openAIReasoningTextChunks;
60
+ exports.openAITextOnlyChunks = require_openai_stream_fixtures.openAITextOnlyChunks;
61
+ exports.openAITextOnlyChunksWithUsage = require_openai_stream_fixtures.openAITextOnlyChunksWithUsage;
62
+ exports.openAIToolCallChunks = require_openai_stream_fixtures.openAIToolCallChunks;
63
+ exports.sseResponseFromOpenAIChunks = require_openai_stream_fixtures.sseResponseFromOpenAIChunks;
64
+ exports.streamMatchers = require_stream.streamMatchers;
49
65
  Object.defineProperty(exports, "testing_exports", {
50
66
  enumerable: true,
51
67
  get: function() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/utils/testing/index.ts"],"sourcesContent":["export * from \"./chat_models.js\";\nexport * from \"./embeddings.js\";\nexport * from \"./llms.js\";\nexport * from \"./message_history.js\";\nexport * from \"./output_parsers.js\";\nexport * from \"./retrievers.js\";\nexport * from \"./runnables.js\";\nexport * from \"./tools.js\";\nexport * from \"./tracers.js\";\nexport * from \"./vectorstores.js\";\n"],"mappings":""}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/utils/testing/index.ts"],"sourcesContent":["export * from \"./chat_models.js\";\nexport * from \"./openai_stream_fixtures.js\";\nexport {\n streamMatchers,\n type StreamMatchers,\n type StreamOutputExpectation,\n type StreamToolCallExpectation,\n type StreamUsageExpectation,\n} from \"./stream.js\";\nexport * from \"./embeddings.js\";\nexport * from \"./llms.js\";\nexport * from \"./message_history.js\";\nexport * from \"./output_parsers.js\";\nexport * from \"./retrievers.js\";\nexport * from \"./runnables.js\";\nexport * from \"./tools.js\";\nexport * from \"./tracers.js\";\nexport * from \"./vectorstores.js\";\n"],"mappings":""}
@@ -1,4 +1,6 @@
1
+ import { StreamMatchers, StreamOutputExpectation, StreamToolCallExpectation, StreamUsageExpectation, streamMatchers } from "./stream.cjs";
1
2
  import { FakeChatInput, FakeChatModel, FakeListChatModel, FakeListChatModelCallOptions, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, ToolSpec } from "./chat_models.cjs";
3
+ import { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks } from "./openai_stream_fixtures.cjs";
2
4
  import { FakeEmbeddings, SyntheticEmbeddings } from "./embeddings.cjs";
3
5
  import { FakeLLM, FakeStreamingLLM } from "./llms.cjs";
4
6
  import { FakeChatMessageHistory, FakeListChatMessageHistory, FakeTracer } from "./message_history.cjs";
@@ -8,4 +10,4 @@ import { FakeRunnable } from "./runnables.cjs";
8
10
  import { FakeTool, FakeToolParams } from "./tools.cjs";
9
11
  import { SingleRunExtractor } from "./tracers.cjs";
10
12
  import { FakeVectorStore, FakeVectorStoreArgs } from "./vectorstores.cjs";
11
- export { FakeChatInput, FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeListChatModelCallOptions, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, FakeStreamingLLM, FakeTool, FakeToolParams, FakeTracer, FakeVectorStore, FakeVectorStoreArgs, SingleRunExtractor, SyntheticEmbeddings, ToolSpec };
13
+ export { FakeChatInput, FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeListChatModelCallOptions, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, FakeStreamingLLM, FakeTool, FakeToolParams, FakeTracer, FakeVectorStore, FakeVectorStoreArgs, SingleRunExtractor, type StreamMatchers, type StreamOutputExpectation, type StreamToolCallExpectation, type StreamUsageExpectation, SyntheticEmbeddings, ToolSpec, asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks, streamMatchers };
@@ -1,4 +1,6 @@
1
+ import { StreamMatchers, StreamOutputExpectation, StreamToolCallExpectation, StreamUsageExpectation, streamMatchers } from "./stream.js";
1
2
  import { FakeChatInput, FakeChatModel, FakeListChatModel, FakeListChatModelCallOptions, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, ToolSpec } from "./chat_models.js";
3
+ import { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks } from "./openai_stream_fixtures.js";
2
4
  import { FakeEmbeddings, SyntheticEmbeddings } from "./embeddings.js";
3
5
  import { FakeLLM, FakeStreamingLLM } from "./llms.js";
4
6
  import { FakeChatMessageHistory, FakeListChatMessageHistory, FakeTracer } from "./message_history.js";
@@ -8,4 +10,4 @@ import { FakeRunnable } from "./runnables.js";
8
10
  import { FakeTool, FakeToolParams } from "./tools.js";
9
11
  import { SingleRunExtractor } from "./tracers.js";
10
12
  import { FakeVectorStore, FakeVectorStoreArgs } from "./vectorstores.js";
11
- export { FakeChatInput, FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeListChatModelCallOptions, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, FakeStreamingLLM, FakeTool, FakeToolParams, FakeTracer, FakeVectorStore, FakeVectorStoreArgs, SingleRunExtractor, SyntheticEmbeddings, ToolSpec };
13
+ export { FakeChatInput, FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeListChatModelCallOptions, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingChatModelCallOptions, FakeStreamingChatModelFields, FakeStreamingLLM, FakeTool, FakeToolParams, FakeTracer, FakeVectorStore, FakeVectorStoreArgs, SingleRunExtractor, type StreamMatchers, type StreamOutputExpectation, type StreamToolCallExpectation, type StreamUsageExpectation, SyntheticEmbeddings, ToolSpec, asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks, streamMatchers };
@@ -1,4 +1,6 @@
1
1
  import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
+ import { streamMatchers } from "./stream.js";
3
+ import { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks } from "./openai_stream_fixtures.js";
2
4
  import { FakeChatModel, FakeListChatModel, FakeStreamingChatModel } from "./chat_models.js";
3
5
  import { FakeEmbeddings, SyntheticEmbeddings } from "./embeddings.js";
4
6
  import { FakeLLM, FakeStreamingLLM } from "./llms.js";
@@ -26,9 +28,16 @@ var testing_exports = /* @__PURE__ */ __exportAll({
26
28
  FakeTracer: () => FakeTracer,
27
29
  FakeVectorStore: () => FakeVectorStore,
28
30
  SingleRunExtractor: () => SingleRunExtractor,
29
- SyntheticEmbeddings: () => SyntheticEmbeddings
31
+ SyntheticEmbeddings: () => SyntheticEmbeddings,
32
+ asAsyncIterable: () => asAsyncIterable,
33
+ openAIReasoningTextChunks: () => openAIReasoningTextChunks,
34
+ openAITextOnlyChunks: () => openAITextOnlyChunks,
35
+ openAITextOnlyChunksWithUsage: () => openAITextOnlyChunksWithUsage,
36
+ openAIToolCallChunks: () => openAIToolCallChunks,
37
+ sseResponseFromOpenAIChunks: () => sseResponseFromOpenAIChunks,
38
+ streamMatchers: () => streamMatchers
30
39
  });
31
40
  //#endregion
32
- export { FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingLLM, FakeTool, FakeTracer, FakeVectorStore, SingleRunExtractor, SyntheticEmbeddings, testing_exports };
41
+ export { FakeChatMessageHistory, FakeChatModel, FakeEmbeddings, FakeLLM, FakeListChatMessageHistory, FakeListChatModel, FakeRetriever, FakeRunnable, FakeSplitIntoListParser, FakeStreamingChatModel, FakeStreamingLLM, FakeTool, FakeTracer, FakeVectorStore, SingleRunExtractor, SyntheticEmbeddings, asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks, streamMatchers, testing_exports };
33
42
 
34
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/testing/index.ts"],"sourcesContent":["export * from \"./chat_models.js\";\nexport * from \"./embeddings.js\";\nexport * from \"./llms.js\";\nexport * from \"./message_history.js\";\nexport * from \"./output_parsers.js\";\nexport * from \"./retrievers.js\";\nexport * from \"./runnables.js\";\nexport * from \"./tools.js\";\nexport * from \"./tracers.js\";\nexport * from \"./vectorstores.js\";\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/testing/index.ts"],"sourcesContent":["export * from \"./chat_models.js\";\nexport * from \"./openai_stream_fixtures.js\";\nexport {\n streamMatchers,\n type StreamMatchers,\n type StreamOutputExpectation,\n type StreamToolCallExpectation,\n type StreamUsageExpectation,\n} from \"./stream.js\";\nexport * from \"./embeddings.js\";\nexport * from \"./llms.js\";\nexport * from \"./message_history.js\";\nexport * from \"./output_parsers.js\";\nexport * from \"./retrievers.js\";\nexport * from \"./runnables.js\";\nexport * from \"./tools.js\";\nexport * from \"./tracers.js\";\nexport * from \"./vectorstores.js\";\n"],"mappings":""}
@@ -0,0 +1,160 @@
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
+ exports.asAsyncIterable = asAsyncIterable;
154
+ exports.openAIReasoningTextChunks = openAIReasoningTextChunks;
155
+ exports.openAITextOnlyChunks = openAITextOnlyChunks;
156
+ exports.openAITextOnlyChunksWithUsage = openAITextOnlyChunksWithUsage;
157
+ exports.openAIToolCallChunks = openAIToolCallChunks;
158
+ exports.sseResponseFromOpenAIChunks = sseResponseFromOpenAIChunks;
159
+
160
+ //# sourceMappingURL=openai_stream_fixtures.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_stream_fixtures.cjs","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,12 @@
1
+ import { OpenAICompletionsStreamChunk } from "../../language_models/openai_completions_stream.cjs";
2
+
3
+ //#region src/utils/testing/openai_stream_fixtures.d.ts
4
+ declare function asAsyncIterable<T>(items: T[]): AsyncIterable<T>;
5
+ declare function openAITextOnlyChunksWithUsage(model?: string): OpenAICompletionsStreamChunk[];
6
+ declare function openAITextOnlyChunks(model?: string): OpenAICompletionsStreamChunk[];
7
+ declare function openAIReasoningTextChunks(model?: string): OpenAICompletionsStreamChunk[];
8
+ declare function openAIToolCallChunks(model?: string): OpenAICompletionsStreamChunk[];
9
+ declare function sseResponseFromOpenAIChunks(chunks: OpenAICompletionsStreamChunk[]): Response;
10
+ //#endregion
11
+ export { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks };
12
+ //# sourceMappingURL=openai_stream_fixtures.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_stream_fixtures.d.cts","names":[],"sources":["../../../src/utils/testing/openai_stream_fixtures.ts"],"mappings":";;;iBAEgB,eAAA,GAAA,CAAmB,KAAA,EAAO,CAAA,KAAM,aAAA,CAAc,CAAA;AAAA,iBAU9C,6BAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAca,oBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAgCa,yBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAgCa,oBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBA2Da,2BAAA,CACd,MAAA,EAAQ,4BAAA,KACP,QAAA"}
@@ -0,0 +1,12 @@
1
+ import { OpenAICompletionsStreamChunk } from "../../language_models/openai_completions_stream.js";
2
+
3
+ //#region src/utils/testing/openai_stream_fixtures.d.ts
4
+ declare function asAsyncIterable<T>(items: T[]): AsyncIterable<T>;
5
+ declare function openAITextOnlyChunksWithUsage(model?: string): OpenAICompletionsStreamChunk[];
6
+ declare function openAITextOnlyChunks(model?: string): OpenAICompletionsStreamChunk[];
7
+ declare function openAIReasoningTextChunks(model?: string): OpenAICompletionsStreamChunk[];
8
+ declare function openAIToolCallChunks(model?: string): OpenAICompletionsStreamChunk[];
9
+ declare function sseResponseFromOpenAIChunks(chunks: OpenAICompletionsStreamChunk[]): Response;
10
+ //#endregion
11
+ export { asAsyncIterable, openAIReasoningTextChunks, openAITextOnlyChunks, openAITextOnlyChunksWithUsage, openAIToolCallChunks, sseResponseFromOpenAIChunks };
12
+ //# sourceMappingURL=openai_stream_fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai_stream_fixtures.d.ts","names":[],"sources":["../../../src/utils/testing/openai_stream_fixtures.ts"],"mappings":";;;iBAEgB,eAAA,GAAA,CAAmB,KAAA,EAAO,CAAA,KAAM,aAAA,CAAc,CAAA;AAAA,iBAU9C,6BAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAca,oBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAgCa,yBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBAgCa,oBAAA,CACd,KAAA,YACC,4BAAA;AAAA,iBA2Da,2BAAA,CACd,MAAA,EAAQ,4BAAA,KACP,QAAA"}