@langchain/langgraph 1.0.7 → 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 -286
  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 -349
  293. package/dist/pregel/remote.cjs.map +0 -1
  294. package/dist/pregel/remote.d.cts +0 -123
  295. package/dist/pregel/remote.d.cts.map +0 -1
  296. package/dist/pregel/remote.d.ts +0 -123
  297. package/dist/pregel/remote.d.ts.map +0 -1
  298. package/dist/pregel/remote.js +0 -348
  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,567 +0,0 @@
1
- import { EmptyChannelError, InvalidUpdateError } from "../errors.js";
2
- import { createCheckpoint, emptyChannels, getOnlyChannels } from "../channels/base.js";
3
- import { CACHE_NS_WRITES, CHECKPOINT_NAMESPACE_END, CHECKPOINT_NAMESPACE_SEPARATOR, CONFIG_KEY_CHECKPOINTER, CONFIG_KEY_CHECKPOINT_MAP, CONFIG_KEY_PREVIOUS_STATE, CONFIG_KEY_READ, CONFIG_KEY_RESUME_MAP, CONFIG_KEY_SCRATCHPAD, CONFIG_KEY_SEND, CONFIG_KEY_TASK_ID, ERROR, INTERRUPT, NO_WRITES, NULL_TASK_ID, PREVIOUS, PULL, PUSH, RESERVED, RESUME, RETURN, START, Send, TAG_HIDDEN, TASKS, _isSend, _isSendInterface } from "../constants.js";
4
- import { XXH3 } from "../hash.js";
5
- import { readChannel, readChannels } from "./io.js";
6
- import { isCall } from "./types.js";
7
- import { getNullChannelVersion } from "./utils/index.js";
8
- import { getRunnableForFunc } from "./call.js";
9
- import { copyCheckpoint, maxChannelVersion, uuid5 } from "@langchain/langgraph-checkpoint";
10
- import { mergeConfigs, patchConfig } from "@langchain/core/runnables";
11
-
12
- //#region src/pregel/algo.ts
13
- const increment = (current) => {
14
- return current !== void 0 ? current + 1 : 1;
15
- };
16
- function triggersNextStep(updatedChannels, triggerToNodes) {
17
- if (triggerToNodes == null) return false;
18
- for (const chan of updatedChannels) if (triggerToNodes[chan]) return true;
19
- return false;
20
- }
21
- function maxChannelMapVersion(channelVersions) {
22
- let maxVersion;
23
- for (const chan in channelVersions) {
24
- if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;
25
- if (maxVersion == null) maxVersion = channelVersions[chan];
26
- else maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);
27
- }
28
- return maxVersion;
29
- }
30
- function shouldInterrupt(checkpoint, interruptNodes, tasks) {
31
- const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
32
- const seen = checkpoint.versions_seen[INTERRUPT] ?? {};
33
- let anyChannelUpdated = false;
34
- if ((checkpoint.channel_versions[START] ?? nullVersion) > (seen[START] ?? nullVersion)) anyChannelUpdated = true;
35
- else for (const chan in checkpoint.channel_versions) {
36
- if (!Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)) continue;
37
- if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {
38
- anyChannelUpdated = true;
39
- break;
40
- }
41
- }
42
- const anyTriggeredNodeInInterruptNodes = tasks.some((task) => interruptNodes === "*" ? !task.config?.tags?.includes(TAG_HIDDEN) : interruptNodes.includes(task.name));
43
- return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;
44
- }
45
- function _localRead(checkpoint, channels, task, select, fresh = false) {
46
- let updated = /* @__PURE__ */ new Set();
47
- if (!Array.isArray(select)) {
48
- for (const [c] of task.writes) if (c === select) {
49
- updated = new Set([c]);
50
- break;
51
- }
52
- updated = updated || /* @__PURE__ */ new Set();
53
- } else updated = new Set(select.filter((c) => task.writes.some(([key, _]) => key === c)));
54
- let values;
55
- if (fresh && updated.size > 0) {
56
- const localChannels = Object.fromEntries(Object.entries(channels).filter(([k, _]) => updated.has(k)));
57
- const newCheckpoint = createCheckpoint(checkpoint, localChannels, -1);
58
- const newChannels = emptyChannels(localChannels, newCheckpoint);
59
- _applyWrites(copyCheckpoint(newCheckpoint), newChannels, [task], void 0, void 0);
60
- values = readChannels({
61
- ...channels,
62
- ...newChannels
63
- }, select);
64
- } else values = readChannels(channels, select);
65
- return values;
66
- }
67
- function _localWrite(commit, processes, writes) {
68
- for (const [chan, value] of writes) if ([PUSH, TASKS].includes(chan) && value != null) {
69
- if (!_isSend(value)) throw new InvalidUpdateError(`Invalid packet type, expected SendProtocol, got ${JSON.stringify(value)}`);
70
- if (!(value.node in processes)) throw new InvalidUpdateError(`Invalid node name "${value.node}" in Send packet`);
71
- }
72
- commit(writes);
73
- }
74
- const IGNORE = new Set([
75
- NO_WRITES,
76
- PUSH,
77
- RESUME,
78
- INTERRUPT,
79
- RETURN,
80
- ERROR
81
- ]);
82
- function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNodes) {
83
- tasks.sort((a, b) => {
84
- const aPath = a.path?.slice(0, 3) || [];
85
- const bPath = b.path?.slice(0, 3) || [];
86
- for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {
87
- if (aPath[i] < bPath[i]) return -1;
88
- if (aPath[i] > bPath[i]) return 1;
89
- }
90
- return aPath.length - bPath.length;
91
- });
92
- const bumpStep = tasks.some((task) => task.triggers.length > 0);
93
- const onlyChannels = getOnlyChannels(channels);
94
- for (const task of tasks) {
95
- checkpoint.versions_seen[task.name] ??= {};
96
- for (const chan of task.triggers) if (chan in checkpoint.channel_versions) checkpoint.versions_seen[task.name][chan] = checkpoint.channel_versions[chan];
97
- }
98
- let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
99
- const channelsToConsume = new Set(tasks.flatMap((task) => task.triggers).filter((chan) => !RESERVED.includes(chan)));
100
- let usedNewVersion = false;
101
- for (const chan of channelsToConsume) if (chan in onlyChannels && onlyChannels[chan].consume()) {
102
- if (getNextVersion !== void 0) {
103
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
104
- usedNewVersion = true;
105
- }
106
- }
107
- const pendingWritesByChannel = {};
108
- for (const task of tasks) for (const [chan, val] of task.writes) if (IGNORE.has(chan)) {} else if (chan in onlyChannels) {
109
- pendingWritesByChannel[chan] ??= [];
110
- pendingWritesByChannel[chan].push(val);
111
- }
112
- if (maxVersion != null && getNextVersion != null) maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;
113
- const updatedChannels = /* @__PURE__ */ new Set();
114
- for (const [chan, vals] of Object.entries(pendingWritesByChannel)) if (chan in onlyChannels) {
115
- const channel = onlyChannels[chan];
116
- let updated;
117
- try {
118
- updated = channel.update(vals);
119
- } catch (e) {
120
- if (e.name === InvalidUpdateError.unminifiable_name) {
121
- const wrappedError = new InvalidUpdateError(`Invalid update for channel "${chan}" with values ${JSON.stringify(vals)}: ${e.message}`);
122
- wrappedError.lc_error_code = e.lc_error_code;
123
- throw wrappedError;
124
- } else throw e;
125
- }
126
- if (updated && getNextVersion !== void 0) {
127
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
128
- if (channel.isAvailable()) updatedChannels.add(chan);
129
- }
130
- }
131
- if (bumpStep) for (const chan in onlyChannels) {
132
- if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
133
- const channel = onlyChannels[chan];
134
- if (channel.isAvailable() && !updatedChannels.has(chan)) {
135
- const updated = channel.update([]);
136
- if (updated && getNextVersion !== void 0) {
137
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
138
- if (channel.isAvailable()) updatedChannels.add(chan);
139
- }
140
- }
141
- }
142
- if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) for (const chan in onlyChannels) {
143
- if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
144
- const channel = onlyChannels[chan];
145
- if (channel.finish() && getNextVersion !== void 0) {
146
- checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
147
- if (channel.isAvailable()) updatedChannels.add(chan);
148
- }
149
- }
150
- return updatedChannels;
151
- }
152
- function* candidateNodes(checkpoint, processes, extra) {
153
- if (extra.updatedChannels != null && extra.triggerToNodes != null) {
154
- const triggeredNodes = /* @__PURE__ */ new Set();
155
- for (const channel of extra.updatedChannels) {
156
- const nodeIds = extra.triggerToNodes[channel];
157
- for (const id of nodeIds ?? []) triggeredNodes.add(id);
158
- }
159
- yield* [...triggeredNodes].sort();
160
- return;
161
- }
162
- const isEmptyChannelVersions = (() => {
163
- for (const chan in checkpoint.channel_versions) if (checkpoint.channel_versions[chan] !== null) return false;
164
- return true;
165
- })();
166
- if (isEmptyChannelVersions) return;
167
- for (const name in processes) {
168
- if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
169
- yield name;
170
- }
171
- }
172
- /**
173
- * Prepare the set of tasks that will make up the next Pregel step.
174
- * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered
175
- * by edges).
176
- */
177
- function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
178
- const tasks = {};
179
- const tasksChannel = channels[TASKS];
180
- if (tasksChannel?.isAvailable()) {
181
- const len = tasksChannel.get().length;
182
- for (let i = 0; i < len; i += 1) {
183
- const task = _prepareSingleTask([PUSH, i], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
184
- if (task !== void 0) tasks[task.id] = task;
185
- }
186
- }
187
- for (const name of candidateNodes(checkpoint, processes, extra)) {
188
- const task = _prepareSingleTask([PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
189
- if (task !== void 0) tasks[task.id] = task;
190
- }
191
- return tasks;
192
- }
193
- /**
194
- * Prepares a single task for the next Pregel step, given a task path, which
195
- * uniquely identifies a PUSH or PULL task within the graph.
196
- */
197
- function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, channels, config, forExecution, extra) {
198
- const { step, checkpointer, manager } = extra;
199
- const configurable = config.configurable ?? {};
200
- const parentNamespace = configurable.checkpoint_ns ?? "";
201
- if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {
202
- const call = taskPath[taskPath.length - 1];
203
- const proc = getRunnableForFunc(call.name, call.func);
204
- const triggers = [PUSH];
205
- const checkpointNamespace = parentNamespace === "" ? call.name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;
206
- const id = uuid5(JSON.stringify([
207
- checkpointNamespace,
208
- step.toString(),
209
- call.name,
210
- PUSH,
211
- taskPath[1],
212
- taskPath[2]
213
- ]), checkpoint.id);
214
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;
215
- const outputTaskPath = [...taskPath.slice(0, 3), true];
216
- const metadata = {
217
- langgraph_step: step,
218
- langgraph_node: call.name,
219
- langgraph_triggers: triggers,
220
- langgraph_path: outputTaskPath,
221
- langgraph_checkpoint_ns: taskCheckpointNamespace
222
- };
223
- if (forExecution) {
224
- const writes = [];
225
- const task = {
226
- name: call.name,
227
- input: call.input,
228
- proc,
229
- writes,
230
- config: patchConfig(mergeConfigs(config, {
231
- metadata,
232
- store: extra.store ?? config.store
233
- }), {
234
- runName: call.name,
235
- callbacks: manager?.getChild(`graph:step:${step}`),
236
- configurable: {
237
- [CONFIG_KEY_TASK_ID]: id,
238
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
239
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
240
- name: call.name,
241
- writes,
242
- triggers,
243
- path: outputTaskPath
244
- }, select_, fresh_),
245
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
246
- [CONFIG_KEY_CHECKPOINT_MAP]: {
247
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
248
- [parentNamespace]: checkpoint.id
249
- },
250
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
251
- pendingWrites: pendingWrites ?? [],
252
- taskId: id,
253
- currentTaskInput: call.input,
254
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
255
- namespaceHash: XXH3(taskCheckpointNamespace)
256
- }),
257
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
258
- checkpoint_id: void 0,
259
- checkpoint_ns: taskCheckpointNamespace
260
- }
261
- }),
262
- triggers,
263
- retry_policy: call.retry,
264
- cache_key: call.cache ? {
265
- key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),
266
- ns: [CACHE_NS_WRITES, call.name ?? "__dynamic__"],
267
- ttl: call.cache.ttl
268
- } : void 0,
269
- id,
270
- path: outputTaskPath,
271
- writers: []
272
- };
273
- return task;
274
- } else return {
275
- id,
276
- name: call.name,
277
- interrupts: [],
278
- path: outputTaskPath
279
- };
280
- } else if (taskPath[0] === PUSH) {
281
- const index = typeof taskPath[1] === "number" ? taskPath[1] : parseInt(taskPath[1], 10);
282
- if (!channels[TASKS]?.isAvailable()) return void 0;
283
- const sends = channels[TASKS].get();
284
- if (index < 0 || index >= sends.length) return void 0;
285
- const packet = _isSendInterface(sends[index]) && !_isSend(sends[index]) ? new Send(sends[index].node, sends[index].args) : sends[index];
286
- if (!_isSendInterface(packet)) {
287
- console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
288
- return void 0;
289
- }
290
- if (!(packet.node in processes)) {
291
- console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
292
- return void 0;
293
- }
294
- const triggers = [PUSH];
295
- const checkpointNamespace = parentNamespace === "" ? packet.node : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
296
- const taskId = uuid5(JSON.stringify([
297
- checkpointNamespace,
298
- step.toString(),
299
- packet.node,
300
- PUSH,
301
- index.toString()
302
- ]), checkpoint.id);
303
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
304
- let metadata = {
305
- langgraph_step: step,
306
- langgraph_node: packet.node,
307
- langgraph_triggers: triggers,
308
- langgraph_path: taskPath.slice(0, 3),
309
- langgraph_checkpoint_ns: taskCheckpointNamespace
310
- };
311
- if (forExecution) {
312
- const proc = processes[packet.node];
313
- const node = proc.getNode();
314
- if (node !== void 0) {
315
- if (proc.metadata !== void 0) metadata = {
316
- ...metadata,
317
- ...proc.metadata
318
- };
319
- const writes = [];
320
- return {
321
- name: packet.node,
322
- input: packet.args,
323
- proc: node,
324
- subgraphs: proc.subgraphs,
325
- writes,
326
- config: patchConfig(mergeConfigs(config, {
327
- metadata,
328
- tags: proc.tags,
329
- store: extra.store ?? config.store
330
- }), {
331
- runName: packet.node,
332
- callbacks: manager?.getChild(`graph:step:${step}`),
333
- configurable: {
334
- [CONFIG_KEY_TASK_ID]: taskId,
335
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => writes.push(...items), processes, writes_),
336
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
337
- name: packet.node,
338
- writes,
339
- triggers,
340
- path: taskPath
341
- }, select_, fresh_),
342
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
343
- [CONFIG_KEY_CHECKPOINT_MAP]: {
344
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
345
- [parentNamespace]: checkpoint.id
346
- },
347
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
348
- pendingWrites: pendingWrites ?? [],
349
- taskId,
350
- currentTaskInput: packet.args,
351
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
352
- namespaceHash: XXH3(taskCheckpointNamespace)
353
- }),
354
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
355
- checkpoint_id: void 0,
356
- checkpoint_ns: taskCheckpointNamespace
357
- }
358
- }),
359
- triggers,
360
- retry_policy: proc.retryPolicy,
361
- cache_key: proc.cachePolicy ? {
362
- key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])),
363
- ns: [
364
- CACHE_NS_WRITES,
365
- proc.name ?? "__dynamic__",
366
- packet.node
367
- ],
368
- ttl: proc.cachePolicy.ttl
369
- } : void 0,
370
- id: taskId,
371
- path: taskPath,
372
- writers: proc.getWriters()
373
- };
374
- }
375
- } else return {
376
- id: taskId,
377
- name: packet.node,
378
- interrupts: [],
379
- path: taskPath
380
- };
381
- } else if (taskPath[0] === PULL) {
382
- const name = taskPath[1].toString();
383
- const proc = processes[name];
384
- if (proc === void 0) return void 0;
385
- if (pendingWrites?.length) {
386
- const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
387
- const taskId = uuid5(JSON.stringify([
388
- checkpointNamespace,
389
- step.toString(),
390
- name,
391
- PULL,
392
- name
393
- ]), checkpoint.id);
394
- const hasSuccessfulWrites = pendingWrites.some((w) => w[0] === taskId && w[1] !== ERROR);
395
- if (hasSuccessfulWrites) return void 0;
396
- }
397
- const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
398
- if (nullVersion === void 0) return void 0;
399
- const seen = checkpoint.versions_seen[name] ?? {};
400
- const trigger = proc.triggers.find((chan) => {
401
- if (!channels[chan].isAvailable()) return false;
402
- return (checkpoint.channel_versions[chan] ?? nullVersion) > (seen[chan] ?? nullVersion);
403
- });
404
- if (trigger !== void 0) {
405
- const val = _procInput(proc, channels, forExecution);
406
- if (val === void 0) return void 0;
407
- const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
408
- const taskId = uuid5(JSON.stringify([
409
- checkpointNamespace,
410
- step.toString(),
411
- name,
412
- PULL,
413
- [trigger]
414
- ]), checkpoint.id);
415
- const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;
416
- let metadata = {
417
- langgraph_step: step,
418
- langgraph_node: name,
419
- langgraph_triggers: [trigger],
420
- langgraph_path: taskPath,
421
- langgraph_checkpoint_ns: taskCheckpointNamespace
422
- };
423
- if (forExecution) {
424
- const node = proc.getNode();
425
- if (node !== void 0) {
426
- if (proc.metadata !== void 0) metadata = {
427
- ...metadata,
428
- ...proc.metadata
429
- };
430
- const writes = [];
431
- return {
432
- name,
433
- input: val,
434
- proc: node,
435
- subgraphs: proc.subgraphs,
436
- writes,
437
- config: patchConfig(mergeConfigs(config, {
438
- metadata,
439
- tags: proc.tags,
440
- store: extra.store ?? config.store
441
- }), {
442
- runName: name,
443
- callbacks: manager?.getChild(`graph:step:${step}`),
444
- configurable: {
445
- [CONFIG_KEY_TASK_ID]: taskId,
446
- [CONFIG_KEY_SEND]: (writes_) => _localWrite((items) => {
447
- writes.push(...items);
448
- }, processes, writes_),
449
- [CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
450
- name,
451
- writes,
452
- triggers: [trigger],
453
- path: taskPath
454
- }, select_, fresh_),
455
- [CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],
456
- [CONFIG_KEY_CHECKPOINT_MAP]: {
457
- ...configurable[CONFIG_KEY_CHECKPOINT_MAP],
458
- [parentNamespace]: checkpoint.id
459
- },
460
- [CONFIG_KEY_SCRATCHPAD]: _scratchpad({
461
- pendingWrites: pendingWrites ?? [],
462
- taskId,
463
- currentTaskInput: val,
464
- resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],
465
- namespaceHash: XXH3(taskCheckpointNamespace)
466
- }),
467
- [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],
468
- checkpoint_id: void 0,
469
- checkpoint_ns: taskCheckpointNamespace
470
- }
471
- }),
472
- triggers: [trigger],
473
- retry_policy: proc.retryPolicy,
474
- cache_key: proc.cachePolicy ? {
475
- key: XXH3((proc.cachePolicy.keyFunc ?? JSON.stringify)([val])),
476
- ns: [
477
- CACHE_NS_WRITES,
478
- proc.name ?? "__dynamic__",
479
- name
480
- ],
481
- ttl: proc.cachePolicy.ttl
482
- } : void 0,
483
- id: taskId,
484
- path: taskPath,
485
- writers: proc.getWriters()
486
- };
487
- }
488
- } else return {
489
- id: taskId,
490
- name,
491
- interrupts: [],
492
- path: taskPath
493
- };
494
- }
495
- }
496
- return void 0;
497
- }
498
- /**
499
- * Function injected under CONFIG_KEY_READ in task config, to read current state.
500
- * Used by conditional edges to read a copy of the state with reflecting the writes
501
- * from that node only.
502
- *
503
- * @internal
504
- */
505
- function _procInput(proc, channels, forExecution) {
506
- let val;
507
- if (typeof proc.channels === "object" && !Array.isArray(proc.channels)) {
508
- val = {};
509
- for (const [k, chan] of Object.entries(proc.channels)) if (proc.triggers.includes(chan)) try {
510
- val[k] = readChannel(channels, chan, false);
511
- } catch (e) {
512
- if (e.name === EmptyChannelError.unminifiable_name) return void 0;
513
- else throw e;
514
- }
515
- else if (chan in channels) try {
516
- val[k] = readChannel(channels, chan, false);
517
- } catch (e) {
518
- if (e.name === EmptyChannelError.unminifiable_name) continue;
519
- else throw e;
520
- }
521
- } else if (Array.isArray(proc.channels)) {
522
- let successfulRead = false;
523
- for (const chan of proc.channels) try {
524
- val = readChannel(channels, chan, false);
525
- successfulRead = true;
526
- break;
527
- } catch (e) {
528
- if (e.name === EmptyChannelError.unminifiable_name) continue;
529
- else throw e;
530
- }
531
- if (!successfulRead) return void 0;
532
- } else throw new Error(`Invalid channels type, expected list or dict, got ${proc.channels}`);
533
- if (forExecution && proc.mapper !== void 0) val = proc.mapper(val);
534
- return val;
535
- }
536
- function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, namespaceHash }) {
537
- const nullResume = pendingWrites.find(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME)?.[2];
538
- const resume = (() => {
539
- const result = pendingWrites.filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME).flatMap(([_writeTaskId, _chan, resume$1]) => resume$1);
540
- if (resumeMap != null && namespaceHash in resumeMap) {
541
- const mappedResume = resumeMap[namespaceHash];
542
- result.push(mappedResume);
543
- }
544
- return result;
545
- })();
546
- const scratchpad = {
547
- callCounter: 0,
548
- interruptCounter: -1,
549
- resume,
550
- nullResume,
551
- subgraphCounter: 0,
552
- currentTaskInput,
553
- consumeNullResume: () => {
554
- if (scratchpad.nullResume) {
555
- delete scratchpad.nullResume;
556
- pendingWrites.splice(pendingWrites.findIndex(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME), 1);
557
- return nullResume;
558
- }
559
- return void 0;
560
- }
561
- };
562
- return scratchpad;
563
- }
564
-
565
- //#endregion
566
- export { _applyWrites, _localRead, _prepareNextTasks, _prepareSingleTask, increment, shouldInterrupt };
567
- //# sourceMappingURL=algo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"algo.js","names":["maxVersion: number | string | undefined","values: Record<string, unknown>","updatedChannels: Set<string>","e: any","tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription>","writes: [keyof Cc, unknown][]","val: any","resume"],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n mergeConfigs,\n patchConfig,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n All,\n BaseCheckpointSaver,\n Checkpoint,\n ReadonlyCheckpoint,\n copyCheckpoint,\n type PendingWrite,\n type PendingWriteValue,\n uuid5,\n maxChannelVersion,\n BaseStore,\n CheckpointPendingWrite,\n SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n _isSend,\n _isSendInterface,\n CONFIG_KEY_CHECKPOINT_MAP,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_READ,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_SEND,\n INTERRUPT,\n RESERVED,\n Send,\n TAG_HIDDEN,\n TASKS,\n CHECKPOINT_NAMESPACE_END,\n PUSH,\n PULL,\n RESUME,\n NULL_TASK_ID,\n CONFIG_KEY_SCRATCHPAD,\n RETURN,\n ERROR,\n NO_WRITES,\n CONFIG_KEY_PREVIOUS_STATE,\n PREVIOUS,\n CACHE_NS_WRITES,\n CONFIG_KEY_RESUME_MAP,\n START,\n} from \"../constants.js\";\nimport {\n Call,\n isCall,\n PregelExecutableTask,\n PregelScratchpad,\n PregelTaskDescription,\n SimpleTaskPath,\n TaskPath,\n VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n return current !== undefined ? current + 1 : 1;\n};\n\nfunction triggersNextStep(\n updatedChannels: Set<string>,\n triggerToNodes: Record<string, string[]> | undefined\n) {\n if (triggerToNodes == null) return false;\n\n for (const chan of updatedChannels) {\n if (triggerToNodes[chan]) return true;\n }\n\n return false;\n}\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n channelVersions: Record<string, number | string>\n): number | string | undefined {\n let maxVersion: number | string | undefined;\n for (const chan in channelVersions) {\n if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n if (maxVersion == null) {\n maxVersion = channelVersions[chan];\n } else {\n maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n }\n }\n return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n checkpoint: Checkpoint,\n interruptNodes: All | N[],\n tasks: PregelExecutableTask<N, C>[]\n): boolean {\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n let anyChannelUpdated = false;\n\n if (\n (checkpoint.channel_versions[START] ?? nullVersion) >\n (seen[START] ?? nullVersion)\n ) {\n anyChannelUpdated = true;\n } else {\n for (const chan in checkpoint.channel_versions) {\n if (\n !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n )\n continue;\n\n if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n anyChannelUpdated = true;\n break;\n }\n }\n }\n\n const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n interruptNodes === \"*\"\n ? !task.config?.tags?.includes(TAG_HIDDEN)\n : interruptNodes.includes(task.name)\n );\n\n return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n checkpoint: ReadonlyCheckpoint,\n channels: Cc,\n task: WritesProtocol<keyof Cc>,\n select: Array<keyof Cc> | keyof Cc,\n fresh: boolean = false\n): Record<string, unknown> | unknown {\n let updated = new Set<keyof Cc>();\n\n if (!Array.isArray(select)) {\n for (const [c] of task.writes) {\n if (c === select) {\n updated = new Set([c]);\n break;\n }\n }\n updated = updated || new Set();\n } else {\n updated = new Set(\n select.filter((c) => task.writes.some(([key, _]) => key === c))\n );\n }\n\n let values: Record<string, unknown>;\n\n if (fresh && updated.size > 0) {\n const localChannels = Object.fromEntries(\n Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n ) as Partial<Cc>;\n\n const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n _applyWrites(\n copyCheckpoint(newCheckpoint),\n newChannels,\n [task],\n undefined,\n undefined\n );\n values = readChannels({ ...channels, ...newChannels }, select);\n } else {\n values = readChannels(channels, select);\n }\n\n return values;\n}\n\nexport function _localWrite(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n commit: (writes: [string, any][]) => any,\n processes: Record<string, PregelNode>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writes: [string, any][]\n) {\n for (const [chan, value] of writes) {\n if ([PUSH, TASKS].includes(chan) && value != null) {\n if (!_isSend(value)) {\n throw new InvalidUpdateError(\n `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n value\n )}`\n );\n }\n if (!(value.node in processes)) {\n throw new InvalidUpdateError(\n `Invalid node name \"${value.node}\" in Send packet`\n );\n }\n }\n }\n commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n NO_WRITES,\n PUSH,\n RESUME,\n INTERRUPT,\n RETURN,\n ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n checkpoint: Checkpoint,\n channels: Cc,\n tasks: WritesProtocol<keyof Cc>[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNextVersion: ((version: any) => any) | undefined,\n triggerToNodes: Record<string, string[]> | undefined\n): Set<string> {\n // Sort tasks by first 3 path elements for deterministic order\n // Later path parts (like task IDs) are ignored for sorting\n tasks.sort((a, b) => {\n const aPath = a.path?.slice(0, 3) || [];\n const bPath = b.path?.slice(0, 3) || [];\n\n // Compare each path element\n for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n if (aPath[i] < bPath[i]) return -1;\n if (aPath[i] > bPath[i]) return 1;\n }\n\n // If one path is shorter, it comes first\n return aPath.length - bPath.length;\n });\n\n // if no task has triggers this is applying writes from the null task only\n // so we don't do anything other than update the channels written to\n const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n // Filter out non instances of BaseChannel\n const onlyChannels = getOnlyChannels(channels);\n\n // Update seen versions\n for (const task of tasks) {\n checkpoint.versions_seen[task.name] ??= {};\n for (const chan of task.triggers) {\n if (chan in checkpoint.channel_versions) {\n checkpoint.versions_seen[task.name][chan] =\n checkpoint.channel_versions[chan];\n }\n }\n }\n\n // Find the highest version of all channels\n let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n // Consume all channels that were read\n const channelsToConsume = new Set(\n tasks\n .flatMap((task) => task.triggers)\n .filter((chan) => !RESERVED.includes(chan))\n );\n\n let usedNewVersion = false;\n for (const chan of channelsToConsume) {\n if (chan in onlyChannels && onlyChannels[chan].consume()) {\n if (getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n usedNewVersion = true;\n }\n }\n }\n\n // Group writes by channel\n const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n for (const task of tasks) {\n for (const [chan, val] of task.writes) {\n if (IGNORE.has(chan)) {\n // do nothing\n } else if (chan in onlyChannels) {\n pendingWritesByChannel[chan] ??= [];\n pendingWritesByChannel[chan].push(val);\n }\n }\n }\n\n // Find the highest version of all channels\n if (maxVersion != null && getNextVersion != null) {\n maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;\n }\n\n const updatedChannels: Set<string> = new Set();\n // Apply writes to channels\n for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n if (chan in onlyChannels) {\n const channel = onlyChannels[chan];\n let updated;\n try {\n updated = channel.update(vals);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === InvalidUpdateError.unminifiable_name) {\n const wrappedError = new InvalidUpdateError(\n `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n vals\n )}: ${e.message}`\n );\n wrappedError.lc_error_code = e.lc_error_code;\n throw wrappedError;\n } else {\n throw e;\n }\n }\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n // Channels that weren't updated in this step are notified of a new step\n if (bumpStep) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.isAvailable() && !updatedChannels.has(chan)) {\n const updated = channel.update([]);\n\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n }\n\n // If this is (tentatively) the last superstep, notify all channels of finish\n if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.finish() && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n return updatedChannels;\n}\n\nfunction* candidateNodes(\n checkpoint: ReadonlyCheckpoint,\n processes: StrRecord<string, PregelNode>,\n extra: NextTaskExtraFields\n) {\n // This section is an optimization that allows which\n // nodes will be active during the next step.\n // When there's information about:\n // 1. Which channels were updated in the previous step\n // 2. Which nodes are triggered by which channels\n // Then we can determine which nodes should be triggered\n // in the next step without having to cycle through all nodes.\n if (extra.updatedChannels != null && extra.triggerToNodes != null) {\n const triggeredNodes = new Set<string>();\n\n // Get all nodes that have triggers associated with an updated channel\n for (const channel of extra.updatedChannels) {\n const nodeIds = extra.triggerToNodes[channel];\n for (const id of nodeIds ?? []) triggeredNodes.add(id);\n }\n\n // Sort the nodes to ensure deterministic order\n yield* [...triggeredNodes].sort();\n return;\n }\n\n // If there are no values in checkpoint, no need to run\n // through all the PULL candidates\n const isEmptyChannelVersions = (() => {\n for (const chan in checkpoint.channel_versions) {\n if (checkpoint.channel_versions[chan] !== null) return false;\n }\n return true;\n })();\n\n if (isEmptyChannelVersions) return;\n for (const name in processes) {\n if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n yield name;\n }\n}\n\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n | Record<string, PregelTaskDescription>\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n const tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription> = {};\n\n // Consume pending tasks\n const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n if (tasksChannel?.isAvailable()) {\n const len = tasksChannel.get().length;\n for (let i = 0; i < len; i += 1) {\n const task = _prepareSingleTask(\n [PUSH, i],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n }\n\n // Check if any processes should be run in next step\n // If so, prepare the values to be passed to them\n for (const name of candidateNodes(checkpoint, processes, extra)) {\n const task = _prepareSingleTask(\n [PULL, name],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n return tasks;\n}\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: SimpleTaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: LangGraphRunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFields\n):\n | PregelTaskDescription\n | PregelExecutableTask<keyof Nn, keyof Cc>\n | undefined {\n const { step, checkpointer, manager } = extra;\n const configurable = config.configurable ?? {};\n const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n const call = taskPath[taskPath.length - 1] as Call;\n const proc = getRunnableForFunc(call.name, call.func);\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? call.name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n const id = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n call.name,\n PUSH,\n taskPath[1],\n taskPath[2],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n // we append `true` to the task path to indicate that a call is being made\n // so we should not return interrupts from this task (responsibility lies with the parent)\n const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n const metadata = {\n langgraph_step: step,\n langgraph_node: call.name,\n langgraph_triggers: triggers,\n langgraph_path: outputTaskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const writes: [keyof Cc, unknown][] = [];\n const task = {\n name: call.name,\n input: call.input,\n proc,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n store: extra.store ?? config.store,\n }),\n {\n runName: call.name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: id,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: call.name,\n writes: writes as PendingWrite[],\n triggers,\n path: outputTaskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId: id,\n currentTaskInput: call.input,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: call.retry,\n cache_key: call.cache\n ? {\n key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n ttl: call.cache.ttl,\n }\n : undefined,\n id,\n path: outputTaskPath,\n writers: [],\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n return task;\n } else {\n return {\n id,\n name: call.name,\n interrupts: [],\n path: outputTaskPath,\n };\n }\n } else if (taskPath[0] === PUSH) {\n const index =\n typeof taskPath[1] === \"number\"\n ? taskPath[1]\n : parseInt(taskPath[1] as string, 10);\n\n if (!channels[TASKS]?.isAvailable()) {\n return undefined;\n }\n\n const sends = channels[TASKS].get() as SendProtocol[];\n if (index < 0 || index >= sends.length) {\n return undefined;\n }\n\n const packet =\n _isSendInterface(sends[index]) && !_isSend(sends[index])\n ? new Send(sends[index].node, sends[index].args)\n : sends[index];\n\n if (!_isSendInterface(packet)) {\n console.warn(\n `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n );\n return undefined;\n }\n if (!(packet.node in processes)) {\n console.warn(\n `Ignoring unknown node name ${packet.node} in pending sends.`\n );\n return undefined;\n }\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? packet.node\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n packet.node,\n PUSH,\n index.toString(),\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: packet.node,\n langgraph_triggers: triggers,\n langgraph_path: taskPath.slice(0, 3),\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const proc = processes[packet.node];\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name: packet.node,\n input: packet.args,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: packet.node,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: packet.node,\n writes: writes as PendingWrite[],\n triggers,\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: packet.args,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name: packet.node,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n } else if (taskPath[0] === PULL) {\n const name = taskPath[1].toString();\n const proc = processes[name];\n if (proc === undefined) {\n return undefined;\n }\n\n // Check if this task already has successful writes in the pending writes\n if (pendingWrites?.length) {\n // Find the task ID for this node/path\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n name,\n ]),\n checkpoint.id\n );\n\n // Check if there are successful writes (not ERROR) for this task ID\n const hasSuccessfulWrites = pendingWrites.some(\n (w) => w[0] === taskId && w[1] !== ERROR\n );\n\n // If task completed successfully, don't include it in next tasks\n if (hasSuccessfulWrites) {\n return undefined;\n }\n }\n\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n if (nullVersion === undefined) {\n return undefined;\n }\n const seen = checkpoint.versions_seen[name] ?? {};\n\n // Find the first trigger that is available and has a new version\n const trigger = proc.triggers.find((chan) => {\n if (!channels[chan].isAvailable()) return false;\n\n return (\n (checkpoint.channel_versions[chan] ?? nullVersion) >\n (seen[chan] ?? nullVersion)\n );\n });\n\n // If any of the channels read by this process were updated\n if (trigger !== undefined) {\n const val = _procInput(proc, channels, forExecution);\n if (val === undefined) {\n return undefined;\n }\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n [trigger],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: name,\n langgraph_triggers: [trigger],\n langgraph_path: taskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name,\n input: val,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => {\n writes.push(...items);\n },\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name,\n writes: writes as PendingWrite[],\n triggers: [trigger],\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: val,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers: [trigger],\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Function injected under CONFIG_KEY_READ in task config, to read current state.\n * Used by conditional edges to read a copy of the state with reflecting the writes\n * from that node only.\n *\n * @internal\n */\nfunction _procInput(\n proc: PregelNode,\n channels: StrRecord<string, BaseChannel>,\n forExecution: boolean\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let val: any;\n\n if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n val = {};\n for (const [k, chan] of Object.entries(proc.channels)) {\n if (proc.triggers.includes(chan)) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n return undefined;\n } else {\n throw e;\n }\n }\n } else if (chan in channels) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n }\n } else if (Array.isArray(proc.channels)) {\n let successfulRead = false;\n for (const chan of proc.channels) {\n try {\n val = readChannel(channels, chan, false);\n successfulRead = true;\n break;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n if (!successfulRead) {\n return undefined;\n }\n } else {\n throw new Error(\n `Invalid channels type, expected list or dict, got ${proc.channels}`\n );\n }\n\n // If the process has a mapper, apply it to the value\n if (forExecution && proc.mapper !== undefined) {\n val = proc.mapper(val);\n }\n\n return val;\n}\n\nfunction _scratchpad({\n pendingWrites,\n taskId,\n currentTaskInput,\n resumeMap,\n namespaceHash,\n}: {\n pendingWrites: CheckpointPendingWrite[];\n taskId: string;\n currentTaskInput: unknown;\n resumeMap: Record<string, unknown> | undefined;\n namespaceHash: string;\n}): PregelScratchpad {\n const nullResume = pendingWrites.find(\n ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n )?.[2];\n\n const resume = (() => {\n const result = pendingWrites\n .filter(\n ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n )\n .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n if (resumeMap != null && namespaceHash in resumeMap) {\n const mappedResume = resumeMap[namespaceHash];\n result.push(mappedResume);\n }\n\n return result;\n })();\n\n const scratchpad = {\n callCounter: 0,\n interruptCounter: -1,\n resume,\n nullResume,\n subgraphCounter: 0,\n currentTaskInput,\n consumeNullResume: () => {\n if (scratchpad.nullResume) {\n delete scratchpad.nullResume;\n pendingWrites.splice(\n pendingWrites.findIndex(\n ([writeTaskId, chan]) =>\n writeTaskId === NULL_TASK_ID && chan === RESUME\n ),\n 1\n );\n return nullResume;\n }\n\n return undefined;\n },\n };\n return scratchpad;\n}\n"],"mappings":"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"}