@langchain/langgraph 1.0.6 → 1.0.12

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 (383) hide show
  1. package/package.json +7 -7
  2. package/CHANGELOG.md +0 -280
  3. package/dist/_virtual/rolldown_runtime.cjs +0 -25
  4. package/dist/channels/any_value.cjs +0 -46
  5. package/dist/channels/any_value.cjs.map +0 -1
  6. package/dist/channels/any_value.d.cts +0 -24
  7. package/dist/channels/any_value.d.cts.map +0 -1
  8. package/dist/channels/any_value.d.ts +0 -24
  9. package/dist/channels/any_value.d.ts.map +0 -1
  10. package/dist/channels/any_value.js +0 -46
  11. package/dist/channels/any_value.js.map +0 -1
  12. package/dist/channels/base.cjs +0 -102
  13. package/dist/channels/base.cjs.map +0 -1
  14. package/dist/channels/base.d.cts +0 -79
  15. package/dist/channels/base.d.cts.map +0 -1
  16. package/dist/channels/base.d.ts +0 -79
  17. package/dist/channels/base.d.ts.map +0 -1
  18. package/dist/channels/base.js +0 -97
  19. package/dist/channels/base.js.map +0 -1
  20. package/dist/channels/binop.cjs +0 -49
  21. package/dist/channels/binop.cjs.map +0 -1
  22. package/dist/channels/binop.d.cts +0 -22
  23. package/dist/channels/binop.d.cts.map +0 -1
  24. package/dist/channels/binop.d.ts +0 -22
  25. package/dist/channels/binop.d.ts.map +0 -1
  26. package/dist/channels/binop.js +0 -49
  27. package/dist/channels/binop.js.map +0 -1
  28. package/dist/channels/dynamic_barrier_value.cjs +0 -76
  29. package/dist/channels/dynamic_barrier_value.cjs.map +0 -1
  30. package/dist/channels/dynamic_barrier_value.d.cts +0 -42
  31. package/dist/channels/dynamic_barrier_value.d.cts.map +0 -1
  32. package/dist/channels/dynamic_barrier_value.d.ts +0 -42
  33. package/dist/channels/dynamic_barrier_value.d.ts.map +0 -1
  34. package/dist/channels/dynamic_barrier_value.js +0 -76
  35. package/dist/channels/dynamic_barrier_value.js.map +0 -1
  36. package/dist/channels/ephemeral_value.cjs +0 -46
  37. package/dist/channels/ephemeral_value.cjs.map +0 -1
  38. package/dist/channels/ephemeral_value.d.cts +0 -22
  39. package/dist/channels/ephemeral_value.d.cts.map +0 -1
  40. package/dist/channels/ephemeral_value.d.ts +0 -22
  41. package/dist/channels/ephemeral_value.d.ts.map +0 -1
  42. package/dist/channels/ephemeral_value.js +0 -46
  43. package/dist/channels/ephemeral_value.js.map +0 -1
  44. package/dist/channels/index.cjs +0 -21
  45. package/dist/channels/index.d.cts +0 -9
  46. package/dist/channels/index.d.ts +0 -9
  47. package/dist/channels/index.js +0 -10
  48. package/dist/channels/last_value.cjs +0 -98
  49. package/dist/channels/last_value.cjs.map +0 -1
  50. package/dist/channels/last_value.d.cts +0 -44
  51. package/dist/channels/last_value.d.cts.map +0 -1
  52. package/dist/channels/last_value.d.ts +0 -44
  53. package/dist/channels/last_value.d.ts.map +0 -1
  54. package/dist/channels/last_value.js +0 -97
  55. package/dist/channels/last_value.js.map +0 -1
  56. package/dist/channels/named_barrier_value.cjs +0 -118
  57. package/dist/channels/named_barrier_value.cjs.map +0 -1
  58. package/dist/channels/named_barrier_value.d.cts +0 -46
  59. package/dist/channels/named_barrier_value.d.cts.map +0 -1
  60. package/dist/channels/named_barrier_value.d.ts +0 -46
  61. package/dist/channels/named_barrier_value.d.ts.map +0 -1
  62. package/dist/channels/named_barrier_value.js +0 -116
  63. package/dist/channels/named_barrier_value.js.map +0 -1
  64. package/dist/channels/topic.cjs +0 -65
  65. package/dist/channels/topic.cjs.map +0 -1
  66. package/dist/channels/topic.d.cts +0 -32
  67. package/dist/channels/topic.d.cts.map +0 -1
  68. package/dist/channels/topic.d.ts +0 -32
  69. package/dist/channels/topic.d.ts.map +0 -1
  70. package/dist/channels/topic.js +0 -65
  71. package/dist/channels/topic.js.map +0 -1
  72. package/dist/constants.cjs +0 -406
  73. package/dist/constants.cjs.map +0 -1
  74. package/dist/constants.d.cts +0 -285
  75. package/dist/constants.d.cts.map +0 -1
  76. package/dist/constants.d.ts +0 -285
  77. package/dist/constants.d.ts.map +0 -1
  78. package/dist/constants.js +0 -362
  79. package/dist/constants.js.map +0 -1
  80. package/dist/errors.cjs +0 -163
  81. package/dist/errors.cjs.map +0 -1
  82. package/dist/errors.d.cts +0 -81
  83. package/dist/errors.d.cts.map +0 -1
  84. package/dist/errors.d.ts +0 -81
  85. package/dist/errors.d.ts.map +0 -1
  86. package/dist/errors.js +0 -146
  87. package/dist/errors.js.map +0 -1
  88. package/dist/func/index.cjs +0 -301
  89. package/dist/func/index.cjs.map +0 -1
  90. package/dist/func/index.d.cts +0 -293
  91. package/dist/func/index.d.cts.map +0 -1
  92. package/dist/func/index.d.ts +0 -293
  93. package/dist/func/index.d.ts.map +0 -1
  94. package/dist/func/index.js +0 -298
  95. package/dist/func/index.js.map +0 -1
  96. package/dist/func/types.d.cts +0 -64
  97. package/dist/func/types.d.cts.map +0 -1
  98. package/dist/func/types.d.ts +0 -64
  99. package/dist/func/types.d.ts.map +0 -1
  100. package/dist/graph/annotation.cjs +0 -101
  101. package/dist/graph/annotation.cjs.map +0 -1
  102. package/dist/graph/annotation.d.cts +0 -116
  103. package/dist/graph/annotation.d.cts.map +0 -1
  104. package/dist/graph/annotation.d.ts +0 -116
  105. package/dist/graph/annotation.d.ts.map +0 -1
  106. package/dist/graph/annotation.js +0 -99
  107. package/dist/graph/annotation.js.map +0 -1
  108. package/dist/graph/graph.cjs +0 -423
  109. package/dist/graph/graph.cjs.map +0 -1
  110. package/dist/graph/graph.d.cts +0 -132
  111. package/dist/graph/graph.d.cts.map +0 -1
  112. package/dist/graph/graph.d.ts +0 -132
  113. package/dist/graph/graph.d.ts.map +0 -1
  114. package/dist/graph/graph.js +0 -420
  115. package/dist/graph/graph.js.map +0 -1
  116. package/dist/graph/index.cjs +0 -5
  117. package/dist/graph/index.js +0 -7
  118. package/dist/graph/message.cjs +0 -99
  119. package/dist/graph/message.cjs.map +0 -1
  120. package/dist/graph/message.d.cts +0 -40
  121. package/dist/graph/message.d.cts.map +0 -1
  122. package/dist/graph/message.d.ts +0 -40
  123. package/dist/graph/message.d.ts.map +0 -1
  124. package/dist/graph/message.js +0 -95
  125. package/dist/graph/message.js.map +0 -1
  126. package/dist/graph/messages_annotation.cjs +0 -110
  127. package/dist/graph/messages_annotation.cjs.map +0 -1
  128. package/dist/graph/messages_annotation.d.cts +0 -112
  129. package/dist/graph/messages_annotation.d.cts.map +0 -1
  130. package/dist/graph/messages_annotation.d.ts +0 -112
  131. package/dist/graph/messages_annotation.d.ts.map +0 -1
  132. package/dist/graph/messages_annotation.js +0 -107
  133. package/dist/graph/messages_annotation.js.map +0 -1
  134. package/dist/graph/state.cjs +0 -501
  135. package/dist/graph/state.cjs.map +0 -1
  136. package/dist/graph/state.d.cts +0 -236
  137. package/dist/graph/state.d.cts.map +0 -1
  138. package/dist/graph/state.d.ts +0 -236
  139. package/dist/graph/state.d.ts.map +0 -1
  140. package/dist/graph/state.js +0 -499
  141. package/dist/graph/state.js.map +0 -1
  142. package/dist/graph/zod/index.cjs +0 -10
  143. package/dist/graph/zod/index.d.cts +0 -3
  144. package/dist/graph/zod/index.d.ts +0 -3
  145. package/dist/graph/zod/index.js +0 -5
  146. package/dist/graph/zod/meta.cjs +0 -145
  147. package/dist/graph/zod/meta.cjs.map +0 -1
  148. package/dist/graph/zod/meta.d.cts +0 -116
  149. package/dist/graph/zod/meta.d.cts.map +0 -1
  150. package/dist/graph/zod/meta.d.ts +0 -116
  151. package/dist/graph/zod/meta.d.ts.map +0 -1
  152. package/dist/graph/zod/meta.js +0 -141
  153. package/dist/graph/zod/meta.js.map +0 -1
  154. package/dist/graph/zod/plugin.cjs +0 -41
  155. package/dist/graph/zod/plugin.cjs.map +0 -1
  156. package/dist/graph/zod/plugin.js +0 -41
  157. package/dist/graph/zod/plugin.js.map +0 -1
  158. package/dist/graph/zod/schema.cjs +0 -99
  159. package/dist/graph/zod/schema.cjs.map +0 -1
  160. package/dist/graph/zod/schema.d.cts +0 -38
  161. package/dist/graph/zod/schema.d.cts.map +0 -1
  162. package/dist/graph/zod/schema.d.ts +0 -38
  163. package/dist/graph/zod/schema.d.ts.map +0 -1
  164. package/dist/graph/zod/schema.js +0 -94
  165. package/dist/graph/zod/schema.js.map +0 -1
  166. package/dist/graph/zod/zod-registry.cjs +0 -43
  167. package/dist/graph/zod/zod-registry.cjs.map +0 -1
  168. package/dist/graph/zod/zod-registry.d.cts +0 -51
  169. package/dist/graph/zod/zod-registry.d.cts.map +0 -1
  170. package/dist/graph/zod/zod-registry.d.ts +0 -51
  171. package/dist/graph/zod/zod-registry.d.ts.map +0 -1
  172. package/dist/graph/zod/zod-registry.js +0 -41
  173. package/dist/graph/zod/zod-registry.js.map +0 -1
  174. package/dist/hash.cjs +0 -271
  175. package/dist/hash.cjs.map +0 -1
  176. package/dist/hash.js +0 -269
  177. package/dist/hash.js.map +0 -1
  178. package/dist/index.cjs +0 -112
  179. package/dist/index.cjs.map +0 -1
  180. package/dist/index.d.cts +0 -26
  181. package/dist/index.d.ts +0 -26
  182. package/dist/index.js +0 -22
  183. package/dist/index.js.map +0 -1
  184. package/dist/interrupt.cjs +0 -82
  185. package/dist/interrupt.cjs.map +0 -1
  186. package/dist/interrupt.d.cts +0 -58
  187. package/dist/interrupt.d.cts.map +0 -1
  188. package/dist/interrupt.d.ts +0 -58
  189. package/dist/interrupt.d.ts.map +0 -1
  190. package/dist/interrupt.js +0 -81
  191. package/dist/interrupt.js.map +0 -1
  192. package/dist/prebuilt/agentName.cjs +0 -153
  193. package/dist/prebuilt/agentName.cjs.map +0 -1
  194. package/dist/prebuilt/agentName.d.cts +0 -42
  195. package/dist/prebuilt/agentName.d.cts.map +0 -1
  196. package/dist/prebuilt/agentName.d.ts +0 -42
  197. package/dist/prebuilt/agentName.d.ts.map +0 -1
  198. package/dist/prebuilt/agentName.js +0 -152
  199. package/dist/prebuilt/agentName.js.map +0 -1
  200. package/dist/prebuilt/agent_executor.cjs +0 -44
  201. package/dist/prebuilt/agent_executor.cjs.map +0 -1
  202. package/dist/prebuilt/agent_executor.d.cts +0 -58
  203. package/dist/prebuilt/agent_executor.d.cts.map +0 -1
  204. package/dist/prebuilt/agent_executor.d.ts +0 -58
  205. package/dist/prebuilt/agent_executor.d.ts.map +0 -1
  206. package/dist/prebuilt/agent_executor.js +0 -44
  207. package/dist/prebuilt/agent_executor.js.map +0 -1
  208. package/dist/prebuilt/chat_agent_executor.cjs +0 -68
  209. package/dist/prebuilt/chat_agent_executor.cjs.map +0 -1
  210. package/dist/prebuilt/chat_agent_executor.d.cts +0 -23
  211. package/dist/prebuilt/chat_agent_executor.d.cts.map +0 -1
  212. package/dist/prebuilt/chat_agent_executor.d.ts +0 -23
  213. package/dist/prebuilt/chat_agent_executor.d.ts.map +0 -1
  214. package/dist/prebuilt/chat_agent_executor.js +0 -67
  215. package/dist/prebuilt/chat_agent_executor.js.map +0 -1
  216. package/dist/prebuilt/index.cjs +0 -15
  217. package/dist/prebuilt/index.d.cts +0 -8
  218. package/dist/prebuilt/index.d.ts +0 -8
  219. package/dist/prebuilt/index.js +0 -8
  220. package/dist/prebuilt/interrupt.d.cts +0 -61
  221. package/dist/prebuilt/interrupt.d.cts.map +0 -1
  222. package/dist/prebuilt/interrupt.d.ts +0 -61
  223. package/dist/prebuilt/interrupt.d.ts.map +0 -1
  224. package/dist/prebuilt/react_agent_executor.cjs +0 -344
  225. package/dist/prebuilt/react_agent_executor.cjs.map +0 -1
  226. package/dist/prebuilt/react_agent_executor.d.cts +0 -230
  227. package/dist/prebuilt/react_agent_executor.d.cts.map +0 -1
  228. package/dist/prebuilt/react_agent_executor.d.ts +0 -230
  229. package/dist/prebuilt/react_agent_executor.d.ts.map +0 -1
  230. package/dist/prebuilt/react_agent_executor.js +0 -342
  231. package/dist/prebuilt/react_agent_executor.js.map +0 -1
  232. package/dist/prebuilt/tool_executor.cjs +0 -48
  233. package/dist/prebuilt/tool_executor.cjs.map +0 -1
  234. package/dist/prebuilt/tool_executor.d.cts +0 -42
  235. package/dist/prebuilt/tool_executor.d.cts.map +0 -1
  236. package/dist/prebuilt/tool_executor.d.ts +0 -42
  237. package/dist/prebuilt/tool_executor.d.ts.map +0 -1
  238. package/dist/prebuilt/tool_executor.js +0 -47
  239. package/dist/prebuilt/tool_executor.js.map +0 -1
  240. package/dist/prebuilt/tool_node.cjs +0 -248
  241. package/dist/prebuilt/tool_node.cjs.map +0 -1
  242. package/dist/prebuilt/tool_node.d.cts +0 -182
  243. package/dist/prebuilt/tool_node.d.cts.map +0 -1
  244. package/dist/prebuilt/tool_node.d.ts +0 -182
  245. package/dist/prebuilt/tool_node.d.ts.map +0 -1
  246. package/dist/prebuilt/tool_node.js +0 -246
  247. package/dist/prebuilt/tool_node.js.map +0 -1
  248. package/dist/pregel/algo.cjs +0 -573
  249. package/dist/pregel/algo.cjs.map +0 -1
  250. package/dist/pregel/algo.d.cts +0 -13
  251. package/dist/pregel/algo.d.cts.map +0 -1
  252. package/dist/pregel/algo.d.ts +0 -13
  253. package/dist/pregel/algo.d.ts.map +0 -1
  254. package/dist/pregel/algo.js +0 -567
  255. package/dist/pregel/algo.js.map +0 -1
  256. package/dist/pregel/call.cjs +0 -53
  257. package/dist/pregel/call.cjs.map +0 -1
  258. package/dist/pregel/call.js +0 -50
  259. package/dist/pregel/call.js.map +0 -1
  260. package/dist/pregel/debug.cjs +0 -175
  261. package/dist/pregel/debug.cjs.map +0 -1
  262. package/dist/pregel/debug.js +0 -169
  263. package/dist/pregel/debug.js.map +0 -1
  264. package/dist/pregel/index.cjs +0 -1170
  265. package/dist/pregel/index.cjs.map +0 -1
  266. package/dist/pregel/index.d.cts +0 -546
  267. package/dist/pregel/index.d.cts.map +0 -1
  268. package/dist/pregel/index.d.ts +0 -546
  269. package/dist/pregel/index.d.ts.map +0 -1
  270. package/dist/pregel/index.js +0 -1168
  271. package/dist/pregel/index.js.map +0 -1
  272. package/dist/pregel/io.cjs +0 -140
  273. package/dist/pregel/io.cjs.map +0 -1
  274. package/dist/pregel/io.js +0 -135
  275. package/dist/pregel/io.js.map +0 -1
  276. package/dist/pregel/loop.cjs +0 -548
  277. package/dist/pregel/loop.cjs.map +0 -1
  278. package/dist/pregel/loop.js +0 -547
  279. package/dist/pregel/loop.js.map +0 -1
  280. package/dist/pregel/messages.cjs +0 -108
  281. package/dist/pregel/messages.cjs.map +0 -1
  282. package/dist/pregel/messages.js +0 -107
  283. package/dist/pregel/messages.js.map +0 -1
  284. package/dist/pregel/read.cjs +0 -152
  285. package/dist/pregel/read.cjs.map +0 -1
  286. package/dist/pregel/read.d.cts +0 -51
  287. package/dist/pregel/read.d.cts.map +0 -1
  288. package/dist/pregel/read.d.ts +0 -51
  289. package/dist/pregel/read.d.ts.map +0 -1
  290. package/dist/pregel/read.js +0 -150
  291. package/dist/pregel/read.js.map +0 -1
  292. package/dist/pregel/remote.cjs +0 -346
  293. package/dist/pregel/remote.cjs.map +0 -1
  294. package/dist/pregel/remote.d.cts +0 -121
  295. package/dist/pregel/remote.d.cts.map +0 -1
  296. package/dist/pregel/remote.d.ts +0 -121
  297. package/dist/pregel/remote.d.ts.map +0 -1
  298. package/dist/pregel/remote.js +0 -345
  299. package/dist/pregel/remote.js.map +0 -1
  300. package/dist/pregel/retry.cjs +0 -92
  301. package/dist/pregel/retry.cjs.map +0 -1
  302. package/dist/pregel/retry.js +0 -92
  303. package/dist/pregel/retry.js.map +0 -1
  304. package/dist/pregel/runnable_types.d.cts +0 -49
  305. package/dist/pregel/runnable_types.d.cts.map +0 -1
  306. package/dist/pregel/runnable_types.d.ts +0 -49
  307. package/dist/pregel/runnable_types.d.ts.map +0 -1
  308. package/dist/pregel/runner.cjs +0 -228
  309. package/dist/pregel/runner.cjs.map +0 -1
  310. package/dist/pregel/runner.js +0 -228
  311. package/dist/pregel/runner.js.map +0 -1
  312. package/dist/pregel/stream.cjs +0 -199
  313. package/dist/pregel/stream.cjs.map +0 -1
  314. package/dist/pregel/stream.js +0 -196
  315. package/dist/pregel/stream.js.map +0 -1
  316. package/dist/pregel/types.cjs +0 -27
  317. package/dist/pregel/types.cjs.map +0 -1
  318. package/dist/pregel/types.d.cts +0 -453
  319. package/dist/pregel/types.d.cts.map +0 -1
  320. package/dist/pregel/types.d.ts +0 -453
  321. package/dist/pregel/types.d.ts.map +0 -1
  322. package/dist/pregel/types.js +0 -25
  323. package/dist/pregel/types.js.map +0 -1
  324. package/dist/pregel/utils/config.cjs +0 -122
  325. package/dist/pregel/utils/config.cjs.map +0 -1
  326. package/dist/pregel/utils/config.d.cts +0 -36
  327. package/dist/pregel/utils/config.d.cts.map +0 -1
  328. package/dist/pregel/utils/config.d.ts +0 -36
  329. package/dist/pregel/utils/config.d.ts.map +0 -1
  330. package/dist/pregel/utils/config.js +0 -115
  331. package/dist/pregel/utils/config.js.map +0 -1
  332. package/dist/pregel/utils/index.cjs +0 -103
  333. package/dist/pregel/utils/index.cjs.map +0 -1
  334. package/dist/pregel/utils/index.d.cts +0 -51
  335. package/dist/pregel/utils/index.d.cts.map +0 -1
  336. package/dist/pregel/utils/index.d.ts +0 -51
  337. package/dist/pregel/utils/index.d.ts.map +0 -1
  338. package/dist/pregel/utils/index.js +0 -97
  339. package/dist/pregel/utils/index.js.map +0 -1
  340. package/dist/pregel/utils/subgraph.cjs +0 -19
  341. package/dist/pregel/utils/subgraph.cjs.map +0 -1
  342. package/dist/pregel/utils/subgraph.js +0 -17
  343. package/dist/pregel/utils/subgraph.js.map +0 -1
  344. package/dist/pregel/validate.cjs +0 -45
  345. package/dist/pregel/validate.cjs.map +0 -1
  346. package/dist/pregel/validate.js +0 -44
  347. package/dist/pregel/validate.js.map +0 -1
  348. package/dist/pregel/write.cjs +0 -97
  349. package/dist/pregel/write.cjs.map +0 -1
  350. package/dist/pregel/write.d.cts +0 -35
  351. package/dist/pregel/write.d.cts.map +0 -1
  352. package/dist/pregel/write.d.ts +0 -35
  353. package/dist/pregel/write.d.ts.map +0 -1
  354. package/dist/pregel/write.js +0 -95
  355. package/dist/pregel/write.js.map +0 -1
  356. package/dist/remote.cjs +0 -3
  357. package/dist/remote.d.cts +0 -2
  358. package/dist/remote.d.ts +0 -2
  359. package/dist/remote.js +0 -3
  360. package/dist/setup/async_local_storage.cjs +0 -12
  361. package/dist/setup/async_local_storage.cjs.map +0 -1
  362. package/dist/setup/async_local_storage.js +0 -11
  363. package/dist/setup/async_local_storage.js.map +0 -1
  364. package/dist/utils.cjs +0 -88
  365. package/dist/utils.cjs.map +0 -1
  366. package/dist/utils.d.cts +0 -32
  367. package/dist/utils.d.cts.map +0 -1
  368. package/dist/utils.d.ts +0 -32
  369. package/dist/utils.d.ts.map +0 -1
  370. package/dist/utils.js +0 -81
  371. package/dist/utils.js.map +0 -1
  372. package/dist/web.cjs +0 -96
  373. package/dist/web.d.cts +0 -23
  374. package/dist/web.d.ts +0 -23
  375. package/dist/web.js +0 -15
  376. package/dist/writer.cjs +0 -15
  377. package/dist/writer.cjs.map +0 -1
  378. package/dist/writer.d.cts +0 -7
  379. package/dist/writer.d.cts.map +0 -1
  380. package/dist/writer.d.ts +0 -7
  381. package/dist/writer.d.ts.map +0 -1
  382. package/dist/writer.js +0 -14
  383. package/dist/writer.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop.js","names":["saved: CheckpointTuple","matched: {\n task: PregelExecutableTask<string, string>;\n result: unknown;\n }[]","keys: CacheFullKey[]","keyMap: Record<string, PregelExecutableTask<string, string>>","task","writes: { [key: string]: PendingWrite[] }","byTask: Record<string, PendingWrite<string>[]>"],"sources":["../../src/pregel/loop.ts"],"sourcesContent":["import type { RunnableConfig } from \"@langchain/core/runnables\";\nimport type { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n BaseCheckpointSaver,\n Checkpoint,\n CheckpointTuple,\n copyCheckpoint,\n emptyCheckpoint,\n PendingWrite,\n CheckpointPendingWrite,\n CheckpointMetadata,\n All,\n BaseStore,\n AsyncBatchedStore,\n WRITES_IDX_MAP,\n BaseCache,\n CacheFullKey,\n CacheNamespace,\n} from \"@langchain/langgraph-checkpoint\";\n\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n} from \"../channels/base.js\";\nimport type {\n Call,\n CallTaskPath,\n Durability,\n PregelExecutableTask,\n PregelScratchpad,\n StreamMode,\n} from \"./types.js\";\nimport {\n isCommand,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n Command,\n CONFIG_KEY_CHECKPOINT_MAP,\n CONFIG_KEY_READ,\n CONFIG_KEY_RESUMING,\n CONFIG_KEY_STREAM,\n ERROR,\n INPUT,\n INTERRUPT,\n NULL_TASK_ID,\n RESUME,\n TAG_HIDDEN,\n PUSH,\n CONFIG_KEY_SCRATCHPAD,\n CONFIG_KEY_CHECKPOINT_NS,\n CHECKPOINT_NAMESPACE_END,\n CONFIG_KEY_CHECKPOINT_ID,\n CONFIG_KEY_RESUME_MAP,\n START,\n} from \"../constants.js\";\nimport {\n _applyWrites,\n _prepareNextTasks,\n _prepareSingleTask,\n increment,\n shouldInterrupt,\n WritesProtocol,\n} from \"./algo.js\";\nimport {\n gatherIterator,\n gatherIteratorSync,\n prefixGenerator,\n} from \"../utils.js\";\nimport {\n mapCommand,\n mapInput,\n mapOutputUpdates,\n mapOutputValues,\n readChannels,\n} from \"./io.js\";\nimport {\n EmptyInputError,\n GraphInterrupt,\n isGraphInterrupt,\n} from \"../errors.js\";\nimport { getNewChannelVersions, patchConfigurable } from \"./utils/index.js\";\nimport {\n mapDebugTasks,\n mapDebugCheckpoint,\n mapDebugTaskResults,\n printStepTasks,\n} from \"./debug.js\";\nimport { PregelNode } from \"./read.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { IterableReadableWritableStream, StreamChunk } from \"./stream.js\";\nimport { isXXH3 } from \"../hash.js\";\n\nconst INPUT_DONE = Symbol.for(\"INPUT_DONE\");\nconst INPUT_RESUMING = Symbol.for(\"INPUT_RESUMING\");\nconst DEFAULT_LOOP_LIMIT = 25;\n\nexport type PregelLoopInitializeParams = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input?: any | Command;\n config: RunnableConfig;\n checkpointer?: BaseCheckpointSaver;\n outputKeys: string | string[];\n streamKeys: string | string[];\n nodes: Record<string, PregelNode>;\n channelSpecs: Record<string, BaseChannel>;\n stream: IterableReadableWritableStream;\n store?: BaseStore;\n cache?: BaseCache<PendingWrite<string>[]>;\n interruptAfter: string[] | All;\n interruptBefore: string[] | All;\n durability: Durability;\n manager?: CallbackManagerForChainRun;\n debug: boolean;\n triggerToNodes: Record<string, string[]>;\n};\n\ntype PregelLoopParams = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n input?: any | Command;\n config: RunnableConfig;\n checkpointer?: BaseCheckpointSaver;\n checkpoint: Checkpoint;\n checkpointMetadata: CheckpointMetadata;\n checkpointPreviousVersions: Record<string, string | number>;\n checkpointPendingWrites: CheckpointPendingWrite[];\n checkpointConfig: RunnableConfig;\n channels: Record<string, BaseChannel>;\n step: number;\n stop: number;\n outputKeys: string | string[];\n streamKeys: string | string[];\n nodes: Record<string, PregelNode>;\n checkpointNamespace: string[];\n skipDoneTasks: boolean;\n isNested: boolean;\n manager?: CallbackManagerForChainRun;\n stream: IterableReadableWritableStream;\n store?: AsyncBatchedStore;\n cache?: BaseCache<PendingWrite<string>[]>;\n prevCheckpointConfig: RunnableConfig | undefined;\n interruptAfter: string[] | All;\n interruptBefore: string[] | All;\n durability: Durability;\n debug: boolean;\n triggerToNodes: Record<string, string[]>;\n};\n\nfunction createDuplexStream(...streams: IterableReadableWritableStream[]) {\n return new IterableReadableWritableStream({\n passthroughFn: (value: StreamChunk) => {\n for (const stream of streams) {\n if (stream.modes.has(value[1])) {\n stream.push(value);\n }\n }\n },\n modes: new Set(streams.flatMap((s) => Array.from(s.modes))),\n });\n}\n\nclass AsyncBatchedCache extends BaseCache<PendingWrite<string>[]> {\n protected cache: BaseCache<PendingWrite<string>[]>;\n\n private queue: Promise<unknown> = Promise.resolve();\n\n constructor(cache: BaseCache<unknown>) {\n super();\n this.cache = cache as BaseCache<PendingWrite<string>[]>;\n }\n\n async get(keys: CacheFullKey[]) {\n return this.enqueueOperation(\"get\", keys);\n }\n\n async set(\n pairs: {\n key: CacheFullKey;\n value: PendingWrite<string>[];\n ttl?: number;\n }[]\n ) {\n return this.enqueueOperation(\"set\", pairs);\n }\n\n async clear(namespaces: CacheNamespace[]) {\n return this.enqueueOperation(\"clear\", namespaces);\n }\n\n async stop() {\n await this.queue;\n }\n\n private enqueueOperation<Type extends \"get\" | \"set\" | \"clear\">(\n type: Type,\n ...args: Parameters<(typeof this.cache)[Type]>\n ) {\n const newPromise = this.queue.then(() => {\n // @ts-expect-error Tuple type warning\n return this.cache[type](...args) as Promise<\n ReturnType<(typeof this.cache)[Type]>\n >;\n });\n\n this.queue = newPromise.then(\n () => void 0,\n () => void 0\n );\n\n return newPromise;\n }\n}\n\nexport class PregelLoop {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected input?: any | Command;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n output: any;\n\n config: LangGraphRunnableConfig;\n\n protected checkpointer?: BaseCheckpointSaver;\n\n protected checkpointerGetNextVersion: (current: number | undefined) => number;\n\n channels: Record<string, BaseChannel>;\n\n protected checkpoint: Checkpoint;\n\n protected checkpointIdSaved: string | undefined;\n\n protected checkpointConfig: RunnableConfig;\n\n checkpointMetadata: CheckpointMetadata;\n\n protected checkpointNamespace: string[];\n\n protected checkpointPendingWrites: CheckpointPendingWrite[] = [];\n\n protected checkpointPreviousVersions: Record<string, string | number>;\n\n step: number;\n\n protected stop: number;\n\n protected durability: Durability;\n\n protected outputKeys: string | string[];\n\n protected streamKeys: string | string[];\n\n protected nodes: Record<string, PregelNode>;\n\n protected skipDoneTasks: boolean;\n\n protected prevCheckpointConfig: RunnableConfig | undefined;\n\n protected updatedChannels: Set<string> | undefined;\n\n status:\n | \"pending\"\n | \"done\"\n | \"interrupt_before\"\n | \"interrupt_after\"\n | \"out_of_steps\" = \"pending\";\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n tasks: Record<string, PregelExecutableTask<any, any>> = {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stream: IterableReadableWritableStream;\n\n checkpointerPromises: Promise<unknown>[] = [];\n\n isNested: boolean;\n\n protected _checkpointerChainedPromise: Promise<unknown> = Promise.resolve();\n\n store?: AsyncBatchedStore;\n\n cache?: AsyncBatchedCache;\n\n manager?: CallbackManagerForChainRun;\n\n interruptAfter: string[] | All;\n\n interruptBefore: string[] | All;\n\n toInterrupt: PregelExecutableTask<string, string>[] = [];\n\n debug: boolean = false;\n\n triggerToNodes: Record<string, string[]>;\n\n get isResuming() {\n let hasChannelVersions = false;\n if (START in this.checkpoint.channel_versions) {\n // For common channels, we can short-circuit the check\n hasChannelVersions = true;\n } else {\n for (const chan in this.checkpoint.channel_versions) {\n if (\n Object.prototype.hasOwnProperty.call(\n this.checkpoint.channel_versions,\n chan\n )\n ) {\n hasChannelVersions = true;\n break;\n }\n }\n }\n\n const configHasResumingFlag =\n this.config.configurable?.[CONFIG_KEY_RESUMING] !== undefined;\n const configIsResuming =\n configHasResumingFlag && this.config.configurable?.[CONFIG_KEY_RESUMING];\n\n const inputIsNullOrUndefined =\n this.input === null || this.input === undefined;\n const inputIsCommandResuming =\n isCommand(this.input) && this.input.resume != null;\n const inputIsResuming = this.input === INPUT_RESUMING;\n\n const runIdMatchesPrevious =\n !this.isNested &&\n this.config.metadata?.run_id !== undefined &&\n (this.checkpointMetadata as { run_id?: unknown })?.run_id !== undefined &&\n this.config.metadata.run_id ===\n (this.checkpointMetadata as { run_id?: unknown })?.run_id;\n\n return (\n hasChannelVersions &&\n (configIsResuming ||\n inputIsNullOrUndefined ||\n inputIsCommandResuming ||\n inputIsResuming ||\n runIdMatchesPrevious)\n );\n }\n\n constructor(params: PregelLoopParams) {\n this.input = params.input;\n this.checkpointer = params.checkpointer;\n // TODO: if managed values no longer needs graph we can replace with\n // managed_specs, channel_specs\n if (this.checkpointer !== undefined) {\n this.checkpointerGetNextVersion = this.checkpointer.getNextVersion.bind(\n this.checkpointer\n );\n } else {\n this.checkpointerGetNextVersion = increment;\n }\n this.checkpoint = params.checkpoint;\n this.checkpointMetadata = params.checkpointMetadata;\n this.checkpointPreviousVersions = params.checkpointPreviousVersions;\n this.channels = params.channels;\n this.checkpointPendingWrites = params.checkpointPendingWrites;\n this.step = params.step;\n this.stop = params.stop;\n this.config = params.config;\n this.checkpointConfig = params.checkpointConfig;\n this.isNested = params.isNested;\n this.manager = params.manager;\n this.outputKeys = params.outputKeys;\n this.streamKeys = params.streamKeys;\n this.nodes = params.nodes;\n this.skipDoneTasks = params.skipDoneTasks;\n this.store = params.store;\n this.cache = params.cache ? new AsyncBatchedCache(params.cache) : undefined;\n this.stream = params.stream;\n this.checkpointNamespace = params.checkpointNamespace;\n this.prevCheckpointConfig = params.prevCheckpointConfig;\n this.interruptAfter = params.interruptAfter;\n this.interruptBefore = params.interruptBefore;\n this.durability = params.durability;\n this.debug = params.debug;\n this.triggerToNodes = params.triggerToNodes;\n }\n\n static async initialize(params: PregelLoopInitializeParams) {\n let { config, stream } = params;\n if (\n stream !== undefined &&\n config.configurable?.[CONFIG_KEY_STREAM] !== undefined\n ) {\n stream = createDuplexStream(\n stream,\n config.configurable[CONFIG_KEY_STREAM]\n );\n }\n const skipDoneTasks = config.configurable\n ? !(\"checkpoint_id\" in config.configurable)\n : true;\n\n const scratchpad = config.configurable?.[CONFIG_KEY_SCRATCHPAD] as\n | PregelScratchpad\n | undefined;\n\n if (config.configurable && scratchpad) {\n if (scratchpad.subgraphCounter > 0) {\n config = patchConfigurable(config, {\n [CONFIG_KEY_CHECKPOINT_NS]: [\n config.configurable[CONFIG_KEY_CHECKPOINT_NS],\n scratchpad.subgraphCounter.toString(),\n ].join(CHECKPOINT_NAMESPACE_SEPARATOR),\n });\n }\n\n scratchpad.subgraphCounter += 1;\n }\n\n const isNested = CONFIG_KEY_READ in (config.configurable ?? {});\n if (\n !isNested &&\n config.configurable?.checkpoint_ns !== undefined &&\n config.configurable?.checkpoint_ns !== \"\"\n ) {\n config = patchConfigurable(config, {\n checkpoint_ns: \"\",\n checkpoint_id: undefined,\n });\n }\n let checkpointConfig = config;\n if (\n config.configurable?.[CONFIG_KEY_CHECKPOINT_MAP] !== undefined &&\n config.configurable?.[CONFIG_KEY_CHECKPOINT_MAP]?.[\n config.configurable?.checkpoint_ns\n ]\n ) {\n checkpointConfig = patchConfigurable(config, {\n checkpoint_id:\n config.configurable[CONFIG_KEY_CHECKPOINT_MAP][\n config.configurable?.checkpoint_ns\n ],\n });\n }\n const checkpointNamespace =\n config.configurable?.checkpoint_ns?.split(\n CHECKPOINT_NAMESPACE_SEPARATOR\n ) ?? [];\n\n const saved: CheckpointTuple = (await params.checkpointer?.getTuple(\n checkpointConfig\n )) ?? {\n config,\n checkpoint: emptyCheckpoint(),\n metadata: { source: \"input\", step: -2, parents: {} },\n pendingWrites: [],\n };\n checkpointConfig = {\n ...config,\n ...saved.config,\n configurable: {\n checkpoint_ns: \"\",\n ...config.configurable,\n ...saved.config.configurable,\n },\n };\n const prevCheckpointConfig = saved.parentConfig;\n const checkpoint = copyCheckpoint(saved.checkpoint);\n const checkpointMetadata = { ...saved.metadata } as CheckpointMetadata;\n const checkpointPendingWrites = saved.pendingWrites ?? [];\n\n const channels = emptyChannels(params.channelSpecs, checkpoint);\n\n const step = (checkpointMetadata.step ?? 0) + 1;\n const stop = step + (config.recursionLimit ?? DEFAULT_LOOP_LIMIT) + 1;\n const checkpointPreviousVersions = { ...checkpoint.channel_versions };\n\n const store = params.store\n ? new AsyncBatchedStore(params.store)\n : undefined;\n\n if (store) {\n // Start the store. This is a batch store, so it will run continuously\n await store.start();\n }\n return new PregelLoop({\n input: params.input,\n config,\n checkpointer: params.checkpointer,\n checkpoint,\n checkpointMetadata,\n checkpointConfig,\n prevCheckpointConfig,\n checkpointNamespace,\n channels,\n isNested,\n manager: params.manager,\n skipDoneTasks,\n step,\n stop,\n checkpointPreviousVersions,\n checkpointPendingWrites,\n outputKeys: params.outputKeys ?? [],\n streamKeys: params.streamKeys ?? [],\n nodes: params.nodes,\n stream,\n store,\n cache: params.cache,\n interruptAfter: params.interruptAfter,\n interruptBefore: params.interruptBefore,\n durability: params.durability,\n debug: params.debug,\n triggerToNodes: params.triggerToNodes,\n });\n }\n\n protected _checkpointerPutAfterPrevious(input: {\n config: RunnableConfig;\n checkpoint: Checkpoint;\n metadata: CheckpointMetadata;\n newVersions: Record<string, string | number>;\n }) {\n this._checkpointerChainedPromise = this._checkpointerChainedPromise.then(\n () => {\n return this.checkpointer?.put(\n input.config,\n input.checkpoint,\n input.metadata,\n input.newVersions\n );\n }\n );\n this.checkpointerPromises.push(this._checkpointerChainedPromise);\n }\n\n /**\n * Put writes for a task, to be read by the next tick.\n * @param taskId\n * @param writes\n */\n putWrites(taskId: string, writes: PendingWrite<string>[]) {\n let writesCopy = writes;\n if (writesCopy.length === 0) return;\n\n // deduplicate writes to special channels, last write wins\n if (writesCopy.every(([key]) => key in WRITES_IDX_MAP)) {\n writesCopy = Array.from(\n new Map(writesCopy.map((w) => [w[0], w])).values()\n );\n }\n\n // remove existing writes for this task\n this.checkpointPendingWrites = this.checkpointPendingWrites.filter(\n (w) => w[0] !== taskId\n );\n\n // save writes\n for (const [c, v] of writesCopy) {\n this.checkpointPendingWrites.push([taskId, c, v]);\n }\n\n const config = patchConfigurable(this.checkpointConfig, {\n [CONFIG_KEY_CHECKPOINT_NS]: this.config.configurable?.checkpoint_ns ?? \"\",\n [CONFIG_KEY_CHECKPOINT_ID]: this.checkpoint.id,\n });\n\n if (this.durability !== \"exit\" && this.checkpointer != null) {\n this.checkpointerPromises.push(\n this.checkpointer.putWrites(config, writesCopy, taskId)\n );\n }\n\n if (this.tasks) {\n this._outputWrites(taskId, writesCopy);\n }\n\n if (!writes.length || !this.cache || !this.tasks) {\n return;\n }\n\n // only cache tasks with a cache key\n const task = this.tasks[taskId];\n if (task == null || task.cache_key == null) {\n return;\n }\n\n // only cache successful tasks\n if (writes[0][0] === ERROR || writes[0][0] === INTERRUPT) {\n return;\n }\n\n void this.cache.set([\n {\n key: [task.cache_key.ns, task.cache_key.key],\n value: task.writes,\n ttl: task.cache_key.ttl,\n },\n ]);\n }\n\n _outputWrites(taskId: string, writes: [string, unknown][], cached = false) {\n const task = this.tasks[taskId];\n if (task !== undefined) {\n if (\n task.config !== undefined &&\n (task.config.tags ?? []).includes(TAG_HIDDEN)\n ) {\n return;\n }\n\n if (writes.length > 0) {\n if (writes[0][0] === INTERRUPT) {\n // in `algo.ts` we append a bool to the task path to indicate\n // whether or not a call was present. If so, we don't emit the\n // the interrupt as it'll be emitted by the parent.\n if (task.path?.[0] === PUSH && task.path?.at(-1) === true) return;\n\n const interruptWrites = writes\n .filter((w) => w[0] === INTERRUPT)\n .flatMap((w) => w[1] as string[]);\n\n this._emit([\n [\"updates\", { [INTERRUPT]: interruptWrites }],\n [\"values\", { [INTERRUPT]: interruptWrites }],\n ]);\n } else if (writes[0][0] !== ERROR) {\n this._emit(\n gatherIteratorSync(\n prefixGenerator(\n mapOutputUpdates(this.outputKeys, [[task, writes]], cached),\n \"updates\"\n )\n )\n );\n }\n }\n if (!cached) {\n this._emit(\n gatherIteratorSync(\n prefixGenerator(\n mapDebugTaskResults([[task, writes]], this.streamKeys),\n \"tasks\"\n )\n )\n );\n }\n }\n }\n\n async _matchCachedWrites() {\n if (!this.cache) return [];\n\n const matched: {\n task: PregelExecutableTask<string, string>;\n result: unknown;\n }[] = [];\n\n const serializeKey = ([ns, key]: CacheFullKey) => {\n return `ns:${ns.join(\",\")}|key:${key}`;\n };\n\n const keys: CacheFullKey[] = [];\n const keyMap: Record<string, PregelExecutableTask<string, string>> = {};\n\n for (const task of Object.values(this.tasks)) {\n if (task.cache_key != null && !task.writes.length) {\n keys.push([task.cache_key.ns, task.cache_key.key]);\n keyMap[serializeKey([task.cache_key.ns, task.cache_key.key])] = task;\n }\n }\n\n if (keys.length === 0) return [];\n const cache = await this.cache.get(keys);\n\n for (const { key, value } of cache) {\n const task = keyMap[serializeKey(key)];\n if (task != null) {\n // update the task with the cached writes\n task.writes.push(...value);\n matched.push({ task, result: value });\n }\n }\n\n return matched;\n }\n\n /**\n * Execute a single iteration of the Pregel loop.\n * Returns true if more iterations are needed.\n * @param params\n */\n async tick(params: { inputKeys?: string | string[] }): Promise<boolean> {\n if (this.store && !this.store.isRunning) {\n await this.store?.start();\n }\n const { inputKeys = [] } = params;\n if (this.status !== \"pending\") {\n throw new Error(\n `Cannot tick when status is no longer \"pending\". Current status: \"${this.status}\"`\n );\n }\n if (![INPUT_DONE, INPUT_RESUMING].includes(this.input)) {\n await this._first(inputKeys);\n } else if (this.toInterrupt.length > 0) {\n this.status = \"interrupt_before\";\n throw new GraphInterrupt();\n } else if (\n Object.values(this.tasks).every((task) => task.writes.length > 0)\n ) {\n // finish superstep\n const writes = Object.values(this.tasks).flatMap((t) => t.writes);\n // All tasks have finished\n this.updatedChannels = _applyWrites(\n this.checkpoint,\n this.channels,\n Object.values(this.tasks),\n this.checkpointerGetNextVersion,\n this.triggerToNodes\n );\n // produce values output\n const valuesOutput = await gatherIterator(\n prefixGenerator(\n mapOutputValues(this.outputKeys, writes, this.channels),\n \"values\"\n )\n );\n this._emit(valuesOutput);\n // clear pending writes\n this.checkpointPendingWrites = [];\n await this._putCheckpoint({ source: \"loop\" });\n // after execution, check if we should interrupt\n if (\n shouldInterrupt(\n this.checkpoint,\n this.interruptAfter,\n Object.values(this.tasks)\n )\n ) {\n this.status = \"interrupt_after\";\n throw new GraphInterrupt();\n }\n\n // unset resuming flag\n if (this.config.configurable?.[CONFIG_KEY_RESUMING] !== undefined) {\n delete this.config.configurable?.[CONFIG_KEY_RESUMING];\n }\n } else {\n return false;\n }\n if (this.step > this.stop) {\n this.status = \"out_of_steps\";\n return false;\n }\n\n const nextTasks = _prepareNextTasks(\n this.checkpoint,\n this.checkpointPendingWrites,\n this.nodes,\n this.channels,\n this.config,\n true,\n {\n step: this.step,\n checkpointer: this.checkpointer,\n isResuming: this.isResuming,\n manager: this.manager,\n store: this.store,\n stream: this.stream,\n triggerToNodes: this.triggerToNodes,\n updatedChannels: this.updatedChannels,\n }\n );\n this.tasks = nextTasks;\n\n // Produce debug output\n if (this.checkpointer) {\n this._emit(\n await gatherIterator(\n prefixGenerator(\n mapDebugCheckpoint(\n this.checkpointConfig,\n this.channels,\n this.streamKeys,\n this.checkpointMetadata,\n Object.values(this.tasks),\n this.checkpointPendingWrites,\n this.prevCheckpointConfig,\n this.outputKeys\n ),\n \"checkpoints\"\n )\n )\n );\n }\n\n if (Object.values(this.tasks).length === 0) {\n this.status = \"done\";\n return false;\n }\n // if there are pending writes from a previous loop, apply them\n if (this.skipDoneTasks && this.checkpointPendingWrites.length > 0) {\n for (const [tid, k, v] of this.checkpointPendingWrites) {\n if (k === ERROR || k === INTERRUPT || k === RESUME) {\n continue;\n }\n const task = Object.values(this.tasks).find((t) => t.id === tid);\n if (task) {\n task.writes.push([k, v]);\n }\n }\n for (const task of Object.values(this.tasks)) {\n if (task.writes.length > 0) {\n this._outputWrites(task.id, task.writes, true);\n }\n }\n }\n // if all tasks have finished, re-tick\n if (Object.values(this.tasks).every((task) => task.writes.length > 0)) {\n return this.tick({ inputKeys });\n }\n\n // Before execution, check if we should interrupt\n if (\n shouldInterrupt(\n this.checkpoint,\n this.interruptBefore,\n Object.values(this.tasks)\n )\n ) {\n this.status = \"interrupt_before\";\n throw new GraphInterrupt();\n }\n\n // Produce debug output\n const debugOutput = await gatherIterator(\n prefixGenerator(mapDebugTasks(Object.values(this.tasks)), \"tasks\")\n );\n this._emit(debugOutput);\n\n return true;\n }\n\n async finishAndHandleError(error?: Error) {\n // persist current checkpoint and writes\n if (\n this.durability === \"exit\" &&\n // if it's a top graph\n (!this.isNested ||\n // or a nested graph with error or interrupt\n typeof error !== \"undefined\" ||\n // or a nested graph with checkpointer: true\n this.checkpointNamespace.every(\n (part) => !part.includes(CHECKPOINT_NAMESPACE_END)\n ))\n ) {\n this._putCheckpoint(this.checkpointMetadata);\n this._flushPendingWrites();\n }\n\n const suppress = this._suppressInterrupt(error);\n if (suppress || error === undefined) {\n this.output = readChannels(this.channels, this.outputKeys);\n }\n if (suppress) {\n // emit one last \"values\" event, with pending writes applied\n if (\n this.tasks !== undefined &&\n this.checkpointPendingWrites.length > 0 &&\n Object.values(this.tasks).some((task) => task.writes.length > 0)\n ) {\n this.updatedChannels = _applyWrites(\n this.checkpoint,\n this.channels,\n Object.values(this.tasks),\n this.checkpointerGetNextVersion,\n this.triggerToNodes\n );\n\n this._emit(\n gatherIteratorSync(\n prefixGenerator(\n mapOutputValues(\n this.outputKeys,\n Object.values(this.tasks).flatMap((t) => t.writes),\n this.channels\n ),\n \"values\"\n )\n )\n );\n }\n\n // Emit INTERRUPT event\n if (isGraphInterrupt(error) && !error.interrupts.length) {\n this._emit([\n [\"updates\", { [INTERRUPT]: [] }],\n [\"values\", { [INTERRUPT]: [] }],\n ]);\n }\n }\n return suppress;\n }\n\n async acceptPush(\n task: PregelExecutableTask<string, string>,\n writeIdx: number,\n call?: Call\n ): Promise<PregelExecutableTask<string, string> | void> {\n if (\n this.interruptAfter?.length > 0 &&\n shouldInterrupt(this.checkpoint, this.interruptAfter, [task])\n ) {\n this.toInterrupt.push(task);\n return;\n }\n\n const pushed = _prepareSingleTask(\n [PUSH, task.path ?? [], writeIdx, task.id, call] as CallTaskPath,\n this.checkpoint,\n this.checkpointPendingWrites,\n this.nodes,\n this.channels,\n task.config ?? {},\n true,\n {\n step: this.step,\n checkpointer: this.checkpointer,\n manager: this.manager,\n store: this.store,\n stream: this.stream,\n }\n );\n\n if (!pushed) return;\n if (\n this.interruptBefore?.length > 0 &&\n shouldInterrupt(this.checkpoint, this.interruptBefore, [pushed])\n ) {\n this.toInterrupt.push(pushed);\n return;\n }\n\n this._emit(\n gatherIteratorSync(prefixGenerator(mapDebugTasks([pushed]), \"tasks\"))\n );\n\n if (this.debug) printStepTasks(this.step, [pushed]);\n this.tasks[pushed.id] = pushed;\n if (this.skipDoneTasks) this._matchWrites({ [pushed.id]: pushed });\n\n const tasks = await this._matchCachedWrites();\n for (const { task } of tasks) {\n this._outputWrites(task.id, task.writes, true);\n }\n\n return pushed;\n }\n\n protected _suppressInterrupt(e?: Error): boolean {\n return isGraphInterrupt(e) && !this.isNested;\n }\n\n protected async _first(inputKeys: string | string[]) {\n /*\n * Resuming from previous checkpoint requires\n * - finding a previous checkpoint\n * - receiving null input (outer graph) or RESUMING flag (subgraph)\n */\n\n const { configurable } = this.config;\n\n // take resume value from parent\n const scratchpad = configurable?.[\n CONFIG_KEY_SCRATCHPAD\n ] as PregelScratchpad;\n\n if (scratchpad && scratchpad.nullResume !== undefined) {\n this.putWrites(NULL_TASK_ID, [[RESUME, scratchpad.nullResume]]);\n }\n\n // map command to writes\n if (isCommand(this.input)) {\n const hasResume = this.input.resume != null;\n\n if (\n this.input.resume != null &&\n typeof this.input.resume === \"object\" &&\n Object.keys(this.input.resume).every(isXXH3)\n ) {\n this.config.configurable ??= {};\n this.config.configurable[CONFIG_KEY_RESUME_MAP] = this.input.resume;\n }\n\n if (hasResume && this.checkpointer == null) {\n throw new Error(\"Cannot use Command(resume=...) without checkpointer\");\n }\n\n const writes: { [key: string]: PendingWrite[] } = {};\n\n // group writes by task id\n for (const [tid, key, value] of mapCommand(\n this.input,\n this.checkpointPendingWrites\n )) {\n writes[tid] ??= [];\n writes[tid].push([key, value]);\n }\n if (Object.keys(writes).length === 0) {\n throw new EmptyInputError(\"Received empty Command input\");\n }\n\n // save writes\n for (const [tid, ws] of Object.entries(writes)) {\n this.putWrites(tid, ws);\n }\n }\n\n // apply null writes\n const nullWrites = (this.checkpointPendingWrites ?? [])\n .filter((w) => w[0] === NULL_TASK_ID)\n .map((w) => w.slice(1)) as PendingWrite<string>[];\n if (nullWrites.length > 0) {\n _applyWrites(\n this.checkpoint,\n this.channels,\n [\n {\n name: INPUT,\n writes: nullWrites,\n triggers: [],\n },\n ],\n this.checkpointerGetNextVersion,\n this.triggerToNodes\n );\n }\n const isCommandUpdateOrGoto =\n isCommand(this.input) && nullWrites.length > 0;\n if (this.isResuming || isCommandUpdateOrGoto) {\n for (const channelName in this.channels) {\n if (!Object.prototype.hasOwnProperty.call(this.channels, channelName))\n continue;\n if (this.checkpoint.channel_versions[channelName] !== undefined) {\n const version = this.checkpoint.channel_versions[channelName];\n this.checkpoint.versions_seen[INTERRUPT] = {\n ...this.checkpoint.versions_seen[INTERRUPT],\n [channelName]: version,\n };\n }\n }\n // produce values output\n const valuesOutput = await gatherIterator(\n prefixGenerator(\n mapOutputValues(this.outputKeys, true, this.channels),\n \"values\"\n )\n );\n this._emit(valuesOutput);\n }\n if (this.isResuming) {\n this.input = INPUT_RESUMING;\n } else if (isCommandUpdateOrGoto) {\n // we need to create a new checkpoint for Command(update=...) or Command(goto=...)\n // in case the result of Command(goto=...) is an interrupt.\n // If not done, the checkpoint containing the interrupt will be lost.\n await this._putCheckpoint({ source: \"input\" });\n this.input = INPUT_DONE;\n } else {\n // map inputs to channel updates\n const inputWrites = await gatherIterator(mapInput(inputKeys, this.input));\n if (inputWrites.length > 0) {\n const discardTasks = _prepareNextTasks(\n this.checkpoint,\n this.checkpointPendingWrites,\n this.nodes,\n this.channels,\n this.config,\n true,\n { step: this.step }\n );\n this.updatedChannels = _applyWrites(\n this.checkpoint,\n this.channels,\n (Object.values(discardTasks) as WritesProtocol[]).concat([\n {\n name: INPUT,\n writes: inputWrites as PendingWrite[],\n triggers: [],\n },\n ]),\n this.checkpointerGetNextVersion,\n this.triggerToNodes\n );\n // save input checkpoint\n await this._putCheckpoint({ source: \"input\" });\n\n this.input = INPUT_DONE;\n } else if (!(CONFIG_KEY_RESUMING in (this.config.configurable ?? {}))) {\n throw new EmptyInputError(\n `Received no input writes for ${JSON.stringify(inputKeys, null, 2)}`\n );\n } else {\n // done with input\n this.input = INPUT_DONE;\n }\n }\n if (!this.isNested) {\n this.config = patchConfigurable(this.config, {\n [CONFIG_KEY_RESUMING]: this.isResuming,\n });\n }\n }\n\n protected _emit(values: [StreamMode, unknown][]) {\n for (const [mode, payload] of values) {\n if (this.stream.modes.has(mode)) {\n this.stream.push([this.checkpointNamespace, mode, payload]);\n }\n\n // debug mode is a \"checkpoints\" or \"tasks\" wrapped in an object\n // TODO: consider deprecating this in 1.x\n if (\n (mode === \"checkpoints\" || mode === \"tasks\") &&\n this.stream.modes.has(\"debug\")\n ) {\n const step = mode === \"checkpoints\" ? this.step - 1 : this.step;\n const timestamp = new Date().toISOString();\n const type = (() => {\n if (mode === \"checkpoints\") {\n return \"checkpoint\";\n } else if (\n typeof payload === \"object\" &&\n payload != null &&\n \"result\" in payload\n ) {\n return \"task_result\";\n } else {\n return \"task\";\n }\n })();\n\n this.stream.push([\n this.checkpointNamespace,\n \"debug\",\n { step, type, timestamp, payload },\n ]);\n }\n }\n }\n\n protected _putCheckpoint(\n inputMetadata: Omit<CheckpointMetadata, \"step\" | \"parents\">\n ) {\n const exiting = this.checkpointMetadata === inputMetadata;\n\n const doCheckpoint =\n this.checkpointer != null && (this.durability !== \"exit\" || exiting);\n\n const storeCheckpoint = (checkpoint: Checkpoint) => {\n // store the previous checkpoint config for debug events\n this.prevCheckpointConfig = this.checkpointConfig?.configurable\n ?.checkpoint_id\n ? this.checkpointConfig\n : undefined;\n\n // child graphs keep at most one checkpoint per parent checkpoint\n // this is achieved by writing child checkpoints as progress is made\n // (so that error recovery / resuming from interrupt don't lose work)\n // but doing so always with an id equal to that of the parent checkpoint\n this.checkpointConfig = patchConfigurable(this.checkpointConfig, {\n [CONFIG_KEY_CHECKPOINT_NS]:\n this.config.configurable?.checkpoint_ns ?? \"\",\n });\n\n const channelVersions = { ...this.checkpoint.channel_versions };\n const newVersions = getNewChannelVersions(\n this.checkpointPreviousVersions,\n channelVersions\n );\n this.checkpointPreviousVersions = channelVersions;\n // save it, without blocking\n // if there's a previous checkpoint save in progress, wait for it\n // ensuring checkpointers receive checkpoints in order\n void this._checkpointerPutAfterPrevious({\n config: { ...this.checkpointConfig },\n checkpoint: copyCheckpoint(checkpoint),\n metadata: { ...this.checkpointMetadata },\n newVersions,\n });\n this.checkpointConfig = {\n ...this.checkpointConfig,\n configurable: {\n ...this.checkpointConfig.configurable,\n checkpoint_id: this.checkpoint.id,\n },\n };\n };\n\n if (!exiting) {\n this.checkpointMetadata = {\n ...inputMetadata,\n step: this.step,\n parents: this.config.configurable?.[CONFIG_KEY_CHECKPOINT_MAP] ?? {},\n };\n }\n\n // create new checkpoint\n this.checkpoint = createCheckpoint(\n this.checkpoint,\n doCheckpoint ? this.channels : undefined,\n this.step,\n exiting ? { id: this.checkpoint.id } : undefined\n );\n\n // Bail if no checkpointer\n if (doCheckpoint) storeCheckpoint(this.checkpoint);\n\n if (!exiting) {\n // increment step\n this.step += 1;\n }\n }\n\n protected _flushPendingWrites() {\n if (this.checkpointer == null) return;\n if (this.checkpointPendingWrites.length === 0) return;\n\n // patch config\n const config = patchConfigurable(this.checkpointConfig, {\n [CONFIG_KEY_CHECKPOINT_NS]: this.config.configurable?.checkpoint_ns ?? \"\",\n [CONFIG_KEY_CHECKPOINT_ID]: this.checkpoint.id,\n });\n\n // group writes by task id\n const byTask: Record<string, PendingWrite<string>[]> = {};\n for (const [tid, key, value] of this.checkpointPendingWrites) {\n byTask[tid] ??= [];\n byTask[tid].push([key, value]);\n }\n\n // submit writes to checkpointer\n for (const [tid, ws] of Object.entries(byTask)) {\n this.checkpointerPromises.push(\n this.checkpointer.putWrites(config, ws, tid)\n );\n }\n }\n\n protected _matchWrites(\n tasks: Record<string, PregelExecutableTask<string, string>>\n ) {\n for (const [tid, k, v] of this.checkpointPendingWrites) {\n if (k === ERROR || k === INTERRUPT || k === RESUME) {\n continue;\n }\n const task = Object.values(tasks).find((t) => t.id === tid);\n if (task) {\n task.writes.push([k, v]);\n }\n }\n for (const task of Object.values(tasks)) {\n if (task.writes.length > 0) {\n this._outputWrites(task.id, task.writes, true);\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_constants = require('../constants.cjs');
3
- const __langchain_core_callbacks_base = require_rolldown_runtime.__toESM(require("@langchain/core/callbacks/base"));
4
- const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
5
-
6
- //#region src/pregel/messages.ts
7
- function isChatGenerationChunk(x) {
8
- return (0, __langchain_core_messages.isBaseMessage)(x?.message);
9
- }
10
- /**
11
- * A callback handler that implements stream_mode=messages.
12
- * Collects messages from (1) chat model stream events and (2) node outputs.
13
- */
14
- var StreamMessagesHandler = class extends __langchain_core_callbacks_base.BaseCallbackHandler {
15
- name = "StreamMessagesHandler";
16
- streamFn;
17
- metadatas = {};
18
- seen = {};
19
- emittedChatModelRunIds = {};
20
- stableMessageIdMap = {};
21
- lc_prefer_streaming = true;
22
- constructor(streamFn) {
23
- super();
24
- this.streamFn = streamFn;
25
- }
26
- _emit(meta, message, runId, dedupe = false) {
27
- if (dedupe && message.id !== void 0 && this.seen[message.id] !== void 0) return;
28
- let messageId = message.id;
29
- if (runId != null) if ((0, __langchain_core_messages.isToolMessage)(message)) messageId ??= `run-${runId}-tool-${message.tool_call_id}`;
30
- else {
31
- if (messageId == null || messageId === `run-${runId}`) messageId = this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;
32
- this.stableMessageIdMap[runId] ??= messageId;
33
- }
34
- if (messageId !== message.id) {
35
- message.id = messageId;
36
- message.lc_kwargs.id = messageId;
37
- }
38
- if (message.id != null) this.seen[message.id] = message;
39
- this.streamFn([
40
- meta[0],
41
- "messages",
42
- [message, meta[1]]
43
- ]);
44
- }
45
- handleChatModelStart(_llm, _messages, runId, _parentRunId, _extraParams, tags, metadata, name) {
46
- if (metadata && (!tags || !tags.includes(require_constants.TAG_NOSTREAM) && !tags.includes("nostream"))) this.metadatas[runId] = [metadata.langgraph_checkpoint_ns.split("|"), {
47
- tags,
48
- name,
49
- ...metadata
50
- }];
51
- }
52
- handleLLMNewToken(token, _idx, runId, _parentRunId, _tags, fields) {
53
- const chunk = fields?.chunk;
54
- this.emittedChatModelRunIds[runId] = true;
55
- if (this.metadatas[runId] !== void 0) if (isChatGenerationChunk(chunk)) this._emit(this.metadatas[runId], chunk.message, runId);
56
- else this._emit(this.metadatas[runId], new __langchain_core_messages.AIMessageChunk({ content: token }), runId);
57
- }
58
- handleLLMEnd(output, runId) {
59
- if (this.metadatas[runId] === void 0) return;
60
- if (!this.emittedChatModelRunIds[runId]) {
61
- const chatGeneration = output.generations?.[0]?.[0];
62
- if ((0, __langchain_core_messages.isBaseMessage)(chatGeneration?.message)) this._emit(this.metadatas[runId], chatGeneration?.message, runId, true);
63
- delete this.emittedChatModelRunIds[runId];
64
- }
65
- delete this.metadatas[runId];
66
- delete this.stableMessageIdMap[runId];
67
- }
68
- handleLLMError(_err, runId) {
69
- delete this.metadatas[runId];
70
- }
71
- handleChainStart(_chain, inputs, runId, _parentRunId, tags, metadata, _runType, name) {
72
- if (metadata !== void 0 && name === metadata.langgraph_node && (tags === void 0 || !tags.includes(require_constants.TAG_HIDDEN))) {
73
- this.metadatas[runId] = [metadata.langgraph_checkpoint_ns.split("|"), {
74
- tags,
75
- name,
76
- ...metadata
77
- }];
78
- if (typeof inputs === "object") {
79
- for (const value of Object.values(inputs)) if (((0, __langchain_core_messages.isBaseMessage)(value) || (0, __langchain_core_messages.isBaseMessageChunk)(value)) && value.id !== void 0) this.seen[value.id] = value;
80
- else if (Array.isArray(value)) {
81
- for (const item of value) if (((0, __langchain_core_messages.isBaseMessage)(item) || (0, __langchain_core_messages.isBaseMessageChunk)(item)) && item.id !== void 0) this.seen[item.id] = item;
82
- }
83
- }
84
- }
85
- }
86
- handleChainEnd(outputs, runId) {
87
- const metadata = this.metadatas[runId];
88
- delete this.metadatas[runId];
89
- if (metadata !== void 0) {
90
- if ((0, __langchain_core_messages.isBaseMessage)(outputs)) this._emit(metadata, outputs, runId, true);
91
- else if (Array.isArray(outputs)) {
92
- for (const value of outputs) if ((0, __langchain_core_messages.isBaseMessage)(value)) this._emit(metadata, value, runId, true);
93
- } else if (outputs != null && typeof outputs === "object") {
94
- for (const value of Object.values(outputs)) if ((0, __langchain_core_messages.isBaseMessage)(value)) this._emit(metadata, value, runId, true);
95
- else if (Array.isArray(value)) {
96
- for (const item of value) if ((0, __langchain_core_messages.isBaseMessage)(item)) this._emit(metadata, item, runId, true);
97
- }
98
- }
99
- }
100
- }
101
- handleChainError(_err, runId) {
102
- delete this.metadatas[runId];
103
- }
104
- };
105
-
106
- //#endregion
107
- exports.StreamMessagesHandler = StreamMessagesHandler;
108
- //# sourceMappingURL=messages.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.cjs","names":["BaseCallbackHandler","TAG_NOSTREAM","AIMessageChunk","TAG_HIDDEN"],"sources":["../../src/pregel/messages.ts"],"sourcesContent":["import {\n BaseCallbackHandler,\n HandleLLMNewTokenCallbackFields,\n NewTokenIndices,\n} from \"@langchain/core/callbacks/base\";\nimport {\n AIMessageChunk,\n BaseMessage,\n isBaseMessage,\n isBaseMessageChunk,\n isToolMessage,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n ChatGeneration,\n ChatGenerationChunk,\n LLMResult,\n} from \"@langchain/core/outputs\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Meta = [string[], Record<string, any>];\n\nfunction isChatGenerationChunk(x: unknown): x is ChatGenerationChunk {\n return isBaseMessage((x as ChatGenerationChunk)?.message);\n}\n\n/**\n * A callback handler that implements stream_mode=messages.\n * Collects messages from (1) chat model stream events and (2) node outputs.\n */\n// TODO: Make this import and explicitly implement the\n// CallbackHandlerPrefersStreaming interface once we drop support for core 0.2\nexport class StreamMessagesHandler extends BaseCallbackHandler {\n name = \"StreamMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage> = {};\n\n emittedChatModelRunIds: Record<string, boolean> = {};\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_streaming = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n _emit(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n if (\n dedupe &&\n message.id !== undefined &&\n this.seen[message.id] !== undefined\n ) {\n return;\n }\n\n let messageId = message.id;\n\n if (runId != null) {\n if (isToolMessage(message)) {\n // Distinguish tool messages by tool call ID.\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n // For instance in ChatAnthropic, the first chunk has an message ID\n // but the subsequent chunks do not. To avoid clients seeing two messages\n // we rename the message ID if it's being auto-set to `run-${runId}`\n // (see https://github.com/langchain-ai/langchainjs/pull/6646).\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n this.streamFn([meta[0], \"messages\", [message, meta[1]]]);\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n // Include legacy LangGraph SDK tag\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken(\n token: string,\n _idx: NewTokenIndices,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ) {\n const chunk = fields?.chunk;\n this.emittedChatModelRunIds[runId] = true;\n if (this.metadatas[runId] !== undefined) {\n if (isChatGenerationChunk(chunk)) {\n this._emit(this.metadatas[runId], chunk.message, runId);\n } else {\n this._emit(\n this.metadatas[runId],\n new AIMessageChunk({ content: token }),\n runId\n );\n }\n }\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n // Filter out runs that we do not have metadata for\n if (this.metadatas[runId] === undefined) return;\n\n // In JS, non-streaming runs do not call handleLLMNewToken at the model level\n if (!this.emittedChatModelRunIds[runId]) {\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n if (isBaseMessage(chatGeneration?.message)) {\n this._emit(this.metadatas[runId], chatGeneration?.message, runId, true);\n }\n delete this.emittedChatModelRunIds[runId];\n }\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n delete this.metadatas[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (isBaseMessage(value) || isBaseMessageChunk(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (isBaseMessage(item) || isBaseMessageChunk(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const metadata = this.metadatas[runId];\n delete this.metadatas[runId];\n if (metadata !== undefined) {\n if (isBaseMessage(outputs)) {\n this._emit(metadata, outputs, runId, true);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) {\n if (isBaseMessage(value)) {\n this._emit(metadata, value, runId, true);\n }\n }\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (isBaseMessage(value)) {\n this._emit(metadata, value, runId, true);\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (isBaseMessage(item)) {\n this._emit(metadata, item, runId, true);\n }\n }\n }\n }\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n }\n}\n"],"mappings":";;;;;;AA0BA,SAAS,sBAAsB,GAAsC;AACnE,qDAAsB,GAA2B;;;;;;AASnD,IAAa,wBAAb,cAA2CA,oDAAoB;CAC7D,OAAO;CAEP;CAEA,YAA8C;CAE9C,OAAoC;CAEpC,yBAAkD;CAElD,qBAA6C;CAE7C,sBAAsB;CAEtB,YAAY,UAA8C;AACxD;AACA,OAAK,WAAW;;CAGlB,MACE,MACA,SACA,OACA,SAAS,OACT;AACA,MACE,UACA,QAAQ,OAAO,UACf,KAAK,KAAK,QAAQ,QAAQ,OAE1B;EAGF,IAAI,YAAY,QAAQ;AAExB,MAAI,SAAS,KACX,kDAAkB,SAEhB,eAAc,OAAO,MAAM,QAAQ,QAAQ;OACtC;AAKL,OAAI,aAAa,QAAQ,cAAc,OAAO,QAC5C,aACE,KAAK,mBAAmB,UAAU,aAAa,OAAO;AAG1D,QAAK,mBAAmB,WAAW;;AAIvC,MAAI,cAAc,QAAQ,IAAI;AAE5B,WAAQ,KAAK;AAGb,WAAQ,UAAU,KAAK;;AAGzB,MAAI,QAAQ,MAAM,KAAM,MAAK,KAAK,QAAQ,MAAM;AAChD,OAAK,SAAS;GAAC,KAAK;GAAI;GAAY,CAAC,SAAS,KAAK;;;CAGrD,qBACE,MACA,WACA,OACA,cACA,cACA,MACA,UACA,MACA;AACA,MACE,aAEC,CAAC,QAAS,CAAC,KAAK,SAASC,mCAAiB,CAAC,KAAK,SAAS,aAE1D,MAAK,UAAU,SAAS,CACrB,SAAS,wBAAmC,MAAM,MACnD;GAAE;GAAM;GAAM,GAAG;;;CAKvB,kBACE,OACA,MACA,OACA,cACA,OACA,QACA;EACA,MAAM,QAAQ,QAAQ;AACtB,OAAK,uBAAuB,SAAS;AACrC,MAAI,KAAK,UAAU,WAAW,OAC5B,KAAI,sBAAsB,OACxB,MAAK,MAAM,KAAK,UAAU,QAAQ,MAAM,SAAS;MAEjD,MAAK,MACH,KAAK,UAAU,QACf,IAAIC,yCAAe,EAAE,SAAS,UAC9B;;CAMR,aAAa,QAAmB,OAAe;AAE7C,MAAI,KAAK,UAAU,WAAW,OAAW;AAGzC,MAAI,CAAC,KAAK,uBAAuB,QAAQ;GACvC,MAAM,iBAAiB,OAAO,cAAc,KAAK;AACjD,oDAAkB,gBAAgB,SAChC,MAAK,MAAM,KAAK,UAAU,QAAQ,gBAAgB,SAAS,OAAO;AAEpE,UAAO,KAAK,uBAAuB;;AAErC,SAAO,KAAK,UAAU;AACtB,SAAO,KAAK,mBAAmB;;CAIjC,eAAe,MAAW,OAAe;AACvC,SAAO,KAAK,UAAU;;CAGxB,iBACE,QACA,QACA,OACA,cACA,MACA,UACA,UACA,MACA;AACA,MACE,aAAa,UACb,SAAS,SAAS,mBACjB,SAAS,UAAa,CAAC,KAAK,SAASC,gCACtC;AACA,QAAK,UAAU,SAAS,CACrB,SAAS,wBAAmC,MAAM,MACnD;IAAE;IAAM;IAAM,GAAG;;AAGnB,OAAI,OAAO,WAAW,UACpB;SAAK,MAAM,SAAS,OAAO,OAAO,QAChC,mDACiB,4DAA6B,WAC5C,MAAM,OAAO,OAEb,MAAK,KAAK,MAAM,MAAM;aACb,MAAM,QAAQ,QACvB;UAAK,MAAM,QAAQ,MACjB,mDACiB,2DAA4B,UAC3C,KAAK,OAAO,OAEZ,MAAK,KAAK,KAAK,MAAM;;;;;CASnC,eAAe,SAAsB,OAAe;EAClD,MAAM,WAAW,KAAK,UAAU;AAChC,SAAO,KAAK,UAAU;AACtB,MAAI,aAAa,QACf;oDAAkB,SAChB,MAAK,MAAM,UAAU,SAAS,OAAO;YAC5B,MAAM,QAAQ,UACvB;SAAK,MAAM,SAAS,QAClB,kDAAkB,OAChB,MAAK,MAAM,UAAU,OAAO,OAAO;cAG9B,WAAW,QAAQ,OAAO,YAAY,UAC/C;SAAK,MAAM,SAAS,OAAO,OAAO,SAChC,kDAAkB,OAChB,MAAK,MAAM,UAAU,OAAO,OAAO;aAC1B,MAAM,QAAQ,QACvB;UAAK,MAAM,QAAQ,MACjB,kDAAkB,MAChB,MAAK,MAAM,UAAU,MAAM,OAAO;;;;;CAUhD,iBAAiB,MAAW,OAAe;AACzC,SAAO,KAAK,UAAU"}
@@ -1,107 +0,0 @@
1
- import { TAG_HIDDEN, TAG_NOSTREAM } from "../constants.js";
2
- import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
3
- import { AIMessageChunk, isBaseMessage, isBaseMessageChunk, isToolMessage } from "@langchain/core/messages";
4
-
5
- //#region src/pregel/messages.ts
6
- function isChatGenerationChunk(x) {
7
- return isBaseMessage(x?.message);
8
- }
9
- /**
10
- * A callback handler that implements stream_mode=messages.
11
- * Collects messages from (1) chat model stream events and (2) node outputs.
12
- */
13
- var StreamMessagesHandler = class extends BaseCallbackHandler {
14
- name = "StreamMessagesHandler";
15
- streamFn;
16
- metadatas = {};
17
- seen = {};
18
- emittedChatModelRunIds = {};
19
- stableMessageIdMap = {};
20
- lc_prefer_streaming = true;
21
- constructor(streamFn) {
22
- super();
23
- this.streamFn = streamFn;
24
- }
25
- _emit(meta, message, runId, dedupe = false) {
26
- if (dedupe && message.id !== void 0 && this.seen[message.id] !== void 0) return;
27
- let messageId = message.id;
28
- if (runId != null) if (isToolMessage(message)) messageId ??= `run-${runId}-tool-${message.tool_call_id}`;
29
- else {
30
- if (messageId == null || messageId === `run-${runId}`) messageId = this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;
31
- this.stableMessageIdMap[runId] ??= messageId;
32
- }
33
- if (messageId !== message.id) {
34
- message.id = messageId;
35
- message.lc_kwargs.id = messageId;
36
- }
37
- if (message.id != null) this.seen[message.id] = message;
38
- this.streamFn([
39
- meta[0],
40
- "messages",
41
- [message, meta[1]]
42
- ]);
43
- }
44
- handleChatModelStart(_llm, _messages, runId, _parentRunId, _extraParams, tags, metadata, name) {
45
- if (metadata && (!tags || !tags.includes(TAG_NOSTREAM) && !tags.includes("nostream"))) this.metadatas[runId] = [metadata.langgraph_checkpoint_ns.split("|"), {
46
- tags,
47
- name,
48
- ...metadata
49
- }];
50
- }
51
- handleLLMNewToken(token, _idx, runId, _parentRunId, _tags, fields) {
52
- const chunk = fields?.chunk;
53
- this.emittedChatModelRunIds[runId] = true;
54
- if (this.metadatas[runId] !== void 0) if (isChatGenerationChunk(chunk)) this._emit(this.metadatas[runId], chunk.message, runId);
55
- else this._emit(this.metadatas[runId], new AIMessageChunk({ content: token }), runId);
56
- }
57
- handleLLMEnd(output, runId) {
58
- if (this.metadatas[runId] === void 0) return;
59
- if (!this.emittedChatModelRunIds[runId]) {
60
- const chatGeneration = output.generations?.[0]?.[0];
61
- if (isBaseMessage(chatGeneration?.message)) this._emit(this.metadatas[runId], chatGeneration?.message, runId, true);
62
- delete this.emittedChatModelRunIds[runId];
63
- }
64
- delete this.metadatas[runId];
65
- delete this.stableMessageIdMap[runId];
66
- }
67
- handleLLMError(_err, runId) {
68
- delete this.metadatas[runId];
69
- }
70
- handleChainStart(_chain, inputs, runId, _parentRunId, tags, metadata, _runType, name) {
71
- if (metadata !== void 0 && name === metadata.langgraph_node && (tags === void 0 || !tags.includes(TAG_HIDDEN))) {
72
- this.metadatas[runId] = [metadata.langgraph_checkpoint_ns.split("|"), {
73
- tags,
74
- name,
75
- ...metadata
76
- }];
77
- if (typeof inputs === "object") {
78
- for (const value of Object.values(inputs)) if ((isBaseMessage(value) || isBaseMessageChunk(value)) && value.id !== void 0) this.seen[value.id] = value;
79
- else if (Array.isArray(value)) {
80
- for (const item of value) if ((isBaseMessage(item) || isBaseMessageChunk(item)) && item.id !== void 0) this.seen[item.id] = item;
81
- }
82
- }
83
- }
84
- }
85
- handleChainEnd(outputs, runId) {
86
- const metadata = this.metadatas[runId];
87
- delete this.metadatas[runId];
88
- if (metadata !== void 0) {
89
- if (isBaseMessage(outputs)) this._emit(metadata, outputs, runId, true);
90
- else if (Array.isArray(outputs)) {
91
- for (const value of outputs) if (isBaseMessage(value)) this._emit(metadata, value, runId, true);
92
- } else if (outputs != null && typeof outputs === "object") {
93
- for (const value of Object.values(outputs)) if (isBaseMessage(value)) this._emit(metadata, value, runId, true);
94
- else if (Array.isArray(value)) {
95
- for (const item of value) if (isBaseMessage(item)) this._emit(metadata, item, runId, true);
96
- }
97
- }
98
- }
99
- }
100
- handleChainError(_err, runId) {
101
- delete this.metadatas[runId];
102
- }
103
- };
104
-
105
- //#endregion
106
- export { StreamMessagesHandler };
107
- //# sourceMappingURL=messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.js","names":[],"sources":["../../src/pregel/messages.ts"],"sourcesContent":["import {\n BaseCallbackHandler,\n HandleLLMNewTokenCallbackFields,\n NewTokenIndices,\n} from \"@langchain/core/callbacks/base\";\nimport {\n AIMessageChunk,\n BaseMessage,\n isBaseMessage,\n isBaseMessageChunk,\n isToolMessage,\n} from \"@langchain/core/messages\";\nimport { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n ChatGeneration,\n ChatGenerationChunk,\n LLMResult,\n} from \"@langchain/core/outputs\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\n\nimport { TAG_HIDDEN, TAG_NOSTREAM } from \"../constants.js\";\nimport { StreamChunk } from \"./stream.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Meta = [string[], Record<string, any>];\n\nfunction isChatGenerationChunk(x: unknown): x is ChatGenerationChunk {\n return isBaseMessage((x as ChatGenerationChunk)?.message);\n}\n\n/**\n * A callback handler that implements stream_mode=messages.\n * Collects messages from (1) chat model stream events and (2) node outputs.\n */\n// TODO: Make this import and explicitly implement the\n// CallbackHandlerPrefersStreaming interface once we drop support for core 0.2\nexport class StreamMessagesHandler extends BaseCallbackHandler {\n name = \"StreamMessagesHandler\";\n\n streamFn: (streamChunk: StreamChunk) => void;\n\n metadatas: Record<string, Meta | undefined> = {};\n\n seen: Record<string, BaseMessage> = {};\n\n emittedChatModelRunIds: Record<string, boolean> = {};\n\n stableMessageIdMap: Record<string, string> = {};\n\n lc_prefer_streaming = true;\n\n constructor(streamFn: (streamChunk: StreamChunk) => void) {\n super();\n this.streamFn = streamFn;\n }\n\n _emit(\n meta: Meta,\n message: BaseMessage,\n runId: string | undefined,\n dedupe = false\n ) {\n if (\n dedupe &&\n message.id !== undefined &&\n this.seen[message.id] !== undefined\n ) {\n return;\n }\n\n let messageId = message.id;\n\n if (runId != null) {\n if (isToolMessage(message)) {\n // Distinguish tool messages by tool call ID.\n messageId ??= `run-${runId}-tool-${message.tool_call_id}`;\n } else {\n // For instance in ChatAnthropic, the first chunk has an message ID\n // but the subsequent chunks do not. To avoid clients seeing two messages\n // we rename the message ID if it's being auto-set to `run-${runId}`\n // (see https://github.com/langchain-ai/langchainjs/pull/6646).\n if (messageId == null || messageId === `run-${runId}`) {\n messageId =\n this.stableMessageIdMap[runId] ?? messageId ?? `run-${runId}`;\n }\n\n this.stableMessageIdMap[runId] ??= messageId;\n }\n }\n\n if (messageId !== message.id) {\n // eslint-disable-next-line no-param-reassign\n message.id = messageId;\n\n // eslint-disable-next-line no-param-reassign\n message.lc_kwargs.id = messageId;\n }\n\n if (message.id != null) this.seen[message.id] = message;\n this.streamFn([meta[0], \"messages\", [message, meta[1]]]);\n }\n\n handleChatModelStart(\n _llm: Serialized,\n _messages: BaseMessage[][],\n runId: string,\n _parentRunId?: string,\n _extraParams?: Record<string, unknown>,\n tags?: string[],\n metadata?: Record<string, unknown>,\n name?: string\n ) {\n if (\n metadata &&\n // Include legacy LangGraph SDK tag\n (!tags || (!tags.includes(TAG_NOSTREAM) && !tags.includes(\"nostream\")))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n }\n }\n\n handleLLMNewToken(\n token: string,\n _idx: NewTokenIndices,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n fields?: HandleLLMNewTokenCallbackFields\n ) {\n const chunk = fields?.chunk;\n this.emittedChatModelRunIds[runId] = true;\n if (this.metadatas[runId] !== undefined) {\n if (isChatGenerationChunk(chunk)) {\n this._emit(this.metadatas[runId], chunk.message, runId);\n } else {\n this._emit(\n this.metadatas[runId],\n new AIMessageChunk({ content: token }),\n runId\n );\n }\n }\n }\n\n handleLLMEnd(output: LLMResult, runId: string) {\n // Filter out runs that we do not have metadata for\n if (this.metadatas[runId] === undefined) return;\n\n // In JS, non-streaming runs do not call handleLLMNewToken at the model level\n if (!this.emittedChatModelRunIds[runId]) {\n const chatGeneration = output.generations?.[0]?.[0] as ChatGeneration;\n if (isBaseMessage(chatGeneration?.message)) {\n this._emit(this.metadatas[runId], chatGeneration?.message, runId, true);\n }\n delete this.emittedChatModelRunIds[runId];\n }\n delete this.metadatas[runId];\n delete this.stableMessageIdMap[runId];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleLLMError(_err: any, runId: string) {\n delete this.metadatas[runId];\n }\n\n handleChainStart(\n _chain: Serialized,\n inputs: ChainValues,\n runId: string,\n _parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n _runType?: string,\n name?: string\n ) {\n if (\n metadata !== undefined &&\n name === metadata.langgraph_node &&\n (tags === undefined || !tags.includes(TAG_HIDDEN))\n ) {\n this.metadatas[runId] = [\n (metadata.langgraph_checkpoint_ns as string).split(\"|\"),\n { tags, name, ...metadata },\n ];\n\n if (typeof inputs === \"object\") {\n for (const value of Object.values(inputs)) {\n if (\n (isBaseMessage(value) || isBaseMessageChunk(value)) &&\n value.id !== undefined\n ) {\n this.seen[value.id] = value;\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (\n (isBaseMessage(item) || isBaseMessageChunk(item)) &&\n item.id !== undefined\n ) {\n this.seen[item.id] = item;\n }\n }\n }\n }\n }\n }\n }\n\n handleChainEnd(outputs: ChainValues, runId: string) {\n const metadata = this.metadatas[runId];\n delete this.metadatas[runId];\n if (metadata !== undefined) {\n if (isBaseMessage(outputs)) {\n this._emit(metadata, outputs, runId, true);\n } else if (Array.isArray(outputs)) {\n for (const value of outputs) {\n if (isBaseMessage(value)) {\n this._emit(metadata, value, runId, true);\n }\n }\n } else if (outputs != null && typeof outputs === \"object\") {\n for (const value of Object.values(outputs)) {\n if (isBaseMessage(value)) {\n this._emit(metadata, value, runId, true);\n } else if (Array.isArray(value)) {\n for (const item of value) {\n if (isBaseMessage(item)) {\n this._emit(metadata, item, runId, true);\n }\n }\n }\n }\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleChainError(_err: any, runId: string) {\n delete this.metadatas[runId];\n }\n}\n"],"mappings":"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"}
@@ -1,152 +0,0 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_constants = require('../constants.cjs');
3
- const require_utils = require('../utils.cjs');
4
- const require_write = require('./write.cjs');
5
- const __langchain_core_runnables = require_rolldown_runtime.__toESM(require("@langchain/core/runnables"));
6
-
7
- //#region src/pregel/read.ts
8
- var ChannelRead = class ChannelRead extends require_utils.RunnableCallable {
9
- lc_graph_name = "ChannelRead";
10
- channel;
11
- fresh = false;
12
- mapper;
13
- constructor(channel, mapper, fresh = false) {
14
- super({ func: (_, config) => ChannelRead.doRead(config, this.channel, this.fresh, this.mapper) });
15
- this.fresh = fresh;
16
- this.mapper = mapper;
17
- this.channel = channel;
18
- this.name = Array.isArray(channel) ? `ChannelRead<${channel.join(",")}>` : `ChannelRead<${channel}>`;
19
- }
20
- static doRead(config, channel, fresh, mapper) {
21
- const read = config.configurable?.[require_constants.CONFIG_KEY_READ];
22
- if (!read) throw new Error("Runnable is not configured with a read function. Make sure to call in the context of a Pregel process");
23
- if (mapper) return mapper(read(channel, fresh));
24
- else return read(channel, fresh);
25
- }
26
- };
27
- const defaultRunnableBound = /* @__PURE__ */ new __langchain_core_runnables.RunnablePassthrough();
28
- var PregelNode = class PregelNode extends __langchain_core_runnables.RunnableBinding {
29
- lc_graph_name = "PregelNode";
30
- channels;
31
- triggers = [];
32
- mapper;
33
- writers = [];
34
- bound = defaultRunnableBound;
35
- kwargs = {};
36
- metadata = {};
37
- tags = [];
38
- retryPolicy;
39
- cachePolicy;
40
- subgraphs;
41
- ends;
42
- constructor(fields) {
43
- const { channels, triggers, mapper, writers, bound, kwargs, metadata, retryPolicy, cachePolicy, tags, subgraphs, ends } = fields;
44
- const mergedTags = [...fields.config?.tags ? fields.config.tags : [], ...tags ?? []];
45
- super({
46
- ...fields,
47
- bound: fields.bound ?? defaultRunnableBound,
48
- config: {
49
- ...fields.config ? fields.config : {},
50
- tags: mergedTags
51
- }
52
- });
53
- this.channels = channels;
54
- this.triggers = triggers;
55
- this.mapper = mapper;
56
- this.writers = writers ?? this.writers;
57
- this.bound = bound ?? this.bound;
58
- this.kwargs = kwargs ?? this.kwargs;
59
- this.metadata = metadata ?? this.metadata;
60
- this.tags = mergedTags;
61
- this.retryPolicy = retryPolicy;
62
- this.cachePolicy = cachePolicy;
63
- this.subgraphs = subgraphs;
64
- this.ends = ends;
65
- }
66
- getWriters() {
67
- const newWriters = [...this.writers];
68
- while (newWriters.length > 1 && newWriters[newWriters.length - 1] instanceof require_write.ChannelWrite && newWriters[newWriters.length - 2] instanceof require_write.ChannelWrite) {
69
- const endWriters = newWriters.slice(-2);
70
- const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);
71
- newWriters[newWriters.length - 2] = new require_write.ChannelWrite(combinedWrites, endWriters[0].config?.tags);
72
- newWriters.pop();
73
- }
74
- return newWriters;
75
- }
76
- getNode() {
77
- const writers = this.getWriters();
78
- if (this.bound === defaultRunnableBound && writers.length === 0) return void 0;
79
- else if (this.bound === defaultRunnableBound && writers.length === 1) return writers[0];
80
- else if (this.bound === defaultRunnableBound) return new __langchain_core_runnables.RunnableSequence({
81
- first: writers[0],
82
- middle: writers.slice(1, writers.length - 1),
83
- last: writers[writers.length - 1],
84
- omitSequenceTags: true
85
- });
86
- else if (writers.length > 0) return new __langchain_core_runnables.RunnableSequence({
87
- first: this.bound,
88
- middle: writers.slice(0, writers.length - 1),
89
- last: writers[writers.length - 1],
90
- omitSequenceTags: true
91
- });
92
- else return this.bound;
93
- }
94
- join(channels) {
95
- if (!Array.isArray(channels)) throw new Error("channels must be a list");
96
- if (typeof this.channels !== "object") throw new Error("all channels must be named when using .join()");
97
- return new PregelNode({
98
- channels: {
99
- ...this.channels,
100
- ...Object.fromEntries(channels.map((chan) => [chan, chan]))
101
- },
102
- triggers: this.triggers,
103
- mapper: this.mapper,
104
- writers: this.writers,
105
- bound: this.bound,
106
- kwargs: this.kwargs,
107
- config: this.config,
108
- retryPolicy: this.retryPolicy,
109
- cachePolicy: this.cachePolicy
110
- });
111
- }
112
- pipe(coerceable) {
113
- if (require_write.ChannelWrite.isWriter(coerceable)) return new PregelNode({
114
- channels: this.channels,
115
- triggers: this.triggers,
116
- mapper: this.mapper,
117
- writers: [...this.writers, coerceable],
118
- bound: this.bound,
119
- config: this.config,
120
- kwargs: this.kwargs,
121
- retryPolicy: this.retryPolicy,
122
- cachePolicy: this.cachePolicy
123
- });
124
- else if (this.bound === defaultRunnableBound) return new PregelNode({
125
- channels: this.channels,
126
- triggers: this.triggers,
127
- mapper: this.mapper,
128
- writers: this.writers,
129
- bound: (0, __langchain_core_runnables._coerceToRunnable)(coerceable),
130
- config: this.config,
131
- kwargs: this.kwargs,
132
- retryPolicy: this.retryPolicy,
133
- cachePolicy: this.cachePolicy
134
- });
135
- else return new PregelNode({
136
- channels: this.channels,
137
- triggers: this.triggers,
138
- mapper: this.mapper,
139
- writers: this.writers,
140
- bound: this.bound.pipe(coerceable),
141
- config: this.config,
142
- kwargs: this.kwargs,
143
- retryPolicy: this.retryPolicy,
144
- cachePolicy: this.cachePolicy
145
- });
146
- }
147
- };
148
-
149
- //#endregion
150
- exports.ChannelRead = ChannelRead;
151
- exports.PregelNode = PregelNode;
152
- //# sourceMappingURL=read.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.cjs","names":["RunnableCallable","read: (arg: string | string[], fresh: boolean) => unknown","CONFIG_KEY_READ","RunnablePassthrough","RunnableBinding","ChannelWrite","RunnableSequence"],"sources":["../../src/pregel/read.ts"],"sourcesContent":["import {\n Runnable,\n RunnableBinding,\n RunnableBindingArgs,\n RunnableConfig,\n RunnablePassthrough,\n RunnableSequence,\n _coerceToRunnable,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { CONFIG_KEY_READ } from \"../constants.js\";\nimport { ChannelWrite } from \"./write.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type { CachePolicy, RetryPolicy } from \"./utils/index.js\";\n\nexport class ChannelRead<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any\n> extends RunnableCallable {\n lc_graph_name = \"ChannelRead\";\n\n channel: string | Array<string>;\n\n fresh: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(\n channel: string | Array<string>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any,\n fresh: boolean = false\n ) {\n super({\n func: (_: RunInput, config: RunnableConfig) =>\n ChannelRead.doRead(config, this.channel, this.fresh, this.mapper),\n });\n this.fresh = fresh;\n this.mapper = mapper;\n this.channel = channel;\n this.name = Array.isArray(channel)\n ? `ChannelRead<${channel.join(\",\")}>`\n : `ChannelRead<${channel}>`;\n }\n\n static doRead<T = unknown>(\n config: RunnableConfig,\n channel: string | Array<string>,\n fresh: boolean,\n mapper?: (args: unknown) => unknown\n ): T {\n const read: (arg: string | string[], fresh: boolean) => unknown =\n config.configurable?.[CONFIG_KEY_READ];\n if (!read) {\n throw new Error(\n \"Runnable is not configured with a read function. Make sure to call in the context of a Pregel process\"\n );\n }\n if (mapper) {\n return mapper(read(channel, fresh)) as T;\n } else {\n return read(channel, fresh) as T;\n }\n }\n}\n\nconst defaultRunnableBound =\n /* #__PURE__ */ new RunnablePassthrough<PregelNodeInputType>();\n\ninterface PregelNodeArgs<RunInput, RunOutput>\n extends Partial<RunnableBindingArgs<RunInput, RunOutput>> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\n\nexport class PregelNode<\n RunInput = PregelNodeInputType,\n RunOutput = PregelNodeOutputType\n> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name = \"PregelNode\";\n\n channels: Record<string, string> | string[];\n\n triggers: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n writers: Runnable[] = [];\n\n bound: Runnable<RunInput, RunOutput> = defaultRunnableBound;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any> = {};\n\n metadata: Record<string, unknown> = {};\n\n tags: string[] = [];\n\n retryPolicy?: RetryPolicy;\n\n cachePolicy?: CachePolicy;\n\n subgraphs?: Runnable[];\n\n ends?: string[];\n\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>) {\n const {\n channels,\n triggers,\n mapper,\n writers,\n bound,\n kwargs,\n metadata,\n retryPolicy,\n cachePolicy,\n tags,\n subgraphs,\n ends,\n } = fields;\n const mergedTags = [\n ...(fields.config?.tags ? fields.config.tags : []),\n ...(tags ?? []),\n ];\n\n super({\n ...fields,\n bound:\n fields.bound ??\n (defaultRunnableBound as unknown as Runnable<RunInput, RunOutput>),\n config: {\n ...(fields.config ? fields.config : {}),\n tags: mergedTags,\n },\n });\n\n this.channels = channels;\n this.triggers = triggers;\n this.mapper = mapper;\n this.writers = writers ?? this.writers;\n this.bound = bound ?? this.bound;\n this.kwargs = kwargs ?? this.kwargs;\n this.metadata = metadata ?? this.metadata;\n this.tags = mergedTags;\n this.retryPolicy = retryPolicy;\n this.cachePolicy = cachePolicy;\n this.subgraphs = subgraphs;\n this.ends = ends;\n }\n\n getWriters(): Array<Runnable> {\n const newWriters = [...this.writers];\n while (\n newWriters.length > 1 &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 1] instanceof ChannelWrite &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 2] instanceof ChannelWrite\n ) {\n // we can combine writes if they are consecutive\n // careful to not modify the original writers list or ChannelWrite\n const endWriters = newWriters.slice(-2) as ChannelWrite[];\n const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);\n newWriters[newWriters.length - 2] = new ChannelWrite(\n combinedWrites,\n endWriters[0].config?.tags\n );\n newWriters.pop();\n }\n return newWriters;\n }\n\n getNode(): Runnable<RunInput, RunOutput> | undefined {\n const writers = this.getWriters();\n if (this.bound === defaultRunnableBound && writers.length === 0) {\n return undefined;\n } else if (this.bound === defaultRunnableBound && writers.length === 1) {\n return writers[0];\n } else if (this.bound === defaultRunnableBound) {\n return new RunnableSequence({\n first: writers[0],\n middle: writers.slice(1, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else if (writers.length > 0) {\n return new RunnableSequence({\n first: this.bound,\n middle: writers.slice(0, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else {\n return this.bound;\n }\n }\n\n join(channels: Array<string>): PregelNode<RunInput, RunOutput> {\n if (!Array.isArray(channels)) {\n throw new Error(\"channels must be a list\");\n }\n if (typeof this.channels !== \"object\") {\n throw new Error(\"all channels must be named when using .join()\");\n }\n\n return new PregelNode<RunInput, RunOutput>({\n channels: {\n ...this.channels,\n ...Object.fromEntries(channels.map((chan) => [chan, chan])),\n },\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound,\n kwargs: this.kwargs,\n config: this.config,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n }\n\n pipe<NewRunOutput>(\n coerceable: RunnableLike\n ): PregelNode<RunInput, Exclude<NewRunOutput, Error>> {\n if (ChannelWrite.isWriter(coerceable)) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: [...this.writers, coerceable],\n bound: this.bound as unknown as PregelNode<\n RunInput,\n Exclude<NewRunOutput, Error>\n >,\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n } else if (this.bound === defaultRunnableBound) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: _coerceToRunnable<RunInput, NewRunOutput>(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n } else {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound.pipe(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n }\n }\n}\n"],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- import { CachePolicy, RetryPolicy } from "./utils/index.cjs";
2
- import { Runnable, RunnableBinding, RunnableBindingArgs, RunnableConfig, RunnableLike } from "@langchain/core/runnables";
3
-
4
- //#region src/pregel/read.d.ts
5
-
6
- interface PregelNodeArgs<RunInput, RunOutput> extends Partial<RunnableBindingArgs<RunInput, RunOutput>> {
7
- channels: Record<string, string> | string[];
8
- triggers: Array<string>;
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- mapper?: (args: any) => any;
11
- writers?: Runnable<RunOutput, unknown>[];
12
- tags?: string[];
13
- bound?: Runnable<RunInput, RunOutput>;
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- kwargs?: Record<string, any>;
16
- config?: RunnableConfig;
17
- metadata?: Record<string, unknown>;
18
- retryPolicy?: RetryPolicy;
19
- cachePolicy?: CachePolicy;
20
- subgraphs?: Runnable[];
21
- ends?: string[];
22
- }
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- type PregelNodeInputType = any;
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- type PregelNodeOutputType = any;
27
- declare class PregelNode<RunInput = PregelNodeInputType, RunOutput = PregelNodeOutputType> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {
28
- lc_graph_name: string;
29
- channels: Record<string, string> | string[];
30
- triggers: string[];
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
- mapper?: (args: any) => any;
33
- writers: Runnable[];
34
- bound: Runnable<RunInput, RunOutput>;
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
- kwargs: Record<string, any>;
37
- metadata: Record<string, unknown>;
38
- tags: string[];
39
- retryPolicy?: RetryPolicy;
40
- cachePolicy?: CachePolicy;
41
- subgraphs?: Runnable[];
42
- ends?: string[];
43
- constructor(fields: PregelNodeArgs<RunInput, RunOutput>);
44
- getWriters(): Array<Runnable>;
45
- getNode(): Runnable<RunInput, RunOutput> | undefined;
46
- join(channels: Array<string>): PregelNode<RunInput, RunOutput>;
47
- pipe<NewRunOutput>(coerceable: RunnableLike): PregelNode<RunInput, Exclude<NewRunOutput, Error>>;
48
- }
49
- //#endregion
50
- export { PregelNode };
51
- //# sourceMappingURL=read.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.d.cts","names":["Runnable","RunnableBinding","RunnableBindingArgs","RunnableConfig","RunnableLike","RunnableCallable","CachePolicy","RetryPolicy","ChannelRead","Array","T","PregelNodeArgs","RunInput","RunOutput","Record","Partial","PregelNodeInputType","PregelNodeOutputType","PregelNode","NewRunOutput","Error","Exclude"],"sources":["../../src/pregel/read.d.ts"],"sourcesContent":["import { Runnable, RunnableBinding, RunnableBindingArgs, RunnableConfig, type RunnableLike } from \"@langchain/core/runnables\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nexport declare class ChannelRead<\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nRunInput = any> extends RunnableCallable {\n lc_graph_name: string;\n channel: string | Array<string>;\n fresh: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(channel: string | Array<string>, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any, fresh?: boolean);\n static doRead<T = unknown>(config: RunnableConfig, channel: string | Array<string>, fresh: boolean, mapper?: (args: unknown) => unknown): T;\n}\ninterface PregelNodeArgs<RunInput, RunOutput> extends Partial<RunnableBindingArgs<RunInput, RunOutput>> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\nexport declare class PregelNode<RunInput = PregelNodeInputType, RunOutput = PregelNodeOutputType> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name: string;\n channels: Record<string, string> | string[];\n triggers: string[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers: Runnable[];\n bound: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any>;\n metadata: Record<string, unknown>;\n tags: string[];\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>);\n getWriters(): Array<Runnable>;\n getNode(): Runnable<RunInput, RunOutput> | undefined;\n join(channels: Array<string>): PregelNode<RunInput, RunOutput>;\n pipe<NewRunOutput>(coerceable: RunnableLike): PregelNode<RunInput, Exclude<NewRunOutput, Error>>;\n}\nexport {};\n"],"mappings":";;;;;UAiBUW,cAUGR,CAAAA,QAAAA,EAAAA,SAAAA,CAAAA,SAVyCY,OAUzCZ,CAViDD,mBAUjDC,CAVqES,QAUrET,EAV+EU,SAU/EV,CAAAA,CAAAA,CAAAA;UACEW,EAVDA,MAUCA,CAAAA,MAAAA,EAAAA,MAAAA,CAAAA,GAAAA,MAAAA,EAAAA;UACGP,EAVJE,KAUIF,CAAAA,MAAAA,CAAAA;;QAEFP,CAAAA,EAAAA,CAAAA,IAAAA,EAAAA,GAAAA,EAAAA,GAAAA,GAAAA;SAdsCe,CAAAA,EAKxCf,QALwCe,CAK/BF,SAL+BE,EAAAA,OAAAA,CAAAA,EAAAA;;EAkB1CC,KAAAA,CAAAA,EAXAhB,QAWAgB,CAXSJ,QAWU,EAXAC,SAWA,CAAA;EAEnBI;EACSC,MAAAA,CAAAA,EAZRJ,MAYkB,CAAA,MAAA,EAAA,GAAA,CAAA;EAAA,MAAA,CAAA,EAXlBX,cAWkB;UAAYa,CAAAA,EAV5BF,MAU4BE,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA;aAAiCC,CAAAA,EAT1DV,WAS0DU;aAA8CL,CAAAA,EARxGN,WAQwGM;WAAUC,CAAAA,EAPpHb,QAOoHa,EAAAA;MAAWV,CAAAA,EAAAA,MAAAA,EAAAA;;;AAO3HS,KAVRI,mBAAAA,GAUQJ,GAAAA;;AAATZ,KARCiB,oBAAAA,GAQDjB,GAAAA;AAECc,cATSI,UASTJ,CAAAA,WAT+BE,mBAS/BF,EAAAA,YATgEG,oBAShEH,CAAAA,SAT8Fb,eAS9Fa,CAT8GF,QAS9GE,EATwHD,SASxHC,EATmIX,cASnIW,CAAAA,CAAAA;eACEA,EAAAA,MAAAA;UAEIP,EAVJO,MAUIP,CAAAA,MAAAA,EAAAA,MAAAA,CAAAA,GAAAA,MAAAA,EAAAA;UACAD,EAAAA,MAAAA,EAAAA;;QAGqBM,CAAAA,EAAAA,CAAAA,IAAAA,EAAAA,GAAAA,EAAAA,GAAAA,GAAAA;SAAUC,EAVpCb,QAUoCa,EAAAA;OAAzBF,EATbX,QASaW,CATJC,QASID,EATME,SASNF,CAAAA;;QACNF,EARNK,MAQML,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA;UACMG,EARVE,MAQUF,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA;MAAUC,EAAAA,MAAAA,EAAAA;aAAnBb,CAAAA,EANGO,WAMHP;aACIS,CAAAA,EANDH,WAMCG;WAA2BG,CAAAA,EAL9BZ,QAK8BY,EAAAA;MAAUC,CAAAA,EAAAA,MAAAA,EAAAA;aAArBK,CAAAA,MAAAA,EAHXP,cAGWO,CAHIN,QAGJM,EAHcL,SAGdK,CAAAA;YACAd,CAAAA,CAAAA,EAHjBK,KAGiBL,CAHXJ,QAGWI,CAAAA;SAA0BQ,CAAAA,CAAAA,EAF9CZ,QAE8CY,CAFrCA,QAEqCA,EAF3BC,SAE2BD,CAAAA,GAAAA,SAAAA;MAAkBO,CAAAA,QAAAA,EAD5DV,KAC4DU,CAAAA,MAAAA,CAAAA,CAAAA,EAD5CD,UAC4CC,CADjCP,QACiCO,EADvBN,SACuBM,CAAAA;MAAcC,CAAAA,YAAAA,CAAAA,CAAAA,UAAAA,EAA1DhB,YAA0DgB,CAAAA,EAA3CF,UAA2CE,CAAhCR,QAAgCQ,EAAtBC,OAAsBD,CAAdD,YAAcC,EAAAA,KAAAA,CAAAA,CAAAA"}