@langchain/core 1.1.32 → 1.1.33-dev-1773698445534

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 (1187) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +12 -22
  2. package/dist/_virtual/_rolldown/runtime.js +6 -11
  3. package/dist/agents.cjs +8 -10
  4. package/dist/agents.js +1 -2
  5. package/dist/caches/index.cjs +11 -12
  6. package/dist/caches/index.cjs.map +1 -1
  7. package/dist/caches/index.js +1 -2
  8. package/dist/caches/index.js.map +1 -1
  9. package/dist/callbacks/base.cjs +10 -11
  10. package/dist/callbacks/base.cjs.map +1 -1
  11. package/dist/callbacks/base.js +1 -2
  12. package/dist/callbacks/base.js.map +1 -1
  13. package/dist/callbacks/dispatch/index.cjs +7 -8
  14. package/dist/callbacks/dispatch/index.cjs.map +1 -1
  15. package/dist/callbacks/dispatch/index.d.ts +0 -2
  16. package/dist/callbacks/dispatch/index.d.ts.map +1 -1
  17. package/dist/callbacks/dispatch/index.js +1 -2
  18. package/dist/callbacks/dispatch/index.js.map +1 -1
  19. package/dist/callbacks/dispatch/web.cjs +3 -4
  20. package/dist/callbacks/dispatch/web.cjs.map +1 -1
  21. package/dist/callbacks/dispatch/web.d.ts +0 -2
  22. package/dist/callbacks/dispatch/web.d.ts.map +1 -1
  23. package/dist/callbacks/dispatch/web.js +1 -2
  24. package/dist/callbacks/dispatch/web.js.map +1 -1
  25. package/dist/callbacks/manager.cjs +18 -19
  26. package/dist/callbacks/manager.cjs.map +1 -1
  27. package/dist/callbacks/manager.js +1 -2
  28. package/dist/callbacks/manager.js.map +1 -1
  29. package/dist/callbacks/promises.cjs +9 -10
  30. package/dist/callbacks/promises.js +1 -2
  31. package/dist/chat_history.cjs +12 -13
  32. package/dist/chat_history.cjs.map +1 -1
  33. package/dist/chat_history.d.ts +0 -2
  34. package/dist/chat_history.d.ts.map +1 -1
  35. package/dist/chat_history.js +1 -2
  36. package/dist/chat_history.js.map +1 -1
  37. package/dist/context.cjs +6 -7
  38. package/dist/context.cjs.map +1 -1
  39. package/dist/context.js +1 -2
  40. package/dist/context.js.map +1 -1
  41. package/dist/document_loaders/base.cjs +8 -10
  42. package/dist/document_loaders/base.cjs.map +1 -1
  43. package/dist/document_loaders/base.js +1 -2
  44. package/dist/document_loaders/base.js.map +1 -1
  45. package/dist/document_loaders/langsmith.cjs +9 -10
  46. package/dist/document_loaders/langsmith.cjs.map +1 -1
  47. package/dist/document_loaders/langsmith.js +1 -2
  48. package/dist/document_loaders/langsmith.js.map +1 -1
  49. package/dist/documents/document.cjs +1 -2
  50. package/dist/documents/document.cjs.map +1 -1
  51. package/dist/documents/document.js +1 -1
  52. package/dist/documents/document.js.map +1 -1
  53. package/dist/documents/index.cjs +10 -11
  54. package/dist/documents/index.js +1 -2
  55. package/dist/documents/transformers.cjs +2 -3
  56. package/dist/documents/transformers.cjs.map +1 -1
  57. package/dist/documents/transformers.js +1 -2
  58. package/dist/documents/transformers.js.map +1 -1
  59. package/dist/embeddings.cjs +9 -10
  60. package/dist/embeddings.cjs.map +1 -1
  61. package/dist/embeddings.js +1 -2
  62. package/dist/embeddings.js.map +1 -1
  63. package/dist/errors/index.cjs +9 -10
  64. package/dist/errors/index.cjs.map +1 -1
  65. package/dist/errors/index.js +1 -2
  66. package/dist/errors/index.js.map +1 -1
  67. package/dist/example_selectors/base.cjs +2 -3
  68. package/dist/example_selectors/base.cjs.map +1 -1
  69. package/dist/example_selectors/base.js +1 -2
  70. package/dist/example_selectors/base.js.map +1 -1
  71. package/dist/example_selectors/conditional.cjs +1 -2
  72. package/dist/example_selectors/conditional.cjs.map +1 -1
  73. package/dist/example_selectors/conditional.js +1 -1
  74. package/dist/example_selectors/index.cjs +12 -13
  75. package/dist/example_selectors/index.js +1 -2
  76. package/dist/example_selectors/length_based.cjs +2 -3
  77. package/dist/example_selectors/length_based.cjs.map +1 -1
  78. package/dist/example_selectors/length_based.js +1 -2
  79. package/dist/example_selectors/length_based.js.map +1 -1
  80. package/dist/example_selectors/semantic_similarity.cjs +3 -4
  81. package/dist/example_selectors/semantic_similarity.cjs.map +1 -1
  82. package/dist/example_selectors/semantic_similarity.js +1 -2
  83. package/dist/example_selectors/semantic_similarity.js.map +1 -1
  84. package/dist/index.cjs +8 -10
  85. package/dist/index.js +1 -2
  86. package/dist/indexing/base.cjs +6 -7
  87. package/dist/indexing/base.cjs.map +1 -1
  88. package/dist/indexing/base.js +1 -2
  89. package/dist/indexing/base.js.map +1 -1
  90. package/dist/indexing/index.cjs +10 -11
  91. package/dist/indexing/index.js +1 -2
  92. package/dist/indexing/record_manager.cjs +2 -3
  93. package/dist/indexing/record_manager.cjs.map +1 -1
  94. package/dist/indexing/record_manager.js +1 -2
  95. package/dist/indexing/record_manager.js.map +1 -1
  96. package/dist/language_models/base.cjs +15 -16
  97. package/dist/language_models/base.cjs.map +1 -1
  98. package/dist/language_models/base.d.ts +0 -2
  99. package/dist/language_models/base.d.ts.map +1 -1
  100. package/dist/language_models/base.js +2 -3
  101. package/dist/language_models/base.js.map +1 -1
  102. package/dist/language_models/chat_models.cjs +26 -27
  103. package/dist/language_models/chat_models.cjs.map +1 -1
  104. package/dist/language_models/chat_models.d.ts +0 -3
  105. package/dist/language_models/chat_models.d.ts.map +1 -1
  106. package/dist/language_models/chat_models.js +1 -2
  107. package/dist/language_models/chat_models.js.map +1 -1
  108. package/dist/language_models/llms.cjs +13 -14
  109. package/dist/language_models/llms.cjs.map +1 -1
  110. package/dist/language_models/llms.d.ts +0 -1
  111. package/dist/language_models/llms.d.ts.map +1 -1
  112. package/dist/language_models/llms.js +1 -2
  113. package/dist/language_models/llms.js.map +1 -1
  114. package/dist/language_models/profile.cjs +8 -10
  115. package/dist/language_models/profile.js +1 -2
  116. package/dist/language_models/structured_output.cjs +19 -20
  117. package/dist/language_models/structured_output.cjs.map +1 -1
  118. package/dist/language_models/structured_output.d.ts +0 -5
  119. package/dist/language_models/structured_output.d.ts.map +1 -1
  120. package/dist/language_models/structured_output.js +1 -2
  121. package/dist/language_models/structured_output.js.map +1 -1
  122. package/dist/language_models/utils.cjs +1 -2
  123. package/dist/language_models/utils.cjs.map +1 -1
  124. package/dist/language_models/utils.js +1 -1
  125. package/dist/load/import_constants.cjs +1 -2
  126. package/dist/load/import_constants.cjs.map +1 -1
  127. package/dist/load/import_constants.js +1 -1
  128. package/dist/load/import_map.cjs +69 -70
  129. package/dist/load/import_map.js +1 -2
  130. package/dist/load/index.cjs +8 -9
  131. package/dist/load/index.cjs.map +1 -1
  132. package/dist/load/index.js +1 -2
  133. package/dist/load/index.js.map +1 -1
  134. package/dist/load/map_keys.cjs +2 -3
  135. package/dist/load/map_keys.cjs.map +1 -1
  136. package/dist/load/map_keys.js +1 -2
  137. package/dist/load/map_keys.js.map +1 -1
  138. package/dist/load/serializable.cjs +10 -11
  139. package/dist/load/serializable.cjs.map +1 -1
  140. package/dist/load/serializable.js +1 -2
  141. package/dist/load/serializable.js.map +1 -1
  142. package/dist/load/validation.cjs +3 -4
  143. package/dist/load/validation.cjs.map +1 -1
  144. package/dist/load/validation.js +3 -3
  145. package/dist/load/validation.js.map +1 -1
  146. package/dist/memory.cjs +8 -10
  147. package/dist/memory.cjs.map +1 -1
  148. package/dist/memory.js +1 -2
  149. package/dist/memory.js.map +1 -1
  150. package/dist/messages/ai.cjs +6 -7
  151. package/dist/messages/ai.cjs.map +1 -1
  152. package/dist/messages/ai.js +1 -2
  153. package/dist/messages/ai.js.map +1 -1
  154. package/dist/messages/base.cjs +8 -9
  155. package/dist/messages/base.cjs.map +1 -1
  156. package/dist/messages/base.js +1 -2
  157. package/dist/messages/base.js.map +1 -1
  158. package/dist/messages/block_translators/anthropic.cjs +2 -3
  159. package/dist/messages/block_translators/anthropic.cjs.map +1 -1
  160. package/dist/messages/block_translators/anthropic.js +1 -2
  161. package/dist/messages/block_translators/anthropic.js.map +1 -1
  162. package/dist/messages/block_translators/bedrock_converse.cjs +2 -3
  163. package/dist/messages/block_translators/bedrock_converse.cjs.map +1 -1
  164. package/dist/messages/block_translators/bedrock_converse.js +1 -2
  165. package/dist/messages/block_translators/bedrock_converse.js.map +1 -1
  166. package/dist/messages/block_translators/data.cjs +3 -4
  167. package/dist/messages/block_translators/data.cjs.map +1 -1
  168. package/dist/messages/block_translators/data.js +1 -2
  169. package/dist/messages/block_translators/data.js.map +1 -1
  170. package/dist/messages/block_translators/deepseek.cjs +2 -3
  171. package/dist/messages/block_translators/deepseek.cjs.map +1 -1
  172. package/dist/messages/block_translators/deepseek.js +1 -2
  173. package/dist/messages/block_translators/deepseek.js.map +1 -1
  174. package/dist/messages/block_translators/google.cjs +2 -3
  175. package/dist/messages/block_translators/google.cjs.map +1 -1
  176. package/dist/messages/block_translators/google.js +1 -2
  177. package/dist/messages/block_translators/google.js.map +1 -1
  178. package/dist/messages/block_translators/google_genai.cjs +2 -3
  179. package/dist/messages/block_translators/google_genai.cjs.map +1 -1
  180. package/dist/messages/block_translators/google_genai.js +1 -2
  181. package/dist/messages/block_translators/google_genai.js.map +1 -1
  182. package/dist/messages/block_translators/google_vertexai.cjs +2 -3
  183. package/dist/messages/block_translators/google_vertexai.cjs.map +1 -1
  184. package/dist/messages/block_translators/google_vertexai.js +1 -2
  185. package/dist/messages/block_translators/google_vertexai.js.map +1 -1
  186. package/dist/messages/block_translators/groq.cjs +2 -3
  187. package/dist/messages/block_translators/groq.cjs.map +1 -1
  188. package/dist/messages/block_translators/groq.js +1 -2
  189. package/dist/messages/block_translators/groq.js.map +1 -1
  190. package/dist/messages/block_translators/index.cjs +11 -12
  191. package/dist/messages/block_translators/index.cjs.map +1 -1
  192. package/dist/messages/block_translators/index.js +1 -2
  193. package/dist/messages/block_translators/index.js.map +1 -1
  194. package/dist/messages/block_translators/ollama.cjs +2 -3
  195. package/dist/messages/block_translators/ollama.cjs.map +1 -1
  196. package/dist/messages/block_translators/ollama.js +1 -2
  197. package/dist/messages/block_translators/ollama.js.map +1 -1
  198. package/dist/messages/block_translators/openai.cjs +29 -4
  199. package/dist/messages/block_translators/openai.cjs.map +1 -1
  200. package/dist/messages/block_translators/openai.js +27 -2
  201. package/dist/messages/block_translators/openai.js.map +1 -1
  202. package/dist/messages/block_translators/utils.cjs +1 -2
  203. package/dist/messages/block_translators/utils.cjs.map +1 -1
  204. package/dist/messages/block_translators/utils.js +1 -1
  205. package/dist/messages/block_translators/xai.cjs +2 -3
  206. package/dist/messages/block_translators/xai.cjs.map +1 -1
  207. package/dist/messages/block_translators/xai.js +1 -2
  208. package/dist/messages/block_translators/xai.js.map +1 -1
  209. package/dist/messages/chat.cjs +2 -3
  210. package/dist/messages/chat.cjs.map +1 -1
  211. package/dist/messages/chat.js +1 -2
  212. package/dist/messages/chat.js.map +1 -1
  213. package/dist/messages/content/data.cjs +1 -2
  214. package/dist/messages/content/data.cjs.map +1 -1
  215. package/dist/messages/content/data.js +1 -1
  216. package/dist/messages/content/index.cjs +3 -4
  217. package/dist/messages/content/index.cjs.map +1 -1
  218. package/dist/messages/content/index.js +1 -2
  219. package/dist/messages/content/index.js.map +1 -1
  220. package/dist/messages/content/multimodal.cjs +1 -2
  221. package/dist/messages/content/multimodal.cjs.map +1 -1
  222. package/dist/messages/content/multimodal.js +1 -1
  223. package/dist/messages/content/tools.cjs +1 -2
  224. package/dist/messages/content/tools.cjs.map +1 -1
  225. package/dist/messages/content/tools.js +1 -1
  226. package/dist/messages/format.cjs +1 -2
  227. package/dist/messages/format.cjs.map +1 -1
  228. package/dist/messages/format.js +1 -1
  229. package/dist/messages/function.cjs +2 -3
  230. package/dist/messages/function.cjs.map +1 -1
  231. package/dist/messages/function.js +1 -2
  232. package/dist/messages/function.js.map +1 -1
  233. package/dist/messages/human.cjs +2 -3
  234. package/dist/messages/human.cjs.map +1 -1
  235. package/dist/messages/human.js +1 -2
  236. package/dist/messages/human.js.map +1 -1
  237. package/dist/messages/index.cjs +22 -23
  238. package/dist/messages/index.js +1 -2
  239. package/dist/messages/message.cjs +1 -2
  240. package/dist/messages/message.cjs.map +1 -1
  241. package/dist/messages/message.js +1 -1
  242. package/dist/messages/metadata.cjs +2 -3
  243. package/dist/messages/metadata.cjs.map +1 -1
  244. package/dist/messages/metadata.js +1 -2
  245. package/dist/messages/metadata.js.map +1 -1
  246. package/dist/messages/modifier.cjs +2 -3
  247. package/dist/messages/modifier.cjs.map +1 -1
  248. package/dist/messages/modifier.js +1 -2
  249. package/dist/messages/modifier.js.map +1 -1
  250. package/dist/messages/system.cjs +2 -3
  251. package/dist/messages/system.cjs.map +1 -1
  252. package/dist/messages/system.js +1 -2
  253. package/dist/messages/system.js.map +1 -1
  254. package/dist/messages/tool.cjs +9 -10
  255. package/dist/messages/tool.cjs.map +1 -1
  256. package/dist/messages/tool.js +1 -2
  257. package/dist/messages/tool.js.map +1 -1
  258. package/dist/messages/transformers.cjs +11 -12
  259. package/dist/messages/transformers.cjs.map +1 -1
  260. package/dist/messages/transformers.js +1 -2
  261. package/dist/messages/transformers.js.map +1 -1
  262. package/dist/messages/utils.cjs +12 -13
  263. package/dist/messages/utils.cjs.map +1 -1
  264. package/dist/messages/utils.js +1 -2
  265. package/dist/messages/utils.js.map +1 -1
  266. package/dist/output_parsers/base.cjs +4 -5
  267. package/dist/output_parsers/base.cjs.map +1 -1
  268. package/dist/output_parsers/base.d.ts +0 -4
  269. package/dist/output_parsers/base.d.ts.map +1 -1
  270. package/dist/output_parsers/base.js +1 -2
  271. package/dist/output_parsers/base.js.map +1 -1
  272. package/dist/output_parsers/bytes.cjs +2 -3
  273. package/dist/output_parsers/bytes.cjs.map +1 -1
  274. package/dist/output_parsers/bytes.js +1 -2
  275. package/dist/output_parsers/bytes.js.map +1 -1
  276. package/dist/output_parsers/index.cjs +18 -19
  277. package/dist/output_parsers/index.js +1 -2
  278. package/dist/output_parsers/json.cjs +5 -6
  279. package/dist/output_parsers/json.cjs.map +1 -1
  280. package/dist/output_parsers/json.d.ts +0 -1
  281. package/dist/output_parsers/json.d.ts.map +1 -1
  282. package/dist/output_parsers/json.js +2 -3
  283. package/dist/output_parsers/json.js.map +1 -1
  284. package/dist/output_parsers/list.cjs +3 -4
  285. package/dist/output_parsers/list.cjs.map +1 -1
  286. package/dist/output_parsers/list.d.ts +0 -1
  287. package/dist/output_parsers/list.d.ts.map +1 -1
  288. package/dist/output_parsers/list.js +1 -2
  289. package/dist/output_parsers/list.js.map +1 -1
  290. package/dist/output_parsers/openai_functions/index.cjs +9 -10
  291. package/dist/output_parsers/openai_functions/index.js +1 -2
  292. package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs +7 -8
  293. package/dist/output_parsers/openai_functions/json_output_functions_parsers.cjs.map +1 -1
  294. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts +0 -1
  295. package/dist/output_parsers/openai_functions/json_output_functions_parsers.d.ts.map +1 -1
  296. package/dist/output_parsers/openai_functions/json_output_functions_parsers.js +1 -2
  297. package/dist/output_parsers/openai_functions/json_output_functions_parsers.js.map +1 -1
  298. package/dist/output_parsers/openai_tools/index.cjs +9 -10
  299. package/dist/output_parsers/openai_tools/index.js +1 -2
  300. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs +7 -8
  301. package/dist/output_parsers/openai_tools/json_output_tools_parsers.cjs.map +1 -1
  302. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js +1 -2
  303. package/dist/output_parsers/openai_tools/json_output_tools_parsers.js.map +1 -1
  304. package/dist/output_parsers/standard_schema.cjs +4 -5
  305. package/dist/output_parsers/standard_schema.cjs.map +1 -1
  306. package/dist/output_parsers/standard_schema.js +1 -2
  307. package/dist/output_parsers/standard_schema.js.map +1 -1
  308. package/dist/output_parsers/string.cjs +2 -3
  309. package/dist/output_parsers/string.cjs.map +1 -1
  310. package/dist/output_parsers/string.d.ts +0 -1
  311. package/dist/output_parsers/string.d.ts.map +1 -1
  312. package/dist/output_parsers/string.js +1 -2
  313. package/dist/output_parsers/string.js.map +1 -1
  314. package/dist/output_parsers/structured.cjs +5 -6
  315. package/dist/output_parsers/structured.cjs.map +1 -1
  316. package/dist/output_parsers/structured.js +1 -2
  317. package/dist/output_parsers/structured.js.map +1 -1
  318. package/dist/output_parsers/transform.cjs +6 -7
  319. package/dist/output_parsers/transform.cjs.map +1 -1
  320. package/dist/output_parsers/transform.js +1 -2
  321. package/dist/output_parsers/transform.js.map +1 -1
  322. package/dist/output_parsers/xml.cjs +5 -6
  323. package/dist/output_parsers/xml.cjs.map +1 -1
  324. package/dist/output_parsers/xml.js +1 -2
  325. package/dist/output_parsers/xml.js.map +1 -1
  326. package/dist/outputs.cjs +8 -10
  327. package/dist/outputs.cjs.map +1 -1
  328. package/dist/outputs.js +1 -2
  329. package/dist/outputs.js.map +1 -1
  330. package/dist/prompt_values.cjs +11 -12
  331. package/dist/prompt_values.cjs.map +1 -1
  332. package/dist/prompt_values.js +1 -2
  333. package/dist/prompt_values.js.map +1 -1
  334. package/dist/prompts/base.cjs +2 -3
  335. package/dist/prompts/base.cjs.map +1 -1
  336. package/dist/prompts/base.d.ts +0 -2
  337. package/dist/prompts/base.d.ts.map +1 -1
  338. package/dist/prompts/base.js +1 -2
  339. package/dist/prompts/base.js.map +1 -1
  340. package/dist/prompts/chat.cjs +17 -18
  341. package/dist/prompts/chat.cjs.map +1 -1
  342. package/dist/prompts/chat.d.ts +0 -1
  343. package/dist/prompts/chat.d.ts.map +1 -1
  344. package/dist/prompts/chat.js +1 -2
  345. package/dist/prompts/chat.js.map +1 -1
  346. package/dist/prompts/dict.cjs +3 -4
  347. package/dist/prompts/dict.cjs.map +1 -1
  348. package/dist/prompts/dict.js +1 -2
  349. package/dist/prompts/dict.js.map +1 -1
  350. package/dist/prompts/few_shot.cjs +5 -6
  351. package/dist/prompts/few_shot.cjs.map +1 -1
  352. package/dist/prompts/few_shot.d.ts +0 -1
  353. package/dist/prompts/few_shot.d.ts.map +1 -1
  354. package/dist/prompts/few_shot.js +1 -2
  355. package/dist/prompts/few_shot.js.map +1 -1
  356. package/dist/prompts/image.cjs +4 -5
  357. package/dist/prompts/image.cjs.map +1 -1
  358. package/dist/prompts/image.d.ts +0 -1
  359. package/dist/prompts/image.d.ts.map +1 -1
  360. package/dist/prompts/image.js +1 -2
  361. package/dist/prompts/image.js.map +1 -1
  362. package/dist/prompts/index.cjs +18 -19
  363. package/dist/prompts/index.js +1 -2
  364. package/dist/prompts/pipeline.cjs +3 -4
  365. package/dist/prompts/pipeline.cjs.map +1 -1
  366. package/dist/prompts/pipeline.js +1 -2
  367. package/dist/prompts/pipeline.js.map +1 -1
  368. package/dist/prompts/prompt.cjs +3 -4
  369. package/dist/prompts/prompt.cjs.map +1 -1
  370. package/dist/prompts/prompt.d.ts +0 -1
  371. package/dist/prompts/prompt.d.ts.map +1 -1
  372. package/dist/prompts/prompt.js +1 -2
  373. package/dist/prompts/prompt.js.map +1 -1
  374. package/dist/prompts/serde.d.ts +0 -1
  375. package/dist/prompts/serde.d.ts.map +1 -1
  376. package/dist/prompts/string.cjs +3 -4
  377. package/dist/prompts/string.cjs.map +1 -1
  378. package/dist/prompts/string.js +1 -2
  379. package/dist/prompts/string.js.map +1 -1
  380. package/dist/prompts/structured.cjs +3 -4
  381. package/dist/prompts/structured.cjs.map +1 -1
  382. package/dist/prompts/structured.d.ts +0 -1
  383. package/dist/prompts/structured.d.ts.map +1 -1
  384. package/dist/prompts/structured.js +1 -2
  385. package/dist/prompts/structured.js.map +1 -1
  386. package/dist/prompts/template.cjs +3 -4
  387. package/dist/prompts/template.cjs.map +1 -1
  388. package/dist/prompts/template.d.ts +0 -2
  389. package/dist/prompts/template.d.ts.map +1 -1
  390. package/dist/prompts/template.js +1 -2
  391. package/dist/prompts/template.js.map +1 -1
  392. package/dist/retrievers/document_compressors/index.cjs +8 -10
  393. package/dist/retrievers/document_compressors/index.cjs.map +1 -1
  394. package/dist/retrievers/document_compressors/index.js +1 -2
  395. package/dist/retrievers/document_compressors/index.js.map +1 -1
  396. package/dist/retrievers/index.cjs +11 -12
  397. package/dist/retrievers/index.cjs.map +1 -1
  398. package/dist/retrievers/index.d.ts +0 -1
  399. package/dist/retrievers/index.d.ts.map +1 -1
  400. package/dist/retrievers/index.js +1 -2
  401. package/dist/retrievers/index.js.map +1 -1
  402. package/dist/runnables/base.cjs +32 -36
  403. package/dist/runnables/base.cjs.map +1 -1
  404. package/dist/runnables/base.d.cts.map +1 -1
  405. package/dist/runnables/base.d.ts.map +1 -1
  406. package/dist/runnables/base.js +15 -19
  407. package/dist/runnables/base.js.map +1 -1
  408. package/dist/runnables/branch.cjs +4 -5
  409. package/dist/runnables/branch.cjs.map +1 -1
  410. package/dist/runnables/branch.d.ts +0 -1
  411. package/dist/runnables/branch.d.ts.map +1 -1
  412. package/dist/runnables/branch.js +1 -2
  413. package/dist/runnables/branch.js.map +1 -1
  414. package/dist/runnables/config.cjs +4 -7
  415. package/dist/runnables/config.cjs.map +1 -1
  416. package/dist/runnables/config.js +2 -4
  417. package/dist/runnables/config.js.map +1 -1
  418. package/dist/runnables/graph.cjs +11 -12
  419. package/dist/runnables/graph.cjs.map +1 -1
  420. package/dist/runnables/graph.js +1 -2
  421. package/dist/runnables/graph.js.map +1 -1
  422. package/dist/runnables/graph_mermaid.cjs +2 -3
  423. package/dist/runnables/graph_mermaid.cjs.map +1 -1
  424. package/dist/runnables/graph_mermaid.js +1 -2
  425. package/dist/runnables/graph_mermaid.js.map +1 -1
  426. package/dist/runnables/history.cjs +7 -8
  427. package/dist/runnables/history.cjs.map +1 -1
  428. package/dist/runnables/history.d.ts +0 -2
  429. package/dist/runnables/history.d.ts.map +1 -1
  430. package/dist/runnables/history.js +1 -2
  431. package/dist/runnables/history.js.map +1 -1
  432. package/dist/runnables/index.cjs +15 -16
  433. package/dist/runnables/index.js +1 -2
  434. package/dist/runnables/iter.cjs +4 -5
  435. package/dist/runnables/iter.cjs.map +1 -1
  436. package/dist/runnables/iter.js +1 -2
  437. package/dist/runnables/iter.js.map +1 -1
  438. package/dist/runnables/passthrough.cjs +4 -5
  439. package/dist/runnables/passthrough.cjs.map +1 -1
  440. package/dist/runnables/passthrough.d.ts +0 -1
  441. package/dist/runnables/passthrough.d.ts.map +1 -1
  442. package/dist/runnables/passthrough.js +1 -2
  443. package/dist/runnables/passthrough.js.map +1 -1
  444. package/dist/runnables/router.cjs +3 -4
  445. package/dist/runnables/router.cjs.map +1 -1
  446. package/dist/runnables/router.d.ts +0 -1
  447. package/dist/runnables/router.d.ts.map +1 -1
  448. package/dist/runnables/router.js +1 -2
  449. package/dist/runnables/router.js.map +1 -1
  450. package/dist/runnables/utils.cjs +1 -2
  451. package/dist/runnables/utils.cjs.map +1 -1
  452. package/dist/runnables/utils.js +1 -1
  453. package/dist/runnables/utils.js.map +1 -1
  454. package/dist/runnables/wrappers.cjs +2 -3
  455. package/dist/runnables/wrappers.cjs.map +1 -1
  456. package/dist/runnables/wrappers.js +1 -2
  457. package/dist/runnables/wrappers.js.map +1 -1
  458. package/dist/singletons/async_local_storage/context.cjs +3 -4
  459. package/dist/singletons/async_local_storage/context.cjs.map +1 -1
  460. package/dist/singletons/async_local_storage/context.js +1 -2
  461. package/dist/singletons/async_local_storage/context.js.map +1 -1
  462. package/dist/singletons/async_local_storage/globals.cjs +1 -2
  463. package/dist/singletons/async_local_storage/globals.cjs.map +1 -1
  464. package/dist/singletons/async_local_storage/globals.js +1 -1
  465. package/dist/singletons/async_local_storage/globals.js.map +1 -1
  466. package/dist/singletons/async_local_storage/index.cjs +4 -5
  467. package/dist/singletons/async_local_storage/index.cjs.map +1 -1
  468. package/dist/singletons/async_local_storage/index.js +1 -2
  469. package/dist/singletons/async_local_storage/index.js.map +1 -1
  470. package/dist/singletons/callbacks.cjs +4 -5
  471. package/dist/singletons/callbacks.cjs.map +1 -1
  472. package/dist/singletons/callbacks.js +1 -2
  473. package/dist/singletons/callbacks.js.map +1 -1
  474. package/dist/singletons/index.cjs +10 -11
  475. package/dist/singletons/index.js +1 -2
  476. package/dist/singletons/tracer.cjs +3 -4
  477. package/dist/singletons/tracer.cjs.map +1 -1
  478. package/dist/singletons/tracer.js +1 -2
  479. package/dist/singletons/tracer.js.map +1 -1
  480. package/dist/stores.cjs +9 -10
  481. package/dist/stores.cjs.map +1 -1
  482. package/dist/stores.js +1 -2
  483. package/dist/stores.js.map +1 -1
  484. package/dist/structured_query/base.cjs +3 -4
  485. package/dist/structured_query/base.cjs.map +1 -1
  486. package/dist/structured_query/base.js +1 -2
  487. package/dist/structured_query/base.js.map +1 -1
  488. package/dist/structured_query/functional.cjs +4 -5
  489. package/dist/structured_query/functional.cjs.map +1 -1
  490. package/dist/structured_query/functional.js +1 -2
  491. package/dist/structured_query/functional.js.map +1 -1
  492. package/dist/structured_query/index.cjs +12 -13
  493. package/dist/structured_query/index.js +1 -2
  494. package/dist/structured_query/ir.cjs +1 -2
  495. package/dist/structured_query/ir.cjs.map +1 -1
  496. package/dist/structured_query/ir.js +1 -1
  497. package/dist/structured_query/ir.js.map +1 -1
  498. package/dist/structured_query/utils.cjs +1 -2
  499. package/dist/structured_query/utils.cjs.map +1 -1
  500. package/dist/structured_query/utils.js +1 -1
  501. package/dist/testing/fake_model_builder.cjs +6 -7
  502. package/dist/testing/fake_model_builder.cjs.map +1 -1
  503. package/dist/testing/fake_model_builder.d.ts +0 -1
  504. package/dist/testing/fake_model_builder.d.ts.map +1 -1
  505. package/dist/testing/fake_model_builder.js +1 -2
  506. package/dist/testing/fake_model_builder.js.map +1 -1
  507. package/dist/testing/index.cjs +10 -11
  508. package/dist/testing/index.js +1 -2
  509. package/dist/testing/matchers.cjs +7 -8
  510. package/dist/testing/matchers.cjs.map +1 -1
  511. package/dist/testing/matchers.js +1 -2
  512. package/dist/testing/matchers.js.map +1 -1
  513. package/dist/tools/index.cjs +20 -21
  514. package/dist/tools/index.cjs.map +1 -1
  515. package/dist/tools/index.d.cts +1 -1
  516. package/dist/tools/index.d.cts.map +1 -1
  517. package/dist/tools/index.d.ts +1 -3
  518. package/dist/tools/index.d.ts.map +1 -1
  519. package/dist/tools/index.js +1 -2
  520. package/dist/tools/index.js.map +1 -1
  521. package/dist/tools/types.cjs +3 -4
  522. package/dist/tools/types.cjs.map +1 -1
  523. package/dist/tools/types.d.ts +0 -2
  524. package/dist/tools/types.d.ts.map +1 -1
  525. package/dist/tools/types.js +1 -2
  526. package/dist/tools/types.js.map +1 -1
  527. package/dist/tools/utils.cjs +1 -2
  528. package/dist/tools/utils.cjs.map +1 -1
  529. package/dist/tools/utils.js +1 -1
  530. package/dist/tracers/base.cjs +10 -11
  531. package/dist/tracers/base.cjs.map +1 -1
  532. package/dist/tracers/base.js +1 -2
  533. package/dist/tracers/base.js.map +1 -1
  534. package/dist/tracers/console.cjs +9 -10
  535. package/dist/tracers/console.cjs.map +1 -1
  536. package/dist/tracers/console.js +1 -2
  537. package/dist/tracers/console.js.map +1 -1
  538. package/dist/tracers/event_stream.cjs +5 -6
  539. package/dist/tracers/event_stream.cjs.map +1 -1
  540. package/dist/tracers/event_stream.d.ts +0 -2
  541. package/dist/tracers/event_stream.d.ts.map +1 -1
  542. package/dist/tracers/event_stream.js +1 -2
  543. package/dist/tracers/event_stream.js.map +1 -1
  544. package/dist/tracers/log_stream.cjs +13 -14
  545. package/dist/tracers/log_stream.cjs.map +1 -1
  546. package/dist/tracers/log_stream.js +1 -2
  547. package/dist/tracers/log_stream.js.map +1 -1
  548. package/dist/tracers/root_listener.cjs +2 -3
  549. package/dist/tracers/root_listener.cjs.map +1 -1
  550. package/dist/tracers/root_listener.js +1 -2
  551. package/dist/tracers/root_listener.js.map +1 -1
  552. package/dist/tracers/run_collector.cjs +9 -10
  553. package/dist/tracers/run_collector.cjs.map +1 -1
  554. package/dist/tracers/run_collector.js +1 -2
  555. package/dist/tracers/run_collector.js.map +1 -1
  556. package/dist/tracers/tracer_langchain.cjs +12 -13
  557. package/dist/tracers/tracer_langchain.cjs.map +1 -1
  558. package/dist/tracers/tracer_langchain.js +1 -2
  559. package/dist/tracers/tracer_langchain.js.map +1 -1
  560. package/dist/types/stream.cjs +8 -10
  561. package/dist/types/stream.js +1 -2
  562. package/dist/utils/async_caller.cjs +10 -11
  563. package/dist/utils/async_caller.cjs.map +1 -1
  564. package/dist/utils/async_caller.js +1 -2
  565. package/dist/utils/async_caller.js.map +1 -1
  566. package/dist/utils/callbacks.cjs +2 -3
  567. package/dist/utils/callbacks.cjs.map +1 -1
  568. package/dist/utils/callbacks.js +1 -2
  569. package/dist/utils/callbacks.js.map +1 -1
  570. package/dist/utils/chunk_array.cjs +8 -10
  571. package/dist/utils/chunk_array.cjs.map +1 -1
  572. package/dist/utils/chunk_array.js +1 -2
  573. package/dist/utils/chunk_array.js.map +1 -1
  574. package/dist/utils/context.cjs +8 -10
  575. package/dist/utils/context.cjs.map +1 -1
  576. package/dist/utils/context.js +1 -2
  577. package/dist/utils/context.js.map +1 -1
  578. package/dist/utils/env.cjs +8 -10
  579. package/dist/utils/env.cjs.map +1 -1
  580. package/dist/utils/env.js +1 -2
  581. package/dist/utils/env.js.map +1 -1
  582. package/dist/utils/event_source_parse.cjs +9 -10
  583. package/dist/utils/event_source_parse.cjs.map +1 -1
  584. package/dist/utils/event_source_parse.js +1 -2
  585. package/dist/utils/event_source_parse.js.map +1 -1
  586. package/dist/utils/fast-json-patch/index.cjs +5 -16
  587. package/dist/utils/fast-json-patch/index.cjs.map +1 -1
  588. package/dist/utils/fast-json-patch/index.js +6 -17
  589. package/dist/utils/fast-json-patch/index.js.map +1 -1
  590. package/dist/utils/fast-json-patch/src/core.cjs +8 -9
  591. package/dist/utils/fast-json-patch/src/core.cjs.map +1 -1
  592. package/dist/utils/fast-json-patch/src/core.js +1 -2
  593. package/dist/utils/fast-json-patch/src/core.js.map +1 -1
  594. package/dist/utils/fast-json-patch/src/duplex.cjs +3 -4
  595. package/dist/utils/fast-json-patch/src/duplex.cjs.map +1 -1
  596. package/dist/utils/fast-json-patch/src/duplex.js +1 -2
  597. package/dist/utils/fast-json-patch/src/duplex.js.map +1 -1
  598. package/dist/utils/fast-json-patch/src/helpers.cjs +1 -2
  599. package/dist/utils/fast-json-patch/src/helpers.cjs.map +1 -1
  600. package/dist/utils/fast-json-patch/src/helpers.js +1 -1
  601. package/dist/utils/fast-json-patch/src/helpers.js.map +1 -1
  602. package/dist/utils/format.cjs +8 -10
  603. package/dist/utils/format.js +1 -2
  604. package/dist/utils/function_calling.cjs +10 -11
  605. package/dist/utils/function_calling.cjs.map +1 -1
  606. package/dist/utils/function_calling.js +1 -2
  607. package/dist/utils/function_calling.js.map +1 -1
  608. package/dist/utils/hash.cjs +9 -10
  609. package/dist/utils/hash.js +1 -2
  610. package/dist/utils/is-network-error/index.cjs +1 -2
  611. package/dist/utils/is-network-error/index.cjs.map +1 -1
  612. package/dist/utils/is-network-error/index.js +1 -1
  613. package/dist/utils/is-network-error/index.js.map +1 -1
  614. package/dist/utils/js-sha256/hash.cjs +1 -3
  615. package/dist/utils/js-sha256/hash.cjs.map +1 -1
  616. package/dist/utils/js-sha256/hash.js +1 -1
  617. package/dist/utils/js-sha256/hash.js.map +1 -1
  618. package/dist/utils/json.cjs +1 -2
  619. package/dist/utils/json.cjs.map +1 -1
  620. package/dist/utils/json.js +1 -1
  621. package/dist/utils/json_patch.cjs +11 -12
  622. package/dist/utils/json_patch.js +1 -2
  623. package/dist/utils/json_schema.cjs +22 -23
  624. package/dist/utils/json_schema.cjs.map +1 -1
  625. package/dist/utils/json_schema.d.ts +0 -1
  626. package/dist/utils/json_schema.d.ts.map +1 -1
  627. package/dist/utils/json_schema.js +1 -2
  628. package/dist/utils/json_schema.js.map +1 -1
  629. package/dist/utils/math.cjs +11 -12
  630. package/dist/utils/math.cjs.map +1 -1
  631. package/dist/utils/math.js +1 -2
  632. package/dist/utils/math.js.map +1 -1
  633. package/dist/utils/ml-distance/distances.cjs +1 -2
  634. package/dist/utils/ml-distance/distances.cjs.map +1 -1
  635. package/dist/utils/ml-distance/distances.js +1 -1
  636. package/dist/utils/ml-distance/similarities.cjs +1 -2
  637. package/dist/utils/ml-distance/similarities.cjs.map +1 -1
  638. package/dist/utils/ml-distance/similarities.js +1 -1
  639. package/dist/utils/ml-distance-euclidean/euclidean.cjs +1 -2
  640. package/dist/utils/ml-distance-euclidean/euclidean.cjs.map +1 -1
  641. package/dist/utils/ml-distance-euclidean/euclidean.js +1 -1
  642. package/dist/utils/namespace.cjs +1 -2
  643. package/dist/utils/namespace.cjs.map +1 -1
  644. package/dist/utils/namespace.js +1 -1
  645. package/dist/utils/p-retry/index.cjs +2 -3
  646. package/dist/utils/p-retry/index.cjs.map +1 -1
  647. package/dist/utils/p-retry/index.js +1 -2
  648. package/dist/utils/p-retry/index.js.map +1 -1
  649. package/dist/utils/sax-js/sax.cjs +1 -2
  650. package/dist/utils/sax-js/sax.cjs.map +1 -1
  651. package/dist/utils/sax-js/sax.js +1 -1
  652. package/dist/utils/signal.cjs +1 -2
  653. package/dist/utils/signal.cjs.map +1 -1
  654. package/dist/utils/signal.js +1 -1
  655. package/dist/utils/signal.js.map +1 -1
  656. package/dist/utils/ssrf.cjs +8 -10
  657. package/dist/utils/ssrf.cjs.map +1 -1
  658. package/dist/utils/ssrf.js +1 -2
  659. package/dist/utils/ssrf.js.map +1 -1
  660. package/dist/utils/standard_schema.cjs +8 -10
  661. package/dist/utils/standard_schema.cjs.map +1 -1
  662. package/dist/utils/standard_schema.js +1 -2
  663. package/dist/utils/standard_schema.js.map +1 -1
  664. package/dist/utils/stream.cjs +13 -14
  665. package/dist/utils/stream.cjs.map +1 -1
  666. package/dist/utils/stream.d.cts.map +1 -1
  667. package/dist/utils/stream.d.ts.map +1 -1
  668. package/dist/utils/stream.js +2 -3
  669. package/dist/utils/stream.js.map +1 -1
  670. package/dist/utils/testing/chat_models.cjs +7 -8
  671. package/dist/utils/testing/chat_models.cjs.map +1 -1
  672. package/dist/utils/testing/chat_models.d.ts +0 -1
  673. package/dist/utils/testing/chat_models.d.ts.map +1 -1
  674. package/dist/utils/testing/chat_models.js +1 -2
  675. package/dist/utils/testing/chat_models.js.map +1 -1
  676. package/dist/utils/testing/embeddings.cjs +2 -3
  677. package/dist/utils/testing/embeddings.cjs.map +1 -1
  678. package/dist/utils/testing/embeddings.js +1 -2
  679. package/dist/utils/testing/embeddings.js.map +1 -1
  680. package/dist/utils/testing/index.cjs +18 -19
  681. package/dist/utils/testing/index.js +1 -2
  682. package/dist/utils/testing/llms.cjs +2 -3
  683. package/dist/utils/testing/llms.cjs.map +1 -1
  684. package/dist/utils/testing/llms.js +1 -2
  685. package/dist/utils/testing/llms.js.map +1 -1
  686. package/dist/utils/testing/message_history.cjs +6 -7
  687. package/dist/utils/testing/message_history.cjs.map +1 -1
  688. package/dist/utils/testing/message_history.d.ts +0 -1
  689. package/dist/utils/testing/message_history.d.ts.map +1 -1
  690. package/dist/utils/testing/message_history.js +1 -2
  691. package/dist/utils/testing/message_history.js.map +1 -1
  692. package/dist/utils/testing/output_parsers.cjs +2 -3
  693. package/dist/utils/testing/output_parsers.cjs.map +1 -1
  694. package/dist/utils/testing/output_parsers.js +1 -2
  695. package/dist/utils/testing/output_parsers.js.map +1 -1
  696. package/dist/utils/testing/retrievers.cjs +3 -4
  697. package/dist/utils/testing/retrievers.cjs.map +1 -1
  698. package/dist/utils/testing/retrievers.js +1 -2
  699. package/dist/utils/testing/retrievers.js.map +1 -1
  700. package/dist/utils/testing/runnables.cjs +2 -3
  701. package/dist/utils/testing/runnables.cjs.map +1 -1
  702. package/dist/utils/testing/runnables.js +1 -2
  703. package/dist/utils/testing/runnables.js.map +1 -1
  704. package/dist/utils/testing/tools.cjs +2 -3
  705. package/dist/utils/testing/tools.cjs.map +1 -1
  706. package/dist/utils/testing/tools.js +1 -2
  707. package/dist/utils/testing/tools.js.map +1 -1
  708. package/dist/utils/testing/tracers.cjs +2 -3
  709. package/dist/utils/testing/tracers.cjs.map +1 -1
  710. package/dist/utils/testing/tracers.js +1 -2
  711. package/dist/utils/testing/tracers.js.map +1 -1
  712. package/dist/utils/testing/vectorstores.cjs +4 -5
  713. package/dist/utils/testing/vectorstores.cjs.map +1 -1
  714. package/dist/utils/testing/vectorstores.js +1 -2
  715. package/dist/utils/testing/vectorstores.js.map +1 -1
  716. package/dist/utils/tiktoken.cjs +9 -10
  717. package/dist/utils/tiktoken.cjs.map +1 -1
  718. package/dist/utils/tiktoken.js +1 -2
  719. package/dist/utils/tiktoken.js.map +1 -1
  720. package/dist/utils/types/index.cjs +9 -10
  721. package/dist/utils/types/index.js +1 -2
  722. package/dist/utils/types/zod.cjs +2 -3
  723. package/dist/utils/types/zod.cjs.map +1 -1
  724. package/dist/utils/types/zod.js +1 -2
  725. package/dist/utils/types/zod.js.map +1 -1
  726. package/dist/utils/zod-to-json-schema/Options.cjs +1 -2
  727. package/dist/utils/zod-to-json-schema/Options.cjs.map +1 -1
  728. package/dist/utils/zod-to-json-schema/Options.d.ts +1 -3
  729. package/dist/utils/zod-to-json-schema/Options.js +1 -1
  730. package/dist/utils/zod-to-json-schema/Options.js.map +1 -1
  731. package/dist/utils/zod-to-json-schema/Refs.cjs +2 -3
  732. package/dist/utils/zod-to-json-schema/Refs.cjs.map +1 -1
  733. package/dist/utils/zod-to-json-schema/Refs.d.ts +1 -3
  734. package/dist/utils/zod-to-json-schema/Refs.js +1 -2
  735. package/dist/utils/zod-to-json-schema/Refs.js.map +1 -1
  736. package/dist/utils/zod-to-json-schema/errorMessages.cjs +1 -2
  737. package/dist/utils/zod-to-json-schema/errorMessages.cjs.map +1 -1
  738. package/dist/utils/zod-to-json-schema/errorMessages.d.ts +0 -2
  739. package/dist/utils/zod-to-json-schema/errorMessages.d.ts.map +1 -1
  740. package/dist/utils/zod-to-json-schema/errorMessages.js +1 -1
  741. package/dist/utils/zod-to-json-schema/getRelativePath.cjs +1 -2
  742. package/dist/utils/zod-to-json-schema/getRelativePath.cjs.map +1 -1
  743. package/dist/utils/zod-to-json-schema/getRelativePath.js +1 -1
  744. package/dist/utils/zod-to-json-schema/index.cjs +37 -37
  745. package/dist/utils/zod-to-json-schema/index.d.ts +1 -14
  746. package/dist/utils/zod-to-json-schema/index.js +38 -39
  747. package/dist/utils/zod-to-json-schema/parseDef.cjs +5 -6
  748. package/dist/utils/zod-to-json-schema/parseDef.cjs.map +1 -1
  749. package/dist/utils/zod-to-json-schema/parseDef.d.ts +1 -3
  750. package/dist/utils/zod-to-json-schema/parseDef.js +1 -2
  751. package/dist/utils/zod-to-json-schema/parseDef.js.map +1 -1
  752. package/dist/utils/zod-to-json-schema/parsers/any.cjs +2 -3
  753. package/dist/utils/zod-to-json-schema/parsers/any.cjs.map +1 -1
  754. package/dist/utils/zod-to-json-schema/parsers/any.d.ts +0 -2
  755. package/dist/utils/zod-to-json-schema/parsers/any.d.ts.map +1 -1
  756. package/dist/utils/zod-to-json-schema/parsers/any.js +1 -2
  757. package/dist/utils/zod-to-json-schema/parsers/any.js.map +1 -1
  758. package/dist/utils/zod-to-json-schema/parsers/array.cjs +4 -5
  759. package/dist/utils/zod-to-json-schema/parsers/array.cjs.map +1 -1
  760. package/dist/utils/zod-to-json-schema/parsers/array.d.ts +0 -3
  761. package/dist/utils/zod-to-json-schema/parsers/array.d.ts.map +1 -1
  762. package/dist/utils/zod-to-json-schema/parsers/array.js +1 -2
  763. package/dist/utils/zod-to-json-schema/parsers/array.js.map +1 -1
  764. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs +2 -3
  765. package/dist/utils/zod-to-json-schema/parsers/bigint.cjs.map +1 -1
  766. package/dist/utils/zod-to-json-schema/parsers/bigint.d.ts +0 -3
  767. package/dist/utils/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
  768. package/dist/utils/zod-to-json-schema/parsers/bigint.js +1 -2
  769. package/dist/utils/zod-to-json-schema/parsers/bigint.js.map +1 -1
  770. package/dist/utils/zod-to-json-schema/parsers/boolean.cjs +1 -2
  771. package/dist/utils/zod-to-json-schema/parsers/boolean.cjs.map +1 -1
  772. package/dist/utils/zod-to-json-schema/parsers/boolean.js +1 -1
  773. package/dist/utils/zod-to-json-schema/parsers/branded.cjs +2 -3
  774. package/dist/utils/zod-to-json-schema/parsers/branded.cjs.map +1 -1
  775. package/dist/utils/zod-to-json-schema/parsers/branded.d.ts +1 -3
  776. package/dist/utils/zod-to-json-schema/parsers/branded.js +1 -2
  777. package/dist/utils/zod-to-json-schema/parsers/branded.js.map +1 -1
  778. package/dist/utils/zod-to-json-schema/parsers/catch.cjs +2 -3
  779. package/dist/utils/zod-to-json-schema/parsers/catch.cjs.map +1 -1
  780. package/dist/utils/zod-to-json-schema/parsers/catch.d.ts +1 -3
  781. package/dist/utils/zod-to-json-schema/parsers/catch.js +1 -2
  782. package/dist/utils/zod-to-json-schema/parsers/catch.js.map +1 -1
  783. package/dist/utils/zod-to-json-schema/parsers/date.cjs +2 -3
  784. package/dist/utils/zod-to-json-schema/parsers/date.cjs.map +1 -1
  785. package/dist/utils/zod-to-json-schema/parsers/date.d.ts +0 -4
  786. package/dist/utils/zod-to-json-schema/parsers/date.d.ts.map +1 -1
  787. package/dist/utils/zod-to-json-schema/parsers/date.js +1 -2
  788. package/dist/utils/zod-to-json-schema/parsers/date.js.map +1 -1
  789. package/dist/utils/zod-to-json-schema/parsers/default.cjs +2 -3
  790. package/dist/utils/zod-to-json-schema/parsers/default.cjs.map +1 -1
  791. package/dist/utils/zod-to-json-schema/parsers/default.d.ts +1 -3
  792. package/dist/utils/zod-to-json-schema/parsers/default.js +1 -2
  793. package/dist/utils/zod-to-json-schema/parsers/default.js.map +1 -1
  794. package/dist/utils/zod-to-json-schema/parsers/effects.cjs +3 -4
  795. package/dist/utils/zod-to-json-schema/parsers/effects.cjs.map +1 -1
  796. package/dist/utils/zod-to-json-schema/parsers/effects.d.ts +1 -3
  797. package/dist/utils/zod-to-json-schema/parsers/effects.js +1 -2
  798. package/dist/utils/zod-to-json-schema/parsers/effects.js.map +1 -1
  799. package/dist/utils/zod-to-json-schema/parsers/enum.cjs +1 -2
  800. package/dist/utils/zod-to-json-schema/parsers/enum.cjs.map +1 -1
  801. package/dist/utils/zod-to-json-schema/parsers/enum.d.ts +0 -2
  802. package/dist/utils/zod-to-json-schema/parsers/enum.d.ts.map +1 -1
  803. package/dist/utils/zod-to-json-schema/parsers/enum.js +1 -1
  804. package/dist/utils/zod-to-json-schema/parsers/intersection.cjs +2 -3
  805. package/dist/utils/zod-to-json-schema/parsers/intersection.cjs.map +1 -1
  806. package/dist/utils/zod-to-json-schema/parsers/intersection.d.ts +0 -3
  807. package/dist/utils/zod-to-json-schema/parsers/intersection.d.ts.map +1 -1
  808. package/dist/utils/zod-to-json-schema/parsers/intersection.js +1 -2
  809. package/dist/utils/zod-to-json-schema/parsers/intersection.js.map +1 -1
  810. package/dist/utils/zod-to-json-schema/parsers/literal.cjs +1 -2
  811. package/dist/utils/zod-to-json-schema/parsers/literal.cjs.map +1 -1
  812. package/dist/utils/zod-to-json-schema/parsers/literal.d.ts +0 -3
  813. package/dist/utils/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
  814. package/dist/utils/zod-to-json-schema/parsers/literal.js +1 -1
  815. package/dist/utils/zod-to-json-schema/parsers/map.cjs +4 -5
  816. package/dist/utils/zod-to-json-schema/parsers/map.cjs.map +1 -1
  817. package/dist/utils/zod-to-json-schema/parsers/map.d.ts +0 -4
  818. package/dist/utils/zod-to-json-schema/parsers/map.d.ts.map +1 -1
  819. package/dist/utils/zod-to-json-schema/parsers/map.js +1 -2
  820. package/dist/utils/zod-to-json-schema/parsers/map.js.map +1 -1
  821. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs +1 -2
  822. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.cjs.map +1 -1
  823. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.ts +0 -2
  824. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.d.ts.map +1 -1
  825. package/dist/utils/zod-to-json-schema/parsers/nativeEnum.js +1 -1
  826. package/dist/utils/zod-to-json-schema/parsers/never.cjs +2 -3
  827. package/dist/utils/zod-to-json-schema/parsers/never.cjs.map +1 -1
  828. package/dist/utils/zod-to-json-schema/parsers/never.d.ts +0 -2
  829. package/dist/utils/zod-to-json-schema/parsers/never.d.ts.map +1 -1
  830. package/dist/utils/zod-to-json-schema/parsers/never.js +1 -2
  831. package/dist/utils/zod-to-json-schema/parsers/never.js.map +1 -1
  832. package/dist/utils/zod-to-json-schema/parsers/null.cjs +1 -2
  833. package/dist/utils/zod-to-json-schema/parsers/null.cjs.map +1 -1
  834. package/dist/utils/zod-to-json-schema/parsers/null.d.ts +0 -2
  835. package/dist/utils/zod-to-json-schema/parsers/null.d.ts.map +1 -1
  836. package/dist/utils/zod-to-json-schema/parsers/null.js +1 -1
  837. package/dist/utils/zod-to-json-schema/parsers/nullable.cjs +3 -4
  838. package/dist/utils/zod-to-json-schema/parsers/nullable.cjs.map +1 -1
  839. package/dist/utils/zod-to-json-schema/parsers/nullable.d.ts +0 -3
  840. package/dist/utils/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
  841. package/dist/utils/zod-to-json-schema/parsers/nullable.js +1 -2
  842. package/dist/utils/zod-to-json-schema/parsers/nullable.js.map +1 -1
  843. package/dist/utils/zod-to-json-schema/parsers/number.cjs +2 -3
  844. package/dist/utils/zod-to-json-schema/parsers/number.cjs.map +1 -1
  845. package/dist/utils/zod-to-json-schema/parsers/number.d.ts +0 -3
  846. package/dist/utils/zod-to-json-schema/parsers/number.d.ts.map +1 -1
  847. package/dist/utils/zod-to-json-schema/parsers/number.js +1 -2
  848. package/dist/utils/zod-to-json-schema/parsers/number.js.map +1 -1
  849. package/dist/utils/zod-to-json-schema/parsers/object.cjs +2 -3
  850. package/dist/utils/zod-to-json-schema/parsers/object.cjs.map +1 -1
  851. package/dist/utils/zod-to-json-schema/parsers/object.d.ts +0 -3
  852. package/dist/utils/zod-to-json-schema/parsers/object.d.ts.map +1 -1
  853. package/dist/utils/zod-to-json-schema/parsers/object.js +1 -2
  854. package/dist/utils/zod-to-json-schema/parsers/object.js.map +1 -1
  855. package/dist/utils/zod-to-json-schema/parsers/optional.cjs +3 -4
  856. package/dist/utils/zod-to-json-schema/parsers/optional.cjs.map +1 -1
  857. package/dist/utils/zod-to-json-schema/parsers/optional.d.ts +1 -3
  858. package/dist/utils/zod-to-json-schema/parsers/optional.js +1 -2
  859. package/dist/utils/zod-to-json-schema/parsers/optional.js.map +1 -1
  860. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs +2 -3
  861. package/dist/utils/zod-to-json-schema/parsers/pipeline.cjs.map +1 -1
  862. package/dist/utils/zod-to-json-schema/parsers/pipeline.d.ts +1 -4
  863. package/dist/utils/zod-to-json-schema/parsers/pipeline.js +1 -2
  864. package/dist/utils/zod-to-json-schema/parsers/pipeline.js.map +1 -1
  865. package/dist/utils/zod-to-json-schema/parsers/promise.cjs +2 -3
  866. package/dist/utils/zod-to-json-schema/parsers/promise.cjs.map +1 -1
  867. package/dist/utils/zod-to-json-schema/parsers/promise.d.ts +1 -3
  868. package/dist/utils/zod-to-json-schema/parsers/promise.js +1 -2
  869. package/dist/utils/zod-to-json-schema/parsers/promise.js.map +1 -1
  870. package/dist/utils/zod-to-json-schema/parsers/readonly.cjs +2 -3
  871. package/dist/utils/zod-to-json-schema/parsers/readonly.cjs.map +1 -1
  872. package/dist/utils/zod-to-json-schema/parsers/readonly.d.ts +1 -3
  873. package/dist/utils/zod-to-json-schema/parsers/readonly.js +1 -2
  874. package/dist/utils/zod-to-json-schema/parsers/readonly.js.map +1 -1
  875. package/dist/utils/zod-to-json-schema/parsers/record.cjs +6 -7
  876. package/dist/utils/zod-to-json-schema/parsers/record.cjs.map +1 -1
  877. package/dist/utils/zod-to-json-schema/parsers/record.d.ts +0 -3
  878. package/dist/utils/zod-to-json-schema/parsers/record.d.ts.map +1 -1
  879. package/dist/utils/zod-to-json-schema/parsers/record.js +1 -2
  880. package/dist/utils/zod-to-json-schema/parsers/record.js.map +1 -1
  881. package/dist/utils/zod-to-json-schema/parsers/set.cjs +3 -4
  882. package/dist/utils/zod-to-json-schema/parsers/set.cjs.map +1 -1
  883. package/dist/utils/zod-to-json-schema/parsers/set.d.ts +0 -3
  884. package/dist/utils/zod-to-json-schema/parsers/set.d.ts.map +1 -1
  885. package/dist/utils/zod-to-json-schema/parsers/set.js +1 -2
  886. package/dist/utils/zod-to-json-schema/parsers/set.js.map +1 -1
  887. package/dist/utils/zod-to-json-schema/parsers/string.cjs +2 -3
  888. package/dist/utils/zod-to-json-schema/parsers/string.cjs.map +1 -1
  889. package/dist/utils/zod-to-json-schema/parsers/string.d.ts +0 -3
  890. package/dist/utils/zod-to-json-schema/parsers/string.d.ts.map +1 -1
  891. package/dist/utils/zod-to-json-schema/parsers/string.js +1 -2
  892. package/dist/utils/zod-to-json-schema/parsers/string.js.map +1 -1
  893. package/dist/utils/zod-to-json-schema/parsers/tuple.cjs +2 -3
  894. package/dist/utils/zod-to-json-schema/parsers/tuple.cjs.map +1 -1
  895. package/dist/utils/zod-to-json-schema/parsers/tuple.d.ts +0 -3
  896. package/dist/utils/zod-to-json-schema/parsers/tuple.d.ts.map +1 -1
  897. package/dist/utils/zod-to-json-schema/parsers/tuple.js +1 -2
  898. package/dist/utils/zod-to-json-schema/parsers/tuple.js.map +1 -1
  899. package/dist/utils/zod-to-json-schema/parsers/undefined.cjs +2 -3
  900. package/dist/utils/zod-to-json-schema/parsers/undefined.cjs.map +1 -1
  901. package/dist/utils/zod-to-json-schema/parsers/undefined.d.ts +0 -2
  902. package/dist/utils/zod-to-json-schema/parsers/undefined.d.ts.map +1 -1
  903. package/dist/utils/zod-to-json-schema/parsers/undefined.js +1 -2
  904. package/dist/utils/zod-to-json-schema/parsers/undefined.js.map +1 -1
  905. package/dist/utils/zod-to-json-schema/parsers/union.cjs +2 -3
  906. package/dist/utils/zod-to-json-schema/parsers/union.cjs.map +1 -1
  907. package/dist/utils/zod-to-json-schema/parsers/union.d.ts +0 -3
  908. package/dist/utils/zod-to-json-schema/parsers/union.d.ts.map +1 -1
  909. package/dist/utils/zod-to-json-schema/parsers/union.js +1 -2
  910. package/dist/utils/zod-to-json-schema/parsers/union.js.map +1 -1
  911. package/dist/utils/zod-to-json-schema/parsers/unknown.cjs +2 -3
  912. package/dist/utils/zod-to-json-schema/parsers/unknown.cjs.map +1 -1
  913. package/dist/utils/zod-to-json-schema/parsers/unknown.d.ts +0 -2
  914. package/dist/utils/zod-to-json-schema/parsers/unknown.d.ts.map +1 -1
  915. package/dist/utils/zod-to-json-schema/parsers/unknown.js +1 -2
  916. package/dist/utils/zod-to-json-schema/parsers/unknown.js.map +1 -1
  917. package/dist/utils/zod-to-json-schema/selectParser.cjs +32 -33
  918. package/dist/utils/zod-to-json-schema/selectParser.cjs.map +1 -1
  919. package/dist/utils/zod-to-json-schema/selectParser.d.ts +0 -2
  920. package/dist/utils/zod-to-json-schema/selectParser.js +1 -2
  921. package/dist/utils/zod-to-json-schema/selectParser.js.map +1 -1
  922. package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs +4 -5
  923. package/dist/utils/zod-to-json-schema/zodToJsonSchema.cjs.map +1 -1
  924. package/dist/utils/zod-to-json-schema/zodToJsonSchema.d.ts +1 -3
  925. package/dist/utils/zod-to-json-schema/zodToJsonSchema.js +1 -2
  926. package/dist/utils/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
  927. package/dist/vectorstores.cjs +10 -11
  928. package/dist/vectorstores.cjs.map +1 -1
  929. package/dist/vectorstores.js +1 -2
  930. package/dist/vectorstores.js.map +1 -1
  931. package/package.json +1 -1
  932. package/agents.cjs +0 -1
  933. package/agents.d.cts +0 -1
  934. package/agents.d.ts +0 -1
  935. package/agents.js +0 -1
  936. package/caches.cjs +0 -1
  937. package/caches.d.cts +0 -1
  938. package/caches.d.ts +0 -1
  939. package/caches.js +0 -1
  940. package/callbacks/base.cjs +0 -1
  941. package/callbacks/base.d.cts +0 -1
  942. package/callbacks/base.d.ts +0 -1
  943. package/callbacks/base.js +0 -1
  944. package/callbacks/dispatch/web.cjs +0 -1
  945. package/callbacks/dispatch/web.d.cts +0 -1
  946. package/callbacks/dispatch/web.d.ts +0 -1
  947. package/callbacks/dispatch/web.js +0 -1
  948. package/callbacks/dispatch.cjs +0 -1
  949. package/callbacks/dispatch.d.cts +0 -1
  950. package/callbacks/dispatch.d.ts +0 -1
  951. package/callbacks/dispatch.js +0 -1
  952. package/callbacks/manager.cjs +0 -1
  953. package/callbacks/manager.d.cts +0 -1
  954. package/callbacks/manager.d.ts +0 -1
  955. package/callbacks/manager.js +0 -1
  956. package/callbacks/promises.cjs +0 -1
  957. package/callbacks/promises.d.cts +0 -1
  958. package/callbacks/promises.d.ts +0 -1
  959. package/callbacks/promises.js +0 -1
  960. package/chat_history.cjs +0 -1
  961. package/chat_history.d.cts +0 -1
  962. package/chat_history.d.ts +0 -1
  963. package/chat_history.js +0 -1
  964. package/context.cjs +0 -1
  965. package/context.d.cts +0 -1
  966. package/context.d.ts +0 -1
  967. package/context.js +0 -1
  968. package/document_loaders/base.cjs +0 -1
  969. package/document_loaders/base.d.cts +0 -1
  970. package/document_loaders/base.d.ts +0 -1
  971. package/document_loaders/base.js +0 -1
  972. package/document_loaders/langsmith.cjs +0 -1
  973. package/document_loaders/langsmith.d.cts +0 -1
  974. package/document_loaders/langsmith.d.ts +0 -1
  975. package/document_loaders/langsmith.js +0 -1
  976. package/documents.cjs +0 -1
  977. package/documents.d.cts +0 -1
  978. package/documents.d.ts +0 -1
  979. package/documents.js +0 -1
  980. package/embeddings.cjs +0 -1
  981. package/embeddings.d.cts +0 -1
  982. package/embeddings.d.ts +0 -1
  983. package/embeddings.js +0 -1
  984. package/errors.cjs +0 -1
  985. package/errors.d.cts +0 -1
  986. package/errors.d.ts +0 -1
  987. package/errors.js +0 -1
  988. package/example_selectors.cjs +0 -1
  989. package/example_selectors.d.cts +0 -1
  990. package/example_selectors.d.ts +0 -1
  991. package/example_selectors.js +0 -1
  992. package/indexing.cjs +0 -1
  993. package/indexing.d.cts +0 -1
  994. package/indexing.d.ts +0 -1
  995. package/indexing.js +0 -1
  996. package/language_models/base.cjs +0 -1
  997. package/language_models/base.d.cts +0 -1
  998. package/language_models/base.d.ts +0 -1
  999. package/language_models/base.js +0 -1
  1000. package/language_models/chat_models.cjs +0 -1
  1001. package/language_models/chat_models.d.cts +0 -1
  1002. package/language_models/chat_models.d.ts +0 -1
  1003. package/language_models/chat_models.js +0 -1
  1004. package/language_models/llms.cjs +0 -1
  1005. package/language_models/llms.d.cts +0 -1
  1006. package/language_models/llms.d.ts +0 -1
  1007. package/language_models/llms.js +0 -1
  1008. package/language_models/profile.cjs +0 -1
  1009. package/language_models/profile.d.cts +0 -1
  1010. package/language_models/profile.d.ts +0 -1
  1011. package/language_models/profile.js +0 -1
  1012. package/language_models/structured_output.cjs +0 -1
  1013. package/language_models/structured_output.d.cts +0 -1
  1014. package/language_models/structured_output.d.ts +0 -1
  1015. package/language_models/structured_output.js +0 -1
  1016. package/load/serializable.cjs +0 -1
  1017. package/load/serializable.d.cts +0 -1
  1018. package/load/serializable.d.ts +0 -1
  1019. package/load/serializable.js +0 -1
  1020. package/load.cjs +0 -1
  1021. package/load.d.cts +0 -1
  1022. package/load.d.ts +0 -1
  1023. package/load.js +0 -1
  1024. package/memory.cjs +0 -1
  1025. package/memory.d.cts +0 -1
  1026. package/memory.d.ts +0 -1
  1027. package/memory.js +0 -1
  1028. package/messages/tool.cjs +0 -1
  1029. package/messages/tool.d.cts +0 -1
  1030. package/messages/tool.d.ts +0 -1
  1031. package/messages/tool.js +0 -1
  1032. package/messages.cjs +0 -1
  1033. package/messages.d.cts +0 -1
  1034. package/messages.d.ts +0 -1
  1035. package/messages.js +0 -1
  1036. package/output_parsers/openai_functions.cjs +0 -1
  1037. package/output_parsers/openai_functions.d.cts +0 -1
  1038. package/output_parsers/openai_functions.d.ts +0 -1
  1039. package/output_parsers/openai_functions.js +0 -1
  1040. package/output_parsers/openai_tools.cjs +0 -1
  1041. package/output_parsers/openai_tools.d.cts +0 -1
  1042. package/output_parsers/openai_tools.d.ts +0 -1
  1043. package/output_parsers/openai_tools.js +0 -1
  1044. package/output_parsers.cjs +0 -1
  1045. package/output_parsers.d.cts +0 -1
  1046. package/output_parsers.d.ts +0 -1
  1047. package/output_parsers.js +0 -1
  1048. package/outputs.cjs +0 -1
  1049. package/outputs.d.cts +0 -1
  1050. package/outputs.d.ts +0 -1
  1051. package/outputs.js +0 -1
  1052. package/prompt_values.cjs +0 -1
  1053. package/prompt_values.d.cts +0 -1
  1054. package/prompt_values.d.ts +0 -1
  1055. package/prompt_values.js +0 -1
  1056. package/prompts.cjs +0 -1
  1057. package/prompts.d.cts +0 -1
  1058. package/prompts.d.ts +0 -1
  1059. package/prompts.js +0 -1
  1060. package/retrievers/document_compressors.cjs +0 -1
  1061. package/retrievers/document_compressors.d.cts +0 -1
  1062. package/retrievers/document_compressors.d.ts +0 -1
  1063. package/retrievers/document_compressors.js +0 -1
  1064. package/retrievers.cjs +0 -1
  1065. package/retrievers.d.cts +0 -1
  1066. package/retrievers.d.ts +0 -1
  1067. package/retrievers.js +0 -1
  1068. package/runnables/graph.cjs +0 -1
  1069. package/runnables/graph.d.cts +0 -1
  1070. package/runnables/graph.d.ts +0 -1
  1071. package/runnables/graph.js +0 -1
  1072. package/runnables.cjs +0 -1
  1073. package/runnables.d.cts +0 -1
  1074. package/runnables.d.ts +0 -1
  1075. package/runnables.js +0 -1
  1076. package/singletons.cjs +0 -1
  1077. package/singletons.d.cts +0 -1
  1078. package/singletons.d.ts +0 -1
  1079. package/singletons.js +0 -1
  1080. package/stores.cjs +0 -1
  1081. package/stores.d.cts +0 -1
  1082. package/stores.d.ts +0 -1
  1083. package/stores.js +0 -1
  1084. package/structured_query.cjs +0 -1
  1085. package/structured_query.d.cts +0 -1
  1086. package/structured_query.d.ts +0 -1
  1087. package/structured_query.js +0 -1
  1088. package/tools.cjs +0 -1
  1089. package/tools.d.cts +0 -1
  1090. package/tools.d.ts +0 -1
  1091. package/tools.js +0 -1
  1092. package/tracers/base.cjs +0 -1
  1093. package/tracers/base.d.cts +0 -1
  1094. package/tracers/base.d.ts +0 -1
  1095. package/tracers/base.js +0 -1
  1096. package/tracers/console.cjs +0 -1
  1097. package/tracers/console.d.cts +0 -1
  1098. package/tracers/console.d.ts +0 -1
  1099. package/tracers/console.js +0 -1
  1100. package/tracers/log_stream.cjs +0 -1
  1101. package/tracers/log_stream.d.cts +0 -1
  1102. package/tracers/log_stream.d.ts +0 -1
  1103. package/tracers/log_stream.js +0 -1
  1104. package/tracers/run_collector.cjs +0 -1
  1105. package/tracers/run_collector.d.cts +0 -1
  1106. package/tracers/run_collector.d.ts +0 -1
  1107. package/tracers/run_collector.js +0 -1
  1108. package/tracers/tracer_langchain.cjs +0 -1
  1109. package/tracers/tracer_langchain.d.cts +0 -1
  1110. package/tracers/tracer_langchain.d.ts +0 -1
  1111. package/tracers/tracer_langchain.js +0 -1
  1112. package/types/stream.cjs +0 -1
  1113. package/types/stream.d.cts +0 -1
  1114. package/types/stream.d.ts +0 -1
  1115. package/types/stream.js +0 -1
  1116. package/utils/async_caller.cjs +0 -1
  1117. package/utils/async_caller.d.cts +0 -1
  1118. package/utils/async_caller.d.ts +0 -1
  1119. package/utils/async_caller.js +0 -1
  1120. package/utils/chunk_array.cjs +0 -1
  1121. package/utils/chunk_array.d.cts +0 -1
  1122. package/utils/chunk_array.d.ts +0 -1
  1123. package/utils/chunk_array.js +0 -1
  1124. package/utils/context.cjs +0 -1
  1125. package/utils/context.d.cts +0 -1
  1126. package/utils/context.d.ts +0 -1
  1127. package/utils/context.js +0 -1
  1128. package/utils/env.cjs +0 -1
  1129. package/utils/env.d.cts +0 -1
  1130. package/utils/env.d.ts +0 -1
  1131. package/utils/env.js +0 -1
  1132. package/utils/event_source_parse.cjs +0 -1
  1133. package/utils/event_source_parse.d.cts +0 -1
  1134. package/utils/event_source_parse.d.ts +0 -1
  1135. package/utils/event_source_parse.js +0 -1
  1136. package/utils/format.cjs +0 -1
  1137. package/utils/format.d.cts +0 -1
  1138. package/utils/format.d.ts +0 -1
  1139. package/utils/format.js +0 -1
  1140. package/utils/function_calling.cjs +0 -1
  1141. package/utils/function_calling.d.cts +0 -1
  1142. package/utils/function_calling.d.ts +0 -1
  1143. package/utils/function_calling.js +0 -1
  1144. package/utils/hash.cjs +0 -1
  1145. package/utils/hash.d.cts +0 -1
  1146. package/utils/hash.d.ts +0 -1
  1147. package/utils/hash.js +0 -1
  1148. package/utils/json_patch.cjs +0 -1
  1149. package/utils/json_patch.d.cts +0 -1
  1150. package/utils/json_patch.d.ts +0 -1
  1151. package/utils/json_patch.js +0 -1
  1152. package/utils/json_schema.cjs +0 -1
  1153. package/utils/json_schema.d.cts +0 -1
  1154. package/utils/json_schema.d.ts +0 -1
  1155. package/utils/json_schema.js +0 -1
  1156. package/utils/math.cjs +0 -1
  1157. package/utils/math.d.cts +0 -1
  1158. package/utils/math.d.ts +0 -1
  1159. package/utils/math.js +0 -1
  1160. package/utils/ssrf.cjs +0 -1
  1161. package/utils/ssrf.d.cts +0 -1
  1162. package/utils/ssrf.d.ts +0 -1
  1163. package/utils/ssrf.js +0 -1
  1164. package/utils/standard_schema.cjs +0 -1
  1165. package/utils/standard_schema.d.cts +0 -1
  1166. package/utils/standard_schema.d.ts +0 -1
  1167. package/utils/standard_schema.js +0 -1
  1168. package/utils/stream.cjs +0 -1
  1169. package/utils/stream.d.cts +0 -1
  1170. package/utils/stream.d.ts +0 -1
  1171. package/utils/stream.js +0 -1
  1172. package/utils/testing.cjs +0 -1
  1173. package/utils/testing.d.cts +0 -1
  1174. package/utils/testing.d.ts +0 -1
  1175. package/utils/testing.js +0 -1
  1176. package/utils/tiktoken.cjs +0 -1
  1177. package/utils/tiktoken.d.cts +0 -1
  1178. package/utils/tiktoken.d.ts +0 -1
  1179. package/utils/tiktoken.js +0 -1
  1180. package/utils/types.cjs +0 -1
  1181. package/utils/types.d.cts +0 -1
  1182. package/utils/types.d.ts +0 -1
  1183. package/utils/types.js +0 -1
  1184. package/vectorstores.cjs +0 -1
  1185. package/vectorstores.d.cts +0 -1
  1186. package/vectorstores.d.ts +0 -1
  1187. package/vectorstores.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["coreImportMap","defaultOptionalImportEntrypoints","optionalImportEntrypoints"],"sources":["../../src/load/index.ts"],"sourcesContent":["/**\n * Load LangChain objects from JSON strings or objects.\n *\n * **WARNING: `load()` deserializes data by instantiating classes and invoking\n * constructors. Never call `load()` on untrusted or user-supplied input.**\n * Doing so can lead to insecure deserialization — including arbitrary class\n * instantiation, secret exfiltration, and server-side request forgery (SSRF).\n * Only deserialize data that originates from a trusted source you control.\n *\n * ## How it works\n *\n * Each `Serializable` LangChain object has a unique identifier (its \"class path\"),\n * which is a list of strings representing the module path and class name. For example:\n *\n * - `AIMessage` -> `[\"langchain_core\", \"messages\", \"ai\", \"AIMessage\"]`\n * - `ChatPromptTemplate` -> `[\"langchain_core\", \"prompts\", \"chat\", \"ChatPromptTemplate\"]`\n *\n * When deserializing, the class path is validated against supported namespaces.\n *\n * ## Security model\n *\n * The `secretsFromEnv` parameter controls whether secrets can be loaded from environment\n * variables:\n *\n * - `false` (default): Secrets must be provided in `secretsMap`. If a secret is not\n * found, `null` is returned instead of loading from environment variables.\n * - `true`: If a secret is not found in `secretsMap`, it will be loaded from\n * environment variables. Use this only in trusted environments.\n *\n * ### Hardening recommendations\n *\n * - **Never enable `secretsFromEnv`** unless the serialized data is fully trusted.\n * A crafted payload can reference arbitrary environment variable names, leaking\n * secrets to an attacker-controlled class constructor.\n * - **Keep `secretsMap` minimal.** Only include the specific secrets the serialized\n * object actually needs.\n * - **Keep `importMap` / `optionalImportsMap` as small and static as possible.**\n * Each entry widens the set of classes an attacker can instantiate. Never\n * populate these maps from user input.\n *\n * ### Injection protection (escape-based)\n *\n * During serialization, plain objects that contain an `'lc'` key are escaped by wrapping\n * them: `{\"__lc_escaped__\": {...}}`. During deserialization, escaped objects are unwrapped\n * and returned as plain objects, NOT instantiated as LC objects.\n *\n * This is an allowlist approach: only objects explicitly produced by\n * `Serializable.toJSON()` (which are NOT escaped) are treated as LC objects;\n * everything else is user data.\n *\n * @module\n */\n\nimport {\n Serializable,\n SerializedConstructor,\n SerializedNotImplemented,\n SerializedSecret,\n get_lc_unique_name,\n} from \"./serializable.js\";\nimport { optionalImportEntrypoints as defaultOptionalImportEntrypoints } from \"./import_constants.js\";\nimport * as coreImportMap from \"./import_map.js\";\nimport type { OptionalImportMap, SecretMap } from \"./import_type.js\";\nimport { type SerializedFields, keyFromJson, mapKeys } from \"./map_keys.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { isEscapedObject, unescapeValue } from \"./validation.js\";\n\n/**\n * Options for loading serialized LangChain objects.\n *\n * @remarks\n * **Security considerations:**\n *\n * Deserialization can instantiate arbitrary classes from the allowed namespaces.\n * When loading untrusted data, be aware that:\n *\n * 1. **`secretsFromEnv`**: Defaults to `false`. Setting to `true` allows the\n * deserializer to read environment variables, which could leak secrets if\n * the serialized data contains malicious secret references.\n *\n * 2. **`importMap` / `optionalImportsMap`**: These allow extending which classes\n * can be instantiated. Never populate these from user input. Only include\n * modules you explicitly trust.\n *\n * 3. **Class instantiation**: Allowed classes will have their constructors called\n * with the deserialized kwargs. If a class performs side effects in its\n * constructor (network calls, file I/O, etc.), those will execute.\n */\nexport interface LoadOptions {\n /**\n * A map of secrets to load. Keys are secret identifiers, values are the secret values.\n *\n * If a secret is not found in this map and `secretsFromEnv` is `false`, an error is\n * thrown. If `secretsFromEnv` is `true`, the secret will be loaded from environment\n * variables (if not found there either, an error is thrown).\n */\n secretsMap?: SecretMap;\n\n /**\n * Whether to load secrets from environment variables when not found in `secretsMap`.\n *\n * @default false\n *\n * @remarks\n * **Security warning:** Setting this to `true` allows the deserializer to read\n * environment variables, which could be a security risk if the serialized data\n * is not trusted. Only set this to `true` when deserializing data from trusted\n * sources (e.g., your own database, not user input).\n */\n secretsFromEnv?: boolean;\n\n /**\n * A map of optional imports. Keys are namespace paths (e.g., \"langchain_community/llms\"),\n * values are the imported modules.\n *\n * @remarks\n * **Security warning:** This extends which classes can be instantiated during\n * deserialization. Never populate this map with values derived from user input.\n * Only include modules that you explicitly trust and have reviewed.\n *\n * Classes in these modules can be instantiated with attacker-controlled kwargs\n * if the serialized data is untrusted.\n */\n optionalImportsMap?: OptionalImportMap;\n\n /**\n * Additional optional import entrypoints to allow beyond the defaults.\n *\n * @remarks\n * **Security warning:** This extends which namespace paths are considered valid\n * for deserialization. Never populate this array with values derived from user\n * input. Each entrypoint you add expands the attack surface for deserialization.\n */\n optionalImportEntrypoints?: string[];\n\n /**\n * Additional import map for the \"langchain\" namespace.\n *\n * @remarks\n * **Security warning:** This extends which classes can be instantiated during\n * deserialization. Never populate this map with values derived from user input.\n * Only include modules that you explicitly trust and have reviewed.\n *\n * Any class exposed through this map can be instantiated with attacker-controlled\n * kwargs if the serialized data is untrusted.\n */\n importMap?: Record<string, unknown>;\n\n /**\n * Maximum recursion depth allowed during deserialization.\n *\n * @default 50\n *\n * @remarks\n * This limit protects against denial-of-service attacks using deeply nested\n * JSON structures that could cause stack overflow. If your legitimate data\n * requires deeper nesting, you can increase this limit.\n */\n maxDepth?: number;\n}\n\n/**\n * Default maximum recursion depth for deserialization.\n * This provides protection against DoS attacks via deeply nested structures.\n */\nconst DEFAULT_MAX_DEPTH = 50;\n\nfunction combineAliasesAndInvert(constructor: typeof Serializable) {\n const aliases: { [key: string]: string } = {};\n for (\n let current = constructor;\n current && current.prototype;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current.prototype, \"lc_aliases\"));\n }\n return Object.entries(aliases).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n );\n}\n\ninterface ReviverContext {\n optionalImportsMap: OptionalImportMap;\n optionalImportEntrypoints: string[];\n secretsMap: SecretMap;\n secretsFromEnv: boolean;\n importMap: Record<string, unknown>;\n path: string[];\n depth: number;\n maxDepth: number;\n}\n\n/**\n * Recursively revive a value, handling escape markers and LC objects.\n *\n * This function handles:\n * 1. Escaped dicts - unwrapped and returned as plain objects\n * 2. LC secret objects - resolved from secretsMap or env\n * 3. LC constructor objects - instantiated\n * 4. Regular objects/arrays - recursed into\n */\nasync function reviver(this: ReviverContext, value: unknown): Promise<unknown> {\n const {\n optionalImportsMap,\n optionalImportEntrypoints,\n importMap,\n secretsMap,\n secretsFromEnv,\n path,\n depth,\n maxDepth,\n } = this;\n const pathStr = path.join(\".\");\n\n // Check recursion depth to prevent DoS via deeply nested structures\n if (depth > maxDepth) {\n throw new Error(\n `Maximum recursion depth (${maxDepth}) exceeded during deserialization. ` +\n `This may indicate a malicious payload or you may need to increase maxDepth.`\n );\n }\n\n // If not an object, return as-is\n if (typeof value !== \"object\" || value == null) {\n return value;\n }\n\n // Handle arrays - recurse into elements\n if (Array.isArray(value)) {\n return Promise.all(\n value.map((v, i) =>\n reviver.call({ ...this, path: [...path, `${i}`], depth: depth + 1 }, v)\n )\n );\n }\n\n // It's an object - check for escape marker FIRST\n const record = value as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // This is an escaped user object - unwrap and return as-is (no LC processing)\n return unescapeValue(record);\n }\n\n // Check for LC secret object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n record.lc === 1 &&\n record.type === \"secret\"\n ) {\n const serialized = record as unknown as SerializedSecret;\n const [key] = serialized.id;\n if (key in secretsMap) {\n return secretsMap[key as keyof SecretMap];\n } else if (secretsFromEnv) {\n const secretValueInEnv = getEnvironmentVariable(key);\n if (secretValueInEnv) {\n return secretValueInEnv;\n }\n }\n throw new Error(`Missing secret \"${key}\" at ${pathStr}`);\n }\n\n // Check for LC not_implemented object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n record.lc === 1 &&\n record.type === \"not_implemented\"\n ) {\n const serialized = record as unknown as SerializedNotImplemented;\n const str = JSON.stringify(serialized);\n throw new Error(\n `Trying to load an object that doesn't implement serialization: ${pathStr} -> ${str}`\n );\n }\n\n // Check for LC constructor object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n \"kwargs\" in record &&\n record.lc === 1 &&\n record.type === \"constructor\"\n ) {\n const serialized = record as unknown as SerializedConstructor;\n const str = JSON.stringify(serialized);\n const [name, ...namespaceReverse] = serialized.id.slice().reverse();\n const namespace = namespaceReverse.reverse();\n const importMaps = { langchain_core: coreImportMap, langchain: importMap };\n\n let module:\n | (typeof importMaps)[\"langchain_core\"][keyof (typeof importMaps)[\"langchain_core\"]]\n | (typeof importMaps)[\"langchain\"][keyof (typeof importMaps)[\"langchain\"]]\n | OptionalImportMap[keyof OptionalImportMap]\n | null = null;\n\n const optionalImportNamespaceAliases = [namespace.join(\"/\")];\n if (namespace[0] === \"langchain_community\") {\n optionalImportNamespaceAliases.push(\n [\"langchain\", ...namespace.slice(1)].join(\"/\")\n );\n }\n const matchingNamespaceAlias = optionalImportNamespaceAliases.find(\n (alias) => alias in optionalImportsMap\n );\n if (\n defaultOptionalImportEntrypoints\n .concat(optionalImportEntrypoints)\n .includes(namespace.join(\"/\")) ||\n matchingNamespaceAlias\n ) {\n if (matchingNamespaceAlias !== undefined) {\n module =\n await optionalImportsMap[\n matchingNamespaceAlias as keyof typeof optionalImportsMap\n ];\n } else {\n throw new Error(\n `Missing key \"${namespace.join(\n \"/\"\n )}\" for ${pathStr} in load(optionalImportsMap={})`\n );\n }\n } else {\n let finalImportMap:\n | (typeof importMaps)[\"langchain\"]\n | (typeof importMaps)[\"langchain_core\"];\n // Currently, we only support langchain and langchain_core imports.\n if (namespace[0] === \"langchain\" || namespace[0] === \"langchain_core\") {\n finalImportMap = importMaps[namespace[0]];\n namespace.shift();\n } else {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // The root namespace \"langchain\" is not a valid import.\n if (namespace.length === 0) {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // Find the longest matching namespace.\n let importMapKey: string;\n do {\n importMapKey = namespace.join(\"__\");\n if (importMapKey in finalImportMap) {\n break;\n } else {\n namespace.pop();\n }\n } while (namespace.length > 0);\n\n // If no matching namespace is found, throw an error.\n if (importMapKey in finalImportMap) {\n module = finalImportMap[importMapKey as keyof typeof finalImportMap];\n }\n }\n\n if (typeof module !== \"object\" || module === null) {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // Extract the builder from the import map.\n const builder =\n // look for a named export with the same name as the class\n module[name as keyof typeof module] ??\n // look for an export with a lc_name property matching the class name\n // this is necessary for classes that are minified\n Object.values(module).find(\n (v) =>\n typeof v === \"function\" &&\n get_lc_unique_name(v as typeof Serializable) === name\n );\n if (typeof builder !== \"function\") {\n throw new Error(`Invalid identifer: ${pathStr} -> ${str}`);\n }\n\n // Recurse on the arguments, which may be serialized objects themselves\n const kwargs = await reviver.call(\n { ...this, path: [...path, \"kwargs\"], depth: depth + 1 },\n serialized.kwargs\n );\n\n // Construct the object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const instance = new (builder as any)(\n mapKeys(\n kwargs as SerializedFields,\n keyFromJson,\n combineAliasesAndInvert(builder)\n )\n );\n\n // Minification in severless/edge runtimes will mange the\n // name of classes presented in traces. As the names in import map\n // are present as-is even with minification, use these names instead\n Object.defineProperty(instance.constructor, \"name\", { value: name });\n\n return instance;\n }\n\n // Regular object - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = await reviver.call(\n { ...this, path: [...path, key], depth: depth + 1 },\n val\n );\n }\n return result;\n}\n\n/**\n * Load a LangChain object from a JSON string.\n *\n * **WARNING — insecure deserialization risk.** This function instantiates\n * classes and invokes constructors based on the contents of `text`. If `text`\n * originates from an untrusted source, an attacker can craft a payload that\n * instantiates arbitrary allowed classes with attacker-controlled arguments,\n * potentially causing secret exfiltration, SSRF, or other side effects.\n *\n * Only call `load()` on data you have produced yourself or received from a\n * fully trusted origin (e.g., your own database). **Never deserialize\n * user-supplied or network-received JSON without independent validation.**\n *\n * @param text - The JSON string to parse and load.\n * @param options - Options for loading. See {@link LoadOptions} for security guidance.\n * @returns The loaded LangChain object.\n *\n * @example\n * ```typescript\n * import { load } from \"@langchain/core/load\";\n * import { AIMessage } from \"@langchain/core/messages\";\n *\n * // Basic usage - secrets must be provided explicitly\n * const msg = await load<AIMessage>(jsonString);\n *\n * // With secrets from a map (preferred over secretsFromEnv)\n * const msg = await load<AIMessage>(jsonString, {\n * secretsMap: { OPENAI_API_KEY: \"sk-...\" }\n * });\n *\n * // Allow loading secrets from environment — ONLY for fully trusted data\n * const msg = await load<AIMessage>(jsonString, {\n * secretsFromEnv: true\n * });\n * ```\n */\nexport async function load<T>(text: string, options?: LoadOptions): Promise<T> {\n const json = JSON.parse(text);\n\n const context: ReviverContext = {\n optionalImportsMap: options?.optionalImportsMap ?? {},\n optionalImportEntrypoints: options?.optionalImportEntrypoints ?? [],\n secretsMap: options?.secretsMap ?? {},\n secretsFromEnv: options?.secretsFromEnv ?? false,\n importMap: options?.importMap ?? {},\n path: [\"$\"],\n depth: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n };\n\n return reviver.call(context, json) as Promise<T>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["coreImportMap","defaultOptionalImportEntrypoints","optionalImportEntrypoints"],"sources":["../../src/load/index.ts"],"sourcesContent":["/**\n * Load LangChain objects from JSON strings or objects.\n *\n * **WARNING: `load()` deserializes data by instantiating classes and invoking\n * constructors. Never call `load()` on untrusted or user-supplied input.**\n * Doing so can lead to insecure deserialization — including arbitrary class\n * instantiation, secret exfiltration, and server-side request forgery (SSRF).\n * Only deserialize data that originates from a trusted source you control.\n *\n * ## How it works\n *\n * Each `Serializable` LangChain object has a unique identifier (its \"class path\"),\n * which is a list of strings representing the module path and class name. For example:\n *\n * - `AIMessage` -> `[\"langchain_core\", \"messages\", \"ai\", \"AIMessage\"]`\n * - `ChatPromptTemplate` -> `[\"langchain_core\", \"prompts\", \"chat\", \"ChatPromptTemplate\"]`\n *\n * When deserializing, the class path is validated against supported namespaces.\n *\n * ## Security model\n *\n * The `secretsFromEnv` parameter controls whether secrets can be loaded from environment\n * variables:\n *\n * - `false` (default): Secrets must be provided in `secretsMap`. If a secret is not\n * found, `null` is returned instead of loading from environment variables.\n * - `true`: If a secret is not found in `secretsMap`, it will be loaded from\n * environment variables. Use this only in trusted environments.\n *\n * ### Hardening recommendations\n *\n * - **Never enable `secretsFromEnv`** unless the serialized data is fully trusted.\n * A crafted payload can reference arbitrary environment variable names, leaking\n * secrets to an attacker-controlled class constructor.\n * - **Keep `secretsMap` minimal.** Only include the specific secrets the serialized\n * object actually needs.\n * - **Keep `importMap` / `optionalImportsMap` as small and static as possible.**\n * Each entry widens the set of classes an attacker can instantiate. Never\n * populate these maps from user input.\n *\n * ### Injection protection (escape-based)\n *\n * During serialization, plain objects that contain an `'lc'` key are escaped by wrapping\n * them: `{\"__lc_escaped__\": {...}}`. During deserialization, escaped objects are unwrapped\n * and returned as plain objects, NOT instantiated as LC objects.\n *\n * This is an allowlist approach: only objects explicitly produced by\n * `Serializable.toJSON()` (which are NOT escaped) are treated as LC objects;\n * everything else is user data.\n *\n * @module\n */\n\nimport {\n Serializable,\n SerializedConstructor,\n SerializedNotImplemented,\n SerializedSecret,\n get_lc_unique_name,\n} from \"./serializable.js\";\nimport { optionalImportEntrypoints as defaultOptionalImportEntrypoints } from \"./import_constants.js\";\nimport * as coreImportMap from \"./import_map.js\";\nimport type { OptionalImportMap, SecretMap } from \"./import_type.js\";\nimport { type SerializedFields, keyFromJson, mapKeys } from \"./map_keys.js\";\nimport { getEnvironmentVariable } from \"../utils/env.js\";\nimport { isEscapedObject, unescapeValue } from \"./validation.js\";\n\n/**\n * Options for loading serialized LangChain objects.\n *\n * @remarks\n * **Security considerations:**\n *\n * Deserialization can instantiate arbitrary classes from the allowed namespaces.\n * When loading untrusted data, be aware that:\n *\n * 1. **`secretsFromEnv`**: Defaults to `false`. Setting to `true` allows the\n * deserializer to read environment variables, which could leak secrets if\n * the serialized data contains malicious secret references.\n *\n * 2. **`importMap` / `optionalImportsMap`**: These allow extending which classes\n * can be instantiated. Never populate these from user input. Only include\n * modules you explicitly trust.\n *\n * 3. **Class instantiation**: Allowed classes will have their constructors called\n * with the deserialized kwargs. If a class performs side effects in its\n * constructor (network calls, file I/O, etc.), those will execute.\n */\nexport interface LoadOptions {\n /**\n * A map of secrets to load. Keys are secret identifiers, values are the secret values.\n *\n * If a secret is not found in this map and `secretsFromEnv` is `false`, an error is\n * thrown. If `secretsFromEnv` is `true`, the secret will be loaded from environment\n * variables (if not found there either, an error is thrown).\n */\n secretsMap?: SecretMap;\n\n /**\n * Whether to load secrets from environment variables when not found in `secretsMap`.\n *\n * @default false\n *\n * @remarks\n * **Security warning:** Setting this to `true` allows the deserializer to read\n * environment variables, which could be a security risk if the serialized data\n * is not trusted. Only set this to `true` when deserializing data from trusted\n * sources (e.g., your own database, not user input).\n */\n secretsFromEnv?: boolean;\n\n /**\n * A map of optional imports. Keys are namespace paths (e.g., \"langchain_community/llms\"),\n * values are the imported modules.\n *\n * @remarks\n * **Security warning:** This extends which classes can be instantiated during\n * deserialization. Never populate this map with values derived from user input.\n * Only include modules that you explicitly trust and have reviewed.\n *\n * Classes in these modules can be instantiated with attacker-controlled kwargs\n * if the serialized data is untrusted.\n */\n optionalImportsMap?: OptionalImportMap;\n\n /**\n * Additional optional import entrypoints to allow beyond the defaults.\n *\n * @remarks\n * **Security warning:** This extends which namespace paths are considered valid\n * for deserialization. Never populate this array with values derived from user\n * input. Each entrypoint you add expands the attack surface for deserialization.\n */\n optionalImportEntrypoints?: string[];\n\n /**\n * Additional import map for the \"langchain\" namespace.\n *\n * @remarks\n * **Security warning:** This extends which classes can be instantiated during\n * deserialization. Never populate this map with values derived from user input.\n * Only include modules that you explicitly trust and have reviewed.\n *\n * Any class exposed through this map can be instantiated with attacker-controlled\n * kwargs if the serialized data is untrusted.\n */\n importMap?: Record<string, unknown>;\n\n /**\n * Maximum recursion depth allowed during deserialization.\n *\n * @default 50\n *\n * @remarks\n * This limit protects against denial-of-service attacks using deeply nested\n * JSON structures that could cause stack overflow. If your legitimate data\n * requires deeper nesting, you can increase this limit.\n */\n maxDepth?: number;\n}\n\n/**\n * Default maximum recursion depth for deserialization.\n * This provides protection against DoS attacks via deeply nested structures.\n */\nconst DEFAULT_MAX_DEPTH = 50;\n\nfunction combineAliasesAndInvert(constructor: typeof Serializable) {\n const aliases: { [key: string]: string } = {};\n for (\n let current = constructor;\n current && current.prototype;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current.prototype, \"lc_aliases\"));\n }\n return Object.entries(aliases).reduce(\n (acc, [key, value]) => {\n acc[value] = key;\n return acc;\n },\n {} as Record<string, string>\n );\n}\n\ninterface ReviverContext {\n optionalImportsMap: OptionalImportMap;\n optionalImportEntrypoints: string[];\n secretsMap: SecretMap;\n secretsFromEnv: boolean;\n importMap: Record<string, unknown>;\n path: string[];\n depth: number;\n maxDepth: number;\n}\n\n/**\n * Recursively revive a value, handling escape markers and LC objects.\n *\n * This function handles:\n * 1. Escaped dicts - unwrapped and returned as plain objects\n * 2. LC secret objects - resolved from secretsMap or env\n * 3. LC constructor objects - instantiated\n * 4. Regular objects/arrays - recursed into\n */\nasync function reviver(this: ReviverContext, value: unknown): Promise<unknown> {\n const {\n optionalImportsMap,\n optionalImportEntrypoints,\n importMap,\n secretsMap,\n secretsFromEnv,\n path,\n depth,\n maxDepth,\n } = this;\n const pathStr = path.join(\".\");\n\n // Check recursion depth to prevent DoS via deeply nested structures\n if (depth > maxDepth) {\n throw new Error(\n `Maximum recursion depth (${maxDepth}) exceeded during deserialization. ` +\n `This may indicate a malicious payload or you may need to increase maxDepth.`\n );\n }\n\n // If not an object, return as-is\n if (typeof value !== \"object\" || value == null) {\n return value;\n }\n\n // Handle arrays - recurse into elements\n if (Array.isArray(value)) {\n return Promise.all(\n value.map((v, i) =>\n reviver.call({ ...this, path: [...path, `${i}`], depth: depth + 1 }, v)\n )\n );\n }\n\n // It's an object - check for escape marker FIRST\n const record = value as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // This is an escaped user object - unwrap and return as-is (no LC processing)\n return unescapeValue(record);\n }\n\n // Check for LC secret object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n record.lc === 1 &&\n record.type === \"secret\"\n ) {\n const serialized = record as unknown as SerializedSecret;\n const [key] = serialized.id;\n if (key in secretsMap) {\n return secretsMap[key as keyof SecretMap];\n } else if (secretsFromEnv) {\n const secretValueInEnv = getEnvironmentVariable(key);\n if (secretValueInEnv) {\n return secretValueInEnv;\n }\n }\n throw new Error(`Missing secret \"${key}\" at ${pathStr}`);\n }\n\n // Check for LC not_implemented object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n record.lc === 1 &&\n record.type === \"not_implemented\"\n ) {\n const serialized = record as unknown as SerializedNotImplemented;\n const str = JSON.stringify(serialized);\n throw new Error(\n `Trying to load an object that doesn't implement serialization: ${pathStr} -> ${str}`\n );\n }\n\n // Check for LC constructor object\n if (\n \"lc\" in record &&\n \"type\" in record &&\n \"id\" in record &&\n \"kwargs\" in record &&\n record.lc === 1 &&\n record.type === \"constructor\"\n ) {\n const serialized = record as unknown as SerializedConstructor;\n const str = JSON.stringify(serialized);\n const [name, ...namespaceReverse] = serialized.id.slice().reverse();\n const namespace = namespaceReverse.reverse();\n const importMaps = { langchain_core: coreImportMap, langchain: importMap };\n\n let module:\n | (typeof importMaps)[\"langchain_core\"][keyof (typeof importMaps)[\"langchain_core\"]]\n | (typeof importMaps)[\"langchain\"][keyof (typeof importMaps)[\"langchain\"]]\n | OptionalImportMap[keyof OptionalImportMap]\n | null = null;\n\n const optionalImportNamespaceAliases = [namespace.join(\"/\")];\n if (namespace[0] === \"langchain_community\") {\n optionalImportNamespaceAliases.push(\n [\"langchain\", ...namespace.slice(1)].join(\"/\")\n );\n }\n const matchingNamespaceAlias = optionalImportNamespaceAliases.find(\n (alias) => alias in optionalImportsMap\n );\n if (\n defaultOptionalImportEntrypoints\n .concat(optionalImportEntrypoints)\n .includes(namespace.join(\"/\")) ||\n matchingNamespaceAlias\n ) {\n if (matchingNamespaceAlias !== undefined) {\n module =\n await optionalImportsMap[\n matchingNamespaceAlias as keyof typeof optionalImportsMap\n ];\n } else {\n throw new Error(\n `Missing key \"${namespace.join(\n \"/\"\n )}\" for ${pathStr} in load(optionalImportsMap={})`\n );\n }\n } else {\n let finalImportMap:\n | (typeof importMaps)[\"langchain\"]\n | (typeof importMaps)[\"langchain_core\"];\n // Currently, we only support langchain and langchain_core imports.\n if (namespace[0] === \"langchain\" || namespace[0] === \"langchain_core\") {\n finalImportMap = importMaps[namespace[0]];\n namespace.shift();\n } else {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // The root namespace \"langchain\" is not a valid import.\n if (namespace.length === 0) {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // Find the longest matching namespace.\n let importMapKey: string;\n do {\n importMapKey = namespace.join(\"__\");\n if (importMapKey in finalImportMap) {\n break;\n } else {\n namespace.pop();\n }\n } while (namespace.length > 0);\n\n // If no matching namespace is found, throw an error.\n if (importMapKey in finalImportMap) {\n module = finalImportMap[importMapKey as keyof typeof finalImportMap];\n }\n }\n\n if (typeof module !== \"object\" || module === null) {\n throw new Error(`Invalid namespace: ${pathStr} -> ${str}`);\n }\n\n // Extract the builder from the import map.\n const builder =\n // look for a named export with the same name as the class\n module[name as keyof typeof module] ??\n // look for an export with a lc_name property matching the class name\n // this is necessary for classes that are minified\n Object.values(module).find(\n (v) =>\n typeof v === \"function\" &&\n get_lc_unique_name(v as typeof Serializable) === name\n );\n if (typeof builder !== \"function\") {\n throw new Error(`Invalid identifer: ${pathStr} -> ${str}`);\n }\n\n // Recurse on the arguments, which may be serialized objects themselves\n const kwargs = await reviver.call(\n { ...this, path: [...path, \"kwargs\"], depth: depth + 1 },\n serialized.kwargs\n );\n\n // Construct the object\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const instance = new (builder as any)(\n mapKeys(\n kwargs as SerializedFields,\n keyFromJson,\n combineAliasesAndInvert(builder)\n )\n );\n\n // Minification in severless/edge runtimes will mange the\n // name of classes presented in traces. As the names in import map\n // are present as-is even with minification, use these names instead\n Object.defineProperty(instance.constructor, \"name\", { value: name });\n\n return instance;\n }\n\n // Regular object - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = await reviver.call(\n { ...this, path: [...path, key], depth: depth + 1 },\n val\n );\n }\n return result;\n}\n\n/**\n * Load a LangChain object from a JSON string.\n *\n * **WARNING — insecure deserialization risk.** This function instantiates\n * classes and invokes constructors based on the contents of `text`. If `text`\n * originates from an untrusted source, an attacker can craft a payload that\n * instantiates arbitrary allowed classes with attacker-controlled arguments,\n * potentially causing secret exfiltration, SSRF, or other side effects.\n *\n * Only call `load()` on data you have produced yourself or received from a\n * fully trusted origin (e.g., your own database). **Never deserialize\n * user-supplied or network-received JSON without independent validation.**\n *\n * @param text - The JSON string to parse and load.\n * @param options - Options for loading. See {@link LoadOptions} for security guidance.\n * @returns The loaded LangChain object.\n *\n * @example\n * ```typescript\n * import { load } from \"@langchain/core/load\";\n * import { AIMessage } from \"@langchain/core/messages\";\n *\n * // Basic usage - secrets must be provided explicitly\n * const msg = await load<AIMessage>(jsonString);\n *\n * // With secrets from a map (preferred over secretsFromEnv)\n * const msg = await load<AIMessage>(jsonString, {\n * secretsMap: { OPENAI_API_KEY: \"sk-...\" }\n * });\n *\n * // Allow loading secrets from environment — ONLY for fully trusted data\n * const msg = await load<AIMessage>(jsonString, {\n * secretsFromEnv: true\n * });\n * ```\n */\nexport async function load<T>(text: string, options?: LoadOptions): Promise<T> {\n const json = JSON.parse(text);\n\n const context: ReviverContext = {\n optionalImportsMap: options?.optionalImportsMap ?? {},\n optionalImportEntrypoints: options?.optionalImportEntrypoints ?? [],\n secretsMap: options?.secretsMap ?? {},\n secretsFromEnv: options?.secretsFromEnv ?? false,\n importMap: options?.importMap ?? {},\n path: [\"$\"],\n depth: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n };\n\n return reviver.call(context, json) as Promise<T>;\n}\n"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
2
2
  let decamelize = require("decamelize");
3
3
  decamelize = require_runtime.__toESM(decamelize);
4
4
  let camelcase = require("camelcase");
5
5
  camelcase = require_runtime.__toESM(camelcase);
6
-
7
6
  //#region src/load/map_keys.ts
8
7
  function keyToJson(key, map) {
9
8
  return map?.[key] || (0, decamelize.default)(key);
@@ -16,9 +15,9 @@ function mapKeys(fields, mapper, map) {
16
15
  for (const key in fields) if (Object.hasOwn(fields, key)) mapped[mapper(key, map)] = fields[key];
17
16
  return mapped;
18
17
  }
19
-
20
18
  //#endregion
21
19
  exports.keyFromJson = keyFromJson;
22
20
  exports.keyToJson = keyToJson;
23
21
  exports.mapKeys = mapKeys;
22
+
24
23
  //# sourceMappingURL=map_keys.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"map_keys.cjs","names":[],"sources":["../../src/load/map_keys.ts"],"sourcesContent":["import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,UAAU,KAAa,KAAkC;AACvE,QAAO,MAAM,gCAAkB,IAAI;;AAGrC,SAAgB,YAAY,KAAa,KAAkC;AACzE,QAAO,MAAM,+BAAkB,IAAI;;AAGrC,SAAgB,QACd,QACA,QACA,KACkB;CAClB,MAAM,SAA2B,EAAE;AAEnC,MAAK,MAAM,OAAO,OAChB,KAAI,OAAO,OAAO,QAAQ,IAAI,CAC5B,QAAO,OAAO,KAAK,IAAI,IAAI,OAAO;AAItC,QAAO"}
1
+ {"version":3,"file":"map_keys.cjs","names":[],"sources":["../../src/load/map_keys.ts"],"sourcesContent":["import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n"],"mappings":";;;;;;AAYA,SAAgB,UAAU,KAAa,KAAkC;AACvE,QAAO,MAAM,SAAA,GAAA,WAAA,SAAkB,IAAI;;AAGrC,SAAgB,YAAY,KAAa,KAAkC;AACzE,QAAO,MAAM,SAAA,GAAA,UAAA,SAAkB,IAAI;;AAGrC,SAAgB,QACd,QACA,QACA,KACkB;CAClB,MAAM,SAA2B,EAAE;AAEnC,MAAK,MAAM,OAAO,OAChB,KAAI,OAAO,OAAO,QAAQ,IAAI,CAC5B,QAAO,OAAO,KAAK,IAAI,IAAI,OAAO;AAItC,QAAO"}
@@ -1,6 +1,5 @@
1
1
  import snakeCase from "decamelize";
2
2
  import camelCase from "camelcase";
3
-
4
3
  //#region src/load/map_keys.ts
5
4
  function keyToJson(key, map) {
6
5
  return map?.[key] || snakeCase(key);
@@ -13,7 +12,7 @@ function mapKeys(fields, mapper, map) {
13
12
  for (const key in fields) if (Object.hasOwn(fields, key)) mapped[mapper(key, map)] = fields[key];
14
13
  return mapped;
15
14
  }
16
-
17
15
  //#endregion
18
16
  export { keyFromJson, keyToJson, mapKeys };
17
+
19
18
  //# sourceMappingURL=map_keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map_keys.js","names":[],"sources":["../../src/load/map_keys.ts"],"sourcesContent":["import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n"],"mappings":";;;;AAYA,SAAgB,UAAU,KAAa,KAAkC;AACvE,QAAO,MAAM,QAAQ,UAAU,IAAI;;AAGrC,SAAgB,YAAY,KAAa,KAAkC;AACzE,QAAO,MAAM,QAAQ,UAAU,IAAI;;AAGrC,SAAgB,QACd,QACA,QACA,KACkB;CAClB,MAAM,SAA2B,EAAE;AAEnC,MAAK,MAAM,OAAO,OAChB,KAAI,OAAO,OAAO,QAAQ,IAAI,CAC5B,QAAO,OAAO,KAAK,IAAI,IAAI,OAAO;AAItC,QAAO"}
1
+ {"version":3,"file":"map_keys.js","names":[],"sources":["../../src/load/map_keys.ts"],"sourcesContent":["import snakeCase from \"decamelize\";\nimport camelCase from \"camelcase\";\n\nexport interface SerializedFields {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n}\n\nexport interface SerializedKeyAlias {\n [key: string]: string;\n}\n\nexport function keyToJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || snakeCase(key);\n}\n\nexport function keyFromJson(key: string, map?: SerializedKeyAlias): string {\n return map?.[key] || camelCase(key);\n}\n\nexport function mapKeys(\n fields: SerializedFields,\n mapper: typeof keyToJson,\n map?: SerializedKeyAlias\n): SerializedFields {\n const mapped: SerializedFields = {};\n\n for (const key in fields) {\n if (Object.hasOwn(fields, key)) {\n mapped[mapper(key, map)] = fields[key];\n }\n }\n\n return mapped;\n}\n"],"mappings":";;;AAYA,SAAgB,UAAU,KAAa,KAAkC;AACvE,QAAO,MAAM,QAAQ,UAAU,IAAI;;AAGrC,SAAgB,YAAY,KAAa,KAAkC;AACzE,QAAO,MAAM,QAAQ,UAAU,IAAI;;AAGrC,SAAgB,QACd,QACA,QACA,KACkB;CAClB,MAAM,SAA2B,EAAE;AAEnC,MAAK,MAAM,OAAO,OAChB,KAAI,OAAO,OAAO,QAAQ,IAAI,CAC5B,QAAO,OAAO,KAAK,IAAI,IAAI,OAAO;AAItC,QAAO"}
@@ -1,8 +1,7 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
3
- const require_map_keys = require('./map_keys.cjs');
4
- const require_validation = require('./validation.cjs');
5
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
+ const require_map_keys = require("./map_keys.cjs");
4
+ const require_validation = require("./validation.cjs");
6
5
  //#region src/load/serializable.ts
7
6
  var serializable_exports = /* @__PURE__ */ require_runtime.__exportAll({
8
7
  Serializable: () => Serializable,
@@ -134,14 +133,14 @@ var Serializable = class Serializable {
134
133
  };
135
134
  }
136
135
  };
137
-
138
136
  //#endregion
139
137
  exports.Serializable = Serializable;
140
138
  exports.get_lc_unique_name = get_lc_unique_name;
141
- Object.defineProperty(exports, 'serializable_exports', {
142
- enumerable: true,
143
- get: function () {
144
- return serializable_exports;
145
- }
139
+ Object.defineProperty(exports, "serializable_exports", {
140
+ enumerable: true,
141
+ get: function() {
142
+ return serializable_exports;
143
+ }
146
144
  });
145
+
147
146
  //# sourceMappingURL=serializable.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializable.cjs","names":["escapeIfNeeded","mapKeys","keyToJson"],"sources":["../../src/load/serializable.ts"],"sourcesContent":["import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"serializable.cjs","names":["escapeIfNeeded","mapKeys","keyToJson"],"sources":["../../src/load/serializable.ts"],"sourcesContent":["import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { __exportAll } from "../_virtual/_rolldown/runtime.js";
2
2
  import { keyToJson, mapKeys } from "./map_keys.js";
3
3
  import { escapeIfNeeded } from "./validation.js";
4
-
5
4
  //#region src/load/serializable.ts
6
5
  var serializable_exports = /* @__PURE__ */ __exportAll({
7
6
  Serializable: () => Serializable,
@@ -133,7 +132,7 @@ var Serializable = class Serializable {
133
132
  };
134
133
  }
135
134
  };
136
-
137
135
  //#endregion
138
136
  export { Serializable, get_lc_unique_name, serializable_exports };
137
+
139
138
  //# sourceMappingURL=serializable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializable.js","names":[],"sources":["../../src/load/serializable.ts"],"sourcesContent":["import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"serializable.js","names":[],"sources":["../../src/load/serializable.ts"],"sourcesContent":["import { type SerializedFields, keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\nexport interface BaseSerialized<T extends string> {\n lc: number;\n type: T;\n id: string[];\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n graph?: Record<string, any>;\n}\n\nexport interface SerializedConstructor extends BaseSerialized<\"constructor\"> {\n kwargs: SerializedFields;\n}\n\nexport interface SerializedSecret extends BaseSerialized<\"secret\"> {}\n\nexport interface SerializedNotImplemented extends BaseSerialized<\"not_implemented\"> {}\n\nexport type Serialized =\n | SerializedConstructor\n | SerializedSecret\n | SerializedNotImplemented;\n\nfunction shallowCopy<T extends object>(obj: T): T {\n return Array.isArray(obj) ? ([...obj] as T) : ({ ...obj } as T);\n}\n\nfunction replaceSecrets(\n root: SerializedFields,\n secretsMap: { [key: string]: string }\n): SerializedFields {\n const result = shallowCopy(root);\n for (const [path, secretId] of Object.entries(secretsMap)) {\n const [last, ...partsReverse] = path.split(\".\").reverse();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = result;\n for (const part of partsReverse.reverse()) {\n if (current[part] === undefined) {\n break;\n }\n current[part] = shallowCopy(current[part]);\n current = current[part];\n }\n if (current[last] !== undefined) {\n current[last] = {\n lc: 1,\n type: \"secret\",\n id: [secretId],\n };\n }\n }\n return result;\n}\n\n/**\n * Get a unique name for the module, rather than parent class implementations.\n * Should not be subclassed, subclass lc_name above instead.\n */\nexport function get_lc_unique_name(\n serializableClass: typeof Serializable\n): string {\n // \"super\" here would refer to the parent class of Serializable,\n // when we want the parent class of the module actually calling this method.\n const parentClass = Object.getPrototypeOf(serializableClass);\n const lcNameIsSubclassed =\n typeof serializableClass.lc_name === \"function\" &&\n (typeof parentClass.lc_name !== \"function\" ||\n serializableClass.lc_name() !== parentClass.lc_name());\n if (lcNameIsSubclassed) {\n return serializableClass.lc_name();\n } else {\n return serializableClass.name;\n }\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\nexport interface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\nexport interface SerializableInterface {\n get lc_id(): string[];\n}\n\nexport abstract class Serializable implements SerializableInterface {\n lc_serializable = false;\n\n lc_kwargs: SerializedFields;\n\n /**\n * A path to the module that contains the class, eg. [\"langchain\", \"llms\"]\n * Usually should be the same as the entrypoint the class is exported from.\n */\n abstract lc_namespace: string[];\n\n /**\n * The name of the serializable. Override to provide an alias or\n * to preserve the serialized module name in minified environments.\n *\n * Implemented as a static method to support loading logic.\n */\n static lc_name(): string {\n return this.name;\n }\n\n /**\n * The final serialized identifier for the module.\n */\n get lc_id(): string[] {\n return [\n ...this.lc_namespace,\n get_lc_unique_name(this.constructor as typeof Serializable),\n ];\n }\n\n /**\n * A map of secrets, which will be omitted from serialization.\n * Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n * Values are the secret ids, which will be used when deserializing.\n */\n get lc_secrets(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A map of additional attributes to merge with constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the attribute values, which will be serialized.\n * These attributes need to be accepted by the constructor as arguments.\n */\n get lc_attributes(): SerializedFields | undefined {\n return undefined;\n }\n\n /**\n * A map of aliases for constructor args.\n * Keys are the attribute names, e.g. \"foo\".\n * Values are the alias that will replace the key in serialization.\n * This is used to eg. make argument names match Python.\n */\n get lc_aliases(): { [key: string]: string } | undefined {\n return undefined;\n }\n\n /**\n * A manual list of keys that should be serialized.\n * If not overridden, all fields passed into the constructor will be serialized.\n */\n get lc_serializable_keys(): string[] | undefined {\n return undefined;\n }\n\n constructor(kwargs?: SerializedFields, ..._args: never[]) {\n if (this.lc_serializable_keys !== undefined) {\n this.lc_kwargs = Object.fromEntries(\n Object.entries(kwargs || {}).filter(([key]) =>\n this.lc_serializable_keys?.includes(key)\n )\n );\n } else {\n this.lc_kwargs = kwargs ?? {};\n }\n }\n\n toJSON(): Serialized {\n if (!this.lc_serializable) {\n return this.toJSONNotImplemented();\n }\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n this.lc_kwargs instanceof Serializable ||\n typeof this.lc_kwargs !== \"object\" ||\n Array.isArray(this.lc_kwargs)\n ) {\n // We do not support serialization of classes with arg not a POJO\n // I'm aware the check above isn't as strict as it could be\n return this.toJSONNotImplemented();\n }\n\n const aliases: { [key: string]: string } = {};\n const secrets: { [key: string]: string } = {};\n const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n acc[key] = key in this ? this[key as keyof this] : this.lc_kwargs[key];\n return acc;\n }, {} as SerializedFields);\n // get secrets, attributes and aliases from all superclasses\n for (\n let current = Object.getPrototypeOf(this);\n current;\n current = Object.getPrototypeOf(current)\n ) {\n Object.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n Object.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n Object.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n }\n\n // include all secrets used, even if not in kwargs,\n // will be replaced with sentinel value in replaceSecrets\n Object.keys(secrets).forEach((keyPath) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let read: any = this;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let write: any = kwargs;\n\n const [last, ...partsReverse] = keyPath.split(\".\").reverse();\n for (const key of partsReverse.reverse()) {\n if (!(key in read) || read[key] === undefined) return;\n if (!(key in write) || write[key] === undefined) {\n if (typeof read[key] === \"object\" && read[key] != null) {\n write[key] = {};\n } else if (Array.isArray(read[key])) {\n write[key] = [];\n }\n }\n\n read = read[key];\n write = write[key];\n }\n\n if (last in read && read[last] !== undefined) {\n write[last] = write[last] || read[last];\n }\n });\n\n const escapedKwargs: SerializedFields = {};\n // Track current path to detect circular references (but not shared references)\n // The Serializable object itself stays in the path to detect self-references in kwargs\n const pathSet = new WeakSet<object>();\n pathSet.add(this);\n for (const [key, value] of Object.entries(kwargs)) {\n escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n }\n\n // Now add secret markers - these are added AFTER escaping so they won't be escaped\n const kwargsWithSecrets = Object.keys(secrets).length\n ? replaceSecrets(escapedKwargs, secrets)\n : escapedKwargs;\n\n // Finally transform keys to JSON format\n const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\n return {\n lc: 1,\n type: \"constructor\",\n id: this.lc_id,\n kwargs: processedKwargs,\n };\n }\n\n toJSONNotImplemented(): SerializedNotImplemented {\n return {\n lc: 1,\n type: \"not_implemented\",\n id: this.lc_id,\n };\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
-
2
1
  //#region src/load/validation.ts
3
2
  /**
4
3
  * Sentinel key used to mark escaped user objects during serialization.
@@ -15,7 +14,7 @@ const LC_ESCAPED_KEY = "__lc_escaped__";
15
14
  * 2. It has only the escape key (would be mistaken for an escaped object)
16
15
  */
17
16
  function needsEscaping(obj) {
18
- return "lc" in obj || Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;
17
+ return "lc" in obj || Object.keys(obj).length === 1 && "__lc_escaped__" in obj;
19
18
  }
20
19
  /**
21
20
  * Wrap an object in the escape marker.
@@ -37,7 +36,7 @@ function escapeObject(obj) {
37
36
  * ```
38
37
  */
39
38
  function isEscapedObject(obj) {
40
- return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;
39
+ return Object.keys(obj).length === 1 && "__lc_escaped__" in obj;
41
40
  }
42
41
  /**
43
42
  * Check if an object looks like a Serializable instance (duck typing).
@@ -113,9 +112,9 @@ function unescapeValue(obj) {
113
112
  if (Array.isArray(obj)) return obj.map((item) => unescapeValue(item));
114
113
  return obj;
115
114
  }
116
-
117
115
  //#endregion
118
116
  exports.escapeIfNeeded = escapeIfNeeded;
119
117
  exports.isEscapedObject = isEscapedObject;
120
118
  exports.unescapeValue = unescapeValue;
119
+
121
120
  //# sourceMappingURL=validation.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.cjs","names":[],"sources":["../../src/load/validation.ts"],"sourcesContent":["/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n"],"mappings":";;;;;;;;AAMA,MAAa,iBAAiB;;;;;;;;AAS9B,SAAgB,cAAc,KAAuC;AACnE,QACE,QAAQ,OAAQ,OAAO,KAAK,IAAI,CAAC,WAAW,KAAK,kBAAkB;;;;;;;;;;AAYvE,SAAgB,aACd,KACyB;AACzB,QAAO,GAAG,iBAAiB,KAAK;;;;;;;;;;AAWlC,SAAgB,gBAAgB,KAAuC;AACrE,QAAO,OAAO,KAAK,IAAI,CAAC,WAAW,KAAK,kBAAkB;;;;;AAqB5D,SAAS,mBAAmB,KAAuC;AACjE,QACE,QAAQ,QACR,OAAO,QAAQ,YACf,qBAAqB,OACrB,OAAQ,IAAyB,WAAW;;;;;AAOhD,SAAS,qBAAqB,KAI5B;CACA,IAAI;AACJ,KAAI,QAAQ,QAAQ,OAAO,QAAQ,SACjC,KAAI,WAAW,OAAO,MAAM,QAAQ,IAAI,MAAM,CAC5C,MAAK,IAAI;KAET,MAAK,CAAC,IAAI,aAAa,QAAQ,SAAS;KAG1C,MAAK,CAAC,OAAO,IAAI;AAEnB,QAAO;EACL,IAAI;EACJ,MAAM;EACN;EACD;;;;;;;;;;;;;;;AAqIH,SAAgB,eACd,OACA,0BAA2B,IAAI,SAAS,EAC/B;AACT,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;AAExE,MAAI,QAAQ,IAAI,MAAM,CAEpB,QAAO,qBAAqB,MAAM;AAKpC,MAAI,mBAAmB,MAAM,CAC3B,QAAO;AAIT,UAAQ,IAAI,MAAM;EAElB,MAAM,SAAS;AAIf,MAAI,cAAc,OAAO,EAAE;AAEzB,WAAQ,OAAO,MAAM;AACrB,UAAO,aAAa,OAAO;;EAG7B,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,OAAO,CAC7C,QAAO,OAAO,eAAe,KAAK,QAAQ;AAG5C,UAAQ,OAAO,MAAM;AACrB,SAAO;;AAGT,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,SAAS,eAAe,MAAM,QAAQ,CAAC;AAG3D,QAAO;;;;;;;;;;;;;;AAeT,SAAgB,cAAc,KAAuB;AACnD,KAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,EAAE;EAClE,MAAM,SAAS;AACf,MAAI,gBAAgB,OAAO,CAIzB,QAAO,OAAO;EAIhB,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,QAAO,OAAO,cAAc,MAAM;AAEpC,SAAO;;AAGT,KAAI,MAAM,QAAQ,IAAI,CACpB,QAAO,IAAI,KAAK,SAAS,cAAc,KAAK,CAAC;AAG/C,QAAO"}
1
+ {"version":3,"file":"validation.cjs","names":[],"sources":["../../src/load/validation.ts"],"sourcesContent":["/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n"],"mappings":";;;;;;;AAMA,MAAa,iBAAiB;;;;;;;;AAS9B,SAAgB,cAAc,KAAuC;AACnE,QACE,QAAQ,OAAQ,OAAO,KAAK,IAAI,CAAC,WAAW,KAAA,oBAAuB;;;;;;;;;;AAYvE,SAAgB,aACd,KACyB;AACzB,QAAO,GAAG,iBAAiB,KAAK;;;;;;;;;;AAWlC,SAAgB,gBAAgB,KAAuC;AACrE,QAAO,OAAO,KAAK,IAAI,CAAC,WAAW,KAAA,oBAAuB;;;;;AAqB5D,SAAS,mBAAmB,KAAuC;AACjE,QACE,QAAQ,QACR,OAAO,QAAQ,YACf,qBAAqB,OACrB,OAAQ,IAAyB,WAAW;;;;;AAOhD,SAAS,qBAAqB,KAI5B;CACA,IAAI;AACJ,KAAI,QAAQ,QAAQ,OAAO,QAAQ,SACjC,KAAI,WAAW,OAAO,MAAM,QAAQ,IAAI,MAAM,CAC5C,MAAK,IAAI;KAET,MAAK,CAAC,IAAI,aAAa,QAAQ,SAAS;KAG1C,MAAK,CAAC,OAAO,IAAI;AAEnB,QAAO;EACL,IAAI;EACJ,MAAM;EACN;EACD;;;;;;;;;;;;;;;AAqIH,SAAgB,eACd,OACA,0BAA2B,IAAI,SAAS,EAC/B;AACT,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;AAExE,MAAI,QAAQ,IAAI,MAAM,CAEpB,QAAO,qBAAqB,MAAM;AAKpC,MAAI,mBAAmB,MAAM,CAC3B,QAAO;AAIT,UAAQ,IAAI,MAAM;EAElB,MAAM,SAAS;AAIf,MAAI,cAAc,OAAO,EAAE;AAEzB,WAAQ,OAAO,MAAM;AACrB,UAAO,aAAa,OAAO;;EAG7B,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,OAAO,CAC7C,QAAO,OAAO,eAAe,KAAK,QAAQ;AAG5C,UAAQ,OAAO,MAAM;AACrB,SAAO;;AAGT,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,SAAS,eAAe,MAAM,QAAQ,CAAC;AAG3D,QAAO;;;;;;;;;;;;;;AAeT,SAAgB,cAAc,KAAuB;AACnD,KAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,EAAE;EAClE,MAAM,SAAS;AACf,MAAI,gBAAgB,OAAO,CAIzB,QAAO,OAAO;EAIhB,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,QAAO,OAAO,cAAc,MAAM;AAEpC,SAAO;;AAGT,KAAI,MAAM,QAAQ,IAAI,CACpB,QAAO,IAAI,KAAK,SAAS,cAAc,KAAK,CAAC;AAG/C,QAAO"}
@@ -14,7 +14,7 @@ const LC_ESCAPED_KEY = "__lc_escaped__";
14
14
  * 2. It has only the escape key (would be mistaken for an escaped object)
15
15
  */
16
16
  function needsEscaping(obj) {
17
- return "lc" in obj || Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;
17
+ return "lc" in obj || Object.keys(obj).length === 1 && "__lc_escaped__" in obj;
18
18
  }
19
19
  /**
20
20
  * Wrap an object in the escape marker.
@@ -36,7 +36,7 @@ function escapeObject(obj) {
36
36
  * ```
37
37
  */
38
38
  function isEscapedObject(obj) {
39
- return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;
39
+ return Object.keys(obj).length === 1 && "__lc_escaped__" in obj;
40
40
  }
41
41
  /**
42
42
  * Check if an object looks like a Serializable instance (duck typing).
@@ -112,7 +112,7 @@ function unescapeValue(obj) {
112
112
  if (Array.isArray(obj)) return obj.map((item) => unescapeValue(item));
113
113
  return obj;
114
114
  }
115
-
116
115
  //#endregion
117
116
  export { escapeIfNeeded, isEscapedObject, unescapeValue };
117
+
118
118
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","names":[],"sources":["../../src/load/validation.ts"],"sourcesContent":["/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n"],"mappings":";;;;;;;AAMA,MAAa,iBAAiB;;;;;;;;AAS9B,SAAgB,cAAc,KAAuC;AACnE,QACE,QAAQ,OAAQ,OAAO,KAAK,IAAI,CAAC,WAAW,KAAK,kBAAkB;;;;;;;;;;AAYvE,SAAgB,aACd,KACyB;AACzB,QAAO,GAAG,iBAAiB,KAAK;;;;;;;;;;AAWlC,SAAgB,gBAAgB,KAAuC;AACrE,QAAO,OAAO,KAAK,IAAI,CAAC,WAAW,KAAK,kBAAkB;;;;;AAqB5D,SAAS,mBAAmB,KAAuC;AACjE,QACE,QAAQ,QACR,OAAO,QAAQ,YACf,qBAAqB,OACrB,OAAQ,IAAyB,WAAW;;;;;AAOhD,SAAS,qBAAqB,KAI5B;CACA,IAAI;AACJ,KAAI,QAAQ,QAAQ,OAAO,QAAQ,SACjC,KAAI,WAAW,OAAO,MAAM,QAAQ,IAAI,MAAM,CAC5C,MAAK,IAAI;KAET,MAAK,CAAC,IAAI,aAAa,QAAQ,SAAS;KAG1C,MAAK,CAAC,OAAO,IAAI;AAEnB,QAAO;EACL,IAAI;EACJ,MAAM;EACN;EACD;;;;;;;;;;;;;;;AAqIH,SAAgB,eACd,OACA,0BAA2B,IAAI,SAAS,EAC/B;AACT,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;AAExE,MAAI,QAAQ,IAAI,MAAM,CAEpB,QAAO,qBAAqB,MAAM;AAKpC,MAAI,mBAAmB,MAAM,CAC3B,QAAO;AAIT,UAAQ,IAAI,MAAM;EAElB,MAAM,SAAS;AAIf,MAAI,cAAc,OAAO,EAAE;AAEzB,WAAQ,OAAO,MAAM;AACrB,UAAO,aAAa,OAAO;;EAG7B,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,OAAO,CAC7C,QAAO,OAAO,eAAe,KAAK,QAAQ;AAG5C,UAAQ,OAAO,MAAM;AACrB,SAAO;;AAGT,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,SAAS,eAAe,MAAM,QAAQ,CAAC;AAG3D,QAAO;;;;;;;;;;;;;;AAeT,SAAgB,cAAc,KAAuB;AACnD,KAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,EAAE;EAClE,MAAM,SAAS;AACf,MAAI,gBAAgB,OAAO,CAIzB,QAAO,OAAO;EAIhB,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,QAAO,OAAO,cAAc,MAAM;AAEpC,SAAO;;AAGT,KAAI,MAAM,QAAQ,IAAI,CACpB,QAAO,IAAI,KAAK,SAAS,cAAc,KAAK,CAAC;AAG/C,QAAO"}
1
+ {"version":3,"file":"validation.js","names":[],"sources":["../../src/load/validation.ts"],"sourcesContent":["/**\n * Sentinel key used to mark escaped user objects during serialization.\n *\n * When a plain object contains 'lc' key (which could be confused with LC objects),\n * we wrap it as `{\"__lc_escaped__\": {...original...}}`.\n */\nexport const LC_ESCAPED_KEY = \"__lc_escaped__\";\n\n/**\n * Check if an object needs escaping to prevent confusion with LC objects.\n *\n * An object needs escaping if:\n * 1. It has an `'lc'` key (could be confused with LC serialization format)\n * 2. It has only the escape key (would be mistaken for an escaped object)\n */\nexport function needsEscaping(obj: Record<string, unknown>): boolean {\n return (\n \"lc\" in obj || (Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj)\n );\n}\n\n/**\n * Wrap an object in the escape marker.\n *\n * @example\n * ```typescript\n * {\"key\": \"value\"} // becomes {\"__lc_escaped__\": {\"key\": \"value\"}}\n * ```\n */\nexport function escapeObject(\n obj: Record<string, unknown>\n): Record<string, unknown> {\n return { [LC_ESCAPED_KEY]: obj };\n}\n\n/**\n * Check if an object is an escaped user object.\n *\n * @example\n * ```typescript\n * {\"__lc_escaped__\": {...}} // is an escaped object\n * ```\n */\nexport function isEscapedObject(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 1 && LC_ESCAPED_KEY in obj;\n}\n\n/**\n * Interface for objects that can be serialized.\n * This is a duck-typed interface to avoid circular imports.\n */\ninterface SerializableLike {\n lc_serializable: boolean;\n lc_secrets?: Record<string, string>;\n toJSON(): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n };\n}\n\n/**\n * Check if an object looks like a Serializable instance (duck typing).\n */\nfunction isSerializableLike(obj: unknown): obj is SerializableLike {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"lc_serializable\" in obj &&\n typeof (obj as SerializableLike).toJSON === \"function\"\n );\n}\n\n/**\n * Create a \"not_implemented\" serialization result for objects that cannot be serialized.\n */\nfunction createNotImplemented(obj: unknown): {\n lc: 1;\n type: \"not_implemented\";\n id: string[];\n} {\n let id: string[];\n if (obj !== null && typeof obj === \"object\") {\n if (\"lc_id\" in obj && Array.isArray(obj.lc_id)) {\n id = obj.lc_id as string[];\n } else {\n id = [obj.constructor?.name ?? \"Object\"];\n }\n } else {\n id = [typeof obj];\n }\n return {\n lc: 1,\n type: \"not_implemented\",\n id,\n };\n}\n\n/**\n * Serialize a value with escaping of user objects.\n *\n * Called recursively on kwarg values to escape any plain objects that could be\n * confused with LC objects.\n *\n * @param obj - The value to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The serialized value with user objects escaped as needed.\n */\nexport function serializeValue(\n obj: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(obj)) {\n return createNotImplemented(obj);\n }\n\n if (isSerializableLike(obj)) {\n // This is an LC object - serialize it properly (not escaped)\n return serializeLcObject(obj, pathSet);\n }\n\n // Add to path before processing children\n pathSet.add(obj);\n\n const record = obj as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n // This prevents re-escaping of already-escaped nested content.\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(obj);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = serializeValue(value, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(obj);\n return result;\n }\n\n if (Array.isArray(obj)) {\n // Arrays don't need circular reference tracking since they're handled by object tracking\n return obj.map((item) => serializeValue(item, pathSet));\n }\n\n if (\n typeof obj === \"string\" ||\n typeof obj === \"number\" ||\n typeof obj === \"boolean\" ||\n obj === null\n ) {\n return obj;\n }\n\n // Non-JSON-serializable object (Date, custom objects, etc.)\n return createNotImplemented(obj);\n}\n\n/**\n * Serialize a `Serializable` object with escaping of user data in kwargs.\n *\n * @param obj - The `Serializable` object to serialize.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * The Serializable object is kept in the path set to detect if it appears in its own kwargs.\n * @returns The serialized object with user data in kwargs escaped as needed.\n *\n * @remarks\n * Kwargs values are processed with `serializeValue` to escape user data (like\n * metadata) that contains `'lc'` keys. Secret fields (from `lc_secrets`) are\n * skipped because `toJSON()` replaces their values with secret markers.\n */\nexport function serializeLcObject(\n obj: SerializableLike,\n pathSet: WeakSet<object> = new WeakSet()\n): {\n lc: number;\n type: string;\n id: string[];\n kwargs?: Record<string, unknown>;\n} {\n // Add object to path set to detect if it appears in its own kwargs (circular reference)\n // Note: We intentionally don't remove this after processing because a Serializable\n // appearing in its own kwargs is always a circular reference that should be detected.\n pathSet.add(obj);\n\n // Secret fields are handled by toJSON() - it replaces values with secret markers\n const secretFields = new Set(Object.keys(obj.lc_secrets ?? {}));\n\n const serialized = { ...obj.toJSON() };\n\n // Process kwargs to escape user data that could be confused with LC objects\n // Skip secret fields - toJSON() already converted them to secret markers\n if (serialized.type === \"constructor\" && serialized.kwargs) {\n const newKwargs: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(serialized.kwargs)) {\n if (secretFields.has(key)) {\n newKwargs[key] = value;\n } else {\n newKwargs[key] = serializeValue(value, pathSet);\n }\n }\n serialized.kwargs = newKwargs;\n }\n\n return serialized;\n}\n\n/**\n * Escape a value if it needs escaping (contains `lc` key).\n *\n * This is a simpler version of `serializeValue` that doesn't handle Serializable\n * objects - it's meant to be called on kwargs values that have already been\n * processed by `toJSON()`.\n *\n * @param value - The value to potentially escape.\n * @param pathSet - WeakSet to track ancestor objects in the current path to detect circular references.\n * Objects are removed after processing to allow shared references (same object in\n * multiple places) while still detecting true circular references (ancestor in descendant).\n * @returns The value with any `lc`-containing objects wrapped in escape markers.\n */\nexport function escapeIfNeeded(\n value: unknown,\n pathSet: WeakSet<object> = new WeakSet()\n): unknown {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n // Check for circular reference - only if this object is an ancestor in the current path\n if (pathSet.has(value)) {\n // Replace circular reference with a not_implemented marker\n return createNotImplemented(value);\n }\n\n // Preserve Serializable objects - they have their own toJSON() that will be\n // called by JSON.stringify. We don't want to convert them to plain objects.\n if (isSerializableLike(value)) {\n return value;\n }\n\n // Add to path before processing children\n pathSet.add(value);\n\n const record = value as Record<string, unknown>;\n // Check if object needs escaping BEFORE recursing into values.\n // If it needs escaping, wrap it as-is - the contents are user data that\n // will be returned as-is during deserialization (no instantiation).\n if (needsEscaping(record)) {\n // Remove from path before returning (to allow shared references)\n pathSet.delete(value);\n return escapeObject(record);\n }\n // Safe object (no 'lc' key) - recurse into values\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n result[key] = escapeIfNeeded(val, pathSet);\n }\n // Remove from path after processing (to allow shared references in other branches)\n pathSet.delete(value);\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => escapeIfNeeded(item, pathSet));\n }\n\n return value;\n}\n\n/**\n * Unescape a value, processing escape markers in object values and arrays.\n *\n * When an escaped object is encountered (`{\"__lc_escaped__\": ...}`), it's\n * unwrapped and the contents are returned AS-IS (no further processing).\n * The contents represent user data that should not be modified.\n *\n * For regular objects and arrays, we recurse to find any nested escape markers.\n *\n * @param obj - The value to unescape.\n * @returns The unescaped value.\n */\nexport function unescapeValue(obj: unknown): unknown {\n if (obj !== null && typeof obj === \"object\" && !Array.isArray(obj)) {\n const record = obj as Record<string, unknown>;\n if (isEscapedObject(record)) {\n // Unwrap and return the user data as-is (no further unescaping).\n // The contents are user data that may contain more escape keys,\n // but those are part of the user's actual data.\n return record[LC_ESCAPED_KEY];\n }\n\n // Regular object - recurse into values to find nested escape markers\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(record)) {\n result[key] = unescapeValue(value);\n }\n return result;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => unescapeValue(item));\n }\n\n return obj;\n}\n"],"mappings":";;;;;;;AAMA,MAAa,iBAAiB;;;;;;;;AAS9B,SAAgB,cAAc,KAAuC;AACnE,QACE,QAAQ,OAAQ,OAAO,KAAK,IAAI,CAAC,WAAW,KAAA,oBAAuB;;;;;;;;;;AAYvE,SAAgB,aACd,KACyB;AACzB,QAAO,GAAG,iBAAiB,KAAK;;;;;;;;;;AAWlC,SAAgB,gBAAgB,KAAuC;AACrE,QAAO,OAAO,KAAK,IAAI,CAAC,WAAW,KAAA,oBAAuB;;;;;AAqB5D,SAAS,mBAAmB,KAAuC;AACjE,QACE,QAAQ,QACR,OAAO,QAAQ,YACf,qBAAqB,OACrB,OAAQ,IAAyB,WAAW;;;;;AAOhD,SAAS,qBAAqB,KAI5B;CACA,IAAI;AACJ,KAAI,QAAQ,QAAQ,OAAO,QAAQ,SACjC,KAAI,WAAW,OAAO,MAAM,QAAQ,IAAI,MAAM,CAC5C,MAAK,IAAI;KAET,MAAK,CAAC,IAAI,aAAa,QAAQ,SAAS;KAG1C,MAAK,CAAC,OAAO,IAAI;AAEnB,QAAO;EACL,IAAI;EACJ,MAAM;EACN;EACD;;;;;;;;;;;;;;;AAqIH,SAAgB,eACd,OACA,0BAA2B,IAAI,SAAS,EAC/B;AACT,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,EAAE;AAExE,MAAI,QAAQ,IAAI,MAAM,CAEpB,QAAO,qBAAqB,MAAM;AAKpC,MAAI,mBAAmB,MAAM,CAC3B,QAAO;AAIT,UAAQ,IAAI,MAAM;EAElB,MAAM,SAAS;AAIf,MAAI,cAAc,OAAO,EAAE;AAEzB,WAAQ,OAAO,MAAM;AACrB,UAAO,aAAa,OAAO;;EAG7B,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,OAAO,CAC7C,QAAO,OAAO,eAAe,KAAK,QAAQ;AAG5C,UAAQ,OAAO,MAAM;AACrB,SAAO;;AAGT,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,SAAS,eAAe,MAAM,QAAQ,CAAC;AAG3D,QAAO;;;;;;;;;;;;;;AAeT,SAAgB,cAAc,KAAuB;AACnD,KAAI,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,IAAI,EAAE;EAClE,MAAM,SAAS;AACf,MAAI,gBAAgB,OAAO,CAIzB,QAAO,OAAO;EAIhB,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,QAAO,OAAO,cAAc,MAAM;AAEpC,SAAO;;AAGT,KAAI,MAAM,QAAQ,IAAI,CACpB,QAAO,IAAI,KAAK,SAAS,cAAc,KAAK,CAAC;AAG/C,QAAO"}
package/dist/memory.cjs CHANGED
@@ -1,8 +1,6 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
3
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
2
  //#region src/memory.ts
5
- var memory_exports = /* @__PURE__ */ require_runtime.__exportAll({
3
+ var memory_exports = /* @__PURE__ */ require("./_virtual/_rolldown/runtime.cjs").__exportAll({
6
4
  BaseMemory: () => BaseMemory,
7
5
  getInputValue: () => getInputValue,
8
6
  getOutputValue: () => getOutputValue,
@@ -57,16 +55,16 @@ function getPromptInputKey(inputs, memoryVariables) {
57
55
  if (promptInputKeys.length !== 1) throw new Error(`One input key expected, but got ${promptInputKeys.length}`);
58
56
  return promptInputKeys[0];
59
57
  }
60
-
61
58
  //#endregion
62
59
  exports.BaseMemory = BaseMemory;
63
60
  exports.getInputValue = getInputValue;
64
61
  exports.getOutputValue = getOutputValue;
65
62
  exports.getPromptInputKey = getPromptInputKey;
66
- Object.defineProperty(exports, 'memory_exports', {
67
- enumerable: true,
68
- get: function () {
69
- return memory_exports;
70
- }
63
+ Object.defineProperty(exports, "memory_exports", {
64
+ enumerable: true,
65
+ get: function() {
66
+ return memory_exports;
67
+ }
71
68
  });
69
+
72
70
  //# sourceMappingURL=memory.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.cjs","names":[],"sources":["../src/memory.ts"],"sourcesContent":["/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the input values for a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues = Record<string, any>;\n\n/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the output values from a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputValues = Record<string, any>;\n\n/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the memory variables in a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type MemoryVariables = Record<string, any>;\n\n/**\n * Abstract base class for memory in LangChain's Chains. Memory refers to\n * the state in Chains. It can be used to store information about past\n * executions of a Chain and inject that information into the inputs of\n * future executions of the Chain.\n */\nexport abstract class BaseMemory {\n abstract get memoryKeys(): string[];\n\n /**\n * Abstract method that should take an object of input values and return a\n * Promise that resolves with an object of memory variables. The\n * implementation of this method should load the memory variables from the\n * provided input values.\n * @param values An object of input values.\n * @returns Promise that resolves with an object of memory variables.\n */\n abstract loadMemoryVariables(values: InputValues): Promise<MemoryVariables>;\n\n /**\n * Abstract method that should take two objects, one of input values and\n * one of output values, and return a Promise that resolves when the\n * context has been saved. The implementation of this method should save\n * the context based on the provided input and output values.\n * @param inputValues An object of input values.\n * @param outputValues An object of output values.\n * @returns Promise that resolves when the context has been saved.\n */\n abstract saveContext(\n inputValues: InputValues,\n outputValues: OutputValues\n ): Promise<void>;\n}\n\nconst getValue = (values: InputValues | OutputValues, key?: string) => {\n if (key !== undefined) {\n return values[key];\n }\n const keys = Object.keys(values);\n if (keys.length === 1) {\n return values[keys[0]];\n }\n};\n\n/**\n * This function is used by memory classes to select the input value\n * to use for the memory. If there is only one input value, it is used.\n * If there are multiple input values, the inputKey must be specified.\n */\nexport const getInputValue = (inputValues: InputValues, inputKey?: string) => {\n const value = getValue(inputValues, inputKey);\n if (!value) {\n const keys = Object.keys(inputValues);\n throw new Error(\n `input values have ${keys.length} keys, you must specify an input key or pass only 1 key as input`\n );\n }\n return value;\n};\n\n/**\n * This function is used by memory classes to select the output value\n * to use for the memory. If there is only one output value, it is used.\n * If there are multiple output values, the outputKey must be specified.\n * If no outputKey is specified, an error is thrown.\n */\nexport const getOutputValue = (\n outputValues: OutputValues,\n outputKey?: string\n) => {\n const value = getValue(outputValues, outputKey);\n if (!value && value !== \"\") {\n const keys = Object.keys(outputValues);\n throw new Error(\n `output values have ${keys.length} keys, you must specify an output key or pass only 1 key as output`\n );\n }\n return value;\n};\n\n/**\n * Function used by memory classes to get the key of the prompt input,\n * excluding any keys that are memory variables or the \"stop\" key. If\n * there is not exactly one prompt input key, an error is thrown.\n */\nexport function getPromptInputKey(\n inputs: Record<string, unknown>,\n memoryVariables: string[]\n): string {\n const promptInputKeys = Object.keys(inputs).filter(\n (key) => !memoryVariables.includes(key) && key !== \"stop\"\n );\n if (promptInputKeys.length !== 1) {\n throw new Error(\n `One input key expected, but got ${promptInputKeys.length}`\n );\n }\n return promptInputKeys[0];\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAsB,aAAtB,MAAiC;AA4BjC,MAAM,YAAY,QAAoC,QAAiB;AACrE,KAAI,QAAQ,OACV,QAAO,OAAO;CAEhB,MAAM,OAAO,OAAO,KAAK,OAAO;AAChC,KAAI,KAAK,WAAW,EAClB,QAAO,OAAO,KAAK;;;;;;;AASvB,MAAa,iBAAiB,aAA0B,aAAsB;CAC5E,MAAM,QAAQ,SAAS,aAAa,SAAS;AAC7C,KAAI,CAAC,OAAO;EACV,MAAM,OAAO,OAAO,KAAK,YAAY;AACrC,QAAM,IAAI,MACR,qBAAqB,KAAK,OAAO,kEAClC;;AAEH,QAAO;;;;;;;;AAST,MAAa,kBACX,cACA,cACG;CACH,MAAM,QAAQ,SAAS,cAAc,UAAU;AAC/C,KAAI,CAAC,SAAS,UAAU,IAAI;EAC1B,MAAM,OAAO,OAAO,KAAK,aAAa;AACtC,QAAM,IAAI,MACR,sBAAsB,KAAK,OAAO,oEACnC;;AAEH,QAAO;;;;;;;AAQT,SAAgB,kBACd,QACA,iBACQ;CACR,MAAM,kBAAkB,OAAO,KAAK,OAAO,CAAC,QACzC,QAAQ,CAAC,gBAAgB,SAAS,IAAI,IAAI,QAAQ,OACpD;AACD,KAAI,gBAAgB,WAAW,EAC7B,OAAM,IAAI,MACR,mCAAmC,gBAAgB,SACpD;AAEH,QAAO,gBAAgB"}
1
+ {"version":3,"file":"memory.cjs","names":[],"sources":["../src/memory.ts"],"sourcesContent":["/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the input values for a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InputValues = Record<string, any>;\n\n/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the output values from a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputValues = Record<string, any>;\n\n/**\n * Type alias for a record where the keys are strings and the values can\n * be any type. This is used to represent the memory variables in a Chain.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type MemoryVariables = Record<string, any>;\n\n/**\n * Abstract base class for memory in LangChain's Chains. Memory refers to\n * the state in Chains. It can be used to store information about past\n * executions of a Chain and inject that information into the inputs of\n * future executions of the Chain.\n */\nexport abstract class BaseMemory {\n abstract get memoryKeys(): string[];\n\n /**\n * Abstract method that should take an object of input values and return a\n * Promise that resolves with an object of memory variables. The\n * implementation of this method should load the memory variables from the\n * provided input values.\n * @param values An object of input values.\n * @returns Promise that resolves with an object of memory variables.\n */\n abstract loadMemoryVariables(values: InputValues): Promise<MemoryVariables>;\n\n /**\n * Abstract method that should take two objects, one of input values and\n * one of output values, and return a Promise that resolves when the\n * context has been saved. The implementation of this method should save\n * the context based on the provided input and output values.\n * @param inputValues An object of input values.\n * @param outputValues An object of output values.\n * @returns Promise that resolves when the context has been saved.\n */\n abstract saveContext(\n inputValues: InputValues,\n outputValues: OutputValues\n ): Promise<void>;\n}\n\nconst getValue = (values: InputValues | OutputValues, key?: string) => {\n if (key !== undefined) {\n return values[key];\n }\n const keys = Object.keys(values);\n if (keys.length === 1) {\n return values[keys[0]];\n }\n};\n\n/**\n * This function is used by memory classes to select the input value\n * to use for the memory. If there is only one input value, it is used.\n * If there are multiple input values, the inputKey must be specified.\n */\nexport const getInputValue = (inputValues: InputValues, inputKey?: string) => {\n const value = getValue(inputValues, inputKey);\n if (!value) {\n const keys = Object.keys(inputValues);\n throw new Error(\n `input values have ${keys.length} keys, you must specify an input key or pass only 1 key as input`\n );\n }\n return value;\n};\n\n/**\n * This function is used by memory classes to select the output value\n * to use for the memory. If there is only one output value, it is used.\n * If there are multiple output values, the outputKey must be specified.\n * If no outputKey is specified, an error is thrown.\n */\nexport const getOutputValue = (\n outputValues: OutputValues,\n outputKey?: string\n) => {\n const value = getValue(outputValues, outputKey);\n if (!value && value !== \"\") {\n const keys = Object.keys(outputValues);\n throw new Error(\n `output values have ${keys.length} keys, you must specify an output key or pass only 1 key as output`\n );\n }\n return value;\n};\n\n/**\n * Function used by memory classes to get the key of the prompt input,\n * excluding any keys that are memory variables or the \"stop\" key. If\n * there is not exactly one prompt input key, an error is thrown.\n */\nexport function getPromptInputKey(\n inputs: Record<string, unknown>,\n memoryVariables: string[]\n): string {\n const promptInputKeys = Object.keys(inputs).filter(\n (key) => !memoryVariables.includes(key) && key !== \"stop\"\n );\n if (promptInputKeys.length !== 1) {\n throw new Error(\n `One input key expected, but got ${promptInputKeys.length}`\n );\n }\n return promptInputKeys[0];\n}\n"],"mappings":";;;;;;;;;;;;;;AA2BA,IAAsB,aAAtB,MAAiC;AA4BjC,MAAM,YAAY,QAAoC,QAAiB;AACrE,KAAI,QAAQ,KAAA,EACV,QAAO,OAAO;CAEhB,MAAM,OAAO,OAAO,KAAK,OAAO;AAChC,KAAI,KAAK,WAAW,EAClB,QAAO,OAAO,KAAK;;;;;;;AASvB,MAAa,iBAAiB,aAA0B,aAAsB;CAC5E,MAAM,QAAQ,SAAS,aAAa,SAAS;AAC7C,KAAI,CAAC,OAAO;EACV,MAAM,OAAO,OAAO,KAAK,YAAY;AACrC,QAAM,IAAI,MACR,qBAAqB,KAAK,OAAO,kEAClC;;AAEH,QAAO;;;;;;;;AAST,MAAa,kBACX,cACA,cACG;CACH,MAAM,QAAQ,SAAS,cAAc,UAAU;AAC/C,KAAI,CAAC,SAAS,UAAU,IAAI;EAC1B,MAAM,OAAO,OAAO,KAAK,aAAa;AACtC,QAAM,IAAI,MACR,sBAAsB,KAAK,OAAO,oEACnC;;AAEH,QAAO;;;;;;;AAQT,SAAgB,kBACd,QACA,iBACQ;CACR,MAAM,kBAAkB,OAAO,KAAK,OAAO,CAAC,QACzC,QAAQ,CAAC,gBAAgB,SAAS,IAAI,IAAI,QAAQ,OACpD;AACD,KAAI,gBAAgB,WAAW,EAC7B,OAAM,IAAI,MACR,mCAAmC,gBAAgB,SACpD;AAEH,QAAO,gBAAgB"}
package/dist/memory.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
-
3
2
  //#region src/memory.ts
4
3
  var memory_exports = /* @__PURE__ */ __exportAll({
5
4
  BaseMemory: () => BaseMemory,
@@ -56,7 +55,7 @@ function getPromptInputKey(inputs, memoryVariables) {
56
55
  if (promptInputKeys.length !== 1) throw new Error(`One input key expected, but got ${promptInputKeys.length}`);
57
56
  return promptInputKeys[0];
58
57
  }
59
-
60
58
  //#endregion
61
59
  export { BaseMemory, getInputValue, getOutputValue, getPromptInputKey, memory_exports };
60
+
62
61
  //# sourceMappingURL=memory.js.map