@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":"history.js","names":[],"sources":["../../src/runnables/history.ts"],"sourcesContent":["import {\n BaseChatMessageHistory,\n BaseListChatMessageHistory,\n} from \"../chat_history.js\";\nimport {\n AIMessage,\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"../messages/index.js\";\nimport { Run } from \"../tracers/base.js\";\nimport {\n Runnable,\n RunnableBinding,\n type RunnableBindingArgs,\n RunnableLambda,\n} from \"./base.js\";\nimport { RunnableConfig } from \"./config.js\";\nimport { RunnablePassthrough } from \"./passthrough.js\";\n\ntype GetSessionHistoryCallable = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: Array<any>\n) =>\n | Promise<BaseChatMessageHistory | BaseListChatMessageHistory>\n | BaseChatMessageHistory\n | BaseListChatMessageHistory;\n\nexport interface RunnableWithMessageHistoryInputs<\n RunInput,\n RunOutput,\n> extends Omit<RunnableBindingArgs<RunInput, RunOutput>, \"bound\" | \"config\"> {\n runnable: Runnable<RunInput, RunOutput>;\n getMessageHistory: GetSessionHistoryCallable;\n inputMessagesKey?: string;\n outputMessagesKey?: string;\n historyMessagesKey?: string;\n config?: RunnableConfig;\n}\n\n/**\n * Wraps a LCEL chain and manages history. It appends input messages\n * and chain outputs as history, and adds the current history messages to\n * the chain input.\n * @example\n * ```typescript\n * // pnpm install @langchain/anthropic @langchain/community @upstash/redis\n *\n * import {\n * ChatPromptTemplate,\n * MessagesPlaceholder,\n * } from \"@langchain/core/prompts\";\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n * import { UpstashRedisChatMessageHistory } from \"@langchain/community/stores/message/upstash_redis\";\n * // For demos, you can also use an in-memory store:\n * // import { ChatMessageHistory } from \"@langchain/classic/stores/message/in_memory\";\n *\n * const prompt = ChatPromptTemplate.fromMessages([\n * [\"system\", \"You're an assistant who's good at {ability}\"],\n * new MessagesPlaceholder(\"history\"),\n * [\"human\", \"{question}\"],\n * ]);\n *\n * const chain = prompt.pipe(new ChatAnthropic({}));\n *\n * const chainWithHistory = new RunnableWithMessageHistory({\n * runnable: chain,\n * getMessageHistory: (sessionId) =>\n * new UpstashRedisChatMessageHistory({\n * sessionId,\n * config: {\n * url: process.env.UPSTASH_REDIS_REST_URL!,\n * token: process.env.UPSTASH_REDIS_REST_TOKEN!,\n * },\n * }),\n * inputMessagesKey: \"question\",\n * historyMessagesKey: \"history\",\n * });\n *\n * const result = await chainWithHistory.invoke(\n * {\n * ability: \"math\",\n * question: \"What does cosine mean?\",\n * },\n * {\n * configurable: {\n * sessionId: \"some_string_identifying_a_user\",\n * },\n * }\n * );\n *\n * const result2 = await chainWithHistory.invoke(\n * {\n * ability: \"math\",\n * question: \"What's its inverse?\",\n * },\n * {\n * configurable: {\n * sessionId: \"some_string_identifying_a_user\",\n * },\n * }\n * );\n * ```\n */\nexport class RunnableWithMessageHistory<\n RunInput,\n RunOutput,\n> extends RunnableBinding<RunInput, RunOutput> {\n runnable: Runnable<RunInput, RunOutput>;\n\n inputMessagesKey?: string;\n\n outputMessagesKey?: string;\n\n historyMessagesKey?: string;\n\n getMessageHistory: GetSessionHistoryCallable;\n\n constructor(fields: RunnableWithMessageHistoryInputs<RunInput, RunOutput>) {\n let historyChain: Runnable = RunnableLambda.from((input, options) =>\n this._enterHistory(input, options ?? {})\n ).withConfig({ runName: \"loadHistory\" });\n\n const messagesKey = fields.historyMessagesKey ?? fields.inputMessagesKey;\n if (messagesKey) {\n historyChain = RunnablePassthrough.assign({\n [messagesKey]: historyChain,\n }).withConfig({ runName: \"insertHistory\" });\n }\n\n const bound = historyChain\n .pipe(\n fields.runnable.withListeners({\n onEnd: (run, config) => this._exitHistory(run, config ?? {}),\n })\n )\n .withConfig({ runName: \"RunnableWithMessageHistory\" });\n\n const config = fields.config ?? {};\n\n super({\n ...fields,\n config,\n bound,\n });\n this.runnable = fields.runnable;\n this.getMessageHistory = fields.getMessageHistory;\n this.inputMessagesKey = fields.inputMessagesKey;\n this.outputMessagesKey = fields.outputMessagesKey;\n this.historyMessagesKey = fields.historyMessagesKey;\n }\n\n _getInputMessages(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inputValue: string | BaseMessage | Array<BaseMessage> | Record<string, any>\n ): Array<BaseMessage> {\n let parsedInputValue;\n if (\n typeof inputValue === \"object\" &&\n !Array.isArray(inputValue) &&\n !isBaseMessage(inputValue)\n ) {\n let key;\n if (this.inputMessagesKey) {\n key = this.inputMessagesKey;\n } else if (Object.keys(inputValue).length === 1) {\n key = Object.keys(inputValue)[0];\n } else {\n key = \"input\";\n }\n if (Array.isArray(inputValue[key]) && Array.isArray(inputValue[key][0])) {\n parsedInputValue = inputValue[key][0];\n } else {\n parsedInputValue = inputValue[key];\n }\n } else {\n parsedInputValue = inputValue;\n }\n if (typeof parsedInputValue === \"string\") {\n return [new HumanMessage(parsedInputValue)];\n } else if (Array.isArray(parsedInputValue)) {\n return parsedInputValue;\n } else if (isBaseMessage(parsedInputValue)) {\n return [parsedInputValue];\n } else {\n throw new Error(\n `Expected a string, BaseMessage, or array of BaseMessages.\\nGot ${JSON.stringify(\n parsedInputValue,\n null,\n 2\n )}`\n );\n }\n }\n\n _getOutputMessages(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n outputValue: string | BaseMessage | Array<BaseMessage> | Record<string, any>\n ): Array<BaseMessage> {\n let parsedOutputValue;\n if (\n !Array.isArray(outputValue) &&\n !isBaseMessage(outputValue) &&\n typeof outputValue !== \"string\"\n ) {\n let key;\n if (this.outputMessagesKey !== undefined) {\n key = this.outputMessagesKey;\n } else if (Object.keys(outputValue).length === 1) {\n key = Object.keys(outputValue)[0];\n } else {\n key = \"output\";\n }\n // If you are wrapping a chat model directly\n // The output is actually this weird generations object\n if (outputValue.generations !== undefined) {\n parsedOutputValue = outputValue.generations[0][0].message;\n } else {\n parsedOutputValue = outputValue[key];\n }\n } else {\n parsedOutputValue = outputValue;\n }\n\n if (typeof parsedOutputValue === \"string\") {\n return [new AIMessage(parsedOutputValue)];\n } else if (Array.isArray(parsedOutputValue)) {\n return parsedOutputValue;\n } else if (isBaseMessage(parsedOutputValue)) {\n return [parsedOutputValue];\n } else {\n throw new Error(\n `Expected a string, BaseMessage, or array of BaseMessages. Received: ${JSON.stringify(\n parsedOutputValue,\n null,\n 2\n )}`\n );\n }\n }\n\n async _enterHistory(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n kwargs?: RunnableConfig\n ): Promise<BaseMessage[]> {\n const history = kwargs?.configurable?.messageHistory;\n const messages = await history.getMessages();\n if (this.historyMessagesKey === undefined) {\n return messages.concat(this._getInputMessages(input));\n }\n return messages;\n }\n\n async _exitHistory(run: Run, config: RunnableConfig): Promise<void> {\n const history = config.configurable?.messageHistory;\n\n // Get input messages\n let inputs;\n // Chat model inputs are nested arrays\n if (Array.isArray(run.inputs) && Array.isArray(run.inputs[0])) {\n inputs = run.inputs[0];\n } else {\n inputs = run.inputs;\n }\n let inputMessages = this._getInputMessages(inputs);\n // If historic messages were prepended to the input messages, remove them to\n // avoid adding duplicate messages to history.\n if (this.historyMessagesKey === undefined) {\n const existingMessages = await history.getMessages();\n inputMessages = inputMessages.slice(existingMessages.length);\n }\n // Get output messages\n const outputValue = run.outputs;\n if (!outputValue) {\n throw new Error(\n `Output values from 'Run' undefined. Run: ${JSON.stringify(\n run,\n null,\n 2\n )}`\n );\n }\n const outputMessages = this._getOutputMessages(outputValue);\n await history.addMessages([...inputMessages, ...outputMessages]);\n }\n\n async _mergeConfig(...configs: Array<RunnableConfig | undefined>) {\n const config = await super._mergeConfig(...configs);\n // Extract sessionId\n if (!config.configurable || !config.configurable.sessionId) {\n const exampleInput = {\n [this.inputMessagesKey ?? \"input\"]: \"foo\",\n };\n const exampleConfig = { configurable: { sessionId: \"123\" } };\n throw new Error(\n `sessionId is required. Pass it in as part of the config argument to .invoke() or .stream()\\n` +\n `eg. chain.invoke(${JSON.stringify(exampleInput)}, ${JSON.stringify(\n exampleConfig\n )})`\n );\n }\n // attach messageHistory\n const { sessionId } = config.configurable;\n config.configurable.messageHistory =\n await this.getMessageHistory(sessionId);\n return config;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwGA,IAAa,6BAAb,cAGU,gBAAqC;CAC7C;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAA+D;EACzE,IAAI,eAAyB,eAAe,MAAM,OAAO,YACvD,KAAK,cAAc,OAAO,WAAW,EAAE,CAAC,CACzC,CAAC,WAAW,EAAE,SAAS,eAAe,CAAC;EAExC,MAAM,cAAc,OAAO,sBAAsB,OAAO;AACxD,MAAI,YACF,gBAAe,oBAAoB,OAAO,GACvC,cAAc,cAChB,CAAC,CAAC,WAAW,EAAE,SAAS,iBAAiB,CAAC;EAG7C,MAAM,QAAQ,aACX,KACC,OAAO,SAAS,cAAc,EAC5B,QAAQ,KAAK,WAAW,KAAK,aAAa,KAAK,UAAU,EAAE,CAAC,EAC7D,CAAC,CACH,CACA,WAAW,EAAE,SAAS,8BAA8B,CAAC;EAExD,MAAM,SAAS,OAAO,UAAU,EAAE;AAElC,QAAM;GACJ,GAAG;GACH;GACA;GACD,CAAC;AACF,OAAK,WAAW,OAAO;AACvB,OAAK,oBAAoB,OAAO;AAChC,OAAK,mBAAmB,OAAO;AAC/B,OAAK,oBAAoB,OAAO;AAChC,OAAK,qBAAqB,OAAO;;CAGnC,kBAEE,YACoB;EACpB,IAAI;AACJ,MACE,OAAO,eAAe,YACtB,CAAC,MAAM,QAAQ,WAAW,IAC1B,CAAC,cAAc,WAAW,EAC1B;GACA,IAAI;AACJ,OAAI,KAAK,iBACP,OAAM,KAAK;YACF,OAAO,KAAK,WAAW,CAAC,WAAW,EAC5C,OAAM,OAAO,KAAK,WAAW,CAAC;OAE9B,OAAM;AAER,OAAI,MAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,QAAQ,WAAW,KAAK,GAAG,CACrE,oBAAmB,WAAW,KAAK;OAEnC,oBAAmB,WAAW;QAGhC,oBAAmB;AAErB,MAAI,OAAO,qBAAqB,SAC9B,QAAO,CAAC,IAAI,aAAa,iBAAiB,CAAC;WAClC,MAAM,QAAQ,iBAAiB,CACxC,QAAO;WACE,cAAc,iBAAiB,CACxC,QAAO,CAAC,iBAAiB;MAEzB,OAAM,IAAI,MACR,kEAAkE,KAAK,UACrE,kBACA,MACA,EACD,GACF;;CAIL,mBAEE,aACoB;EACpB,IAAI;AACJ,MACE,CAAC,MAAM,QAAQ,YAAY,IAC3B,CAAC,cAAc,YAAY,IAC3B,OAAO,gBAAgB,UACvB;GACA,IAAI;AACJ,OAAI,KAAK,sBAAsB,KAAA,EAC7B,OAAM,KAAK;YACF,OAAO,KAAK,YAAY,CAAC,WAAW,EAC7C,OAAM,OAAO,KAAK,YAAY,CAAC;OAE/B,OAAM;AAIR,OAAI,YAAY,gBAAgB,KAAA,EAC9B,qBAAoB,YAAY,YAAY,GAAG,GAAG;OAElD,qBAAoB,YAAY;QAGlC,qBAAoB;AAGtB,MAAI,OAAO,sBAAsB,SAC/B,QAAO,CAAC,IAAI,UAAU,kBAAkB,CAAC;WAChC,MAAM,QAAQ,kBAAkB,CACzC,QAAO;WACE,cAAc,kBAAkB,CACzC,QAAO,CAAC,kBAAkB;MAE1B,OAAM,IAAI,MACR,uEAAuE,KAAK,UAC1E,mBACA,MACA,EACD,GACF;;CAIL,MAAM,cAEJ,OACA,QACwB;EAExB,MAAM,WAAW,OADD,QAAQ,cAAc,gBACP,aAAa;AAC5C,MAAI,KAAK,uBAAuB,KAAA,EAC9B,QAAO,SAAS,OAAO,KAAK,kBAAkB,MAAM,CAAC;AAEvD,SAAO;;CAGT,MAAM,aAAa,KAAU,QAAuC;EAClE,MAAM,UAAU,OAAO,cAAc;EAGrC,IAAI;AAEJ,MAAI,MAAM,QAAQ,IAAI,OAAO,IAAI,MAAM,QAAQ,IAAI,OAAO,GAAG,CAC3D,UAAS,IAAI,OAAO;MAEpB,UAAS,IAAI;EAEf,IAAI,gBAAgB,KAAK,kBAAkB,OAAO;AAGlD,MAAI,KAAK,uBAAuB,KAAA,GAAW;GACzC,MAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,mBAAgB,cAAc,MAAM,iBAAiB,OAAO;;EAG9D,MAAM,cAAc,IAAI;AACxB,MAAI,CAAC,YACH,OAAM,IAAI,MACR,4CAA4C,KAAK,UAC/C,KACA,MACA,EACD,GACF;EAEH,MAAM,iBAAiB,KAAK,mBAAmB,YAAY;AAC3D,QAAM,QAAQ,YAAY,CAAC,GAAG,eAAe,GAAG,eAAe,CAAC;;CAGlE,MAAM,aAAa,GAAG,SAA4C;EAChE,MAAM,SAAS,MAAM,MAAM,aAAa,GAAG,QAAQ;AAEnD,MAAI,CAAC,OAAO,gBAAgB,CAAC,OAAO,aAAa,WAAW;GAC1D,MAAM,eAAe,GAClB,KAAK,oBAAoB,UAAU,OACrC;AAED,SAAM,IAAI,MACR,gHACsB,KAAK,UAAU,aAAa,CAAC,IAAI,KAAK,UAHxC,EAAE,cAAc,EAAE,WAAW,OAAO,EAAE,CAKvD,CAAC,GACL;;EAGH,MAAM,EAAE,cAAc,OAAO;AAC7B,SAAO,aAAa,iBAClB,MAAM,KAAK,kBAAkB,UAAU;AACzC,SAAO"}
1
+ {"version":3,"file":"history.js","names":[],"sources":["../../src/runnables/history.ts"],"sourcesContent":["import {\n BaseChatMessageHistory,\n BaseListChatMessageHistory,\n} from \"../chat_history.js\";\nimport {\n AIMessage,\n BaseMessage,\n HumanMessage,\n isBaseMessage,\n} from \"../messages/index.js\";\nimport { Run } from \"../tracers/base.js\";\nimport {\n Runnable,\n RunnableBinding,\n type RunnableBindingArgs,\n RunnableLambda,\n} from \"./base.js\";\nimport { RunnableConfig } from \"./config.js\";\nimport { RunnablePassthrough } from \"./passthrough.js\";\n\ntype GetSessionHistoryCallable = (\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n ...args: Array<any>\n) =>\n | Promise<BaseChatMessageHistory | BaseListChatMessageHistory>\n | BaseChatMessageHistory\n | BaseListChatMessageHistory;\n\nexport interface RunnableWithMessageHistoryInputs<\n RunInput,\n RunOutput,\n> extends Omit<RunnableBindingArgs<RunInput, RunOutput>, \"bound\" | \"config\"> {\n runnable: Runnable<RunInput, RunOutput>;\n getMessageHistory: GetSessionHistoryCallable;\n inputMessagesKey?: string;\n outputMessagesKey?: string;\n historyMessagesKey?: string;\n config?: RunnableConfig;\n}\n\n/**\n * Wraps a LCEL chain and manages history. It appends input messages\n * and chain outputs as history, and adds the current history messages to\n * the chain input.\n * @example\n * ```typescript\n * // pnpm install @langchain/anthropic @langchain/classic\n *\n * import {\n * ChatPromptTemplate,\n * MessagesPlaceholder,\n * } from \"@langchain/core/prompts\";\n * import { ChatAnthropic } from \"@langchain/anthropic\";\n * import { ChatMessageHistory } from \"@langchain/classic/stores/message/in_memory\";\n *\n * const prompt = ChatPromptTemplate.fromMessages([\n * [\"system\", \"You're an assistant who's good at {ability}\"],\n * new MessagesPlaceholder(\"history\"),\n * [\"human\", \"{question}\"],\n * ]);\n *\n * const chain = prompt.pipe(new ChatAnthropic({}));\n *\n * const chainWithHistory = new RunnableWithMessageHistory({\n * runnable: chain,\n * getMessageHistory: (sessionId) =>\n * new UpstashRedisChatMessageHistory({\n * sessionId,\n * config: {\n * url: process.env.UPSTASH_REDIS_REST_URL!,\n * token: process.env.UPSTASH_REDIS_REST_TOKEN!,\n * },\n * }),\n * inputMessagesKey: \"question\",\n * historyMessagesKey: \"history\",\n * });\n *\n * const result = await chainWithHistory.invoke(\n * {\n * ability: \"math\",\n * question: \"What does cosine mean?\",\n * },\n * {\n * configurable: {\n * sessionId: \"some_string_identifying_a_user\",\n * },\n * }\n * );\n *\n * const result2 = await chainWithHistory.invoke(\n * {\n * ability: \"math\",\n * question: \"What's its inverse?\",\n * },\n * {\n * configurable: {\n * sessionId: \"some_string_identifying_a_user\",\n * },\n * }\n * );\n * ```\n */\nexport class RunnableWithMessageHistory<\n RunInput,\n RunOutput,\n> extends RunnableBinding<RunInput, RunOutput> {\n runnable: Runnable<RunInput, RunOutput>;\n\n inputMessagesKey?: string;\n\n outputMessagesKey?: string;\n\n historyMessagesKey?: string;\n\n getMessageHistory: GetSessionHistoryCallable;\n\n constructor(fields: RunnableWithMessageHistoryInputs<RunInput, RunOutput>) {\n let historyChain: Runnable = RunnableLambda.from((input, options) =>\n this._enterHistory(input, options ?? {})\n ).withConfig({ runName: \"loadHistory\" });\n\n const messagesKey = fields.historyMessagesKey ?? fields.inputMessagesKey;\n if (messagesKey) {\n historyChain = RunnablePassthrough.assign({\n [messagesKey]: historyChain,\n }).withConfig({ runName: \"insertHistory\" });\n }\n\n const bound = historyChain\n .pipe(\n fields.runnable.withListeners({\n onEnd: (run, config) => this._exitHistory(run, config ?? {}),\n })\n )\n .withConfig({ runName: \"RunnableWithMessageHistory\" });\n\n const config = fields.config ?? {};\n\n super({\n ...fields,\n config,\n bound,\n });\n this.runnable = fields.runnable;\n this.getMessageHistory = fields.getMessageHistory;\n this.inputMessagesKey = fields.inputMessagesKey;\n this.outputMessagesKey = fields.outputMessagesKey;\n this.historyMessagesKey = fields.historyMessagesKey;\n }\n\n _getInputMessages(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n inputValue: string | BaseMessage | Array<BaseMessage> | Record<string, any>\n ): Array<BaseMessage> {\n let parsedInputValue;\n if (\n typeof inputValue === \"object\" &&\n !Array.isArray(inputValue) &&\n !isBaseMessage(inputValue)\n ) {\n let key;\n if (this.inputMessagesKey) {\n key = this.inputMessagesKey;\n } else if (Object.keys(inputValue).length === 1) {\n key = Object.keys(inputValue)[0];\n } else {\n key = \"input\";\n }\n if (Array.isArray(inputValue[key]) && Array.isArray(inputValue[key][0])) {\n parsedInputValue = inputValue[key][0];\n } else {\n parsedInputValue = inputValue[key];\n }\n } else {\n parsedInputValue = inputValue;\n }\n if (typeof parsedInputValue === \"string\") {\n return [new HumanMessage(parsedInputValue)];\n } else if (Array.isArray(parsedInputValue)) {\n return parsedInputValue;\n } else if (isBaseMessage(parsedInputValue)) {\n return [parsedInputValue];\n } else {\n throw new Error(\n `Expected a string, BaseMessage, or array of BaseMessages.\\nGot ${JSON.stringify(\n parsedInputValue,\n null,\n 2\n )}`\n );\n }\n }\n\n _getOutputMessages(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n outputValue: string | BaseMessage | Array<BaseMessage> | Record<string, any>\n ): Array<BaseMessage> {\n let parsedOutputValue;\n if (\n !Array.isArray(outputValue) &&\n !isBaseMessage(outputValue) &&\n typeof outputValue !== \"string\"\n ) {\n let key;\n if (this.outputMessagesKey !== undefined) {\n key = this.outputMessagesKey;\n } else if (Object.keys(outputValue).length === 1) {\n key = Object.keys(outputValue)[0];\n } else {\n key = \"output\";\n }\n // If you are wrapping a chat model directly\n // The output is actually this weird generations object\n if (outputValue.generations !== undefined) {\n parsedOutputValue = outputValue.generations[0][0].message;\n } else {\n parsedOutputValue = outputValue[key];\n }\n } else {\n parsedOutputValue = outputValue;\n }\n\n if (typeof parsedOutputValue === \"string\") {\n return [new AIMessage(parsedOutputValue)];\n } else if (Array.isArray(parsedOutputValue)) {\n return parsedOutputValue;\n } else if (isBaseMessage(parsedOutputValue)) {\n return [parsedOutputValue];\n } else {\n throw new Error(\n `Expected a string, BaseMessage, or array of BaseMessages. Received: ${JSON.stringify(\n parsedOutputValue,\n null,\n 2\n )}`\n );\n }\n }\n\n async _enterHistory(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any,\n kwargs?: RunnableConfig\n ): Promise<BaseMessage[]> {\n const history = kwargs?.configurable?.messageHistory;\n const messages = await history.getMessages();\n if (this.historyMessagesKey === undefined) {\n return messages.concat(this._getInputMessages(input));\n }\n return messages;\n }\n\n async _exitHistory(run: Run, config: RunnableConfig): Promise<void> {\n const history = config.configurable?.messageHistory;\n\n // Get input messages\n let inputs;\n // Chat model inputs are nested arrays\n if (Array.isArray(run.inputs) && Array.isArray(run.inputs[0])) {\n inputs = run.inputs[0];\n } else {\n inputs = run.inputs;\n }\n let inputMessages = this._getInputMessages(inputs);\n // If historic messages were prepended to the input messages, remove them to\n // avoid adding duplicate messages to history.\n if (this.historyMessagesKey === undefined) {\n const existingMessages = await history.getMessages();\n inputMessages = inputMessages.slice(existingMessages.length);\n }\n // Get output messages\n const outputValue = run.outputs;\n if (!outputValue) {\n throw new Error(\n `Output values from 'Run' undefined. Run: ${JSON.stringify(\n run,\n null,\n 2\n )}`\n );\n }\n const outputMessages = this._getOutputMessages(outputValue);\n await history.addMessages([...inputMessages, ...outputMessages]);\n }\n\n async _mergeConfig(...configs: Array<RunnableConfig | undefined>) {\n const config = await super._mergeConfig(...configs);\n // Extract sessionId\n if (!config.configurable || !config.configurable.sessionId) {\n const exampleInput = {\n [this.inputMessagesKey ?? \"input\"]: \"foo\",\n };\n const exampleConfig = { configurable: { sessionId: \"123\" } };\n throw new Error(\n `sessionId is required. Pass it in as part of the config argument to .invoke() or .stream()\\n` +\n `eg. chain.invoke(${JSON.stringify(exampleInput)}, ${JSON.stringify(\n exampleConfig\n )})`\n );\n }\n // attach messageHistory\n const { sessionId } = config.configurable;\n config.configurable.messageHistory =\n await this.getMessageHistory(sessionId);\n return config;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGA,IAAa,6BAAb,cAGU,gBAAqC;CAC7C;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAA+D;EACzE,IAAI,eAAyB,eAAe,MAAM,OAAO,YACvD,KAAK,cAAc,OAAO,WAAW,EAAE,CAAC,CACzC,CAAC,WAAW,EAAE,SAAS,eAAe,CAAC;EAExC,MAAM,cAAc,OAAO,sBAAsB,OAAO;AACxD,MAAI,YACF,gBAAe,oBAAoB,OAAO,GACvC,cAAc,cAChB,CAAC,CAAC,WAAW,EAAE,SAAS,iBAAiB,CAAC;EAG7C,MAAM,QAAQ,aACX,KACC,OAAO,SAAS,cAAc,EAC5B,QAAQ,KAAK,WAAW,KAAK,aAAa,KAAK,UAAU,EAAE,CAAC,EAC7D,CAAC,CACH,CACA,WAAW,EAAE,SAAS,8BAA8B,CAAC;EAExD,MAAM,SAAS,OAAO,UAAU,EAAE;AAElC,QAAM;GACJ,GAAG;GACH;GACA;GACD,CAAC;AACF,OAAK,WAAW,OAAO;AACvB,OAAK,oBAAoB,OAAO;AAChC,OAAK,mBAAmB,OAAO;AAC/B,OAAK,oBAAoB,OAAO;AAChC,OAAK,qBAAqB,OAAO;;CAGnC,kBAEE,YACoB;EACpB,IAAI;AACJ,MACE,OAAO,eAAe,YACtB,CAAC,MAAM,QAAQ,WAAW,IAC1B,CAAC,cAAc,WAAW,EAC1B;GACA,IAAI;AACJ,OAAI,KAAK,iBACP,OAAM,KAAK;YACF,OAAO,KAAK,WAAW,CAAC,WAAW,EAC5C,OAAM,OAAO,KAAK,WAAW,CAAC;OAE9B,OAAM;AAER,OAAI,MAAM,QAAQ,WAAW,KAAK,IAAI,MAAM,QAAQ,WAAW,KAAK,GAAG,CACrE,oBAAmB,WAAW,KAAK;OAEnC,oBAAmB,WAAW;QAGhC,oBAAmB;AAErB,MAAI,OAAO,qBAAqB,SAC9B,QAAO,CAAC,IAAI,aAAa,iBAAiB,CAAC;WAClC,MAAM,QAAQ,iBAAiB,CACxC,QAAO;WACE,cAAc,iBAAiB,CACxC,QAAO,CAAC,iBAAiB;MAEzB,OAAM,IAAI,MACR,kEAAkE,KAAK,UACrE,kBACA,MACA,EACD,GACF;;CAIL,mBAEE,aACoB;EACpB,IAAI;AACJ,MACE,CAAC,MAAM,QAAQ,YAAY,IAC3B,CAAC,cAAc,YAAY,IAC3B,OAAO,gBAAgB,UACvB;GACA,IAAI;AACJ,OAAI,KAAK,sBAAsB,KAAA,EAC7B,OAAM,KAAK;YACF,OAAO,KAAK,YAAY,CAAC,WAAW,EAC7C,OAAM,OAAO,KAAK,YAAY,CAAC;OAE/B,OAAM;AAIR,OAAI,YAAY,gBAAgB,KAAA,EAC9B,qBAAoB,YAAY,YAAY,GAAG,GAAG;OAElD,qBAAoB,YAAY;QAGlC,qBAAoB;AAGtB,MAAI,OAAO,sBAAsB,SAC/B,QAAO,CAAC,IAAI,UAAU,kBAAkB,CAAC;WAChC,MAAM,QAAQ,kBAAkB,CACzC,QAAO;WACE,cAAc,kBAAkB,CACzC,QAAO,CAAC,kBAAkB;MAE1B,OAAM,IAAI,MACR,uEAAuE,KAAK,UAC1E,mBACA,MACA,EACD,GACF;;CAIL,MAAM,cAEJ,OACA,QACwB;EAExB,MAAM,WAAW,OADD,QAAQ,cAAc,gBACP,aAAa;AAC5C,MAAI,KAAK,uBAAuB,KAAA,EAC9B,QAAO,SAAS,OAAO,KAAK,kBAAkB,MAAM,CAAC;AAEvD,SAAO;;CAGT,MAAM,aAAa,KAAU,QAAuC;EAClE,MAAM,UAAU,OAAO,cAAc;EAGrC,IAAI;AAEJ,MAAI,MAAM,QAAQ,IAAI,OAAO,IAAI,MAAM,QAAQ,IAAI,OAAO,GAAG,CAC3D,UAAS,IAAI,OAAO;MAEpB,UAAS,IAAI;EAEf,IAAI,gBAAgB,KAAK,kBAAkB,OAAO;AAGlD,MAAI,KAAK,uBAAuB,KAAA,GAAW;GACzC,MAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,mBAAgB,cAAc,MAAM,iBAAiB,OAAO;;EAG9D,MAAM,cAAc,IAAI;AACxB,MAAI,CAAC,YACH,OAAM,IAAI,MACR,4CAA4C,KAAK,UAC/C,KACA,MACA,EACD,GACF;EAEH,MAAM,iBAAiB,KAAK,mBAAmB,YAAY;AAC3D,QAAM,QAAQ,YAAY,CAAC,GAAG,eAAe,GAAG,eAAe,CAAC;;CAGlE,MAAM,aAAa,GAAG,SAA4C;EAChE,MAAM,SAAS,MAAM,MAAM,aAAa,GAAG,QAAQ;AAEnD,MAAI,CAAC,OAAO,gBAAgB,CAAC,OAAO,aAAa,WAAW;GAC1D,MAAM,eAAe,GAClB,KAAK,oBAAoB,UAAU,OACrC;AAED,SAAM,IAAI,MACR,gHACsB,KAAK,UAAU,aAAa,CAAC,IAAI,KAAK,UAHxC,EAAE,cAAc,EAAE,WAAW,OAAO,EAAE,CAKvD,CAAC,GACL;;EAGH,MAAM,EAAE,cAAc,OAAO;AAC7B,SAAO,aAAa,iBAClB,MAAM,KAAK,kBAAkB,UAAU;AACzC,SAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough.cjs","names":["Runnable","ensureConfig","concat","RunnableAssign","RunnableMap"],"sources":["../../src/runnables/passthrough.ts"],"sourcesContent":["import { concat } from \"../utils/stream.js\";\nimport {\n Runnable,\n RunnableAssign,\n RunnableMap,\n RunnableMapLike,\n} from \"./base.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RunnablePassthroughFunc<RunInput = any> =\n | ((input: RunInput) => void)\n | ((input: RunInput, config?: RunnableConfig) => void)\n | ((input: RunInput) => Promise<void>)\n | ((input: RunInput, config?: RunnableConfig) => Promise<void>);\n\n/**\n * A runnable to passthrough inputs unchanged or with additional keys.\n *\n * This runnable behaves almost like the identity function, except that it\n * can be configured to add additional keys to the output, if the input is\n * an object.\n *\n * The example below demonstrates how to use `RunnablePassthrough to\n * passthrough the input from the `.invoke()`\n *\n * @example\n * ```typescript\n * const chain = RunnableSequence.from([\n * {\n * question: new RunnablePassthrough(),\n * context: async () => loadContextFromStore(),\n * },\n * prompt,\n * llm,\n * outputParser,\n * ]);\n * const response = await chain.invoke(\n * \"I can pass a single string instead of an object since I'm using `RunnablePassthrough`.\"\n * );\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RunnablePassthrough<RunInput = any> extends Runnable<\n RunInput,\n RunInput\n> {\n static lc_name() {\n return \"RunnablePassthrough\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n func?: RunnablePassthroughFunc<RunInput>;\n\n constructor(fields?: { func?: RunnablePassthroughFunc<RunInput> }) {\n super(fields);\n if (fields) {\n this.func = fields.func;\n }\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunInput> {\n const config = ensureConfig(options);\n if (this.func) {\n await this.func(input, config);\n }\n\n return this._callWithConfig(\n (input: RunInput) => Promise.resolve(input),\n input,\n config\n );\n }\n\n async *transform(\n generator: AsyncGenerator<RunInput>,\n options: Partial<RunnableConfig>\n ): AsyncGenerator<RunInput> {\n const config = ensureConfig(options);\n let finalOutput: RunInput | undefined;\n let finalOutputSupported = true;\n\n for await (const chunk of this._transformStreamWithConfig(\n generator,\n (input: AsyncGenerator<RunInput>) => input,\n config\n )) {\n yield chunk;\n if (finalOutputSupported) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n finalOutput = concat(finalOutput, chunk as any);\n } catch {\n finalOutput = undefined;\n finalOutputSupported = false;\n }\n }\n }\n }\n\n if (this.func && finalOutput !== undefined) {\n await this.func(finalOutput, config);\n }\n }\n\n /**\n * A runnable that assigns key-value pairs to the input.\n *\n * The example below shows how you could use it with an inline function.\n *\n * @example\n * ```typescript\n * const prompt =\n * PromptTemplate.fromTemplate(`Write a SQL query to answer the question using the following schema: {schema}\n * Question: {question}\n * SQL Query:`);\n *\n * // The `RunnablePassthrough.assign()` is used here to passthrough the input from the `.invoke()`\n * // call (in this example it's the question), along with any inputs passed to the `.assign()` method.\n * // In this case, we're passing the schema.\n * const sqlQueryGeneratorChain = RunnableSequence.from([\n * RunnablePassthrough.assign({\n * schema: async () => db.getTableInfo(),\n * }),\n * prompt,\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }).withConfig({ stop: [\"\\nSQLResult:\"] }),\n * new StringOutputParser(),\n * ]);\n * const result = await sqlQueryGeneratorChain.invoke({\n * question: \"How many employees are there?\",\n * });\n * ```\n */\n static assign<\n RunInput extends Record<string, unknown> = Record<string, unknown>,\n RunOutput extends Record<string, unknown> = Record<string, unknown>,\n >(\n mapping: RunnableMapLike<RunInput, RunOutput>\n ): RunnableAssign<RunInput, RunInput & RunOutput> {\n return new RunnableAssign(new RunnableMap({ steps: mapping }));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAa,sBAAb,cAAyDA,aAAAA,SAGvD;CACA,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAAuD;AACjE,QAAM,OAAO;AACb,MAAI,OACF,MAAK,OAAO,OAAO;;CAIvB,MAAM,OACJ,OACA,SACmB;EACnB,MAAM,SAASC,eAAAA,aAAa,QAAQ;AACpC,MAAI,KAAK,KACP,OAAM,KAAK,KAAK,OAAO,OAAO;AAGhC,SAAO,KAAK,iBACT,UAAoB,QAAQ,QAAQ,MAAM,EAC3C,OACA,OACD;;CAGH,OAAO,UACL,WACA,SAC0B;EAC1B,MAAM,SAASA,eAAAA,aAAa,QAAQ;EACpC,IAAI;EACJ,IAAI,uBAAuB;AAE3B,aAAW,MAAM,SAAS,KAAK,2BAC7B,YACC,UAAoC,OACrC,OACD,EAAE;AACD,SAAM;AACN,OAAI,qBACF,KAAI,gBAAgB,KAAA,EAClB,eAAc;OAEd,KAAI;AAEF,kBAAcC,qBAAAA,OAAO,aAAa,MAAa;WACzC;AACN,kBAAc,KAAA;AACd,2BAAuB;;;AAM/B,MAAI,KAAK,QAAQ,gBAAgB,KAAA,EAC/B,OAAM,KAAK,KAAK,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,OAAO,OAIL,SACgD;AAChD,SAAO,IAAIC,aAAAA,eAAe,IAAIC,aAAAA,YAAY,EAAE,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"passthrough.cjs","names":["Runnable","ensureConfig","concat","RunnableAssign","RunnableMap"],"sources":["../../src/runnables/passthrough.ts"],"sourcesContent":["import { concat } from \"../utils/stream.js\";\nimport {\n Runnable,\n RunnableAssign,\n RunnableMap,\n RunnableMapLike,\n} from \"./base.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype RunnablePassthroughFunc<RunInput = any> =\n | ((input: RunInput) => void)\n | ((input: RunInput, config?: RunnableConfig) => void)\n | ((input: RunInput) => Promise<void>)\n | ((input: RunInput, config?: RunnableConfig) => Promise<void>);\n\n/**\n * A runnable to passthrough inputs unchanged or with additional keys.\n *\n * This runnable behaves almost like the identity function, except that it\n * can be configured to add additional keys to the output, if the input is\n * an object.\n *\n * The example below demonstrates how to use `RunnablePassthrough to\n * passthrough the input from the `.invoke()`\n *\n * @example\n * ```typescript\n * const chain = RunnableSequence.from([\n * {\n * question: new RunnablePassthrough(),\n * context: async () => loadContextFromStore(),\n * },\n * prompt,\n * llm,\n * outputParser,\n * ]);\n * const response = await chain.invoke(\n * \"I can pass a single string instead of an object since I'm using `RunnablePassthrough`.\"\n * );\n * ```\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RunnablePassthrough<RunInput = any> extends Runnable<\n RunInput,\n RunInput\n> {\n static lc_name() {\n return \"RunnablePassthrough\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n func?: RunnablePassthroughFunc<RunInput>;\n\n constructor(fields?: { func?: RunnablePassthroughFunc<RunInput> }) {\n super(fields);\n if (fields) {\n this.func = fields.func;\n }\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunInput> {\n const config = ensureConfig(options);\n if (this.func) {\n await this.func(input, config);\n }\n\n return this._callWithConfig(\n (input: RunInput) => Promise.resolve(input),\n input,\n config\n );\n }\n\n async *transform(\n generator: AsyncGenerator<RunInput>,\n options: Partial<RunnableConfig>\n ): AsyncGenerator<RunInput> {\n const config = ensureConfig(options);\n let finalOutput: RunInput | undefined;\n let finalOutputSupported = true;\n\n for await (const chunk of this._transformStreamWithConfig(\n generator,\n (input: AsyncGenerator<RunInput>) => input,\n config\n )) {\n yield chunk;\n if (finalOutputSupported) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n try {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n finalOutput = concat(finalOutput, chunk as any);\n } catch {\n finalOutput = undefined;\n finalOutputSupported = false;\n }\n }\n }\n }\n\n if (this.func && finalOutput !== undefined) {\n await this.func(finalOutput, config);\n }\n }\n\n /**\n * A runnable that assigns key-value pairs to the input.\n *\n * The example below shows how you could use it with an inline function.\n *\n * @example\n * ```typescript\n * const prompt =\n * PromptTemplate.fromTemplate(`Write a SQL query to answer the question using the following schema: {schema}\n * Question: {question}\n * SQL Query:`);\n *\n * // The `RunnablePassthrough.assign()` is used here to passthrough the input from the `.invoke()`\n * // call (in this example it's the question), along with any inputs passed to the `.assign()` method.\n * // In this case, we're passing the schema.\n * const sqlQueryGeneratorChain = RunnableSequence.from([\n * RunnablePassthrough.assign({\n * schema: async () => db.getTableInfo(),\n * }),\n * prompt,\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }).withConfig({ stop: [\"\\nSQLResult:\"] }),\n * new StringOutputParser(),\n * ]);\n * const result = await sqlQueryGeneratorChain.invoke({\n * question: \"How many employees are there?\",\n * });\n * ```\n */\n static assign<\n RunInput extends Record<string, unknown> = Record<string, unknown>,\n RunOutput extends Record<string, unknown> = Record<string, unknown>,\n >(\n mapping: RunnableMapLike<RunInput, RunOutput>\n ): RunnableAssign<RunInput, RunInput & RunOutput> {\n return new RunnableAssign(new RunnableMap({ steps: mapping }));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAa,sBAAb,cAAyDA,aAAAA,SAGvD;CACA,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAAuD;AACjE,QAAM,OAAO;AACb,MAAI,OACF,MAAK,OAAO,OAAO;;CAIvB,MAAM,OACJ,OACA,SACmB;EACnB,MAAM,SAASC,eAAAA,aAAa,QAAQ;AACpC,MAAI,KAAK,KACP,OAAM,KAAK,KAAK,OAAO,OAAO;AAGhC,SAAO,KAAK,iBACT,UAAoB,QAAQ,QAAQ,MAAM,EAC3C,OACA,OACD;;CAGH,OAAO,UACL,WACA,SAC0B;EAC1B,MAAM,SAASA,eAAAA,aAAa,QAAQ;EACpC,IAAI;EACJ,IAAI,uBAAuB;AAE3B,aAAW,MAAM,SAAS,KAAK,2BAC7B,YACC,UAAoC,OACrC,OACD,EAAE;AACD,SAAM;AACN,OAAI,qBACF,KAAI,gBAAgB,KAAA,EAClB,eAAc;OAEd,KAAI;AAEF,kBAAcC,qBAAAA,OAAO,aAAa,MAAa;WACzC;AACN,kBAAc,KAAA;AACd,2BAAuB;;;AAM/B,MAAI,KAAK,QAAQ,gBAAgB,KAAA,EAC/B,OAAM,KAAK,KAAK,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,OAAO,OAIL,SACgD;AAChD,SAAO,IAAIC,aAAAA,eAAe,IAAIC,aAAAA,YAAY,EAAE,OAAO,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough.d.cts","names":[],"sources":["../../src/runnables/passthrough.ts"],"mappings":";;;;KAUK,uBAAA,qBACC,KAAA,EAAO,QAAA,eACP,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,eAC1B,KAAA,EAAO,QAAA,KAAa,OAAA,YACpB,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,KAAmB,OAAA;;AAPa;;;;;;;;;;;;;;;;;;;;;;;;;cAoCnD,mBAAA,yBAA4C,QAAA,CACvD,QAAA,EACA,QAAA;EAAA,OAEO,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAE/B,WAAA,CAAY,MAAA;IAAW,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAAA;EAOhD,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,QAAA;EAaJ,SAAA,CACL,SAAA,EAAW,cAAA,CAAe,QAAA,GAC1B,OAAA,EAAS,OAAA,CAAQ,cAAA,IAChB,cAAA,CAAe,QAAA;EA5Ba;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,OAuFxB,MAAA,kBACY,MAAA,oBAA0B,MAAA,qCACzB,MAAA,oBAA0B,MAAA,kBAAA,CAE5C,OAAA,EAAS,eAAA,CAAgB,QAAA,EAAU,SAAA,IAClC,cAAA,CAAe,QAAA,EAAU,QAAA,GAAW,SAAA;AAAA"}
1
+ {"version":3,"file":"passthrough.d.cts","names":[],"sources":["../../src/runnables/passthrough.ts"],"mappings":";;;;KAUK,uBAAA,qBACC,KAAA,EAAO,QAAA,eACP,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,eAC1B,KAAA,EAAO,QAAA,KAAa,OAAA,YACpB,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,KAAmB,OAAA;;;AAPa;;;;;;;;;;;;;;;;;;;;;;;;cAoCnD,mBAAA,yBAA4C,QAAA,CACvD,QAAA,EACA,QAAA;EAAA,OAEO,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAE/B,WAAA,CAAY,MAAA;IAAW,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAAA;EAOhD,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,QAAA;EAaJ,SAAA,CACL,SAAA,EAAW,cAAA,CAAe,QAAA,GAC1B,OAAA,EAAS,OAAA,CAAQ,cAAA,IAChB,cAAA,CAAe,QAAA;EAtClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,OAiGO,MAAA,kBACY,MAAA,oBAA0B,MAAA,qCACzB,MAAA,oBAA0B,MAAA,kBAAA,CAE5C,OAAA,EAAS,eAAA,CAAgB,QAAA,EAAU,SAAA,IAClC,cAAA,CAAe,QAAA,EAAU,QAAA,GAAW,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough.d.ts","names":[],"sources":["../../src/runnables/passthrough.ts"],"mappings":";;;;KAUK,uBAAA,qBACC,KAAA,EAAO,QAAA,eACP,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,eAC1B,KAAA,EAAO,QAAA,KAAa,OAAA,YACpB,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,KAAmB,OAAA;;AAPa;;;;;;;;;;;;;;;;;;;;;;;;;cAoCnD,mBAAA,yBAA4C,QAAA,CACvD,QAAA,EACA,QAAA;EAAA,OAEO,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAE/B,WAAA,CAAY,MAAA;IAAW,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAAA;EAOhD,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,QAAA;EAaJ,SAAA,CACL,SAAA,EAAW,cAAA,CAAe,QAAA,GAC1B,OAAA,EAAS,OAAA,CAAQ,cAAA,IAChB,cAAA,CAAe,QAAA;EA5Ba;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,OAuFxB,MAAA,kBACY,MAAA,oBAA0B,MAAA,qCACzB,MAAA,oBAA0B,MAAA,kBAAA,CAE5C,OAAA,EAAS,eAAA,CAAgB,QAAA,EAAU,SAAA,IAClC,cAAA,CAAe,QAAA,EAAU,QAAA,GAAW,SAAA;AAAA"}
1
+ {"version":3,"file":"passthrough.d.ts","names":[],"sources":["../../src/runnables/passthrough.ts"],"mappings":";;;;KAUK,uBAAA,qBACC,KAAA,EAAO,QAAA,eACP,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,eAC1B,KAAA,EAAO,QAAA,KAAa,OAAA,YACpB,KAAA,EAAO,QAAA,EAAU,MAAA,GAAS,cAAA,KAAmB,OAAA;;;AAPa;;;;;;;;;;;;;;;;;;;;;;;;cAoCnD,mBAAA,yBAA4C,QAAA,CACvD,QAAA,EACA,QAAA;EAAA,OAEO,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAE/B,WAAA,CAAY,MAAA;IAAW,IAAA,GAAO,uBAAA,CAAwB,QAAA;EAAA;EAOhD,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,QAAA;EAaJ,SAAA,CACL,SAAA,EAAW,cAAA,CAAe,QAAA,GAC1B,OAAA,EAAS,OAAA,CAAQ,cAAA,IAChB,cAAA,CAAe,QAAA;EAtClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,OAiGO,MAAA,kBACY,MAAA,oBAA0B,MAAA,qCACzB,MAAA,oBAA0B,MAAA,kBAAA,CAE5C,OAAA,EAAS,eAAA,CAAgB,QAAA,EAAU,SAAA,IAClC,cAAA,CAAe,QAAA,EAAU,QAAA,GAAW,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough.js","names":[],"sources":["../../src/runnables/passthrough.ts"],"sourcesContent":["import { concat } from \"../utils/stream.js\";\nimport {\n Runnable,\n RunnableAssign,\n RunnableMap,\n RunnableMapLike,\n} from \"./base.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype RunnablePassthroughFunc<RunInput = any> =\n | ((input: RunInput) => void)\n | ((input: RunInput, config?: RunnableConfig) => void)\n | ((input: RunInput) => Promise<void>)\n | ((input: RunInput, config?: RunnableConfig) => Promise<void>);\n\n/**\n * A runnable to passthrough inputs unchanged or with additional keys.\n *\n * This runnable behaves almost like the identity function, except that it\n * can be configured to add additional keys to the output, if the input is\n * an object.\n *\n * The example below demonstrates how to use `RunnablePassthrough to\n * passthrough the input from the `.invoke()`\n *\n * @example\n * ```typescript\n * const chain = RunnableSequence.from([\n * {\n * question: new RunnablePassthrough(),\n * context: async () => loadContextFromStore(),\n * },\n * prompt,\n * llm,\n * outputParser,\n * ]);\n * const response = await chain.invoke(\n * \"I can pass a single string instead of an object since I'm using `RunnablePassthrough`.\"\n * );\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RunnablePassthrough<RunInput = any> extends Runnable<\n RunInput,\n RunInput\n> {\n static lc_name() {\n return \"RunnablePassthrough\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n func?: RunnablePassthroughFunc<RunInput>;\n\n constructor(fields?: { func?: RunnablePassthroughFunc<RunInput> }) {\n super(fields);\n if (fields) {\n this.func = fields.func;\n }\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunInput> {\n const config = ensureConfig(options);\n if (this.func) {\n await this.func(input, config);\n }\n\n return this._callWithConfig(\n (input: RunInput) => Promise.resolve(input),\n input,\n config\n );\n }\n\n async *transform(\n generator: AsyncGenerator<RunInput>,\n options: Partial<RunnableConfig>\n ): AsyncGenerator<RunInput> {\n const config = ensureConfig(options);\n let finalOutput: RunInput | undefined;\n let finalOutputSupported = true;\n\n for await (const chunk of this._transformStreamWithConfig(\n generator,\n (input: AsyncGenerator<RunInput>) => input,\n config\n )) {\n yield chunk;\n if (finalOutputSupported) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n finalOutput = concat(finalOutput, chunk as any);\n } catch {\n finalOutput = undefined;\n finalOutputSupported = false;\n }\n }\n }\n }\n\n if (this.func && finalOutput !== undefined) {\n await this.func(finalOutput, config);\n }\n }\n\n /**\n * A runnable that assigns key-value pairs to the input.\n *\n * The example below shows how you could use it with an inline function.\n *\n * @example\n * ```typescript\n * const prompt =\n * PromptTemplate.fromTemplate(`Write a SQL query to answer the question using the following schema: {schema}\n * Question: {question}\n * SQL Query:`);\n *\n * // The `RunnablePassthrough.assign()` is used here to passthrough the input from the `.invoke()`\n * // call (in this example it's the question), along with any inputs passed to the `.assign()` method.\n * // In this case, we're passing the schema.\n * const sqlQueryGeneratorChain = RunnableSequence.from([\n * RunnablePassthrough.assign({\n * schema: async () => db.getTableInfo(),\n * }),\n * prompt,\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }).withConfig({ stop: [\"\\nSQLResult:\"] }),\n * new StringOutputParser(),\n * ]);\n * const result = await sqlQueryGeneratorChain.invoke({\n * question: \"How many employees are there?\",\n * });\n * ```\n */\n static assign<\n RunInput extends Record<string, unknown> = Record<string, unknown>,\n RunOutput extends Record<string, unknown> = Record<string, unknown>,\n >(\n mapping: RunnableMapLike<RunInput, RunOutput>\n ): RunnableAssign<RunInput, RunInput & RunOutput> {\n return new RunnableAssign(new RunnableMap({ steps: mapping }));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAa,sBAAb,cAAyD,SAGvD;CACA,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAAuD;AACjE,QAAM,OAAO;AACb,MAAI,OACF,MAAK,OAAO,OAAO;;CAIvB,MAAM,OACJ,OACA,SACmB;EACnB,MAAM,SAAS,aAAa,QAAQ;AACpC,MAAI,KAAK,KACP,OAAM,KAAK,KAAK,OAAO,OAAO;AAGhC,SAAO,KAAK,iBACT,UAAoB,QAAQ,QAAQ,MAAM,EAC3C,OACA,OACD;;CAGH,OAAO,UACL,WACA,SAC0B;EAC1B,MAAM,SAAS,aAAa,QAAQ;EACpC,IAAI;EACJ,IAAI,uBAAuB;AAE3B,aAAW,MAAM,SAAS,KAAK,2BAC7B,YACC,UAAoC,OACrC,OACD,EAAE;AACD,SAAM;AACN,OAAI,qBACF,KAAI,gBAAgB,KAAA,EAClB,eAAc;OAEd,KAAI;AAEF,kBAAc,OAAO,aAAa,MAAa;WACzC;AACN,kBAAc,KAAA;AACd,2BAAuB;;;AAM/B,MAAI,KAAK,QAAQ,gBAAgB,KAAA,EAC/B,OAAM,KAAK,KAAK,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,OAAO,OAIL,SACgD;AAChD,SAAO,IAAI,eAAe,IAAI,YAAY,EAAE,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"passthrough.js","names":[],"sources":["../../src/runnables/passthrough.ts"],"sourcesContent":["import { concat } from \"../utils/stream.js\";\nimport {\n Runnable,\n RunnableAssign,\n RunnableMap,\n RunnableMapLike,\n} from \"./base.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype RunnablePassthroughFunc<RunInput = any> =\n | ((input: RunInput) => void)\n | ((input: RunInput, config?: RunnableConfig) => void)\n | ((input: RunInput) => Promise<void>)\n | ((input: RunInput, config?: RunnableConfig) => Promise<void>);\n\n/**\n * A runnable to passthrough inputs unchanged or with additional keys.\n *\n * This runnable behaves almost like the identity function, except that it\n * can be configured to add additional keys to the output, if the input is\n * an object.\n *\n * The example below demonstrates how to use `RunnablePassthrough to\n * passthrough the input from the `.invoke()`\n *\n * @example\n * ```typescript\n * const chain = RunnableSequence.from([\n * {\n * question: new RunnablePassthrough(),\n * context: async () => loadContextFromStore(),\n * },\n * prompt,\n * llm,\n * outputParser,\n * ]);\n * const response = await chain.invoke(\n * \"I can pass a single string instead of an object since I'm using `RunnablePassthrough`.\"\n * );\n * ```\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RunnablePassthrough<RunInput = any> extends Runnable<\n RunInput,\n RunInput\n> {\n static lc_name() {\n return \"RunnablePassthrough\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n func?: RunnablePassthroughFunc<RunInput>;\n\n constructor(fields?: { func?: RunnablePassthroughFunc<RunInput> }) {\n super(fields);\n if (fields) {\n this.func = fields.func;\n }\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunInput> {\n const config = ensureConfig(options);\n if (this.func) {\n await this.func(input, config);\n }\n\n return this._callWithConfig(\n (input: RunInput) => Promise.resolve(input),\n input,\n config\n );\n }\n\n async *transform(\n generator: AsyncGenerator<RunInput>,\n options: Partial<RunnableConfig>\n ): AsyncGenerator<RunInput> {\n const config = ensureConfig(options);\n let finalOutput: RunInput | undefined;\n let finalOutputSupported = true;\n\n for await (const chunk of this._transformStreamWithConfig(\n generator,\n (input: AsyncGenerator<RunInput>) => input,\n config\n )) {\n yield chunk;\n if (finalOutputSupported) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n try {\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n finalOutput = concat(finalOutput, chunk as any);\n } catch {\n finalOutput = undefined;\n finalOutputSupported = false;\n }\n }\n }\n }\n\n if (this.func && finalOutput !== undefined) {\n await this.func(finalOutput, config);\n }\n }\n\n /**\n * A runnable that assigns key-value pairs to the input.\n *\n * The example below shows how you could use it with an inline function.\n *\n * @example\n * ```typescript\n * const prompt =\n * PromptTemplate.fromTemplate(`Write a SQL query to answer the question using the following schema: {schema}\n * Question: {question}\n * SQL Query:`);\n *\n * // The `RunnablePassthrough.assign()` is used here to passthrough the input from the `.invoke()`\n * // call (in this example it's the question), along with any inputs passed to the `.assign()` method.\n * // In this case, we're passing the schema.\n * const sqlQueryGeneratorChain = RunnableSequence.from([\n * RunnablePassthrough.assign({\n * schema: async () => db.getTableInfo(),\n * }),\n * prompt,\n * new ChatOpenAI({ model: \"gpt-4o-mini\" }).withConfig({ stop: [\"\\nSQLResult:\"] }),\n * new StringOutputParser(),\n * ]);\n * const result = await sqlQueryGeneratorChain.invoke({\n * question: \"How many employees are there?\",\n * });\n * ```\n */\n static assign<\n RunInput extends Record<string, unknown> = Record<string, unknown>,\n RunOutput extends Record<string, unknown> = Record<string, unknown>,\n >(\n mapping: RunnableMapLike<RunInput, RunOutput>\n ): RunnableAssign<RunInput, RunInput & RunOutput> {\n return new RunnableAssign(new RunnableMap({ steps: mapping }));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,IAAa,sBAAb,cAAyD,SAGvD;CACA,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAAuD;AACjE,QAAM,OAAO;AACb,MAAI,OACF,MAAK,OAAO,OAAO;;CAIvB,MAAM,OACJ,OACA,SACmB;EACnB,MAAM,SAAS,aAAa,QAAQ;AACpC,MAAI,KAAK,KACP,OAAM,KAAK,KAAK,OAAO,OAAO;AAGhC,SAAO,KAAK,iBACT,UAAoB,QAAQ,QAAQ,MAAM,EAC3C,OACA,OACD;;CAGH,OAAO,UACL,WACA,SAC0B;EAC1B,MAAM,SAAS,aAAa,QAAQ;EACpC,IAAI;EACJ,IAAI,uBAAuB;AAE3B,aAAW,MAAM,SAAS,KAAK,2BAC7B,YACC,UAAoC,OACrC,OACD,EAAE;AACD,SAAM;AACN,OAAI,qBACF,KAAI,gBAAgB,KAAA,EAClB,eAAc;OAEd,KAAI;AAEF,kBAAc,OAAO,aAAa,MAAa;WACzC;AACN,kBAAc,KAAA;AACd,2BAAuB;;;AAM/B,MAAI,KAAK,QAAQ,gBAAgB,KAAA,EAC/B,OAAM,KAAK,KAAK,aAAa,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,OAAO,OAIL,SACgD;AAChD,SAAO,IAAI,eAAe,IAAI,YAAY,EAAE,OAAO,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs","names":["Runnable","ensureConfig"],"sources":["../../src/runnables/router.ts"],"sourcesContent":["import { Runnable, type RunnableBatchOptions } from \"./base.js\";\nimport { IterableReadableStream } from \"../utils/stream.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\nexport type RouterInput = {\n key: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input: any;\n};\n\n/**\n * A runnable that routes to a set of runnables based on Input['key'].\n * Returns the output of the selected runnable.\n * @example\n * ```typescript\n * import { RouterRunnable, RunnableLambda } from \"@langchain/core/runnables\";\n *\n * const router = new RouterRunnable({\n * runnables: {\n * toUpperCase: RunnableLambda.from((text: string) => text.toUpperCase()),\n * reverseText: RunnableLambda.from((text: string) =>\n * text.split(\"\").reverse().join(\"\")\n * ),\n * },\n * });\n *\n * // Invoke the 'reverseText' runnable\n * const result1 = router.invoke({ key: \"reverseText\", input: \"Hello World\" });\n *\n * // \"dlroW olleH\"\n *\n * // Invoke the 'toUpperCase' runnable\n * const result2 = router.invoke({ key: \"toUpperCase\", input: \"Hello World\" });\n *\n * // \"HELLO WORLD\"\n * ```\n */\nexport class RouterRunnable<\n RunInput extends RouterInput,\n RunnableInput,\n RunOutput,\n> extends Runnable<RunInput, RunOutput> {\n static lc_name() {\n return \"RouterRunnable\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n\n constructor(fields: {\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n }) {\n super(fields);\n this.runnables = fields.runnables;\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunOutput> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.invoke(actualInput, ensureConfig(options));\n }\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions?: false }\n ): Promise<RunOutput[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions: true }\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]> {\n const keys = inputs.map((input) => input.key);\n const actualInputs = inputs.map((input) => input.input);\n const missingKey = keys.find((key) => this.runnables[key] === undefined);\n if (missingKey !== undefined) {\n throw new Error(`One or more keys do not have a corresponding runnable.`);\n }\n const runnables = keys.map((key) => this.runnables[key]);\n const optionsList = this._getOptionsList(options ?? {}, inputs.length);\n const maxConcurrency =\n optionsList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency;\n const batchSize =\n maxConcurrency && maxConcurrency > 0 ? maxConcurrency : inputs.length;\n const batchResults = [];\n for (let i = 0; i < actualInputs.length; i += batchSize) {\n const batchPromises = actualInputs\n .slice(i, i + batchSize)\n .map((actualInput, i) =>\n runnables[i].invoke(actualInput, optionsList[i])\n );\n const batchResult = await Promise.all(batchPromises);\n batchResults.push(batchResult);\n }\n return batchResults.flat();\n }\n\n async stream(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<IterableReadableStream<RunOutput>> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.stream(actualInput, options);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAa,iBAAb,cAIUA,aAAAA,SAA8B;CACtC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAET;AACD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;;CAG1B,MAAM,OACJ,OACA,SACoB;EACpB,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAaC,eAAAA,aAAa,QAAQ,CAAC;;CAqB5D,MAAM,MACJ,QACA,SACA,cACgC;EAChC,MAAM,OAAO,OAAO,KAAK,UAAU,MAAM,IAAI;EAC7C,MAAM,eAAe,OAAO,KAAK,UAAU,MAAM,MAAM;AAEvD,MADmB,KAAK,MAAM,QAAQ,KAAK,UAAU,SAAS,KAAA,EAAU,KACrD,KAAA,EACjB,OAAM,IAAI,MAAM,yDAAyD;EAE3E,MAAM,YAAY,KAAK,KAAK,QAAQ,KAAK,UAAU,KAAK;EACxD,MAAM,cAAc,KAAK,gBAAgB,WAAW,EAAE,EAAE,OAAO,OAAO;EACtE,MAAM,iBACJ,YAAY,IAAI,kBAAkB,cAAc;EAClD,MAAM,YACJ,kBAAkB,iBAAiB,IAAI,iBAAiB,OAAO;EACjE,MAAM,eAAe,EAAE;AACvB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,WAAW;GACvD,MAAM,gBAAgB,aACnB,MAAM,GAAG,IAAI,UAAU,CACvB,KAAK,aAAa,MACjB,UAAU,GAAG,OAAO,aAAa,YAAY,GAAG,CACjD;GACH,MAAM,cAAc,MAAM,QAAQ,IAAI,cAAc;AACpD,gBAAa,KAAK,YAAY;;AAEhC,SAAO,aAAa,MAAM;;CAG5B,MAAM,OACJ,OACA,SAC4C;EAC5C,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,QAAQ"}
1
+ {"version":3,"file":"router.cjs","names":["Runnable","ensureConfig"],"sources":["../../src/runnables/router.ts"],"sourcesContent":["import { Runnable, type RunnableBatchOptions } from \"./base.js\";\nimport { IterableReadableStream } from \"../utils/stream.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\nexport type RouterInput = {\n key: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any;\n};\n\n/**\n * A runnable that routes to a set of runnables based on Input['key'].\n * Returns the output of the selected runnable.\n * @example\n * ```typescript\n * import { RouterRunnable, RunnableLambda } from \"@langchain/core/runnables\";\n *\n * const router = new RouterRunnable({\n * runnables: {\n * toUpperCase: RunnableLambda.from((text: string) => text.toUpperCase()),\n * reverseText: RunnableLambda.from((text: string) =>\n * text.split(\"\").reverse().join(\"\")\n * ),\n * },\n * });\n *\n * // Invoke the 'reverseText' runnable\n * const result1 = router.invoke({ key: \"reverseText\", input: \"Hello World\" });\n *\n * // \"dlroW olleH\"\n *\n * // Invoke the 'toUpperCase' runnable\n * const result2 = router.invoke({ key: \"toUpperCase\", input: \"Hello World\" });\n *\n * // \"HELLO WORLD\"\n * ```\n */\nexport class RouterRunnable<\n RunInput extends RouterInput,\n RunnableInput,\n RunOutput,\n> extends Runnable<RunInput, RunOutput> {\n static lc_name() {\n return \"RouterRunnable\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n\n constructor(fields: {\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n }) {\n super(fields);\n this.runnables = fields.runnables;\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunOutput> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.invoke(actualInput, ensureConfig(options));\n }\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions?: false }\n ): Promise<RunOutput[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions: true }\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]> {\n const keys = inputs.map((input) => input.key);\n const actualInputs = inputs.map((input) => input.input);\n const missingKey = keys.find((key) => this.runnables[key] === undefined);\n if (missingKey !== undefined) {\n throw new Error(`One or more keys do not have a corresponding runnable.`);\n }\n const runnables = keys.map((key) => this.runnables[key]);\n const optionsList = this._getOptionsList(options ?? {}, inputs.length);\n const maxConcurrency =\n optionsList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency;\n const batchSize =\n maxConcurrency && maxConcurrency > 0 ? maxConcurrency : inputs.length;\n const batchResults = [];\n for (let i = 0; i < actualInputs.length; i += batchSize) {\n const batchPromises = actualInputs\n .slice(i, i + batchSize)\n .map((actualInput, i) =>\n runnables[i].invoke(actualInput, optionsList[i])\n );\n const batchResult = await Promise.all(batchPromises);\n batchResults.push(batchResult);\n }\n return batchResults.flat();\n }\n\n async stream(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<IterableReadableStream<RunOutput>> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.stream(actualInput, options);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAa,iBAAb,cAIUA,aAAAA,SAA8B;CACtC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAET;AACD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;;CAG1B,MAAM,OACJ,OACA,SACoB;EACpB,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAaC,eAAAA,aAAa,QAAQ,CAAC;;CAqB5D,MAAM,MACJ,QACA,SACA,cACgC;EAChC,MAAM,OAAO,OAAO,KAAK,UAAU,MAAM,IAAI;EAC7C,MAAM,eAAe,OAAO,KAAK,UAAU,MAAM,MAAM;AAEvD,MADmB,KAAK,MAAM,QAAQ,KAAK,UAAU,SAAS,KAAA,EAAU,KACrD,KAAA,EACjB,OAAM,IAAI,MAAM,yDAAyD;EAE3E,MAAM,YAAY,KAAK,KAAK,QAAQ,KAAK,UAAU,KAAK;EACxD,MAAM,cAAc,KAAK,gBAAgB,WAAW,EAAE,EAAE,OAAO,OAAO;EACtE,MAAM,iBACJ,YAAY,IAAI,kBAAkB,cAAc;EAClD,MAAM,YACJ,kBAAkB,iBAAiB,IAAI,iBAAiB,OAAO;EACjE,MAAM,eAAe,EAAE;AACvB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,WAAW;GACvD,MAAM,gBAAgB,aACnB,MAAM,GAAG,IAAI,UAAU,CACvB,KAAK,aAAa,MACjB,UAAU,GAAG,OAAO,aAAa,YAAY,GAAG,CACjD;GACH,MAAM,cAAc,MAAM,QAAQ,IAAI,cAAc;AACpD,gBAAa,KAAK,YAAY;;AAEhC,SAAO,aAAa,MAAM;;CAG5B,MAAM,OACJ,OACA,SAC4C;EAC5C,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.cts","names":[],"sources":["../../src/runnables/router.ts"],"mappings":";;;;;KAIY,WAAA;EACV,GAAA;EAEA,KAAA;AAAA;;;;AA8BF;;;;;;;;;;;;;;;;;;;;;;;;cAAa,cAAA,kBACM,WAAA,oCAGT,QAAA,CAAS,QAAA,EAAU,SAAA;EAAA,OACpB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAElD,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAAA;EAM9C,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,SAAA;EASL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,CAAQ,SAAA;EAEL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,EAAS,SAAA,GAAY,KAAA;EAElB,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA,GACd,OAAA,EAAS,SAAA,GAAY,KAAA;EAgClB,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,sBAAA,CAAuB,SAAA;AAAA"}
1
+ {"version":3,"file":"router.d.cts","names":[],"sources":["../../src/runnables/router.ts"],"mappings":";;;;;KAIY,WAAA;EACV,GAAA;EAEA,KAAA;AAAA;;;;;AA8BF;;;;;;;;;;;;;;;;;;;;;;;cAAa,cAAA,kBACM,WAAA,oCAGT,QAAA,CAAS,QAAA,EAAU,SAAA;EAAA,OACpB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAElD,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAAA;EAM9C,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,SAAA;EASL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,CAAQ,SAAA;EAEL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,EAAS,SAAA,GAAY,KAAA;EAElB,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA,GACd,OAAA,EAAS,SAAA,GAAY,KAAA;EAgClB,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,sBAAA,CAAuB,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","names":[],"sources":["../../src/runnables/router.ts"],"mappings":";;;;;KAIY,WAAA;EACV,GAAA;EAEA,KAAA;AAAA;;;;AA8BF;;;;;;;;;;;;;;;;;;;;;;;;cAAa,cAAA,kBACM,WAAA,oCAGT,QAAA,CAAS,QAAA,EAAU,SAAA;EAAA,OACpB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAElD,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAAA;EAM9C,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,SAAA;EASL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,CAAQ,SAAA;EAEL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,EAAS,SAAA,GAAY,KAAA;EAElB,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA,GACd,OAAA,EAAS,SAAA,GAAY,KAAA;EAgClB,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,sBAAA,CAAuB,SAAA;AAAA"}
1
+ {"version":3,"file":"router.d.ts","names":[],"sources":["../../src/runnables/router.ts"],"mappings":";;;;;KAIY,WAAA;EACV,GAAA;EAEA,KAAA;AAAA;;;;;AA8BF;;;;;;;;;;;;;;;;;;;;;;;cAAa,cAAA,kBACM,WAAA,oCAGT,QAAA,CAAS,QAAA,EAAU,SAAA;EAAA,OACpB,OAAA,CAAA;EAIP,YAAA;EAEA,eAAA;EAEA,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAElD,WAAA,CAAY,MAAA;IACV,SAAA,EAAW,MAAA,SAAe,QAAA,CAAS,aAAA,EAAe,SAAA;EAAA;EAM9C,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,SAAA;EASL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,CAAQ,SAAA;EAEL,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA;IAAyB,gBAAA;EAAA,IACvC,OAAA,EAAS,SAAA,GAAY,KAAA;EAElB,KAAA,CACJ,MAAA,EAAQ,QAAA,IACR,OAAA,GAAU,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,KAC5C,YAAA,GAAe,oBAAA,GACd,OAAA,EAAS,SAAA,GAAY,KAAA;EAgClB,MAAA,CACJ,KAAA,EAAO,QAAA,EACP,OAAA,GAAU,OAAA,CAAQ,cAAA,IACjB,OAAA,CAAQ,sBAAA,CAAuB,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","names":[],"sources":["../../src/runnables/router.ts"],"sourcesContent":["import { Runnable, type RunnableBatchOptions } from \"./base.js\";\nimport { IterableReadableStream } from \"../utils/stream.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\nexport type RouterInput = {\n key: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input: any;\n};\n\n/**\n * A runnable that routes to a set of runnables based on Input['key'].\n * Returns the output of the selected runnable.\n * @example\n * ```typescript\n * import { RouterRunnable, RunnableLambda } from \"@langchain/core/runnables\";\n *\n * const router = new RouterRunnable({\n * runnables: {\n * toUpperCase: RunnableLambda.from((text: string) => text.toUpperCase()),\n * reverseText: RunnableLambda.from((text: string) =>\n * text.split(\"\").reverse().join(\"\")\n * ),\n * },\n * });\n *\n * // Invoke the 'reverseText' runnable\n * const result1 = router.invoke({ key: \"reverseText\", input: \"Hello World\" });\n *\n * // \"dlroW olleH\"\n *\n * // Invoke the 'toUpperCase' runnable\n * const result2 = router.invoke({ key: \"toUpperCase\", input: \"Hello World\" });\n *\n * // \"HELLO WORLD\"\n * ```\n */\nexport class RouterRunnable<\n RunInput extends RouterInput,\n RunnableInput,\n RunOutput,\n> extends Runnable<RunInput, RunOutput> {\n static lc_name() {\n return \"RouterRunnable\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n\n constructor(fields: {\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n }) {\n super(fields);\n this.runnables = fields.runnables;\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunOutput> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.invoke(actualInput, ensureConfig(options));\n }\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions?: false }\n ): Promise<RunOutput[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions: true }\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]> {\n const keys = inputs.map((input) => input.key);\n const actualInputs = inputs.map((input) => input.input);\n const missingKey = keys.find((key) => this.runnables[key] === undefined);\n if (missingKey !== undefined) {\n throw new Error(`One or more keys do not have a corresponding runnable.`);\n }\n const runnables = keys.map((key) => this.runnables[key]);\n const optionsList = this._getOptionsList(options ?? {}, inputs.length);\n const maxConcurrency =\n optionsList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency;\n const batchSize =\n maxConcurrency && maxConcurrency > 0 ? maxConcurrency : inputs.length;\n const batchResults = [];\n for (let i = 0; i < actualInputs.length; i += batchSize) {\n const batchPromises = actualInputs\n .slice(i, i + batchSize)\n .map((actualInput, i) =>\n runnables[i].invoke(actualInput, optionsList[i])\n );\n const batchResult = await Promise.all(batchPromises);\n batchResults.push(batchResult);\n }\n return batchResults.flat();\n }\n\n async stream(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<IterableReadableStream<RunOutput>> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.stream(actualInput, options);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAa,iBAAb,cAIU,SAA8B;CACtC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAET;AACD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;;CAG1B,MAAM,OACJ,OACA,SACoB;EACpB,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,aAAa,QAAQ,CAAC;;CAqB5D,MAAM,MACJ,QACA,SACA,cACgC;EAChC,MAAM,OAAO,OAAO,KAAK,UAAU,MAAM,IAAI;EAC7C,MAAM,eAAe,OAAO,KAAK,UAAU,MAAM,MAAM;AAEvD,MADmB,KAAK,MAAM,QAAQ,KAAK,UAAU,SAAS,KAAA,EAAU,KACrD,KAAA,EACjB,OAAM,IAAI,MAAM,yDAAyD;EAE3E,MAAM,YAAY,KAAK,KAAK,QAAQ,KAAK,UAAU,KAAK;EACxD,MAAM,cAAc,KAAK,gBAAgB,WAAW,EAAE,EAAE,OAAO,OAAO;EACtE,MAAM,iBACJ,YAAY,IAAI,kBAAkB,cAAc;EAClD,MAAM,YACJ,kBAAkB,iBAAiB,IAAI,iBAAiB,OAAO;EACjE,MAAM,eAAe,EAAE;AACvB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,WAAW;GACvD,MAAM,gBAAgB,aACnB,MAAM,GAAG,IAAI,UAAU,CACvB,KAAK,aAAa,MACjB,UAAU,GAAG,OAAO,aAAa,YAAY,GAAG,CACjD;GACH,MAAM,cAAc,MAAM,QAAQ,IAAI,cAAc;AACpD,gBAAa,KAAK,YAAY;;AAEhC,SAAO,aAAa,MAAM;;CAG5B,MAAM,OACJ,OACA,SAC4C;EAC5C,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,QAAQ"}
1
+ {"version":3,"file":"router.js","names":[],"sources":["../../src/runnables/router.ts"],"sourcesContent":["import { Runnable, type RunnableBatchOptions } from \"./base.js\";\nimport { IterableReadableStream } from \"../utils/stream.js\";\nimport { ensureConfig, type RunnableConfig } from \"./config.js\";\n\nexport type RouterInput = {\n key: string;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n input: any;\n};\n\n/**\n * A runnable that routes to a set of runnables based on Input['key'].\n * Returns the output of the selected runnable.\n * @example\n * ```typescript\n * import { RouterRunnable, RunnableLambda } from \"@langchain/core/runnables\";\n *\n * const router = new RouterRunnable({\n * runnables: {\n * toUpperCase: RunnableLambda.from((text: string) => text.toUpperCase()),\n * reverseText: RunnableLambda.from((text: string) =>\n * text.split(\"\").reverse().join(\"\")\n * ),\n * },\n * });\n *\n * // Invoke the 'reverseText' runnable\n * const result1 = router.invoke({ key: \"reverseText\", input: \"Hello World\" });\n *\n * // \"dlroW olleH\"\n *\n * // Invoke the 'toUpperCase' runnable\n * const result2 = router.invoke({ key: \"toUpperCase\", input: \"Hello World\" });\n *\n * // \"HELLO WORLD\"\n * ```\n */\nexport class RouterRunnable<\n RunInput extends RouterInput,\n RunnableInput,\n RunOutput,\n> extends Runnable<RunInput, RunOutput> {\n static lc_name() {\n return \"RouterRunnable\";\n }\n\n lc_namespace = [\"langchain_core\", \"runnables\"];\n\n lc_serializable = true;\n\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n\n constructor(fields: {\n runnables: Record<string, Runnable<RunnableInput, RunOutput>>;\n }) {\n super(fields);\n this.runnables = fields.runnables;\n }\n\n async invoke(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<RunOutput> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.invoke(actualInput, ensureConfig(options));\n }\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions?: false }\n ): Promise<RunOutput[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions & { returnExceptions: true }\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]>;\n\n async batch(\n inputs: RunInput[],\n options?: Partial<RunnableConfig> | Partial<RunnableConfig>[],\n batchOptions?: RunnableBatchOptions\n ): Promise<(RunOutput | Error)[]> {\n const keys = inputs.map((input) => input.key);\n const actualInputs = inputs.map((input) => input.input);\n const missingKey = keys.find((key) => this.runnables[key] === undefined);\n if (missingKey !== undefined) {\n throw new Error(`One or more keys do not have a corresponding runnable.`);\n }\n const runnables = keys.map((key) => this.runnables[key]);\n const optionsList = this._getOptionsList(options ?? {}, inputs.length);\n const maxConcurrency =\n optionsList[0]?.maxConcurrency ?? batchOptions?.maxConcurrency;\n const batchSize =\n maxConcurrency && maxConcurrency > 0 ? maxConcurrency : inputs.length;\n const batchResults = [];\n for (let i = 0; i < actualInputs.length; i += batchSize) {\n const batchPromises = actualInputs\n .slice(i, i + batchSize)\n .map((actualInput, i) =>\n runnables[i].invoke(actualInput, optionsList[i])\n );\n const batchResult = await Promise.all(batchPromises);\n batchResults.push(batchResult);\n }\n return batchResults.flat();\n }\n\n async stream(\n input: RunInput,\n options?: Partial<RunnableConfig>\n ): Promise<IterableReadableStream<RunOutput>> {\n const { key, input: actualInput } = input;\n const runnable = this.runnables[key];\n if (runnable === undefined) {\n throw new Error(`No runnable associated with key \"${key}\".`);\n }\n return runnable.stream(actualInput, options);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAa,iBAAb,cAIU,SAA8B;CACtC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe,CAAC,kBAAkB,YAAY;CAE9C,kBAAkB;CAElB;CAEA,YAAY,QAET;AACD,QAAM,OAAO;AACb,OAAK,YAAY,OAAO;;CAG1B,MAAM,OACJ,OACA,SACoB;EACpB,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,aAAa,QAAQ,CAAC;;CAqB5D,MAAM,MACJ,QACA,SACA,cACgC;EAChC,MAAM,OAAO,OAAO,KAAK,UAAU,MAAM,IAAI;EAC7C,MAAM,eAAe,OAAO,KAAK,UAAU,MAAM,MAAM;AAEvD,MADmB,KAAK,MAAM,QAAQ,KAAK,UAAU,SAAS,KAAA,EAAU,KACrD,KAAA,EACjB,OAAM,IAAI,MAAM,yDAAyD;EAE3E,MAAM,YAAY,KAAK,KAAK,QAAQ,KAAK,UAAU,KAAK;EACxD,MAAM,cAAc,KAAK,gBAAgB,WAAW,EAAE,EAAE,OAAO,OAAO;EACtE,MAAM,iBACJ,YAAY,IAAI,kBAAkB,cAAc;EAClD,MAAM,YACJ,kBAAkB,iBAAiB,IAAI,iBAAiB,OAAO;EACjE,MAAM,eAAe,EAAE;AACvB,OAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,WAAW;GACvD,MAAM,gBAAgB,aACnB,MAAM,GAAG,IAAI,UAAU,CACvB,KAAK,aAAa,MACjB,UAAU,GAAG,OAAO,aAAa,YAAY,GAAG,CACjD;GACH,MAAM,cAAc,MAAM,QAAQ,IAAI,cAAc;AACpD,gBAAa,KAAK,YAAY;;AAEhC,SAAO,aAAa,MAAM;;CAG5B,MAAM,OACJ,OACA,SAC4C;EAC5C,MAAM,EAAE,KAAK,OAAO,gBAAgB;EACpC,MAAM,WAAW,KAAK,UAAU;AAChC,MAAI,aAAa,KAAA,EACf,OAAM,IAAI,MAAM,oCAAoC,IAAI,IAAI;AAE9D,SAAO,SAAS,OAAO,aAAa,QAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":[],"sources":["../../src/runnables/utils.ts"],"sourcesContent":["import { StreamEvent } from \"../tracers/event_stream.js\";\nimport type { RunnableInterface } from \"./types.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRunnableInterface(thing: any): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n}\n\n/**\n * Utility to filter the root event in the streamEvents implementation.\n * This is simply binding the arguments to the namespace to make save on\n * a bit of typing in the streamEvents implementation.\n *\n * TODO: Refactor and remove.\n */\nexport class _RootEventFilter {\n includeNames?: string[];\n\n includeTypes?: string[];\n\n includeTags?: string[];\n\n excludeNames?: string[];\n\n excludeTypes?: string[];\n\n excludeTags?: string[];\n\n constructor(fields: {\n includeNames?: string[];\n includeTypes?: string[];\n includeTags?: string[];\n excludeNames?: string[];\n excludeTypes?: string[];\n excludeTags?: string[];\n }) {\n this.includeNames = fields.includeNames;\n this.includeTypes = fields.includeTypes;\n this.includeTags = fields.includeTags;\n this.excludeNames = fields.excludeNames;\n this.excludeTypes = fields.excludeTypes;\n this.excludeTags = fields.excludeTags;\n }\n\n includeEvent(event: StreamEvent, rootType: string): boolean {\n let include =\n this.includeNames === undefined &&\n this.includeTypes === undefined &&\n this.includeTags === undefined;\n const eventTags = event.tags ?? [];\n\n if (this.includeNames !== undefined) {\n include = include || this.includeNames.includes(event.name);\n }\n if (this.includeTypes !== undefined) {\n include = include || this.includeTypes.includes(rootType);\n }\n if (this.includeTags !== undefined) {\n include =\n include || eventTags.some((tag) => this.includeTags?.includes(tag));\n }\n\n if (this.excludeNames !== undefined) {\n include = include && !this.excludeNames.includes(event.name);\n }\n if (this.excludeTypes !== undefined) {\n include = include && !this.excludeTypes.includes(rootType);\n }\n if (this.excludeTags !== undefined) {\n include =\n include && eventTags.every((tag) => !this.excludeTags?.includes(tag));\n }\n\n return include;\n }\n}\n\nexport const toBase64Url = (str: string): string => {\n // Use btoa for compatibility, assume ASCII\n const encoded = btoa(str);\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n};\n"],"mappings":";AAIA,SAAgB,oBAAoB,OAAwC;AAC1E,QAAO,QAAQ,MAAM,cAAc;;;;;;;;;AAUrC,IAAa,mBAAb,MAA8B;CAC5B;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAOT;AACD,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;AAC1B,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;;CAG5B,aAAa,OAAoB,UAA2B;EAC1D,IAAI,UACF,KAAK,iBAAiB,KAAA,KACtB,KAAK,iBAAiB,KAAA,KACtB,KAAK,gBAAgB,KAAA;EACvB,MAAM,YAAY,MAAM,QAAQ,EAAE;AAElC,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,MAAM,KAAK;AAE7D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,SAAS;AAE3D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,MAAM,QAAQ,KAAK,aAAa,SAAS,IAAI,CAAC;AAGvE,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,MAAM,KAAK;AAE9D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,SAAS;AAE5D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,OAAO,QAAQ,CAAC,KAAK,aAAa,SAAS,IAAI,CAAC;AAGzE,SAAO;;;AAIX,MAAa,eAAe,QAAwB;AAGlD,QADgB,KAAK,IAAI,CACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../../src/runnables/utils.ts"],"sourcesContent":["import { StreamEvent } from \"../tracers/event_stream.js\";\nimport type { RunnableInterface } from \"./types.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRunnableInterface(thing: any): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n}\n\n/**\n * Utility to filter the root event in the streamEvents implementation.\n * This is simply binding the arguments to the namespace to make save on\n * a bit of typing in the streamEvents implementation.\n *\n * TODO: Refactor and remove.\n */\nexport class _RootEventFilter {\n includeNames?: string[];\n\n includeTypes?: string[];\n\n includeTags?: string[];\n\n excludeNames?: string[];\n\n excludeTypes?: string[];\n\n excludeTags?: string[];\n\n constructor(fields: {\n includeNames?: string[];\n includeTypes?: string[];\n includeTags?: string[];\n excludeNames?: string[];\n excludeTypes?: string[];\n excludeTags?: string[];\n }) {\n this.includeNames = fields.includeNames;\n this.includeTypes = fields.includeTypes;\n this.includeTags = fields.includeTags;\n this.excludeNames = fields.excludeNames;\n this.excludeTypes = fields.excludeTypes;\n this.excludeTags = fields.excludeTags;\n }\n\n includeEvent(event: StreamEvent, rootType: string): boolean {\n let include =\n this.includeNames === undefined &&\n this.includeTypes === undefined &&\n this.includeTags === undefined;\n const eventTags = event.tags ?? [];\n\n if (this.includeNames !== undefined) {\n include = include || this.includeNames.includes(event.name);\n }\n if (this.includeTypes !== undefined) {\n include = include || this.includeTypes.includes(rootType);\n }\n if (this.includeTags !== undefined) {\n include =\n include || eventTags.some((tag) => this.includeTags?.includes(tag));\n }\n\n if (this.excludeNames !== undefined) {\n include = include && !this.excludeNames.includes(event.name);\n }\n if (this.excludeTypes !== undefined) {\n include = include && !this.excludeTypes.includes(rootType);\n }\n if (this.excludeTags !== undefined) {\n include =\n include && eventTags.every((tag) => !this.excludeTags?.includes(tag));\n }\n\n return include;\n }\n}\n\nexport const toBase64Url = (str: string): string => {\n // Use btoa for compatibility, assume ASCII\n const encoded = btoa(str);\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n};\n"],"mappings":";AAIA,SAAgB,oBAAoB,OAAwC;AAC1E,QAAO,QAAQ,MAAM,cAAc;;;;;;;;;AAUrC,IAAa,mBAAb,MAA8B;CAC5B;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAOT;AACD,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;AAC1B,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;;CAG5B,aAAa,OAAoB,UAA2B;EAC1D,IAAI,UACF,KAAK,iBAAiB,KAAA,KACtB,KAAK,iBAAiB,KAAA,KACtB,KAAK,gBAAgB,KAAA;EACvB,MAAM,YAAY,MAAM,QAAQ,EAAE;AAElC,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,MAAM,KAAK;AAE7D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,SAAS;AAE3D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,MAAM,QAAQ,KAAK,aAAa,SAAS,IAAI,CAAC;AAGvE,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,MAAM,KAAK;AAE9D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,SAAS;AAE5D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,OAAO,QAAQ,CAAC,KAAK,aAAa,SAAS,IAAI,CAAC;AAGzE,SAAO;;;AAIX,MAAa,eAAe,QAAwB;AAGlD,QADgB,KAAK,IAAI,CACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../src/runnables/utils.ts"],"sourcesContent":["import { StreamEvent } from \"../tracers/event_stream.js\";\nimport type { RunnableInterface } from \"./types.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRunnableInterface(thing: any): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n}\n\n/**\n * Utility to filter the root event in the streamEvents implementation.\n * This is simply binding the arguments to the namespace to make save on\n * a bit of typing in the streamEvents implementation.\n *\n * TODO: Refactor and remove.\n */\nexport class _RootEventFilter {\n includeNames?: string[];\n\n includeTypes?: string[];\n\n includeTags?: string[];\n\n excludeNames?: string[];\n\n excludeTypes?: string[];\n\n excludeTags?: string[];\n\n constructor(fields: {\n includeNames?: string[];\n includeTypes?: string[];\n includeTags?: string[];\n excludeNames?: string[];\n excludeTypes?: string[];\n excludeTags?: string[];\n }) {\n this.includeNames = fields.includeNames;\n this.includeTypes = fields.includeTypes;\n this.includeTags = fields.includeTags;\n this.excludeNames = fields.excludeNames;\n this.excludeTypes = fields.excludeTypes;\n this.excludeTags = fields.excludeTags;\n }\n\n includeEvent(event: StreamEvent, rootType: string): boolean {\n let include =\n this.includeNames === undefined &&\n this.includeTypes === undefined &&\n this.includeTags === undefined;\n const eventTags = event.tags ?? [];\n\n if (this.includeNames !== undefined) {\n include = include || this.includeNames.includes(event.name);\n }\n if (this.includeTypes !== undefined) {\n include = include || this.includeTypes.includes(rootType);\n }\n if (this.includeTags !== undefined) {\n include =\n include || eventTags.some((tag) => this.includeTags?.includes(tag));\n }\n\n if (this.excludeNames !== undefined) {\n include = include && !this.excludeNames.includes(event.name);\n }\n if (this.excludeTypes !== undefined) {\n include = include && !this.excludeTypes.includes(rootType);\n }\n if (this.excludeTags !== undefined) {\n include =\n include && eventTags.every((tag) => !this.excludeTags?.includes(tag));\n }\n\n return include;\n }\n}\n\nexport const toBase64Url = (str: string): string => {\n // Use btoa for compatibility, assume ASCII\n const encoded = btoa(str);\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n};\n"],"mappings":";AAIA,SAAgB,oBAAoB,OAAwC;AAC1E,QAAO,QAAQ,MAAM,cAAc;;;;;;;;;AAUrC,IAAa,mBAAb,MAA8B;CAC5B;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAOT;AACD,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;AAC1B,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;;CAG5B,aAAa,OAAoB,UAA2B;EAC1D,IAAI,UACF,KAAK,iBAAiB,KAAA,KACtB,KAAK,iBAAiB,KAAA,KACtB,KAAK,gBAAgB,KAAA;EACvB,MAAM,YAAY,MAAM,QAAQ,EAAE;AAElC,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,MAAM,KAAK;AAE7D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,SAAS;AAE3D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,MAAM,QAAQ,KAAK,aAAa,SAAS,IAAI,CAAC;AAGvE,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,MAAM,KAAK;AAE9D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,SAAS;AAE5D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,OAAO,QAAQ,CAAC,KAAK,aAAa,SAAS,IAAI,CAAC;AAGzE,SAAO;;;AAIX,MAAa,eAAe,QAAwB;AAGlD,QADgB,KAAK,IAAI,CACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../src/runnables/utils.ts"],"sourcesContent":["import { StreamEvent } from \"../tracers/event_stream.js\";\nimport type { RunnableInterface } from \"./types.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isRunnableInterface(thing: any): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n}\n\n/**\n * Utility to filter the root event in the streamEvents implementation.\n * This is simply binding the arguments to the namespace to make save on\n * a bit of typing in the streamEvents implementation.\n *\n * TODO: Refactor and remove.\n */\nexport class _RootEventFilter {\n includeNames?: string[];\n\n includeTypes?: string[];\n\n includeTags?: string[];\n\n excludeNames?: string[];\n\n excludeTypes?: string[];\n\n excludeTags?: string[];\n\n constructor(fields: {\n includeNames?: string[];\n includeTypes?: string[];\n includeTags?: string[];\n excludeNames?: string[];\n excludeTypes?: string[];\n excludeTags?: string[];\n }) {\n this.includeNames = fields.includeNames;\n this.includeTypes = fields.includeTypes;\n this.includeTags = fields.includeTags;\n this.excludeNames = fields.excludeNames;\n this.excludeTypes = fields.excludeTypes;\n this.excludeTags = fields.excludeTags;\n }\n\n includeEvent(event: StreamEvent, rootType: string): boolean {\n let include =\n this.includeNames === undefined &&\n this.includeTypes === undefined &&\n this.includeTags === undefined;\n const eventTags = event.tags ?? [];\n\n if (this.includeNames !== undefined) {\n include = include || this.includeNames.includes(event.name);\n }\n if (this.includeTypes !== undefined) {\n include = include || this.includeTypes.includes(rootType);\n }\n if (this.includeTags !== undefined) {\n include =\n include || eventTags.some((tag) => this.includeTags?.includes(tag));\n }\n\n if (this.excludeNames !== undefined) {\n include = include && !this.excludeNames.includes(event.name);\n }\n if (this.excludeTypes !== undefined) {\n include = include && !this.excludeTypes.includes(rootType);\n }\n if (this.excludeTags !== undefined) {\n include =\n include && eventTags.every((tag) => !this.excludeTags?.includes(tag));\n }\n\n return include;\n }\n}\n\nexport const toBase64Url = (str: string): string => {\n // Use btoa for compatibility, assume ASCII\n const encoded = btoa(str);\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n};\n"],"mappings":";AAIA,SAAgB,oBAAoB,OAAwC;AAC1E,QAAO,QAAQ,MAAM,cAAc;;;;;;;;;AAUrC,IAAa,mBAAb,MAA8B;CAC5B;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAOT;AACD,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;AAC1B,OAAK,eAAe,OAAO;AAC3B,OAAK,eAAe,OAAO;AAC3B,OAAK,cAAc,OAAO;;CAG5B,aAAa,OAAoB,UAA2B;EAC1D,IAAI,UACF,KAAK,iBAAiB,KAAA,KACtB,KAAK,iBAAiB,KAAA,KACtB,KAAK,gBAAgB,KAAA;EACvB,MAAM,YAAY,MAAM,QAAQ,EAAE;AAElC,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,MAAM,KAAK;AAE7D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,KAAK,aAAa,SAAS,SAAS;AAE3D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,MAAM,QAAQ,KAAK,aAAa,SAAS,IAAI,CAAC;AAGvE,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,MAAM,KAAK;AAE9D,MAAI,KAAK,iBAAiB,KAAA,EACxB,WAAU,WAAW,CAAC,KAAK,aAAa,SAAS,SAAS;AAE5D,MAAI,KAAK,gBAAgB,KAAA,EACvB,WACE,WAAW,UAAU,OAAO,QAAQ,CAAC,KAAK,aAAa,SAAS,IAAI,CAAC;AAGzE,SAAO;;;AAIX,MAAa,eAAe,QAAwB;AAGlD,QADgB,KAAK,IAAI,CACV,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.cjs","names":["getGlobalAsyncLocalStorageInstance","_CONTEXT_VARIABLES_KEY","RunTree"],"sources":["../../../src/singletons/async_local_storage/context.ts"],"sourcesContent":["import { isRunTree, RunTree } from \"langsmith/run_trees\";\nimport { BaseCallbackHandler } from \"../../callbacks/base.js\";\nimport {\n _CONTEXT_VARIABLES_KEY,\n getGlobalAsyncLocalStorageInstance,\n} from \"./globals.js\";\n\n/**\n * Set a context variable. Context variables are scoped to any\n * child runnables called by the current runnable, or globally if set outside\n * of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n * @param value The value to set.\n */\nexport function setContextVariable<T>(name: PropertyKey, value: T): void {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n throw new Error(\n `Internal error: Global shared async local storage instance has not been initialized.`\n );\n }\n const runTree = asyncLocalStorageInstance.getStore();\n const contextVars = { ...runTree?.[_CONTEXT_VARIABLES_KEY] };\n contextVars[name] = value;\n let newValue = {};\n if (isRunTree(runTree)) {\n newValue = new RunTree(runTree);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (newValue as any)[_CONTEXT_VARIABLES_KEY] = contextVars;\n asyncLocalStorageInstance.enterWith(newValue);\n}\n\n/**\n * Get the value of a previously set context variable. Context variables\n * are scoped to any child runnables called by the current runnable,\n * or globally if set outside of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getContextVariable<T = any>(name: PropertyKey): T | undefined {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n return undefined;\n }\n const runTree = asyncLocalStorageInstance.getStore();\n return runTree?.[_CONTEXT_VARIABLES_KEY]?.[name];\n}\n\nconst LC_CONFIGURE_HOOKS_KEY = Symbol(\"lc:configure_hooks\");\n\nexport const _getConfigureHooks = () =>\n getContextVariable<ConfigureHook[]>(LC_CONFIGURE_HOOKS_KEY) || [];\n\n/**\n * Register a callback configure hook to automatically add callback handlers to all runs.\n *\n * There are two ways to use this:\n *\n * 1. Using a context variable:\n * - Set `contextVar` to specify the variable name\n * - Use `setContextVariable()` to store your handler instance\n *\n * 2. Using an environment variable:\n * - Set both `envVar` and `handlerClass`\n * - The handler will be instantiated when the env var is set to \"true\".\n *\n * @example\n * ```typescript\n * // Method 1: Using context variable\n * import {\n * registerConfigureHook,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const tracer = new MyCallbackHandler();\n * registerConfigureHook({\n * contextVar: \"my_tracer\",\n * });\n * setContextVariable(\"my_tracer\", tracer);\n *\n * // ...run code here\n *\n * // Method 2: Using environment variable\n * registerConfigureHook({\n * handlerClass: MyCallbackHandler,\n * envVar: \"MY_TRACER_ENABLED\",\n * });\n * process.env.MY_TRACER_ENABLED = \"true\";\n *\n * // ...run code here\n * ```\n *\n * @param config Configuration object for the hook\n * @param config.contextVar Name of the context variable containing the handler instance\n * @param config.inheritable Whether child runs should inherit this handler\n * @param config.handlerClass Optional callback handler class (required if using envVar)\n * @param config.envVar Optional environment variable name to control handler activation\n */\nexport const registerConfigureHook = (config: ConfigureHook) => {\n if (config.envVar && !config.handlerClass) {\n throw new Error(\n \"If envVar is set, handlerClass must also be set to a non-None value.\"\n );\n }\n setContextVariable(LC_CONFIGURE_HOOKS_KEY, [..._getConfigureHooks(), config]);\n};\n\nexport type ConfigureHook = {\n contextVar?: string;\n inheritable?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handlerClass?: new (...args: any[]) => BaseCallbackHandler;\n envVar?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,SAAgB,mBAAsB,MAAmB,OAAgB;CAEvE,MAAM,4BAA4BA,gBAAAA,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC,OAAM,IAAI,MACR,uFACD;CAEH,MAAM,UAAU,0BAA0B,UAAU;CACpD,MAAM,cAAc,EAAE,GAAG,UAAUC,gBAAAA,yBAAyB;AAC5D,aAAY,QAAQ;CACpB,IAAI,WAAW,EAAE;AACjB,MAAA,GAAA,oBAAA,WAAc,QAAQ,CACpB,YAAW,IAAIC,oBAAAA,QAAQ,QAAQ;AAGhC,UAAiBD,gBAAAA,0BAA0B;AAC5C,2BAA0B,UAAU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqD/C,SAAgB,mBAA4B,MAAkC;CAE5E,MAAM,4BAA4BD,gBAAAA,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC;AAGF,QADgB,0BAA0B,UAAU,GACnCC,gBAAAA,0BAA0B;;AAG7C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,2BACX,mBAAoC,uBAAuB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CnE,MAAa,yBAAyB,WAA0B;AAC9D,KAAI,OAAO,UAAU,CAAC,OAAO,aAC3B,OAAM,IAAI,MACR,uEACD;AAEH,oBAAmB,wBAAwB,CAAC,GAAG,oBAAoB,EAAE,OAAO,CAAC"}
1
+ {"version":3,"file":"context.cjs","names":["getGlobalAsyncLocalStorageInstance","_CONTEXT_VARIABLES_KEY","RunTree"],"sources":["../../../src/singletons/async_local_storage/context.ts"],"sourcesContent":["import { isRunTree, RunTree } from \"langsmith/run_trees\";\nimport { BaseCallbackHandler } from \"../../callbacks/base.js\";\nimport {\n _CONTEXT_VARIABLES_KEY,\n getGlobalAsyncLocalStorageInstance,\n} from \"./globals.js\";\n\n/**\n * Set a context variable. Context variables are scoped to any\n * child runnables called by the current runnable, or globally if set outside\n * of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n * @param value The value to set.\n */\nexport function setContextVariable<T>(name: PropertyKey, value: T): void {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n throw new Error(\n `Internal error: Global shared async local storage instance has not been initialized.`\n );\n }\n const runTree = asyncLocalStorageInstance.getStore();\n const contextVars = { ...runTree?.[_CONTEXT_VARIABLES_KEY] };\n contextVars[name] = value;\n let newValue = {};\n if (isRunTree(runTree)) {\n newValue = new RunTree(runTree);\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (newValue as any)[_CONTEXT_VARIABLES_KEY] = contextVars;\n asyncLocalStorageInstance.enterWith(newValue);\n}\n\n/**\n * Get the value of a previously set context variable. Context variables\n * are scoped to any child runnables called by the current runnable,\n * or globally if set outside of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getContextVariable<T = any>(name: PropertyKey): T | undefined {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n return undefined;\n }\n const runTree = asyncLocalStorageInstance.getStore();\n return runTree?.[_CONTEXT_VARIABLES_KEY]?.[name];\n}\n\nconst LC_CONFIGURE_HOOKS_KEY = Symbol(\"lc:configure_hooks\");\n\nexport const _getConfigureHooks = () =>\n getContextVariable<ConfigureHook[]>(LC_CONFIGURE_HOOKS_KEY) || [];\n\n/**\n * Register a callback configure hook to automatically add callback handlers to all runs.\n *\n * There are two ways to use this:\n *\n * 1. Using a context variable:\n * - Set `contextVar` to specify the variable name\n * - Use `setContextVariable()` to store your handler instance\n *\n * 2. Using an environment variable:\n * - Set both `envVar` and `handlerClass`\n * - The handler will be instantiated when the env var is set to \"true\".\n *\n * @example\n * ```typescript\n * // Method 1: Using context variable\n * import {\n * registerConfigureHook,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const tracer = new MyCallbackHandler();\n * registerConfigureHook({\n * contextVar: \"my_tracer\",\n * });\n * setContextVariable(\"my_tracer\", tracer);\n *\n * // ...run code here\n *\n * // Method 2: Using environment variable\n * registerConfigureHook({\n * handlerClass: MyCallbackHandler,\n * envVar: \"MY_TRACER_ENABLED\",\n * });\n * process.env.MY_TRACER_ENABLED = \"true\";\n *\n * // ...run code here\n * ```\n *\n * @param config Configuration object for the hook\n * @param config.contextVar Name of the context variable containing the handler instance\n * @param config.inheritable Whether child runs should inherit this handler\n * @param config.handlerClass Optional callback handler class (required if using envVar)\n * @param config.envVar Optional environment variable name to control handler activation\n */\nexport const registerConfigureHook = (config: ConfigureHook) => {\n if (config.envVar && !config.handlerClass) {\n throw new Error(\n \"If envVar is set, handlerClass must also be set to a non-None value.\"\n );\n }\n setContextVariable(LC_CONFIGURE_HOOKS_KEY, [..._getConfigureHooks(), config]);\n};\n\nexport type ConfigureHook = {\n contextVar?: string;\n inheritable?: boolean;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n handlerClass?: new (...args: any[]) => BaseCallbackHandler;\n envVar?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,SAAgB,mBAAsB,MAAmB,OAAgB;CAEvE,MAAM,4BAA4BA,gBAAAA,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC,OAAM,IAAI,MACR,uFACD;CAEH,MAAM,UAAU,0BAA0B,UAAU;CACpD,MAAM,cAAc,EAAE,GAAG,UAAUC,gBAAAA,yBAAyB;AAC5D,aAAY,QAAQ;CACpB,IAAI,WAAW,EAAE;AACjB,MAAA,GAAA,oBAAA,WAAc,QAAQ,CACpB,YAAW,IAAIC,oBAAAA,QAAQ,QAAQ;AAGhC,UAAiBD,gBAAAA,0BAA0B;AAC5C,2BAA0B,UAAU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqD/C,SAAgB,mBAA4B,MAAkC;CAE5E,MAAM,4BAA4BD,gBAAAA,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC;AAGF,QADgB,0BAA0B,UAAU,GACnCC,gBAAAA,0BAA0B;;AAG7C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,2BACX,mBAAoC,uBAAuB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CnE,MAAa,yBAAyB,WAA0B;AAC9D,KAAI,OAAO,UAAU,CAAC,OAAO,aAC3B,OAAM,IAAI,MACR,uEACD;AAEH,oBAAmB,wBAAwB,CAAC,GAAG,oBAAoB,EAAE,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.cts","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"mappings":";;;;;AAyDA;;;;;;;;;;;AAsEA;;;;;;;;;;AA4DA;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;iBA3IgB,kBAAA,GAAA,CAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsEhD,kBAAA,SAAA,CAA4B,IAAA,EAAM,WAAA,GAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4DnD,qBAAA,GAAqB,MAAA,EAAA,aAAA;AAAA,KAStB,aAAA;EACV,UAAA;EACA,WAAA;EAEA,YAAA,WAAuB,IAAA,YAAgB,mBAAA;EACvC,MAAA;AAAA"}
1
+ {"version":3,"file":"context.d.cts","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"mappings":";;;;;AAyDA;;;;;;;;;;;AAsEA;;;;;;;;;;AA4DA;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;iBA3IgB,kBAAA,GAAA,CAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsEhD,kBAAA,SAAA,CAA4B,IAAA,EAAM,WAAA,GAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4DnD,qBAAA,GAAqB,MAAA,EAAY,aAAA;AAAA,KASlC,aAAA;EACV,UAAA;EACA,WAAA;EAEA,YAAA,WAAuB,IAAA,YAAgB,mBAAA;EACvC,MAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"mappings":";;;;;AAyDA;;;;;;;;;;;AAsEA;;;;;;;;;;AA4DA;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;iBA3IgB,kBAAA,GAAA,CAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsEhD,kBAAA,SAAA,CAA4B,IAAA,EAAM,WAAA,GAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4DnD,qBAAA,GAAqB,MAAA,EAAA,aAAA;AAAA,KAStB,aAAA;EACV,UAAA;EACA,WAAA;EAEA,YAAA,WAAuB,IAAA,YAAgB,mBAAA;EACvC,MAAA;AAAA"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"mappings":";;;;;AAyDA;;;;;;;;;;;AAsEA;;;;;;;;;;AA4DA;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;iBA3IgB,kBAAA,GAAA,CAAsB,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsEhD,kBAAA,SAAA,CAA4B,IAAA,EAAM,WAAA,GAAc,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA4DnD,qBAAA,GAAqB,MAAA,EAAY,aAAA;AAAA,KASlC,aAAA;EACV,UAAA;EACA,WAAA;EAEA,YAAA,WAAuB,IAAA,YAAgB,mBAAA;EACvC,MAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"sourcesContent":["import { isRunTree, RunTree } from \"langsmith/run_trees\";\nimport { BaseCallbackHandler } from \"../../callbacks/base.js\";\nimport {\n _CONTEXT_VARIABLES_KEY,\n getGlobalAsyncLocalStorageInstance,\n} from \"./globals.js\";\n\n/**\n * Set a context variable. Context variables are scoped to any\n * child runnables called by the current runnable, or globally if set outside\n * of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n * @param value The value to set.\n */\nexport function setContextVariable<T>(name: PropertyKey, value: T): void {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n throw new Error(\n `Internal error: Global shared async local storage instance has not been initialized.`\n );\n }\n const runTree = asyncLocalStorageInstance.getStore();\n const contextVars = { ...runTree?.[_CONTEXT_VARIABLES_KEY] };\n contextVars[name] = value;\n let newValue = {};\n if (isRunTree(runTree)) {\n newValue = new RunTree(runTree);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (newValue as any)[_CONTEXT_VARIABLES_KEY] = contextVars;\n asyncLocalStorageInstance.enterWith(newValue);\n}\n\n/**\n * Get the value of a previously set context variable. Context variables\n * are scoped to any child runnables called by the current runnable,\n * or globally if set outside of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getContextVariable<T = any>(name: PropertyKey): T | undefined {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n return undefined;\n }\n const runTree = asyncLocalStorageInstance.getStore();\n return runTree?.[_CONTEXT_VARIABLES_KEY]?.[name];\n}\n\nconst LC_CONFIGURE_HOOKS_KEY = Symbol(\"lc:configure_hooks\");\n\nexport const _getConfigureHooks = () =>\n getContextVariable<ConfigureHook[]>(LC_CONFIGURE_HOOKS_KEY) || [];\n\n/**\n * Register a callback configure hook to automatically add callback handlers to all runs.\n *\n * There are two ways to use this:\n *\n * 1. Using a context variable:\n * - Set `contextVar` to specify the variable name\n * - Use `setContextVariable()` to store your handler instance\n *\n * 2. Using an environment variable:\n * - Set both `envVar` and `handlerClass`\n * - The handler will be instantiated when the env var is set to \"true\".\n *\n * @example\n * ```typescript\n * // Method 1: Using context variable\n * import {\n * registerConfigureHook,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const tracer = new MyCallbackHandler();\n * registerConfigureHook({\n * contextVar: \"my_tracer\",\n * });\n * setContextVariable(\"my_tracer\", tracer);\n *\n * // ...run code here\n *\n * // Method 2: Using environment variable\n * registerConfigureHook({\n * handlerClass: MyCallbackHandler,\n * envVar: \"MY_TRACER_ENABLED\",\n * });\n * process.env.MY_TRACER_ENABLED = \"true\";\n *\n * // ...run code here\n * ```\n *\n * @param config Configuration object for the hook\n * @param config.contextVar Name of the context variable containing the handler instance\n * @param config.inheritable Whether child runs should inherit this handler\n * @param config.handlerClass Optional callback handler class (required if using envVar)\n * @param config.envVar Optional environment variable name to control handler activation\n */\nexport const registerConfigureHook = (config: ConfigureHook) => {\n if (config.envVar && !config.handlerClass) {\n throw new Error(\n \"If envVar is set, handlerClass must also be set to a non-None value.\"\n );\n }\n setContextVariable(LC_CONFIGURE_HOOKS_KEY, [..._getConfigureHooks(), config]);\n};\n\nexport type ConfigureHook = {\n contextVar?: string;\n inheritable?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handlerClass?: new (...args: any[]) => BaseCallbackHandler;\n envVar?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,SAAgB,mBAAsB,MAAmB,OAAgB;CAEvE,MAAM,4BAA4B,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC,OAAM,IAAI,MACR,uFACD;CAEH,MAAM,UAAU,0BAA0B,UAAU;CACpD,MAAM,cAAc,EAAE,GAAG,UAAU,yBAAyB;AAC5D,aAAY,QAAQ;CACpB,IAAI,WAAW,EAAE;AACjB,KAAI,UAAU,QAAQ,CACpB,YAAW,IAAI,QAAQ,QAAQ;AAGhC,UAAiB,0BAA0B;AAC5C,2BAA0B,UAAU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqD/C,SAAgB,mBAA4B,MAAkC;CAE5E,MAAM,4BAA4B,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC;AAGF,QADgB,0BAA0B,UAAU,GACnC,0BAA0B;;AAG7C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,2BACX,mBAAoC,uBAAuB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CnE,MAAa,yBAAyB,WAA0B;AAC9D,KAAI,OAAO,UAAU,CAAC,OAAO,aAC3B,OAAM,IAAI,MACR,uEACD;AAEH,oBAAmB,wBAAwB,CAAC,GAAG,oBAAoB,EAAE,OAAO,CAAC"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/singletons/async_local_storage/context.ts"],"sourcesContent":["import { isRunTree, RunTree } from \"langsmith/run_trees\";\nimport { BaseCallbackHandler } from \"../../callbacks/base.js\";\nimport {\n _CONTEXT_VARIABLES_KEY,\n getGlobalAsyncLocalStorageInstance,\n} from \"./globals.js\";\n\n/**\n * Set a context variable. Context variables are scoped to any\n * child runnables called by the current runnable, or globally if set outside\n * of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n * @param value The value to set.\n */\nexport function setContextVariable<T>(name: PropertyKey, value: T): void {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n throw new Error(\n `Internal error: Global shared async local storage instance has not been initialized.`\n );\n }\n const runTree = asyncLocalStorageInstance.getStore();\n const contextVars = { ...runTree?.[_CONTEXT_VARIABLES_KEY] };\n contextVars[name] = value;\n let newValue = {};\n if (isRunTree(runTree)) {\n newValue = new RunTree(runTree);\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n (newValue as any)[_CONTEXT_VARIABLES_KEY] = contextVars;\n asyncLocalStorageInstance.enterWith(newValue);\n}\n\n/**\n * Get the value of a previously set context variable. Context variables\n * are scoped to any child runnables called by the current runnable,\n * or globally if set outside of any runnable.\n *\n * @remarks\n * This function is only supported in environments that support AsyncLocalStorage,\n * including Node.js, Deno, and Cloudflare Workers.\n *\n * @example\n * ```ts\n * import { RunnableLambda } from \"@langchain/core/runnables\";\n * import {\n * getContextVariable,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const nested = RunnableLambda.from(() => {\n * // \"bar\" because it was set by a parent\n * console.log(getContextVariable(\"foo\"));\n *\n * // Override to \"baz\", but only for child runnables\n * setContextVariable(\"foo\", \"baz\");\n *\n * // Now \"baz\", but only for child runnables\n * return getContextVariable(\"foo\");\n * });\n *\n * const runnable = RunnableLambda.from(async () => {\n * // Set a context variable named \"foo\"\n * setContextVariable(\"foo\", \"bar\");\n *\n * const res = await nested.invoke({});\n *\n * // Still \"bar\" since child changes do not affect parents\n * console.log(getContextVariable(\"foo\"));\n *\n * return res;\n * });\n *\n * // undefined, because context variable has not been set yet\n * console.log(getContextVariable(\"foo\"));\n *\n * // Final return value is \"baz\"\n * const result = await runnable.invoke({});\n * ```\n *\n * @param name The name of the context variable.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getContextVariable<T = any>(name: PropertyKey): T | undefined {\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance === undefined) {\n return undefined;\n }\n const runTree = asyncLocalStorageInstance.getStore();\n return runTree?.[_CONTEXT_VARIABLES_KEY]?.[name];\n}\n\nconst LC_CONFIGURE_HOOKS_KEY = Symbol(\"lc:configure_hooks\");\n\nexport const _getConfigureHooks = () =>\n getContextVariable<ConfigureHook[]>(LC_CONFIGURE_HOOKS_KEY) || [];\n\n/**\n * Register a callback configure hook to automatically add callback handlers to all runs.\n *\n * There are two ways to use this:\n *\n * 1. Using a context variable:\n * - Set `contextVar` to specify the variable name\n * - Use `setContextVariable()` to store your handler instance\n *\n * 2. Using an environment variable:\n * - Set both `envVar` and `handlerClass`\n * - The handler will be instantiated when the env var is set to \"true\".\n *\n * @example\n * ```typescript\n * // Method 1: Using context variable\n * import {\n * registerConfigureHook,\n * setContextVariable\n * } from \"@langchain/core/context\";\n *\n * const tracer = new MyCallbackHandler();\n * registerConfigureHook({\n * contextVar: \"my_tracer\",\n * });\n * setContextVariable(\"my_tracer\", tracer);\n *\n * // ...run code here\n *\n * // Method 2: Using environment variable\n * registerConfigureHook({\n * handlerClass: MyCallbackHandler,\n * envVar: \"MY_TRACER_ENABLED\",\n * });\n * process.env.MY_TRACER_ENABLED = \"true\";\n *\n * // ...run code here\n * ```\n *\n * @param config Configuration object for the hook\n * @param config.contextVar Name of the context variable containing the handler instance\n * @param config.inheritable Whether child runs should inherit this handler\n * @param config.handlerClass Optional callback handler class (required if using envVar)\n * @param config.envVar Optional environment variable name to control handler activation\n */\nexport const registerConfigureHook = (config: ConfigureHook) => {\n if (config.envVar && !config.handlerClass) {\n throw new Error(\n \"If envVar is set, handlerClass must also be set to a non-None value.\"\n );\n }\n setContextVariable(LC_CONFIGURE_HOOKS_KEY, [..._getConfigureHooks(), config]);\n};\n\nexport type ConfigureHook = {\n contextVar?: string;\n inheritable?: boolean;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n handlerClass?: new (...args: any[]) => BaseCallbackHandler;\n envVar?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,SAAgB,mBAAsB,MAAmB,OAAgB;CAEvE,MAAM,4BAA4B,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC,OAAM,IAAI,MACR,uFACD;CAEH,MAAM,UAAU,0BAA0B,UAAU;CACpD,MAAM,cAAc,EAAE,GAAG,UAAU,yBAAyB;AAC5D,aAAY,QAAQ;CACpB,IAAI,WAAW,EAAE;AACjB,KAAI,UAAU,QAAQ,CACpB,YAAW,IAAI,QAAQ,QAAQ;AAGhC,UAAiB,0BAA0B;AAC5C,2BAA0B,UAAU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqD/C,SAAgB,mBAA4B,MAAkC;CAE5E,MAAM,4BAA4B,oCAAoC;AACtE,KAAI,8BAA8B,KAAA,EAChC;AAGF,QADgB,0BAA0B,UAAU,GACnC,0BAA0B;;AAG7C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,2BACX,mBAAoC,uBAAuB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CnE,MAAa,yBAAyB,WAA0B;AAC9D,KAAI,OAAO,UAAU,CAAC,OAAO,aAC3B,OAAM,IAAI,MACR,uEACD;AAEH,oBAAmB,wBAAwB,CAAC,GAAG,oBAAoB,EAAE,OAAO,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"globals.cjs","names":[],"sources":["../../../src/singletons/async_local_storage/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface AsyncLocalStorageInterface {\n getStore: () => any | undefined;\n\n run: <T>(store: any, callback: () => T) => T;\n\n enterWith: (store: any) => void;\n}\n\nexport const TRACING_ALS_KEY = Symbol.for(\"ls:tracing_async_local_storage\");\n\nexport const _CONTEXT_VARIABLES_KEY = Symbol.for(\"lc:context_variables\");\n\nexport const setGlobalAsyncLocalStorageInstance = (\n instance: AsyncLocalStorageInterface\n) => {\n (globalThis as any)[TRACING_ALS_KEY] = instance;\n};\n\nexport const getGlobalAsyncLocalStorageInstance = ():\n | AsyncLocalStorageInterface\n | undefined => {\n return (globalThis as any)[TRACING_ALS_KEY];\n};\n"],"mappings":";AASA,MAAa,kBAAkB,OAAO,IAAI,iCAAiC;AAE3E,MAAa,yBAAyB,OAAO,IAAI,uBAAuB;AAExE,MAAa,sCACX,aACG;AACF,YAAmB,mBAAmB;;AAGzC,MAAa,2CAEI;AACf,QAAQ,WAAmB"}
1
+ {"version":3,"file":"globals.cjs","names":[],"sources":["../../../src/singletons/async_local_storage/globals.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nexport interface AsyncLocalStorageInterface {\n getStore: () => any | undefined;\n\n run: <T>(store: any, callback: () => T) => T;\n\n enterWith: (store: any) => void;\n}\n\nexport const TRACING_ALS_KEY = Symbol.for(\"ls:tracing_async_local_storage\");\n\nexport const _CONTEXT_VARIABLES_KEY = Symbol.for(\"lc:context_variables\");\n\nexport const setGlobalAsyncLocalStorageInstance = (\n instance: AsyncLocalStorageInterface\n) => {\n (globalThis as any)[TRACING_ALS_KEY] = instance;\n};\n\nexport const getGlobalAsyncLocalStorageInstance = ():\n | AsyncLocalStorageInterface\n | undefined => {\n return (globalThis as any)[TRACING_ALS_KEY];\n};\n"],"mappings":";AASA,MAAa,kBAAkB,OAAO,IAAI,iCAAiC;AAE3E,MAAa,yBAAyB,OAAO,IAAI,uBAAuB;AAExE,MAAa,sCACX,aACG;AACF,YAAmB,mBAAmB;;AAGzC,MAAa,2CAEI;AACf,QAAQ,WAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"globals.js","names":[],"sources":["../../../src/singletons/async_local_storage/globals.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport interface AsyncLocalStorageInterface {\n getStore: () => any | undefined;\n\n run: <T>(store: any, callback: () => T) => T;\n\n enterWith: (store: any) => void;\n}\n\nexport const TRACING_ALS_KEY = Symbol.for(\"ls:tracing_async_local_storage\");\n\nexport const _CONTEXT_VARIABLES_KEY = Symbol.for(\"lc:context_variables\");\n\nexport const setGlobalAsyncLocalStorageInstance = (\n instance: AsyncLocalStorageInterface\n) => {\n (globalThis as any)[TRACING_ALS_KEY] = instance;\n};\n\nexport const getGlobalAsyncLocalStorageInstance = ():\n | AsyncLocalStorageInterface\n | undefined => {\n return (globalThis as any)[TRACING_ALS_KEY];\n};\n"],"mappings":";AASA,MAAa,kBAAkB,OAAO,IAAI,iCAAiC;AAE3E,MAAa,yBAAyB,OAAO,IAAI,uBAAuB;AAExE,MAAa,sCACX,aACG;AACF,YAAmB,mBAAmB;;AAGzC,MAAa,2CAEI;AACf,QAAQ,WAAmB"}
1
+ {"version":3,"file":"globals.js","names":[],"sources":["../../../src/singletons/async_local_storage/globals.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nexport interface AsyncLocalStorageInterface {\n getStore: () => any | undefined;\n\n run: <T>(store: any, callback: () => T) => T;\n\n enterWith: (store: any) => void;\n}\n\nexport const TRACING_ALS_KEY = Symbol.for(\"ls:tracing_async_local_storage\");\n\nexport const _CONTEXT_VARIABLES_KEY = Symbol.for(\"lc:context_variables\");\n\nexport const setGlobalAsyncLocalStorageInstance = (\n instance: AsyncLocalStorageInterface\n) => {\n (globalThis as any)[TRACING_ALS_KEY] = instance;\n};\n\nexport const getGlobalAsyncLocalStorageInstance = ():\n | AsyncLocalStorageInterface\n | undefined => {\n return (globalThis as any)[TRACING_ALS_KEY];\n};\n"],"mappings":";AASA,MAAa,kBAAkB,OAAO,IAAI,iCAAiC;AAE3E,MAAa,yBAAyB,OAAO,IAAI,uBAAuB;AAExE,MAAa,sCACX,aACG;AACF,YAAmB,mBAAmB;;AAGzC,MAAa,2CAEI;AACf,QAAQ,WAAmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["getGlobalAsyncLocalStorageInstance","CallbackManager","RunTree","_CONTEXT_VARIABLES_KEY"],"sources":["../../../src/singletons/async_local_storage/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RunTree } from \"langsmith\";\nimport {\n AsyncLocalStorageInterface,\n getGlobalAsyncLocalStorageInstance,\n setGlobalAsyncLocalStorageInstance,\n _CONTEXT_VARIABLES_KEY,\n} from \"./globals.js\";\nimport { CallbackManager } from \"../../callbacks/manager.js\";\nimport { LangChainTracer } from \"../../tracers/tracer_langchain.js\";\n\nexport class MockAsyncLocalStorage implements AsyncLocalStorageInterface {\n getStore(): any {\n return undefined;\n }\n\n run<T>(_store: any, callback: () => T): T {\n return callback();\n }\n\n enterWith(_store: any) {\n return undefined;\n }\n}\n\nconst mockAsyncLocalStorage = new MockAsyncLocalStorage();\n\nconst LC_CHILD_KEY = Symbol.for(\"lc:child_config\");\n\nclass AsyncLocalStorageProvider {\n getInstance(): AsyncLocalStorageInterface {\n return getGlobalAsyncLocalStorageInstance() ?? mockAsyncLocalStorage;\n }\n\n getRunnableConfig() {\n const storage = this.getInstance();\n // this has the runnable config\n // which means that we should also have an instance of a LangChainTracer\n // with the run map prepopulated\n return storage.getStore()?.extra?.[LC_CHILD_KEY];\n }\n\n runWithConfig<T>(\n config: any,\n callback: () => T,\n avoidCreatingRootRunTree?: boolean\n ): T {\n const callbackManager = CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n const storage = this.getInstance();\n const previousValue = storage.getStore();\n const parentRunId = callbackManager?.getParentRunId();\n\n const langChainTracer = callbackManager?.handlers?.find(\n (handler) => handler?.name === \"langchain_tracer\"\n ) as LangChainTracer | undefined;\n\n let runTree;\n if (langChainTracer && parentRunId) {\n runTree = langChainTracer.getRunTreeWithTracingConfig(parentRunId);\n } else if (!avoidCreatingRootRunTree) {\n runTree = new RunTree({\n name: \"<runnable_lambda>\",\n tracingEnabled: false,\n });\n }\n\n if (runTree) {\n runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };\n }\n\n if (\n previousValue !== undefined &&\n previousValue[_CONTEXT_VARIABLES_KEY] !== undefined\n ) {\n if (runTree === undefined) {\n runTree = {};\n }\n (runTree as any)[_CONTEXT_VARIABLES_KEY] =\n previousValue[_CONTEXT_VARIABLES_KEY];\n }\n\n return storage.run(runTree, callback);\n }\n\n initializeGlobalInstance(instance: AsyncLocalStorageInterface) {\n if (getGlobalAsyncLocalStorageInstance() === undefined) {\n setGlobalAsyncLocalStorageInstance(instance);\n }\n }\n}\n\nconst AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider();\n\nexport { AsyncLocalStorageProviderSingleton, type AsyncLocalStorageInterface };\n"],"mappings":";;;;;AAWA,IAAa,wBAAb,MAAyE;CACvE,WAAgB;CAIhB,IAAO,QAAa,UAAsB;AACxC,SAAO,UAAU;;CAGnB,UAAU,QAAa;;AAKzB,MAAM,wBAAwB,IAAI,uBAAuB;AAEzD,MAAM,eAAe,OAAO,IAAI,kBAAkB;AAElD,IAAM,4BAAN,MAAgC;CAC9B,cAA0C;AACxC,SAAOA,gBAAAA,oCAAoC,IAAI;;CAGjD,oBAAoB;AAKlB,SAJgB,KAAK,aAAa,CAInB,UAAU,EAAE,QAAQ;;CAGrC,cACE,QACA,UACA,0BACG;EACH,MAAM,kBAAkBC,0BAAAA,gBAAgB,eACtC,QAAQ,WACR,KAAA,GACA,QAAQ,MACR,KAAA,GACA,QAAQ,SACT;EACD,MAAM,UAAU,KAAK,aAAa;EAClC,MAAM,gBAAgB,QAAQ,UAAU;EACxC,MAAM,cAAc,iBAAiB,gBAAgB;EAErD,MAAM,kBAAkB,iBAAiB,UAAU,MAChD,YAAY,SAAS,SAAS,mBAChC;EAED,IAAI;AACJ,MAAI,mBAAmB,YACrB,WAAU,gBAAgB,4BAA4B,YAAY;WACzD,CAAC,yBACV,WAAU,IAAIC,UAAAA,QAAQ;GACpB,MAAM;GACN,gBAAgB;GACjB,CAAC;AAGJ,MAAI,QACF,SAAQ,QAAQ;GAAE,GAAG,QAAQ;IAAQ,eAAe;GAAQ;AAG9D,MACE,kBAAkB,KAAA,KAClB,cAAcC,gBAAAA,4BAA4B,KAAA,GAC1C;AACA,OAAI,YAAY,KAAA,EACd,WAAU,EAAE;AAEb,WAAgBA,gBAAAA,0BACf,cAAcA,gBAAAA;;AAGlB,SAAO,QAAQ,IAAI,SAAS,SAAS;;CAGvC,yBAAyB,UAAsC;AAC7D,MAAIH,gBAAAA,oCAAoC,KAAK,KAAA,EAC3C,iBAAA,mCAAmC,SAAS;;;AAKlD,MAAM,qCAAqC,IAAI,2BAA2B"}
1
+ {"version":3,"file":"index.cjs","names":["getGlobalAsyncLocalStorageInstance","CallbackManager","RunTree","_CONTEXT_VARIABLES_KEY"],"sources":["../../../src/singletons/async_local_storage/index.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport { RunTree } from \"langsmith\";\nimport {\n AsyncLocalStorageInterface,\n getGlobalAsyncLocalStorageInstance,\n setGlobalAsyncLocalStorageInstance,\n _CONTEXT_VARIABLES_KEY,\n} from \"./globals.js\";\nimport { CallbackManager } from \"../../callbacks/manager.js\";\nimport { LangChainTracer } from \"../../tracers/tracer_langchain.js\";\n\nexport class MockAsyncLocalStorage implements AsyncLocalStorageInterface {\n getStore(): any {\n return undefined;\n }\n\n run<T>(_store: any, callback: () => T): T {\n return callback();\n }\n\n enterWith(_store: any) {\n return undefined;\n }\n}\n\nconst mockAsyncLocalStorage = new MockAsyncLocalStorage();\n\nconst LC_CHILD_KEY = Symbol.for(\"lc:child_config\");\n\nclass AsyncLocalStorageProvider {\n getInstance(): AsyncLocalStorageInterface {\n return getGlobalAsyncLocalStorageInstance() ?? mockAsyncLocalStorage;\n }\n\n getRunnableConfig() {\n const storage = this.getInstance();\n // this has the runnable config\n // which means that we should also have an instance of a LangChainTracer\n // with the run map prepopulated\n return storage.getStore()?.extra?.[LC_CHILD_KEY];\n }\n\n runWithConfig<T>(\n config: any,\n callback: () => T,\n avoidCreatingRootRunTree?: boolean\n ): T {\n const callbackManager = CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n const storage = this.getInstance();\n const previousValue = storage.getStore();\n const parentRunId = callbackManager?.getParentRunId();\n\n const langChainTracer = callbackManager?.handlers?.find(\n (handler) => handler?.name === \"langchain_tracer\"\n ) as LangChainTracer | undefined;\n\n let runTree;\n if (langChainTracer && parentRunId) {\n runTree = langChainTracer.getRunTreeWithTracingConfig(parentRunId);\n } else if (!avoidCreatingRootRunTree) {\n runTree = new RunTree({\n name: \"<runnable_lambda>\",\n tracingEnabled: false,\n });\n }\n\n if (runTree) {\n runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };\n }\n\n if (\n previousValue !== undefined &&\n previousValue[_CONTEXT_VARIABLES_KEY] !== undefined\n ) {\n if (runTree === undefined) {\n runTree = {};\n }\n (runTree as any)[_CONTEXT_VARIABLES_KEY] =\n previousValue[_CONTEXT_VARIABLES_KEY];\n }\n\n return storage.run(runTree, callback);\n }\n\n initializeGlobalInstance(instance: AsyncLocalStorageInterface) {\n if (getGlobalAsyncLocalStorageInstance() === undefined) {\n setGlobalAsyncLocalStorageInstance(instance);\n }\n }\n}\n\nconst AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider();\n\nexport { AsyncLocalStorageProviderSingleton, type AsyncLocalStorageInterface };\n"],"mappings":";;;;;AAWA,IAAa,wBAAb,MAAyE;CACvE,WAAgB;CAIhB,IAAO,QAAa,UAAsB;AACxC,SAAO,UAAU;;CAGnB,UAAU,QAAa;;AAKzB,MAAM,wBAAwB,IAAI,uBAAuB;AAEzD,MAAM,eAAe,OAAO,IAAI,kBAAkB;AAElD,IAAM,4BAAN,MAAgC;CAC9B,cAA0C;AACxC,SAAOA,gBAAAA,oCAAoC,IAAI;;CAGjD,oBAAoB;AAKlB,SAJgB,KAAK,aAAa,CAInB,UAAU,EAAE,QAAQ;;CAGrC,cACE,QACA,UACA,0BACG;EACH,MAAM,kBAAkBC,0BAAAA,gBAAgB,eACtC,QAAQ,WACR,KAAA,GACA,QAAQ,MACR,KAAA,GACA,QAAQ,SACT;EACD,MAAM,UAAU,KAAK,aAAa;EAClC,MAAM,gBAAgB,QAAQ,UAAU;EACxC,MAAM,cAAc,iBAAiB,gBAAgB;EAErD,MAAM,kBAAkB,iBAAiB,UAAU,MAChD,YAAY,SAAS,SAAS,mBAChC;EAED,IAAI;AACJ,MAAI,mBAAmB,YACrB,WAAU,gBAAgB,4BAA4B,YAAY;WACzD,CAAC,yBACV,WAAU,IAAIC,UAAAA,QAAQ;GACpB,MAAM;GACN,gBAAgB;GACjB,CAAC;AAGJ,MAAI,QACF,SAAQ,QAAQ;GAAE,GAAG,QAAQ;IAAQ,eAAe;GAAQ;AAG9D,MACE,kBAAkB,KAAA,KAClB,cAAcC,gBAAAA,4BAA4B,KAAA,GAC1C;AACA,OAAI,YAAY,KAAA,EACd,WAAU,EAAE;AAEb,WAAgBA,gBAAAA,0BACf,cAAcA,gBAAAA;;AAGlB,SAAO,QAAQ,IAAI,SAAS,SAAS;;CAGvC,yBAAyB,UAAsC;AAC7D,MAAIH,gBAAAA,oCAAoC,KAAK,KAAA,EAC3C,iBAAA,mCAAmC,SAAS;;;AAKlD,MAAM,qCAAqC,IAAI,2BAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/singletons/async_local_storage/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RunTree } from \"langsmith\";\nimport {\n AsyncLocalStorageInterface,\n getGlobalAsyncLocalStorageInstance,\n setGlobalAsyncLocalStorageInstance,\n _CONTEXT_VARIABLES_KEY,\n} from \"./globals.js\";\nimport { CallbackManager } from \"../../callbacks/manager.js\";\nimport { LangChainTracer } from \"../../tracers/tracer_langchain.js\";\n\nexport class MockAsyncLocalStorage implements AsyncLocalStorageInterface {\n getStore(): any {\n return undefined;\n }\n\n run<T>(_store: any, callback: () => T): T {\n return callback();\n }\n\n enterWith(_store: any) {\n return undefined;\n }\n}\n\nconst mockAsyncLocalStorage = new MockAsyncLocalStorage();\n\nconst LC_CHILD_KEY = Symbol.for(\"lc:child_config\");\n\nclass AsyncLocalStorageProvider {\n getInstance(): AsyncLocalStorageInterface {\n return getGlobalAsyncLocalStorageInstance() ?? mockAsyncLocalStorage;\n }\n\n getRunnableConfig() {\n const storage = this.getInstance();\n // this has the runnable config\n // which means that we should also have an instance of a LangChainTracer\n // with the run map prepopulated\n return storage.getStore()?.extra?.[LC_CHILD_KEY];\n }\n\n runWithConfig<T>(\n config: any,\n callback: () => T,\n avoidCreatingRootRunTree?: boolean\n ): T {\n const callbackManager = CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n const storage = this.getInstance();\n const previousValue = storage.getStore();\n const parentRunId = callbackManager?.getParentRunId();\n\n const langChainTracer = callbackManager?.handlers?.find(\n (handler) => handler?.name === \"langchain_tracer\"\n ) as LangChainTracer | undefined;\n\n let runTree;\n if (langChainTracer && parentRunId) {\n runTree = langChainTracer.getRunTreeWithTracingConfig(parentRunId);\n } else if (!avoidCreatingRootRunTree) {\n runTree = new RunTree({\n name: \"<runnable_lambda>\",\n tracingEnabled: false,\n });\n }\n\n if (runTree) {\n runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };\n }\n\n if (\n previousValue !== undefined &&\n previousValue[_CONTEXT_VARIABLES_KEY] !== undefined\n ) {\n if (runTree === undefined) {\n runTree = {};\n }\n (runTree as any)[_CONTEXT_VARIABLES_KEY] =\n previousValue[_CONTEXT_VARIABLES_KEY];\n }\n\n return storage.run(runTree, callback);\n }\n\n initializeGlobalInstance(instance: AsyncLocalStorageInterface) {\n if (getGlobalAsyncLocalStorageInstance() === undefined) {\n setGlobalAsyncLocalStorageInstance(instance);\n }\n }\n}\n\nconst AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider();\n\nexport { AsyncLocalStorageProviderSingleton, type AsyncLocalStorageInterface };\n"],"mappings":";;;;AAWA,IAAa,wBAAb,MAAyE;CACvE,WAAgB;CAIhB,IAAO,QAAa,UAAsB;AACxC,SAAO,UAAU;;CAGnB,UAAU,QAAa;;AAKzB,MAAM,wBAAwB,IAAI,uBAAuB;AAEzD,MAAM,eAAe,OAAO,IAAI,kBAAkB;AAElD,IAAM,4BAAN,MAAgC;CAC9B,cAA0C;AACxC,SAAO,oCAAoC,IAAI;;CAGjD,oBAAoB;AAKlB,SAJgB,KAAK,aAAa,CAInB,UAAU,EAAE,QAAQ;;CAGrC,cACE,QACA,UACA,0BACG;EACH,MAAM,kBAAkB,gBAAgB,eACtC,QAAQ,WACR,KAAA,GACA,QAAQ,MACR,KAAA,GACA,QAAQ,SACT;EACD,MAAM,UAAU,KAAK,aAAa;EAClC,MAAM,gBAAgB,QAAQ,UAAU;EACxC,MAAM,cAAc,iBAAiB,gBAAgB;EAErD,MAAM,kBAAkB,iBAAiB,UAAU,MAChD,YAAY,SAAS,SAAS,mBAChC;EAED,IAAI;AACJ,MAAI,mBAAmB,YACrB,WAAU,gBAAgB,4BAA4B,YAAY;WACzD,CAAC,yBACV,WAAU,IAAI,QAAQ;GACpB,MAAM;GACN,gBAAgB;GACjB,CAAC;AAGJ,MAAI,QACF,SAAQ,QAAQ;GAAE,GAAG,QAAQ;IAAQ,eAAe;GAAQ;AAG9D,MACE,kBAAkB,KAAA,KAClB,cAAc,4BAA4B,KAAA,GAC1C;AACA,OAAI,YAAY,KAAA,EACd,WAAU,EAAE;AAEb,WAAgB,0BACf,cAAc;;AAGlB,SAAO,QAAQ,IAAI,SAAS,SAAS;;CAGvC,yBAAyB,UAAsC;AAC7D,MAAI,oCAAoC,KAAK,KAAA,EAC3C,oCAAmC,SAAS;;;AAKlD,MAAM,qCAAqC,IAAI,2BAA2B"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/singletons/async_local_storage/index.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport { RunTree } from \"langsmith\";\nimport {\n AsyncLocalStorageInterface,\n getGlobalAsyncLocalStorageInstance,\n setGlobalAsyncLocalStorageInstance,\n _CONTEXT_VARIABLES_KEY,\n} from \"./globals.js\";\nimport { CallbackManager } from \"../../callbacks/manager.js\";\nimport { LangChainTracer } from \"../../tracers/tracer_langchain.js\";\n\nexport class MockAsyncLocalStorage implements AsyncLocalStorageInterface {\n getStore(): any {\n return undefined;\n }\n\n run<T>(_store: any, callback: () => T): T {\n return callback();\n }\n\n enterWith(_store: any) {\n return undefined;\n }\n}\n\nconst mockAsyncLocalStorage = new MockAsyncLocalStorage();\n\nconst LC_CHILD_KEY = Symbol.for(\"lc:child_config\");\n\nclass AsyncLocalStorageProvider {\n getInstance(): AsyncLocalStorageInterface {\n return getGlobalAsyncLocalStorageInstance() ?? mockAsyncLocalStorage;\n }\n\n getRunnableConfig() {\n const storage = this.getInstance();\n // this has the runnable config\n // which means that we should also have an instance of a LangChainTracer\n // with the run map prepopulated\n return storage.getStore()?.extra?.[LC_CHILD_KEY];\n }\n\n runWithConfig<T>(\n config: any,\n callback: () => T,\n avoidCreatingRootRunTree?: boolean\n ): T {\n const callbackManager = CallbackManager._configureSync(\n config?.callbacks,\n undefined,\n config?.tags,\n undefined,\n config?.metadata\n );\n const storage = this.getInstance();\n const previousValue = storage.getStore();\n const parentRunId = callbackManager?.getParentRunId();\n\n const langChainTracer = callbackManager?.handlers?.find(\n (handler) => handler?.name === \"langchain_tracer\"\n ) as LangChainTracer | undefined;\n\n let runTree;\n if (langChainTracer && parentRunId) {\n runTree = langChainTracer.getRunTreeWithTracingConfig(parentRunId);\n } else if (!avoidCreatingRootRunTree) {\n runTree = new RunTree({\n name: \"<runnable_lambda>\",\n tracingEnabled: false,\n });\n }\n\n if (runTree) {\n runTree.extra = { ...runTree.extra, [LC_CHILD_KEY]: config };\n }\n\n if (\n previousValue !== undefined &&\n previousValue[_CONTEXT_VARIABLES_KEY] !== undefined\n ) {\n if (runTree === undefined) {\n runTree = {};\n }\n (runTree as any)[_CONTEXT_VARIABLES_KEY] =\n previousValue[_CONTEXT_VARIABLES_KEY];\n }\n\n return storage.run(runTree, callback);\n }\n\n initializeGlobalInstance(instance: AsyncLocalStorageInterface) {\n if (getGlobalAsyncLocalStorageInstance() === undefined) {\n setGlobalAsyncLocalStorageInstance(instance);\n }\n }\n}\n\nconst AsyncLocalStorageProviderSingleton = new AsyncLocalStorageProvider();\n\nexport { AsyncLocalStorageProviderSingleton, type AsyncLocalStorageInterface };\n"],"mappings":";;;;AAWA,IAAa,wBAAb,MAAyE;CACvE,WAAgB;CAIhB,IAAO,QAAa,UAAsB;AACxC,SAAO,UAAU;;CAGnB,UAAU,QAAa;;AAKzB,MAAM,wBAAwB,IAAI,uBAAuB;AAEzD,MAAM,eAAe,OAAO,IAAI,kBAAkB;AAElD,IAAM,4BAAN,MAAgC;CAC9B,cAA0C;AACxC,SAAO,oCAAoC,IAAI;;CAGjD,oBAAoB;AAKlB,SAJgB,KAAK,aAAa,CAInB,UAAU,EAAE,QAAQ;;CAGrC,cACE,QACA,UACA,0BACG;EACH,MAAM,kBAAkB,gBAAgB,eACtC,QAAQ,WACR,KAAA,GACA,QAAQ,MACR,KAAA,GACA,QAAQ,SACT;EACD,MAAM,UAAU,KAAK,aAAa;EAClC,MAAM,gBAAgB,QAAQ,UAAU;EACxC,MAAM,cAAc,iBAAiB,gBAAgB;EAErD,MAAM,kBAAkB,iBAAiB,UAAU,MAChD,YAAY,SAAS,SAAS,mBAChC;EAED,IAAI;AACJ,MAAI,mBAAmB,YACrB,WAAU,gBAAgB,4BAA4B,YAAY;WACzD,CAAC,yBACV,WAAU,IAAI,QAAQ;GACpB,MAAM;GACN,gBAAgB;GACjB,CAAC;AAGJ,MAAI,QACF,SAAQ,QAAQ;GAAE,GAAG,QAAQ;IAAQ,eAAe;GAAQ;AAG9D,MACE,kBAAkB,KAAA,KAClB,cAAc,4BAA4B,KAAA,GAC1C;AACA,OAAI,YAAY,KAAA,EACd,WAAU,EAAE;AAEb,WAAgB,0BACf,cAAc;;AAGlB,SAAO,QAAQ,IAAI,SAAS,SAAS;;CAGvC,yBAAyB,UAAsC;AAC7D,MAAI,oCAAoC,KAAK,KAAA,EAC3C,oCAAmC,SAAS;;;AAKlD,MAAM,qCAAqC,IAAI,2BAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"callbacks.cjs","names":["PQueueMod","getGlobalAsyncLocalStorageInstance","getDefaultLangChainClientSingleton"],"sources":["../../src/singletons/callbacks.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport PQueueMod from \"p-queue\";\nimport { getGlobalAsyncLocalStorageInstance } from \"./async_local_storage/globals.js\";\nimport { getDefaultLangChainClientSingleton } from \"./tracer.js\";\n\nlet queue: (typeof import(\"p-queue\"))[\"default\"][\"prototype\"];\n\n/**\n * Creates a queue using the p-queue library. The queue is configured to\n * auto-start and has a concurrency of 1, meaning it will process tasks\n * one at a time.\n */\nfunction createQueue() {\n const PQueue: any = \"default\" in PQueueMod ? PQueueMod.default : PQueueMod;\n return new PQueue({\n autoStart: true,\n concurrency: 1,\n });\n}\n\nexport function getQueue() {\n if (typeof queue === \"undefined\") {\n queue = createQueue();\n }\n return queue;\n}\n\n/**\n * Consume a promise, either adding it to the queue or waiting for it to resolve\n * @param promiseFn Promise to consume\n * @param wait Whether to wait for the promise to resolve or resolve immediately\n */\nexport async function consumeCallback<T>(\n promiseFn: () => Promise<T> | T | void,\n wait: boolean\n): Promise<void> {\n if (wait === true) {\n // Clear config since callbacks are not part of the root run\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n } else {\n queue = getQueue();\n // eslint-disable-next-line no-void\n void queue.add(async () => {\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n });\n }\n}\n\n/**\n * Waits for all promises in the queue to resolve. If the queue is\n * undefined, it immediately resolves a promise.\n */\nexport async function awaitAllCallbacks(): Promise<void> {\n const defaultClient = getDefaultLangChainClientSingleton();\n await Promise.allSettled([\n typeof queue !== \"undefined\" ? queue.onIdle() : Promise.resolve(),\n defaultClient.awaitPendingTraceBatches(),\n ]);\n}\n"],"mappings":";;;;;;AAMA,IAAI;;;;;;AAOJ,SAAS,cAAc;AAErB,QAAO,KADa,aAAaA,QAAAA,UAAYA,QAAAA,QAAU,UAAUA,QAAAA,SAC/C;EAChB,WAAW;EACX,aAAa;EACd,CAAC;;AAGJ,SAAgB,WAAW;AACzB,KAAI,OAAO,UAAU,YACnB,SAAQ,aAAa;AAEvB,QAAO;;;;;;;AAQT,eAAsB,gBACpB,WACA,MACe;AACf,KAAI,SAAS,MAAM;EAGjB,MAAM,4BAA4BC,gBAAAA,oCAAoC;AACtE,MAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;MAEvE,OAAM,WAAW;QAEd;AACL,UAAQ,UAAU;AAEb,QAAM,IAAI,YAAY;GACzB,MAAM,4BAA4BA,gBAAAA,oCAAoC;AACtE,OAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;OAEvE,OAAM,WAAW;IAEnB;;;;;;;AAQN,eAAsB,oBAAmC;CACvD,MAAM,gBAAgBC,eAAAA,oCAAoC;AAC1D,OAAM,QAAQ,WAAW,CACvB,OAAO,UAAU,cAAc,MAAM,QAAQ,GAAG,QAAQ,SAAS,EACjE,cAAc,0BAA0B,CACzC,CAAC"}
1
+ {"version":3,"file":"callbacks.cjs","names":["PQueueMod","getGlobalAsyncLocalStorageInstance","getDefaultLangChainClientSingleton"],"sources":["../../src/singletons/callbacks.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n\nimport PQueueMod from \"p-queue\";\nimport { getGlobalAsyncLocalStorageInstance } from \"./async_local_storage/globals.js\";\nimport { getDefaultLangChainClientSingleton } from \"./tracer.js\";\n\nlet queue: (typeof import(\"p-queue\"))[\"default\"][\"prototype\"];\n\n/**\n * Creates a queue using the p-queue library. The queue is configured to\n * auto-start and has a concurrency of 1, meaning it will process tasks\n * one at a time.\n */\nfunction createQueue() {\n const PQueue: any = \"default\" in PQueueMod ? PQueueMod.default : PQueueMod;\n return new PQueue({\n autoStart: true,\n concurrency: 1,\n });\n}\n\nexport function getQueue() {\n if (typeof queue === \"undefined\") {\n queue = createQueue();\n }\n return queue;\n}\n\n/**\n * Consume a promise, either adding it to the queue or waiting for it to resolve\n * @param promiseFn Promise to consume\n * @param wait Whether to wait for the promise to resolve or resolve immediately\n */\nexport async function consumeCallback<T>(\n promiseFn: () => Promise<T> | T | void,\n wait: boolean\n): Promise<void> {\n if (wait === true) {\n // Clear config since callbacks are not part of the root run\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n } else {\n queue = getQueue();\n // oxlint-disable-next-line no-void\n void queue.add(async () => {\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n });\n }\n}\n\n/**\n * Waits for all promises in the queue to resolve. If the queue is\n * undefined, it immediately resolves a promise.\n */\nexport async function awaitAllCallbacks(): Promise<void> {\n const defaultClient = getDefaultLangChainClientSingleton();\n await Promise.allSettled([\n typeof queue !== \"undefined\" ? queue.onIdle() : Promise.resolve(),\n defaultClient.awaitPendingTraceBatches(),\n ]);\n}\n"],"mappings":";;;;;;AAMA,IAAI;;;;;;AAOJ,SAAS,cAAc;AAErB,QAAO,KADa,aAAaA,QAAAA,UAAYA,QAAAA,QAAU,UAAUA,QAAAA,SAC/C;EAChB,WAAW;EACX,aAAa;EACd,CAAC;;AAGJ,SAAgB,WAAW;AACzB,KAAI,OAAO,UAAU,YACnB,SAAQ,aAAa;AAEvB,QAAO;;;;;;;AAQT,eAAsB,gBACpB,WACA,MACe;AACf,KAAI,SAAS,MAAM;EAGjB,MAAM,4BAA4BC,gBAAAA,oCAAoC;AACtE,MAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;MAEvE,OAAM,WAAW;QAEd;AACL,UAAQ,UAAU;AAEb,QAAM,IAAI,YAAY;GACzB,MAAM,4BAA4BA,gBAAAA,oCAAoC;AACtE,OAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;OAEvE,OAAM,WAAW;IAEnB;;;;;;;AAQN,eAAsB,oBAAmC;CACvD,MAAM,gBAAgBC,eAAAA,oCAAoC;AAC1D,OAAM,QAAQ,WAAW,CACvB,OAAO,UAAU,cAAc,MAAM,QAAQ,GAAG,QAAQ,SAAS,EACjE,cAAc,0BAA0B,CACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"callbacks.d.cts","names":[],"sources":["../../src/singletons/callbacks.ts"],"mappings":";;;;;;iBAiCsB,eAAA,GAAA,CACpB,SAAA,QAAiB,OAAA,CAAQ,CAAA,IAAK,CAAA,SAC9B,IAAA,YACC,OAAA;;;;;iBA4BmB,iBAAA,CAAA,GAAqB,OAAA"}
1
+ {"version":3,"file":"callbacks.d.cts","names":[],"sources":["../../src/singletons/callbacks.ts"],"mappings":";;AAiCA;;;;iBAAsB,eAAA,GAAA,CACpB,SAAA,QAAiB,OAAA,CAAQ,CAAA,IAAK,CAAA,SAC9B,IAAA,YACC,OAAA;;;;;iBA4BmB,iBAAA,CAAA,GAAqB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"callbacks.js","names":[],"sources":["../../src/singletons/callbacks.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport PQueueMod from \"p-queue\";\nimport { getGlobalAsyncLocalStorageInstance } from \"./async_local_storage/globals.js\";\nimport { getDefaultLangChainClientSingleton } from \"./tracer.js\";\n\nlet queue: (typeof import(\"p-queue\"))[\"default\"][\"prototype\"];\n\n/**\n * Creates a queue using the p-queue library. The queue is configured to\n * auto-start and has a concurrency of 1, meaning it will process tasks\n * one at a time.\n */\nfunction createQueue() {\n const PQueue: any = \"default\" in PQueueMod ? PQueueMod.default : PQueueMod;\n return new PQueue({\n autoStart: true,\n concurrency: 1,\n });\n}\n\nexport function getQueue() {\n if (typeof queue === \"undefined\") {\n queue = createQueue();\n }\n return queue;\n}\n\n/**\n * Consume a promise, either adding it to the queue or waiting for it to resolve\n * @param promiseFn Promise to consume\n * @param wait Whether to wait for the promise to resolve or resolve immediately\n */\nexport async function consumeCallback<T>(\n promiseFn: () => Promise<T> | T | void,\n wait: boolean\n): Promise<void> {\n if (wait === true) {\n // Clear config since callbacks are not part of the root run\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n } else {\n queue = getQueue();\n // eslint-disable-next-line no-void\n void queue.add(async () => {\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n });\n }\n}\n\n/**\n * Waits for all promises in the queue to resolve. If the queue is\n * undefined, it immediately resolves a promise.\n */\nexport async function awaitAllCallbacks(): Promise<void> {\n const defaultClient = getDefaultLangChainClientSingleton();\n await Promise.allSettled([\n typeof queue !== \"undefined\" ? queue.onIdle() : Promise.resolve(),\n defaultClient.awaitPendingTraceBatches(),\n ]);\n}\n"],"mappings":";;;;AAMA,IAAI;;;;;;AAOJ,SAAS,cAAc;AAErB,QAAO,KADa,aAAa,YAAY,UAAU,UAAU,WAC/C;EAChB,WAAW;EACX,aAAa;EACd,CAAC;;AAGJ,SAAgB,WAAW;AACzB,KAAI,OAAO,UAAU,YACnB,SAAQ,aAAa;AAEvB,QAAO;;;;;;;AAQT,eAAsB,gBACpB,WACA,MACe;AACf,KAAI,SAAS,MAAM;EAGjB,MAAM,4BAA4B,oCAAoC;AACtE,MAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;MAEvE,OAAM,WAAW;QAEd;AACL,UAAQ,UAAU;AAEb,QAAM,IAAI,YAAY;GACzB,MAAM,4BAA4B,oCAAoC;AACtE,OAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;OAEvE,OAAM,WAAW;IAEnB;;;;;;;AAQN,eAAsB,oBAAmC;CACvD,MAAM,gBAAgB,oCAAoC;AAC1D,OAAM,QAAQ,WAAW,CACvB,OAAO,UAAU,cAAc,MAAM,QAAQ,GAAG,QAAQ,SAAS,EACjE,cAAc,0BAA0B,CACzC,CAAC"}
1
+ {"version":3,"file":"callbacks.js","names":[],"sources":["../../src/singletons/callbacks.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\n\nimport PQueueMod from \"p-queue\";\nimport { getGlobalAsyncLocalStorageInstance } from \"./async_local_storage/globals.js\";\nimport { getDefaultLangChainClientSingleton } from \"./tracer.js\";\n\nlet queue: (typeof import(\"p-queue\"))[\"default\"][\"prototype\"];\n\n/**\n * Creates a queue using the p-queue library. The queue is configured to\n * auto-start and has a concurrency of 1, meaning it will process tasks\n * one at a time.\n */\nfunction createQueue() {\n const PQueue: any = \"default\" in PQueueMod ? PQueueMod.default : PQueueMod;\n return new PQueue({\n autoStart: true,\n concurrency: 1,\n });\n}\n\nexport function getQueue() {\n if (typeof queue === \"undefined\") {\n queue = createQueue();\n }\n return queue;\n}\n\n/**\n * Consume a promise, either adding it to the queue or waiting for it to resolve\n * @param promiseFn Promise to consume\n * @param wait Whether to wait for the promise to resolve or resolve immediately\n */\nexport async function consumeCallback<T>(\n promiseFn: () => Promise<T> | T | void,\n wait: boolean\n): Promise<void> {\n if (wait === true) {\n // Clear config since callbacks are not part of the root run\n // Avoid using global singleton due to circuluar dependency issues\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n } else {\n queue = getQueue();\n // oxlint-disable-next-line no-void\n void queue.add(async () => {\n const asyncLocalStorageInstance = getGlobalAsyncLocalStorageInstance();\n if (asyncLocalStorageInstance !== undefined) {\n await asyncLocalStorageInstance.run(undefined, async () => promiseFn());\n } else {\n await promiseFn();\n }\n });\n }\n}\n\n/**\n * Waits for all promises in the queue to resolve. If the queue is\n * undefined, it immediately resolves a promise.\n */\nexport async function awaitAllCallbacks(): Promise<void> {\n const defaultClient = getDefaultLangChainClientSingleton();\n await Promise.allSettled([\n typeof queue !== \"undefined\" ? queue.onIdle() : Promise.resolve(),\n defaultClient.awaitPendingTraceBatches(),\n ]);\n}\n"],"mappings":";;;;AAMA,IAAI;;;;;;AAOJ,SAAS,cAAc;AAErB,QAAO,KADa,aAAa,YAAY,UAAU,UAAU,WAC/C;EAChB,WAAW;EACX,aAAa;EACd,CAAC;;AAGJ,SAAgB,WAAW;AACzB,KAAI,OAAO,UAAU,YACnB,SAAQ,aAAa;AAEvB,QAAO;;;;;;;AAQT,eAAsB,gBACpB,WACA,MACe;AACf,KAAI,SAAS,MAAM;EAGjB,MAAM,4BAA4B,oCAAoC;AACtE,MAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;MAEvE,OAAM,WAAW;QAEd;AACL,UAAQ,UAAU;AAEb,QAAM,IAAI,YAAY;GACzB,MAAM,4BAA4B,oCAAoC;AACtE,OAAI,8BAA8B,KAAA,EAChC,OAAM,0BAA0B,IAAI,KAAA,GAAW,YAAY,WAAW,CAAC;OAEvE,OAAM,WAAW;IAEnB;;;;;;;AAQN,eAAsB,oBAAmC;CACvD,MAAM,gBAAgB,oCAAoC;AAC1D,OAAM,QAAQ,WAAW,CACvB,OAAO,UAAU,cAAc,MAAM,QAAQ,GAAG,QAAQ,SAAS,EACjE,cAAc,0BAA0B,CACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.cjs","names":["Serializable"],"sources":["../src/stores.ts"],"sourcesContent":["import { Serializable } from \"./load/serializable.js\";\n\n/**\n * Abstract interface for a key-value store.\n */\nexport abstract class BaseStore<K, V> extends Serializable {\n /**\n * Abstract method to get multiple values for a set of keys.\n * @param {K[]} keys - An array of keys.\n * @returns {Promise<(V | undefined)[]>} - A Promise that resolves with array of values or undefined if key not found.\n */\n abstract mget(keys: K[]): Promise<(V | undefined)[]>;\n\n /**\n * Abstract method to set a value for multiple keys.\n * @param {[K, V][]} keyValuePairs - An array of key-value pairs.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mset(keyValuePairs: [K, V][]): Promise<void>;\n\n /**\n * Abstract method to delete multiple keys.\n * @param {K[]} keys - An array of keys to delete.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mdelete(keys: K[]): Promise<void>;\n\n /**\n * Abstract method to yield keys optionally based on a prefix.\n * @param {string} prefix - Optional prefix to filter keys.\n * @returns {AsyncGenerator<K | string>} - An asynchronous generator that yields keys on iteration.\n */\n abstract yieldKeys(prefix?: string): AsyncGenerator<K | string>;\n}\n\n/**\n * In-memory implementation of the BaseStore using a dictionary. Used for\n * storing key-value pairs in memory.\n * @example\n * ```typescript\n * const store = new InMemoryStore<BaseMessage>();\n * await store.mset(\n * Array.from({ length: 5 }).map((_, index) => [\n * `message:id:${index}`,\n * index % 2 === 0\n * ? new AIMessage(\"ai stuff...\")\n * : new HumanMessage(\"human stuff...\"),\n * ]),\n * );\n *\n * const retrievedMessages = await store.mget([\"message:id:0\", \"message:id:1\"]);\n * await store.mdelete(await store.yieldKeys(\"message:id:\").toArray());\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class InMemoryStore<T = any> extends BaseStore<string, T> {\n lc_namespace = [\"langchain\", \"storage\"];\n\n protected store: Record<string, T> = {};\n\n /**\n * Retrieves the values associated with the given keys from the store.\n * @param keys Keys to retrieve values for.\n * @returns Array of values associated with the given keys.\n */\n async mget(keys: string[]) {\n return keys.map((key) => this.store[key]);\n }\n\n /**\n * Sets the values for the given keys in the store.\n * @param keyValuePairs Array of key-value pairs to set in the store.\n * @returns Promise that resolves when all key-value pairs have been set.\n */\n async mset(keyValuePairs: [string, T][]): Promise<void> {\n for (const [key, value] of keyValuePairs) {\n this.store[key] = value;\n }\n }\n\n /**\n * Deletes the given keys and their associated values from the store.\n * @param keys Keys to delete from the store.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n for (const key of keys) {\n delete this.store[key];\n }\n }\n\n /**\n * Asynchronous generator that yields keys from the store. If a prefix is\n * provided, it only yields keys that start with the prefix.\n * @param prefix Optional prefix to filter keys.\n * @returns AsyncGenerator that yields keys from the store.\n */\n async *yieldKeys(prefix?: string | undefined): AsyncGenerator<string> {\n const keys = Object.keys(this.store);\n for (const key of keys) {\n if (prefix === undefined || key.startsWith(prefix)) {\n yield key;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;AAKA,IAAsB,YAAtB,cAA8CA,0BAAAA,aAAa;;;;;;;;;;;;;;;;;;;;AAkD3D,IAAa,gBAAb,cAA4C,UAAqB;CAC/D,eAAe,CAAC,aAAa,UAAU;CAEvC,QAAqC,EAAE;;;;;;CAOvC,MAAM,KAAK,MAAgB;AACzB,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK;;;;;;;CAQ3C,MAAM,KAAK,eAA6C;AACtD,OAAK,MAAM,CAAC,KAAK,UAAU,cACzB,MAAK,MAAM,OAAO;;;;;;;CAStB,MAAM,QAAQ,MAA+B;AAC3C,OAAK,MAAM,OAAO,KAChB,QAAO,KAAK,MAAM;;;;;;;;CAUtB,OAAO,UAAU,QAAqD;EACpE,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM;AACpC,OAAK,MAAM,OAAO,KAChB,KAAI,WAAW,KAAA,KAAa,IAAI,WAAW,OAAO,CAChD,OAAM"}
1
+ {"version":3,"file":"stores.cjs","names":["Serializable"],"sources":["../src/stores.ts"],"sourcesContent":["import { Serializable } from \"./load/serializable.js\";\n\n/**\n * Abstract interface for a key-value store.\n */\nexport abstract class BaseStore<K, V> extends Serializable {\n /**\n * Abstract method to get multiple values for a set of keys.\n * @param {K[]} keys - An array of keys.\n * @returns {Promise<(V | undefined)[]>} - A Promise that resolves with array of values or undefined if key not found.\n */\n abstract mget(keys: K[]): Promise<(V | undefined)[]>;\n\n /**\n * Abstract method to set a value for multiple keys.\n * @param {[K, V][]} keyValuePairs - An array of key-value pairs.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mset(keyValuePairs: [K, V][]): Promise<void>;\n\n /**\n * Abstract method to delete multiple keys.\n * @param {K[]} keys - An array of keys to delete.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mdelete(keys: K[]): Promise<void>;\n\n /**\n * Abstract method to yield keys optionally based on a prefix.\n * @param {string} prefix - Optional prefix to filter keys.\n * @returns {AsyncGenerator<K | string>} - An asynchronous generator that yields keys on iteration.\n */\n abstract yieldKeys(prefix?: string): AsyncGenerator<K | string>;\n}\n\n/**\n * In-memory implementation of the BaseStore using a dictionary. Used for\n * storing key-value pairs in memory.\n * @example\n * ```typescript\n * const store = new InMemoryStore<BaseMessage>();\n * await store.mset(\n * Array.from({ length: 5 }).map((_, index) => [\n * `message:id:${index}`,\n * index % 2 === 0\n * ? new AIMessage(\"ai stuff...\")\n * : new HumanMessage(\"human stuff...\"),\n * ]),\n * );\n *\n * const retrievedMessages = await store.mget([\"message:id:0\", \"message:id:1\"]);\n * await store.mdelete(await store.yieldKeys(\"message:id:\").toArray());\n * ```\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport class InMemoryStore<T = any> extends BaseStore<string, T> {\n lc_namespace = [\"langchain\", \"storage\"];\n\n protected store: Record<string, T> = {};\n\n /**\n * Retrieves the values associated with the given keys from the store.\n * @param keys Keys to retrieve values for.\n * @returns Array of values associated with the given keys.\n */\n async mget(keys: string[]) {\n return keys.map((key) => this.store[key]);\n }\n\n /**\n * Sets the values for the given keys in the store.\n * @param keyValuePairs Array of key-value pairs to set in the store.\n * @returns Promise that resolves when all key-value pairs have been set.\n */\n async mset(keyValuePairs: [string, T][]): Promise<void> {\n for (const [key, value] of keyValuePairs) {\n this.store[key] = value;\n }\n }\n\n /**\n * Deletes the given keys and their associated values from the store.\n * @param keys Keys to delete from the store.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n for (const key of keys) {\n delete this.store[key];\n }\n }\n\n /**\n * Asynchronous generator that yields keys from the store. If a prefix is\n * provided, it only yields keys that start with the prefix.\n * @param prefix Optional prefix to filter keys.\n * @returns AsyncGenerator that yields keys from the store.\n */\n async *yieldKeys(prefix?: string | undefined): AsyncGenerator<string> {\n const keys = Object.keys(this.store);\n for (const key of keys) {\n if (prefix === undefined || key.startsWith(prefix)) {\n yield key;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;;AAKA,IAAsB,YAAtB,cAA8CA,0BAAAA,aAAa;;;;;;;;;;;;;;;;;;;;AAkD3D,IAAa,gBAAb,cAA4C,UAAqB;CAC/D,eAAe,CAAC,aAAa,UAAU;CAEvC,QAAqC,EAAE;;;;;;CAOvC,MAAM,KAAK,MAAgB;AACzB,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK;;;;;;;CAQ3C,MAAM,KAAK,eAA6C;AACtD,OAAK,MAAM,CAAC,KAAK,UAAU,cACzB,MAAK,MAAM,OAAO;;;;;;;CAStB,MAAM,QAAQ,MAA+B;AAC3C,OAAK,MAAM,OAAO,KAChB,QAAO,KAAK,MAAM;;;;;;;;CAUtB,OAAO,UAAU,QAAqD;EACpE,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM;AACpC,OAAK,MAAM,OAAO,KAChB,KAAI,WAAW,KAAA,KAAa,IAAI,WAAW,OAAO,CAChD,OAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","names":[],"sources":["../src/stores.ts"],"sourcesContent":["import { Serializable } from \"./load/serializable.js\";\n\n/**\n * Abstract interface for a key-value store.\n */\nexport abstract class BaseStore<K, V> extends Serializable {\n /**\n * Abstract method to get multiple values for a set of keys.\n * @param {K[]} keys - An array of keys.\n * @returns {Promise<(V | undefined)[]>} - A Promise that resolves with array of values or undefined if key not found.\n */\n abstract mget(keys: K[]): Promise<(V | undefined)[]>;\n\n /**\n * Abstract method to set a value for multiple keys.\n * @param {[K, V][]} keyValuePairs - An array of key-value pairs.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mset(keyValuePairs: [K, V][]): Promise<void>;\n\n /**\n * Abstract method to delete multiple keys.\n * @param {K[]} keys - An array of keys to delete.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mdelete(keys: K[]): Promise<void>;\n\n /**\n * Abstract method to yield keys optionally based on a prefix.\n * @param {string} prefix - Optional prefix to filter keys.\n * @returns {AsyncGenerator<K | string>} - An asynchronous generator that yields keys on iteration.\n */\n abstract yieldKeys(prefix?: string): AsyncGenerator<K | string>;\n}\n\n/**\n * In-memory implementation of the BaseStore using a dictionary. Used for\n * storing key-value pairs in memory.\n * @example\n * ```typescript\n * const store = new InMemoryStore<BaseMessage>();\n * await store.mset(\n * Array.from({ length: 5 }).map((_, index) => [\n * `message:id:${index}`,\n * index % 2 === 0\n * ? new AIMessage(\"ai stuff...\")\n * : new HumanMessage(\"human stuff...\"),\n * ]),\n * );\n *\n * const retrievedMessages = await store.mget([\"message:id:0\", \"message:id:1\"]);\n * await store.mdelete(await store.yieldKeys(\"message:id:\").toArray());\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class InMemoryStore<T = any> extends BaseStore<string, T> {\n lc_namespace = [\"langchain\", \"storage\"];\n\n protected store: Record<string, T> = {};\n\n /**\n * Retrieves the values associated with the given keys from the store.\n * @param keys Keys to retrieve values for.\n * @returns Array of values associated with the given keys.\n */\n async mget(keys: string[]) {\n return keys.map((key) => this.store[key]);\n }\n\n /**\n * Sets the values for the given keys in the store.\n * @param keyValuePairs Array of key-value pairs to set in the store.\n * @returns Promise that resolves when all key-value pairs have been set.\n */\n async mset(keyValuePairs: [string, T][]): Promise<void> {\n for (const [key, value] of keyValuePairs) {\n this.store[key] = value;\n }\n }\n\n /**\n * Deletes the given keys and their associated values from the store.\n * @param keys Keys to delete from the store.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n for (const key of keys) {\n delete this.store[key];\n }\n }\n\n /**\n * Asynchronous generator that yields keys from the store. If a prefix is\n * provided, it only yields keys that start with the prefix.\n * @param prefix Optional prefix to filter keys.\n * @returns AsyncGenerator that yields keys from the store.\n */\n async *yieldKeys(prefix?: string | undefined): AsyncGenerator<string> {\n const keys = Object.keys(this.store);\n for (const key of keys) {\n if (prefix === undefined || key.startsWith(prefix)) {\n yield key;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAKA,IAAsB,YAAtB,cAA8C,aAAa;;;;;;;;;;;;;;;;;;;;AAkD3D,IAAa,gBAAb,cAA4C,UAAqB;CAC/D,eAAe,CAAC,aAAa,UAAU;CAEvC,QAAqC,EAAE;;;;;;CAOvC,MAAM,KAAK,MAAgB;AACzB,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK;;;;;;;CAQ3C,MAAM,KAAK,eAA6C;AACtD,OAAK,MAAM,CAAC,KAAK,UAAU,cACzB,MAAK,MAAM,OAAO;;;;;;;CAStB,MAAM,QAAQ,MAA+B;AAC3C,OAAK,MAAM,OAAO,KAChB,QAAO,KAAK,MAAM;;;;;;;;CAUtB,OAAO,UAAU,QAAqD;EACpE,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM;AACpC,OAAK,MAAM,OAAO,KAChB,KAAI,WAAW,KAAA,KAAa,IAAI,WAAW,OAAO,CAChD,OAAM"}
1
+ {"version":3,"file":"stores.js","names":[],"sources":["../src/stores.ts"],"sourcesContent":["import { Serializable } from \"./load/serializable.js\";\n\n/**\n * Abstract interface for a key-value store.\n */\nexport abstract class BaseStore<K, V> extends Serializable {\n /**\n * Abstract method to get multiple values for a set of keys.\n * @param {K[]} keys - An array of keys.\n * @returns {Promise<(V | undefined)[]>} - A Promise that resolves with array of values or undefined if key not found.\n */\n abstract mget(keys: K[]): Promise<(V | undefined)[]>;\n\n /**\n * Abstract method to set a value for multiple keys.\n * @param {[K, V][]} keyValuePairs - An array of key-value pairs.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mset(keyValuePairs: [K, V][]): Promise<void>;\n\n /**\n * Abstract method to delete multiple keys.\n * @param {K[]} keys - An array of keys to delete.\n * @returns {Promise<void>} - A Promise that resolves when the operation is complete.\n */\n abstract mdelete(keys: K[]): Promise<void>;\n\n /**\n * Abstract method to yield keys optionally based on a prefix.\n * @param {string} prefix - Optional prefix to filter keys.\n * @returns {AsyncGenerator<K | string>} - An asynchronous generator that yields keys on iteration.\n */\n abstract yieldKeys(prefix?: string): AsyncGenerator<K | string>;\n}\n\n/**\n * In-memory implementation of the BaseStore using a dictionary. Used for\n * storing key-value pairs in memory.\n * @example\n * ```typescript\n * const store = new InMemoryStore<BaseMessage>();\n * await store.mset(\n * Array.from({ length: 5 }).map((_, index) => [\n * `message:id:${index}`,\n * index % 2 === 0\n * ? new AIMessage(\"ai stuff...\")\n * : new HumanMessage(\"human stuff...\"),\n * ]),\n * );\n *\n * const retrievedMessages = await store.mget([\"message:id:0\", \"message:id:1\"]);\n * await store.mdelete(await store.yieldKeys(\"message:id:\").toArray());\n * ```\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport class InMemoryStore<T = any> extends BaseStore<string, T> {\n lc_namespace = [\"langchain\", \"storage\"];\n\n protected store: Record<string, T> = {};\n\n /**\n * Retrieves the values associated with the given keys from the store.\n * @param keys Keys to retrieve values for.\n * @returns Array of values associated with the given keys.\n */\n async mget(keys: string[]) {\n return keys.map((key) => this.store[key]);\n }\n\n /**\n * Sets the values for the given keys in the store.\n * @param keyValuePairs Array of key-value pairs to set in the store.\n * @returns Promise that resolves when all key-value pairs have been set.\n */\n async mset(keyValuePairs: [string, T][]): Promise<void> {\n for (const [key, value] of keyValuePairs) {\n this.store[key] = value;\n }\n }\n\n /**\n * Deletes the given keys and their associated values from the store.\n * @param keys Keys to delete from the store.\n * @returns Promise that resolves when all keys have been deleted.\n */\n async mdelete(keys: string[]): Promise<void> {\n for (const key of keys) {\n delete this.store[key];\n }\n }\n\n /**\n * Asynchronous generator that yields keys from the store. If a prefix is\n * provided, it only yields keys that start with the prefix.\n * @param prefix Optional prefix to filter keys.\n * @returns AsyncGenerator that yields keys from the store.\n */\n async *yieldKeys(prefix?: string | undefined): AsyncGenerator<string> {\n const keys = Object.keys(this.store);\n for (const key of keys) {\n if (prefix === undefined || key.startsWith(prefix)) {\n yield key;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAKA,IAAsB,YAAtB,cAA8C,aAAa;;;;;;;;;;;;;;;;;;;;AAkD3D,IAAa,gBAAb,cAA4C,UAAqB;CAC/D,eAAe,CAAC,aAAa,UAAU;CAEvC,QAAqC,EAAE;;;;;;CAOvC,MAAM,KAAK,MAAgB;AACzB,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,KAAK;;;;;;;CAQ3C,MAAM,KAAK,eAA6C;AACtD,OAAK,MAAM,CAAC,KAAK,UAAU,cACzB,MAAK,MAAM,OAAO;;;;;;;CAStB,MAAM,QAAQ,MAA+B;AAC3C,OAAK,MAAM,OAAO,KAChB,QAAO,KAAK,MAAM;;;;;;;;CAUtB,OAAO,UAAU,QAAqD;EACpE,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM;AACpC,OAAK,MAAM,OAAO,KAChB,KAAI,WAAW,KAAA,KAAa,IAAI,WAAW,OAAO,CAChD,OAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"ir.d.cts","names":[],"sources":["../../src/structured_query/ir.ts"],"mappings":";;;;;AAKA;KAAY,GAAA;;;;KAIA,EAAA;;;;KAIA,GAAA;AAAZ;;;AAAA,KAKY,QAAA,GAAW,GAAA,GAAM,EAAA,GAAK,GAAA;;AAAlC;;KAKY,EAAA;;;;KAIA,EAAA;;;;KAIA,EAAA;;;AARZ;KAYY,EAAA;;;;KAIA,GAAA;;;;KAIA,GAAA;AAZZ;;;;AAAA,KAkBY,UAAA,GAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cAEtC,SAAA;EAAA,CAAc,GAAA,WAAc,QAAA;AAAA;AAAA,cAM5B,WAAA;EAAA,CAAgB,GAAA,WAAc,UAAA;AAAA;;;;;KAa/B,aAAA,GAAgB,sBAAA,GAAyB,uBAAA;;;;KAKzC,sBAAA;EAAA,CACT,QAAA,WAAmB,aAAA;AAAA;;;;KAMV,uBAAA;EAAA,CACT,IAAA;IAAA,CACE,UAAA;EAAA;AAAA;;;;KAOO,4BAAA;EACV,MAAA,GAAS,uBAAA,GAA0B,sBAAA;AAAA;;;;AAzCrC;uBAgDsB,OAAA,WAAkB,WAAA,GAAc,WAAA;EAC5C,oBAAA;EAEA,qBAAA;EAEA,0BAAA;IAA8B,MAAA,GAAS,CAAA;EAAA;EAAA,SAEtC,gBAAA,EAAkB,QAAA;EAAA,SAElB,kBAAA,EAAoB,UAAA;EAAA,SAEpB,cAAA,CAAe,SAAA,EAAW,SAAA;EAAA,SAE1B,eAAA,CACP,UAAA,EAAY,UAAA;EAAA,SAGL,oBAAA,CACP,eAAA,EAAiB,eAAA;AAAA;;;AA1CrB;;uBAkDsB,UAAA;EAAA,SACX,QAAA;EAET,MAAA,CAAO,OAAA,EAAS,OAAA;AAAA;;;;;uBAiBI,eAAA,SAAwB,UAAA;;;;;cAMjC,UAAA,uCAAiD,eAAA;EAInD,UAAA,EAAY,UAAA;EACZ,SAAA;EACA,KAAA,EAAO,UAAA;EALhB,QAAA;EAEA,WAAA,CACS,UAAA,EAAY,UAAA,EACZ,SAAA,UACA,KAAA,EAAO,UAAA;AAAA;;;;;cAUL,SAAA,SAAkB,eAAA;EAIpB,QAAA,EAAU,QAAA;EACV,IAAA,GAAK,eAAA;EAJd,QAAA;EAEA,WAAA,CACS,QAAA,EAAU,QAAA,EACV,IAAA,GAAK,eAAA;AAAA;;;;;cAUH,eAAA,SAAwB,UAAA;EAI1B,KAAA;EACA,MAAA,GAAO,eAAA;EAJhB,QAAA;EAEA,WAAA,CACS,KAAA,UACA,MAAA,GAAO,eAAA;AAAA"}
1
+ {"version":3,"file":"ir.d.cts","names":[],"sources":["../../src/structured_query/ir.ts"],"mappings":";;;;;AAKA;KAAY,GAAA;;;;KAIA,EAAA;;;;KAIA,GAAA;AAAZ;;;AAAA,KAKY,QAAA,GAAW,GAAA,GAAM,EAAA,GAAK,GAAA;;AAAlC;;KAKY,EAAA;;;;KAIA,EAAA;;;;KAIA,EAAA;;;AARZ;KAYY,EAAA;;;;KAIA,GAAA;;;;KAIA,GAAA;AAZZ;;;;AAAA,KAkBY,UAAA,GAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cAEtC,SAAA;EAAA,CAAc,GAAA,WAAc,QAAA;AAAA;AAAA,cAM5B,WAAA;EAAA,CAAgB,GAAA,WAAc,UAAA;AAAA;;;;;KAa/B,aAAA,GAAgB,sBAAA,GAAyB,uBAAA;;;;KAKzC,sBAAA;EAAA,CACT,QAAA,WAAmB,aAAA;AAAA;;;;KAMV,uBAAA;EAAA,CACT,IAAA;IAAA,CACE,UAAA;EAAA;AAAA;;;;KAOO,4BAAA;EACV,MAAA,GAAS,uBAAA,GAA0B,sBAAA;AAAA;;;;AAzCrC;uBAgDsB,OAAA,WAAkB,WAAA,GAAc,WAAA;EAC5C,oBAAA;EAEA,qBAAA;EAEA,0BAAA;IAA8B,MAAA,GAAS,CAAA;EAAA;EAAA,SAEtC,gBAAA,EAAkB,QAAA;EAAA,SAElB,kBAAA,EAAoB,UAAA;EAAA,SAEpB,cAAA,CAAe,SAAA,EAAW,SAAA;EAAA,SAE1B,eAAA,CACP,UAAA,EAAY,UAAA;EAAA,SAGL,oBAAA,CACP,eAAA,EAAiB,eAAA;AAAA;;;AA1CrB;;uBAkDsB,UAAA;EAAA,SACX,QAAA;EAET,MAAA,CAAO,OAAA,EAAS,OAAA;AAAA;;;;;uBAiBI,eAAA,SAAwB,UAAA;;;;;cAMjC,UAAA,uCAAiD,eAAA;EAInD,UAAA,EAAY,UAAA;EACZ,SAAA;EACA,KAAA,EAAO,UAAA;EALhB,QAAA;EAEA,WAAA,CACS,UAAA,EAAY,UAAA,EACZ,SAAA,UACA,KAAA,EAAO,UAAA;AAAA;;;;;cAUL,SAAA,SAAkB,eAAA;EAIpB,QAAA,EAAU,QAAA;EACV,IAAA,GAAO,eAAA;EAJhB,QAAA;EAEA,WAAA,CACS,QAAA,EAAU,QAAA,EACV,IAAA,GAAO,eAAA;AAAA;;;;;cAUL,eAAA,SAAwB,UAAA;EAI1B,KAAA;EACA,MAAA,GAAS,eAAA;EAJlB,QAAA;EAEA,WAAA,CACS,KAAA,UACA,MAAA,GAAS,eAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ir.d.ts","names":[],"sources":["../../src/structured_query/ir.ts"],"mappings":";;;;;AAKA;KAAY,GAAA;;;;KAIA,EAAA;;;;KAIA,GAAA;AAAZ;;;AAAA,KAKY,QAAA,GAAW,GAAA,GAAM,EAAA,GAAK,GAAA;;AAAlC;;KAKY,EAAA;;;;KAIA,EAAA;;;;KAIA,EAAA;;;AARZ;KAYY,EAAA;;;;KAIA,GAAA;;;;KAIA,GAAA;AAZZ;;;;AAAA,KAkBY,UAAA,GAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cAEtC,SAAA;EAAA,CAAc,GAAA,WAAc,QAAA;AAAA;AAAA,cAM5B,WAAA;EAAA,CAAgB,GAAA,WAAc,UAAA;AAAA;;;;;KAa/B,aAAA,GAAgB,sBAAA,GAAyB,uBAAA;;;;KAKzC,sBAAA;EAAA,CACT,QAAA,WAAmB,aAAA;AAAA;;;;KAMV,uBAAA;EAAA,CACT,IAAA;IAAA,CACE,UAAA;EAAA;AAAA;;;;KAOO,4BAAA;EACV,MAAA,GAAS,uBAAA,GAA0B,sBAAA;AAAA;;;;AAzCrC;uBAgDsB,OAAA,WAAkB,WAAA,GAAc,WAAA;EAC5C,oBAAA;EAEA,qBAAA;EAEA,0BAAA;IAA8B,MAAA,GAAS,CAAA;EAAA;EAAA,SAEtC,gBAAA,EAAkB,QAAA;EAAA,SAElB,kBAAA,EAAoB,UAAA;EAAA,SAEpB,cAAA,CAAe,SAAA,EAAW,SAAA;EAAA,SAE1B,eAAA,CACP,UAAA,EAAY,UAAA;EAAA,SAGL,oBAAA,CACP,eAAA,EAAiB,eAAA;AAAA;;;AA1CrB;;uBAkDsB,UAAA;EAAA,SACX,QAAA;EAET,MAAA,CAAO,OAAA,EAAS,OAAA;AAAA;;;;;uBAiBI,eAAA,SAAwB,UAAA;;;;;cAMjC,UAAA,uCAAiD,eAAA;EAInD,UAAA,EAAY,UAAA;EACZ,SAAA;EACA,KAAA,EAAO,UAAA;EALhB,QAAA;EAEA,WAAA,CACS,UAAA,EAAY,UAAA,EACZ,SAAA,UACA,KAAA,EAAO,UAAA;AAAA;;;;;cAUL,SAAA,SAAkB,eAAA;EAIpB,QAAA,EAAU,QAAA;EACV,IAAA,GAAK,eAAA;EAJd,QAAA;EAEA,WAAA,CACS,QAAA,EAAU,QAAA,EACV,IAAA,GAAK,eAAA;AAAA;;;;;cAUH,eAAA,SAAwB,UAAA;EAI1B,KAAA;EACA,MAAA,GAAO,eAAA;EAJhB,QAAA;EAEA,WAAA,CACS,KAAA,UACA,MAAA,GAAO,eAAA;AAAA"}
1
+ {"version":3,"file":"ir.d.ts","names":[],"sources":["../../src/structured_query/ir.ts"],"mappings":";;;;;AAKA;KAAY,GAAA;;;;KAIA,EAAA;;;;KAIA,GAAA;AAAZ;;;AAAA,KAKY,QAAA,GAAW,GAAA,GAAM,EAAA,GAAK,GAAA;;AAAlC;;KAKY,EAAA;;;;KAIA,EAAA;;;;KAIA,EAAA;;;AARZ;KAYY,EAAA;;;;KAIA,GAAA;;;;KAIA,GAAA;AAZZ;;;;AAAA,KAkBY,UAAA,GAAa,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cAEtC,SAAA;EAAA,CAAc,GAAA,WAAc,QAAA;AAAA;AAAA,cAM5B,WAAA;EAAA,CAAgB,GAAA,WAAc,UAAA;AAAA;;;;;KAa/B,aAAA,GAAgB,sBAAA,GAAyB,uBAAA;;;;KAKzC,sBAAA;EAAA,CACT,QAAA,WAAmB,aAAA;AAAA;;;;KAMV,uBAAA;EAAA,CACT,IAAA;IAAA,CACE,UAAA;EAAA;AAAA;;;;KAOO,4BAAA;EACV,MAAA,GAAS,uBAAA,GAA0B,sBAAA;AAAA;;;;AAzCrC;uBAgDsB,OAAA,WAAkB,WAAA,GAAc,WAAA;EAC5C,oBAAA;EAEA,qBAAA;EAEA,0BAAA;IAA8B,MAAA,GAAS,CAAA;EAAA;EAAA,SAEtC,gBAAA,EAAkB,QAAA;EAAA,SAElB,kBAAA,EAAoB,UAAA;EAAA,SAEpB,cAAA,CAAe,SAAA,EAAW,SAAA;EAAA,SAE1B,eAAA,CACP,UAAA,EAAY,UAAA;EAAA,SAGL,oBAAA,CACP,eAAA,EAAiB,eAAA;AAAA;;;AA1CrB;;uBAkDsB,UAAA;EAAA,SACX,QAAA;EAET,MAAA,CAAO,OAAA,EAAS,OAAA;AAAA;;;;;uBAiBI,eAAA,SAAwB,UAAA;;;;;cAMjC,UAAA,uCAAiD,eAAA;EAInD,UAAA,EAAY,UAAA;EACZ,SAAA;EACA,KAAA,EAAO,UAAA;EALhB,QAAA;EAEA,WAAA,CACS,UAAA,EAAY,UAAA,EACZ,SAAA,UACA,KAAA,EAAO,UAAA;AAAA;;;;;cAUL,SAAA,SAAkB,eAAA;EAIpB,QAAA,EAAU,QAAA;EACV,IAAA,GAAO,eAAA;EAJhB,QAAA;EAEA,WAAA,CACS,QAAA,EAAU,QAAA,EACV,IAAA,GAAO,eAAA;AAAA;;;;;cAUL,eAAA,SAAwB,UAAA;EAI1B,KAAA;EACA,MAAA,GAAS,eAAA;EAJlB,QAAA;EAEA,WAAA,CACS,KAAA,UACA,MAAA,GAAS,eAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":[],"sources":["../../src/structured_query/utils.ts"],"sourcesContent":["/**\n * Checks if the provided argument is an object and not an array.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isObject(obj: any): obj is object {\n return obj && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * Checks if a provided filter is empty. The filter can be a function, an\n * object, a string, or undefined.\n */\nexport function isFilterEmpty(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filter: ((q: any) => any) | object | string | undefined\n): filter is undefined {\n if (!filter) return true;\n // for Milvus\n if (typeof filter === \"string\" && filter.length > 0) {\n return false;\n }\n if (typeof filter === \"function\") {\n return false;\n }\n return isObject(filter) && Object.keys(filter).length === 0;\n}\n\n/**\n * Checks if the provided value is an integer.\n */\nexport function isInt(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 === 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseInt(value, 10);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 === 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a floating-point number.\n */\nexport function isFloat(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 !== 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseFloat(value);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 !== 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a string that cannot be parsed into a\n * number.\n */\nexport function isString(value: unknown): boolean {\n return (\n typeof value === \"string\" &&\n (Number.isNaN(parseFloat(value)) || parseFloat(value).toString() !== value)\n );\n}\n\n/**\n * Checks if the provided value is a boolean.\n */\nexport function isBoolean(value: unknown): boolean {\n return typeof value === \"boolean\";\n}\n\n/**\n * Casts a value that might be string or number to actual string or number.\n * Since LLM might return back an integer/float as a string, we need to cast\n * it back to a number, as many vector databases can't handle number as string\n * values as a comparator.\n */\nexport function castValue(input: unknown): string | number | boolean {\n let value;\n if (isString(input)) {\n value = input as string;\n } else if (isInt(input)) {\n value = parseInt(input as string, 10);\n } else if (isFloat(input)) {\n value = parseFloat(input as string);\n } else if (isBoolean(input)) {\n value = Boolean(input);\n } else {\n throw new Error(\"Unsupported value type\");\n }\n\n return value;\n}\n"],"mappings":";;;;AAIA,SAAgB,SAAS,KAAyB;AAChD,QAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI;;;;;;AAO9D,SAAgB,cAEd,QACqB;AACrB,KAAI,CAAC,OAAQ,QAAO;AAEpB,KAAI,OAAO,WAAW,YAAY,OAAO,SAAS,EAChD,QAAO;AAET,KAAI,OAAO,WAAW,WACpB,QAAO;AAET,QAAO,SAAS,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW;;;;;AAM5D,SAAgB,MAAM,OAAyB;AAC7C,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,MAAM;UACZ,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,SAAS,OAAO,GAAG;AACvC,SACE,CAAC,OAAO,MAAM,YAAY,IAC1B,cAAc,MAAM,KACpB,YAAY,UAAU,KAAK;;AAI/B,QAAO;;;;;AAMT,SAAgB,QAAQ,OAAyB;AAC/C,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,MAAM;UACZ,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,WAAW,MAAM;AACrC,SACE,CAAC,OAAO,MAAM,YAAY,IAC1B,cAAc,MAAM,KACpB,YAAY,UAAU,KAAK;;AAI/B,QAAO;;;;;;AAOT,SAAgB,SAAS,OAAyB;AAChD,QACE,OAAO,UAAU,aAChB,OAAO,MAAM,WAAW,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,UAAU,KAAK;;;;;AAOzE,SAAgB,UAAU,OAAyB;AACjD,QAAO,OAAO,UAAU;;;;;;;;AAS1B,SAAgB,UAAU,OAA2C;CACnE,IAAI;AACJ,KAAI,SAAS,MAAM,CACjB,SAAQ;UACC,MAAM,MAAM,CACrB,SAAQ,SAAS,OAAiB,GAAG;UAC5B,QAAQ,MAAM,CACvB,SAAQ,WAAW,MAAgB;UAC1B,UAAU,MAAM,CACzB,SAAQ,QAAQ,MAAM;KAEtB,OAAM,IAAI,MAAM,yBAAyB;AAG3C,QAAO"}
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../../src/structured_query/utils.ts"],"sourcesContent":["/**\n * Checks if the provided argument is an object and not an array.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isObject(obj: any): obj is object {\n return obj && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * Checks if a provided filter is empty. The filter can be a function, an\n * object, a string, or undefined.\n */\nexport function isFilterEmpty(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n filter: ((q: any) => any) | object | string | undefined\n): filter is undefined {\n if (!filter) return true;\n // for Milvus\n if (typeof filter === \"string\" && filter.length > 0) {\n return false;\n }\n if (typeof filter === \"function\") {\n return false;\n }\n return isObject(filter) && Object.keys(filter).length === 0;\n}\n\n/**\n * Checks if the provided value is an integer.\n */\nexport function isInt(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 === 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseInt(value, 10);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 === 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a floating-point number.\n */\nexport function isFloat(value: unknown): boolean {\n if (typeof value === \"number\") {\n return value % 1 !== 0;\n } else if (typeof value === \"string\") {\n const numberValue = parseFloat(value);\n return (\n !Number.isNaN(numberValue) &&\n numberValue % 1 !== 0 &&\n numberValue.toString() === value\n );\n }\n\n return false;\n}\n\n/**\n * Checks if the provided value is a string that cannot be parsed into a\n * number.\n */\nexport function isString(value: unknown): boolean {\n return (\n typeof value === \"string\" &&\n (Number.isNaN(parseFloat(value)) || parseFloat(value).toString() !== value)\n );\n}\n\n/**\n * Checks if the provided value is a boolean.\n */\nexport function isBoolean(value: unknown): boolean {\n return typeof value === \"boolean\";\n}\n\n/**\n * Casts a value that might be string or number to actual string or number.\n * Since LLM might return back an integer/float as a string, we need to cast\n * it back to a number, as many vector databases can't handle number as string\n * values as a comparator.\n */\nexport function castValue(input: unknown): string | number | boolean {\n let value;\n if (isString(input)) {\n value = input as string;\n } else if (isInt(input)) {\n value = parseInt(input as string, 10);\n } else if (isFloat(input)) {\n value = parseFloat(input as string);\n } else if (isBoolean(input)) {\n value = Boolean(input);\n } else {\n throw new Error(\"Unsupported value type\");\n }\n\n return value;\n}\n"],"mappings":";;;;AAIA,SAAgB,SAAS,KAAyB;AAChD,QAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI;;;;;;AAO9D,SAAgB,cAEd,QACqB;AACrB,KAAI,CAAC,OAAQ,QAAO;AAEpB,KAAI,OAAO,WAAW,YAAY,OAAO,SAAS,EAChD,QAAO;AAET,KAAI,OAAO,WAAW,WACpB,QAAO;AAET,QAAO,SAAS,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,WAAW;;;;;AAM5D,SAAgB,MAAM,OAAyB;AAC7C,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,MAAM;UACZ,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,SAAS,OAAO,GAAG;AACvC,SACE,CAAC,OAAO,MAAM,YAAY,IAC1B,cAAc,MAAM,KACpB,YAAY,UAAU,KAAK;;AAI/B,QAAO;;;;;AAMT,SAAgB,QAAQ,OAAyB;AAC/C,KAAI,OAAO,UAAU,SACnB,QAAO,QAAQ,MAAM;UACZ,OAAO,UAAU,UAAU;EACpC,MAAM,cAAc,WAAW,MAAM;AACrC,SACE,CAAC,OAAO,MAAM,YAAY,IAC1B,cAAc,MAAM,KACpB,YAAY,UAAU,KAAK;;AAI/B,QAAO;;;;;;AAOT,SAAgB,SAAS,OAAyB;AAChD,QACE,OAAO,UAAU,aAChB,OAAO,MAAM,WAAW,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,UAAU,KAAK;;;;;AAOzE,SAAgB,UAAU,OAAyB;AACjD,QAAO,OAAO,UAAU;;;;;;;;AAS1B,SAAgB,UAAU,OAA2C;CACnE,IAAI;AACJ,KAAI,SAAS,MAAM,CACjB,SAAQ;UACC,MAAM,MAAM,CACrB,SAAQ,SAAS,OAAiB,GAAG;UAC5B,QAAQ,MAAM,CACvB,SAAQ,WAAW,MAAgB;UAC1B,UAAU,MAAM,CACzB,SAAQ,QAAQ,MAAM;KAEtB,OAAM,IAAI,MAAM,yBAAyB;AAG3C,QAAO"}