@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.
- package/dist/channels/any_value.cjs +3 -0
- package/dist/channels/any_value.d.ts +1 -0
- package/dist/channels/any_value.js +3 -0
- package/dist/channels/any_value.js.map +1 -1
- package/dist/channels/base.cjs +35 -6
- package/dist/channels/base.d.ts +17 -2
- package/dist/channels/base.js +31 -2
- package/dist/channels/base.js.map +1 -1
- package/dist/channels/binop.cjs +3 -0
- package/dist/channels/binop.d.ts +1 -0
- package/dist/channels/binop.js +3 -0
- package/dist/channels/binop.js.map +1 -1
- package/dist/channels/dynamic_barrier_value.cjs +119 -9
- package/dist/channels/dynamic_barrier_value.d.ts +29 -0
- package/dist/channels/dynamic_barrier_value.js +117 -8
- package/dist/channels/dynamic_barrier_value.js.map +1 -1
- package/dist/channels/ephemeral_value.cjs +3 -0
- package/dist/channels/ephemeral_value.d.ts +1 -0
- package/dist/channels/ephemeral_value.js +3 -0
- package/dist/channels/ephemeral_value.js.map +1 -1
- package/dist/channels/last_value.cjs +82 -4
- package/dist/channels/last_value.d.ts +21 -0
- package/dist/channels/last_value.js +80 -3
- package/dist/channels/last_value.js.map +1 -1
- package/dist/channels/named_barrier_value.cjs +94 -1
- package/dist/channels/named_barrier_value.d.ts +23 -0
- package/dist/channels/named_barrier_value.js +92 -0
- package/dist/channels/named_barrier_value.js.map +1 -1
- package/dist/channels/topic.cjs +3 -0
- package/dist/channels/topic.d.ts +1 -0
- package/dist/channels/topic.js +3 -0
- package/dist/channels/topic.js.map +1 -1
- package/dist/constants.cjs +33 -12
- package/dist/constants.d.ts +48 -27
- package/dist/constants.js +27 -7
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +4 -4
- package/dist/errors.js.map +1 -1
- package/dist/func/index.cjs +15 -7
- package/dist/func/index.d.ts +12 -3
- package/dist/func/index.js +12 -4
- package/dist/func/index.js.map +1 -1
- package/dist/func/types.cjs +1 -2
- package/dist/func/types.d.ts +1 -1
- package/dist/graph/annotation.cjs +2 -2
- package/dist/graph/annotation.js.map +1 -1
- package/dist/graph/graph.cjs +46 -40
- package/dist/graph/graph.d.ts +14 -4
- package/dist/graph/graph.js +46 -40
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/index.cjs +3 -1
- package/dist/graph/index.d.ts +2 -2
- package/dist/graph/index.js +2 -2
- package/dist/graph/index.js.map +1 -1
- package/dist/graph/message.cjs +43 -5
- package/dist/graph/message.d.ts +5 -0
- package/dist/graph/message.js +40 -3
- package/dist/graph/message.js.map +1 -1
- package/dist/graph/message.test.cjs +196 -0
- package/dist/graph/message.test.d.ts +1 -0
- package/dist/graph/message.test.js +194 -0
- package/dist/graph/message.test.js.map +1 -0
- package/dist/graph/messages_annotation.cjs +54 -1
- package/dist/graph/messages_annotation.d.ts +47 -0
- package/dist/graph/messages_annotation.js +53 -0
- package/dist/graph/messages_annotation.js.map +1 -1
- package/dist/graph/state.cjs +162 -104
- package/dist/graph/state.d.ts +36 -11
- package/dist/graph/state.js +163 -106
- package/dist/graph/state.js.map +1 -1
- package/dist/graph/zod/plugin.js.map +1 -1
- package/dist/graph/zod/schema.cjs +17 -67
- package/dist/graph/zod/schema.js +12 -61
- package/dist/graph/zod/schema.js.map +1 -1
- package/dist/graph/zod/state.cjs +69 -7
- package/dist/graph/zod/state.d.ts +10 -1
- package/dist/graph/zod/state.js +61 -0
- package/dist/graph/zod/state.js.map +1 -1
- package/dist/interrupt.cjs +1 -2
- package/dist/interrupt.js.map +1 -1
- package/dist/managed/base.cjs +3 -3
- package/dist/managed/base.js.map +1 -1
- package/dist/managed/shared_value.js.map +1 -1
- package/dist/prebuilt/agentName.cjs +3 -4
- package/dist/prebuilt/agentName.js.map +1 -1
- package/dist/prebuilt/agent_executor.cjs +1 -2
- package/dist/prebuilt/agent_executor.d.ts +1 -1
- package/dist/prebuilt/agent_executor.js.map +1 -1
- package/dist/prebuilt/chat_agent_executor.cjs +1 -2
- package/dist/prebuilt/chat_agent_executor.js.map +1 -1
- package/dist/prebuilt/react_agent_executor.cjs +103 -49
- package/dist/prebuilt/react_agent_executor.d.ts +22 -6
- package/dist/prebuilt/react_agent_executor.js +99 -45
- package/dist/prebuilt/react_agent_executor.js.map +1 -1
- package/dist/prebuilt/tool_executor.js.map +1 -1
- package/dist/prebuilt/tool_node.cjs +2 -2
- package/dist/prebuilt/tool_node.js.map +1 -1
- package/dist/pregel/algo.cjs +68 -27
- package/dist/pregel/algo.d.ts +1 -1
- package/dist/pregel/algo.js +62 -21
- package/dist/pregel/algo.js.map +1 -1
- package/dist/pregel/call.cjs +5 -5
- package/dist/pregel/call.d.ts +3 -2
- package/dist/pregel/call.js +2 -1
- package/dist/pregel/call.js.map +1 -1
- package/dist/pregel/debug.cjs +10 -10
- package/dist/pregel/debug.d.ts +3 -3
- package/dist/pregel/debug.js.map +1 -1
- package/dist/pregel/debug.test.cjs +37 -31
- package/dist/pregel/debug.test.js +18 -12
- package/dist/pregel/debug.test.js.map +1 -1
- package/dist/pregel/index.cjs +99 -29
- package/dist/pregel/index.d.ts +19 -6
- package/dist/pregel/index.js +100 -30
- package/dist/pregel/index.js.map +1 -1
- package/dist/pregel/io.cjs +8 -9
- package/dist/pregel/io.js +2 -2
- package/dist/pregel/io.js.map +1 -1
- package/dist/pregel/io.mapCommand.test.cjs +29 -29
- package/dist/pregel/io.mapCommand.test.js +5 -5
- package/dist/pregel/io.mapCommand.test.js.map +1 -1
- package/dist/pregel/loop.cjs +126 -26
- package/dist/pregel/loop.d.ts +29 -2
- package/dist/pregel/loop.js +127 -27
- package/dist/pregel/loop.js.map +1 -1
- package/dist/pregel/messages.cjs +15 -13
- package/dist/pregel/messages.d.ts +1 -1
- package/dist/pregel/messages.js +15 -13
- package/dist/pregel/messages.js.map +1 -1
- package/dist/pregel/messages.test.cjs +105 -105
- package/dist/pregel/messages.test.js +31 -31
- package/dist/pregel/messages.test.js.map +1 -1
- package/dist/pregel/read.cjs +12 -1
- package/dist/pregel/read.d.ts +3 -1
- package/dist/pregel/read.js +12 -1
- package/dist/pregel/read.js.map +1 -1
- package/dist/pregel/read.test.cjs +35 -35
- package/dist/pregel/read.test.js +4 -4
- package/dist/pregel/read.test.js.map +1 -1
- package/dist/pregel/remote.js.map +1 -1
- package/dist/pregel/retry.cjs +12 -16
- package/dist/pregel/retry.js +10 -14
- package/dist/pregel/retry.js.map +1 -1
- package/dist/pregel/runner.cjs +92 -118
- package/dist/pregel/runner.js +93 -119
- package/dist/pregel/runner.js.map +1 -1
- package/dist/pregel/runner.test.cjs +14 -14
- package/dist/pregel/runner.test.js +4 -4
- package/dist/pregel/runner.test.js.map +1 -1
- package/dist/pregel/stream.js.map +1 -1
- package/dist/pregel/types.cjs +10 -3
- package/dist/pregel/types.d.ts +64 -8
- package/dist/pregel/types.js +8 -1
- package/dist/pregel/types.js.map +1 -1
- package/dist/pregel/utils/config.cjs +40 -22
- package/dist/pregel/utils/config.d.ts +8 -5
- package/dist/pregel/utils/config.js +33 -14
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/utils/config.test.cjs +58 -58
- package/dist/pregel/utils/config.test.js +12 -12
- package/dist/pregel/utils/config.test.js.map +1 -1
- package/dist/pregel/utils/index.cjs +12 -11
- package/dist/pregel/utils/index.d.ts +15 -0
- package/dist/pregel/utils/index.js +6 -4
- package/dist/pregel/utils/index.js.map +1 -1
- package/dist/pregel/utils/subgraph.cjs +2 -3
- package/dist/pregel/utils/subgraph.js.map +1 -1
- package/dist/pregel/utils/subgraph.test.cjs +18 -18
- package/dist/pregel/utils/subgraph.test.js +1 -1
- package/dist/pregel/utils/subgraph.test.js.map +1 -1
- package/dist/pregel/validate.cjs +3 -3
- package/dist/pregel/validate.js.map +1 -1
- package/dist/pregel/validate.test.cjs +43 -43
- package/dist/pregel/validate.test.js +3 -3
- package/dist/pregel/validate.test.js.map +1 -1
- package/dist/pregel/write.js.map +1 -1
- package/dist/pregel/write.test.cjs +30 -30
- package/dist/pregel/write.test.js +8 -8
- package/dist/pregel/write.test.js.map +1 -1
- package/dist/setup/async_local_storage.cjs +1 -2
- package/dist/utils.cjs +7 -7
- package/dist/utils.js.map +1 -1
- package/dist/web.cjs +6 -1
- package/dist/web.d.ts +3 -3
- package/dist/web.js +3 -3
- package/dist/web.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
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,
|
|
8
|
-
(0,
|
|
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,
|
|
14
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
15
15
|
[
|
|
16
16
|
"00000000-0000-0000-0000-000000000000",
|
|
17
|
-
"branch:
|
|
17
|
+
"branch:to:nextNode",
|
|
18
18
|
"__start__",
|
|
19
19
|
],
|
|
20
20
|
]);
|
|
21
21
|
});
|
|
22
|
-
(0,
|
|
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,
|
|
29
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
30
30
|
["00000000-0000-0000-0000-000000000000", "__pregel_tasks", send],
|
|
31
31
|
]);
|
|
32
32
|
});
|
|
33
|
-
(0,
|
|
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,
|
|
40
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
41
41
|
[
|
|
42
42
|
"00000000-0000-0000-0000-000000000000",
|
|
43
|
-
"branch:
|
|
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:
|
|
49
|
+
"branch:to:nextNode2",
|
|
50
50
|
"__start__",
|
|
51
51
|
],
|
|
52
52
|
]);
|
|
53
53
|
});
|
|
54
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
68
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
69
69
|
["00000000-0000-0000-0000-000000000000", "__resume__", "resumeValue"],
|
|
70
70
|
]);
|
|
71
71
|
});
|
|
72
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
130
|
-
(0,
|
|
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,
|
|
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,
|
|
140
|
+
(0, vitest_1.expect)(result).toEqual([
|
|
141
141
|
[
|
|
142
142
|
"00000000-0000-0000-0000-000000000000",
|
|
143
|
-
"branch:
|
|
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 "
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"io.mapCommand.test.js","sourceRoot":"","sources":["../../src/pregel/io.mapCommand.test.ts"],"names":[],"mappings":"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"}
|
package/dist/pregel/loop.cjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
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",
|
package/dist/pregel/loop.d.ts
CHANGED
|
@@ -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;
|