@langchain/langgraph 1.3.7 → 1.4.1
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/base.cjs +78 -2
- package/dist/channels/base.cjs.map +1 -1
- package/dist/channels/base.d.cts +35 -2
- package/dist/channels/base.d.cts.map +1 -1
- package/dist/channels/base.d.ts +35 -2
- package/dist/channels/base.d.ts.map +1 -1
- package/dist/channels/base.js +77 -4
- package/dist/channels/base.js.map +1 -1
- package/dist/channels/delta.cjs +136 -0
- package/dist/channels/delta.cjs.map +1 -0
- package/dist/channels/delta.d.cts +99 -0
- package/dist/channels/delta.d.cts.map +1 -0
- package/dist/channels/delta.d.ts +99 -0
- package/dist/channels/delta.d.ts.map +1 -0
- package/dist/channels/delta.js +136 -0
- package/dist/channels/delta.js.map +1 -0
- package/dist/channels/index.cjs +5 -0
- package/dist/channels/index.d.cts +3 -2
- package/dist/channels/index.d.ts +3 -2
- package/dist/channels/index.js +3 -2
- package/dist/constants.cjs +63 -4
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +33 -2
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +33 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +59 -5
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +128 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +86 -1
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.ts +86 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +123 -1
- package/dist/errors.js.map +1 -1
- package/dist/func/index.cjs +9 -2
- package/dist/func/index.cjs.map +1 -1
- package/dist/func/index.d.cts +14 -0
- package/dist/func/index.d.cts.map +1 -1
- package/dist/func/index.d.ts +14 -0
- package/dist/func/index.d.ts.map +1 -1
- package/dist/func/index.js +9 -2
- package/dist/func/index.js.map +1 -1
- package/dist/graph/graph.cjs +44 -7
- package/dist/graph/graph.cjs.map +1 -1
- package/dist/graph/graph.d.cts +24 -2
- package/dist/graph/graph.d.cts.map +1 -1
- package/dist/graph/graph.d.ts +24 -2
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +44 -7
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/index.d.ts +3 -3
- package/dist/graph/messages_reducer.cjs +55 -0
- package/dist/graph/messages_reducer.cjs.map +1 -1
- package/dist/graph/messages_reducer.d.cts +28 -1
- package/dist/graph/messages_reducer.d.cts.map +1 -1
- package/dist/graph/messages_reducer.d.ts +28 -1
- package/dist/graph/messages_reducer.d.ts.map +1 -1
- package/dist/graph/messages_reducer.js +56 -2
- package/dist/graph/messages_reducer.js.map +1 -1
- package/dist/graph/state.cjs +208 -12
- package/dist/graph/state.cjs.map +1 -1
- package/dist/graph/state.d.cts +193 -17
- package/dist/graph/state.d.cts.map +1 -1
- package/dist/graph/state.d.ts +193 -17
- package/dist/graph/state.d.ts.map +1 -1
- package/dist/graph/state.js +210 -14
- package/dist/graph/state.js.map +1 -1
- package/dist/graph/zod/schema.cjs +5 -0
- package/dist/graph/zod/schema.cjs.map +1 -1
- package/dist/graph/zod/schema.d.cts.map +1 -1
- package/dist/graph/zod/schema.d.ts.map +1 -1
- package/dist/graph/zod/schema.js +5 -0
- package/dist/graph/zod/schema.js.map +1 -1
- package/dist/index.cjs +11 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -8
- package/dist/index.d.ts +11 -8
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/prebuilt/react_agent_executor.d.cts +1 -1
- package/dist/prebuilt/tool_node.cjs +69 -6
- package/dist/prebuilt/tool_node.cjs.map +1 -1
- package/dist/prebuilt/tool_node.d.cts +55 -3
- package/dist/prebuilt/tool_node.d.cts.map +1 -1
- package/dist/prebuilt/tool_node.d.ts +55 -3
- package/dist/prebuilt/tool_node.d.ts.map +1 -1
- package/dist/prebuilt/tool_node.js +69 -6
- package/dist/prebuilt/tool_node.js.map +1 -1
- package/dist/pregel/algo.cjs +182 -21
- package/dist/pregel/algo.cjs.map +1 -1
- package/dist/pregel/algo.d.cts +1 -1
- package/dist/pregel/algo.d.cts.map +1 -1
- package/dist/pregel/algo.d.ts +1 -1
- package/dist/pregel/algo.d.ts.map +1 -1
- package/dist/pregel/algo.js +185 -25
- package/dist/pregel/algo.js.map +1 -1
- package/dist/pregel/call.cjs +2 -1
- package/dist/pregel/call.cjs.map +1 -1
- package/dist/pregel/call.js +2 -1
- package/dist/pregel/call.js.map +1 -1
- package/dist/pregel/index.cjs +15 -3
- package/dist/pregel/index.cjs.map +1 -1
- package/dist/pregel/index.d.cts.map +1 -1
- package/dist/pregel/index.d.ts.map +1 -1
- package/dist/pregel/index.js +17 -5
- package/dist/pregel/index.js.map +1 -1
- package/dist/pregel/loop.cjs +362 -41
- package/dist/pregel/loop.cjs.map +1 -1
- package/dist/pregel/loop.js +365 -44
- package/dist/pregel/loop.js.map +1 -1
- package/dist/pregel/messages-v2.cjs +1 -1
- package/dist/pregel/messages-v2.js +1 -1
- package/dist/pregel/messages.cjs +1 -1
- package/dist/pregel/messages.js +1 -1
- package/dist/pregel/read.cjs +15 -5
- package/dist/pregel/read.cjs.map +1 -1
- package/dist/pregel/read.d.cts +9 -0
- package/dist/pregel/read.d.cts.map +1 -1
- package/dist/pregel/read.d.ts +9 -0
- package/dist/pregel/read.d.ts.map +1 -1
- package/dist/pregel/read.js +15 -5
- package/dist/pregel/read.js.map +1 -1
- package/dist/pregel/remote-run-stream.cjs +107 -0
- package/dist/pregel/remote-run-stream.cjs.map +1 -0
- package/dist/pregel/remote-run-stream.d.cts +33 -0
- package/dist/pregel/remote-run-stream.d.cts.map +1 -0
- package/dist/pregel/remote-run-stream.d.ts +33 -0
- package/dist/pregel/remote-run-stream.d.ts.map +1 -0
- package/dist/pregel/remote-run-stream.js +107 -0
- package/dist/pregel/remote-run-stream.js.map +1 -0
- package/dist/pregel/remote.cjs +61 -1
- package/dist/pregel/remote.cjs.map +1 -1
- package/dist/pregel/remote.d.cts +17 -0
- package/dist/pregel/remote.d.cts.map +1 -1
- package/dist/pregel/remote.d.ts +17 -0
- package/dist/pregel/remote.d.ts.map +1 -1
- package/dist/pregel/remote.js +61 -1
- package/dist/pregel/remote.js.map +1 -1
- package/dist/pregel/replay.cjs +62 -0
- package/dist/pregel/replay.cjs.map +1 -0
- package/dist/pregel/replay.js +62 -0
- package/dist/pregel/replay.js.map +1 -0
- package/dist/pregel/retry.cjs +8 -6
- package/dist/pregel/retry.cjs.map +1 -1
- package/dist/pregel/retry.js +8 -6
- package/dist/pregel/retry.js.map +1 -1
- package/dist/pregel/runnable_types.d.cts +20 -0
- package/dist/pregel/runnable_types.d.cts.map +1 -1
- package/dist/pregel/runnable_types.d.ts +20 -0
- package/dist/pregel/runnable_types.d.ts.map +1 -1
- package/dist/pregel/runner.cjs +48 -7
- package/dist/pregel/runner.cjs.map +1 -1
- package/dist/pregel/runner.js +50 -9
- package/dist/pregel/runner.js.map +1 -1
- package/dist/pregel/runtime.cjs +64 -0
- package/dist/pregel/runtime.cjs.map +1 -0
- package/dist/pregel/runtime.d.cts +57 -0
- package/dist/pregel/runtime.d.cts.map +1 -0
- package/dist/pregel/runtime.d.ts +57 -0
- package/dist/pregel/runtime.d.ts.map +1 -0
- package/dist/pregel/runtime.js +64 -0
- package/dist/pregel/runtime.js.map +1 -0
- package/dist/pregel/stream.cjs +2 -0
- package/dist/pregel/stream.cjs.map +1 -1
- package/dist/pregel/stream.js +2 -0
- package/dist/pregel/stream.js.map +1 -1
- package/dist/pregel/timeout.cjs +216 -0
- package/dist/pregel/timeout.cjs.map +1 -0
- package/dist/pregel/timeout.js +216 -0
- package/dist/pregel/timeout.js.map +1 -0
- package/dist/pregel/types.cjs +3 -1
- package/dist/pregel/types.cjs.map +1 -1
- package/dist/pregel/types.d.cts +13 -0
- package/dist/pregel/types.d.cts.map +1 -1
- package/dist/pregel/types.d.ts +14 -1
- package/dist/pregel/types.d.ts.map +1 -1
- package/dist/pregel/types.js +3 -1
- package/dist/pregel/types.js.map +1 -1
- package/dist/pregel/utils/config.cjs +18 -2
- package/dist/pregel/utils/config.cjs.map +1 -1
- package/dist/pregel/utils/config.d.cts +15 -1
- package/dist/pregel/utils/config.d.cts.map +1 -1
- package/dist/pregel/utils/config.d.ts +15 -1
- package/dist/pregel/utils/config.d.ts.map +1 -1
- package/dist/pregel/utils/config.js +18 -2
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/utils/index.cjs +1 -0
- package/dist/pregel/utils/index.cjs.map +1 -1
- package/dist/pregel/utils/index.d.cts +6 -1
- package/dist/pregel/utils/index.d.cts.map +1 -1
- package/dist/pregel/utils/index.d.ts +6 -1
- package/dist/pregel/utils/index.d.ts.map +1 -1
- package/dist/pregel/utils/index.js +1 -0
- package/dist/pregel/utils/index.js.map +1 -1
- package/dist/pregel/utils/timeout.cjs +34 -0
- package/dist/pregel/utils/timeout.cjs.map +1 -0
- package/dist/pregel/utils/timeout.d.cts +45 -0
- package/dist/pregel/utils/timeout.d.cts.map +1 -0
- package/dist/pregel/utils/timeout.d.ts +45 -0
- package/dist/pregel/utils/timeout.d.ts.map +1 -0
- package/dist/pregel/utils/timeout.js +34 -0
- package/dist/pregel/utils/timeout.js.map +1 -0
- package/dist/state/schema.cjs +12 -2
- package/dist/state/schema.cjs.map +1 -1
- package/dist/state/schema.d.cts.map +1 -1
- package/dist/state/schema.d.ts.map +1 -1
- package/dist/state/schema.js +12 -2
- package/dist/state/schema.js.map +1 -1
- package/dist/web.cjs +11 -0
- package/dist/web.d.cts +11 -8
- package/dist/web.d.ts +11 -8
- package/dist/web.js +5 -3
- package/package.json +5 -5
package/dist/graph/state.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const require_timeout = require("../pregel/utils/timeout.cjs");
|
|
1
2
|
const require_constants = require("../constants.cjs");
|
|
2
3
|
const require_errors = require("../errors.cjs");
|
|
3
4
|
const require_last_value = require("../channels/last_value.cjs");
|
|
@@ -5,6 +6,7 @@ const require_annotation = require("./annotation.cjs");
|
|
|
5
6
|
const require_utils = require("../utils.cjs");
|
|
6
7
|
const require_write = require("../pregel/write.cjs");
|
|
7
8
|
const require_read = require("../pregel/read.cjs");
|
|
9
|
+
require("../pregel/utils/index.cjs");
|
|
8
10
|
const require_subgraph = require("../pregel/utils/subgraph.cjs");
|
|
9
11
|
const require_ephemeral_value = require("../channels/ephemeral_value.cjs");
|
|
10
12
|
const require_graph = require("./graph.cjs");
|
|
@@ -17,6 +19,14 @@ let _langchain_core_runnables = require("@langchain/core/runnables");
|
|
|
17
19
|
let _langchain_core_utils_types = require("@langchain/core/utils/types");
|
|
18
20
|
//#region src/graph/state.ts
|
|
19
21
|
const ROOT = "__root__";
|
|
22
|
+
/**
|
|
23
|
+
* Reserved node name for the single shared error handler that is materialized
|
|
24
|
+
* when a graph-wide default error handler is set via
|
|
25
|
+
* {@link StateGraph.setNodeDefaults}. Every regular node that lacks its own
|
|
26
|
+
* `errorHandler` routes failures to this node. Mirrors Python's
|
|
27
|
+
* `__default_error_handler__`.
|
|
28
|
+
*/
|
|
29
|
+
const DEFAULT_ERROR_HANDLER_NODE = "__default_error_handler__";
|
|
20
30
|
const PartialStateSchema = Symbol.for("langgraph.state.partial");
|
|
21
31
|
/**
|
|
22
32
|
* A graph whose nodes communicate by reading and writing to a shared state.
|
|
@@ -140,6 +150,11 @@ var StateGraph = class extends require_graph.Graph {
|
|
|
140
150
|
_interrupt;
|
|
141
151
|
/** @internal */
|
|
142
152
|
_writer;
|
|
153
|
+
/**
|
|
154
|
+
* Graph-wide default node policies, resolved at `compile()` time.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
_nodeDefaults = {};
|
|
143
158
|
constructor(stateOrInit, options) {
|
|
144
159
|
super();
|
|
145
160
|
const init = this._normalizeToStateGraphInit(stateOrInit, options);
|
|
@@ -171,6 +186,89 @@ var StateGraph = class extends require_graph.Graph {
|
|
|
171
186
|
this._writer = init.writer;
|
|
172
187
|
}
|
|
173
188
|
/**
|
|
189
|
+
* Set graph-wide default node policies that apply to every node in this
|
|
190
|
+
* graph.
|
|
191
|
+
*
|
|
192
|
+
* Per-node values passed to {@link addNode} always take precedence over these
|
|
193
|
+
* defaults. Defaults are resolved at {@link compile} time, so call order does
|
|
194
|
+
* not matter — you may call this before or after `addNode`, including as the
|
|
195
|
+
* last step before `compile()`. Calling it multiple times merges the provided
|
|
196
|
+
* fields, with later calls overriding earlier ones on a per-field basis.
|
|
197
|
+
*
|
|
198
|
+
* Policies set here are **not** inherited by subgraphs.
|
|
199
|
+
*
|
|
200
|
+
* `retryPolicy` and `timeout` defaults apply to **all** nodes, including
|
|
201
|
+
* auto-generated error-handler nodes. `cachePolicy` and `errorHandler`
|
|
202
|
+
* defaults apply to **regular nodes only** — caching an error-handler result
|
|
203
|
+
* is unsafe, and a handler must never catch its own (or another handler's)
|
|
204
|
+
* failure.
|
|
205
|
+
*
|
|
206
|
+
* @param defaults - The default node policies to apply.
|
|
207
|
+
* @returns The builder instance, for chaining.
|
|
208
|
+
*
|
|
209
|
+
* @example Call before `addNode`
|
|
210
|
+
* ```ts
|
|
211
|
+
* const graph = new StateGraph(State)
|
|
212
|
+
* .setNodeDefaults({
|
|
213
|
+
* retryPolicy: { maxAttempts: 3 },
|
|
214
|
+
* cachePolicy: { ttl: 60 },
|
|
215
|
+
* timeout: 60_000,
|
|
216
|
+
* errorHandler: (state, { node, error }) => ({ lastError: error.message }),
|
|
217
|
+
* })
|
|
218
|
+
* .addNode("a", nodeA)
|
|
219
|
+
* .addNode("b", nodeB, { retryPolicy: { maxAttempts: 5 } }) // overrides default
|
|
220
|
+
* .addEdge(START, "a")
|
|
221
|
+
* .compile();
|
|
222
|
+
* ```
|
|
223
|
+
*
|
|
224
|
+
* @example Call after `addNode`, immediately before `compile()`
|
|
225
|
+
* ```ts
|
|
226
|
+
* const graph = new StateGraph(State)
|
|
227
|
+
* .addNode("a", nodeA)
|
|
228
|
+
* .addNode("b", nodeB, { retryPolicy: { maxAttempts: 5 } }) // overrides default
|
|
229
|
+
* .addEdge(START, "a")
|
|
230
|
+
* .setNodeDefaults({
|
|
231
|
+
* retryPolicy: { maxAttempts: 3 },
|
|
232
|
+
* cachePolicy: { ttl: 60 },
|
|
233
|
+
* })
|
|
234
|
+
* .compile();
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
setNodeDefaults(defaults) {
|
|
238
|
+
if (defaults.retryPolicy !== void 0) this._nodeDefaults.retryPolicy = defaults.retryPolicy;
|
|
239
|
+
if (defaults.cachePolicy !== void 0) this._nodeDefaults.cachePolicy = typeof defaults.cachePolicy === "boolean" ? defaults.cachePolicy ? {} : void 0 : defaults.cachePolicy;
|
|
240
|
+
if (defaults.timeout !== void 0) this._nodeDefaults.timeout = require_timeout.coerceTimeoutPolicy(defaults.timeout);
|
|
241
|
+
if (defaults.errorHandler !== void 0) this._nodeDefaults.errorHandler = defaults.errorHandler;
|
|
242
|
+
return this;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Build the shared spec for a graph-wide default error handler, or
|
|
246
|
+
* `undefined` when {@link setNodeDefaults} did not configure one. The spec is
|
|
247
|
+
* installed under {@link DEFAULT_ERROR_HANDLER_NODE} for the duration of a
|
|
248
|
+
* single {@link compile} call and routes failures from every regular node
|
|
249
|
+
* that lacks its own handler.
|
|
250
|
+
* @internal
|
|
251
|
+
*/
|
|
252
|
+
_createDefaultErrorHandlerSpec() {
|
|
253
|
+
const userHandler = this._nodeDefaults.errorHandler;
|
|
254
|
+
if (userHandler === void 0) return;
|
|
255
|
+
return {
|
|
256
|
+
runnable: new require_utils.RunnableCallable({
|
|
257
|
+
func: (state, config) => {
|
|
258
|
+
const nodeError = config?.configurable?.[require_constants.CONFIG_KEY_NODE_ERROR];
|
|
259
|
+
return userHandler(state, nodeError, config);
|
|
260
|
+
},
|
|
261
|
+
name: DEFAULT_ERROR_HANDLER_NODE,
|
|
262
|
+
trace: false
|
|
263
|
+
}),
|
|
264
|
+
metadata: void 0,
|
|
265
|
+
input: this._schemaDefinition,
|
|
266
|
+
retryPolicy: void 0,
|
|
267
|
+
cachePolicy: void 0,
|
|
268
|
+
isErrorHandler: true
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
174
272
|
* Normalize all constructor input patterns to a unified StateGraphInit object.
|
|
175
273
|
* @internal
|
|
176
274
|
*/
|
|
@@ -265,17 +363,42 @@ var StateGraph = class extends require_graph.Graph {
|
|
|
265
363
|
trace: false
|
|
266
364
|
});
|
|
267
365
|
else runnable = (0, _langchain_core_runnables._coerceToRunnable)(action);
|
|
268
|
-
|
|
269
|
-
|
|
366
|
+
const rawCachePolicy = options?.cachePolicy;
|
|
367
|
+
let cachePolicy;
|
|
368
|
+
if (rawCachePolicy !== void 0) cachePolicy = typeof rawCachePolicy === "boolean" ? rawCachePolicy ? {} : false : rawCachePolicy;
|
|
369
|
+
let errorHandlerNode;
|
|
370
|
+
if (options?.errorHandler !== void 0) {
|
|
371
|
+
errorHandlerNode = `__error_handler__${key}`;
|
|
372
|
+
if (errorHandlerNode in this.nodes) throw new Error(`Cannot add error handler to node \`${key}\`: the reserved name \`${errorHandlerNode}\` is already in use. StateGraph registers \`__error_handler__<nodeName>\` when you pass \`errorHandler\` in addNode options. Remove or rename the existing node with that name (for example, you may have added it manually).`);
|
|
373
|
+
const userHandler = options.errorHandler;
|
|
374
|
+
const handlerSpec = {
|
|
375
|
+
runnable: new require_utils.RunnableCallable({
|
|
376
|
+
func: (state, config) => {
|
|
377
|
+
const nodeError = config?.configurable?.[require_constants.CONFIG_KEY_NODE_ERROR];
|
|
378
|
+
return userHandler(state, nodeError, config);
|
|
379
|
+
},
|
|
380
|
+
name: errorHandlerNode,
|
|
381
|
+
trace: false
|
|
382
|
+
}),
|
|
383
|
+
metadata: void 0,
|
|
384
|
+
input: inputSpec ?? this._schemaDefinition,
|
|
385
|
+
retryPolicy: void 0,
|
|
386
|
+
cachePolicy: void 0,
|
|
387
|
+
isErrorHandler: true
|
|
388
|
+
};
|
|
389
|
+
this.nodes[errorHandlerNode] = handlerSpec;
|
|
390
|
+
}
|
|
270
391
|
const nodeSpec = {
|
|
271
392
|
runnable,
|
|
272
393
|
retryPolicy: options?.retryPolicy,
|
|
273
394
|
cachePolicy,
|
|
395
|
+
timeout: require_timeout.coerceTimeoutPolicy(options?.timeout),
|
|
274
396
|
metadata: options?.metadata,
|
|
275
397
|
input: inputSpec ?? this._schemaDefinition,
|
|
276
398
|
subgraphs: require_subgraph.isPregelLike(runnable) ? [runnable] : options?.subgraphs,
|
|
277
399
|
ends: options?.ends,
|
|
278
|
-
defer: options?.defer
|
|
400
|
+
defer: options?.defer,
|
|
401
|
+
errorHandlerNode
|
|
279
402
|
};
|
|
280
403
|
this.nodes[key] = nodeSpec;
|
|
281
404
|
}
|
|
@@ -300,13 +423,36 @@ var StateGraph = class extends require_graph.Graph {
|
|
|
300
423
|
for (const [key, action, options] of parsedNodes) {
|
|
301
424
|
if (key in this.nodes) throw new Error(`Node names must be unique: node with the name "${key}" already exists.`);
|
|
302
425
|
const validKey = key;
|
|
303
|
-
this.addNode(
|
|
426
|
+
this.addNode(key, action, options);
|
|
304
427
|
if (previousNode != null) this.addEdge(previousNode, validKey);
|
|
305
428
|
previousNode = validKey;
|
|
306
429
|
}
|
|
307
430
|
return this;
|
|
308
431
|
}
|
|
309
432
|
compile({ checkpointer, store, cache, interruptBefore, interruptAfter, name, description, transformers } = {}) {
|
|
433
|
+
const defaultErrorHandlerSpec = this._createDefaultErrorHandlerSpec();
|
|
434
|
+
if (defaultErrorHandlerSpec !== void 0) {
|
|
435
|
+
if (DEFAULT_ERROR_HANDLER_NODE in this.nodes) throw new Error(`Cannot apply a default error handler: the reserved node name \`${DEFAULT_ERROR_HANDLER_NODE}\` is already in use. setNodeDefaults({ errorHandler }) registers a node with that name; rename the conflicting node.`);
|
|
436
|
+
this.nodes[DEFAULT_ERROR_HANDLER_NODE] = defaultErrorHandlerSpec;
|
|
437
|
+
}
|
|
438
|
+
try {
|
|
439
|
+
return this._compileResolved({
|
|
440
|
+
checkpointer,
|
|
441
|
+
store,
|
|
442
|
+
cache,
|
|
443
|
+
interruptBefore,
|
|
444
|
+
interruptAfter,
|
|
445
|
+
name,
|
|
446
|
+
description,
|
|
447
|
+
transformers,
|
|
448
|
+
defaultErrorHandlerNode: defaultErrorHandlerSpec !== void 0 ? DEFAULT_ERROR_HANDLER_NODE : void 0
|
|
449
|
+
});
|
|
450
|
+
} finally {
|
|
451
|
+
if (defaultErrorHandlerSpec !== void 0) delete this.nodes[DEFAULT_ERROR_HANDLER_NODE];
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/** @internal */
|
|
455
|
+
_compileResolved({ checkpointer, store, cache, interruptBefore, interruptAfter, name, description, transformers, defaultErrorHandlerNode }) {
|
|
310
456
|
this.validate([...Array.isArray(interruptBefore) ? interruptBefore : [], ...Array.isArray(interruptAfter) ? interruptAfter : []]);
|
|
311
457
|
const outputKeys = Object.keys(this._schemaDefinitions.get(this._outputDefinition));
|
|
312
458
|
const outputChannels = outputKeys.length === 1 && outputKeys[0] === ROOT ? ROOT : outputKeys;
|
|
@@ -336,7 +482,19 @@ var StateGraph = class extends require_graph.Graph {
|
|
|
336
482
|
streamTransformers: transformers
|
|
337
483
|
});
|
|
338
484
|
compiled.attachNode(require_constants.START);
|
|
339
|
-
|
|
485
|
+
const nodeDefaults = this._nodeDefaults;
|
|
486
|
+
const hasNodeDefaults = nodeDefaults.retryPolicy !== void 0 || nodeDefaults.cachePolicy !== void 0 || nodeDefaults.timeout !== void 0 || defaultErrorHandlerNode !== void 0;
|
|
487
|
+
for (const [key, node] of Object.entries(this.nodes)) {
|
|
488
|
+
const isErrorHandlerNode = node.isErrorHandler === true;
|
|
489
|
+
const resolvedNode = hasNodeDefaults ? {
|
|
490
|
+
...node,
|
|
491
|
+
retryPolicy: node.retryPolicy ?? nodeDefaults.retryPolicy,
|
|
492
|
+
cachePolicy: isErrorHandlerNode ? void 0 : node.cachePolicy === false ? void 0 : node.cachePolicy ?? nodeDefaults.cachePolicy,
|
|
493
|
+
timeout: node.timeout ?? nodeDefaults.timeout,
|
|
494
|
+
errorHandlerNode: !isErrorHandlerNode && defaultErrorHandlerNode !== void 0 && node.errorHandlerNode === void 0 ? defaultErrorHandlerNode : node.errorHandlerNode
|
|
495
|
+
} : node;
|
|
496
|
+
compiled.attachNode(key, resolvedNode);
|
|
497
|
+
}
|
|
340
498
|
compiled.attachBranch(require_constants.START, require_constants.SELF, _getControlBranch(), { withReader: false });
|
|
341
499
|
for (const [key] of Object.entries(this.nodes)) compiled.attachBranch(key, require_constants.SELF, _getControlBranch(), { withReader: false });
|
|
342
500
|
for (const [start, end] of this.edges) compiled.attachEdge(start, end);
|
|
@@ -384,6 +542,10 @@ function _getChannels(schema) {
|
|
|
384
542
|
*
|
|
385
543
|
* @typeParam WriterType - The type for custom stream writers. Used with the `writer`
|
|
386
544
|
* option to enable typed custom streaming from within nodes.
|
|
545
|
+
*
|
|
546
|
+
* @typeParam TStreamTransformers - Stream transformer factories registered at
|
|
547
|
+
* compile time via the `transformers` option. Used to type extensions on
|
|
548
|
+
* `streamEvents(..., { version: "v3" })`.
|
|
387
549
|
*/
|
|
388
550
|
var CompiledStateGraph = class extends require_graph.CompiledGraph {
|
|
389
551
|
/**
|
|
@@ -416,22 +578,51 @@ var CompiledStateGraph = class extends require_graph.CompiledGraph {
|
|
|
416
578
|
return null;
|
|
417
579
|
}
|
|
418
580
|
const nodeKey = key;
|
|
419
|
-
|
|
581
|
+
const validateStateUpdates = async (updates) => {
|
|
582
|
+
if (updates == null || updates.length === 0) return updates;
|
|
583
|
+
const schemaDef = this.builder._schemaRuntimeDefinition;
|
|
584
|
+
if (require_schema.StateSchema.isInstance(schemaDef)) {
|
|
585
|
+
const schemaKeys = new Set(schemaDef.getChannelKeys());
|
|
586
|
+
return Promise.all(updates.map(async ([k, v]) => {
|
|
587
|
+
if (!schemaKeys.has(k)) return [k, v];
|
|
588
|
+
const parsed = await schemaDef.validateInput({ [k]: v });
|
|
589
|
+
return [k, Object.prototype.hasOwnProperty.call(parsed, k) ? parsed[k] : v];
|
|
590
|
+
}));
|
|
591
|
+
}
|
|
592
|
+
if ((0, _langchain_core_utils_types.isInteropZodObject)(schemaDef)) {
|
|
593
|
+
const schemaKeys = new Set(Object.keys((0, _langchain_core_utils_types.getInteropZodObjectShape)(schemaDef)));
|
|
594
|
+
if (updates.filter(([k]) => schemaKeys.has(k)).length === 0) return updates;
|
|
595
|
+
const updateSchema = (0, _langchain_core_utils_types.interopZodObjectPartial)(this._metaRegistry.getExtendedChannelSchemas(schemaDef, { withReducerSchema: true }));
|
|
596
|
+
const valueSchema = (0, _langchain_core_utils_types.interopZodObjectPartial)(schemaDef);
|
|
597
|
+
return updates.map(([k, v]) => {
|
|
598
|
+
if (!schemaKeys.has(k)) return [k, v];
|
|
599
|
+
const [isOverwrite, overwriteValue] = require_constants._getOverwriteValue(v);
|
|
600
|
+
if (isOverwrite) {
|
|
601
|
+
const parsed = (0, _langchain_core_utils_types.interopParse)(valueSchema, { [k]: overwriteValue });
|
|
602
|
+
return [k, Object.prototype.hasOwnProperty.call(parsed, k) ? { [require_constants.OVERWRITE]: parsed[k] } : v];
|
|
603
|
+
}
|
|
604
|
+
const parsed = (0, _langchain_core_utils_types.interopParse)(updateSchema, { [k]: v });
|
|
605
|
+
return [k, Object.prototype.hasOwnProperty.call(parsed, k) ? parsed[k] : v];
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
return updates;
|
|
609
|
+
};
|
|
610
|
+
async function _getUpdates(input) {
|
|
420
611
|
if (!input) return null;
|
|
421
612
|
else if (require_constants.isCommand(input)) {
|
|
422
613
|
if (input.graph === require_constants.Command.PARENT) return null;
|
|
423
|
-
return input._updateAsTuples().filter(([k]) => outputKeys.includes(k));
|
|
614
|
+
return validateStateUpdates(input._updateAsTuples().filter(([k]) => outputKeys.includes(k)));
|
|
424
615
|
} else if (Array.isArray(input) && input.length > 0 && input.some(require_constants.isCommand)) {
|
|
425
616
|
const updates = [];
|
|
426
617
|
for (const item of input) if (require_constants.isCommand(item)) {
|
|
427
618
|
if (item.graph === require_constants.Command.PARENT) continue;
|
|
428
619
|
updates.push(...item._updateAsTuples().filter(([k]) => outputKeys.includes(k)));
|
|
429
620
|
} else {
|
|
430
|
-
const itemUpdates = _getUpdates(item);
|
|
621
|
+
const itemUpdates = await _getUpdates(item);
|
|
431
622
|
if (itemUpdates) updates.push(...itemUpdates ?? []);
|
|
432
623
|
}
|
|
433
|
-
return updates;
|
|
434
|
-
} else if (typeof input === "object" && !Array.isArray(input)) return Object.entries(input).filter(([k]) => outputKeys.includes(k));
|
|
624
|
+
return validateStateUpdates(updates);
|
|
625
|
+
} else if (typeof input === "object" && !Array.isArray(input)) return validateStateUpdates(Object.entries(input).filter(([k]) => outputKeys.includes(k)));
|
|
435
626
|
else {
|
|
436
627
|
const typeofInput = Array.isArray(input) ? "array" : typeof input;
|
|
437
628
|
throw new require_errors.InvalidUpdateError(`Expected node "${nodeKey.toString()}" to return an object or an array containing at least one Command object, received ${typeofInput}`, { lc_error_code: "INVALID_GRAPH_NODE_RETURN_VALUE" });
|
|
@@ -457,6 +648,8 @@ var CompiledStateGraph = class extends require_graph.CompiledGraph {
|
|
|
457
648
|
const isSingleInput = Object.keys(inputValues).length === 1 && ROOT in inputValues;
|
|
458
649
|
const branchChannel = `branch:to:${key}`;
|
|
459
650
|
this.channels[branchChannel] = node?.defer ? new require_last_value.LastValueAfterFinish() : new require_ephemeral_value.EphemeralValue(false);
|
|
651
|
+
const nodeCachePolicy = node?.cachePolicy;
|
|
652
|
+
const cachePolicy = nodeCachePolicy === false ? void 0 : nodeCachePolicy;
|
|
460
653
|
this.nodes[key] = new require_read.PregelNode({
|
|
461
654
|
triggers: [branchChannel],
|
|
462
655
|
channels: isSingleInput ? Object.keys(inputValues) : inputValues,
|
|
@@ -467,9 +660,12 @@ var CompiledStateGraph = class extends require_graph.CompiledGraph {
|
|
|
467
660
|
bound: node?.runnable,
|
|
468
661
|
metadata: node?.metadata,
|
|
469
662
|
retryPolicy: node?.retryPolicy,
|
|
470
|
-
cachePolicy
|
|
663
|
+
cachePolicy,
|
|
664
|
+
timeout: node?.timeout,
|
|
471
665
|
subgraphs: node?.subgraphs,
|
|
472
|
-
ends: node?.ends
|
|
666
|
+
ends: node?.ends,
|
|
667
|
+
isErrorHandler: node?.isErrorHandler,
|
|
668
|
+
errorHandlerNode: node?.errorHandlerNode
|
|
473
669
|
});
|
|
474
670
|
}
|
|
475
671
|
}
|