@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,53 +0,0 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_constants = require('../constants.cjs');
3
- const require_utils = require('../utils.cjs');
4
- const require_write = require('./write.cjs');
5
- const __langchain_core_singletons = require_rolldown_runtime.__toESM(require("@langchain/core/singletons"));
6
- const __langchain_core_runnables = require_rolldown_runtime.__toESM(require("@langchain/core/runnables"));
7
-
8
- //#region src/pregel/call.ts
9
- /**
10
- * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.
11
- */
12
- function getRunnableForFunc(name, func) {
13
- const run = new require_utils.RunnableCallable({
14
- func: (input) => func(...input),
15
- name,
16
- trace: false,
17
- recurse: false
18
- });
19
- return new __langchain_core_runnables.RunnableSequence({
20
- name,
21
- first: run,
22
- last: new require_write.ChannelWrite([{
23
- channel: require_constants.RETURN,
24
- value: require_write.PASSTHROUGH
25
- }], [require_constants.TAG_HIDDEN])
26
- });
27
- }
28
- function getRunnableForEntrypoint(name, func) {
29
- const run = new require_utils.RunnableCallable({
30
- func: (input, config) => {
31
- return func(input, config);
32
- },
33
- name,
34
- trace: false,
35
- recurse: false
36
- });
37
- return run;
38
- }
39
- function call({ func, name, cache, retry }, ...args) {
40
- const config = __langchain_core_singletons.AsyncLocalStorageProviderSingleton.getRunnableConfig();
41
- if (typeof config.configurable?.[require_constants.CONFIG_KEY_CALL] === "function") return config.configurable[require_constants.CONFIG_KEY_CALL](func, name, args, {
42
- retry,
43
- cache,
44
- callbacks: config.callbacks
45
- });
46
- throw new Error("Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.");
47
- }
48
-
49
- //#endregion
50
- exports.call = call;
51
- exports.getRunnableForEntrypoint = getRunnableForEntrypoint;
52
- exports.getRunnableForFunc = getRunnableForFunc;
53
- //# sourceMappingURL=call.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"call.cjs","names":["RunnableCallable","RunnableSequence","ChannelWrite","RETURN","PASSTHROUGH","TAG_HIDDEN","AsyncLocalStorageProviderSingleton","CONFIG_KEY_CALL"],"sources":["../../src/pregel/call.ts"],"sourcesContent":["import {\n Runnable,\n RunnableConfig,\n RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from \"../constants.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"./write.js\";\nimport { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nimport { RunnableCallable, type RunnableCallableArgs } from \"../utils.js\";\nimport { EntrypointFunc, EntrypointReturnT, TaskFunc } from \"../func/types.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\n\n/**\n * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.\n */\nexport function getRunnableForFunc<ArgsT extends unknown[], OutputT>(\n name: string,\n func: TaskFunc<ArgsT, OutputT>\n): Runnable<ArgsT, OutputT, LangGraphRunnableConfig> {\n const run = new RunnableCallable<ArgsT, OutputT>({\n func: (input: ArgsT) => func(...input),\n name,\n trace: false,\n recurse: false,\n } as RunnableCallableArgs);\n\n return new RunnableSequence<ArgsT, OutputT>({\n name,\n first: run,\n last: new ChannelWrite<OutputT>(\n [{ channel: RETURN, value: PASSTHROUGH }],\n [TAG_HIDDEN]\n ),\n });\n}\n\nexport function getRunnableForEntrypoint<InputT, OutputT>(\n name: string,\n func: EntrypointFunc<InputT, OutputT>\n): Runnable<InputT, EntrypointReturnT<OutputT>, LangGraphRunnableConfig> {\n const run = new RunnableCallable<InputT, EntrypointReturnT<OutputT>>({\n func: (input: InputT, config: LangGraphRunnableConfig) => {\n return func(input, config);\n },\n name,\n trace: false,\n recurse: false,\n });\n\n return run;\n}\n\nexport type CallWrapperOptions<ArgsT extends unknown[], OutputT> = {\n func: TaskFunc<ArgsT, OutputT>;\n name: string;\n retry?: RetryPolicy;\n cache?: CachePolicy;\n};\n\nexport function call<ArgsT extends unknown[], OutputT>(\n { func, name, cache, retry }: CallWrapperOptions<ArgsT, OutputT>,\n ...args: ArgsT\n): Promise<OutputT> {\n const config =\n AsyncLocalStorageProviderSingleton.getRunnableConfig() as RunnableConfig;\n if (typeof config.configurable?.[CONFIG_KEY_CALL] === \"function\") {\n return config.configurable[CONFIG_KEY_CALL](func, name, args, {\n retry,\n cache,\n callbacks: config.callbacks,\n });\n }\n throw new Error(\n \"Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.\"\n );\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,mBACd,MACA,MACmD;CACnD,MAAM,MAAM,IAAIA,+BAAiC;EAC/C,OAAO,UAAiB,KAAK,GAAG;EAChC;EACA,OAAO;EACP,SAAS;;AAGX,QAAO,IAAIC,4CAAiC;EAC1C;EACA,OAAO;EACP,MAAM,IAAIC,2BACR,CAAC;GAAE,SAASC;GAAQ,OAAOC;MAC3B,CAACC;;;AAKP,SAAgB,yBACd,MACA,MACuE;CACvE,MAAM,MAAM,IAAIL,+BAAqD;EACnE,OAAO,OAAe,WAAoC;AACxD,UAAO,KAAK,OAAO;;EAErB;EACA,OAAO;EACP,SAAS;;AAGX,QAAO;;AAUT,SAAgB,KACd,EAAE,MAAM,MAAM,OAAO,SACrB,GAAG,MACe;CAClB,MAAM,SACJM,+DAAmC;AACrC,KAAI,OAAO,OAAO,eAAeC,uCAAqB,WACpD,QAAO,OAAO,aAAaA,mCAAiB,MAAM,MAAM,MAAM;EAC5D;EACA;EACA,WAAW,OAAO;;AAGtB,OAAM,IAAI,MACR"}
@@ -1,50 +0,0 @@
1
- import { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from "../constants.js";
2
- import { RunnableCallable } from "../utils.js";
3
- import { ChannelWrite, PASSTHROUGH } from "./write.js";
4
- import { AsyncLocalStorageProviderSingleton } from "@langchain/core/singletons";
5
- import { RunnableSequence } from "@langchain/core/runnables";
6
-
7
- //#region src/pregel/call.ts
8
- /**
9
- * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.
10
- */
11
- function getRunnableForFunc(name, func) {
12
- const run = new RunnableCallable({
13
- func: (input) => func(...input),
14
- name,
15
- trace: false,
16
- recurse: false
17
- });
18
- return new RunnableSequence({
19
- name,
20
- first: run,
21
- last: new ChannelWrite([{
22
- channel: RETURN,
23
- value: PASSTHROUGH
24
- }], [TAG_HIDDEN])
25
- });
26
- }
27
- function getRunnableForEntrypoint(name, func) {
28
- const run = new RunnableCallable({
29
- func: (input, config) => {
30
- return func(input, config);
31
- },
32
- name,
33
- trace: false,
34
- recurse: false
35
- });
36
- return run;
37
- }
38
- function call({ func, name, cache, retry }, ...args) {
39
- const config = AsyncLocalStorageProviderSingleton.getRunnableConfig();
40
- if (typeof config.configurable?.[CONFIG_KEY_CALL] === "function") return config.configurable[CONFIG_KEY_CALL](func, name, args, {
41
- retry,
42
- cache,
43
- callbacks: config.callbacks
44
- });
45
- throw new Error("Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.");
46
- }
47
-
48
- //#endregion
49
- export { call, getRunnableForEntrypoint, getRunnableForFunc };
50
- //# sourceMappingURL=call.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"call.js","names":[],"sources":["../../src/pregel/call.ts"],"sourcesContent":["import {\n Runnable,\n RunnableConfig,\n RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from \"../constants.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"./write.js\";\nimport { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nimport { RunnableCallable, type RunnableCallableArgs } from \"../utils.js\";\nimport { EntrypointFunc, EntrypointReturnT, TaskFunc } from \"../func/types.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\n\n/**\n * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.\n */\nexport function getRunnableForFunc<ArgsT extends unknown[], OutputT>(\n name: string,\n func: TaskFunc<ArgsT, OutputT>\n): Runnable<ArgsT, OutputT, LangGraphRunnableConfig> {\n const run = new RunnableCallable<ArgsT, OutputT>({\n func: (input: ArgsT) => func(...input),\n name,\n trace: false,\n recurse: false,\n } as RunnableCallableArgs);\n\n return new RunnableSequence<ArgsT, OutputT>({\n name,\n first: run,\n last: new ChannelWrite<OutputT>(\n [{ channel: RETURN, value: PASSTHROUGH }],\n [TAG_HIDDEN]\n ),\n });\n}\n\nexport function getRunnableForEntrypoint<InputT, OutputT>(\n name: string,\n func: EntrypointFunc<InputT, OutputT>\n): Runnable<InputT, EntrypointReturnT<OutputT>, LangGraphRunnableConfig> {\n const run = new RunnableCallable<InputT, EntrypointReturnT<OutputT>>({\n func: (input: InputT, config: LangGraphRunnableConfig) => {\n return func(input, config);\n },\n name,\n trace: false,\n recurse: false,\n });\n\n return run;\n}\n\nexport type CallWrapperOptions<ArgsT extends unknown[], OutputT> = {\n func: TaskFunc<ArgsT, OutputT>;\n name: string;\n retry?: RetryPolicy;\n cache?: CachePolicy;\n};\n\nexport function call<ArgsT extends unknown[], OutputT>(\n { func, name, cache, retry }: CallWrapperOptions<ArgsT, OutputT>,\n ...args: ArgsT\n): Promise<OutputT> {\n const config =\n AsyncLocalStorageProviderSingleton.getRunnableConfig() as RunnableConfig;\n if (typeof config.configurable?.[CONFIG_KEY_CALL] === \"function\") {\n return config.configurable[CONFIG_KEY_CALL](func, name, args, {\n retry,\n cache,\n callbacks: config.callbacks,\n });\n }\n throw new Error(\n \"Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.\"\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,mBACd,MACA,MACmD;CACnD,MAAM,MAAM,IAAI,iBAAiC;EAC/C,OAAO,UAAiB,KAAK,GAAG;EAChC;EACA,OAAO;EACP,SAAS;;AAGX,QAAO,IAAI,iBAAiC;EAC1C;EACA,OAAO;EACP,MAAM,IAAI,aACR,CAAC;GAAE,SAAS;GAAQ,OAAO;MAC3B,CAAC;;;AAKP,SAAgB,yBACd,MACA,MACuE;CACvE,MAAM,MAAM,IAAI,iBAAqD;EACnE,OAAO,OAAe,WAAoC;AACxD,UAAO,KAAK,OAAO;;EAErB;EACA,OAAO;EACP,SAAS;;AAGX,QAAO;;AAUT,SAAgB,KACd,EAAE,MAAM,MAAM,OAAO,SACrB,GAAG,MACe;CAClB,MAAM,SACJ,mCAAmC;AACrC,KAAI,OAAO,OAAO,eAAe,qBAAqB,WACpD,QAAO,OAAO,aAAa,iBAAiB,MAAM,MAAM,MAAM;EAC5D;EACA;EACA,WAAW,OAAO;;AAGtB,OAAM,IAAI,MACR"}
@@ -1,175 +0,0 @@
1
- const require_constants = require('../constants.cjs');
2
- const require_io = require('./io.cjs');
3
- const require_subgraph = require('./utils/subgraph.cjs');
4
-
5
- //#region src/pregel/debug.ts
6
- const COLORS_MAP = {
7
- blue: {
8
- start: "\x1B[34m",
9
- end: "\x1B[0m"
10
- },
11
- green: {
12
- start: "\x1B[32m",
13
- end: "\x1B[0m"
14
- },
15
- yellow: {
16
- start: "\x1B[33;1m",
17
- end: "\x1B[0m"
18
- }
19
- };
20
- /**
21
- * Wrap some text in a color for printing to the console.
22
- */
23
- const wrap = (color, text) => `${color.start}${text}${color.end}`;
24
- function* mapDebugTasks(tasks) {
25
- for (const { id, name, input, config, triggers, writes } of tasks) {
26
- if (config?.tags?.includes(require_constants.TAG_HIDDEN)) continue;
27
- const interrupts = writes.filter(([writeId, n]) => {
28
- return writeId === id && n === require_constants.INTERRUPT;
29
- }).map(([, v]) => {
30
- return v;
31
- });
32
- yield {
33
- id,
34
- name,
35
- input,
36
- triggers,
37
- interrupts
38
- };
39
- }
40
- }
41
- function isMultipleChannelWrite(value) {
42
- if (typeof value !== "object" || value === null) return false;
43
- return "$writes" in value && Array.isArray(value.$writes);
44
- }
45
- function mapTaskResultWrites(writes) {
46
- const result = {};
47
- for (const [channel, value] of writes) {
48
- const strChannel = String(channel);
49
- if (strChannel in result) {
50
- const channelWrites = isMultipleChannelWrite(result[strChannel]) ? result[strChannel].$writes : [result[strChannel]];
51
- channelWrites.push(value);
52
- result[strChannel] = { $writes: channelWrites };
53
- } else result[strChannel] = value;
54
- }
55
- return result;
56
- }
57
- function* mapDebugTaskResults(tasks, streamChannels) {
58
- for (const [{ id, name, config }, writes] of tasks) {
59
- if (config?.tags?.includes(require_constants.TAG_HIDDEN)) continue;
60
- yield {
61
- id,
62
- name,
63
- result: mapTaskResultWrites(writes.filter(([channel]) => {
64
- return Array.isArray(streamChannels) ? streamChannels.includes(channel) : channel === streamChannels;
65
- })),
66
- interrupts: writes.filter((w) => w[0] === require_constants.INTERRUPT).map((w) => w[1])
67
- };
68
- }
69
- }
70
- function* mapDebugCheckpoint(config, channels, streamChannels, metadata, tasks, pendingWrites, parentConfig, outputKeys) {
71
- function formatConfig(config$1) {
72
- const pyConfig = {};
73
- if (config$1.callbacks != null) pyConfig.callbacks = config$1.callbacks;
74
- if (config$1.configurable != null) pyConfig.configurable = config$1.configurable;
75
- if (config$1.maxConcurrency != null) pyConfig.max_concurrency = config$1.maxConcurrency;
76
- if (config$1.metadata != null) pyConfig.metadata = config$1.metadata;
77
- if (config$1.recursionLimit != null) pyConfig.recursion_limit = config$1.recursionLimit;
78
- if (config$1.runId != null) pyConfig.run_id = config$1.runId;
79
- if (config$1.runName != null) pyConfig.run_name = config$1.runName;
80
- if (config$1.tags != null) pyConfig.tags = config$1.tags;
81
- return pyConfig;
82
- }
83
- const parentNs = config.configurable?.checkpoint_ns;
84
- const taskStates = {};
85
- for (const task of tasks) {
86
- const candidates = task.subgraphs?.length ? task.subgraphs : [task.proc];
87
- if (!candidates.find(require_subgraph.findSubgraphPregel)) continue;
88
- let taskNs = `${task.name}:${task.id}`;
89
- if (parentNs) taskNs = `${parentNs}|${taskNs}`;
90
- taskStates[task.id] = { configurable: {
91
- thread_id: config.configurable?.thread_id,
92
- checkpoint_ns: taskNs
93
- } };
94
- }
95
- yield {
96
- config: formatConfig(config),
97
- values: require_io.readChannels(channels, streamChannels),
98
- metadata,
99
- next: tasks.map((task) => task.name),
100
- tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
101
- parentConfig: parentConfig ? formatConfig(parentConfig) : void 0
102
- };
103
- }
104
- function tasksWithWrites(tasks, pendingWrites, states, outputKeys) {
105
- return tasks.map((task) => {
106
- const error = pendingWrites.find(([id, n]) => id === task.id && n === require_constants.ERROR)?.[2];
107
- const interrupts = pendingWrites.filter(([id, n]) => id === task.id && n === require_constants.INTERRUPT).map(([, , v]) => v);
108
- const result = (() => {
109
- if (error || interrupts.length || !pendingWrites.length) return void 0;
110
- const idx = pendingWrites.findIndex(([tid, n]) => tid === task.id && n === require_constants.RETURN);
111
- if (idx >= 0) return pendingWrites[idx][2];
112
- if (typeof outputKeys === "string") return pendingWrites.find(([tid, n]) => tid === task.id && n === outputKeys)?.[2];
113
- if (Array.isArray(outputKeys)) {
114
- const results = pendingWrites.filter(([tid, n]) => tid === task.id && outputKeys.includes(n)).map(([, n, v]) => [n, v]);
115
- if (!results.length) return void 0;
116
- return mapTaskResultWrites(results);
117
- }
118
- return void 0;
119
- })();
120
- if (error) return {
121
- id: task.id,
122
- name: task.name,
123
- path: task.path,
124
- error,
125
- interrupts,
126
- result
127
- };
128
- const taskState = states?.[task.id];
129
- return {
130
- id: task.id,
131
- name: task.name,
132
- path: task.path,
133
- interrupts,
134
- ...taskState !== void 0 ? { state: taskState } : {},
135
- result
136
- };
137
- });
138
- }
139
- function printStepCheckpoint(step, channels, whitelist) {
140
- console.log([
141
- `${wrap(COLORS_MAP.blue, `[${step}:checkpoint]`)}`,
142
- `\x1b[1m State at the end of step ${step}:\x1b[0m\n`,
143
- JSON.stringify(require_io.readChannels(channels, whitelist), null, 2)
144
- ].join(""));
145
- }
146
- function printStepTasks(step, nextTasks) {
147
- const nTasks = nextTasks.length;
148
- console.log([
149
- `${wrap(COLORS_MAP.blue, `[${step}:tasks]`)}`,
150
- `\x1b[1m Starting step ${step} with ${nTasks} task${nTasks === 1 ? "" : "s"}:\x1b[0m\n`,
151
- nextTasks.map((task) => `- ${wrap(COLORS_MAP.green, String(task.name))} -> ${JSON.stringify(task.input, null, 2)}`).join("\n")
152
- ].join(""));
153
- }
154
- function printStepWrites(step, writes, whitelist) {
155
- const byChannel = {};
156
- for (const [channel, value] of writes) if (whitelist.includes(channel)) {
157
- if (!byChannel[channel]) byChannel[channel] = [];
158
- byChannel[channel].push(value);
159
- }
160
- console.log([
161
- `${wrap(COLORS_MAP.blue, `[${step}:writes]`)}`,
162
- `\x1b[1m Finished step ${step} with writes to ${Object.keys(byChannel).length} channel${Object.keys(byChannel).length !== 1 ? "s" : ""}:\x1b[0m\n`,
163
- Object.entries(byChannel).map(([name, vals]) => `- ${wrap(COLORS_MAP.yellow, name)} -> ${vals.map((v) => JSON.stringify(v)).join(", ")}`).join("\n")
164
- ].join(""));
165
- }
166
-
167
- //#endregion
168
- exports.mapDebugCheckpoint = mapDebugCheckpoint;
169
- exports.mapDebugTaskResults = mapDebugTaskResults;
170
- exports.mapDebugTasks = mapDebugTasks;
171
- exports.printStepCheckpoint = printStepCheckpoint;
172
- exports.printStepTasks = printStepTasks;
173
- exports.printStepWrites = printStepWrites;
174
- exports.tasksWithWrites = tasksWithWrites;
175
- //# sourceMappingURL=debug.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.cjs","names":["COLORS_MAP: ConsoleColorMap","TAG_HIDDEN","INTERRUPT","result: Record<string, unknown>","pyConfig: Partial<\n Record<CamelToSnake<keyof RunnableConfig>, unknown>\n >","config","taskStates: Record<string, RunnableConfig | StateSnapshot>","findSubgraphPregel","readChannels","ERROR","RETURN","byChannel: Record<string, any[]>"],"sources":["../../src/pregel/debug.ts"],"sourcesContent":["import { RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n CheckpointMetadata,\n CheckpointPendingWrite,\n PendingWrite,\n} from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport {\n ERROR,\n Interrupt,\n INTERRUPT,\n RETURN,\n TAG_HIDDEN,\n} from \"../constants.js\";\nimport { EmptyChannelError } from \"../errors.js\";\nimport {\n PregelExecutableTask,\n PregelTaskDescription,\n StateSnapshot,\n} from \"./types.js\";\nimport { readChannels } from \"./io.js\";\nimport { findSubgraphPregel } from \"./utils/subgraph.js\";\n\ntype ConsoleColors = {\n start: string;\n end: string;\n};\n\ntype ConsoleColorMap = {\n [key: string]: ConsoleColors;\n};\n\nconst COLORS_MAP: ConsoleColorMap = {\n blue: {\n start: \"\\x1b[34m\",\n end: \"\\x1b[0m\",\n },\n green: {\n start: \"\\x1b[32m\",\n end: \"\\x1b[0m\",\n },\n yellow: {\n start: \"\\x1b[33;1m\",\n end: \"\\x1b[0m\",\n },\n};\n\n/**\n * Wrap some text in a color for printing to the console.\n */\nexport const wrap = (color: ConsoleColors, text: string): string =>\n `${color.start}${text}${color.end}`;\n\nexport function printCheckpoint<Value>(\n step: number,\n channels: Record<string, BaseChannel<Value>>\n) {\n console.log(\n [\n `${wrap(COLORS_MAP.blue, \"[langgraph/checkpoint]\")}`,\n `Finishing step ${step}. Channel values:\\n`,\n `\\n${JSON.stringify(\n Object.fromEntries(_readChannels<Value>(channels)),\n null,\n 2\n )}`,\n ].join(\"\")\n );\n}\n\nexport function* _readChannels<Value>(\n channels: Record<string, BaseChannel<Value>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): IterableIterator<[string, any]> {\n for (const [name, channel] of Object.entries(channels)) {\n try {\n yield [name, channel.get()];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.name === EmptyChannelError.unminifiable_name) {\n // Skip the channel if it's empty\n continue;\n } else {\n throw error; // Re-throw the error if it's not an EmptyChannelError\n }\n }\n }\n}\n\nexport function* mapDebugTasks<N extends PropertyKey, C extends PropertyKey>(\n tasks: readonly PregelExecutableTask<N, C>[]\n) {\n for (const { id, name, input, config, triggers, writes } of tasks) {\n if (config?.tags?.includes(TAG_HIDDEN)) continue;\n\n const interrupts = writes\n .filter(([writeId, n]) => {\n return writeId === id && n === INTERRUPT;\n })\n .map(([, v]) => {\n return v;\n });\n yield { id, name, input, triggers, interrupts };\n }\n}\n\nfunction isMultipleChannelWrite(\n value: unknown\n): value is { $writes: unknown[] } {\n if (typeof value !== \"object\" || value === null) return false;\n return \"$writes\" in value && Array.isArray(value.$writes);\n}\n\nfunction mapTaskResultWrites(writes: PendingWrite<unknown>[]) {\n const result: Record<string, unknown> = {};\n\n for (const [channel, value] of writes) {\n const strChannel = String(channel);\n\n if (strChannel in result) {\n const channelWrites = isMultipleChannelWrite(result[strChannel])\n ? result[strChannel].$writes\n : [result[strChannel]];\n\n channelWrites.push(value);\n result[strChannel] = { $writes: channelWrites };\n } else {\n result[strChannel] = value;\n }\n }\n return result;\n}\n\nexport function* mapDebugTaskResults<\n N extends PropertyKey,\n C extends PropertyKey\n>(\n tasks: readonly [PregelExecutableTask<N, C>, PendingWrite<C>[]][],\n streamChannels: PropertyKey | Array<PropertyKey>\n) {\n for (const [{ id, name, config }, writes] of tasks) {\n if (config?.tags?.includes(TAG_HIDDEN)) continue;\n yield {\n id,\n name,\n result: mapTaskResultWrites(\n writes.filter(([channel]) => {\n return Array.isArray(streamChannels)\n ? streamChannels.includes(channel)\n : channel === streamChannels;\n })\n ),\n interrupts: writes.filter((w) => w[0] === INTERRUPT).map((w) => w[1]),\n };\n }\n}\n\ntype ChannelKey = string | number | symbol;\n\nexport function* mapDebugCheckpoint<\n N extends PropertyKey,\n C extends PropertyKey\n>(\n config: RunnableConfig,\n channels: Record<string, BaseChannel>,\n streamChannels: string | string[],\n metadata: CheckpointMetadata,\n tasks: readonly PregelExecutableTask<N, C>[],\n pendingWrites: CheckpointPendingWrite[],\n parentConfig: RunnableConfig | undefined,\n outputKeys: ChannelKey | ChannelKey[]\n) {\n function formatConfig(config: RunnableConfig) {\n // https://stackoverflow.com/a/78298178\n type CamelToSnake<\n T extends string,\n A extends string = \"\"\n > = T extends `${infer F}${infer R}`\n ? CamelToSnake<\n R,\n `${A}${F extends Lowercase<F> ? F : `_${Lowercase<F>}`}`\n >\n : A;\n\n // make sure the config is consistent with Python\n const pyConfig: Partial<\n Record<CamelToSnake<keyof RunnableConfig>, unknown>\n > = {};\n\n if (config.callbacks != null) pyConfig.callbacks = config.callbacks;\n if (config.configurable != null)\n pyConfig.configurable = config.configurable;\n if (config.maxConcurrency != null)\n pyConfig.max_concurrency = config.maxConcurrency;\n\n if (config.metadata != null) pyConfig.metadata = config.metadata;\n if (config.recursionLimit != null)\n pyConfig.recursion_limit = config.recursionLimit;\n if (config.runId != null) pyConfig.run_id = config.runId;\n if (config.runName != null) pyConfig.run_name = config.runName;\n if (config.tags != null) pyConfig.tags = config.tags;\n\n return pyConfig;\n }\n\n const parentNs = config.configurable?.checkpoint_ns;\n const taskStates: Record<string, RunnableConfig | StateSnapshot> = {};\n\n for (const task of tasks) {\n const candidates = task.subgraphs?.length ? task.subgraphs : [task.proc];\n if (!candidates.find(findSubgraphPregel)) continue;\n\n let taskNs = `${task.name as string}:${task.id}`;\n if (parentNs) taskNs = `${parentNs}|${taskNs}`;\n\n taskStates[task.id] = {\n configurable: {\n thread_id: config.configurable?.thread_id,\n checkpoint_ns: taskNs,\n },\n };\n }\n\n yield {\n config: formatConfig(config),\n values: readChannels(channels, streamChannels),\n metadata,\n next: tasks.map((task) => task.name),\n tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),\n parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,\n };\n}\n\nexport function tasksWithWrites<N extends PropertyKey, C extends PropertyKey>(\n tasks: PregelTaskDescription[] | readonly PregelExecutableTask<N, C>[],\n pendingWrites: CheckpointPendingWrite[],\n states: Record<string, RunnableConfig | StateSnapshot> | undefined,\n outputKeys: ChannelKey[] | ChannelKey\n): PregelTaskDescription[] {\n return tasks.map((task): PregelTaskDescription => {\n const error = pendingWrites.find(\n ([id, n]) => id === task.id && n === ERROR\n )?.[2];\n\n const interrupts = pendingWrites\n .filter(([id, n]) => id === task.id && n === INTERRUPT)\n .map(([, , v]) => v) as Interrupt[];\n\n const result = (() => {\n if (error || interrupts.length || !pendingWrites.length) return undefined;\n\n const idx = pendingWrites.findIndex(\n ([tid, n]) => tid === task.id && n === RETURN\n );\n\n if (idx >= 0) return pendingWrites[idx][2];\n\n if (typeof outputKeys === \"string\") {\n return pendingWrites.find(\n ([tid, n]) => tid === task.id && n === outputKeys\n )?.[2];\n }\n\n if (Array.isArray(outputKeys)) {\n const results = pendingWrites\n .filter(([tid, n]) => tid === task.id && outputKeys.includes(n))\n .map(([, n, v]) => [n, v] as PendingWrite<C>);\n\n if (!results.length) return undefined;\n return mapTaskResultWrites(results);\n }\n\n return undefined;\n })();\n\n if (error) {\n return {\n id: task.id,\n name: task.name as string,\n path: task.path,\n error,\n interrupts,\n result,\n };\n }\n\n const taskState = states?.[task.id];\n return {\n id: task.id,\n name: task.name as string,\n path: task.path,\n interrupts,\n ...(taskState !== undefined ? { state: taskState } : {}),\n result,\n };\n });\n}\n\nexport function printStepCheckpoint(\n step: number,\n channels: Record<string, BaseChannel<unknown>>,\n whitelist: string[]\n): void {\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:checkpoint]`)}`,\n `\\x1b[1m State at the end of step ${step}:\\x1b[0m\\n`,\n JSON.stringify(readChannels(channels, whitelist), null, 2),\n ].join(\"\")\n );\n}\n\nexport function printStepTasks<N extends PropertyKey, C extends PropertyKey>(\n step: number,\n nextTasks: readonly PregelExecutableTask<N, C>[]\n): void {\n const nTasks = nextTasks.length;\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:tasks]`)}`,\n `\\x1b[1m Starting step ${step} with ${nTasks} task${\n nTasks === 1 ? \"\" : \"s\"\n }:\\x1b[0m\\n`,\n nextTasks\n .map(\n (task) =>\n `- ${wrap(COLORS_MAP.green, String(task.name))} -> ${JSON.stringify(\n task.input,\n null,\n 2\n )}`\n )\n .join(\"\\n\"),\n ].join(\"\")\n );\n}\n\nexport function printStepWrites(\n step: number,\n writes: PendingWrite[],\n whitelist: string[]\n): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const byChannel: Record<string, any[]> = {};\n\n for (const [channel, value] of writes) {\n if (whitelist.includes(channel)) {\n if (!byChannel[channel]) {\n byChannel[channel] = [];\n }\n byChannel[channel].push(value);\n }\n }\n\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:writes]`)}`,\n `\\x1b[1m Finished step ${step} with writes to ${\n Object.keys(byChannel).length\n } channel${Object.keys(byChannel).length !== 1 ? \"s\" : \"\"}:\\x1b[0m\\n`,\n Object.entries(byChannel)\n .map(\n ([name, vals]) =>\n `- ${wrap(COLORS_MAP.yellow, name)} -> ${vals\n .map((v) => JSON.stringify(v))\n .join(\", \")}`\n )\n .join(\"\\n\"),\n ].join(\"\")\n );\n}\n"],"mappings":"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"}
@@ -1,169 +0,0 @@
1
- import { ERROR, INTERRUPT, RETURN, TAG_HIDDEN } from "../constants.js";
2
- import { readChannels } from "./io.js";
3
- import { findSubgraphPregel } from "./utils/subgraph.js";
4
-
5
- //#region src/pregel/debug.ts
6
- const COLORS_MAP = {
7
- blue: {
8
- start: "\x1B[34m",
9
- end: "\x1B[0m"
10
- },
11
- green: {
12
- start: "\x1B[32m",
13
- end: "\x1B[0m"
14
- },
15
- yellow: {
16
- start: "\x1B[33;1m",
17
- end: "\x1B[0m"
18
- }
19
- };
20
- /**
21
- * Wrap some text in a color for printing to the console.
22
- */
23
- const wrap = (color, text) => `${color.start}${text}${color.end}`;
24
- function* mapDebugTasks(tasks) {
25
- for (const { id, name, input, config, triggers, writes } of tasks) {
26
- if (config?.tags?.includes(TAG_HIDDEN)) continue;
27
- const interrupts = writes.filter(([writeId, n]) => {
28
- return writeId === id && n === INTERRUPT;
29
- }).map(([, v]) => {
30
- return v;
31
- });
32
- yield {
33
- id,
34
- name,
35
- input,
36
- triggers,
37
- interrupts
38
- };
39
- }
40
- }
41
- function isMultipleChannelWrite(value) {
42
- if (typeof value !== "object" || value === null) return false;
43
- return "$writes" in value && Array.isArray(value.$writes);
44
- }
45
- function mapTaskResultWrites(writes) {
46
- const result = {};
47
- for (const [channel, value] of writes) {
48
- const strChannel = String(channel);
49
- if (strChannel in result) {
50
- const channelWrites = isMultipleChannelWrite(result[strChannel]) ? result[strChannel].$writes : [result[strChannel]];
51
- channelWrites.push(value);
52
- result[strChannel] = { $writes: channelWrites };
53
- } else result[strChannel] = value;
54
- }
55
- return result;
56
- }
57
- function* mapDebugTaskResults(tasks, streamChannels) {
58
- for (const [{ id, name, config }, writes] of tasks) {
59
- if (config?.tags?.includes(TAG_HIDDEN)) continue;
60
- yield {
61
- id,
62
- name,
63
- result: mapTaskResultWrites(writes.filter(([channel]) => {
64
- return Array.isArray(streamChannels) ? streamChannels.includes(channel) : channel === streamChannels;
65
- })),
66
- interrupts: writes.filter((w) => w[0] === INTERRUPT).map((w) => w[1])
67
- };
68
- }
69
- }
70
- function* mapDebugCheckpoint(config, channels, streamChannels, metadata, tasks, pendingWrites, parentConfig, outputKeys) {
71
- function formatConfig(config$1) {
72
- const pyConfig = {};
73
- if (config$1.callbacks != null) pyConfig.callbacks = config$1.callbacks;
74
- if (config$1.configurable != null) pyConfig.configurable = config$1.configurable;
75
- if (config$1.maxConcurrency != null) pyConfig.max_concurrency = config$1.maxConcurrency;
76
- if (config$1.metadata != null) pyConfig.metadata = config$1.metadata;
77
- if (config$1.recursionLimit != null) pyConfig.recursion_limit = config$1.recursionLimit;
78
- if (config$1.runId != null) pyConfig.run_id = config$1.runId;
79
- if (config$1.runName != null) pyConfig.run_name = config$1.runName;
80
- if (config$1.tags != null) pyConfig.tags = config$1.tags;
81
- return pyConfig;
82
- }
83
- const parentNs = config.configurable?.checkpoint_ns;
84
- const taskStates = {};
85
- for (const task of tasks) {
86
- const candidates = task.subgraphs?.length ? task.subgraphs : [task.proc];
87
- if (!candidates.find(findSubgraphPregel)) continue;
88
- let taskNs = `${task.name}:${task.id}`;
89
- if (parentNs) taskNs = `${parentNs}|${taskNs}`;
90
- taskStates[task.id] = { configurable: {
91
- thread_id: config.configurable?.thread_id,
92
- checkpoint_ns: taskNs
93
- } };
94
- }
95
- yield {
96
- config: formatConfig(config),
97
- values: readChannels(channels, streamChannels),
98
- metadata,
99
- next: tasks.map((task) => task.name),
100
- tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
101
- parentConfig: parentConfig ? formatConfig(parentConfig) : void 0
102
- };
103
- }
104
- function tasksWithWrites(tasks, pendingWrites, states, outputKeys) {
105
- return tasks.map((task) => {
106
- const error = pendingWrites.find(([id, n]) => id === task.id && n === ERROR)?.[2];
107
- const interrupts = pendingWrites.filter(([id, n]) => id === task.id && n === INTERRUPT).map(([, , v]) => v);
108
- const result = (() => {
109
- if (error || interrupts.length || !pendingWrites.length) return void 0;
110
- const idx = pendingWrites.findIndex(([tid, n]) => tid === task.id && n === RETURN);
111
- if (idx >= 0) return pendingWrites[idx][2];
112
- if (typeof outputKeys === "string") return pendingWrites.find(([tid, n]) => tid === task.id && n === outputKeys)?.[2];
113
- if (Array.isArray(outputKeys)) {
114
- const results = pendingWrites.filter(([tid, n]) => tid === task.id && outputKeys.includes(n)).map(([, n, v]) => [n, v]);
115
- if (!results.length) return void 0;
116
- return mapTaskResultWrites(results);
117
- }
118
- return void 0;
119
- })();
120
- if (error) return {
121
- id: task.id,
122
- name: task.name,
123
- path: task.path,
124
- error,
125
- interrupts,
126
- result
127
- };
128
- const taskState = states?.[task.id];
129
- return {
130
- id: task.id,
131
- name: task.name,
132
- path: task.path,
133
- interrupts,
134
- ...taskState !== void 0 ? { state: taskState } : {},
135
- result
136
- };
137
- });
138
- }
139
- function printStepCheckpoint(step, channels, whitelist) {
140
- console.log([
141
- `${wrap(COLORS_MAP.blue, `[${step}:checkpoint]`)}`,
142
- `\x1b[1m State at the end of step ${step}:\x1b[0m\n`,
143
- JSON.stringify(readChannels(channels, whitelist), null, 2)
144
- ].join(""));
145
- }
146
- function printStepTasks(step, nextTasks) {
147
- const nTasks = nextTasks.length;
148
- console.log([
149
- `${wrap(COLORS_MAP.blue, `[${step}:tasks]`)}`,
150
- `\x1b[1m Starting step ${step} with ${nTasks} task${nTasks === 1 ? "" : "s"}:\x1b[0m\n`,
151
- nextTasks.map((task) => `- ${wrap(COLORS_MAP.green, String(task.name))} -> ${JSON.stringify(task.input, null, 2)}`).join("\n")
152
- ].join(""));
153
- }
154
- function printStepWrites(step, writes, whitelist) {
155
- const byChannel = {};
156
- for (const [channel, value] of writes) if (whitelist.includes(channel)) {
157
- if (!byChannel[channel]) byChannel[channel] = [];
158
- byChannel[channel].push(value);
159
- }
160
- console.log([
161
- `${wrap(COLORS_MAP.blue, `[${step}:writes]`)}`,
162
- `\x1b[1m Finished step ${step} with writes to ${Object.keys(byChannel).length} channel${Object.keys(byChannel).length !== 1 ? "s" : ""}:\x1b[0m\n`,
163
- Object.entries(byChannel).map(([name, vals]) => `- ${wrap(COLORS_MAP.yellow, name)} -> ${vals.map((v) => JSON.stringify(v)).join(", ")}`).join("\n")
164
- ].join(""));
165
- }
166
-
167
- //#endregion
168
- export { mapDebugCheckpoint, mapDebugTaskResults, mapDebugTasks, printStepCheckpoint, printStepTasks, printStepWrites, tasksWithWrites };
169
- //# sourceMappingURL=debug.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug.js","names":["COLORS_MAP: ConsoleColorMap","result: Record<string, unknown>","pyConfig: Partial<\n Record<CamelToSnake<keyof RunnableConfig>, unknown>\n >","config","taskStates: Record<string, RunnableConfig | StateSnapshot>","byChannel: Record<string, any[]>"],"sources":["../../src/pregel/debug.ts"],"sourcesContent":["import { RunnableConfig } from \"@langchain/core/runnables\";\nimport {\n CheckpointMetadata,\n CheckpointPendingWrite,\n PendingWrite,\n} from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport {\n ERROR,\n Interrupt,\n INTERRUPT,\n RETURN,\n TAG_HIDDEN,\n} from \"../constants.js\";\nimport { EmptyChannelError } from \"../errors.js\";\nimport {\n PregelExecutableTask,\n PregelTaskDescription,\n StateSnapshot,\n} from \"./types.js\";\nimport { readChannels } from \"./io.js\";\nimport { findSubgraphPregel } from \"./utils/subgraph.js\";\n\ntype ConsoleColors = {\n start: string;\n end: string;\n};\n\ntype ConsoleColorMap = {\n [key: string]: ConsoleColors;\n};\n\nconst COLORS_MAP: ConsoleColorMap = {\n blue: {\n start: \"\\x1b[34m\",\n end: \"\\x1b[0m\",\n },\n green: {\n start: \"\\x1b[32m\",\n end: \"\\x1b[0m\",\n },\n yellow: {\n start: \"\\x1b[33;1m\",\n end: \"\\x1b[0m\",\n },\n};\n\n/**\n * Wrap some text in a color for printing to the console.\n */\nexport const wrap = (color: ConsoleColors, text: string): string =>\n `${color.start}${text}${color.end}`;\n\nexport function printCheckpoint<Value>(\n step: number,\n channels: Record<string, BaseChannel<Value>>\n) {\n console.log(\n [\n `${wrap(COLORS_MAP.blue, \"[langgraph/checkpoint]\")}`,\n `Finishing step ${step}. Channel values:\\n`,\n `\\n${JSON.stringify(\n Object.fromEntries(_readChannels<Value>(channels)),\n null,\n 2\n )}`,\n ].join(\"\")\n );\n}\n\nexport function* _readChannels<Value>(\n channels: Record<string, BaseChannel<Value>>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): IterableIterator<[string, any]> {\n for (const [name, channel] of Object.entries(channels)) {\n try {\n yield [name, channel.get()];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n if (error.name === EmptyChannelError.unminifiable_name) {\n // Skip the channel if it's empty\n continue;\n } else {\n throw error; // Re-throw the error if it's not an EmptyChannelError\n }\n }\n }\n}\n\nexport function* mapDebugTasks<N extends PropertyKey, C extends PropertyKey>(\n tasks: readonly PregelExecutableTask<N, C>[]\n) {\n for (const { id, name, input, config, triggers, writes } of tasks) {\n if (config?.tags?.includes(TAG_HIDDEN)) continue;\n\n const interrupts = writes\n .filter(([writeId, n]) => {\n return writeId === id && n === INTERRUPT;\n })\n .map(([, v]) => {\n return v;\n });\n yield { id, name, input, triggers, interrupts };\n }\n}\n\nfunction isMultipleChannelWrite(\n value: unknown\n): value is { $writes: unknown[] } {\n if (typeof value !== \"object\" || value === null) return false;\n return \"$writes\" in value && Array.isArray(value.$writes);\n}\n\nfunction mapTaskResultWrites(writes: PendingWrite<unknown>[]) {\n const result: Record<string, unknown> = {};\n\n for (const [channel, value] of writes) {\n const strChannel = String(channel);\n\n if (strChannel in result) {\n const channelWrites = isMultipleChannelWrite(result[strChannel])\n ? result[strChannel].$writes\n : [result[strChannel]];\n\n channelWrites.push(value);\n result[strChannel] = { $writes: channelWrites };\n } else {\n result[strChannel] = value;\n }\n }\n return result;\n}\n\nexport function* mapDebugTaskResults<\n N extends PropertyKey,\n C extends PropertyKey\n>(\n tasks: readonly [PregelExecutableTask<N, C>, PendingWrite<C>[]][],\n streamChannels: PropertyKey | Array<PropertyKey>\n) {\n for (const [{ id, name, config }, writes] of tasks) {\n if (config?.tags?.includes(TAG_HIDDEN)) continue;\n yield {\n id,\n name,\n result: mapTaskResultWrites(\n writes.filter(([channel]) => {\n return Array.isArray(streamChannels)\n ? streamChannels.includes(channel)\n : channel === streamChannels;\n })\n ),\n interrupts: writes.filter((w) => w[0] === INTERRUPT).map((w) => w[1]),\n };\n }\n}\n\ntype ChannelKey = string | number | symbol;\n\nexport function* mapDebugCheckpoint<\n N extends PropertyKey,\n C extends PropertyKey\n>(\n config: RunnableConfig,\n channels: Record<string, BaseChannel>,\n streamChannels: string | string[],\n metadata: CheckpointMetadata,\n tasks: readonly PregelExecutableTask<N, C>[],\n pendingWrites: CheckpointPendingWrite[],\n parentConfig: RunnableConfig | undefined,\n outputKeys: ChannelKey | ChannelKey[]\n) {\n function formatConfig(config: RunnableConfig) {\n // https://stackoverflow.com/a/78298178\n type CamelToSnake<\n T extends string,\n A extends string = \"\"\n > = T extends `${infer F}${infer R}`\n ? CamelToSnake<\n R,\n `${A}${F extends Lowercase<F> ? F : `_${Lowercase<F>}`}`\n >\n : A;\n\n // make sure the config is consistent with Python\n const pyConfig: Partial<\n Record<CamelToSnake<keyof RunnableConfig>, unknown>\n > = {};\n\n if (config.callbacks != null) pyConfig.callbacks = config.callbacks;\n if (config.configurable != null)\n pyConfig.configurable = config.configurable;\n if (config.maxConcurrency != null)\n pyConfig.max_concurrency = config.maxConcurrency;\n\n if (config.metadata != null) pyConfig.metadata = config.metadata;\n if (config.recursionLimit != null)\n pyConfig.recursion_limit = config.recursionLimit;\n if (config.runId != null) pyConfig.run_id = config.runId;\n if (config.runName != null) pyConfig.run_name = config.runName;\n if (config.tags != null) pyConfig.tags = config.tags;\n\n return pyConfig;\n }\n\n const parentNs = config.configurable?.checkpoint_ns;\n const taskStates: Record<string, RunnableConfig | StateSnapshot> = {};\n\n for (const task of tasks) {\n const candidates = task.subgraphs?.length ? task.subgraphs : [task.proc];\n if (!candidates.find(findSubgraphPregel)) continue;\n\n let taskNs = `${task.name as string}:${task.id}`;\n if (parentNs) taskNs = `${parentNs}|${taskNs}`;\n\n taskStates[task.id] = {\n configurable: {\n thread_id: config.configurable?.thread_id,\n checkpoint_ns: taskNs,\n },\n };\n }\n\n yield {\n config: formatConfig(config),\n values: readChannels(channels, streamChannels),\n metadata,\n next: tasks.map((task) => task.name),\n tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),\n parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,\n };\n}\n\nexport function tasksWithWrites<N extends PropertyKey, C extends PropertyKey>(\n tasks: PregelTaskDescription[] | readonly PregelExecutableTask<N, C>[],\n pendingWrites: CheckpointPendingWrite[],\n states: Record<string, RunnableConfig | StateSnapshot> | undefined,\n outputKeys: ChannelKey[] | ChannelKey\n): PregelTaskDescription[] {\n return tasks.map((task): PregelTaskDescription => {\n const error = pendingWrites.find(\n ([id, n]) => id === task.id && n === ERROR\n )?.[2];\n\n const interrupts = pendingWrites\n .filter(([id, n]) => id === task.id && n === INTERRUPT)\n .map(([, , v]) => v) as Interrupt[];\n\n const result = (() => {\n if (error || interrupts.length || !pendingWrites.length) return undefined;\n\n const idx = pendingWrites.findIndex(\n ([tid, n]) => tid === task.id && n === RETURN\n );\n\n if (idx >= 0) return pendingWrites[idx][2];\n\n if (typeof outputKeys === \"string\") {\n return pendingWrites.find(\n ([tid, n]) => tid === task.id && n === outputKeys\n )?.[2];\n }\n\n if (Array.isArray(outputKeys)) {\n const results = pendingWrites\n .filter(([tid, n]) => tid === task.id && outputKeys.includes(n))\n .map(([, n, v]) => [n, v] as PendingWrite<C>);\n\n if (!results.length) return undefined;\n return mapTaskResultWrites(results);\n }\n\n return undefined;\n })();\n\n if (error) {\n return {\n id: task.id,\n name: task.name as string,\n path: task.path,\n error,\n interrupts,\n result,\n };\n }\n\n const taskState = states?.[task.id];\n return {\n id: task.id,\n name: task.name as string,\n path: task.path,\n interrupts,\n ...(taskState !== undefined ? { state: taskState } : {}),\n result,\n };\n });\n}\n\nexport function printStepCheckpoint(\n step: number,\n channels: Record<string, BaseChannel<unknown>>,\n whitelist: string[]\n): void {\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:checkpoint]`)}`,\n `\\x1b[1m State at the end of step ${step}:\\x1b[0m\\n`,\n JSON.stringify(readChannels(channels, whitelist), null, 2),\n ].join(\"\")\n );\n}\n\nexport function printStepTasks<N extends PropertyKey, C extends PropertyKey>(\n step: number,\n nextTasks: readonly PregelExecutableTask<N, C>[]\n): void {\n const nTasks = nextTasks.length;\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:tasks]`)}`,\n `\\x1b[1m Starting step ${step} with ${nTasks} task${\n nTasks === 1 ? \"\" : \"s\"\n }:\\x1b[0m\\n`,\n nextTasks\n .map(\n (task) =>\n `- ${wrap(COLORS_MAP.green, String(task.name))} -> ${JSON.stringify(\n task.input,\n null,\n 2\n )}`\n )\n .join(\"\\n\"),\n ].join(\"\")\n );\n}\n\nexport function printStepWrites(\n step: number,\n writes: PendingWrite[],\n whitelist: string[]\n): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const byChannel: Record<string, any[]> = {};\n\n for (const [channel, value] of writes) {\n if (whitelist.includes(channel)) {\n if (!byChannel[channel]) {\n byChannel[channel] = [];\n }\n byChannel[channel].push(value);\n }\n }\n\n console.log(\n [\n `${wrap(COLORS_MAP.blue, `[${step}:writes]`)}`,\n `\\x1b[1m Finished step ${step} with writes to ${\n Object.keys(byChannel).length\n } channel${Object.keys(byChannel).length !== 1 ? \"s\" : \"\"}:\\x1b[0m\\n`,\n Object.entries(byChannel)\n .map(\n ([name, vals]) =>\n `- ${wrap(COLORS_MAP.yellow, name)} -> ${vals\n .map((v) => JSON.stringify(v))\n .join(\", \")}`\n )\n .join(\"\\n\"),\n ].join(\"\")\n );\n}\n"],"mappings":"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"}