@langchain/langgraph 0.4.8 → 1.0.0-alpha.0

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 (494) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/README.md +1 -2
  3. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  4. package/dist/channels/any_value.d.cts +26 -0
  5. package/dist/channels/any_value.d.cts.map +1 -0
  6. package/dist/channels/any_value.d.ts +16 -9
  7. package/dist/channels/any_value.d.ts.map +1 -0
  8. package/dist/channels/base.cjs +97 -133
  9. package/dist/channels/base.cjs.map +1 -0
  10. package/dist/channels/base.d.cts +73 -0
  11. package/dist/channels/base.d.cts.map +1 -0
  12. package/dist/channels/base.d.ts +73 -74
  13. package/dist/channels/base.d.ts.map +1 -0
  14. package/dist/channels/base.js +94 -127
  15. package/dist/channels/base.js.map +1 -1
  16. package/dist/channels/binop.cjs +47 -77
  17. package/dist/channels/binop.cjs.map +1 -0
  18. package/dist/channels/binop.d.cts +22 -0
  19. package/dist/channels/binop.d.cts.map +1 -0
  20. package/dist/channels/binop.d.ts +17 -12
  21. package/dist/channels/binop.d.ts.map +1 -0
  22. package/dist/channels/binop.js +45 -71
  23. package/dist/channels/binop.js.map +1 -1
  24. package/dist/channels/dynamic_barrier_value.d.cts +43 -0
  25. package/dist/channels/dynamic_barrier_value.d.cts.map +1 -0
  26. package/dist/channels/dynamic_barrier_value.d.ts +20 -34
  27. package/dist/channels/dynamic_barrier_value.d.ts.map +1 -0
  28. package/dist/channels/ephemeral_value.cjs +46 -70
  29. package/dist/channels/ephemeral_value.cjs.map +1 -0
  30. package/dist/channels/ephemeral_value.d.cts +23 -0
  31. package/dist/channels/ephemeral_value.d.cts.map +1 -0
  32. package/dist/channels/ephemeral_value.d.ts +18 -11
  33. package/dist/channels/ephemeral_value.d.ts.map +1 -0
  34. package/dist/channels/ephemeral_value.js +45 -65
  35. package/dist/channels/ephemeral_value.js.map +1 -1
  36. package/dist/channels/index.cjs +2 -10
  37. package/dist/channels/index.js +4 -3
  38. package/dist/channels/last_value.cjs +91 -140
  39. package/dist/channels/last_value.cjs.map +1 -0
  40. package/dist/channels/last_value.d.cts +30 -0
  41. package/dist/channels/last_value.d.cts.map +1 -0
  42. package/dist/channels/last_value.d.ts +15 -23
  43. package/dist/channels/last_value.d.ts.map +1 -0
  44. package/dist/channels/last_value.js +88 -133
  45. package/dist/channels/last_value.js.map +1 -1
  46. package/dist/channels/named_barrier_value.cjs +114 -170
  47. package/dist/channels/named_barrier_value.cjs.map +1 -0
  48. package/dist/channels/named_barrier_value.d.cts +33 -0
  49. package/dist/channels/named_barrier_value.d.cts.map +1 -0
  50. package/dist/channels/named_barrier_value.d.ts +19 -29
  51. package/dist/channels/named_barrier_value.d.ts.map +1 -0
  52. package/dist/channels/named_barrier_value.js +112 -163
  53. package/dist/channels/named_barrier_value.js.map +1 -1
  54. package/dist/channels/topic.cjs +63 -96
  55. package/dist/channels/topic.cjs.map +1 -0
  56. package/dist/channels/topic.d.cts +26 -0
  57. package/dist/channels/topic.d.cts.map +1 -0
  58. package/dist/channels/topic.d.ts +21 -18
  59. package/dist/channels/topic.d.ts.map +1 -0
  60. package/dist/channels/topic.js +61 -90
  61. package/dist/channels/topic.js.map +1 -1
  62. package/dist/constants.cjs +373 -452
  63. package/dist/constants.cjs.map +1 -0
  64. package/dist/constants.d.cts +284 -0
  65. package/dist/constants.d.cts.map +1 -0
  66. package/dist/constants.d.ts +112 -148
  67. package/dist/constants.d.ts.map +1 -0
  68. package/dist/constants.js +333 -444
  69. package/dist/constants.js.map +1 -1
  70. package/dist/errors.cjs +150 -179
  71. package/dist/errors.cjs.map +1 -0
  72. package/dist/errors.d.cts +80 -0
  73. package/dist/errors.d.cts.map +1 -0
  74. package/dist/errors.d.ts +55 -46
  75. package/dist/errors.d.ts.map +1 -0
  76. package/dist/errors.js +139 -165
  77. package/dist/errors.js.map +1 -1
  78. package/dist/func/index.cjs +289 -290
  79. package/dist/func/index.cjs.map +1 -0
  80. package/dist/func/index.d.cts +289 -0
  81. package/dist/func/index.d.cts.map +1 -0
  82. package/dist/func/index.d.ts +81 -71
  83. package/dist/func/index.d.ts.map +1 -0
  84. package/dist/func/index.js +285 -284
  85. package/dist/func/index.js.map +1 -1
  86. package/dist/func/types.d.cts +64 -0
  87. package/dist/func/types.d.cts.map +1 -0
  88. package/dist/func/types.d.ts +24 -19
  89. package/dist/func/types.d.ts.map +1 -0
  90. package/dist/graph/annotation.cjs +96 -120
  91. package/dist/graph/annotation.cjs.map +1 -0
  92. package/dist/graph/annotation.d.cts +116 -0
  93. package/dist/graph/annotation.d.cts.map +1 -0
  94. package/dist/graph/annotation.d.ts +33 -34
  95. package/dist/graph/annotation.d.ts.map +1 -0
  96. package/dist/graph/annotation.js +91 -112
  97. package/dist/graph/annotation.js.map +1 -1
  98. package/dist/graph/graph.cjs +419 -723
  99. package/dist/graph/graph.cjs.map +1 -0
  100. package/dist/graph/graph.d.cts +131 -0
  101. package/dist/graph/graph.d.cts.map +1 -0
  102. package/dist/graph/graph.d.ts +122 -91
  103. package/dist/graph/graph.d.ts.map +1 -0
  104. package/dist/graph/graph.js +412 -713
  105. package/dist/graph/graph.js.map +1 -1
  106. package/dist/graph/index.cjs +4 -17
  107. package/dist/graph/index.js +6 -5
  108. package/dist/graph/message.cjs +59 -104
  109. package/dist/graph/message.cjs.map +1 -0
  110. package/dist/graph/message.d.cts +19 -0
  111. package/dist/graph/message.d.cts.map +1 -0
  112. package/dist/graph/message.d.ts +11 -10
  113. package/dist/graph/message.d.ts.map +1 -0
  114. package/dist/graph/message.js +56 -98
  115. package/dist/graph/message.js.map +1 -1
  116. package/dist/graph/messages_annotation.cjs +106 -106
  117. package/dist/graph/messages_annotation.cjs.map +1 -0
  118. package/dist/graph/messages_annotation.d.cts +111 -0
  119. package/dist/graph/messages_annotation.d.cts.map +1 -0
  120. package/dist/graph/messages_annotation.d.ts +18 -9
  121. package/dist/graph/messages_annotation.d.ts.map +1 -0
  122. package/dist/graph/messages_annotation.js +100 -100
  123. package/dist/graph/messages_annotation.js.map +1 -1
  124. package/dist/graph/state.cjs +476 -777
  125. package/dist/graph/state.cjs.map +1 -0
  126. package/dist/graph/state.d.cts +216 -0
  127. package/dist/graph/state.d.cts.map +1 -0
  128. package/dist/graph/state.d.ts +129 -134
  129. package/dist/graph/state.d.ts.map +1 -0
  130. package/dist/graph/state.js +470 -768
  131. package/dist/graph/state.js.map +1 -1
  132. package/dist/graph/zod/index.cjs +10 -21
  133. package/dist/graph/zod/index.d.cts +3 -0
  134. package/dist/graph/zod/index.d.ts +3 -3
  135. package/dist/graph/zod/index.js +4 -4
  136. package/dist/graph/zod/meta.cjs +142 -177
  137. package/dist/graph/zod/meta.cjs.map +1 -0
  138. package/dist/graph/zod/meta.d.cts +116 -0
  139. package/dist/graph/zod/meta.d.cts.map +1 -0
  140. package/dist/graph/zod/meta.d.ts +99 -97
  141. package/dist/graph/zod/meta.d.ts.map +1 -0
  142. package/dist/graph/zod/meta.js +136 -170
  143. package/dist/graph/zod/meta.js.map +1 -1
  144. package/dist/graph/zod/plugin.cjs +36 -39
  145. package/dist/graph/zod/plugin.cjs.map +1 -0
  146. package/dist/graph/zod/plugin.js +34 -35
  147. package/dist/graph/zod/plugin.js.map +1 -1
  148. package/dist/graph/zod/schema.cjs +82 -110
  149. package/dist/graph/zod/schema.cjs.map +1 -0
  150. package/dist/graph/zod/schema.d.cts +38 -0
  151. package/dist/graph/zod/schema.d.cts.map +1 -0
  152. package/dist/graph/zod/schema.d.ts +12 -6
  153. package/dist/graph/zod/schema.d.ts.map +1 -0
  154. package/dist/graph/zod/schema.js +77 -103
  155. package/dist/graph/zod/schema.js.map +1 -1
  156. package/dist/graph/zod/zod-registry.cjs +41 -47
  157. package/dist/graph/zod/zod-registry.cjs.map +1 -0
  158. package/dist/graph/zod/zod-registry.d.cts +51 -0
  159. package/dist/graph/zod/zod-registry.d.cts.map +1 -0
  160. package/dist/graph/zod/zod-registry.d.ts +34 -26
  161. package/dist/graph/zod/zod-registry.d.ts.map +1 -0
  162. package/dist/graph/zod/zod-registry.js +37 -41
  163. package/dist/graph/zod/zod-registry.js.map +1 -1
  164. package/dist/hash.cjs +205 -267
  165. package/dist/hash.cjs.map +1 -0
  166. package/dist/hash.js +205 -265
  167. package/dist/hash.js.map +1 -1
  168. package/dist/index.cjs +110 -33
  169. package/dist/index.cjs.map +1 -0
  170. package/dist/index.d.cts +25 -0
  171. package/dist/index.d.ts +25 -5
  172. package/dist/index.js +18 -7
  173. package/dist/index.js.map +1 -1
  174. package/dist/interrupt.cjs +79 -85
  175. package/dist/interrupt.cjs.map +1 -0
  176. package/dist/interrupt.d.cts +49 -0
  177. package/dist/interrupt.d.cts.map +1 -0
  178. package/dist/interrupt.d.ts +6 -1
  179. package/dist/interrupt.d.ts.map +1 -0
  180. package/dist/interrupt.js +76 -80
  181. package/dist/interrupt.js.map +1 -1
  182. package/dist/prebuilt/agentName.cjs +139 -172
  183. package/dist/prebuilt/agentName.cjs.map +1 -0
  184. package/dist/prebuilt/agentName.d.cts +42 -0
  185. package/dist/prebuilt/agentName.d.cts.map +1 -0
  186. package/dist/prebuilt/agentName.d.ts +13 -21
  187. package/dist/prebuilt/agentName.d.ts.map +1 -0
  188. package/dist/prebuilt/agentName.js +139 -168
  189. package/dist/prebuilt/agentName.js.map +1 -1
  190. package/dist/prebuilt/agent_executor.cjs +42 -80
  191. package/dist/prebuilt/agent_executor.cjs.map +1 -0
  192. package/dist/prebuilt/agent_executor.d.cts +57 -0
  193. package/dist/prebuilt/agent_executor.d.cts.map +1 -0
  194. package/dist/prebuilt/agent_executor.d.ts +46 -37
  195. package/dist/prebuilt/agent_executor.d.ts.map +1 -0
  196. package/dist/prebuilt/agent_executor.js +40 -75
  197. package/dist/prebuilt/agent_executor.js.map +1 -1
  198. package/dist/prebuilt/chat_agent_executor.cjs +66 -128
  199. package/dist/prebuilt/chat_agent_executor.cjs.map +1 -0
  200. package/dist/prebuilt/chat_agent_executor.d.cts +23 -0
  201. package/dist/prebuilt/chat_agent_executor.d.cts.map +1 -0
  202. package/dist/prebuilt/chat_agent_executor.d.ts +18 -10
  203. package/dist/prebuilt/chat_agent_executor.d.ts.map +1 -0
  204. package/dist/prebuilt/chat_agent_executor.js +63 -123
  205. package/dist/prebuilt/chat_agent_executor.js.map +1 -1
  206. package/dist/prebuilt/index.cjs +15 -18
  207. package/dist/prebuilt/index.d.cts +8 -0
  208. package/dist/prebuilt/index.d.ts +8 -8
  209. package/dist/prebuilt/index.js +8 -7
  210. package/dist/prebuilt/interrupt.d.cts +73 -0
  211. package/dist/prebuilt/interrupt.d.cts.map +1 -0
  212. package/dist/prebuilt/interrupt.d.ts +32 -15
  213. package/dist/prebuilt/interrupt.d.ts.map +1 -0
  214. package/dist/prebuilt/react_agent_executor.cjs +317 -473
  215. package/dist/prebuilt/react_agent_executor.cjs.map +1 -0
  216. package/dist/prebuilt/react_agent_executor.d.cts +229 -0
  217. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -0
  218. package/dist/prebuilt/react_agent_executor.d.ts +171 -143
  219. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -0
  220. package/dist/prebuilt/react_agent_executor.js +315 -465
  221. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  222. package/dist/prebuilt/tool_executor.cjs +45 -67
  223. package/dist/prebuilt/tool_executor.cjs.map +1 -0
  224. package/dist/prebuilt/tool_executor.d.cts +42 -0
  225. package/dist/prebuilt/tool_executor.d.cts.map +1 -0
  226. package/dist/prebuilt/tool_executor.d.ts +30 -24
  227. package/dist/prebuilt/tool_executor.d.ts.map +1 -0
  228. package/dist/prebuilt/tool_executor.js +44 -63
  229. package/dist/prebuilt/tool_executor.js.map +1 -1
  230. package/dist/prebuilt/tool_node.cjs +213 -275
  231. package/dist/prebuilt/tool_node.cjs.map +1 -0
  232. package/dist/prebuilt/tool_node.d.cts +151 -0
  233. package/dist/prebuilt/tool_node.d.cts.map +1 -0
  234. package/dist/prebuilt/tool_node.d.ts +30 -17
  235. package/dist/prebuilt/tool_node.d.ts.map +1 -0
  236. package/dist/prebuilt/tool_node.js +209 -268
  237. package/dist/prebuilt/tool_node.js.map +1 -1
  238. package/dist/pregel/algo.cjs +521 -692
  239. package/dist/pregel/algo.cjs.map +1 -0
  240. package/dist/pregel/algo.d.cts +13 -0
  241. package/dist/pregel/algo.d.cts.map +1 -0
  242. package/dist/pregel/algo.d.ts +8 -38
  243. package/dist/pregel/algo.d.ts.map +1 -0
  244. package/dist/pregel/algo.js +516 -683
  245. package/dist/pregel/algo.js.map +1 -1
  246. package/dist/pregel/call.cjs +46 -42
  247. package/dist/pregel/call.cjs.map +1 -0
  248. package/dist/pregel/call.js +43 -37
  249. package/dist/pregel/call.js.map +1 -1
  250. package/dist/pregel/debug.cjs +153 -223
  251. package/dist/pregel/debug.cjs.map +1 -0
  252. package/dist/pregel/debug.js +152 -215
  253. package/dist/pregel/debug.js.map +1 -1
  254. package/dist/pregel/index.cjs +1134 -1604
  255. package/dist/pregel/index.cjs.map +1 -0
  256. package/dist/pregel/index.d.cts +534 -0
  257. package/dist/pregel/index.d.cts.map +1 -0
  258. package/dist/pregel/index.d.ts +458 -422
  259. package/dist/pregel/index.d.ts.map +1 -0
  260. package/dist/pregel/index.js +1125 -1592
  261. package/dist/pregel/index.js.map +1 -1
  262. package/dist/pregel/io.cjs +127 -234
  263. package/dist/pregel/io.cjs.map +1 -0
  264. package/dist/pregel/io.js +122 -225
  265. package/dist/pregel/io.js.map +1 -1
  266. package/dist/pregel/loop.cjs +539 -954
  267. package/dist/pregel/loop.cjs.map +1 -0
  268. package/dist/pregel/loop.js +536 -948
  269. package/dist/pregel/loop.js.map +1 -1
  270. package/dist/pregel/messages.cjs +104 -196
  271. package/dist/pregel/messages.cjs.map +1 -0
  272. package/dist/pregel/messages.js +102 -191
  273. package/dist/pregel/messages.js.map +1 -1
  274. package/dist/pregel/read.cjs +150 -280
  275. package/dist/pregel/read.cjs.map +1 -0
  276. package/dist/pregel/read.d.cts +51 -0
  277. package/dist/pregel/read.d.cts.map +1 -0
  278. package/dist/pregel/read.d.ts +48 -46
  279. package/dist/pregel/read.d.ts.map +1 -0
  280. package/dist/pregel/read.js +147 -274
  281. package/dist/pregel/read.js.map +1 -1
  282. package/dist/pregel/remote.cjs +339 -458
  283. package/dist/pregel/remote.cjs.map +1 -0
  284. package/dist/pregel/remote.d.cts +121 -0
  285. package/dist/pregel/remote.d.cts.map +1 -0
  286. package/dist/pregel/remote.d.ts +79 -69
  287. package/dist/pregel/remote.d.ts.map +1 -0
  288. package/dist/pregel/remote.js +337 -453
  289. package/dist/pregel/remote.js.map +1 -1
  290. package/dist/pregel/retry.cjs +87 -138
  291. package/dist/pregel/retry.cjs.map +1 -0
  292. package/dist/pregel/retry.js +83 -130
  293. package/dist/pregel/retry.js.map +1 -1
  294. package/dist/pregel/runnable_types.d.cts +25 -0
  295. package/dist/pregel/runnable_types.d.cts.map +1 -0
  296. package/dist/pregel/runnable_types.d.ts +22 -16
  297. package/dist/pregel/runnable_types.d.ts.map +1 -0
  298. package/dist/pregel/runner.cjs +222 -315
  299. package/dist/pregel/runner.cjs.map +1 -0
  300. package/dist/pregel/runner.js +219 -308
  301. package/dist/pregel/runner.js.map +1 -1
  302. package/dist/pregel/stream.cjs +89 -130
  303. package/dist/pregel/stream.cjs.map +1 -0
  304. package/dist/pregel/stream.js +87 -125
  305. package/dist/pregel/stream.js.map +1 -1
  306. package/dist/pregel/types.cjs +25 -62
  307. package/dist/pregel/types.cjs.map +1 -0
  308. package/dist/pregel/types.d.cts +437 -0
  309. package/dist/pregel/types.d.cts.map +1 -0
  310. package/dist/pregel/types.d.ts +377 -431
  311. package/dist/pregel/types.d.ts.map +1 -0
  312. package/dist/pregel/types.js +23 -57
  313. package/dist/pregel/types.js.map +1 -1
  314. package/dist/pregel/utils/config.cjs +100 -147
  315. package/dist/pregel/utils/config.cjs.map +1 -0
  316. package/dist/pregel/utils/config.d.cts +36 -0
  317. package/dist/pregel/utils/config.d.cts.map +1 -0
  318. package/dist/pregel/utils/config.d.ts +12 -9
  319. package/dist/pregel/utils/config.d.ts.map +1 -0
  320. package/dist/pregel/utils/config.js +98 -143
  321. package/dist/pregel/utils/config.js.map +1 -1
  322. package/dist/pregel/utils/index.cjs +87 -125
  323. package/dist/pregel/utils/index.cjs.map +1 -0
  324. package/dist/pregel/utils/index.d.cts +51 -0
  325. package/dist/pregel/utils/index.d.cts.map +1 -0
  326. package/dist/pregel/utils/index.d.ts +45 -61
  327. package/dist/pregel/utils/index.d.ts.map +1 -0
  328. package/dist/pregel/utils/index.js +86 -120
  329. package/dist/pregel/utils/index.js.map +1 -1
  330. package/dist/pregel/utils/subgraph.cjs +15 -26
  331. package/dist/pregel/utils/subgraph.cjs.map +1 -0
  332. package/dist/pregel/utils/subgraph.js +12 -21
  333. package/dist/pregel/utils/subgraph.js.map +1 -1
  334. package/dist/pregel/validate.cjs +42 -92
  335. package/dist/pregel/validate.cjs.map +1 -0
  336. package/dist/pregel/validate.js +39 -84
  337. package/dist/pregel/validate.js.map +1 -1
  338. package/dist/pregel/write.cjs +87 -137
  339. package/dist/pregel/write.cjs.map +1 -0
  340. package/dist/pregel/write.d.cts +35 -0
  341. package/dist/pregel/write.d.cts.map +1 -0
  342. package/dist/pregel/write.d.ts +27 -23
  343. package/dist/pregel/write.d.ts.map +1 -0
  344. package/dist/pregel/write.js +83 -131
  345. package/dist/pregel/write.js.map +1 -1
  346. package/dist/remote.cjs +3 -6
  347. package/dist/remote.d.cts +2 -0
  348. package/dist/remote.d.ts +2 -1
  349. package/dist/remote.js +3 -2
  350. package/dist/setup/async_local_storage.cjs +10 -7
  351. package/dist/setup/async_local_storage.cjs.map +1 -0
  352. package/dist/setup/async_local_storage.js +7 -2
  353. package/dist/setup/async_local_storage.js.map +1 -1
  354. package/dist/ui/index.cjs +4 -0
  355. package/dist/ui/index.d.cts +5 -0
  356. package/dist/ui/index.d.ts +5 -0
  357. package/dist/ui/index.js +3 -0
  358. package/dist/ui/stream.cjs +145 -0
  359. package/dist/ui/stream.cjs.map +1 -0
  360. package/dist/ui/stream.d.cts +25 -0
  361. package/dist/ui/stream.d.cts.map +1 -0
  362. package/dist/ui/stream.d.ts +25 -0
  363. package/dist/ui/stream.d.ts.map +1 -0
  364. package/dist/ui/stream.js +143 -0
  365. package/dist/ui/stream.js.map +1 -0
  366. package/dist/ui/types.infer.d.cts +53 -0
  367. package/dist/ui/types.infer.d.cts.map +1 -0
  368. package/dist/ui/types.infer.d.ts +53 -0
  369. package/dist/ui/types.infer.d.ts.map +1 -0
  370. package/dist/ui/types.message.d.cts +95 -0
  371. package/dist/ui/types.message.d.cts.map +1 -0
  372. package/dist/ui/types.message.d.ts +95 -0
  373. package/dist/ui/types.message.d.ts.map +1 -0
  374. package/dist/ui/types.schema.d.cts +228 -0
  375. package/dist/ui/types.schema.d.cts.map +1 -0
  376. package/dist/ui/types.schema.d.ts +228 -0
  377. package/dist/ui/types.schema.d.ts.map +1 -0
  378. package/dist/utils.cjs +77 -147
  379. package/dist/utils.cjs.map +1 -0
  380. package/dist/utils.d.cts +32 -0
  381. package/dist/utils.d.cts.map +1 -0
  382. package/dist/utils.d.ts +29 -25
  383. package/dist/utils.d.ts.map +1 -0
  384. package/dist/utils.js +73 -140
  385. package/dist/utils.js.map +1 -1
  386. package/dist/web.cjs +97 -55
  387. package/dist/web.d.cts +23 -0
  388. package/dist/web.d.ts +23 -14
  389. package/dist/web.js +15 -8
  390. package/package.json +83 -86
  391. package/dist/channels/any_value.cjs +0 -65
  392. package/dist/channels/any_value.js +0 -61
  393. package/dist/channels/any_value.js.map +0 -1
  394. package/dist/channels/dynamic_barrier_value.cjs +0 -212
  395. package/dist/channels/dynamic_barrier_value.js +0 -207
  396. package/dist/channels/dynamic_barrier_value.js.map +0 -1
  397. package/dist/channels/index.d.ts +0 -7
  398. package/dist/channels/index.js.map +0 -1
  399. package/dist/func/types.cjs +0 -15
  400. package/dist/func/types.js +0 -12
  401. package/dist/func/types.js.map +0 -1
  402. package/dist/graph/index.d.ts +0 -4
  403. package/dist/graph/index.js.map +0 -1
  404. package/dist/graph/message.test.cjs +0 -196
  405. package/dist/graph/message.test.d.ts +0 -1
  406. package/dist/graph/message.test.js +0 -194
  407. package/dist/graph/message.test.js.map +0 -1
  408. package/dist/graph/zod/index.js.map +0 -1
  409. package/dist/graph/zod/plugin.d.ts +0 -28
  410. package/dist/hash.d.ts +0 -2
  411. package/dist/prebuilt/index.js.map +0 -1
  412. package/dist/prebuilt/interrupt.cjs +0 -3
  413. package/dist/prebuilt/interrupt.js +0 -2
  414. package/dist/prebuilt/interrupt.js.map +0 -1
  415. package/dist/pregel/call.d.ts +0 -16
  416. package/dist/pregel/debug.d.ts +0 -41
  417. package/dist/pregel/debug.test.cjs +0 -258
  418. package/dist/pregel/debug.test.d.ts +0 -1
  419. package/dist/pregel/debug.test.js +0 -256
  420. package/dist/pregel/debug.test.js.map +0 -1
  421. package/dist/pregel/io.d.ts +0 -30
  422. package/dist/pregel/io.mapCommand.test.cjs +0 -150
  423. package/dist/pregel/io.mapCommand.test.d.ts +0 -1
  424. package/dist/pregel/io.mapCommand.test.js +0 -148
  425. package/dist/pregel/io.mapCommand.test.js.map +0 -1
  426. package/dist/pregel/loop.d.ts +0 -147
  427. package/dist/pregel/messages.d.ts +0 -30
  428. package/dist/pregel/messages.test.cjs +0 -369
  429. package/dist/pregel/messages.test.d.ts +0 -1
  430. package/dist/pregel/messages.test.js +0 -367
  431. package/dist/pregel/messages.test.js.map +0 -1
  432. package/dist/pregel/read.test.cjs +0 -194
  433. package/dist/pregel/read.test.d.ts +0 -1
  434. package/dist/pregel/read.test.js +0 -192
  435. package/dist/pregel/read.test.js.map +0 -1
  436. package/dist/pregel/retry.d.ts +0 -17
  437. package/dist/pregel/runnable_types.cjs +0 -3
  438. package/dist/pregel/runnable_types.js +0 -2
  439. package/dist/pregel/runnable_types.js.map +0 -1
  440. package/dist/pregel/runner.d.ts +0 -79
  441. package/dist/pregel/runner.test.cjs +0 -66
  442. package/dist/pregel/runner.test.d.ts +0 -1
  443. package/dist/pregel/runner.test.js +0 -64
  444. package/dist/pregel/runner.test.js.map +0 -1
  445. package/dist/pregel/stream.d.ts +0 -40
  446. package/dist/pregel/utils/config.test.cjs +0 -214
  447. package/dist/pregel/utils/config.test.d.ts +0 -1
  448. package/dist/pregel/utils/config.test.js +0 -212
  449. package/dist/pregel/utils/config.test.js.map +0 -1
  450. package/dist/pregel/utils/subgraph.d.ts +0 -4
  451. package/dist/pregel/utils/subgraph.test.cjs +0 -83
  452. package/dist/pregel/utils/subgraph.test.d.ts +0 -1
  453. package/dist/pregel/utils/subgraph.test.js +0 -81
  454. package/dist/pregel/utils/subgraph.test.js.map +0 -1
  455. package/dist/pregel/validate.d.ts +0 -16
  456. package/dist/pregel/validate.test.cjs +0 -220
  457. package/dist/pregel/validate.test.d.ts +0 -1
  458. package/dist/pregel/validate.test.js +0 -218
  459. package/dist/pregel/validate.test.js.map +0 -1
  460. package/dist/pregel/write.test.cjs +0 -181
  461. package/dist/pregel/write.test.d.ts +0 -1
  462. package/dist/pregel/write.test.js +0 -179
  463. package/dist/pregel/write.test.js.map +0 -1
  464. package/dist/remote.js.map +0 -1
  465. package/dist/setup/async_local_storage.d.ts +0 -1
  466. package/dist/web.js.map +0 -1
  467. package/index.cjs +0 -1
  468. package/index.d.cts +0 -1
  469. package/index.d.ts +0 -1
  470. package/index.js +0 -1
  471. package/prebuilt.cjs +0 -1
  472. package/prebuilt.d.cts +0 -1
  473. package/prebuilt.d.ts +0 -1
  474. package/prebuilt.js +0 -1
  475. package/pregel.cjs +0 -1
  476. package/pregel.d.cts +0 -1
  477. package/pregel.d.ts +0 -1
  478. package/pregel.js +0 -1
  479. package/remote.cjs +0 -1
  480. package/remote.d.cts +0 -1
  481. package/remote.d.ts +0 -1
  482. package/remote.js +0 -1
  483. package/web.cjs +0 -1
  484. package/web.d.cts +0 -1
  485. package/web.d.ts +0 -1
  486. package/web.js +0 -1
  487. package/zod/schema.cjs +0 -1
  488. package/zod/schema.d.cts +0 -1
  489. package/zod/schema.d.ts +0 -1
  490. package/zod/schema.js +0 -1
  491. package/zod.cjs +0 -1
  492. package/zod.d.cts +0 -1
  493. package/zod.d.ts +0 -1
  494. package/zod.js +0 -1
@@ -1,321 +1,228 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PregelRunner = void 0;
4
- const types_js_1 = require("./types.cjs");
5
- const index_js_1 = require("./utils/index.cjs");
6
- const constants_js_1 = require("../constants.cjs");
7
- const errors_js_1 = require("../errors.cjs");
8
- const retry_js_1 = require("./retry.cjs");
1
+ const require_errors = require('../errors.cjs');
2
+ const require_constants = require('../constants.cjs');
3
+ const require_types = require('./types.cjs');
4
+ const require_index = require('./utils/index.cjs');
5
+ const require_retry = require('./retry.cjs');
6
+
7
+ //#region src/pregel/runner.ts
9
8
  const PROMISE_ADDED_SYMBOL = Symbol.for("promiseAdded");
10
9
  function createPromiseBarrier() {
11
- const barrier = {
12
- next: () => void 0,
13
- wait: Promise.resolve(PROMISE_ADDED_SYMBOL),
14
- };
15
- function waitHandler(resolve) {
16
- barrier.next = () => {
17
- barrier.wait = new Promise(waitHandler);
18
- resolve(PROMISE_ADDED_SYMBOL);
19
- };
20
- }
21
- barrier.wait = new Promise(waitHandler);
22
- return barrier;
10
+ const barrier = {
11
+ next: () => void 0,
12
+ wait: Promise.resolve(PROMISE_ADDED_SYMBOL)
13
+ };
14
+ function waitHandler(resolve) {
15
+ barrier.next = () => {
16
+ barrier.wait = new Promise(waitHandler);
17
+ resolve(PROMISE_ADDED_SYMBOL);
18
+ };
19
+ }
20
+ barrier.wait = new Promise(waitHandler);
21
+ return barrier;
23
22
  }
24
23
  /**
25
- * Responsible for handling task execution on each tick of the {@link PregelLoop}.
26
- */
27
- class PregelRunner {
28
- /**
29
- * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.
30
- * @param loop - The PregelLoop that produces tasks for this runner to execute.
31
- */
32
- constructor({ loop, nodeFinished, }) {
33
- Object.defineProperty(this, "nodeFinished", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: void 0
38
- });
39
- Object.defineProperty(this, "loop", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: void 0
44
- });
45
- this.loop = loop;
46
- this.nodeFinished = nodeFinished;
47
- }
48
- /**
49
- * Execute tasks from the current step of the PregelLoop.
50
- *
51
- * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.
52
- * @param options - Options for the execution.
53
- */
54
- async tick(options = {}) {
55
- const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
56
- const nodeErrors = new Set();
57
- let graphBubbleUp;
58
- const exceptionSignalController = new AbortController();
59
- const exceptionSignal = exceptionSignalController.signal;
60
- const stepTimeoutSignal = timeout
61
- ? AbortSignal.timeout(timeout)
62
- : undefined;
63
- // Start task execution
64
- const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
65
- const { signals, disposeCombinedSignal } = this._initializeAbortSignals({
66
- exceptionSignal,
67
- stepTimeoutSignal,
68
- signal: options.signal,
69
- });
70
- const taskStream = this._executeTasksWithRetry(pendingTasks, {
71
- signals,
72
- retryPolicy,
73
- maxConcurrency,
74
- });
75
- for await (const { task, error, signalAborted } of taskStream) {
76
- this._commit(task, error);
77
- if ((0, errors_js_1.isGraphInterrupt)(error)) {
78
- graphBubbleUp = error;
79
- }
80
- else if ((0, errors_js_1.isGraphBubbleUp)(error) && !(0, errors_js_1.isGraphInterrupt)(graphBubbleUp)) {
81
- graphBubbleUp = error;
82
- }
83
- else if (error && (nodeErrors.size === 0 || !signalAborted)) {
84
- /*
85
- * The goal here is to capture the exception that causes the graph to terminate early. In
86
- * theory it's possible for multiple nodes to throw, so this also handles the edge case of
87
- * capturing concurrent exceptions thrown before the node saw an abort. This is checked via
88
- * the signalAborted flag, which records the state of the abort signal at the time the node
89
- * execution finished.
90
- *
91
- * There is a case however where one node throws some error causing us to trigger an abort,
92
- * which then causes other concurrently executing nodes to throw their own AbortErrors. In
93
- * this case we don't care about reporting the abort errors thrown by the other nodes,
94
- * because they don't tell the user anything about what caused the graph execution to
95
- * terminate early, so we ignore them (and any other errors that occur after the node sees
96
- * an abort signal).
97
- */
98
- exceptionSignalController.abort();
99
- nodeErrors.add(error);
100
- }
101
- }
102
- disposeCombinedSignal?.();
103
- onStepWrite?.(this.loop.step, Object.values(this.loop.tasks)
104
- .map((task) => task.writes)
105
- .flat());
106
- if (nodeErrors.size === 1) {
107
- throw Array.from(nodeErrors)[0];
108
- }
109
- else if (nodeErrors.size > 1) {
110
- throw new AggregateError(Array.from(nodeErrors), `Multiple errors occurred during superstep ${this.loop.step}. See the "errors" field of this exception for more details.`);
111
- }
112
- if ((0, errors_js_1.isGraphInterrupt)(graphBubbleUp)) {
113
- throw graphBubbleUp;
114
- }
115
- if ((0, errors_js_1.isGraphBubbleUp)(graphBubbleUp) && this.loop.isNested) {
116
- throw graphBubbleUp;
117
- }
118
- }
119
- /**
120
- * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
121
- * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
122
- * while still allowing nodes to gracefully exit.
123
- *
124
- * This method must only be called once per PregelRunner#tick. It has the side effect of updating
125
- * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
126
- * ticks and subgraph calls.
127
- *
128
- * @param options - Options for the initialization.
129
- * @returns The current abort signals.
130
- * @internal
131
- */
132
- _initializeAbortSignals({ exceptionSignal, stepTimeoutSignal, signal, }) {
133
- const previousSignals = (this.loop.config.configurable?.[constants_js_1.CONFIG_KEY_ABORT_SIGNALS] ?? {});
134
- // We always inherit the external abort signal from AsyncLocalStorage,
135
- // since that's the only way the signal is inherited by the subgraph calls.
136
- const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;
137
- // inherit the step timeout signal from parent graph
138
- const timeoutAbortSignal = stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;
139
- const { signal: composedAbortSignal, dispose: disposeCombinedSignal } = (0, index_js_1.combineAbortSignals)(externalAbortSignal, timeoutAbortSignal, exceptionSignal);
140
- const signals = {
141
- externalAbortSignal,
142
- timeoutAbortSignal,
143
- composedAbortSignal,
144
- };
145
- this.loop.config = (0, index_js_1.patchConfigurable)(this.loop.config, {
146
- [constants_js_1.CONFIG_KEY_ABORT_SIGNALS]: signals,
147
- });
148
- return { signals, disposeCombinedSignal };
149
- }
150
- /**
151
- * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
152
- * @param tasks - The tasks to execute.
153
- * @param options - Options for the execution.
154
- */
155
- async *_executeTasksWithRetry(tasks, options) {
156
- const { retryPolicy, maxConcurrency, signals } = options ?? {};
157
- const barrier = createPromiseBarrier();
158
- const executingTasksMap = {};
159
- const thisCall = {
160
- executingTasksMap,
161
- barrier,
162
- retryPolicy,
163
- scheduleTask: async (task, writeIdx, call) => this.loop.acceptPush(task, writeIdx, call),
164
- };
165
- if (signals?.composedAbortSignal?.aborted) {
166
- // note: don't use throwIfAborted here because it throws a DOMException,
167
- // which isn't consistent with how we throw on abort below.
168
- throw new Error("Abort");
169
- }
170
- let startedTasksCount = 0;
171
- let listener;
172
- const timeoutOrCancelSignal = (0, index_js_1.combineAbortSignals)(signals?.externalAbortSignal, signals?.timeoutAbortSignal);
173
- const abortPromise = timeoutOrCancelSignal.signal
174
- ? new Promise((_resolve, reject) => {
175
- listener = () => reject(new Error("Abort"));
176
- timeoutOrCancelSignal.signal?.addEventListener("abort", listener, {
177
- once: true,
178
- });
179
- })
180
- : undefined;
181
- while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&
182
- tasks.length) {
183
- for (; Object.values(executingTasksMap).length <
184
- (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length; startedTasksCount += 1) {
185
- const task = tasks[startedTasksCount];
186
- executingTasksMap[task.id] = (0, retry_js_1._runWithRetry)(task, retryPolicy, { [constants_js_1.CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) }, signals?.composedAbortSignal).catch((error) => {
187
- return {
188
- task,
189
- error,
190
- signalAborted: signals?.composedAbortSignal?.aborted,
191
- };
192
- });
193
- }
194
- const settledTask = await Promise.race([
195
- ...Object.values(executingTasksMap),
196
- ...(abortPromise ? [abortPromise] : []),
197
- barrier.wait,
198
- ]);
199
- if (settledTask === PROMISE_ADDED_SYMBOL) {
200
- continue;
201
- }
202
- yield settledTask;
203
- if (listener != null) {
204
- timeoutOrCancelSignal.signal?.removeEventListener("abort", listener);
205
- timeoutOrCancelSignal.dispose?.();
206
- }
207
- delete executingTasksMap[settledTask.task.id];
208
- }
209
- }
210
- /**
211
- * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.
212
- *
213
- * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.
214
- *
215
- * @param task - The task to commit.
216
- * @param error - The error that occurred, if any.
217
- */
218
- _commit(task, error) {
219
- if (error !== undefined) {
220
- if ((0, errors_js_1.isGraphInterrupt)(error)) {
221
- if (error.interrupts.length) {
222
- const interrupts = error.interrupts.map((interrupt) => [constants_js_1.INTERRUPT, interrupt]);
223
- const resumes = task.writes.filter((w) => w[0] === constants_js_1.RESUME);
224
- if (resumes.length) {
225
- interrupts.push(...resumes);
226
- }
227
- this.loop.putWrites(task.id, interrupts);
228
- }
229
- }
230
- else if ((0, errors_js_1.isGraphBubbleUp)(error) && task.writes.length) {
231
- this.loop.putWrites(task.id, task.writes);
232
- }
233
- else {
234
- this.loop.putWrites(task.id, [
235
- [constants_js_1.ERROR, { message: error.message, name: error.name }],
236
- ]);
237
- }
238
- }
239
- else {
240
- if (this.nodeFinished &&
241
- (task.config?.tags == null || !task.config.tags.includes(constants_js_1.TAG_HIDDEN))) {
242
- this.nodeFinished(String(task.name));
243
- }
244
- if (task.writes.length === 0) {
245
- // Add no writes marker
246
- task.writes.push([constants_js_1.NO_WRITES, null]);
247
- }
248
- // Save task writes to checkpointer
249
- this.loop.putWrites(task.id, task.writes);
250
- }
251
- }
252
- }
253
- exports.PregelRunner = PregelRunner;
24
+ * Responsible for handling task execution on each tick of the {@link PregelLoop}.
25
+ */
26
+ var PregelRunner = class {
27
+ nodeFinished;
28
+ loop;
29
+ /**
30
+ * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.
31
+ * @param loop - The PregelLoop that produces tasks for this runner to execute.
32
+ */
33
+ constructor({ loop, nodeFinished }) {
34
+ this.loop = loop;
35
+ this.nodeFinished = nodeFinished;
36
+ }
37
+ /**
38
+ * Execute tasks from the current step of the PregelLoop.
39
+ *
40
+ * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.
41
+ * @param options - Options for the execution.
42
+ */
43
+ async tick(options = {}) {
44
+ const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
45
+ const nodeErrors = /* @__PURE__ */ new Set();
46
+ let graphBubbleUp;
47
+ const exceptionSignalController = new AbortController();
48
+ const exceptionSignal = exceptionSignalController.signal;
49
+ const stepTimeoutSignal = timeout ? AbortSignal.timeout(timeout) : void 0;
50
+ const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
51
+ const { signals, disposeCombinedSignal } = this._initializeAbortSignals({
52
+ exceptionSignal,
53
+ stepTimeoutSignal,
54
+ signal: options.signal
55
+ });
56
+ const taskStream = this._executeTasksWithRetry(pendingTasks, {
57
+ signals,
58
+ retryPolicy,
59
+ maxConcurrency
60
+ });
61
+ for await (const { task, error, signalAborted } of taskStream) {
62
+ this._commit(task, error);
63
+ if (require_errors.isGraphInterrupt(error)) graphBubbleUp = error;
64
+ else if (require_errors.isGraphBubbleUp(error) && !require_errors.isGraphInterrupt(graphBubbleUp)) graphBubbleUp = error;
65
+ else if (error && (nodeErrors.size === 0 || !signalAborted)) {
66
+ exceptionSignalController.abort();
67
+ nodeErrors.add(error);
68
+ }
69
+ }
70
+ disposeCombinedSignal?.();
71
+ onStepWrite?.(this.loop.step, Object.values(this.loop.tasks).map((task) => task.writes).flat());
72
+ if (nodeErrors.size === 1) throw Array.from(nodeErrors)[0];
73
+ else if (nodeErrors.size > 1) throw new AggregateError(Array.from(nodeErrors), `Multiple errors occurred during superstep ${this.loop.step}. See the "errors" field of this exception for more details.`);
74
+ if (require_errors.isGraphInterrupt(graphBubbleUp)) throw graphBubbleUp;
75
+ if (require_errors.isGraphBubbleUp(graphBubbleUp) && this.loop.isNested) throw graphBubbleUp;
76
+ }
77
+ /**
78
+ * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
79
+ * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
80
+ * while still allowing nodes to gracefully exit.
81
+ *
82
+ * This method must only be called once per PregelRunner#tick. It has the side effect of updating
83
+ * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
84
+ * ticks and subgraph calls.
85
+ *
86
+ * @param options - Options for the initialization.
87
+ * @returns The current abort signals.
88
+ * @internal
89
+ */
90
+ _initializeAbortSignals({ exceptionSignal, stepTimeoutSignal, signal }) {
91
+ const previousSignals = this.loop.config.configurable?.[require_constants.CONFIG_KEY_ABORT_SIGNALS] ?? {};
92
+ const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;
93
+ const timeoutAbortSignal = stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;
94
+ const { signal: composedAbortSignal, dispose: disposeCombinedSignal } = require_index.combineAbortSignals(externalAbortSignal, timeoutAbortSignal, exceptionSignal);
95
+ const signals = {
96
+ externalAbortSignal,
97
+ timeoutAbortSignal,
98
+ composedAbortSignal
99
+ };
100
+ this.loop.config = require_index.patchConfigurable(this.loop.config, { [require_constants.CONFIG_KEY_ABORT_SIGNALS]: signals });
101
+ return {
102
+ signals,
103
+ disposeCombinedSignal
104
+ };
105
+ }
106
+ /**
107
+ * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
108
+ * @param tasks - The tasks to execute.
109
+ * @param options - Options for the execution.
110
+ */
111
+ async *_executeTasksWithRetry(tasks, options) {
112
+ const { retryPolicy, maxConcurrency, signals } = options ?? {};
113
+ const barrier = createPromiseBarrier();
114
+ const executingTasksMap = {};
115
+ const thisCall = {
116
+ executingTasksMap,
117
+ barrier,
118
+ retryPolicy,
119
+ scheduleTask: async (task, writeIdx, call$1) => this.loop.acceptPush(task, writeIdx, call$1)
120
+ };
121
+ if (signals?.composedAbortSignal?.aborted) throw new Error("Abort");
122
+ let startedTasksCount = 0;
123
+ let listener;
124
+ const timeoutOrCancelSignal = require_index.combineAbortSignals(signals?.externalAbortSignal, signals?.timeoutAbortSignal);
125
+ const abortPromise = timeoutOrCancelSignal.signal ? new Promise((_resolve, reject) => {
126
+ listener = () => reject(/* @__PURE__ */ new Error("Abort"));
127
+ timeoutOrCancelSignal.signal?.addEventListener("abort", listener, { once: true });
128
+ }) : void 0;
129
+ while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) && tasks.length) {
130
+ for (; Object.values(executingTasksMap).length < (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length; startedTasksCount += 1) {
131
+ const task = tasks[startedTasksCount];
132
+ executingTasksMap[task.id] = require_retry._runWithRetry(task, retryPolicy, { [require_constants.CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) }, signals?.composedAbortSignal).catch((error) => {
133
+ return {
134
+ task,
135
+ error,
136
+ signalAborted: signals?.composedAbortSignal?.aborted
137
+ };
138
+ });
139
+ }
140
+ const settledTask = await Promise.race([
141
+ ...Object.values(executingTasksMap),
142
+ ...abortPromise ? [abortPromise] : [],
143
+ barrier.wait
144
+ ]);
145
+ if (settledTask === PROMISE_ADDED_SYMBOL) continue;
146
+ yield settledTask;
147
+ if (listener != null) {
148
+ timeoutOrCancelSignal.signal?.removeEventListener("abort", listener);
149
+ timeoutOrCancelSignal.dispose?.();
150
+ }
151
+ delete executingTasksMap[settledTask.task.id];
152
+ }
153
+ }
154
+ /**
155
+ * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.
156
+ *
157
+ * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.
158
+ *
159
+ * @param task - The task to commit.
160
+ * @param error - The error that occurred, if any.
161
+ */
162
+ _commit(task, error) {
163
+ if (error !== void 0) if (require_errors.isGraphInterrupt(error)) {
164
+ if (error.interrupts.length) {
165
+ const interrupts = error.interrupts.map((interrupt) => [require_constants.INTERRUPT, interrupt]);
166
+ const resumes = task.writes.filter((w) => w[0] === require_constants.RESUME);
167
+ if (resumes.length) interrupts.push(...resumes);
168
+ this.loop.putWrites(task.id, interrupts);
169
+ }
170
+ } else if (require_errors.isGraphBubbleUp(error) && task.writes.length) this.loop.putWrites(task.id, task.writes);
171
+ else this.loop.putWrites(task.id, [[require_constants.ERROR, {
172
+ message: error.message,
173
+ name: error.name
174
+ }]]);
175
+ else {
176
+ if (this.nodeFinished && (task.config?.tags == null || !task.config.tags.includes(require_constants.TAG_HIDDEN))) this.nodeFinished(String(task.name));
177
+ if (task.writes.length === 0) task.writes.push([require_constants.NO_WRITES, null]);
178
+ this.loop.putWrites(task.id, task.writes);
179
+ }
180
+ }
181
+ };
254
182
  async function call(runner, task, func, name, input, options = {}) {
255
- // Schedule PUSH tasks, collect promises
256
- const scratchpad = task.config?.configurable?.[constants_js_1.CONFIG_KEY_SCRATCHPAD];
257
- if (!scratchpad) {
258
- throw new Error(`BUG: No scratchpad found on task ${task.name}__${task.id}`);
259
- }
260
- const cnt = scratchpad.callCounter;
261
- scratchpad.callCounter += 1;
262
- // schedule the next task, if the callback returns one
263
- const wcall = new types_js_1.Call({
264
- func,
265
- name,
266
- input,
267
- cache: options.cache,
268
- retry: options.retry,
269
- callbacks: options.callbacks,
270
- });
271
- const nextTask = await this.scheduleTask(task, cnt, wcall);
272
- if (!nextTask)
273
- return undefined;
274
- // Check if this task is already running
275
- const existingPromise = this.executingTasksMap[nextTask.id];
276
- if (existingPromise !== undefined) {
277
- // If the parent task was retried, the next task might already be running
278
- return existingPromise;
279
- }
280
- if (nextTask.writes.length > 0) {
281
- // If it already ran, return the result
282
- const returns = nextTask.writes.filter(([c]) => c === constants_js_1.RETURN);
283
- const errors = nextTask.writes.filter(([c]) => c === constants_js_1.ERROR);
284
- if (returns.length > 0) {
285
- // Task completed successfully
286
- if (returns.length === 1)
287
- return Promise.resolve(returns[0][1]);
288
- // should be unreachable
289
- throw new Error(`BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`);
290
- }
291
- if (errors.length > 0) {
292
- // Task failed
293
- if (errors.length === 1) {
294
- const errorValue = errors[0][1];
295
- const error =
296
- // eslint-disable-next-line no-instanceof/no-instanceof
297
- errorValue instanceof Error
298
- ? errorValue
299
- : new Error(String(errorValue));
300
- return Promise.reject(error);
301
- }
302
- // the only way this should happen is if the task executes multiple times and writes aren't cleared
303
- throw new Error(`BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`);
304
- }
305
- return undefined;
306
- }
307
- else {
308
- // Schedule the next task with retry
309
- const prom = (0, retry_js_1._runWithRetry)(nextTask, options.retry, {
310
- [constants_js_1.CONFIG_KEY_CALL]: call.bind(this, runner, nextTask),
311
- });
312
- this.executingTasksMap[nextTask.id] = prom;
313
- this.barrier.next();
314
- return prom.then(({ result, error }) => {
315
- if (error)
316
- return Promise.reject(error);
317
- return result;
318
- });
319
- }
183
+ const scratchpad = task.config?.configurable?.[require_constants.CONFIG_KEY_SCRATCHPAD];
184
+ if (!scratchpad) throw new Error(`BUG: No scratchpad found on task ${task.name}__${task.id}`);
185
+ const cnt = scratchpad.callCounter;
186
+ scratchpad.callCounter += 1;
187
+ const wcall = new require_types.Call({
188
+ func,
189
+ name,
190
+ input,
191
+ cache: options.cache,
192
+ retry: options.retry,
193
+ callbacks: options.callbacks
194
+ });
195
+ const nextTask = await this.scheduleTask(task, cnt, wcall);
196
+ if (!nextTask) return void 0;
197
+ const existingPromise = this.executingTasksMap[nextTask.id];
198
+ if (existingPromise !== void 0) return existingPromise;
199
+ if (nextTask.writes.length > 0) {
200
+ const returns = nextTask.writes.filter(([c]) => c === require_constants.RETURN);
201
+ const errors = nextTask.writes.filter(([c]) => c === require_constants.ERROR);
202
+ if (returns.length > 0) {
203
+ if (returns.length === 1) return Promise.resolve(returns[0][1]);
204
+ throw new Error(`BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`);
205
+ }
206
+ if (errors.length > 0) {
207
+ if (errors.length === 1) {
208
+ const errorValue = errors[0][1];
209
+ const error = errorValue instanceof Error ? errorValue : new Error(String(errorValue));
210
+ return Promise.reject(error);
211
+ }
212
+ throw new Error(`BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`);
213
+ }
214
+ return void 0;
215
+ } else {
216
+ const prom = require_retry._runWithRetry(nextTask, options.retry, { [require_constants.CONFIG_KEY_CALL]: call.bind(this, runner, nextTask) });
217
+ this.executingTasksMap[nextTask.id] = prom;
218
+ this.barrier.next();
219
+ return prom.then(({ result, error }) => {
220
+ if (error) return Promise.reject(error);
221
+ return result;
222
+ });
223
+ }
320
224
  }
321
- //# sourceMappingURL=runner.js.map
225
+
226
+ //#endregion
227
+ exports.PregelRunner = PregelRunner;
228
+ //# sourceMappingURL=runner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.cjs","names":["barrier: {\n next: () => void;\n wait: Promise<unknown>;\n }","nodeErrors: Set<Error>","graphBubbleUp: GraphBubbleUp | undefined","isGraphInterrupt","isGraphBubbleUp","CONFIG_KEY_ABORT_SIGNALS","combineAbortSignals","signals: PregelAbortSignals","patchConfigurable","executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n >","call","listener: (() => void) | undefined","_runWithRetry","CONFIG_KEY_CALL","interrupts: PendingWrite<string>[]","INTERRUPT","RESUME","ERROR","TAG_HIDDEN","NO_WRITES","CONFIG_KEY_SCRATCHPAD","Call","RETURN"],"sources":["../../src/pregel/runner.ts"],"sourcesContent":["import { PendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport {\n Call,\n PregelAbortSignals,\n PregelExecutableTask,\n PregelScratchpad,\n} from \"./types.js\";\nimport {\n CachePolicy,\n combineAbortSignals,\n patchConfigurable,\n RetryPolicy,\n} from \"./utils/index.js\";\nimport {\n CONFIG_KEY_SCRATCHPAD,\n ERROR,\n INTERRUPT,\n RESUME,\n NO_WRITES,\n TAG_HIDDEN,\n RETURN,\n CONFIG_KEY_CALL,\n CONFIG_KEY_ABORT_SIGNALS,\n} from \"../constants.js\";\nimport { GraphBubbleUp, isGraphBubbleUp, isGraphInterrupt } from \"../errors.js\";\nimport { _runWithRetry, SettledPregelTask } from \"./retry.js\";\nimport { PregelLoop } from \"./loop.js\";\n\nconst PROMISE_ADDED_SYMBOL = Symbol.for(\"promiseAdded\");\n\nfunction createPromiseBarrier() {\n const barrier: {\n next: () => void;\n wait: Promise<unknown>;\n } = {\n next: () => void 0,\n wait: Promise.resolve(PROMISE_ADDED_SYMBOL),\n };\n\n function waitHandler(resolve: (value: typeof PROMISE_ADDED_SYMBOL) => void) {\n barrier.next = () => {\n barrier.wait = new Promise(waitHandler);\n resolve(PROMISE_ADDED_SYMBOL);\n };\n }\n barrier.wait = new Promise(waitHandler);\n return barrier;\n}\n\n/**\n * Options for the {@link PregelRunner#tick} method.\n */\nexport type TickOptions = {\n /**\n * The deadline before which all tasks must be completed.\n */\n timeout?: number;\n\n /**\n * An optional {@link AbortSignal} to cancel processing of tasks.\n */\n signal?: AbortSignal;\n\n /**\n * The {@link RetryPolicy} to use for the tick.\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * An optional callback to be called after all task writes are completed.\n */\n onStepWrite?: (step: number, writes: PendingWrite[]) => void;\n\n /**\n * The maximum number of tasks to execute concurrently.\n */\n maxConcurrency?: number;\n};\n\n/**\n * Responsible for handling task execution on each tick of the {@link PregelLoop}.\n */\nexport class PregelRunner {\n private nodeFinished?: (id: string) => void;\n\n private loop: PregelLoop;\n\n /**\n * Construct a new PregelRunner, which executes tasks from the provided PregelLoop.\n * @param loop - The PregelLoop that produces tasks for this runner to execute.\n */\n constructor({\n loop,\n nodeFinished,\n }: {\n loop: PregelLoop;\n nodeFinished?: (id: string) => void;\n }) {\n this.loop = loop;\n this.nodeFinished = nodeFinished;\n }\n\n /**\n * Execute tasks from the current step of the PregelLoop.\n *\n * Note: this method does NOT call {@link PregelLoop}#tick. That must be handled externally.\n * @param options - Options for the execution.\n */\n async tick(options: TickOptions = {}) {\n const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;\n\n const nodeErrors: Set<Error> = new Set();\n let graphBubbleUp: GraphBubbleUp | undefined;\n\n const exceptionSignalController = new AbortController();\n const exceptionSignal = exceptionSignalController.signal;\n const stepTimeoutSignal = timeout\n ? AbortSignal.timeout(timeout)\n : undefined;\n\n // Start task execution\n const pendingTasks = Object.values(this.loop.tasks).filter(\n (t) => t.writes.length === 0\n );\n\n const { signals, disposeCombinedSignal } = this._initializeAbortSignals({\n exceptionSignal,\n stepTimeoutSignal,\n signal: options.signal,\n });\n\n const taskStream = this._executeTasksWithRetry(pendingTasks, {\n signals,\n retryPolicy,\n maxConcurrency,\n });\n\n for await (const { task, error, signalAborted } of taskStream) {\n this._commit(task, error);\n if (isGraphInterrupt(error)) {\n graphBubbleUp = error;\n } else if (isGraphBubbleUp(error) && !isGraphInterrupt(graphBubbleUp)) {\n graphBubbleUp = error;\n } else if (error && (nodeErrors.size === 0 || !signalAborted)) {\n /*\n * The goal here is to capture the exception that causes the graph to terminate early. In\n * theory it's possible for multiple nodes to throw, so this also handles the edge case of\n * capturing concurrent exceptions thrown before the node saw an abort. This is checked via\n * the signalAborted flag, which records the state of the abort signal at the time the node\n * execution finished.\n *\n * There is a case however where one node throws some error causing us to trigger an abort,\n * which then causes other concurrently executing nodes to throw their own AbortErrors. In\n * this case we don't care about reporting the abort errors thrown by the other nodes,\n * because they don't tell the user anything about what caused the graph execution to\n * terminate early, so we ignore them (and any other errors that occur after the node sees\n * an abort signal).\n */\n exceptionSignalController.abort();\n nodeErrors.add(error);\n }\n }\n\n disposeCombinedSignal?.();\n\n onStepWrite?.(\n this.loop.step,\n Object.values(this.loop.tasks)\n .map((task) => task.writes)\n .flat()\n );\n\n if (nodeErrors.size === 1) {\n throw Array.from(nodeErrors)[0];\n } else if (nodeErrors.size > 1) {\n throw new AggregateError(\n Array.from(nodeErrors),\n `Multiple errors occurred during superstep ${this.loop.step}. See the \"errors\" field of this exception for more details.`\n );\n }\n\n if (isGraphInterrupt(graphBubbleUp)) {\n throw graphBubbleUp;\n }\n\n if (isGraphBubbleUp(graphBubbleUp) && this.loop.isNested) {\n throw graphBubbleUp;\n }\n }\n\n /**\n * Initializes the current AbortSignals for the PregelRunner, handling the various ways that\n * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary\n * while still allowing nodes to gracefully exit.\n *\n * This method must only be called once per PregelRunner#tick. It has the side effect of updating\n * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future\n * ticks and subgraph calls.\n *\n * @param options - Options for the initialization.\n * @returns The current abort signals.\n * @internal\n */\n private _initializeAbortSignals({\n exceptionSignal,\n stepTimeoutSignal,\n signal,\n }: {\n exceptionSignal: AbortSignal;\n stepTimeoutSignal?: AbortSignal;\n signal?: AbortSignal;\n }): { signals: PregelAbortSignals; disposeCombinedSignal?: () => void } {\n const previousSignals = (this.loop.config.configurable?.[\n CONFIG_KEY_ABORT_SIGNALS\n ] ?? {}) as PregelAbortSignals;\n\n // We always inherit the external abort signal from AsyncLocalStorage,\n // since that's the only way the signal is inherited by the subgraph calls.\n const externalAbortSignal = previousSignals.externalAbortSignal ?? signal;\n\n // inherit the step timeout signal from parent graph\n const timeoutAbortSignal =\n stepTimeoutSignal ?? previousSignals.timeoutAbortSignal;\n\n const { signal: composedAbortSignal, dispose: disposeCombinedSignal } =\n combineAbortSignals(\n externalAbortSignal,\n timeoutAbortSignal,\n exceptionSignal\n );\n\n const signals: PregelAbortSignals = {\n externalAbortSignal,\n timeoutAbortSignal,\n composedAbortSignal,\n };\n\n this.loop.config = patchConfigurable(this.loop.config, {\n [CONFIG_KEY_ABORT_SIGNALS]: signals,\n });\n\n return { signals, disposeCombinedSignal };\n }\n\n /**\n * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.\n * @param tasks - The tasks to execute.\n * @param options - Options for the execution.\n */\n private async *_executeTasksWithRetry(\n tasks: PregelExecutableTask<string, string>[],\n options?: {\n signals?: PregelAbortSignals;\n retryPolicy?: RetryPolicy;\n maxConcurrency?: number;\n }\n ): AsyncGenerator<SettledPregelTask> {\n const { retryPolicy, maxConcurrency, signals } = options ?? {};\n\n const barrier = createPromiseBarrier();\n const executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n > = {};\n\n const thisCall = {\n executingTasksMap,\n barrier,\n retryPolicy,\n scheduleTask: async (\n task: PregelExecutableTask<string, string>,\n writeIdx: number,\n call?: Call\n ) => this.loop.acceptPush(task, writeIdx, call),\n };\n\n if (signals?.composedAbortSignal?.aborted) {\n // note: don't use throwIfAborted here because it throws a DOMException,\n // which isn't consistent with how we throw on abort below.\n throw new Error(\"Abort\");\n }\n\n let startedTasksCount = 0;\n\n let listener: (() => void) | undefined;\n const timeoutOrCancelSignal = combineAbortSignals(\n signals?.externalAbortSignal,\n signals?.timeoutAbortSignal\n );\n\n const abortPromise = timeoutOrCancelSignal.signal\n ? new Promise<never>((_resolve, reject) => {\n listener = () => reject(new Error(\"Abort\"));\n timeoutOrCancelSignal.signal?.addEventListener(\"abort\", listener, {\n once: true,\n });\n })\n : undefined;\n\n while (\n (startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&\n tasks.length\n ) {\n for (\n ;\n Object.values(executingTasksMap).length <\n (maxConcurrency ?? tasks.length) && startedTasksCount < tasks.length;\n startedTasksCount += 1\n ) {\n const task = tasks[startedTasksCount];\n\n executingTasksMap[task.id] = _runWithRetry(\n task,\n retryPolicy,\n { [CONFIG_KEY_CALL]: call?.bind(thisCall, this, task) },\n signals?.composedAbortSignal\n ).catch((error) => {\n return {\n task,\n error,\n signalAborted: signals?.composedAbortSignal?.aborted,\n };\n });\n }\n\n const settledTask = await Promise.race([\n ...Object.values(executingTasksMap),\n ...(abortPromise ? [abortPromise] : []),\n barrier.wait,\n ]);\n\n if (settledTask === PROMISE_ADDED_SYMBOL) {\n continue;\n }\n\n yield settledTask as SettledPregelTask;\n\n if (listener != null) {\n timeoutOrCancelSignal.signal?.removeEventListener(\"abort\", listener);\n timeoutOrCancelSignal.dispose?.();\n }\n\n delete executingTasksMap[(settledTask as SettledPregelTask).task.id];\n }\n }\n\n /**\n * Determines what writes to apply based on whether the task completed successfully, and what type of error occurred.\n *\n * Throws an error if the error is a {@link GraphBubbleUp} error and {@link PregelLoop}#isNested is true.\n *\n * @param task - The task to commit.\n * @param error - The error that occurred, if any.\n */\n private _commit(task: PregelExecutableTask<string, string>, error?: Error) {\n if (error !== undefined) {\n if (isGraphInterrupt(error)) {\n if (error.interrupts.length) {\n const interrupts: PendingWrite<string>[] = error.interrupts.map(\n (interrupt) => [INTERRUPT, interrupt]\n );\n const resumes = task.writes.filter((w) => w[0] === RESUME);\n if (resumes.length) {\n interrupts.push(...resumes);\n }\n this.loop.putWrites(task.id, interrupts);\n }\n } else if (isGraphBubbleUp(error) && task.writes.length) {\n this.loop.putWrites(task.id, task.writes);\n } else {\n this.loop.putWrites(task.id, [\n [ERROR, { message: error.message, name: error.name }],\n ]);\n }\n } else {\n if (\n this.nodeFinished &&\n (task.config?.tags == null || !task.config.tags.includes(TAG_HIDDEN))\n ) {\n this.nodeFinished(String(task.name));\n }\n\n if (task.writes.length === 0) {\n // Add no writes marker\n task.writes.push([NO_WRITES, null]);\n }\n\n // Save task writes to checkpointer\n this.loop.putWrites(task.id, task.writes);\n }\n }\n}\n\nasync function call(\n this: {\n executingTasksMap: Record<\n string,\n Promise<{\n task: PregelExecutableTask<string, string>;\n result?: unknown;\n error?: Error;\n }>\n >;\n\n barrier: {\n next: () => void;\n wait: Promise<unknown>;\n };\n\n retryPolicy?: RetryPolicy;\n\n scheduleTask: (\n task: PregelExecutableTask<string, string>,\n writeIdx: number,\n call?: Call\n ) => Promise<PregelExecutableTask<string, string> | void>;\n },\n runner: PregelRunner,\n task: PregelExecutableTask<string, string>,\n func: (...args: unknown[]) => unknown | Promise<unknown>,\n name: string,\n input: unknown,\n options: {\n retry?: RetryPolicy;\n cache?: CachePolicy;\n callbacks?: unknown;\n } = {}\n): Promise<unknown> {\n // Schedule PUSH tasks, collect promises\n const scratchpad = task.config?.configurable?.[CONFIG_KEY_SCRATCHPAD] as\n | PregelScratchpad<unknown>\n | undefined;\n\n if (!scratchpad) {\n throw new Error(\n `BUG: No scratchpad found on task ${task.name}__${task.id}`\n );\n }\n\n const cnt = scratchpad.callCounter;\n scratchpad.callCounter += 1;\n\n // schedule the next task, if the callback returns one\n const wcall = new Call({\n func,\n name,\n input,\n cache: options.cache,\n retry: options.retry,\n callbacks: options.callbacks,\n });\n const nextTask = await this.scheduleTask(task, cnt, wcall);\n if (!nextTask) return undefined;\n\n // Check if this task is already running\n const existingPromise = this.executingTasksMap[nextTask.id];\n\n if (existingPromise !== undefined) {\n // If the parent task was retried, the next task might already be running\n return existingPromise;\n }\n\n if (nextTask.writes.length > 0) {\n // If it already ran, return the result\n const returns = nextTask.writes.filter(([c]) => c === RETURN);\n const errors = nextTask.writes.filter(([c]) => c === ERROR);\n\n if (returns.length > 0) {\n // Task completed successfully\n if (returns.length === 1) return Promise.resolve(returns[0][1]);\n\n // should be unreachable\n throw new Error(\n `BUG: multiple returns found for task ${nextTask.name}__${nextTask.id}`\n );\n }\n\n if (errors.length > 0) {\n // Task failed\n if (errors.length === 1) {\n const errorValue = errors[0][1];\n const error =\n // eslint-disable-next-line no-instanceof/no-instanceof\n errorValue instanceof Error\n ? errorValue\n : new Error(String(errorValue));\n\n return Promise.reject(error);\n }\n\n // the only way this should happen is if the task executes multiple times and writes aren't cleared\n throw new Error(\n `BUG: multiple errors found for task ${nextTask.name}__${nextTask.id}`\n );\n }\n\n return undefined;\n } else {\n // Schedule the next task with retry\n const prom = _runWithRetry<string, string>(nextTask, options.retry, {\n [CONFIG_KEY_CALL]: call.bind(this, runner, nextTask),\n });\n\n this.executingTasksMap[nextTask.id] = prom;\n this.barrier.next();\n\n return prom.then(({ result, error }) => {\n if (error) return Promise.reject(error);\n return result;\n });\n }\n}\n"],"mappings":"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"}