@langchain/core 1.1.38 → 1.1.39

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 (345) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/agents.cjs.map +1 -1
  3. package/dist/agents.js.map +1 -1
  4. package/dist/callbacks/base.cjs.map +1 -1
  5. package/dist/callbacks/base.d.cts +71 -40
  6. package/dist/callbacks/base.d.cts.map +1 -1
  7. package/dist/callbacks/base.d.ts +71 -40
  8. package/dist/callbacks/base.d.ts.map +1 -1
  9. package/dist/callbacks/base.js.map +1 -1
  10. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  11. package/dist/callbacks/dispatch/index.d.cts +0 -1
  12. package/dist/callbacks/dispatch/index.d.cts.map +1 -1
  13. package/dist/callbacks/dispatch/index.d.ts +0 -1
  14. package/dist/callbacks/dispatch/index.d.ts.map +1 -1
  15. package/dist/callbacks/dispatch/index.js.map +1 -1
  16. package/dist/callbacks/dispatch/web.cjs.map +1 -1
  17. package/dist/callbacks/dispatch/web.d.cts +0 -1
  18. package/dist/callbacks/dispatch/web.d.cts.map +1 -1
  19. package/dist/callbacks/dispatch/web.d.ts +0 -1
  20. package/dist/callbacks/dispatch/web.d.ts.map +1 -1
  21. package/dist/callbacks/dispatch/web.js.map +1 -1
  22. package/dist/callbacks/manager.cjs.map +1 -1
  23. package/dist/callbacks/manager.js.map +1 -1
  24. package/dist/chat_history.d.cts +0 -1
  25. package/dist/chat_history.d.cts.map +1 -1
  26. package/dist/document_loaders/langsmith.cjs.map +1 -1
  27. package/dist/document_loaders/langsmith.js.map +1 -1
  28. package/dist/documents/document.cjs.map +1 -1
  29. package/dist/documents/document.js.map +1 -1
  30. package/dist/errors/index.cjs.map +1 -1
  31. package/dist/errors/index.js.map +1 -1
  32. package/dist/indexing/base.cjs.map +1 -1
  33. package/dist/indexing/base.d.cts.map +1 -1
  34. package/dist/indexing/base.d.ts.map +1 -1
  35. package/dist/indexing/base.js.map +1 -1
  36. package/dist/language_models/base.cjs +1 -1
  37. package/dist/language_models/base.cjs.map +1 -1
  38. package/dist/language_models/base.d.cts +1 -1
  39. package/dist/language_models/base.d.cts.map +1 -1
  40. package/dist/language_models/base.d.ts +1 -1
  41. package/dist/language_models/base.d.ts.map +1 -1
  42. package/dist/language_models/base.js +1 -1
  43. package/dist/language_models/base.js.map +1 -1
  44. package/dist/language_models/chat_models.cjs.map +1 -1
  45. package/dist/language_models/chat_models.d.cts +0 -1
  46. package/dist/language_models/chat_models.d.cts.map +1 -1
  47. package/dist/language_models/chat_models.d.ts.map +1 -1
  48. package/dist/language_models/chat_models.js.map +1 -1
  49. package/dist/language_models/llms.cjs.map +1 -1
  50. package/dist/language_models/llms.d.cts.map +1 -1
  51. package/dist/language_models/llms.d.ts.map +1 -1
  52. package/dist/language_models/llms.js.map +1 -1
  53. package/dist/language_models/structured_output.cjs.map +1 -1
  54. package/dist/language_models/structured_output.d.cts +0 -1
  55. package/dist/language_models/structured_output.d.cts.map +1 -1
  56. package/dist/language_models/structured_output.d.ts.map +1 -1
  57. package/dist/language_models/structured_output.js.map +1 -1
  58. package/dist/load/index.cjs +1 -2
  59. package/dist/load/index.cjs.map +1 -1
  60. package/dist/load/index.js +1 -2
  61. package/dist/load/index.js.map +1 -1
  62. package/dist/load/map_keys.cjs.map +1 -1
  63. package/dist/load/map_keys.js.map +1 -1
  64. package/dist/load/serializable.cjs.map +1 -1
  65. package/dist/load/serializable.js.map +1 -1
  66. package/dist/memory.cjs +2 -8
  67. package/dist/memory.cjs.map +1 -1
  68. package/dist/memory.d.cts +2 -2
  69. package/dist/memory.d.cts.map +1 -1
  70. package/dist/memory.d.ts +2 -2
  71. package/dist/memory.d.ts.map +1 -1
  72. package/dist/memory.js +2 -8
  73. package/dist/memory.js.map +1 -1
  74. package/dist/messages/base.cjs.map +1 -1
  75. package/dist/messages/base.js.map +1 -1
  76. package/dist/messages/block_translators/utils.cjs.map +1 -1
  77. package/dist/messages/block_translators/utils.js.map +1 -1
  78. package/dist/messages/chat.cjs.map +1 -1
  79. package/dist/messages/chat.js.map +1 -1
  80. package/dist/messages/content/data.cjs.map +1 -1
  81. package/dist/messages/content/data.d.cts.map +1 -1
  82. package/dist/messages/content/data.d.ts.map +1 -1
  83. package/dist/messages/content/data.js.map +1 -1
  84. package/dist/messages/content/index.cjs.map +1 -1
  85. package/dist/messages/content/index.js.map +1 -1
  86. package/dist/messages/content/multimodal.cjs.map +1 -1
  87. package/dist/messages/content/multimodal.js.map +1 -1
  88. package/dist/messages/content/tools.cjs.map +1 -1
  89. package/dist/messages/content/tools.js.map +1 -1
  90. package/dist/messages/message.cjs.map +1 -1
  91. package/dist/messages/message.d.cts +3 -2
  92. package/dist/messages/message.d.cts.map +1 -1
  93. package/dist/messages/message.d.ts +3 -2
  94. package/dist/messages/message.d.ts.map +1 -1
  95. package/dist/messages/message.js.map +1 -1
  96. package/dist/messages/tool.cjs.map +1 -1
  97. package/dist/messages/tool.js.map +1 -1
  98. package/dist/messages/transformers.cjs.map +1 -1
  99. package/dist/messages/transformers.js.map +1 -1
  100. package/dist/messages/utils.d.cts.map +1 -1
  101. package/dist/messages/utils.d.ts.map +1 -1
  102. package/dist/output_parsers/base.d.cts +0 -1
  103. package/dist/output_parsers/base.d.cts.map +1 -1
  104. package/dist/output_parsers/base.d.ts.map +1 -1
  105. package/dist/output_parsers/json.cjs.map +1 -1
  106. package/dist/output_parsers/json.d.cts.map +1 -1
  107. package/dist/output_parsers/json.js.map +1 -1
  108. package/dist/output_parsers/list.d.cts.map +1 -1
  109. package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
  110. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.cts.map +1 -1
  111. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts.map +1 -1
  112. package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
  113. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
  114. package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.cts.map +1 -1
  115. package/dist/output_parsers/openai_tools/json_output_tools_parsers.d.ts.map +1 -1
  116. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
  117. package/dist/output_parsers/standard_schema.cjs.map +1 -1
  118. package/dist/output_parsers/standard_schema.js.map +1 -1
  119. package/dist/output_parsers/string.d.cts.map +1 -1
  120. package/dist/output_parsers/transform.cjs.map +1 -1
  121. package/dist/output_parsers/transform.js.map +1 -1
  122. package/dist/output_parsers/xml.cjs +2 -2
  123. package/dist/output_parsers/xml.cjs.map +1 -1
  124. package/dist/output_parsers/xml.d.cts +1 -1
  125. package/dist/output_parsers/xml.d.ts +1 -1
  126. package/dist/output_parsers/xml.js +2 -2
  127. package/dist/output_parsers/xml.js.map +1 -1
  128. package/dist/outputs.cjs.map +1 -1
  129. package/dist/outputs.js.map +1 -1
  130. package/dist/prompt_values.cjs.map +1 -1
  131. package/dist/prompt_values.js.map +1 -1
  132. package/dist/prompts/base.cjs.map +1 -1
  133. package/dist/prompts/base.d.cts +0 -1
  134. package/dist/prompts/base.d.cts.map +1 -1
  135. package/dist/prompts/base.js.map +1 -1
  136. package/dist/prompts/chat.cjs.map +1 -1
  137. package/dist/prompts/chat.d.cts.map +1 -1
  138. package/dist/prompts/chat.js.map +1 -1
  139. package/dist/prompts/few_shot.cjs.map +1 -1
  140. package/dist/prompts/few_shot.d.cts.map +1 -1
  141. package/dist/prompts/few_shot.js.map +1 -1
  142. package/dist/prompts/image.cjs.map +1 -1
  143. package/dist/prompts/image.d.cts.map +1 -1
  144. package/dist/prompts/image.js.map +1 -1
  145. package/dist/prompts/pipeline.cjs.map +1 -1
  146. package/dist/prompts/pipeline.js.map +1 -1
  147. package/dist/prompts/prompt.cjs.map +1 -1
  148. package/dist/prompts/prompt.d.cts.map +1 -1
  149. package/dist/prompts/prompt.js.map +1 -1
  150. package/dist/prompts/serde.d.cts.map +1 -1
  151. package/dist/prompts/string.cjs.map +1 -1
  152. package/dist/prompts/string.js.map +1 -1
  153. package/dist/prompts/structured.cjs.map +1 -1
  154. package/dist/prompts/structured.d.cts.map +1 -1
  155. package/dist/prompts/structured.d.ts.map +1 -1
  156. package/dist/prompts/structured.js.map +1 -1
  157. package/dist/prompts/template.cjs +2 -5
  158. package/dist/prompts/template.cjs.map +1 -1
  159. package/dist/prompts/template.d.cts +0 -1
  160. package/dist/prompts/template.d.cts.map +1 -1
  161. package/dist/prompts/template.d.ts.map +1 -1
  162. package/dist/prompts/template.js +2 -5
  163. package/dist/prompts/template.js.map +1 -1
  164. package/dist/retrievers/document_compressors/index.cjs.map +1 -1
  165. package/dist/retrievers/document_compressors/index.js.map +1 -1
  166. package/dist/retrievers/index.cjs.map +1 -1
  167. package/dist/retrievers/index.d.cts.map +1 -1
  168. package/dist/retrievers/index.d.ts.map +1 -1
  169. package/dist/retrievers/index.js.map +1 -1
  170. package/dist/runnables/base.cjs.map +1 -1
  171. package/dist/runnables/base.js.map +1 -1
  172. package/dist/runnables/branch.cjs.map +1 -1
  173. package/dist/runnables/branch.d.cts.map +1 -1
  174. package/dist/runnables/branch.d.ts.map +1 -1
  175. package/dist/runnables/branch.js.map +1 -1
  176. package/dist/runnables/config.cjs.map +1 -1
  177. package/dist/runnables/config.js.map +1 -1
  178. package/dist/runnables/graph.cjs.map +1 -1
  179. package/dist/runnables/graph.js.map +1 -1
  180. package/dist/runnables/history.cjs +2 -4
  181. package/dist/runnables/history.cjs.map +1 -1
  182. package/dist/runnables/history.d.cts +2 -4
  183. package/dist/runnables/history.d.cts.map +1 -1
  184. package/dist/runnables/history.d.ts +2 -4
  185. package/dist/runnables/history.d.ts.map +1 -1
  186. package/dist/runnables/history.js +2 -4
  187. package/dist/runnables/history.js.map +1 -1
  188. package/dist/runnables/passthrough.cjs.map +1 -1
  189. package/dist/runnables/passthrough.d.cts.map +1 -1
  190. package/dist/runnables/passthrough.d.ts.map +1 -1
  191. package/dist/runnables/passthrough.js.map +1 -1
  192. package/dist/runnables/router.cjs.map +1 -1
  193. package/dist/runnables/router.d.cts.map +1 -1
  194. package/dist/runnables/router.d.ts.map +1 -1
  195. package/dist/runnables/router.js.map +1 -1
  196. package/dist/runnables/utils.cjs.map +1 -1
  197. package/dist/runnables/utils.js.map +1 -1
  198. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  199. package/dist/singletons/async_local_storage/context.d.cts.map +1 -1
  200. package/dist/singletons/async_local_storage/context.d.ts.map +1 -1
  201. package/dist/singletons/async_local_storage/context.js.map +1 -1
  202. package/dist/singletons/async_local_storage/globals.cjs.map +1 -1
  203. package/dist/singletons/async_local_storage/globals.js.map +1 -1
  204. package/dist/singletons/async_local_storage/index.cjs.map +1 -1
  205. package/dist/singletons/async_local_storage/index.js.map +1 -1
  206. package/dist/singletons/callbacks.cjs.map +1 -1
  207. package/dist/singletons/callbacks.d.cts.map +1 -1
  208. package/dist/singletons/callbacks.js.map +1 -1
  209. package/dist/stores.cjs.map +1 -1
  210. package/dist/stores.js.map +1 -1
  211. package/dist/structured_query/ir.d.cts.map +1 -1
  212. package/dist/structured_query/ir.d.ts.map +1 -1
  213. package/dist/structured_query/utils.cjs.map +1 -1
  214. package/dist/structured_query/utils.js.map +1 -1
  215. package/dist/testing/fake_model_builder.cjs.map +1 -1
  216. package/dist/testing/fake_model_builder.d.cts.map +1 -1
  217. package/dist/testing/fake_model_builder.js.map +1 -1
  218. package/dist/testing/matchers.cjs.map +1 -1
  219. package/dist/testing/matchers.d.cts +8 -8
  220. package/dist/testing/matchers.d.cts.map +1 -1
  221. package/dist/testing/matchers.d.ts +8 -8
  222. package/dist/testing/matchers.d.ts.map +1 -1
  223. package/dist/testing/matchers.js.map +1 -1
  224. package/dist/tools/index.cjs.map +1 -1
  225. package/dist/tools/index.d.cts +3 -2
  226. package/dist/tools/index.d.cts.map +1 -1
  227. package/dist/tools/index.d.ts +3 -2
  228. package/dist/tools/index.d.ts.map +1 -1
  229. package/dist/tools/index.js.map +1 -1
  230. package/dist/tools/types.cjs.map +1 -1
  231. package/dist/tools/types.d.cts +1 -1
  232. package/dist/tools/types.d.cts.map +1 -1
  233. package/dist/tools/types.d.ts +1 -1
  234. package/dist/tools/types.d.ts.map +1 -1
  235. package/dist/tools/types.js.map +1 -1
  236. package/dist/tracers/base.cjs.map +1 -1
  237. package/dist/tracers/base.d.cts +91 -91
  238. package/dist/tracers/base.d.cts.map +1 -1
  239. package/dist/tracers/base.d.ts +91 -91
  240. package/dist/tracers/base.d.ts.map +1 -1
  241. package/dist/tracers/base.js.map +1 -1
  242. package/dist/tracers/event_stream.cjs.map +1 -1
  243. package/dist/tracers/event_stream.d.cts +0 -1
  244. package/dist/tracers/event_stream.d.cts.map +1 -1
  245. package/dist/tracers/event_stream.js.map +1 -1
  246. package/dist/tracers/log_stream.cjs.map +1 -1
  247. package/dist/tracers/log_stream.d.cts.map +1 -1
  248. package/dist/tracers/log_stream.d.ts.map +1 -1
  249. package/dist/tracers/log_stream.js.map +1 -1
  250. package/dist/utils/async_caller.cjs.map +1 -1
  251. package/dist/utils/async_caller.js.map +1 -1
  252. package/dist/utils/chunk_array.d.cts.map +1 -1
  253. package/dist/utils/chunk_array.d.ts.map +1 -1
  254. package/dist/utils/env.cjs.map +1 -1
  255. package/dist/utils/env.js.map +1 -1
  256. package/dist/utils/event_source_parse.cjs.map +1 -1
  257. package/dist/utils/event_source_parse.d.cts +2 -2
  258. package/dist/utils/event_source_parse.d.cts.map +1 -1
  259. package/dist/utils/event_source_parse.d.ts +2 -2
  260. package/dist/utils/event_source_parse.d.ts.map +1 -1
  261. package/dist/utils/event_source_parse.js.map +1 -1
  262. package/dist/utils/function_calling.cjs.map +1 -1
  263. package/dist/utils/function_calling.js.map +1 -1
  264. package/dist/utils/is-network-error/index.cjs.map +1 -1
  265. package/dist/utils/is-network-error/index.js.map +1 -1
  266. package/dist/utils/json.cjs.map +1 -1
  267. package/dist/utils/json.js.map +1 -1
  268. package/dist/utils/json_schema.d.cts.map +1 -1
  269. package/dist/utils/namespace.cjs.map +1 -1
  270. package/dist/utils/namespace.js.map +1 -1
  271. package/dist/utils/p-retry/index.cjs.map +1 -1
  272. package/dist/utils/p-retry/index.js.map +1 -1
  273. package/dist/utils/signal.cjs.map +1 -1
  274. package/dist/utils/signal.js.map +1 -1
  275. package/dist/utils/standard_schema.cjs.map +1 -1
  276. package/dist/utils/standard_schema.js.map +1 -1
  277. package/dist/utils/stream.cjs.map +1 -1
  278. package/dist/utils/stream.d.cts +2 -2
  279. package/dist/utils/stream.d.cts.map +1 -1
  280. package/dist/utils/stream.d.ts +2 -2
  281. package/dist/utils/stream.d.ts.map +1 -1
  282. package/dist/utils/stream.js.map +1 -1
  283. package/dist/utils/testing/chat_models.cjs.map +1 -1
  284. package/dist/utils/testing/chat_models.d.cts.map +1 -1
  285. package/dist/utils/testing/chat_models.js.map +1 -1
  286. package/dist/utils/testing/retrievers.cjs.map +1 -1
  287. package/dist/utils/testing/retrievers.js.map +1 -1
  288. package/dist/utils/testing/vectorstores.cjs.map +1 -1
  289. package/dist/utils/testing/vectorstores.js.map +1 -1
  290. package/dist/utils/types/index.cjs.map +1 -1
  291. package/dist/utils/types/index.js.map +1 -1
  292. package/dist/utils/types/zod.cjs.map +1 -1
  293. package/dist/utils/types/zod.js.map +1 -1
  294. package/dist/utils/zod-to-json-schema/Options.d.cts +1 -0
  295. package/dist/utils/zod-to-json-schema/Refs.d.cts +1 -0
  296. package/dist/utils/zod-to-json-schema/errorMessages.d.cts +0 -1
  297. package/dist/utils/zod-to-json-schema/errorMessages.d.cts.map +1 -1
  298. package/dist/utils/zod-to-json-schema/index.d.cts +24 -0
  299. package/dist/utils/zod-to-json-schema/parseDef.d.cts +1 -0
  300. package/dist/utils/zod-to-json-schema/parsers/array.d.cts +0 -1
  301. package/dist/utils/zod-to-json-schema/parsers/array.d.cts.map +1 -1
  302. package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts +0 -1
  303. package/dist/utils/zod-to-json-schema/parsers/bigint.d.cts.map +1 -1
  304. package/dist/utils/zod-to-json-schema/parsers/branded.d.cts +1 -0
  305. package/dist/utils/zod-to-json-schema/parsers/catch.d.cts +1 -0
  306. package/dist/utils/zod-to-json-schema/parsers/date.d.cts +0 -1
  307. package/dist/utils/zod-to-json-schema/parsers/date.d.cts.map +1 -1
  308. package/dist/utils/zod-to-json-schema/parsers/default.d.cts +1 -0
  309. package/dist/utils/zod-to-json-schema/parsers/effects.d.cts +1 -0
  310. package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts +0 -1
  311. package/dist/utils/zod-to-json-schema/parsers/intersection.d.cts.map +1 -1
  312. package/dist/utils/zod-to-json-schema/parsers/map.d.cts +0 -1
  313. package/dist/utils/zod-to-json-schema/parsers/map.d.cts.map +1 -1
  314. package/dist/utils/zod-to-json-schema/parsers/never.d.cts +0 -1
  315. package/dist/utils/zod-to-json-schema/parsers/never.d.cts.map +1 -1
  316. package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts +0 -1
  317. package/dist/utils/zod-to-json-schema/parsers/nullable.d.cts.map +1 -1
  318. package/dist/utils/zod-to-json-schema/parsers/number.d.cts +0 -1
  319. package/dist/utils/zod-to-json-schema/parsers/number.d.cts.map +1 -1
  320. package/dist/utils/zod-to-json-schema/parsers/object.d.cts +0 -1
  321. package/dist/utils/zod-to-json-schema/parsers/object.d.cts.map +1 -1
  322. package/dist/utils/zod-to-json-schema/parsers/optional.d.cts +1 -0
  323. package/dist/utils/zod-to-json-schema/parsers/pipeline.d.cts +1 -0
  324. package/dist/utils/zod-to-json-schema/parsers/promise.d.cts +1 -0
  325. package/dist/utils/zod-to-json-schema/parsers/readonly.d.cts +1 -0
  326. package/dist/utils/zod-to-json-schema/parsers/record.d.cts +0 -1
  327. package/dist/utils/zod-to-json-schema/parsers/record.d.cts.map +1 -1
  328. package/dist/utils/zod-to-json-schema/parsers/set.d.cts +0 -1
  329. package/dist/utils/zod-to-json-schema/parsers/set.d.cts.map +1 -1
  330. package/dist/utils/zod-to-json-schema/parsers/string.d.cts +0 -1
  331. package/dist/utils/zod-to-json-schema/parsers/string.d.cts.map +1 -1
  332. package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts +0 -1
  333. package/dist/utils/zod-to-json-schema/parsers/tuple.d.cts.map +1 -1
  334. package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts +0 -1
  335. package/dist/utils/zod-to-json-schema/parsers/undefined.d.cts.map +1 -1
  336. package/dist/utils/zod-to-json-schema/parsers/union.d.cts +1 -2
  337. package/dist/utils/zod-to-json-schema/parsers/union.d.cts.map +1 -1
  338. package/dist/utils/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  339. package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts +0 -1
  340. package/dist/utils/zod-to-json-schema/parsers/unknown.d.cts.map +1 -1
  341. package/dist/utils/zod-to-json-schema/selectParser.d.cts +1 -0
  342. package/dist/utils/zod-to-json-schema/zodToJsonSchema.d.cts +1 -0
  343. package/dist/vectorstores.cjs.map +1 -1
  344. package/dist/vectorstores.js.map +1 -1
  345. package/package.json +5 -13
@@ -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 // eslint-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 // eslint-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 // eslint-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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // eslint-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 // eslint-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 // eslint-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 // eslint-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.d.cts","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"mappings":"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"}
1
+ {"version":3,"file":"chat_models.d.cts","names":[],"sources":["../../../src/utils/testing/chat_models.ts"],"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 // eslint-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 // eslint-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 // eslint-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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>,\n config?: StructuredOutputMethodOptions<false>\n ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n withStructuredOutput<\n // eslint-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 // eslint-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 // eslint-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 // eslint-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":"retrievers.cjs","names":["BaseRetriever","Document"],"sources":["../../../src/utils/testing/retrievers.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { BaseRetriever } from \"../../retrievers/index.js\";\n\nexport class FakeRetriever extends BaseRetriever {\n lc_namespace = [\"test\", \"fake\"];\n\n output = [\n new Document({ pageContent: \"foo\" }),\n new Document({ pageContent: \"bar\" }),\n ];\n\n constructor(fields?: { output: Document[] }) {\n super();\n this.output = fields?.output ?? this.output;\n }\n\n async _getRelevantDocuments(\n _query: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Document<Record<string, any>>[]> {\n return this.output;\n }\n}\n"],"mappings":";;;AAGA,IAAa,gBAAb,cAAmCA,yBAAAA,cAAc;CAC/C,eAAe,CAAC,QAAQ,OAAO;CAE/B,SAAS,CACP,IAAIC,iBAAAA,SAAS,EAAE,aAAa,OAAO,CAAC,EACpC,IAAIA,iBAAAA,SAAS,EAAE,aAAa,OAAO,CAAC,CACrC;CAED,YAAY,QAAiC;AAC3C,SAAO;AACP,OAAK,SAAS,QAAQ,UAAU,KAAK;;CAGvC,MAAM,sBACJ,QAE0C;AAC1C,SAAO,KAAK"}
1
+ {"version":3,"file":"retrievers.cjs","names":["BaseRetriever","Document"],"sources":["../../../src/utils/testing/retrievers.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { BaseRetriever } from \"../../retrievers/index.js\";\n\nexport class FakeRetriever extends BaseRetriever {\n lc_namespace = [\"test\", \"fake\"];\n\n output = [\n new Document({ pageContent: \"foo\" }),\n new Document({ pageContent: \"bar\" }),\n ];\n\n constructor(fields?: { output: Document[] }) {\n super();\n this.output = fields?.output ?? this.output;\n }\n\n async _getRelevantDocuments(\n _query: string\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Document<Record<string, any>>[]> {\n return this.output;\n }\n}\n"],"mappings":";;;AAGA,IAAa,gBAAb,cAAmCA,yBAAAA,cAAc;CAC/C,eAAe,CAAC,QAAQ,OAAO;CAE/B,SAAS,CACP,IAAIC,iBAAAA,SAAS,EAAE,aAAa,OAAO,CAAC,EACpC,IAAIA,iBAAAA,SAAS,EAAE,aAAa,OAAO,CAAC,CACrC;CAED,YAAY,QAAiC;AAC3C,SAAO;AACP,OAAK,SAAS,QAAQ,UAAU,KAAK;;CAGvC,MAAM,sBACJ,QAE0C;AAC1C,SAAO,KAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"retrievers.js","names":[],"sources":["../../../src/utils/testing/retrievers.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { BaseRetriever } from \"../../retrievers/index.js\";\n\nexport class FakeRetriever extends BaseRetriever {\n lc_namespace = [\"test\", \"fake\"];\n\n output = [\n new Document({ pageContent: \"foo\" }),\n new Document({ pageContent: \"bar\" }),\n ];\n\n constructor(fields?: { output: Document[] }) {\n super();\n this.output = fields?.output ?? this.output;\n }\n\n async _getRelevantDocuments(\n _query: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Document<Record<string, any>>[]> {\n return this.output;\n }\n}\n"],"mappings":";;;AAGA,IAAa,gBAAb,cAAmC,cAAc;CAC/C,eAAe,CAAC,QAAQ,OAAO;CAE/B,SAAS,CACP,IAAI,SAAS,EAAE,aAAa,OAAO,CAAC,EACpC,IAAI,SAAS,EAAE,aAAa,OAAO,CAAC,CACrC;CAED,YAAY,QAAiC;AAC3C,SAAO;AACP,OAAK,SAAS,QAAQ,UAAU,KAAK;;CAGvC,MAAM,sBACJ,QAE0C;AAC1C,SAAO,KAAK"}
1
+ {"version":3,"file":"retrievers.js","names":[],"sources":["../../../src/utils/testing/retrievers.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { BaseRetriever } from \"../../retrievers/index.js\";\n\nexport class FakeRetriever extends BaseRetriever {\n lc_namespace = [\"test\", \"fake\"];\n\n output = [\n new Document({ pageContent: \"foo\" }),\n new Document({ pageContent: \"bar\" }),\n ];\n\n constructor(fields?: { output: Document[] }) {\n super();\n this.output = fields?.output ?? this.output;\n }\n\n async _getRelevantDocuments(\n _query: string\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Document<Record<string, any>>[]> {\n return this.output;\n }\n}\n"],"mappings":";;;AAGA,IAAa,gBAAb,cAAmC,cAAc;CAC/C,eAAe,CAAC,QAAQ,OAAO;CAE/B,SAAS,CACP,IAAI,SAAS,EAAE,aAAa,OAAO,CAAC,EACpC,IAAI,SAAS,EAAE,aAAa,OAAO,CAAC,CACrC;CAED,YAAY,QAAiC;AAC3C,SAAO;AACP,OAAK,SAAS,QAAQ,UAAU,KAAK;;CAGvC,MAAM,sBACJ,QAE0C;AAC1C,SAAO,KAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"vectorstores.cjs","names":["VectorStore","cosine","Document"],"sources":["../../../src/utils/testing/vectorstores.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { EmbeddingsInterface } from \"../../embeddings.js\";\nimport { VectorStore } from \"../../vectorstores.js\";\nimport { cosine } from \"../ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `FakeVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface FakeVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * Class that extends `VectorStore` to store vectors in memory. Provides\n * methods for adding documents, performing similarity searches, and\n * creating instances from texts, documents, or an existing index.\n */\nexport class FakeVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: FakeVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n const searches = filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: filteredMemoryVectors[search.index].metadata,\n pageContent: filteredMemoryVectors[search.index].content,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return FakeVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an existing\n * index. It creates a new `FakeVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwBA,qBAAAA,YAAY;CAG/C,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAA8B,EAAE,EACjD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAcC,qBAAAA;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GAC1B,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;;;;;;;;;;;CAa/D,MAAM,gCACJ,OACA,GACA,QAC+B;EAC/B,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAOT,UAAO,OAJK,IAAIC,iBAAAA,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC3B,CAAC,CACgB;;EAEpB,MAAM,wBAAwB,KAAK,cAAc,OAAO,eAAe;AAiBvE,SAhBiB,sBACd,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACD,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE,CAEgC,KAAK,WAAW,CAC5D,IAAIA,iBAAAA,SAAS;GACX,UAAU,sBAAsB,OAAO,OAAO;GAC9C,aAAa,sBAAsB,OAAO,OAAO;GAClD,CAAC,EACF,OAAO,WACR,CAAC;;;;;;;;;;;;CAeJ,aAAa,UACX,OACA,WACA,YACA,UAC0B;EAC1B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAIA,iBAAAA,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,gBAAgB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWlE,aAAa,cACX,MACA,YACA,UAC0B;EAC1B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC0B;AAE1B,SADiB,IAAI,KAAK,YAAY,SAAS"}
1
+ {"version":3,"file":"vectorstores.cjs","names":["VectorStore","cosine","Document"],"sources":["../../../src/utils/testing/vectorstores.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { EmbeddingsInterface } from \"../../embeddings.js\";\nimport { VectorStore } from \"../../vectorstores.js\";\nimport { cosine } from \"../ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `FakeVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface FakeVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * Class that extends `VectorStore` to store vectors in memory. Provides\n * methods for adding documents, performing similarity searches, and\n * creating instances from texts, documents, or an existing index.\n */\nexport class FakeVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: FakeVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n const searches = filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: filteredMemoryVectors[search.index].metadata,\n pageContent: filteredMemoryVectors[search.index].content,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return FakeVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an existing\n * index. It creates a new `FakeVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwBA,qBAAAA,YAAY;CAG/C,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAA8B,EAAE,EACjD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAcC,qBAAAA;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GAC1B,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;;;;;;;;;;;CAa/D,MAAM,gCACJ,OACA,GACA,QAC+B;EAC/B,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAOT,UAAO,OAJK,IAAIC,iBAAAA,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC3B,CAAC,CACgB;;EAEpB,MAAM,wBAAwB,KAAK,cAAc,OAAO,eAAe;AAiBvE,SAhBiB,sBACd,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACD,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE,CAEgC,KAAK,WAAW,CAC5D,IAAIA,iBAAAA,SAAS;GACX,UAAU,sBAAsB,OAAO,OAAO;GAC9C,aAAa,sBAAsB,OAAO,OAAO;GAClD,CAAC,EACF,OAAO,WACR,CAAC;;;;;;;;;;;;CAeJ,aAAa,UACX,OACA,WACA,YACA,UAC0B;EAC1B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAIA,iBAAAA,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,gBAAgB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWlE,aAAa,cACX,MACA,YACA,UAC0B;EAC1B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC0B;AAE1B,SADiB,IAAI,KAAK,YAAY,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"vectorstores.js","names":[],"sources":["../../../src/utils/testing/vectorstores.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { EmbeddingsInterface } from \"../../embeddings.js\";\nimport { VectorStore } from \"../../vectorstores.js\";\nimport { cosine } from \"../ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `FakeVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface FakeVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * Class that extends `VectorStore` to store vectors in memory. Provides\n * methods for adding documents, performing similarity searches, and\n * creating instances from texts, documents, or an existing index.\n */\nexport class FakeVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: FakeVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n const searches = filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: filteredMemoryVectors[search.index].metadata,\n pageContent: filteredMemoryVectors[search.index].content,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return FakeVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an existing\n * index. It creates a new `FakeVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwB,YAAY;CAG/C,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAA8B,EAAE,EACjD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAc;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GAC1B,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;;;;;;;;;;;CAa/D,MAAM,gCACJ,OACA,GACA,QAC+B;EAC/B,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAOT,UAAO,OAJK,IAAI,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC3B,CAAC,CACgB;;EAEpB,MAAM,wBAAwB,KAAK,cAAc,OAAO,eAAe;AAiBvE,SAhBiB,sBACd,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACD,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE,CAEgC,KAAK,WAAW,CAC5D,IAAI,SAAS;GACX,UAAU,sBAAsB,OAAO,OAAO;GAC9C,aAAa,sBAAsB,OAAO,OAAO;GAClD,CAAC,EACF,OAAO,WACR,CAAC;;;;;;;;;;;;CAeJ,aAAa,UACX,OACA,WACA,YACA,UAC0B;EAC1B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAI,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,gBAAgB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWlE,aAAa,cACX,MACA,YACA,UAC0B;EAC1B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC0B;AAE1B,SADiB,IAAI,KAAK,YAAY,SAAS"}
1
+ {"version":3,"file":"vectorstores.js","names":[],"sources":["../../../src/utils/testing/vectorstores.ts"],"sourcesContent":["import { Document } from \"../../documents/document.js\";\nimport { EmbeddingsInterface } from \"../../embeddings.js\";\nimport { VectorStore } from \"../../vectorstores.js\";\nimport { cosine } from \"../ml-distance/similarities.js\";\n\n/**\n * Interface representing a vector in memory. It includes the content\n * (text), the corresponding embedding (vector), and any associated\n * metadata.\n */\ninterface MemoryVector {\n content: string;\n embedding: number[];\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n metadata: Record<string, any>;\n}\n\n/**\n * Interface for the arguments that can be passed to the\n * `FakeVectorStore` constructor. It includes an optional `similarity`\n * function.\n */\nexport interface FakeVectorStoreArgs {\n similarity?: typeof cosine;\n}\n\n/**\n * Class that extends `VectorStore` to store vectors in memory. Provides\n * methods for adding documents, performing similarity searches, and\n * creating instances from texts, documents, or an existing index.\n */\nexport class FakeVectorStore extends VectorStore {\n declare FilterType: (doc: Document) => boolean;\n\n memoryVectors: MemoryVector[] = [];\n\n similarity: typeof cosine;\n\n _vectorstoreType(): string {\n return \"memory\";\n }\n\n constructor(\n embeddings: EmbeddingsInterface,\n { similarity, ...rest }: FakeVectorStoreArgs = {}\n ) {\n super(embeddings, rest);\n\n this.similarity = similarity ?? cosine;\n }\n\n /**\n * Method to add documents to the memory vector store. It extracts the\n * text from each document, generates embeddings for them, and adds the\n * resulting vectors to the store.\n * @param documents Array of `Document` instances to be added to the store.\n * @returns Promise that resolves when all documents have been added.\n */\n async addDocuments(documents: Document[]): Promise<void> {\n const texts = documents.map(({ pageContent }) => pageContent);\n return this.addVectors(\n await this.embeddings.embedDocuments(texts),\n documents\n );\n }\n\n /**\n * Method to add vectors to the memory vector store. It creates\n * `MemoryVector` instances for each vector and document pair and adds\n * them to the store.\n * @param vectors Array of vectors to be added to the store.\n * @param documents Array of `Document` instances corresponding to the vectors.\n * @returns Promise that resolves when all vectors have been added.\n */\n async addVectors(vectors: number[][], documents: Document[]): Promise<void> {\n const memoryVectors = vectors.map((embedding, idx) => ({\n content: documents[idx].pageContent,\n embedding,\n metadata: documents[idx].metadata,\n }));\n\n this.memoryVectors = this.memoryVectors.concat(memoryVectors);\n }\n\n /**\n * Method to perform a similarity search in the memory vector store. It\n * calculates the similarity between the query vector and each vector in\n * the store, sorts the results by similarity, and returns the top `k`\n * results along with their scores.\n * @param query Query vector to compare against the vectors in the store.\n * @param k Number of top results to return.\n * @param filter Optional filter function to apply to the vectors before performing the search.\n * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score.\n */\n async similaritySearchVectorWithScore(\n query: number[],\n k: number,\n filter?: this[\"FilterType\"]\n ): Promise<[Document, number][]> {\n const filterFunction = (memoryVector: MemoryVector) => {\n if (!filter) {\n return true;\n }\n\n const doc = new Document({\n metadata: memoryVector.metadata,\n pageContent: memoryVector.content,\n });\n return filter(doc);\n };\n const filteredMemoryVectors = this.memoryVectors.filter(filterFunction);\n const searches = filteredMemoryVectors\n .map((vector, index) => ({\n similarity: this.similarity(query, vector.embedding),\n index,\n }))\n .sort((a, b) => (a.similarity > b.similarity ? -1 : 0))\n .slice(0, k);\n\n const result: [Document, number][] = searches.map((search) => [\n new Document({\n metadata: filteredMemoryVectors[search.index].metadata,\n pageContent: filteredMemoryVectors[search.index].content,\n }),\n search.similarity,\n ]);\n\n return result;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * texts. It creates a `Document` for each text and metadata pair, and\n * adds them to the store.\n * @param texts Array of texts to be added to the store.\n * @param metadatas Array or single object of metadata corresponding to the texts.\n * @param embeddings `Embeddings` instance used to generate embeddings for the texts.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromTexts(\n texts: string[],\n metadatas: object[] | object,\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const docs: Document[] = [];\n for (let i = 0; i < texts.length; i += 1) {\n const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas;\n const newDoc = new Document({\n pageContent: texts[i],\n metadata,\n });\n docs.push(newDoc);\n }\n return FakeVectorStore.fromDocuments(docs, embeddings, dbConfig);\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an array of\n * `Document` instances. It adds the documents to the store.\n * @param docs Array of `Document` instances to be added to the store.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromDocuments(\n docs: Document[],\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n await instance.addDocuments(docs);\n return instance;\n }\n\n /**\n * Static method to create a `FakeVectorStore` instance from an existing\n * index. It creates a new `FakeVectorStore` instance without adding any\n * documents or vectors.\n * @param embeddings `Embeddings` instance used to generate embeddings for the documents.\n * @param dbConfig Optional `FakeVectorStoreArgs` to configure the `FakeVectorStore` instance.\n * @returns Promise that resolves with a new `FakeVectorStore` instance.\n */\n static async fromExistingIndex(\n embeddings: EmbeddingsInterface,\n dbConfig?: FakeVectorStoreArgs\n ): Promise<FakeVectorStore> {\n const instance = new this(embeddings, dbConfig);\n return instance;\n }\n}\n"],"mappings":";;;;;;;;;AA+BA,IAAa,kBAAb,MAAa,wBAAwB,YAAY;CAG/C,gBAAgC,EAAE;CAElC;CAEA,mBAA2B;AACzB,SAAO;;CAGT,YACE,YACA,EAAE,YAAY,GAAG,SAA8B,EAAE,EACjD;AACA,QAAM,YAAY,KAAK;AAEvB,OAAK,aAAa,cAAc;;;;;;;;;CAUlC,MAAM,aAAa,WAAsC;EACvD,MAAM,QAAQ,UAAU,KAAK,EAAE,kBAAkB,YAAY;AAC7D,SAAO,KAAK,WACV,MAAM,KAAK,WAAW,eAAe,MAAM,EAC3C,UACD;;;;;;;;;;CAWH,MAAM,WAAW,SAAqB,WAAsC;EAC1E,MAAM,gBAAgB,QAAQ,KAAK,WAAW,SAAS;GACrD,SAAS,UAAU,KAAK;GACxB;GACA,UAAU,UAAU,KAAK;GAC1B,EAAE;AAEH,OAAK,gBAAgB,KAAK,cAAc,OAAO,cAAc;;;;;;;;;;;;CAa/D,MAAM,gCACJ,OACA,GACA,QAC+B;EAC/B,MAAM,kBAAkB,iBAA+B;AACrD,OAAI,CAAC,OACH,QAAO;AAOT,UAAO,OAJK,IAAI,SAAS;IACvB,UAAU,aAAa;IACvB,aAAa,aAAa;IAC3B,CAAC,CACgB;;EAEpB,MAAM,wBAAwB,KAAK,cAAc,OAAO,eAAe;AAiBvE,SAhBiB,sBACd,KAAK,QAAQ,WAAW;GACvB,YAAY,KAAK,WAAW,OAAO,OAAO,UAAU;GACpD;GACD,EAAE,CACF,MAAM,GAAG,MAAO,EAAE,aAAa,EAAE,aAAa,KAAK,EAAG,CACtD,MAAM,GAAG,EAAE,CAEgC,KAAK,WAAW,CAC5D,IAAI,SAAS;GACX,UAAU,sBAAsB,OAAO,OAAO;GAC9C,aAAa,sBAAsB,OAAO,OAAO;GAClD,CAAC,EACF,OAAO,WACR,CAAC;;;;;;;;;;;;CAeJ,aAAa,UACX,OACA,WACA,YACA,UAC0B;EAC1B,MAAM,OAAmB,EAAE;AAC3B,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GACxC,MAAM,WAAW,MAAM,QAAQ,UAAU,GAAG,UAAU,KAAK;GAC3D,MAAM,SAAS,IAAI,SAAS;IAC1B,aAAa,MAAM;IACnB;IACD,CAAC;AACF,QAAK,KAAK,OAAO;;AAEnB,SAAO,gBAAgB,cAAc,MAAM,YAAY,SAAS;;;;;;;;;;CAWlE,aAAa,cACX,MACA,YACA,UAC0B;EAC1B,MAAM,WAAW,IAAI,KAAK,YAAY,SAAS;AAC/C,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO;;;;;;;;;;CAWT,aAAa,kBACX,YACA,UAC0B;AAE1B,SADiB,IAAI,KAAK,YAAY,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/utils/types/index.ts"],"sourcesContent":["export * from \"./zod.js\";\n\n/**\n * Represents a string value with autocompleted, but not required, suggestions.\n */\n\nexport type StringWithAutocomplete<T> = T | (string & Record<never, never>);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues<K extends string = string> = Record<K, any>;\n\nexport type PartialValues<K extends string = string> = Record<\n K,\n string | (() => Promise<string>) | (() => string)\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ChainValues = Record<string, any>;\n"],"mappings":""}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/utils/types/index.ts"],"sourcesContent":["export * from \"./zod.js\";\n\n/**\n * Represents a string value with autocompleted, but not required, suggestions.\n */\n\nexport type StringWithAutocomplete<T> = T | (string & Record<never, never>);\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues<K extends string = string> = Record<K, any>;\n\nexport type PartialValues<K extends string = string> = Record<\n K,\n string | (() => Promise<string>) | (() => string)\n>;\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ChainValues = Record<string, any>;\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/types/index.ts"],"sourcesContent":["export * from \"./zod.js\";\n\n/**\n * Represents a string value with autocompleted, but not required, suggestions.\n */\n\nexport type StringWithAutocomplete<T> = T | (string & Record<never, never>);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues<K extends string = string> = Record<K, any>;\n\nexport type PartialValues<K extends string = string> = Record<\n K,\n string | (() => Promise<string>) | (() => string)\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ChainValues = Record<string, any>;\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/types/index.ts"],"sourcesContent":["export * from \"./zod.js\";\n\n/**\n * Represents a string value with autocompleted, but not required, suggestions.\n */\n\nexport type StringWithAutocomplete<T> = T | (string & Record<never, never>);\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues<K extends string = string> = Record<K, any>;\n\nexport type PartialValues<K extends string = string> = Record<\n K,\n string | (() => Promise<string>) | (() => string)\n>;\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ChainValues = Record<string, any>;\n"],"mappings":""}