@langchain/langgraph 0.3.5 → 0.3.7
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/CHANGELOG.md +10 -0
- package/dist/channels/base.cjs +2 -2
- package/dist/channels/base.d.ts +3 -1
- package/dist/channels/base.js +2 -2
- package/dist/channels/base.js.map +1 -1
- package/dist/constants.cjs +3 -1
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +1 -6
- package/dist/errors.js +1 -6
- package/dist/errors.js.map +1 -1
- package/dist/graph/state.d.ts +1 -1
- package/dist/hash.cjs +333 -0
- package/dist/hash.d.ts +2 -0
- package/dist/hash.js +329 -0
- package/dist/hash.js.map +1 -0
- package/dist/interrupt.cjs +11 -1
- package/dist/interrupt.js +13 -3
- package/dist/interrupt.js.map +1 -1
- package/dist/prebuilt/react_agent_executor.cjs +78 -12
- package/dist/prebuilt/react_agent_executor.d.ts +4 -3
- package/dist/prebuilt/react_agent_executor.js +77 -12
- package/dist/prebuilt/react_agent_executor.js.map +1 -1
- package/dist/pregel/algo.cjs +29 -14
- package/dist/pregel/algo.js +30 -15
- package/dist/pregel/algo.js.map +1 -1
- package/dist/pregel/debug.cjs +18 -42
- package/dist/pregel/debug.d.ts +18 -33
- package/dist/pregel/debug.js +18 -42
- package/dist/pregel/debug.js.map +1 -1
- package/dist/pregel/index.cjs +77 -23
- package/dist/pregel/index.d.ts +7 -2
- package/dist/pregel/index.js +78 -24
- package/dist/pregel/index.js.map +1 -1
- package/dist/pregel/loop.cjs +157 -43
- package/dist/pregel/loop.d.ts +7 -1
- package/dist/pregel/loop.js +158 -44
- package/dist/pregel/loop.js.map +1 -1
- package/dist/pregel/messages.cjs +3 -0
- package/dist/pregel/messages.d.ts +1 -1
- package/dist/pregel/messages.js +3 -0
- package/dist/pregel/messages.js.map +1 -1
- package/dist/pregel/messages.test.cjs +18 -0
- package/dist/pregel/messages.test.js +18 -0
- package/dist/pregel/messages.test.js.map +1 -1
- package/dist/pregel/remote.cjs +2 -0
- package/dist/pregel/remote.d.ts +1 -0
- package/dist/pregel/remote.js +2 -0
- package/dist/pregel/remote.js.map +1 -1
- package/dist/pregel/retry.cjs +4 -0
- package/dist/pregel/retry.js +4 -0
- package/dist/pregel/retry.js.map +1 -1
- package/dist/pregel/types.d.ts +49 -4
- package/dist/pregel/types.js.map +1 -1
- package/dist/pregel/utils/config.cjs +2 -1
- package/dist/pregel/utils/config.js +2 -1
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/validate.cjs +1 -1
- package/dist/pregel/validate.js +1 -1
- package/dist/pregel/validate.js.map +1 -1
- package/dist/pregel/validate.test.cjs +1 -1
- package/dist/pregel/validate.test.js +1 -1
- package/dist/pregel/validate.test.js.map +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +6 -5
package/dist/pregel/debug.cjs
CHANGED
|
@@ -59,8 +59,7 @@ function* _readChannels(channels
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
function* mapDebugTasks(
|
|
63
|
-
const ts = new Date().toISOString();
|
|
62
|
+
function* mapDebugTasks(tasks) {
|
|
64
63
|
for (const { id, name, input, config, triggers, writes } of tasks) {
|
|
65
64
|
if (config?.tags?.includes(constants_js_1.TAG_HIDDEN))
|
|
66
65
|
continue;
|
|
@@ -71,43 +70,26 @@ function* mapDebugTasks(step, tasks) {
|
|
|
71
70
|
.map(([, v]) => {
|
|
72
71
|
return v;
|
|
73
72
|
});
|
|
74
|
-
yield {
|
|
75
|
-
type: "task",
|
|
76
|
-
timestamp: ts,
|
|
77
|
-
step,
|
|
78
|
-
payload: {
|
|
79
|
-
id,
|
|
80
|
-
name,
|
|
81
|
-
input,
|
|
82
|
-
triggers,
|
|
83
|
-
interrupts,
|
|
84
|
-
},
|
|
85
|
-
};
|
|
73
|
+
yield { id, name, input, triggers, interrupts };
|
|
86
74
|
}
|
|
87
75
|
}
|
|
88
|
-
function* mapDebugTaskResults(
|
|
89
|
-
const ts = new Date().toISOString();
|
|
76
|
+
function* mapDebugTaskResults(tasks, streamChannels) {
|
|
90
77
|
for (const [{ id, name, config }, writes] of tasks) {
|
|
91
78
|
if (config?.tags?.includes(constants_js_1.TAG_HIDDEN))
|
|
92
79
|
continue;
|
|
93
80
|
yield {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
? streamChannels.includes(channel)
|
|
103
|
-
: channel === streamChannels;
|
|
104
|
-
}),
|
|
105
|
-
interrupts: writes.filter((w) => w[0] === constants_js_1.INTERRUPT).map((w) => w[1]),
|
|
106
|
-
},
|
|
81
|
+
id,
|
|
82
|
+
name,
|
|
83
|
+
result: writes.filter(([channel]) => {
|
|
84
|
+
return Array.isArray(streamChannels)
|
|
85
|
+
? streamChannels.includes(channel)
|
|
86
|
+
: channel === streamChannels;
|
|
87
|
+
}),
|
|
88
|
+
interrupts: writes.filter((w) => w[0] === constants_js_1.INTERRUPT).map((w) => w[1]),
|
|
107
89
|
};
|
|
108
90
|
}
|
|
109
91
|
}
|
|
110
|
-
function* mapDebugCheckpoint(
|
|
92
|
+
function* mapDebugCheckpoint(config, channels, streamChannels, metadata, tasks, pendingWrites, parentConfig, outputKeys) {
|
|
111
93
|
function formatConfig(config) {
|
|
112
94
|
// make sure the config is consistent with Python
|
|
113
95
|
const pyConfig = {};
|
|
@@ -145,19 +127,13 @@ function* mapDebugCheckpoint(step, config, channels, streamChannels, metadata, t
|
|
|
145
127
|
},
|
|
146
128
|
};
|
|
147
129
|
}
|
|
148
|
-
const ts = new Date().toISOString();
|
|
149
130
|
yield {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
metadata,
|
|
157
|
-
next: tasks.map((task) => task.name),
|
|
158
|
-
tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
|
|
159
|
-
parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,
|
|
160
|
-
},
|
|
131
|
+
config: formatConfig(config),
|
|
132
|
+
values: (0, io_js_1.readChannels)(channels, streamChannels),
|
|
133
|
+
metadata,
|
|
134
|
+
next: tasks.map((task) => task.name),
|
|
135
|
+
tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
|
|
136
|
+
parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,
|
|
161
137
|
};
|
|
162
138
|
}
|
|
163
139
|
function tasksWithWrites(tasks, pendingWrites, states, outputKeys) {
|
package/dist/pregel/debug.d.ts
CHANGED
|
@@ -12,42 +12,27 @@ type ConsoleColors = {
|
|
|
12
12
|
export declare const wrap: (color: ConsoleColors, text: string) => string;
|
|
13
13
|
export declare function printCheckpoint<Value>(step: number, channels: Record<string, BaseChannel<Value>>): void;
|
|
14
14
|
export declare function _readChannels<Value>(channels: Record<string, BaseChannel<Value>>): IterableIterator<[string, any]>;
|
|
15
|
-
export declare function mapDebugTasks<N extends PropertyKey, C extends PropertyKey>(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
name: N;
|
|
22
|
-
input: unknown;
|
|
23
|
-
triggers: string[];
|
|
24
|
-
interrupts: unknown[];
|
|
25
|
-
};
|
|
15
|
+
export declare function mapDebugTasks<N extends PropertyKey, C extends PropertyKey>(tasks: readonly PregelExecutableTask<N, C>[]): Generator<{
|
|
16
|
+
id: string;
|
|
17
|
+
name: N;
|
|
18
|
+
input: unknown;
|
|
19
|
+
triggers: string[];
|
|
20
|
+
interrupts: unknown[];
|
|
26
21
|
}, void, unknown>;
|
|
27
|
-
export declare function mapDebugTaskResults<N extends PropertyKey, C extends PropertyKey>(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
id: string;
|
|
33
|
-
name: N;
|
|
34
|
-
result: PendingWrite<C>[];
|
|
35
|
-
interrupts: unknown[];
|
|
36
|
-
};
|
|
22
|
+
export declare function mapDebugTaskResults<N extends PropertyKey, C extends PropertyKey>(tasks: readonly [PregelExecutableTask<N, C>, PendingWrite<C>[]][], streamChannels: PropertyKey | Array<PropertyKey>): Generator<{
|
|
23
|
+
id: string;
|
|
24
|
+
name: N;
|
|
25
|
+
result: PendingWrite<C>[];
|
|
26
|
+
interrupts: unknown[];
|
|
37
27
|
}, void, unknown>;
|
|
38
28
|
type ChannelKey = string | number | symbol;
|
|
39
|
-
export declare function mapDebugCheckpoint<N extends PropertyKey, C extends PropertyKey>(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
metadata: CheckpointMetadata;
|
|
47
|
-
next: N[];
|
|
48
|
-
tasks: PregelTaskDescription[];
|
|
49
|
-
parentConfig: Partial<Record<"tags" | "metadata" | "callbacks" | "configurable" | "signal" | "timeout" | "run_name" | "max_concurrency" | "recursion_limit" | "run_id", unknown>> | undefined;
|
|
50
|
-
};
|
|
29
|
+
export declare function mapDebugCheckpoint<N extends PropertyKey, C extends PropertyKey>(config: RunnableConfig, channels: Record<string, BaseChannel>, streamChannels: string | string[], metadata: CheckpointMetadata, tasks: readonly PregelExecutableTask<N, C>[], pendingWrites: CheckpointPendingWrite[], parentConfig: RunnableConfig | undefined, outputKeys: ChannelKey | ChannelKey[]): Generator<{
|
|
30
|
+
config: Partial<Record<"tags" | "metadata" | "callbacks" | "configurable" | "signal" | "timeout" | "run_name" | "max_concurrency" | "recursion_limit" | "run_id", unknown>>;
|
|
31
|
+
values: any;
|
|
32
|
+
metadata: CheckpointMetadata;
|
|
33
|
+
next: N[];
|
|
34
|
+
tasks: PregelTaskDescription[];
|
|
35
|
+
parentConfig: Partial<Record<"tags" | "metadata" | "callbacks" | "configurable" | "signal" | "timeout" | "run_name" | "max_concurrency" | "recursion_limit" | "run_id", unknown>> | undefined;
|
|
51
36
|
}, void, unknown>;
|
|
52
37
|
export declare function tasksWithWrites<N extends PropertyKey, C extends PropertyKey>(tasks: PregelTaskDescription[] | readonly PregelExecutableTask<N, C>[], pendingWrites: CheckpointPendingWrite[], states: Record<string, RunnableConfig | StateSnapshot> | undefined, outputKeys: ChannelKey[] | ChannelKey): PregelTaskDescription[];
|
|
53
38
|
export declare function printStepCheckpoint(step: number, channels: Record<string, BaseChannel<unknown>>, whitelist: string[]): void;
|
package/dist/pregel/debug.js
CHANGED
|
@@ -46,8 +46,7 @@ export function* _readChannels(channels
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
export function* mapDebugTasks(
|
|
50
|
-
const ts = new Date().toISOString();
|
|
49
|
+
export function* mapDebugTasks(tasks) {
|
|
51
50
|
for (const { id, name, input, config, triggers, writes } of tasks) {
|
|
52
51
|
if (config?.tags?.includes(TAG_HIDDEN))
|
|
53
52
|
continue;
|
|
@@ -58,43 +57,26 @@ export function* mapDebugTasks(step, tasks) {
|
|
|
58
57
|
.map(([, v]) => {
|
|
59
58
|
return v;
|
|
60
59
|
});
|
|
61
|
-
yield {
|
|
62
|
-
type: "task",
|
|
63
|
-
timestamp: ts,
|
|
64
|
-
step,
|
|
65
|
-
payload: {
|
|
66
|
-
id,
|
|
67
|
-
name,
|
|
68
|
-
input,
|
|
69
|
-
triggers,
|
|
70
|
-
interrupts,
|
|
71
|
-
},
|
|
72
|
-
};
|
|
60
|
+
yield { id, name, input, triggers, interrupts };
|
|
73
61
|
}
|
|
74
62
|
}
|
|
75
|
-
export function* mapDebugTaskResults(
|
|
76
|
-
const ts = new Date().toISOString();
|
|
63
|
+
export function* mapDebugTaskResults(tasks, streamChannels) {
|
|
77
64
|
for (const [{ id, name, config }, writes] of tasks) {
|
|
78
65
|
if (config?.tags?.includes(TAG_HIDDEN))
|
|
79
66
|
continue;
|
|
80
67
|
yield {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
? streamChannels.includes(channel)
|
|
90
|
-
: channel === streamChannels;
|
|
91
|
-
}),
|
|
92
|
-
interrupts: writes.filter((w) => w[0] === INTERRUPT).map((w) => w[1]),
|
|
93
|
-
},
|
|
68
|
+
id,
|
|
69
|
+
name,
|
|
70
|
+
result: writes.filter(([channel]) => {
|
|
71
|
+
return Array.isArray(streamChannels)
|
|
72
|
+
? streamChannels.includes(channel)
|
|
73
|
+
: channel === streamChannels;
|
|
74
|
+
}),
|
|
75
|
+
interrupts: writes.filter((w) => w[0] === INTERRUPT).map((w) => w[1]),
|
|
94
76
|
};
|
|
95
77
|
}
|
|
96
78
|
}
|
|
97
|
-
export function* mapDebugCheckpoint(
|
|
79
|
+
export function* mapDebugCheckpoint(config, channels, streamChannels, metadata, tasks, pendingWrites, parentConfig, outputKeys) {
|
|
98
80
|
function formatConfig(config) {
|
|
99
81
|
// make sure the config is consistent with Python
|
|
100
82
|
const pyConfig = {};
|
|
@@ -132,19 +114,13 @@ export function* mapDebugCheckpoint(step, config, channels, streamChannels, meta
|
|
|
132
114
|
},
|
|
133
115
|
};
|
|
134
116
|
}
|
|
135
|
-
const ts = new Date().toISOString();
|
|
136
117
|
yield {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
metadata,
|
|
144
|
-
next: tasks.map((task) => task.name),
|
|
145
|
-
tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
|
|
146
|
-
parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,
|
|
147
|
-
},
|
|
118
|
+
config: formatConfig(config),
|
|
119
|
+
values: readChannels(channels, streamChannels),
|
|
120
|
+
metadata,
|
|
121
|
+
next: tasks.map((task) => task.name),
|
|
122
|
+
tasks: tasksWithWrites(tasks, pendingWrites, taskStates, outputKeys),
|
|
123
|
+
parentConfig: parentConfig ? formatConfig(parentConfig) : undefined,
|
|
148
124
|
};
|
|
149
125
|
}
|
|
150
126
|
export function tasksWithWrites(tasks, pendingWrites, states, outputKeys) {
|
package/dist/pregel/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/pregel/debug.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,EAEL,SAAS,EACT,MAAM,EACN,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAWzD,MAAM,UAAU,GAAoB;IAClC,IAAI,EAAE;QACJ,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,SAAS;KACf;IACD,KAAK,EAAE;QACL,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,SAAS;KACf;IACD,MAAM,EAAE;QACN,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,SAAS;KACf;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAoB,EAAE,IAAY,EAAU,EAAE,CACjE,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAEtC,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAA4C;IAE5C,OAAO,CAAC,GAAG,CACT;QACE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,wBAAwB,CAAC,EAAE;QACpD,kBAAkB,IAAI,qBAAqB;QAC3C,KAAK,IAAI,CAAC,SAAS,CACjB,MAAM,CAAC,WAAW,CAAC,aAAa,CAAQ,QAAQ,CAAC,CAAC,EAClD,IAAI,EACJ,CAAC,CACF,EAAE;KACJ,CAAC,IAAI,CAAC,EAAE,CAAC,CACX,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,aAAa,CAC5B,QAA4C;AAC5C,8DAA8D;;IAE9D,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5B,8DAA8D;QAChE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;gBACvD,iCAAiC;gBACjC,SAAS;YACX,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC,CAAC,sDAAsD;YACrE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,aAAa,CAC5B,
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/pregel/debug.ts"],"names":[],"mappings":"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"}
|
package/dist/pregel/index.cjs
CHANGED
|
@@ -740,7 +740,7 @@ class Pregel extends PartialRunnable {
|
|
|
740
740
|
async *getStateHistory(config, options) {
|
|
741
741
|
const checkpointer = config.configurable?.[constants_js_1.CONFIG_KEY_CHECKPOINTER] ?? this.checkpointer;
|
|
742
742
|
if (!checkpointer) {
|
|
743
|
-
throw new
|
|
743
|
+
throw new errors_js_1.GraphValueError("No checkpointer set");
|
|
744
744
|
}
|
|
745
745
|
const checkpointNamespace = config.configurable?.checkpoint_ns ?? "";
|
|
746
746
|
if (checkpointNamespace !== "" &&
|
|
@@ -862,7 +862,7 @@ class Pregel extends PartialRunnable {
|
|
|
862
862
|
// tasks for this checkpoint
|
|
863
863
|
const nextTasks = (0, algo_js_1._prepareNextTasks)(checkpoint, saved.pendingWrites || [], this.nodes, channels, managed, saved.config, true, {
|
|
864
864
|
step: (saved.metadata?.step ?? -1) + 1,
|
|
865
|
-
checkpointer
|
|
865
|
+
checkpointer,
|
|
866
866
|
store: this.store,
|
|
867
867
|
});
|
|
868
868
|
// apply null writes
|
|
@@ -870,13 +870,13 @@ class Pregel extends PartialRunnable {
|
|
|
870
870
|
.filter((w) => w[0] === constants_js_1.NULL_TASK_ID)
|
|
871
871
|
.map((w) => w.slice(1));
|
|
872
872
|
if (nullWrites.length > 0) {
|
|
873
|
-
(0, algo_js_1._applyWrites)(
|
|
873
|
+
(0, algo_js_1._applyWrites)(checkpoint, channels, [
|
|
874
874
|
{
|
|
875
875
|
name: constants_js_1.INPUT,
|
|
876
876
|
writes: nullWrites,
|
|
877
877
|
triggers: [],
|
|
878
878
|
},
|
|
879
|
-
],
|
|
879
|
+
], checkpointer.getNextVersion.bind(checkpointer), this.triggerToNodes);
|
|
880
880
|
}
|
|
881
881
|
// apply writes from tasks that already ran
|
|
882
882
|
for (const [taskId, k, v] of saved.pendingWrites || []) {
|
|
@@ -889,29 +889,61 @@ class Pregel extends PartialRunnable {
|
|
|
889
889
|
nextTasks[taskId].writes.push([k, v]);
|
|
890
890
|
}
|
|
891
891
|
// clear all current tasks
|
|
892
|
-
(0, algo_js_1._applyWrites)(checkpoint, channels, Object.values(nextTasks),
|
|
892
|
+
(0, algo_js_1._applyWrites)(checkpoint, channels, Object.values(nextTasks), checkpointer.getNextVersion.bind(checkpointer), this.triggerToNodes);
|
|
893
893
|
}
|
|
894
894
|
// save checkpoint
|
|
895
|
-
const nextConfig = await checkpointer.put(checkpointConfig, (0, base_js_1.createCheckpoint)(checkpoint,
|
|
895
|
+
const nextConfig = await checkpointer.put(checkpointConfig, (0, base_js_1.createCheckpoint)(checkpoint, channels, step), {
|
|
896
896
|
...checkpointMetadata,
|
|
897
897
|
source: "update",
|
|
898
898
|
step: step + 1,
|
|
899
899
|
writes: {},
|
|
900
900
|
parents: saved?.metadata?.parents ?? {},
|
|
901
|
-
},
|
|
901
|
+
}, (0, index_js_1.getNewChannelVersions)(checkpointPreviousVersions, checkpoint.channel_versions));
|
|
902
902
|
return (0, index_js_1.patchCheckpointMap)(nextConfig, saved ? saved.metadata : undefined);
|
|
903
903
|
}
|
|
904
|
-
if (
|
|
904
|
+
if (asNode === constants_js_1.COPY) {
|
|
905
905
|
if (updates.length > 1) {
|
|
906
906
|
throw new errors_js_1.InvalidUpdateError(`Cannot copy checkpoint with multiple updates`);
|
|
907
907
|
}
|
|
908
|
-
|
|
908
|
+
if (saved == null) {
|
|
909
|
+
throw new errors_js_1.InvalidUpdateError(`Cannot copy a non-existent checkpoint`);
|
|
910
|
+
}
|
|
911
|
+
const isCopyWithUpdates = (values) => {
|
|
912
|
+
if (!Array.isArray(values))
|
|
913
|
+
return false;
|
|
914
|
+
if (values.length === 0)
|
|
915
|
+
return false;
|
|
916
|
+
return values.every((v) => Array.isArray(v) && v.length === 2);
|
|
917
|
+
};
|
|
918
|
+
const nextCheckpoint = (0, base_js_1.createCheckpoint)(checkpoint, undefined, step);
|
|
919
|
+
const nextConfig = await checkpointer.put(saved.parentConfig ??
|
|
920
|
+
(0, utils_js_1.patchConfigurable)(saved.config, { checkpoint_id: undefined }), nextCheckpoint, {
|
|
909
921
|
source: "fork",
|
|
910
922
|
step: step + 1,
|
|
911
923
|
writes: {},
|
|
912
|
-
parents: saved
|
|
924
|
+
parents: saved.metadata?.parents ?? {},
|
|
913
925
|
}, {});
|
|
914
|
-
|
|
926
|
+
// We want to both clone a checkpoint and update state in one go.
|
|
927
|
+
// Reuse the same task ID if possible.
|
|
928
|
+
if (isCopyWithUpdates(values)) {
|
|
929
|
+
// figure out the task IDs for the next update checkpoint
|
|
930
|
+
const nextTasks = (0, algo_js_1._prepareNextTasks)(nextCheckpoint, saved.pendingWrites, this.nodes, channels, managed, nextConfig, false, { step: step + 2 });
|
|
931
|
+
const tasksGroupBy = Object.values(nextTasks).reduce((acc, { name, id }) => {
|
|
932
|
+
acc[name] ??= [];
|
|
933
|
+
acc[name].push({ id });
|
|
934
|
+
return acc;
|
|
935
|
+
}, {});
|
|
936
|
+
const userGroupBy = values.reduce((acc, item) => {
|
|
937
|
+
const [values, asNode] = item;
|
|
938
|
+
acc[asNode] ??= [];
|
|
939
|
+
const targetIdx = acc[asNode].length;
|
|
940
|
+
const taskId = tasksGroupBy[asNode]?.[targetIdx]?.id;
|
|
941
|
+
acc[asNode].push({ values, asNode, taskId });
|
|
942
|
+
return acc;
|
|
943
|
+
}, {});
|
|
944
|
+
return updateSuperStep((0, index_js_1.patchCheckpointMap)(nextConfig, saved.metadata), Object.values(userGroupBy).flat());
|
|
945
|
+
}
|
|
946
|
+
return (0, index_js_1.patchCheckpointMap)(nextConfig, saved.metadata);
|
|
915
947
|
}
|
|
916
948
|
if (asNode === constants_js_1.INPUT) {
|
|
917
949
|
if (updates.length > 1) {
|
|
@@ -983,7 +1015,7 @@ class Pregel extends PartialRunnable {
|
|
|
983
1015
|
const validUpdates = [];
|
|
984
1016
|
if (updates.length === 1) {
|
|
985
1017
|
// eslint-disable-next-line prefer-const
|
|
986
|
-
let { values, asNode } = updates[0];
|
|
1018
|
+
let { values, asNode, taskId } = updates[0];
|
|
987
1019
|
if (asNode === undefined && Object.keys(this.nodes).length === 1) {
|
|
988
1020
|
// if only one node, use it
|
|
989
1021
|
[asNode] = Object.keys(this.nodes);
|
|
@@ -1019,18 +1051,18 @@ class Pregel extends PartialRunnable {
|
|
|
1019
1051
|
if (asNode === undefined) {
|
|
1020
1052
|
throw new errors_js_1.InvalidUpdateError(`Ambiguous update, specify "asNode"`);
|
|
1021
1053
|
}
|
|
1022
|
-
validUpdates.push({ values, asNode });
|
|
1054
|
+
validUpdates.push({ values, asNode, taskId });
|
|
1023
1055
|
}
|
|
1024
1056
|
else {
|
|
1025
|
-
for (const { asNode, values } of updates) {
|
|
1057
|
+
for (const { asNode, values, taskId } of updates) {
|
|
1026
1058
|
if (asNode == null) {
|
|
1027
1059
|
throw new errors_js_1.InvalidUpdateError(`"asNode" is required when applying multiple updates`);
|
|
1028
1060
|
}
|
|
1029
|
-
validUpdates.push({ values, asNode });
|
|
1061
|
+
validUpdates.push({ values, asNode, taskId });
|
|
1030
1062
|
}
|
|
1031
1063
|
}
|
|
1032
1064
|
const tasks = [];
|
|
1033
|
-
for (const { asNode, values } of validUpdates) {
|
|
1065
|
+
for (const { asNode, values, taskId } of validUpdates) {
|
|
1034
1066
|
if (this.nodes[asNode] === undefined) {
|
|
1035
1067
|
throw new errors_js_1.InvalidUpdateError(`Node "${asNode.toString()}" does not exist`);
|
|
1036
1068
|
}
|
|
@@ -1050,7 +1082,7 @@ class Pregel extends PartialRunnable {
|
|
|
1050
1082
|
: writers[0],
|
|
1051
1083
|
writes: [],
|
|
1052
1084
|
triggers: [constants_js_1.INTERRUPT],
|
|
1053
|
-
id: (0, langgraph_checkpoint_1.uuid5)(constants_js_1.INTERRUPT, checkpoint.id),
|
|
1085
|
+
id: taskId ?? (0, langgraph_checkpoint_1.uuid5)(constants_js_1.INTERRUPT, checkpoint.id),
|
|
1054
1086
|
writers: [],
|
|
1055
1087
|
});
|
|
1056
1088
|
}
|
|
@@ -1139,6 +1171,8 @@ class Pregel extends PartialRunnable {
|
|
|
1139
1171
|
* - checkpointer
|
|
1140
1172
|
* - store
|
|
1141
1173
|
* - whether stream mode is single
|
|
1174
|
+
* - node cache
|
|
1175
|
+
* - whether checkpoint during is enabled
|
|
1142
1176
|
* @internal
|
|
1143
1177
|
*/
|
|
1144
1178
|
_defaults(config) {
|
|
@@ -1167,13 +1201,16 @@ class Pregel extends PartialRunnable {
|
|
|
1167
1201
|
streamModeSingle = typeof streamMode === "string";
|
|
1168
1202
|
}
|
|
1169
1203
|
else {
|
|
1170
|
-
|
|
1204
|
+
// if being called as a node in another graph, default to values mode
|
|
1205
|
+
// but don't overwrite `streamMode`if provided
|
|
1206
|
+
if (config.configurable?.[constants_js_1.CONFIG_KEY_TASK_ID] !== undefined) {
|
|
1207
|
+
defaultStreamMode = ["values"];
|
|
1208
|
+
}
|
|
1209
|
+
else {
|
|
1210
|
+
defaultStreamMode = this.streamMode;
|
|
1211
|
+
}
|
|
1171
1212
|
streamModeSingle = true;
|
|
1172
1213
|
}
|
|
1173
|
-
// if being called as a node in another graph, always use values mode
|
|
1174
|
-
if (config.configurable?.[constants_js_1.CONFIG_KEY_TASK_ID] !== undefined) {
|
|
1175
|
-
defaultStreamMode = ["values"];
|
|
1176
|
-
}
|
|
1177
1214
|
let defaultCheckpointer;
|
|
1178
1215
|
if (this.checkpointer === false) {
|
|
1179
1216
|
defaultCheckpointer = undefined;
|
|
@@ -1182,11 +1219,17 @@ class Pregel extends PartialRunnable {
|
|
|
1182
1219
|
config.configurable?.[constants_js_1.CONFIG_KEY_CHECKPOINTER] !== undefined) {
|
|
1183
1220
|
defaultCheckpointer = config.configurable[constants_js_1.CONFIG_KEY_CHECKPOINTER];
|
|
1184
1221
|
}
|
|
1222
|
+
else if (this.checkpointer === true) {
|
|
1223
|
+
throw new Error("checkpointer: true cannot be used for root graphs.");
|
|
1224
|
+
}
|
|
1185
1225
|
else {
|
|
1186
1226
|
defaultCheckpointer = this.checkpointer;
|
|
1187
1227
|
}
|
|
1188
1228
|
const defaultStore = config.store ?? this.store;
|
|
1189
1229
|
const defaultCache = config.cache ?? this.cache;
|
|
1230
|
+
const defaultCheckpointDuring = config.checkpointDuring ??
|
|
1231
|
+
config?.configurable?.[constants_js_1.CONFIG_KEY_CHECKPOINT_DURING] ??
|
|
1232
|
+
true;
|
|
1190
1233
|
return [
|
|
1191
1234
|
defaultDebug,
|
|
1192
1235
|
defaultStreamMode,
|
|
@@ -1199,6 +1242,7 @@ class Pregel extends PartialRunnable {
|
|
|
1199
1242
|
defaultStore,
|
|
1200
1243
|
streamModeSingle,
|
|
1201
1244
|
defaultCache,
|
|
1245
|
+
defaultCheckpointDuring,
|
|
1202
1246
|
];
|
|
1203
1247
|
}
|
|
1204
1248
|
/**
|
|
@@ -1345,11 +1389,20 @@ class Pregel extends PartialRunnable {
|
|
|
1345
1389
|
const validInput = await this._validateInput(input);
|
|
1346
1390
|
const { runId, ...restConfig } = inputConfig;
|
|
1347
1391
|
// assign defaults
|
|
1348
|
-
const [debug, streamMode, , outputKeys, config, interruptBefore, interruptAfter, checkpointer, store, streamModeSingle, cache,] = this._defaults(restConfig);
|
|
1392
|
+
const [debug, streamMode, , outputKeys, config, interruptBefore, interruptAfter, checkpointer, store, streamModeSingle, cache, checkpointDuring,] = this._defaults(restConfig);
|
|
1349
1393
|
config.configurable = await this._validateConfigurable(config.configurable);
|
|
1350
1394
|
const stream = new stream_js_1.IterableReadableWritableStream({
|
|
1351
1395
|
modes: new Set(streamMode),
|
|
1352
1396
|
});
|
|
1397
|
+
// set up subgraph checkpointing
|
|
1398
|
+
if (this.checkpointer === true) {
|
|
1399
|
+
config.configurable ??= {};
|
|
1400
|
+
const ns = config.configurable[constants_js_1.CONFIG_KEY_CHECKPOINT_NS] ?? "";
|
|
1401
|
+
config.configurable[constants_js_1.CONFIG_KEY_CHECKPOINT_NS] = ns
|
|
1402
|
+
.split(constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR)
|
|
1403
|
+
.map((part) => part.split(constants_js_1.CHECKPOINT_NAMESPACE_END)[0])
|
|
1404
|
+
.join(constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR);
|
|
1405
|
+
}
|
|
1353
1406
|
// set up messages stream mode
|
|
1354
1407
|
if (streamMode.includes("messages")) {
|
|
1355
1408
|
const messageStreamer = new messages_js_1.StreamMessagesHandler((chunk) => stream.push(chunk));
|
|
@@ -1409,6 +1462,7 @@ class Pregel extends PartialRunnable {
|
|
|
1409
1462
|
manager: runManager,
|
|
1410
1463
|
debug: this.debug,
|
|
1411
1464
|
triggerToNodes: this.triggerToNodes,
|
|
1465
|
+
checkpointDuring,
|
|
1412
1466
|
});
|
|
1413
1467
|
const runner = new runner_js_1.PregelRunner({
|
|
1414
1468
|
loop,
|
package/dist/pregel/index.d.ts
CHANGED
|
@@ -222,7 +222,7 @@ export declare class Pregel<Nodes extends StrRecord<string, PregelNode>, Channel
|
|
|
222
222
|
* When provided, saves a checkpoint of the graph state at every superstep.
|
|
223
223
|
* When false or undefined, checkpointing is disabled, and the graph will not be able to save or restore state.
|
|
224
224
|
*/
|
|
225
|
-
checkpointer?: BaseCheckpointSaver |
|
|
225
|
+
checkpointer?: BaseCheckpointSaver | boolean;
|
|
226
226
|
/** Optional retry policy for handling failures in node execution */
|
|
227
227
|
retryPolicy?: RetryPolicy;
|
|
228
228
|
/** The default configuration for graph execution, can be overridden on a per-invocation basis */
|
|
@@ -412,6 +412,8 @@ export declare class Pregel<Nodes extends StrRecord<string, PregelNode>, Channel
|
|
|
412
412
|
* - checkpointer
|
|
413
413
|
* - store
|
|
414
414
|
* - whether stream mode is single
|
|
415
|
+
* - node cache
|
|
416
|
+
* - whether checkpoint during is enabled
|
|
415
417
|
* @internal
|
|
416
418
|
*/
|
|
417
419
|
_defaults(config: PregelOptions<Nodes, Channels>): [
|
|
@@ -428,9 +430,12 @@ export declare class Pregel<Nodes extends StrRecord<string, PregelNode>, Channel
|
|
|
428
430
|
All | string[],
|
|
429
431
|
// interrupt after
|
|
430
432
|
BaseCheckpointSaver | undefined,
|
|
433
|
+
// checkpointer
|
|
431
434
|
BaseStore | undefined,
|
|
432
435
|
boolean,
|
|
433
|
-
|
|
436
|
+
// stream mode single
|
|
437
|
+
BaseCache | undefined,
|
|
438
|
+
boolean
|
|
434
439
|
];
|
|
435
440
|
/**
|
|
436
441
|
* Streams the execution of the graph, emitting state updates as they occur.
|