@langchain/langgraph 0.2.7 → 0.2.9
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/constants.cjs +12 -2
- package/dist/constants.d.ts +7 -1
- package/dist/constants.js +11 -1
- package/dist/errors.cjs +5 -4
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +5 -4
- package/dist/graph/graph.cjs +7 -2
- package/dist/graph/graph.js +8 -3
- package/dist/graph/message.cjs +2 -0
- package/dist/graph/message.js +2 -0
- package/dist/graph/state.cjs +9 -7
- package/dist/graph/state.d.ts +2 -2
- package/dist/graph/state.js +10 -8
- package/dist/managed/shared_value.cjs +1 -1
- package/dist/managed/shared_value.js +1 -1
- package/dist/pregel/algo.cjs +119 -54
- package/dist/pregel/algo.d.ts +5 -2
- package/dist/pregel/algo.js +117 -53
- package/dist/pregel/debug.cjs +15 -18
- package/dist/pregel/debug.d.ts +3 -2
- package/dist/pregel/debug.js +16 -19
- package/dist/pregel/index.cjs +295 -123
- package/dist/pregel/index.d.ts +16 -5
- package/dist/pregel/index.js +292 -123
- package/dist/pregel/io.cjs +15 -8
- package/dist/pregel/io.d.ts +2 -2
- package/dist/pregel/io.js +15 -8
- package/dist/pregel/loop.cjs +256 -111
- package/dist/pregel/loop.d.ts +21 -5
- package/dist/pregel/loop.js +256 -109
- package/dist/pregel/read.cjs +9 -2
- package/dist/pregel/read.d.ts +2 -1
- package/dist/pregel/read.js +9 -2
- package/dist/pregel/retry.d.ts +1 -1
- package/dist/pregel/types.d.ts +5 -2
- package/dist/pregel/utils/config.cjs +72 -0
- package/dist/pregel/utils/config.d.ts +2 -0
- package/dist/pregel/utils/config.js +68 -0
- package/dist/pregel/{utils.cjs → utils/index.cjs} +33 -10
- package/dist/pregel/{utils.d.ts → utils/index.d.ts} +4 -7
- package/dist/pregel/{utils.js → utils/index.js} +30 -8
- package/dist/utils.cjs +5 -3
- package/dist/utils.js +5 -3
- package/dist/web.d.ts +2 -1
- package/package.json +1 -1
package/dist/constants.cjs
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports._isSend = exports.Send = exports._isSendInterface = exports.CHECKPOINT_NAMESPACE_SEPARATOR = exports.RESERVED = exports.TASK_NAMESPACE = exports.TASKS = exports.TAG_HIDDEN = exports.RECURSION_LIMIT_DEFAULT = exports.RUNTIME_PLACEHOLDER = exports.
|
|
3
|
+
exports._isSend = exports.Send = exports._isSendInterface = exports.CHECKPOINT_NAMESPACE_END = exports.CHECKPOINT_NAMESPACE_SEPARATOR = exports.RESERVED = exports.TASK_NAMESPACE = exports.PULL = exports.PUSH = exports.TASKS = exports.TAG_HIDDEN = exports.RECURSION_LIMIT_DEFAULT = exports.RUNTIME_PLACEHOLDER = exports.INTERRUPT = exports.CONFIG_KEY_CHECKPOINT_MAP = exports.CONFIG_KEY_STREAM = exports.CONFIG_KEY_TASK_ID = exports.CONFIG_KEY_RESUMING = exports.CONFIG_KEY_STORE = exports.CONFIG_KEY_CHECKPOINTER = exports.CONFIG_KEY_READ = exports.CONFIG_KEY_SEND = exports.ERROR = exports.INPUT = void 0;
|
|
4
4
|
exports.INPUT = "__input__";
|
|
5
5
|
exports.ERROR = "__error__";
|
|
6
6
|
exports.CONFIG_KEY_SEND = "__pregel_send";
|
|
7
7
|
exports.CONFIG_KEY_READ = "__pregel_read";
|
|
8
8
|
exports.CONFIG_KEY_CHECKPOINTER = "__pregel_checkpointer";
|
|
9
|
+
exports.CONFIG_KEY_STORE = "__pregel_store";
|
|
9
10
|
exports.CONFIG_KEY_RESUMING = "__pregel_resuming";
|
|
11
|
+
exports.CONFIG_KEY_TASK_ID = "__pregel_task_id";
|
|
12
|
+
exports.CONFIG_KEY_STREAM = "__pregel_stream";
|
|
13
|
+
// this one is part of public API
|
|
14
|
+
exports.CONFIG_KEY_CHECKPOINT_MAP = "checkpoint_map";
|
|
10
15
|
exports.INTERRUPT = "__interrupt__";
|
|
11
|
-
exports.CONFIG_KEY_STORE = "__pregel_store";
|
|
12
16
|
exports.RUNTIME_PLACEHOLDER = "__pregel_runtime_placeholder__";
|
|
13
17
|
exports.RECURSION_LIMIT_DEFAULT = 25;
|
|
14
18
|
exports.TAG_HIDDEN = "langsmith:hidden";
|
|
15
19
|
exports.TASKS = "__pregel_tasks";
|
|
20
|
+
exports.PUSH = "__pregel_push";
|
|
21
|
+
exports.PULL = "__pregel_pull";
|
|
16
22
|
exports.TASK_NAMESPACE = "6ba7b831-9dad-11d1-80b4-00c04fd430c8";
|
|
17
23
|
exports.RESERVED = [
|
|
18
24
|
exports.INTERRUPT,
|
|
@@ -22,9 +28,13 @@ exports.RESERVED = [
|
|
|
22
28
|
exports.CONFIG_KEY_READ,
|
|
23
29
|
exports.CONFIG_KEY_CHECKPOINTER,
|
|
24
30
|
exports.CONFIG_KEY_RESUMING,
|
|
31
|
+
exports.CONFIG_KEY_TASK_ID,
|
|
32
|
+
exports.CONFIG_KEY_STREAM,
|
|
33
|
+
exports.CONFIG_KEY_CHECKPOINT_MAP,
|
|
25
34
|
exports.INPUT,
|
|
26
35
|
];
|
|
27
36
|
exports.CHECKPOINT_NAMESPACE_SEPARATOR = "|";
|
|
37
|
+
exports.CHECKPOINT_NAMESPACE_END = ":";
|
|
28
38
|
function _isSendInterface(x) {
|
|
29
39
|
const operation = x;
|
|
30
40
|
return typeof operation.node === "string" && operation.args !== undefined;
|
package/dist/constants.d.ts
CHANGED
|
@@ -3,16 +3,22 @@ export declare const ERROR = "__error__";
|
|
|
3
3
|
export declare const CONFIG_KEY_SEND = "__pregel_send";
|
|
4
4
|
export declare const CONFIG_KEY_READ = "__pregel_read";
|
|
5
5
|
export declare const CONFIG_KEY_CHECKPOINTER = "__pregel_checkpointer";
|
|
6
|
+
export declare const CONFIG_KEY_STORE = "__pregel_store";
|
|
6
7
|
export declare const CONFIG_KEY_RESUMING = "__pregel_resuming";
|
|
8
|
+
export declare const CONFIG_KEY_TASK_ID = "__pregel_task_id";
|
|
9
|
+
export declare const CONFIG_KEY_STREAM = "__pregel_stream";
|
|
10
|
+
export declare const CONFIG_KEY_CHECKPOINT_MAP = "checkpoint_map";
|
|
7
11
|
export declare const INTERRUPT = "__interrupt__";
|
|
8
|
-
export declare const CONFIG_KEY_STORE = "__pregel_store";
|
|
9
12
|
export declare const RUNTIME_PLACEHOLDER = "__pregel_runtime_placeholder__";
|
|
10
13
|
export declare const RECURSION_LIMIT_DEFAULT = 25;
|
|
11
14
|
export declare const TAG_HIDDEN = "langsmith:hidden";
|
|
12
15
|
export declare const TASKS = "__pregel_tasks";
|
|
16
|
+
export declare const PUSH = "__pregel_push";
|
|
17
|
+
export declare const PULL = "__pregel_pull";
|
|
13
18
|
export declare const TASK_NAMESPACE = "6ba7b831-9dad-11d1-80b4-00c04fd430c8";
|
|
14
19
|
export declare const RESERVED: string[];
|
|
15
20
|
export declare const CHECKPOINT_NAMESPACE_SEPARATOR = "|";
|
|
21
|
+
export declare const CHECKPOINT_NAMESPACE_END = ":";
|
|
16
22
|
export interface SendInterface {
|
|
17
23
|
node: string;
|
|
18
24
|
args: any;
|
package/dist/constants.js
CHANGED
|
@@ -3,13 +3,19 @@ export const ERROR = "__error__";
|
|
|
3
3
|
export const CONFIG_KEY_SEND = "__pregel_send";
|
|
4
4
|
export const CONFIG_KEY_READ = "__pregel_read";
|
|
5
5
|
export const CONFIG_KEY_CHECKPOINTER = "__pregel_checkpointer";
|
|
6
|
+
export const CONFIG_KEY_STORE = "__pregel_store";
|
|
6
7
|
export const CONFIG_KEY_RESUMING = "__pregel_resuming";
|
|
8
|
+
export const CONFIG_KEY_TASK_ID = "__pregel_task_id";
|
|
9
|
+
export const CONFIG_KEY_STREAM = "__pregel_stream";
|
|
10
|
+
// this one is part of public API
|
|
11
|
+
export const CONFIG_KEY_CHECKPOINT_MAP = "checkpoint_map";
|
|
7
12
|
export const INTERRUPT = "__interrupt__";
|
|
8
|
-
export const CONFIG_KEY_STORE = "__pregel_store";
|
|
9
13
|
export const RUNTIME_PLACEHOLDER = "__pregel_runtime_placeholder__";
|
|
10
14
|
export const RECURSION_LIMIT_DEFAULT = 25;
|
|
11
15
|
export const TAG_HIDDEN = "langsmith:hidden";
|
|
12
16
|
export const TASKS = "__pregel_tasks";
|
|
17
|
+
export const PUSH = "__pregel_push";
|
|
18
|
+
export const PULL = "__pregel_pull";
|
|
13
19
|
export const TASK_NAMESPACE = "6ba7b831-9dad-11d1-80b4-00c04fd430c8";
|
|
14
20
|
export const RESERVED = [
|
|
15
21
|
INTERRUPT,
|
|
@@ -19,9 +25,13 @@ export const RESERVED = [
|
|
|
19
25
|
CONFIG_KEY_READ,
|
|
20
26
|
CONFIG_KEY_CHECKPOINTER,
|
|
21
27
|
CONFIG_KEY_RESUMING,
|
|
28
|
+
CONFIG_KEY_TASK_ID,
|
|
29
|
+
CONFIG_KEY_STREAM,
|
|
30
|
+
CONFIG_KEY_CHECKPOINT_MAP,
|
|
22
31
|
INPUT,
|
|
23
32
|
];
|
|
24
33
|
export const CHECKPOINT_NAMESPACE_SEPARATOR = "|";
|
|
34
|
+
export const CHECKPOINT_NAMESPACE_END = ":";
|
|
25
35
|
export function _isSendInterface(x) {
|
|
26
36
|
const operation = x;
|
|
27
37
|
return typeof operation.node === "string" && operation.args !== undefined;
|
package/dist/errors.cjs
CHANGED
|
@@ -55,10 +55,11 @@ class NodeInterrupt extends GraphInterrupt {
|
|
|
55
55
|
}
|
|
56
56
|
exports.NodeInterrupt = NodeInterrupt;
|
|
57
57
|
function isGraphInterrupt(e) {
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
return (e !== undefined &&
|
|
59
|
+
[
|
|
60
|
+
GraphInterrupt.unminifiable_name,
|
|
61
|
+
NodeInterrupt.unminifiable_name,
|
|
62
|
+
].includes(e.name));
|
|
62
63
|
}
|
|
63
64
|
exports.isGraphInterrupt = isGraphInterrupt;
|
|
64
65
|
class EmptyInputError extends Error {
|
package/dist/errors.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare class NodeInterrupt extends GraphInterrupt {
|
|
|
17
17
|
constructor(message: string);
|
|
18
18
|
static get unminifiable_name(): string;
|
|
19
19
|
}
|
|
20
|
-
export declare function isGraphInterrupt(e
|
|
20
|
+
export declare function isGraphInterrupt(e?: GraphInterrupt | Error): e is GraphInterrupt;
|
|
21
21
|
export declare class EmptyInputError extends Error {
|
|
22
22
|
constructor(message?: string);
|
|
23
23
|
static get unminifiable_name(): string;
|
package/dist/errors.js
CHANGED
|
@@ -48,10 +48,11 @@ export class NodeInterrupt extends GraphInterrupt {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
export function isGraphInterrupt(e) {
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
return (e !== undefined &&
|
|
52
|
+
[
|
|
53
|
+
GraphInterrupt.unminifiable_name,
|
|
54
|
+
NodeInterrupt.unminifiable_name,
|
|
55
|
+
].includes(e.name));
|
|
55
56
|
}
|
|
56
57
|
export class EmptyInputError extends Error {
|
|
57
58
|
constructor(message) {
|
package/dist/graph/graph.cjs
CHANGED
|
@@ -123,8 +123,13 @@ class Graph {
|
|
|
123
123
|
return this.edges;
|
|
124
124
|
}
|
|
125
125
|
addNode(key, action, options) {
|
|
126
|
-
|
|
127
|
-
|
|
126
|
+
for (const reservedChar of [
|
|
127
|
+
constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR,
|
|
128
|
+
constants_js_1.CHECKPOINT_NAMESPACE_END,
|
|
129
|
+
]) {
|
|
130
|
+
if (key.includes(reservedChar)) {
|
|
131
|
+
throw new Error(`"${reservedChar}" is a reserved character and is not allowed in node names.`);
|
|
132
|
+
}
|
|
128
133
|
}
|
|
129
134
|
this.warnIfCompiled(`Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`);
|
|
130
135
|
if (key in this.nodes) {
|
package/dist/graph/graph.js
CHANGED
|
@@ -6,7 +6,7 @@ import { PregelNode } from "../pregel/read.js";
|
|
|
6
6
|
import { Channel, Pregel } from "../pregel/index.js";
|
|
7
7
|
import { EphemeralValue } from "../channels/ephemeral_value.js";
|
|
8
8
|
import { ChannelWrite, PASSTHROUGH } from "../pregel/write.js";
|
|
9
|
-
import { _isSend, CHECKPOINT_NAMESPACE_SEPARATOR, TAG_HIDDEN, } from "../constants.js";
|
|
9
|
+
import { _isSend, CHECKPOINT_NAMESPACE_END, CHECKPOINT_NAMESPACE_SEPARATOR, TAG_HIDDEN, } from "../constants.js";
|
|
10
10
|
import { RunnableCallable } from "../utils.js";
|
|
11
11
|
import { InvalidUpdateError, NodeInterrupt } from "../errors.js";
|
|
12
12
|
/** Special reserved node name denoting the start of a graph. */
|
|
@@ -119,8 +119,13 @@ export class Graph {
|
|
|
119
119
|
return this.edges;
|
|
120
120
|
}
|
|
121
121
|
addNode(key, action, options) {
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
for (const reservedChar of [
|
|
123
|
+
CHECKPOINT_NAMESPACE_SEPARATOR,
|
|
124
|
+
CHECKPOINT_NAMESPACE_END,
|
|
125
|
+
]) {
|
|
126
|
+
if (key.includes(reservedChar)) {
|
|
127
|
+
throw new Error(`"${reservedChar}" is a reserved character and is not allowed in node names.`);
|
|
128
|
+
}
|
|
124
129
|
}
|
|
125
130
|
this.warnIfCompiled(`Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`);
|
|
126
131
|
if (key in this.nodes) {
|
package/dist/graph/message.cjs
CHANGED
|
@@ -19,11 +19,13 @@ function messagesStateReducer(left, right) {
|
|
|
19
19
|
for (const m of leftMessages) {
|
|
20
20
|
if (m.id === null || m.id === undefined) {
|
|
21
21
|
m.id = (0, uuid_1.v4)();
|
|
22
|
+
m.lc_kwargs.id = m.id;
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
for (const m of rightMessages) {
|
|
25
26
|
if (m.id === null || m.id === undefined) {
|
|
26
27
|
m.id = (0, uuid_1.v4)();
|
|
28
|
+
m.lc_kwargs.id = m.id;
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
// merge
|
package/dist/graph/message.js
CHANGED
|
@@ -16,11 +16,13 @@ export function messagesStateReducer(left, right) {
|
|
|
16
16
|
for (const m of leftMessages) {
|
|
17
17
|
if (m.id === null || m.id === undefined) {
|
|
18
18
|
m.id = v4();
|
|
19
|
+
m.lc_kwargs.id = m.id;
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
for (const m of rightMessages) {
|
|
22
23
|
if (m.id === null || m.id === undefined) {
|
|
23
24
|
m.id = v4();
|
|
25
|
+
m.lc_kwargs.id = m.id;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
// merge
|
package/dist/graph/state.cjs
CHANGED
|
@@ -124,7 +124,7 @@ class StateGraph extends graph_js_1.Graph {
|
|
|
124
124
|
writable: true,
|
|
125
125
|
value: new Map()
|
|
126
126
|
});
|
|
127
|
-
/** @internal */
|
|
127
|
+
/** @internal Used only for typing. */
|
|
128
128
|
Object.defineProperty(this, "_configSchema", {
|
|
129
129
|
enumerable: true,
|
|
130
130
|
configurable: true,
|
|
@@ -198,8 +198,13 @@ class StateGraph extends graph_js_1.Graph {
|
|
|
198
198
|
if (key in this.channels) {
|
|
199
199
|
throw new Error(`${key} is already being used as a state attribute (a.k.a. a channel), cannot also be used as a node name.`);
|
|
200
200
|
}
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
for (const reservedChar of [
|
|
202
|
+
constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR,
|
|
203
|
+
constants_js_1.CHECKPOINT_NAMESPACE_END,
|
|
204
|
+
]) {
|
|
205
|
+
if (key.includes(reservedChar)) {
|
|
206
|
+
throw new Error(`"${reservedChar}" is a reserved character and is not allowed in node names.`);
|
|
207
|
+
}
|
|
203
208
|
}
|
|
204
209
|
this.warnIfCompiled(`Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`);
|
|
205
210
|
if (key in this.nodes) {
|
|
@@ -259,9 +264,6 @@ class StateGraph extends graph_js_1.Graph {
|
|
|
259
264
|
// create empty compiled graph
|
|
260
265
|
const compiled = new CompiledStateGraph({
|
|
261
266
|
builder: this,
|
|
262
|
-
configKeys: this._configSchema
|
|
263
|
-
? Object.keys(this._configSchema)
|
|
264
|
-
: undefined,
|
|
265
267
|
checkpointer,
|
|
266
268
|
interruptAfter,
|
|
267
269
|
interruptBefore,
|
|
@@ -388,7 +390,7 @@ class CompiledStateGraph extends graph_js_1.CompiledGraph {
|
|
|
388
390
|
}
|
|
389
391
|
}
|
|
390
392
|
else if (start === graph_js_1.START) {
|
|
391
|
-
const channelName =
|
|
393
|
+
const channelName = `${graph_js_1.START}:${end}`;
|
|
392
394
|
// register channel
|
|
393
395
|
this.channels[channelName] =
|
|
394
396
|
new ephemeral_value_js_1.EphemeralValue();
|
package/dist/graph/state.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { All, BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
|
|
|
3
3
|
import { BaseChannel } from "../channels/base.js";
|
|
4
4
|
import { END, CompiledGraph, Graph, START, Branch, AddNodeOptions, NodeSpec } from "./graph.js";
|
|
5
5
|
import { AnnotationRoot, SingleReducer, StateDefinition, StateType, UpdateType } from "./annotation.js";
|
|
6
|
-
import type { RetryPolicy } from "../pregel/utils.js";
|
|
6
|
+
import type { RetryPolicy } from "../pregel/utils/index.js";
|
|
7
7
|
import { BaseStore } from "../store/base.js";
|
|
8
8
|
import { ManagedValueSpec } from "../managed/base.js";
|
|
9
9
|
export type ChannelReducers<Channels extends object> = {
|
|
@@ -109,7 +109,7 @@ export declare class StateGraph<SD extends StateDefinition | unknown, S = SD ext
|
|
|
109
109
|
* @internal
|
|
110
110
|
*/
|
|
111
111
|
_schemaDefinitions: Map<any, any>;
|
|
112
|
-
/** @internal */
|
|
112
|
+
/** @internal Used only for typing. */
|
|
113
113
|
_configSchema: C | undefined;
|
|
114
114
|
constructor(fields: SD extends StateDefinition ? SD | AnnotationRoot<SD> | StateGraphArgs<S> | StateGraphArgsWithStateSchema<SD, I, O> | StateGraphArgsWithInputOutputSchemas<SD, O> : StateGraphArgs<S>, configSchema?: AnnotationRoot<C>);
|
|
115
115
|
get allEdges(): Set<[string, string]>;
|
package/dist/graph/state.js
CHANGED
|
@@ -7,7 +7,7 @@ import { ChannelRead, PregelNode } from "../pregel/read.js";
|
|
|
7
7
|
import { NamedBarrierValue } from "../channels/named_barrier_value.js";
|
|
8
8
|
import { EphemeralValue } from "../channels/ephemeral_value.js";
|
|
9
9
|
import { RunnableCallable } from "../utils.js";
|
|
10
|
-
import { _isSend, CHECKPOINT_NAMESPACE_SEPARATOR, TAG_HIDDEN, } from "../constants.js";
|
|
10
|
+
import { _isSend, CHECKPOINT_NAMESPACE_END, CHECKPOINT_NAMESPACE_SEPARATOR, TAG_HIDDEN, } from "../constants.js";
|
|
11
11
|
import { InvalidUpdateError } from "../errors.js";
|
|
12
12
|
import { getChannel, } from "./annotation.js";
|
|
13
13
|
import { isConfiguredManagedValue } from "../managed/base.js";
|
|
@@ -121,7 +121,7 @@ export class StateGraph extends Graph {
|
|
|
121
121
|
writable: true,
|
|
122
122
|
value: new Map()
|
|
123
123
|
});
|
|
124
|
-
/** @internal */
|
|
124
|
+
/** @internal Used only for typing. */
|
|
125
125
|
Object.defineProperty(this, "_configSchema", {
|
|
126
126
|
enumerable: true,
|
|
127
127
|
configurable: true,
|
|
@@ -195,8 +195,13 @@ export class StateGraph extends Graph {
|
|
|
195
195
|
if (key in this.channels) {
|
|
196
196
|
throw new Error(`${key} is already being used as a state attribute (a.k.a. a channel), cannot also be used as a node name.`);
|
|
197
197
|
}
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
for (const reservedChar of [
|
|
199
|
+
CHECKPOINT_NAMESPACE_SEPARATOR,
|
|
200
|
+
CHECKPOINT_NAMESPACE_END,
|
|
201
|
+
]) {
|
|
202
|
+
if (key.includes(reservedChar)) {
|
|
203
|
+
throw new Error(`"${reservedChar}" is a reserved character and is not allowed in node names.`);
|
|
204
|
+
}
|
|
200
205
|
}
|
|
201
206
|
this.warnIfCompiled(`Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`);
|
|
202
207
|
if (key in this.nodes) {
|
|
@@ -256,9 +261,6 @@ export class StateGraph extends Graph {
|
|
|
256
261
|
// create empty compiled graph
|
|
257
262
|
const compiled = new CompiledStateGraph({
|
|
258
263
|
builder: this,
|
|
259
|
-
configKeys: this._configSchema
|
|
260
|
-
? Object.keys(this._configSchema)
|
|
261
|
-
: undefined,
|
|
262
264
|
checkpointer,
|
|
263
265
|
interruptAfter,
|
|
264
266
|
interruptBefore,
|
|
@@ -384,7 +386,7 @@ export class CompiledStateGraph extends CompiledGraph {
|
|
|
384
386
|
}
|
|
385
387
|
}
|
|
386
388
|
else if (start === START) {
|
|
387
|
-
const channelName =
|
|
389
|
+
const channelName = `${START}:${end}`;
|
|
388
390
|
// register channel
|
|
389
391
|
this.channels[channelName] =
|
|
390
392
|
new EphemeralValue();
|
|
@@ -44,7 +44,7 @@ class SharedValue extends base_js_1.WritableManagedValue {
|
|
|
44
44
|
this.ns = `scoped:${this.scope}:${params.key}:${scopedValueString}`;
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
throw new Error(`
|
|
47
|
+
throw new Error(`Required scope "${this.scope}" for shared state key was not passed in "config.configurable".`);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -41,7 +41,7 @@ export class SharedValue extends WritableManagedValue {
|
|
|
41
41
|
this.ns = `scoped:${this.scope}:${params.key}:${scopedValueString}`;
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
44
|
-
throw new Error(`
|
|
44
|
+
throw new Error(`Required scope "${this.scope}" for shared state key was not passed in "config.configurable".`);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
package/dist/pregel/algo.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports._prepareNextTasks = exports._applyWrites = exports._localWrite = exports._localRead = exports.shouldInterrupt = exports.increment = void 0;
|
|
3
|
+
exports._prepareSingleTask = exports._prepareNextTasks = exports._applyWrites = exports._localWrite = exports._localRead = exports.shouldInterrupt = exports.increment = void 0;
|
|
4
4
|
/* eslint-disable no-param-reassign */
|
|
5
5
|
const runnables_1 = require("@langchain/core/runnables");
|
|
6
6
|
const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
|
|
@@ -8,7 +8,7 @@ const base_js_1 = require("../channels/base.cjs");
|
|
|
8
8
|
const io_js_1 = require("./io.cjs");
|
|
9
9
|
const constants_js_1 = require("../constants.cjs");
|
|
10
10
|
const errors_js_1 = require("../errors.cjs");
|
|
11
|
-
const
|
|
11
|
+
const index_js_1 = require("./utils/index.cjs");
|
|
12
12
|
const increment = (current) => {
|
|
13
13
|
return current !== undefined ? current + 1 : 1;
|
|
14
14
|
};
|
|
@@ -204,48 +204,84 @@ getNextVersion) {
|
|
|
204
204
|
}
|
|
205
205
|
exports._applyWrites = _applyWrites;
|
|
206
206
|
function _prepareNextTasks(checkpoint, processes, channels, managed, config, forExecution, extra) {
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
207
|
+
const tasks = {};
|
|
208
|
+
// Consume pending packets
|
|
209
|
+
for (let i = 0; i < checkpoint.pending_sends.length; i += 1) {
|
|
210
|
+
const task = _prepareSingleTask([constants_js_1.PUSH, i], checkpoint, processes, channels, managed, config, forExecution, extra);
|
|
211
|
+
if (task !== undefined) {
|
|
212
|
+
tasks[task.id] = task;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Check if any processes should be run in next step
|
|
216
|
+
// If so, prepare the values to be passed to them
|
|
217
|
+
for (const name of Object.keys(processes)) {
|
|
218
|
+
const task = _prepareSingleTask([constants_js_1.PULL, name], checkpoint, processes, channels, managed, config, forExecution, extra);
|
|
219
|
+
if (task !== undefined) {
|
|
220
|
+
tasks[task.id] = task;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return tasks;
|
|
224
|
+
}
|
|
225
|
+
exports._prepareNextTasks = _prepareNextTasks;
|
|
226
|
+
function _prepareSingleTask(taskPath, checkpoint, processes, channels, managed, config, forExecution, extra) {
|
|
227
|
+
const { step, checkpointer, manager } = extra;
|
|
228
|
+
const configurable = config.configurable ?? {};
|
|
229
|
+
const parentNamespace = configurable.checkpoint_ns ?? "";
|
|
230
|
+
if (taskPath[0] === constants_js_1.PUSH) {
|
|
231
|
+
const index = typeof taskPath[1] === "number" ? taskPath[1] : parseInt(taskPath[1], 10);
|
|
232
|
+
if (index >= checkpoint.pending_sends.length) {
|
|
233
|
+
return undefined;
|
|
234
|
+
}
|
|
235
|
+
const packet = checkpoint.pending_sends[index];
|
|
212
236
|
if (!(0, constants_js_1._isSendInterface)(packet)) {
|
|
213
237
|
console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
|
|
214
|
-
|
|
238
|
+
return undefined;
|
|
215
239
|
}
|
|
216
240
|
if (!(packet.node in processes)) {
|
|
217
241
|
console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
|
|
218
|
-
|
|
242
|
+
return undefined;
|
|
219
243
|
}
|
|
220
|
-
const triggers = [constants_js_1.
|
|
221
|
-
const metadata = (0, utils_js_1._getIdMetadata)({
|
|
222
|
-
langgraph_step: step,
|
|
223
|
-
langgraph_node: packet.node,
|
|
224
|
-
langgraph_triggers: triggers,
|
|
225
|
-
langgraph_task_idx: forExecution ? tasks.length : taskDescriptions.length,
|
|
226
|
-
});
|
|
244
|
+
const triggers = [constants_js_1.PUSH];
|
|
227
245
|
const checkpointNamespace = parentNamespace === ""
|
|
228
246
|
? packet.node
|
|
229
247
|
: `${parentNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
|
|
230
|
-
const taskId = (0, langgraph_checkpoint_1.uuid5)(JSON.stringify([
|
|
248
|
+
const taskId = (0, langgraph_checkpoint_1.uuid5)(JSON.stringify([
|
|
249
|
+
checkpointNamespace,
|
|
250
|
+
step.toString(),
|
|
251
|
+
packet.node,
|
|
252
|
+
constants_js_1.PUSH,
|
|
253
|
+
index.toString(),
|
|
254
|
+
]), checkpoint.id);
|
|
255
|
+
const taskCheckpointNamespace = `${checkpointNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_END}${taskId}`;
|
|
256
|
+
let metadata = {
|
|
257
|
+
langgraph_step: step,
|
|
258
|
+
langgraph_node: packet.node,
|
|
259
|
+
langgraph_triggers: triggers,
|
|
260
|
+
langgraph_path: taskPath,
|
|
261
|
+
langgraph_checkpoint_ns: taskCheckpointNamespace,
|
|
262
|
+
};
|
|
231
263
|
if (forExecution) {
|
|
232
264
|
const proc = processes[packet.node];
|
|
233
265
|
const node = proc.getNode();
|
|
234
266
|
if (node !== undefined) {
|
|
235
|
-
const writes = [];
|
|
236
267
|
managed.replaceRuntimePlaceholders(step, packet.args);
|
|
237
|
-
|
|
268
|
+
if (proc.metadata !== undefined) {
|
|
269
|
+
metadata = { ...metadata, ...proc.metadata };
|
|
270
|
+
}
|
|
271
|
+
const writes = [];
|
|
272
|
+
return {
|
|
238
273
|
name: packet.node,
|
|
239
274
|
input: packet.args,
|
|
240
275
|
proc: node,
|
|
241
276
|
writes,
|
|
242
|
-
|
|
243
|
-
config: (0, runnables_1.patchConfig)((0, runnables_1.mergeConfigs)(config, processes[packet.node].config, {
|
|
277
|
+
config: (0, runnables_1.patchConfig)((0, runnables_1.mergeConfigs)(config, {
|
|
244
278
|
metadata,
|
|
279
|
+
tags: proc.tags,
|
|
245
280
|
}), {
|
|
246
281
|
runName: packet.node,
|
|
247
282
|
callbacks: manager?.getChild(`graph:step:${step}`),
|
|
248
283
|
configurable: {
|
|
284
|
+
[constants_js_1.CONFIG_KEY_TASK_ID]: taskId,
|
|
249
285
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
250
286
|
[constants_js_1.CONFIG_KEY_SEND]: (writes_) => _localWrite(step, (items) => writes.push(...items), processes, channels, managed, writes_),
|
|
251
287
|
[constants_js_1.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(step, checkpoint, channels, managed, {
|
|
@@ -253,24 +289,36 @@ function _prepareNextTasks(checkpoint, processes, channels, managed, config, for
|
|
|
253
289
|
writes: writes,
|
|
254
290
|
triggers,
|
|
255
291
|
}, select_, fresh_),
|
|
292
|
+
[constants_js_1.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[constants_js_1.CONFIG_KEY_CHECKPOINTER],
|
|
293
|
+
[constants_js_1.CONFIG_KEY_CHECKPOINT_MAP]: {
|
|
294
|
+
...configurable[constants_js_1.CONFIG_KEY_CHECKPOINT_MAP],
|
|
295
|
+
[parentNamespace]: checkpoint.id,
|
|
296
|
+
},
|
|
297
|
+
checkpoint_id: undefined,
|
|
298
|
+
checkpoint_ns: taskCheckpointNamespace,
|
|
256
299
|
},
|
|
257
300
|
}),
|
|
258
|
-
|
|
301
|
+
triggers,
|
|
259
302
|
retry_policy: proc.retryPolicy,
|
|
260
|
-
|
|
303
|
+
id: taskId,
|
|
304
|
+
path: taskPath,
|
|
305
|
+
};
|
|
261
306
|
}
|
|
262
307
|
}
|
|
263
308
|
else {
|
|
264
|
-
|
|
309
|
+
return { id: taskId, name: packet.node, interrupts: [], path: taskPath };
|
|
265
310
|
}
|
|
266
311
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
312
|
+
else if (taskPath[0] === constants_js_1.PULL) {
|
|
313
|
+
const name = taskPath[1].toString();
|
|
314
|
+
const proc = processes[name];
|
|
315
|
+
if (proc === undefined) {
|
|
316
|
+
return undefined;
|
|
317
|
+
}
|
|
318
|
+
const nullVersion = (0, index_js_1.getNullChannelVersion)(checkpoint.channel_versions);
|
|
319
|
+
if (nullVersion === undefined) {
|
|
320
|
+
return undefined;
|
|
321
|
+
}
|
|
274
322
|
const seen = checkpoint.versions_seen[name] ?? {};
|
|
275
323
|
const triggers = proc.triggers
|
|
276
324
|
.filter((chan) => {
|
|
@@ -288,60 +336,77 @@ function _prepareNextTasks(checkpoint, processes, channels, managed, config, for
|
|
|
288
336
|
if (triggers.length > 0) {
|
|
289
337
|
const val = _procInput(step, proc, managed, channels, forExecution);
|
|
290
338
|
if (val === undefined) {
|
|
291
|
-
|
|
339
|
+
return undefined;
|
|
292
340
|
}
|
|
293
|
-
const metadata = (0, utils_js_1._getIdMetadata)({
|
|
294
|
-
langgraph_step: step,
|
|
295
|
-
langgraph_node: name,
|
|
296
|
-
langgraph_triggers: triggers,
|
|
297
|
-
langgraph_task_idx: forExecution
|
|
298
|
-
? tasks.length
|
|
299
|
-
: taskDescriptions.length,
|
|
300
|
-
});
|
|
301
341
|
const checkpointNamespace = parentNamespace === ""
|
|
302
342
|
? name
|
|
303
343
|
: `${parentNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
|
|
304
|
-
const taskId = (0, langgraph_checkpoint_1.uuid5)(JSON.stringify([
|
|
344
|
+
const taskId = (0, langgraph_checkpoint_1.uuid5)(JSON.stringify([
|
|
345
|
+
checkpointNamespace,
|
|
346
|
+
step.toString(),
|
|
347
|
+
name,
|
|
348
|
+
constants_js_1.PULL,
|
|
349
|
+
triggers,
|
|
350
|
+
]), checkpoint.id);
|
|
351
|
+
const taskCheckpointNamespace = `${checkpointNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_END}${taskId}`;
|
|
352
|
+
let metadata = {
|
|
353
|
+
langgraph_step: step,
|
|
354
|
+
langgraph_node: name,
|
|
355
|
+
langgraph_triggers: triggers,
|
|
356
|
+
langgraph_path: taskPath,
|
|
357
|
+
langgraph_checkpoint_ns: taskCheckpointNamespace,
|
|
358
|
+
};
|
|
305
359
|
if (forExecution) {
|
|
306
360
|
const node = proc.getNode();
|
|
307
361
|
if (node !== undefined) {
|
|
362
|
+
if (proc.metadata !== undefined) {
|
|
363
|
+
metadata = { ...metadata, ...proc.metadata };
|
|
364
|
+
}
|
|
308
365
|
const writes = [];
|
|
309
|
-
|
|
366
|
+
const taskCheckpointNamespace = `${checkpointNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_END}${taskId}`;
|
|
367
|
+
return {
|
|
310
368
|
name,
|
|
311
369
|
input: val,
|
|
312
370
|
proc: node,
|
|
313
371
|
writes,
|
|
314
|
-
|
|
315
|
-
config: (0, runnables_1.patchConfig)((0, runnables_1.mergeConfigs)(config, proc.config, { metadata }), {
|
|
372
|
+
config: (0, runnables_1.patchConfig)((0, runnables_1.mergeConfigs)(config, { metadata, tags: proc.tags }), {
|
|
316
373
|
runName: name,
|
|
317
374
|
callbacks: manager?.getChild(`graph:step:${step}`),
|
|
318
375
|
configurable: {
|
|
376
|
+
[constants_js_1.CONFIG_KEY_TASK_ID]: taskId,
|
|
319
377
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
320
|
-
[constants_js_1.CONFIG_KEY_SEND]: (writes_) => _localWrite(step, (items) =>
|
|
378
|
+
[constants_js_1.CONFIG_KEY_SEND]: (writes_) => _localWrite(step, (items) => {
|
|
379
|
+
writes.push(...items);
|
|
380
|
+
}, processes, channels, managed, writes_),
|
|
321
381
|
[constants_js_1.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(step, checkpoint, channels, managed, {
|
|
322
382
|
name,
|
|
323
383
|
writes: writes,
|
|
324
384
|
triggers,
|
|
325
385
|
}, select_, fresh_),
|
|
326
|
-
[constants_js_1.CONFIG_KEY_CHECKPOINTER]: checkpointer,
|
|
327
|
-
[constants_js_1.
|
|
328
|
-
|
|
329
|
-
|
|
386
|
+
[constants_js_1.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[constants_js_1.CONFIG_KEY_CHECKPOINTER],
|
|
387
|
+
[constants_js_1.CONFIG_KEY_CHECKPOINT_MAP]: {
|
|
388
|
+
...configurable[constants_js_1.CONFIG_KEY_CHECKPOINT_MAP],
|
|
389
|
+
[parentNamespace]: checkpoint.id,
|
|
390
|
+
},
|
|
391
|
+
checkpoint_id: undefined,
|
|
392
|
+
checkpoint_ns: taskCheckpointNamespace,
|
|
330
393
|
},
|
|
331
394
|
}),
|
|
332
|
-
|
|
395
|
+
triggers,
|
|
333
396
|
retry_policy: proc.retryPolicy,
|
|
334
|
-
|
|
397
|
+
id: taskId,
|
|
398
|
+
path: taskPath,
|
|
399
|
+
};
|
|
335
400
|
}
|
|
336
401
|
}
|
|
337
402
|
else {
|
|
338
|
-
|
|
403
|
+
return { id: taskId, name, interrupts: [], path: taskPath };
|
|
339
404
|
}
|
|
340
405
|
}
|
|
341
406
|
}
|
|
342
|
-
return
|
|
407
|
+
return undefined;
|
|
343
408
|
}
|
|
344
|
-
exports.
|
|
409
|
+
exports._prepareSingleTask = _prepareSingleTask;
|
|
345
410
|
function _procInput(step, proc, managed, channels, forExecution) {
|
|
346
411
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
347
412
|
let val;
|
package/dist/pregel/algo.d.ts
CHANGED
|
@@ -27,5 +27,8 @@ export type NextTaskExtraFields = {
|
|
|
27
27
|
checkpointer?: BaseCheckpointSaver;
|
|
28
28
|
manager?: CallbackManagerForChainRun;
|
|
29
29
|
};
|
|
30
|
-
export declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription
|
|
31
|
-
export declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc
|
|
30
|
+
export declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): Record<string, PregelTaskDescription>;
|
|
31
|
+
export declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;
|
|
32
|
+
export declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: [string, string | number], checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription | undefined;
|
|
33
|
+
export declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: [string, string | number], checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;
|
|
34
|
+
export declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: [string, string | number], checkpoint: ReadonlyCheckpoint, processes: Nn, channels: Cc, managed: ManagedValueMapping, config: RunnableConfig, forExecution: boolean, extra: NextTaskExtraFields): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;
|