@langchain/langgraph 0.2.73 → 0.3.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 (187) hide show
  1. package/dist/channels/any_value.cjs +3 -0
  2. package/dist/channels/any_value.d.ts +1 -0
  3. package/dist/channels/any_value.js +3 -0
  4. package/dist/channels/any_value.js.map +1 -1
  5. package/dist/channels/base.cjs +35 -6
  6. package/dist/channels/base.d.ts +17 -2
  7. package/dist/channels/base.js +31 -2
  8. package/dist/channels/base.js.map +1 -1
  9. package/dist/channels/binop.cjs +3 -0
  10. package/dist/channels/binop.d.ts +1 -0
  11. package/dist/channels/binop.js +3 -0
  12. package/dist/channels/binop.js.map +1 -1
  13. package/dist/channels/dynamic_barrier_value.cjs +119 -9
  14. package/dist/channels/dynamic_barrier_value.d.ts +29 -0
  15. package/dist/channels/dynamic_barrier_value.js +117 -8
  16. package/dist/channels/dynamic_barrier_value.js.map +1 -1
  17. package/dist/channels/ephemeral_value.cjs +3 -0
  18. package/dist/channels/ephemeral_value.d.ts +1 -0
  19. package/dist/channels/ephemeral_value.js +3 -0
  20. package/dist/channels/ephemeral_value.js.map +1 -1
  21. package/dist/channels/last_value.cjs +82 -4
  22. package/dist/channels/last_value.d.ts +21 -0
  23. package/dist/channels/last_value.js +80 -3
  24. package/dist/channels/last_value.js.map +1 -1
  25. package/dist/channels/named_barrier_value.cjs +94 -1
  26. package/dist/channels/named_barrier_value.d.ts +23 -0
  27. package/dist/channels/named_barrier_value.js +92 -0
  28. package/dist/channels/named_barrier_value.js.map +1 -1
  29. package/dist/channels/topic.cjs +3 -0
  30. package/dist/channels/topic.d.ts +1 -0
  31. package/dist/channels/topic.js +3 -0
  32. package/dist/channels/topic.js.map +1 -1
  33. package/dist/constants.cjs +33 -12
  34. package/dist/constants.d.ts +48 -27
  35. package/dist/constants.js +27 -7
  36. package/dist/constants.js.map +1 -1
  37. package/dist/errors.cjs +4 -4
  38. package/dist/errors.js.map +1 -1
  39. package/dist/func/index.cjs +15 -7
  40. package/dist/func/index.d.ts +12 -3
  41. package/dist/func/index.js +12 -4
  42. package/dist/func/index.js.map +1 -1
  43. package/dist/func/types.cjs +1 -2
  44. package/dist/func/types.d.ts +1 -1
  45. package/dist/graph/annotation.cjs +2 -2
  46. package/dist/graph/annotation.js.map +1 -1
  47. package/dist/graph/graph.cjs +46 -40
  48. package/dist/graph/graph.d.ts +14 -4
  49. package/dist/graph/graph.js +46 -40
  50. package/dist/graph/graph.js.map +1 -1
  51. package/dist/graph/index.cjs +3 -1
  52. package/dist/graph/index.d.ts +2 -2
  53. package/dist/graph/index.js +2 -2
  54. package/dist/graph/index.js.map +1 -1
  55. package/dist/graph/message.cjs +43 -5
  56. package/dist/graph/message.d.ts +5 -0
  57. package/dist/graph/message.js +40 -3
  58. package/dist/graph/message.js.map +1 -1
  59. package/dist/graph/message.test.cjs +196 -0
  60. package/dist/graph/message.test.d.ts +1 -0
  61. package/dist/graph/message.test.js +194 -0
  62. package/dist/graph/message.test.js.map +1 -0
  63. package/dist/graph/messages_annotation.cjs +54 -1
  64. package/dist/graph/messages_annotation.d.ts +47 -0
  65. package/dist/graph/messages_annotation.js +53 -0
  66. package/dist/graph/messages_annotation.js.map +1 -1
  67. package/dist/graph/state.cjs +162 -104
  68. package/dist/graph/state.d.ts +36 -11
  69. package/dist/graph/state.js +163 -106
  70. package/dist/graph/state.js.map +1 -1
  71. package/dist/graph/zod/plugin.js.map +1 -1
  72. package/dist/graph/zod/schema.cjs +17 -67
  73. package/dist/graph/zod/schema.js +12 -61
  74. package/dist/graph/zod/schema.js.map +1 -1
  75. package/dist/graph/zod/state.cjs +69 -7
  76. package/dist/graph/zod/state.d.ts +10 -1
  77. package/dist/graph/zod/state.js +61 -0
  78. package/dist/graph/zod/state.js.map +1 -1
  79. package/dist/interrupt.cjs +1 -2
  80. package/dist/interrupt.js.map +1 -1
  81. package/dist/managed/base.cjs +3 -3
  82. package/dist/managed/base.js.map +1 -1
  83. package/dist/managed/shared_value.js.map +1 -1
  84. package/dist/prebuilt/agentName.cjs +3 -4
  85. package/dist/prebuilt/agentName.js.map +1 -1
  86. package/dist/prebuilt/agent_executor.cjs +1 -2
  87. package/dist/prebuilt/agent_executor.d.ts +1 -1
  88. package/dist/prebuilt/agent_executor.js.map +1 -1
  89. package/dist/prebuilt/chat_agent_executor.cjs +1 -2
  90. package/dist/prebuilt/chat_agent_executor.js.map +1 -1
  91. package/dist/prebuilt/react_agent_executor.cjs +103 -49
  92. package/dist/prebuilt/react_agent_executor.d.ts +22 -6
  93. package/dist/prebuilt/react_agent_executor.js +99 -45
  94. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  95. package/dist/prebuilt/tool_executor.js.map +1 -1
  96. package/dist/prebuilt/tool_node.cjs +2 -2
  97. package/dist/prebuilt/tool_node.js.map +1 -1
  98. package/dist/pregel/algo.cjs +68 -27
  99. package/dist/pregel/algo.d.ts +1 -1
  100. package/dist/pregel/algo.js +62 -21
  101. package/dist/pregel/algo.js.map +1 -1
  102. package/dist/pregel/call.cjs +5 -5
  103. package/dist/pregel/call.d.ts +3 -2
  104. package/dist/pregel/call.js +2 -1
  105. package/dist/pregel/call.js.map +1 -1
  106. package/dist/pregel/debug.cjs +10 -10
  107. package/dist/pregel/debug.d.ts +3 -3
  108. package/dist/pregel/debug.js.map +1 -1
  109. package/dist/pregel/debug.test.cjs +37 -31
  110. package/dist/pregel/debug.test.js +18 -12
  111. package/dist/pregel/debug.test.js.map +1 -1
  112. package/dist/pregel/index.cjs +99 -29
  113. package/dist/pregel/index.d.ts +19 -6
  114. package/dist/pregel/index.js +100 -30
  115. package/dist/pregel/index.js.map +1 -1
  116. package/dist/pregel/io.cjs +8 -9
  117. package/dist/pregel/io.js +2 -2
  118. package/dist/pregel/io.js.map +1 -1
  119. package/dist/pregel/io.mapCommand.test.cjs +29 -29
  120. package/dist/pregel/io.mapCommand.test.js +5 -5
  121. package/dist/pregel/io.mapCommand.test.js.map +1 -1
  122. package/dist/pregel/loop.cjs +126 -26
  123. package/dist/pregel/loop.d.ts +29 -2
  124. package/dist/pregel/loop.js +127 -27
  125. package/dist/pregel/loop.js.map +1 -1
  126. package/dist/pregel/messages.cjs +15 -13
  127. package/dist/pregel/messages.d.ts +1 -1
  128. package/dist/pregel/messages.js +15 -13
  129. package/dist/pregel/messages.js.map +1 -1
  130. package/dist/pregel/messages.test.cjs +105 -105
  131. package/dist/pregel/messages.test.js +31 -31
  132. package/dist/pregel/messages.test.js.map +1 -1
  133. package/dist/pregel/read.cjs +12 -1
  134. package/dist/pregel/read.d.ts +3 -1
  135. package/dist/pregel/read.js +12 -1
  136. package/dist/pregel/read.js.map +1 -1
  137. package/dist/pregel/read.test.cjs +35 -35
  138. package/dist/pregel/read.test.js +4 -4
  139. package/dist/pregel/read.test.js.map +1 -1
  140. package/dist/pregel/remote.js.map +1 -1
  141. package/dist/pregel/retry.cjs +12 -16
  142. package/dist/pregel/retry.js +10 -14
  143. package/dist/pregel/retry.js.map +1 -1
  144. package/dist/pregel/runner.cjs +92 -118
  145. package/dist/pregel/runner.js +93 -119
  146. package/dist/pregel/runner.js.map +1 -1
  147. package/dist/pregel/runner.test.cjs +14 -14
  148. package/dist/pregel/runner.test.js +4 -4
  149. package/dist/pregel/runner.test.js.map +1 -1
  150. package/dist/pregel/stream.js.map +1 -1
  151. package/dist/pregel/types.cjs +10 -3
  152. package/dist/pregel/types.d.ts +64 -8
  153. package/dist/pregel/types.js +8 -1
  154. package/dist/pregel/types.js.map +1 -1
  155. package/dist/pregel/utils/config.cjs +40 -22
  156. package/dist/pregel/utils/config.d.ts +8 -5
  157. package/dist/pregel/utils/config.js +33 -14
  158. package/dist/pregel/utils/config.js.map +1 -1
  159. package/dist/pregel/utils/config.test.cjs +58 -58
  160. package/dist/pregel/utils/config.test.js +12 -12
  161. package/dist/pregel/utils/config.test.js.map +1 -1
  162. package/dist/pregel/utils/index.cjs +12 -11
  163. package/dist/pregel/utils/index.d.ts +15 -0
  164. package/dist/pregel/utils/index.js +6 -4
  165. package/dist/pregel/utils/index.js.map +1 -1
  166. package/dist/pregel/utils/subgraph.cjs +2 -3
  167. package/dist/pregel/utils/subgraph.js.map +1 -1
  168. package/dist/pregel/utils/subgraph.test.cjs +18 -18
  169. package/dist/pregel/utils/subgraph.test.js +1 -1
  170. package/dist/pregel/utils/subgraph.test.js.map +1 -1
  171. package/dist/pregel/validate.cjs +3 -3
  172. package/dist/pregel/validate.js.map +1 -1
  173. package/dist/pregel/validate.test.cjs +43 -43
  174. package/dist/pregel/validate.test.js +3 -3
  175. package/dist/pregel/validate.test.js.map +1 -1
  176. package/dist/pregel/write.js.map +1 -1
  177. package/dist/pregel/write.test.cjs +30 -30
  178. package/dist/pregel/write.test.js +8 -8
  179. package/dist/pregel/write.test.js.map +1 -1
  180. package/dist/setup/async_local_storage.cjs +1 -2
  181. package/dist/utils.cjs +7 -7
  182. package/dist/utils.js.map +1 -1
  183. package/dist/web.cjs +6 -1
  184. package/dist/web.d.ts +3 -3
  185. package/dist/web.js +3 -3
  186. package/dist/web.js.map +1 -1
  187. package/package.json +15 -15
@@ -1,75 +1,75 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const globals_1 = require("@jest/globals");
3
+ const vitest_1 = require("vitest");
4
4
  const constants_js_1 = require("../constants.cjs");
5
5
  const io_js_1 = require("./io.cjs");
6
6
  const errors_js_1 = require("../errors.cjs");
7
- (0, globals_1.describe)("mapCommand", () => {
8
- (0, globals_1.it)("should handle Command with goto (string)", () => {
7
+ (0, vitest_1.describe)("mapCommand", () => {
8
+ (0, vitest_1.it)("should handle Command with goto (string)", () => {
9
9
  const cmd = new constants_js_1.Command({
10
10
  goto: "nextNode",
11
11
  });
12
12
  const pendingWrites = [];
13
13
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
14
- (0, globals_1.expect)(result).toEqual([
14
+ (0, vitest_1.expect)(result).toEqual([
15
15
  [
16
16
  "00000000-0000-0000-0000-000000000000",
17
- "branch:__start__:__self__:nextNode",
17
+ "branch:to:nextNode",
18
18
  "__start__",
19
19
  ],
20
20
  ]);
21
21
  });
22
- (0, globals_1.it)("should handle Command with goto (Send object)", () => {
22
+ (0, vitest_1.it)("should handle Command with goto (Send object)", () => {
23
23
  const send = new constants_js_1.Send("targetNode", { arg1: "value1" });
24
24
  const cmd = new constants_js_1.Command({
25
25
  goto: send,
26
26
  });
27
27
  const pendingWrites = [];
28
28
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
29
- (0, globals_1.expect)(result).toEqual([
29
+ (0, vitest_1.expect)(result).toEqual([
30
30
  ["00000000-0000-0000-0000-000000000000", "__pregel_tasks", send],
31
31
  ]);
32
32
  });
33
- (0, globals_1.it)("should handle Command with goto (array of strings and Send objects)", () => {
33
+ (0, vitest_1.it)("should handle Command with goto (array of strings and Send objects)", () => {
34
34
  const send = new constants_js_1.Send("targetNode", { arg1: "value1" });
35
35
  const cmd = new constants_js_1.Command({
36
36
  goto: ["nextNode1", send, "nextNode2"],
37
37
  });
38
38
  const pendingWrites = [];
39
39
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
40
- (0, globals_1.expect)(result).toEqual([
40
+ (0, vitest_1.expect)(result).toEqual([
41
41
  [
42
42
  "00000000-0000-0000-0000-000000000000",
43
- "branch:__start__:__self__:nextNode1",
43
+ "branch:to:nextNode1",
44
44
  "__start__",
45
45
  ],
46
46
  ["00000000-0000-0000-0000-000000000000", "__pregel_tasks", send],
47
47
  [
48
48
  "00000000-0000-0000-0000-000000000000",
49
- "branch:__start__:__self__:nextNode2",
49
+ "branch:to:nextNode2",
50
50
  "__start__",
51
51
  ],
52
52
  ]);
53
53
  });
54
- (0, globals_1.it)("should throw error for invalid goto value", () => {
54
+ (0, vitest_1.it)("should throw error for invalid goto value", () => {
55
55
  const cmd = new constants_js_1.Command({
56
56
  // @ts-expect-error Testing invalid input
57
57
  goto: { invalidType: true },
58
58
  });
59
59
  const pendingWrites = [];
60
- (0, globals_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("In Command.send, expected Send or string, got object");
60
+ (0, vitest_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("In Command.send, expected Send or string, got object");
61
61
  });
62
- (0, globals_1.it)("should handle Command with resume (single value)", () => {
62
+ (0, vitest_1.it)("should handle Command with resume (single value)", () => {
63
63
  const cmd = new constants_js_1.Command({
64
64
  resume: "resumeValue",
65
65
  });
66
66
  const pendingWrites = [];
67
67
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
68
- (0, globals_1.expect)(result).toEqual([
68
+ (0, vitest_1.expect)(result).toEqual([
69
69
  ["00000000-0000-0000-0000-000000000000", "__resume__", "resumeValue"],
70
70
  ]);
71
71
  });
72
- (0, globals_1.it)("should handle Command with resume (object of task IDs)", () => {
72
+ (0, vitest_1.it)("should handle Command with resume (object of task IDs)", () => {
73
73
  // Using a valid UUID-like structure
74
74
  const cmd = new constants_js_1.Command({
75
75
  resume: {
@@ -79,12 +79,12 @@ const errors_js_1 = require("../errors.cjs");
79
79
  });
80
80
  const pendingWrites = [];
81
81
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
82
- (0, globals_1.expect)(result).toEqual([
82
+ (0, vitest_1.expect)(result).toEqual([
83
83
  ["123e4567-e89b-12d3-a456-426614174000", "__resume__", ["resumeValue1"]],
84
84
  ["123e4567-e89b-12d3-a456-426614174001", "__resume__", ["resumeValue2"]],
85
85
  ]);
86
86
  });
87
- (0, globals_1.it)("should handle Command with update (object)", () => {
87
+ (0, vitest_1.it)("should handle Command with update (object)", () => {
88
88
  const cmd = new constants_js_1.Command({
89
89
  update: {
90
90
  channel1: "value1",
@@ -93,12 +93,12 @@ const errors_js_1 = require("../errors.cjs");
93
93
  });
94
94
  const pendingWrites = [];
95
95
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
96
- (0, globals_1.expect)(result).toEqual([
96
+ (0, vitest_1.expect)(result).toEqual([
97
97
  ["00000000-0000-0000-0000-000000000000", "channel1", "value1"],
98
98
  ["00000000-0000-0000-0000-000000000000", "channel2", "value2"],
99
99
  ]);
100
100
  });
101
- (0, globals_1.it)("should handle Command with update (array of tuples)", () => {
101
+ (0, vitest_1.it)("should handle Command with update (array of tuples)", () => {
102
102
  const cmd = new constants_js_1.Command({
103
103
  update: [
104
104
  ["channel1", "value1"],
@@ -107,29 +107,29 @@ const errors_js_1 = require("../errors.cjs");
107
107
  });
108
108
  const pendingWrites = [];
109
109
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
110
- (0, globals_1.expect)(result).toEqual([
110
+ (0, vitest_1.expect)(result).toEqual([
111
111
  ["00000000-0000-0000-0000-000000000000", "channel1", "value1"],
112
112
  ["00000000-0000-0000-0000-000000000000", "channel2", "value2"],
113
113
  ]);
114
114
  });
115
- (0, globals_1.it)("should throw error for invalid update type", () => {
115
+ (0, vitest_1.it)("should throw error for invalid update type", () => {
116
116
  const cmd = new constants_js_1.Command({
117
117
  // @ts-expect-error Testing invalid input
118
118
  update: "invalidUpdateType",
119
119
  });
120
120
  const pendingWrites = [];
121
- (0, globals_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("Expected cmd.update to be a dict mapping channel names to update values");
121
+ (0, vitest_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("Expected cmd.update to be a dict mapping channel names to update values");
122
122
  });
123
- (0, globals_1.it)("should throw error for parent graph reference when none exists", () => {
123
+ (0, vitest_1.it)("should throw error for parent graph reference when none exists", () => {
124
124
  const cmd = new constants_js_1.Command({
125
125
  graph: constants_js_1.Command.PARENT,
126
126
  goto: "nextNode",
127
127
  });
128
128
  const pendingWrites = [];
129
- (0, globals_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow(errors_js_1.InvalidUpdateError);
130
- (0, globals_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("There is no parent graph.");
129
+ (0, vitest_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow(errors_js_1.InvalidUpdateError);
130
+ (0, vitest_1.expect)(() => Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites))).toThrow("There is no parent graph.");
131
131
  });
132
- (0, globals_1.it)("should handle multiple command attributes together", () => {
132
+ (0, vitest_1.it)("should handle multiple command attributes together", () => {
133
133
  const cmd = new constants_js_1.Command({
134
134
  goto: "nextNode",
135
135
  resume: "resumeValue",
@@ -137,10 +137,10 @@ const errors_js_1 = require("../errors.cjs");
137
137
  });
138
138
  const pendingWrites = [];
139
139
  const result = Array.from((0, io_js_1.mapCommand)(cmd, pendingWrites));
140
- (0, globals_1.expect)(result).toEqual([
140
+ (0, vitest_1.expect)(result).toEqual([
141
141
  [
142
142
  "00000000-0000-0000-0000-000000000000",
143
- "branch:__start__:__self__:nextNode",
143
+ "branch:to:nextNode",
144
144
  "__start__",
145
145
  ],
146
146
  ["00000000-0000-0000-0000-000000000000", "__resume__", "resumeValue"],
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from "@jest/globals";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { Command, Send } from "../constants.js";
3
3
  import { mapCommand } from "./io.js";
4
4
  import { InvalidUpdateError } from "../errors.js";
@@ -12,7 +12,7 @@ describe("mapCommand", () => {
12
12
  expect(result).toEqual([
13
13
  [
14
14
  "00000000-0000-0000-0000-000000000000",
15
- "branch:__start__:__self__:nextNode",
15
+ "branch:to:nextNode",
16
16
  "__start__",
17
17
  ],
18
18
  ]);
@@ -38,13 +38,13 @@ describe("mapCommand", () => {
38
38
  expect(result).toEqual([
39
39
  [
40
40
  "00000000-0000-0000-0000-000000000000",
41
- "branch:__start__:__self__:nextNode1",
41
+ "branch:to:nextNode1",
42
42
  "__start__",
43
43
  ],
44
44
  ["00000000-0000-0000-0000-000000000000", "__pregel_tasks", send],
45
45
  [
46
46
  "00000000-0000-0000-0000-000000000000",
47
- "branch:__start__:__self__:nextNode2",
47
+ "branch:to:nextNode2",
48
48
  "__start__",
49
49
  ],
50
50
  ]);
@@ -138,7 +138,7 @@ describe("mapCommand", () => {
138
138
  expect(result).toEqual([
139
139
  [
140
140
  "00000000-0000-0000-0000-000000000000",
141
- "branch:__start__:__self__:nextNode",
141
+ "branch:to:nextNode",
142
142
  "__start__",
143
143
  ],
144
144
  ["00000000-0000-0000-0000-000000000000", "__resume__", "resumeValue"],
@@ -1 +1 @@
1
- {"version":3,"file":"io.mapCommand.test.js","sourceRoot":"","sources":["../../src/pregel/io.mapCommand.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"io.mapCommand.test.js","sourceRoot":"","sources":["../../src/pregel/io.mapCommand.test.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,44 @@ function createDuplexStream(...streams) {
26
26
  modes: new Set(streams.flatMap((s) => Array.from(s.modes))),
27
27
  });
28
28
  }
29
+ class AsyncBatchedCache extends langgraph_checkpoint_1.BaseCache {
30
+ constructor(cache) {
31
+ super();
32
+ Object.defineProperty(this, "cache", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "queue", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: Promise.resolve()
43
+ });
44
+ this.cache = cache;
45
+ }
46
+ async get(keys) {
47
+ return this.enqueueOperation("get", keys);
48
+ }
49
+ async set(pairs) {
50
+ return this.enqueueOperation("set", pairs);
51
+ }
52
+ async clear(namespaces) {
53
+ return this.enqueueOperation("clear", namespaces);
54
+ }
55
+ async stop() {
56
+ await this.queue;
57
+ }
58
+ enqueueOperation(type, ...args) {
59
+ const newPromise = this.queue.then(() => {
60
+ // @ts-expect-error Tuple type warning
61
+ return this.cache[type](...args);
62
+ });
63
+ this.queue = newPromise.then(() => void 0, () => void 0);
64
+ return newPromise;
65
+ }
66
+ }
29
67
  class PregelLoop {
30
68
  get isResuming() {
31
69
  const hasChannelVersions = Object.keys(this.checkpoint.channel_versions).length !== 0;
@@ -207,6 +245,12 @@ class PregelLoop {
207
245
  writable: true,
208
246
  value: void 0
209
247
  });
248
+ Object.defineProperty(this, "cache", {
249
+ enumerable: true,
250
+ configurable: true,
251
+ writable: true,
252
+ value: void 0
253
+ });
210
254
  Object.defineProperty(this, "manager", {
211
255
  enumerable: true,
212
256
  configurable: true,
@@ -237,6 +281,12 @@ class PregelLoop {
237
281
  writable: true,
238
282
  value: false
239
283
  });
284
+ Object.defineProperty(this, "triggerToNodes", {
285
+ enumerable: true,
286
+ configurable: true,
287
+ writable: true,
288
+ value: void 0
289
+ });
240
290
  this.input = params.input;
241
291
  this.checkpointer = params.checkpointer;
242
292
  // TODO: if managed values no longer needs graph we can replace with
@@ -264,12 +314,14 @@ class PregelLoop {
264
314
  this.nodes = params.nodes;
265
315
  this.skipDoneTasks = params.skipDoneTasks;
266
316
  this.store = params.store;
317
+ this.cache = params.cache ? new AsyncBatchedCache(params.cache) : undefined;
267
318
  this.stream = params.stream;
268
319
  this.checkpointNamespace = params.checkpointNamespace;
269
320
  this.prevCheckpointConfig = params.prevCheckpointConfig;
270
321
  this.interruptAfter = params.interruptAfter;
271
322
  this.interruptBefore = params.interruptBefore;
272
323
  this.debug = params.debug;
324
+ this.triggerToNodes = params.triggerToNodes;
273
325
  }
274
326
  static async initialize(params) {
275
327
  let { config, stream } = params;
@@ -367,9 +419,11 @@ class PregelLoop {
367
419
  nodes: params.nodes,
368
420
  stream,
369
421
  store,
422
+ cache: params.cache,
370
423
  interruptAfter: params.interruptAfter,
371
424
  interruptBefore: params.interruptBefore,
372
425
  debug: params.debug,
426
+ triggerToNodes: params.triggerToNodes,
373
427
  });
374
428
  }
375
429
  _checkpointerPutAfterPrevious(input) {
@@ -423,6 +477,25 @@ class PregelLoop {
423
477
  if (this.tasks) {
424
478
  this._outputWrites(taskId, writesCopy);
425
479
  }
480
+ if (!writes.length || !this.cache || !this.tasks) {
481
+ return;
482
+ }
483
+ // only cache tasks with a cache key
484
+ const task = this.tasks[taskId];
485
+ if (task == null || task.cache_key == null) {
486
+ return;
487
+ }
488
+ // only cache successful tasks
489
+ if (writes[0][0] === constants_js_1.ERROR || writes[0][0] === constants_js_1.INTERRUPT) {
490
+ return;
491
+ }
492
+ void this.cache.set([
493
+ {
494
+ key: [task.cache_key.ns, task.cache_key.key],
495
+ value: task.writes,
496
+ ttl: task.cache_key.ttl,
497
+ },
498
+ ]);
426
499
  }
427
500
  _outputWrites(taskId, writes, cached = false) {
428
501
  const task = this.tasks[taskId];
@@ -441,6 +514,34 @@ class PregelLoop {
441
514
  }
442
515
  }
443
516
  }
517
+ async _matchCachedWrites() {
518
+ if (!this.cache)
519
+ return [];
520
+ const matched = [];
521
+ const serializeKey = ([ns, key]) => {
522
+ return `ns:${ns.join(",")}|key:${key}`;
523
+ };
524
+ const keys = [];
525
+ const keyMap = {};
526
+ for (const task of Object.values(this.tasks)) {
527
+ if (task.cache_key != null && !task.writes.length) {
528
+ keys.push([task.cache_key.ns, task.cache_key.key]);
529
+ keyMap[serializeKey([task.cache_key.ns, task.cache_key.key])] = task;
530
+ }
531
+ }
532
+ if (keys.length === 0)
533
+ return [];
534
+ const cache = await this.cache.get(keys);
535
+ for (const { key, value } of cache) {
536
+ const task = keyMap[serializeKey(key)];
537
+ if (task != null) {
538
+ // update the task with the cached writes
539
+ task.writes.push(...value);
540
+ matched.push({ task, result: value });
541
+ }
542
+ }
543
+ return matched;
544
+ }
444
545
  /**
445
546
  * Execute a single iteration of the Pregel loop.
446
547
  * Returns true if more iterations are needed.
@@ -465,7 +566,7 @@ class PregelLoop {
465
566
  // finish superstep
466
567
  const writes = Object.values(this.tasks).flatMap((t) => t.writes);
467
568
  // All tasks have finished
468
- const managedValueWrites = (0, algo_js_1._applyWrites)(this.checkpoint, this.channels, Object.values(this.tasks), this.checkpointerGetNextVersion);
569
+ const managedValueWrites = (0, algo_js_1._applyWrites)(this.checkpoint, this.channels, Object.values(this.tasks), this.checkpointerGetNextVersion, this.triggerToNodes);
469
570
  for (const [key, values] of Object.entries(managedValueWrites)) {
470
571
  await this.updateManagedValues(key, values);
471
572
  }
@@ -554,25 +655,22 @@ class PregelLoop {
554
655
  if (this.tasks !== undefined &&
555
656
  this.checkpointPendingWrites.length > 0 &&
556
657
  Object.values(this.tasks).some((task) => task.writes.length > 0)) {
557
- const managedValueWrites = (0, algo_js_1._applyWrites)(this.checkpoint, this.channels, Object.values(this.tasks), this.checkpointerGetNextVersion);
658
+ const managedValueWrites = (0, algo_js_1._applyWrites)(this.checkpoint, this.channels, Object.values(this.tasks), this.checkpointerGetNextVersion, this.triggerToNodes);
558
659
  for (const [key, values] of Object.entries(managedValueWrites)) {
559
660
  await this.updateManagedValues(key, values);
560
661
  }
561
662
  this._emit((0, utils_js_1.gatherIteratorSync)((0, utils_js_1.prefixGenerator)((0, io_js_1.mapOutputValues)(this.outputKeys, Object.values(this.tasks).flatMap((t) => t.writes), this.channels), "values")));
562
663
  }
563
664
  // Emit INTERRUPT event
665
+ const interrupts = { [constants_js_1.INTERRUPT]: error.interrupts };
564
666
  this._emit([
565
- [
566
- "updates",
567
- {
568
- [constants_js_1.INTERRUPT]: error.interrupts,
569
- },
570
- ],
667
+ ["updates", interrupts],
668
+ ["values", interrupts],
571
669
  ]);
572
670
  }
573
671
  return suppress;
574
672
  }
575
- acceptPush(task, writeIdx, call) {
673
+ async acceptPush(task, writeIdx, call) {
576
674
  if (this.interruptAfter?.length > 0 &&
577
675
  (0, algo_js_1.shouldInterrupt)(this.checkpoint, this.interruptAfter, [task])) {
578
676
  this.toInterrupt.push(task);
@@ -585,22 +683,24 @@ class PregelLoop {
585
683
  store: this.store,
586
684
  stream: this.stream,
587
685
  });
588
- if (pushed) {
589
- if (this.interruptBefore?.length > 0 &&
590
- (0, algo_js_1.shouldInterrupt)(this.checkpoint, this.interruptBefore, [pushed])) {
591
- this.toInterrupt.push(pushed);
592
- return;
593
- }
594
- this._emit((0, utils_js_1.gatherIteratorSync)((0, utils_js_1.prefixGenerator)((0, debug_js_1.mapDebugTasks)(this.step, [pushed]), "debug")));
595
- if (this.debug) {
596
- (0, debug_js_1.printStepTasks)(this.step, [pushed]);
597
- }
598
- this.tasks[pushed.id] = pushed;
599
- if (this.skipDoneTasks) {
600
- this._matchWrites({ [pushed.id]: pushed });
601
- }
602
- return pushed;
686
+ if (!pushed)
687
+ return;
688
+ if (this.interruptBefore?.length > 0 &&
689
+ (0, algo_js_1.shouldInterrupt)(this.checkpoint, this.interruptBefore, [pushed])) {
690
+ this.toInterrupt.push(pushed);
691
+ return;
603
692
  }
693
+ this._emit((0, utils_js_1.gatherIteratorSync)((0, utils_js_1.prefixGenerator)((0, debug_js_1.mapDebugTasks)(this.step, [pushed]), "debug")));
694
+ if (this.debug)
695
+ (0, debug_js_1.printStepTasks)(this.step, [pushed]);
696
+ this.tasks[pushed.id] = pushed;
697
+ if (this.skipDoneTasks)
698
+ this._matchWrites({ [pushed.id]: pushed });
699
+ const tasks = await this._matchCachedWrites();
700
+ for (const { task } of tasks) {
701
+ this._outputWrites(task.id, task.writes, true);
702
+ }
703
+ return pushed;
604
704
  }
605
705
  _suppressInterrupt(e) {
606
706
  return (0, errors_js_1.isGraphInterrupt)(e) && !this.isNested;
@@ -649,7 +749,7 @@ class PregelLoop {
649
749
  writes: nullWrites,
650
750
  triggers: [],
651
751
  },
652
- ], this.checkpointerGetNextVersion);
752
+ ], this.checkpointerGetNextVersion, this.triggerToNodes);
653
753
  }
654
754
  const isCommandUpdateOrGoto = (0, constants_js_1.isCommand)(this.input) && nullWrites.length > 0;
655
755
  if (this.isResuming || isCommandUpdateOrGoto) {
@@ -687,7 +787,7 @@ class PregelLoop {
687
787
  writes: inputWrites,
688
788
  triggers: [],
689
789
  },
690
- ]), this.checkpointerGetNextVersion);
790
+ ]), this.checkpointerGetNextVersion, this.triggerToNodes);
691
791
  // save input checkpoint
692
792
  await this._putCheckpoint({
693
793
  source: "input",
@@ -1,6 +1,6 @@
1
1
  import type { RunnableConfig } from "@langchain/core/runnables";
2
2
  import type { CallbackManagerForChainRun } from "@langchain/core/callbacks/manager";
3
- import { BaseCheckpointSaver, Checkpoint, PendingWrite, CheckpointPendingWrite, CheckpointMetadata, All, BaseStore, AsyncBatchedStore } from "@langchain/langgraph-checkpoint";
3
+ import { BaseCheckpointSaver, Checkpoint, PendingWrite, CheckpointPendingWrite, CheckpointMetadata, All, BaseStore, AsyncBatchedStore, BaseCache, CacheFullKey, CacheNamespace } from "@langchain/langgraph-checkpoint";
4
4
  import { BaseChannel } from "../channels/base.js";
5
5
  import { Call, PregelExecutableTask, StreamMode } from "./types.js";
6
6
  import { Command } from "../constants.js";
@@ -19,10 +19,12 @@ export type PregelLoopInitializeParams = {
19
19
  managed: ManagedValueMapping;
20
20
  stream: IterableReadableWritableStream;
21
21
  store?: BaseStore;
22
+ cache?: BaseCache<PendingWrite<string>[]>;
22
23
  interruptAfter: string[] | All;
23
24
  interruptBefore: string[] | All;
24
25
  manager?: CallbackManagerForChainRun;
25
26
  debug: boolean;
27
+ triggerToNodes: Record<string, string[]>;
26
28
  };
27
29
  type PregelLoopParams = {
28
30
  input?: any | Command;
@@ -46,11 +48,30 @@ type PregelLoopParams = {
46
48
  manager?: CallbackManagerForChainRun;
47
49
  stream: IterableReadableWritableStream;
48
50
  store?: AsyncBatchedStore;
51
+ cache?: BaseCache<PendingWrite<string>[]>;
49
52
  prevCheckpointConfig: RunnableConfig | undefined;
50
53
  interruptAfter: string[] | All;
51
54
  interruptBefore: string[] | All;
52
55
  debug: boolean;
56
+ triggerToNodes: Record<string, string[]>;
53
57
  };
58
+ declare class AsyncBatchedCache extends BaseCache<PendingWrite<string>[]> {
59
+ protected cache: BaseCache<PendingWrite<string>[]>;
60
+ private queue;
61
+ constructor(cache: BaseCache<unknown>);
62
+ get(keys: CacheFullKey[]): Promise<{
63
+ key: CacheFullKey;
64
+ value: PendingWrite<string>[];
65
+ }[]>;
66
+ set(pairs: {
67
+ key: CacheFullKey;
68
+ value: PendingWrite<string>[];
69
+ ttl?: number;
70
+ }[]): Promise<void>;
71
+ clear(namespaces: CacheNamespace[]): Promise<void>;
72
+ stop(): Promise<void>;
73
+ private enqueueOperation;
74
+ }
54
75
  export declare class PregelLoop {
55
76
  protected input?: any | Command;
56
77
  output: any;
@@ -79,11 +100,13 @@ export declare class PregelLoop {
79
100
  isNested: boolean;
80
101
  protected _checkpointerChainedPromise: Promise<unknown>;
81
102
  store?: AsyncBatchedStore;
103
+ cache?: AsyncBatchedCache;
82
104
  manager?: CallbackManagerForChainRun;
83
105
  interruptAfter: string[] | All;
84
106
  interruptBefore: string[] | All;
85
107
  toInterrupt: PregelExecutableTask<string, string>[];
86
108
  debug: boolean;
109
+ triggerToNodes: Record<string, string[]>;
87
110
  get isResuming(): any;
88
111
  constructor(params: PregelLoopParams);
89
112
  static initialize(params: PregelLoopInitializeParams): Promise<PregelLoop>;
@@ -101,6 +124,10 @@ export declare class PregelLoop {
101
124
  */
102
125
  putWrites(taskId: string, writes: PendingWrite<string>[]): void;
103
126
  _outputWrites(taskId: string, writes: [string, unknown][], cached?: boolean): void;
127
+ _matchCachedWrites(): Promise<{
128
+ task: PregelExecutableTask<string, string>;
129
+ result: unknown;
130
+ }[]>;
104
131
  /**
105
132
  * Execute a single iteration of the Pregel loop.
106
133
  * Returns true if more iterations are needed.
@@ -110,7 +137,7 @@ export declare class PregelLoop {
110
137
  inputKeys?: string | string[];
111
138
  }): Promise<boolean>;
112
139
  finishAndHandleError(error?: Error): Promise<boolean>;
113
- acceptPush(task: PregelExecutableTask<string, string>, writeIdx: number, call?: Call): PregelExecutableTask<string, string> | void;
140
+ acceptPush(task: PregelExecutableTask<string, string>, writeIdx: number, call?: Call): Promise<PregelExecutableTask<string, string> | void>;
114
141
  protected _suppressInterrupt(e?: Error): boolean;
115
142
  protected _first(inputKeys: string | string[]): Promise<void>;
116
143
  protected _emit(values: [StreamMode, unknown][]): void;