@langchain/langgraph 1.0.7 → 1.0.13
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.map +1 -1
- package/dist/channels/any_value.d.cts +0 -1
- package/dist/channels/any_value.d.cts.map +1 -1
- package/dist/channels/any_value.d.ts +0 -1
- package/dist/channels/any_value.d.ts.map +1 -1
- package/dist/channels/any_value.js.map +1 -1
- package/dist/channels/base.cjs +2 -3
- package/dist/channels/base.cjs.map +1 -1
- package/dist/channels/base.d.cts.map +1 -1
- package/dist/channels/base.d.ts.map +1 -1
- package/dist/channels/base.js.map +1 -1
- package/dist/channels/binop.cjs.map +1 -1
- package/dist/channels/binop.d.cts.map +1 -1
- package/dist/channels/binop.d.ts.map +1 -1
- package/dist/channels/binop.js.map +1 -1
- package/dist/channels/dynamic_barrier_value.cjs +0 -1
- package/dist/channels/dynamic_barrier_value.cjs.map +1 -1
- package/dist/channels/dynamic_barrier_value.d.cts +1 -3
- package/dist/channels/dynamic_barrier_value.d.cts.map +1 -1
- package/dist/channels/dynamic_barrier_value.d.ts +1 -3
- package/dist/channels/dynamic_barrier_value.d.ts.map +1 -1
- package/dist/channels/dynamic_barrier_value.js +0 -1
- package/dist/channels/dynamic_barrier_value.js.map +1 -1
- package/dist/channels/ephemeral_value.cjs.map +1 -1
- package/dist/channels/ephemeral_value.d.cts +0 -1
- package/dist/channels/ephemeral_value.d.cts.map +1 -1
- package/dist/channels/ephemeral_value.d.ts +0 -1
- package/dist/channels/ephemeral_value.d.ts.map +1 -1
- package/dist/channels/ephemeral_value.js.map +1 -1
- package/dist/channels/last_value.cjs.map +1 -1
- package/dist/channels/last_value.d.cts +0 -2
- package/dist/channels/last_value.d.cts.map +1 -1
- package/dist/channels/last_value.d.ts +0 -2
- package/dist/channels/last_value.d.ts.map +1 -1
- package/dist/channels/last_value.js.map +1 -1
- package/dist/channels/named_barrier_value.cjs +0 -2
- package/dist/channels/named_barrier_value.cjs.map +1 -1
- package/dist/channels/named_barrier_value.d.cts +2 -4
- package/dist/channels/named_barrier_value.d.cts.map +1 -1
- package/dist/channels/named_barrier_value.d.ts +2 -4
- package/dist/channels/named_barrier_value.d.ts.map +1 -1
- package/dist/channels/named_barrier_value.js +0 -2
- package/dist/channels/named_barrier_value.js.map +1 -1
- package/dist/channels/topic.cjs.map +1 -1
- package/dist/channels/topic.d.cts.map +1 -1
- package/dist/channels/topic.d.ts.map +1 -1
- package/dist/channels/topic.js.map +1 -1
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +2 -6
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +2 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +0 -4
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.ts +0 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/func/index.cjs +2 -4
- package/dist/func/index.cjs.map +1 -1
- package/dist/func/index.d.cts +1 -6
- package/dist/func/index.d.cts.map +1 -1
- package/dist/func/index.d.ts +1 -6
- package/dist/func/index.d.ts.map +1 -1
- package/dist/func/index.js +1 -2
- package/dist/func/index.js.map +1 -1
- package/dist/func/types.d.cts +2 -4
- package/dist/func/types.d.cts.map +1 -1
- package/dist/func/types.d.ts +2 -4
- package/dist/func/types.d.ts.map +1 -1
- package/dist/graph/annotation.cjs.map +1 -1
- package/dist/graph/annotation.d.cts.map +1 -1
- package/dist/graph/annotation.d.ts.map +1 -1
- package/dist/graph/annotation.js.map +1 -1
- package/dist/graph/graph.cjs +15 -18
- package/dist/graph/graph.cjs.map +1 -1
- package/dist/graph/graph.d.cts +4 -28
- package/dist/graph/graph.d.cts.map +1 -1
- package/dist/graph/graph.d.ts +4 -28
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +4 -6
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/message.cjs +8 -10
- package/dist/graph/message.cjs.map +1 -1
- package/dist/graph/message.d.cts +2 -2
- package/dist/graph/message.d.cts.map +1 -1
- package/dist/graph/message.d.ts +2 -2
- package/dist/graph/message.d.ts.map +1 -1
- package/dist/graph/message.js +3 -4
- package/dist/graph/message.js.map +1 -1
- package/dist/graph/messages_annotation.cjs +1 -2
- package/dist/graph/messages_annotation.cjs.map +1 -1
- package/dist/graph/messages_annotation.d.cts +5 -5
- package/dist/graph/messages_annotation.d.cts.map +1 -1
- package/dist/graph/messages_annotation.d.ts +5 -5
- package/dist/graph/messages_annotation.d.ts.map +1 -1
- package/dist/graph/messages_annotation.js.map +1 -1
- package/dist/graph/state.cjs +23 -30
- package/dist/graph/state.cjs.map +1 -1
- package/dist/graph/state.d.cts +2 -9
- package/dist/graph/state.d.cts.map +1 -1
- package/dist/graph/state.d.ts +2 -9
- package/dist/graph/state.d.ts.map +1 -1
- package/dist/graph/state.js +6 -12
- package/dist/graph/state.js.map +1 -1
- package/dist/graph/zod/meta.cjs +8 -9
- package/dist/graph/zod/meta.cjs.map +1 -1
- package/dist/graph/zod/meta.d.cts +0 -1
- package/dist/graph/zod/meta.d.cts.map +1 -1
- package/dist/graph/zod/meta.d.ts +0 -1
- package/dist/graph/zod/meta.d.ts.map +1 -1
- package/dist/graph/zod/meta.js.map +1 -1
- package/dist/graph/zod/plugin.cjs +4 -6
- package/dist/graph/zod/plugin.cjs.map +1 -1
- package/dist/graph/zod/plugin.js +1 -2
- package/dist/graph/zod/plugin.js.map +1 -1
- package/dist/graph/zod/schema.cjs +2 -3
- 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.map +1 -1
- package/dist/graph/zod/zod-registry.cjs +3 -4
- package/dist/graph/zod/zod-registry.cjs.map +1 -1
- package/dist/graph/zod/zod-registry.d.cts +0 -2
- package/dist/graph/zod/zod-registry.d.cts.map +1 -1
- package/dist/graph/zod/zod-registry.d.ts +0 -2
- package/dist/graph/zod/zod-registry.d.ts.map +1 -1
- package/dist/graph/zod/zod-registry.js.map +1 -1
- package/dist/hash.cjs +4 -10
- package/dist/hash.cjs.map +1 -1
- package/dist/hash.js +4 -10
- package/dist/hash.js.map +1 -1
- package/dist/index.cjs +8 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interrupt.cjs +4 -7
- package/dist/interrupt.cjs.map +1 -1
- package/dist/interrupt.d.cts +1 -4
- package/dist/interrupt.d.cts.map +1 -1
- package/dist/interrupt.d.ts +1 -4
- package/dist/interrupt.d.ts.map +1 -1
- package/dist/interrupt.js +2 -4
- package/dist/interrupt.js.map +1 -1
- package/dist/prebuilt/agentName.cjs +14 -19
- package/dist/prebuilt/agentName.cjs.map +1 -1
- package/dist/prebuilt/agentName.js +6 -10
- package/dist/prebuilt/agentName.js.map +1 -1
- package/dist/prebuilt/agent_executor.cjs +4 -7
- package/dist/prebuilt/agent_executor.cjs.map +1 -1
- package/dist/prebuilt/agent_executor.d.cts +5 -5
- package/dist/prebuilt/agent_executor.d.cts.map +1 -1
- package/dist/prebuilt/agent_executor.d.ts +5 -5
- package/dist/prebuilt/agent_executor.d.ts.map +1 -1
- package/dist/prebuilt/agent_executor.js +4 -7
- package/dist/prebuilt/agent_executor.js.map +1 -1
- package/dist/prebuilt/chat_agent_executor.cjs +11 -17
- package/dist/prebuilt/chat_agent_executor.cjs.map +1 -1
- package/dist/prebuilt/chat_agent_executor.d.cts.map +1 -1
- package/dist/prebuilt/chat_agent_executor.d.ts.map +1 -1
- package/dist/prebuilt/chat_agent_executor.js +7 -12
- package/dist/prebuilt/chat_agent_executor.js.map +1 -1
- package/dist/prebuilt/interrupt.d.cts +0 -1
- package/dist/prebuilt/interrupt.d.cts.map +1 -1
- package/dist/prebuilt/interrupt.d.ts +0 -1
- package/dist/prebuilt/interrupt.d.ts.map +1 -1
- package/dist/prebuilt/react_agent_executor.cjs +35 -40
- package/dist/prebuilt/react_agent_executor.cjs.map +1 -1
- package/dist/prebuilt/react_agent_executor.d.cts +8 -27
- package/dist/prebuilt/react_agent_executor.d.cts.map +1 -1
- package/dist/prebuilt/react_agent_executor.d.ts +8 -27
- package/dist/prebuilt/react_agent_executor.d.ts.map +1 -1
- package/dist/prebuilt/react_agent_executor.js +8 -12
- package/dist/prebuilt/react_agent_executor.js.map +1 -1
- package/dist/prebuilt/tool_executor.cjs +4 -9
- package/dist/prebuilt/tool_executor.cjs.map +1 -1
- package/dist/prebuilt/tool_executor.d.cts +0 -2
- package/dist/prebuilt/tool_executor.d.cts.map +1 -1
- package/dist/prebuilt/tool_executor.d.ts +0 -2
- package/dist/prebuilt/tool_executor.d.ts.map +1 -1
- package/dist/prebuilt/tool_executor.js +1 -5
- package/dist/prebuilt/tool_executor.js.map +1 -1
- package/dist/prebuilt/tool_node.cjs +7 -8
- package/dist/prebuilt/tool_node.cjs.map +1 -1
- package/dist/prebuilt/tool_node.d.cts +0 -2
- package/dist/prebuilt/tool_node.d.cts.map +1 -1
- package/dist/prebuilt/tool_node.d.ts +0 -2
- package/dist/prebuilt/tool_node.d.ts.map +1 -1
- package/dist/prebuilt/tool_node.js.map +1 -1
- package/dist/pregel/algo.cjs +33 -41
- package/dist/pregel/algo.cjs.map +1 -1
- package/dist/pregel/algo.d.cts.map +1 -1
- package/dist/pregel/algo.d.ts.map +1 -1
- package/dist/pregel/algo.js +22 -29
- package/dist/pregel/algo.js.map +1 -1
- package/dist/pregel/call.cjs +11 -14
- package/dist/pregel/call.cjs.map +1 -1
- package/dist/pregel/call.js +7 -9
- package/dist/pregel/call.js.map +1 -1
- package/dist/pregel/debug.cjs +6 -9
- package/dist/pregel/debug.cjs.map +1 -1
- package/dist/pregel/debug.js +6 -9
- package/dist/pregel/debug.js.map +1 -1
- package/dist/pregel/index.cjs +28 -35
- package/dist/pregel/index.cjs.map +1 -1
- package/dist/pregel/index.d.cts +6 -54
- package/dist/pregel/index.d.cts.map +1 -1
- package/dist/pregel/index.d.ts +6 -54
- package/dist/pregel/index.d.ts.map +1 -1
- package/dist/pregel/index.js +10 -16
- package/dist/pregel/index.js.map +1 -1
- package/dist/pregel/io.cjs.map +1 -1
- package/dist/pregel/io.js.map +1 -1
- package/dist/pregel/loop.cjs +9 -12
- package/dist/pregel/loop.cjs.map +1 -1
- package/dist/pregel/loop.js +2 -4
- package/dist/pregel/loop.js.map +1 -1
- package/dist/pregel/messages.cjs +13 -14
- package/dist/pregel/messages.cjs.map +1 -1
- package/dist/pregel/messages.js.map +1 -1
- package/dist/pregel/read.cjs +7 -8
- package/dist/pregel/read.cjs.map +1 -1
- package/dist/pregel/read.d.cts +0 -6
- package/dist/pregel/read.d.cts.map +1 -1
- package/dist/pregel/read.d.ts +0 -6
- package/dist/pregel/read.d.ts.map +1 -1
- package/dist/pregel/read.js +1 -1
- package/dist/pregel/read.js.map +1 -1
- package/dist/pregel/remote.cjs +24 -32
- package/dist/pregel/remote.cjs.map +1 -1
- package/dist/pregel/remote.d.cts +1 -6
- package/dist/pregel/remote.d.cts.map +1 -1
- package/dist/pregel/remote.d.ts +1 -6
- package/dist/pregel/remote.d.ts.map +1 -1
- package/dist/pregel/remote.js +12 -19
- package/dist/pregel/remote.js.map +1 -1
- package/dist/pregel/retry.cjs +1 -2
- package/dist/pregel/retry.cjs.map +1 -1
- package/dist/pregel/retry.js +1 -2
- package/dist/pregel/retry.js.map +1 -1
- package/dist/pregel/runnable_types.d.cts +2 -8
- package/dist/pregel/runnable_types.d.cts.map +1 -1
- package/dist/pregel/runnable_types.d.ts +2 -8
- package/dist/pregel/runnable_types.d.ts.map +1 -1
- package/dist/pregel/runner.cjs +1 -1
- package/dist/pregel/runner.cjs.map +1 -1
- package/dist/pregel/runner.js +1 -1
- package/dist/pregel/runner.js.map +1 -1
- package/dist/pregel/stream.cjs +4 -6
- package/dist/pregel/stream.cjs.map +1 -1
- package/dist/pregel/stream.js +1 -2
- package/dist/pregel/stream.js.map +1 -1
- package/dist/pregel/types.d.cts +5 -18
- package/dist/pregel/types.d.cts.map +1 -1
- package/dist/pregel/types.d.ts +5 -18
- package/dist/pregel/types.d.ts.map +1 -1
- package/dist/pregel/utils/config.cjs +6 -7
- package/dist/pregel/utils/config.cjs.map +1 -1
- package/dist/pregel/utils/config.d.cts.map +1 -1
- package/dist/pregel/utils/config.d.ts.map +1 -1
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/utils/index.cjs +1 -2
- package/dist/pregel/utils/index.cjs.map +1 -1
- package/dist/pregel/utils/index.d.cts +1 -1
- package/dist/pregel/utils/index.d.cts.map +1 -1
- package/dist/pregel/utils/index.d.ts +1 -1
- package/dist/pregel/utils/index.d.ts.map +1 -1
- package/dist/pregel/utils/index.js +1 -2
- package/dist/pregel/utils/index.js.map +1 -1
- package/dist/pregel/utils/subgraph.cjs +0 -1
- package/dist/pregel/utils/subgraph.cjs.map +1 -1
- package/dist/pregel/utils/subgraph.js +0 -1
- package/dist/pregel/utils/subgraph.js.map +1 -1
- package/dist/pregel/validate.cjs.map +1 -1
- package/dist/pregel/validate.js.map +1 -1
- package/dist/pregel/write.cjs +2 -3
- package/dist/pregel/write.cjs.map +1 -1
- package/dist/pregel/write.d.cts +1 -5
- package/dist/pregel/write.d.cts.map +1 -1
- package/dist/pregel/write.d.ts +1 -5
- package/dist/pregel/write.d.ts.map +1 -1
- package/dist/pregel/write.js.map +1 -1
- package/dist/setup/async_local_storage.cjs +3 -4
- package/dist/setup/async_local_storage.cjs.map +1 -1
- package/dist/setup/async_local_storage.js.map +1 -1
- package/dist/utils.cjs +9 -11
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +1 -8
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.ts +1 -8
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -2
- package/dist/utils.js.map +1 -1
- package/dist/web.cjs +8 -9
- package/dist/writer.cjs +2 -3
- package/dist/writer.cjs.map +1 -1
- package/dist/writer.d.cts +1 -2
- package/dist/writer.d.cts.map +1 -1
- package/dist/writer.d.ts +1 -2
- package/dist/writer.d.ts.map +1 -1
- package/dist/writer.js.map +1 -1
- package/package.json +7 -7
- package/CHANGELOG.md +0 -286
- package/dist/_virtual/rolldown_runtime.cjs +0 -25
package/dist/pregel/algo.js
CHANGED
|
@@ -132,8 +132,7 @@ function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNode
|
|
|
132
132
|
if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
|
|
133
133
|
const channel = onlyChannels[chan];
|
|
134
134
|
if (channel.isAvailable() && !updatedChannels.has(chan)) {
|
|
135
|
-
|
|
136
|
-
if (updated && getNextVersion !== void 0) {
|
|
135
|
+
if (channel.update([]) && getNextVersion !== void 0) {
|
|
137
136
|
checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
|
|
138
137
|
if (channel.isAvailable()) updatedChannels.add(chan);
|
|
139
138
|
}
|
|
@@ -159,11 +158,10 @@ function* candidateNodes(checkpoint, processes, extra) {
|
|
|
159
158
|
yield* [...triggeredNodes].sort();
|
|
160
159
|
return;
|
|
161
160
|
}
|
|
162
|
-
|
|
161
|
+
if ((() => {
|
|
163
162
|
for (const chan in checkpoint.channel_versions) if (checkpoint.channel_versions[chan] !== null) return false;
|
|
164
163
|
return true;
|
|
165
|
-
})();
|
|
166
|
-
if (isEmptyChannelVersions) return;
|
|
164
|
+
})()) return;
|
|
167
165
|
for (const name in processes) {
|
|
168
166
|
if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
|
|
169
167
|
yield name;
|
|
@@ -222,7 +220,7 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
222
220
|
};
|
|
223
221
|
if (forExecution) {
|
|
224
222
|
const writes = [];
|
|
225
|
-
|
|
223
|
+
return {
|
|
226
224
|
name: call.name,
|
|
227
225
|
input: call.input,
|
|
228
226
|
proc,
|
|
@@ -270,7 +268,6 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
270
268
|
path: outputTaskPath,
|
|
271
269
|
writers: []
|
|
272
270
|
};
|
|
273
|
-
return task;
|
|
274
271
|
} else return {
|
|
275
272
|
id,
|
|
276
273
|
name: call.name,
|
|
@@ -279,17 +276,17 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
279
276
|
};
|
|
280
277
|
} else if (taskPath[0] === PUSH) {
|
|
281
278
|
const index = typeof taskPath[1] === "number" ? taskPath[1] : parseInt(taskPath[1], 10);
|
|
282
|
-
if (!channels[TASKS]?.isAvailable()) return
|
|
279
|
+
if (!channels[TASKS]?.isAvailable()) return;
|
|
283
280
|
const sends = channels[TASKS].get();
|
|
284
|
-
if (index < 0 || index >= sends.length) return
|
|
281
|
+
if (index < 0 || index >= sends.length) return;
|
|
285
282
|
const packet = _isSendInterface(sends[index]) && !_isSend(sends[index]) ? new Send(sends[index].node, sends[index].args) : sends[index];
|
|
286
283
|
if (!_isSendInterface(packet)) {
|
|
287
284
|
console.warn(`Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`);
|
|
288
|
-
return
|
|
285
|
+
return;
|
|
289
286
|
}
|
|
290
287
|
if (!(packet.node in processes)) {
|
|
291
288
|
console.warn(`Ignoring unknown node name ${packet.node} in pending sends.`);
|
|
292
|
-
return
|
|
289
|
+
return;
|
|
293
290
|
}
|
|
294
291
|
const triggers = [PUSH];
|
|
295
292
|
const checkpointNamespace = parentNamespace === "" ? packet.node : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;
|
|
@@ -381,7 +378,7 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
381
378
|
} else if (taskPath[0] === PULL) {
|
|
382
379
|
const name = taskPath[1].toString();
|
|
383
380
|
const proc = processes[name];
|
|
384
|
-
if (proc === void 0) return
|
|
381
|
+
if (proc === void 0) return;
|
|
385
382
|
if (pendingWrites?.length) {
|
|
386
383
|
const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
|
|
387
384
|
const taskId = uuid5(JSON.stringify([
|
|
@@ -391,11 +388,10 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
391
388
|
PULL,
|
|
392
389
|
name
|
|
393
390
|
]), checkpoint.id);
|
|
394
|
-
|
|
395
|
-
if (hasSuccessfulWrites) return void 0;
|
|
391
|
+
if (pendingWrites.some((w) => w[0] === taskId && w[1] !== ERROR)) return;
|
|
396
392
|
}
|
|
397
393
|
const nullVersion = getNullChannelVersion(checkpoint.channel_versions);
|
|
398
|
-
if (nullVersion === void 0) return
|
|
394
|
+
if (nullVersion === void 0) return;
|
|
399
395
|
const seen = checkpoint.versions_seen[name] ?? {};
|
|
400
396
|
const trigger = proc.triggers.find((chan) => {
|
|
401
397
|
if (!channels[chan].isAvailable()) return false;
|
|
@@ -403,7 +399,7 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
403
399
|
});
|
|
404
400
|
if (trigger !== void 0) {
|
|
405
401
|
const val = _procInput(proc, channels, forExecution);
|
|
406
|
-
if (val === void 0) return
|
|
402
|
+
if (val === void 0) return;
|
|
407
403
|
const checkpointNamespace = parentNamespace === "" ? name : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;
|
|
408
404
|
const taskId = uuid5(JSON.stringify([
|
|
409
405
|
checkpointNamespace,
|
|
@@ -493,7 +489,6 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
|
|
|
493
489
|
};
|
|
494
490
|
}
|
|
495
491
|
}
|
|
496
|
-
return void 0;
|
|
497
492
|
}
|
|
498
493
|
/**
|
|
499
494
|
* Function injected under CONFIG_KEY_READ in task config, to read current state.
|
|
@@ -509,7 +504,7 @@ function _procInput(proc, channels, forExecution) {
|
|
|
509
504
|
for (const [k, chan] of Object.entries(proc.channels)) if (proc.triggers.includes(chan)) try {
|
|
510
505
|
val[k] = readChannel(channels, chan, false);
|
|
511
506
|
} catch (e) {
|
|
512
|
-
if (e.name === EmptyChannelError.unminifiable_name) return
|
|
507
|
+
if (e.name === EmptyChannelError.unminifiable_name) return;
|
|
513
508
|
else throw e;
|
|
514
509
|
}
|
|
515
510
|
else if (chan in channels) try {
|
|
@@ -528,25 +523,24 @@ function _procInput(proc, channels, forExecution) {
|
|
|
528
523
|
if (e.name === EmptyChannelError.unminifiable_name) continue;
|
|
529
524
|
else throw e;
|
|
530
525
|
}
|
|
531
|
-
if (!successfulRead) return
|
|
526
|
+
if (!successfulRead) return;
|
|
532
527
|
} else throw new Error(`Invalid channels type, expected list or dict, got ${proc.channels}`);
|
|
533
528
|
if (forExecution && proc.mapper !== void 0) val = proc.mapper(val);
|
|
534
529
|
return val;
|
|
535
530
|
}
|
|
536
531
|
function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, namespaceHash }) {
|
|
537
532
|
const nullResume = pendingWrites.find(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME)?.[2];
|
|
538
|
-
const resume = (() => {
|
|
539
|
-
const result = pendingWrites.filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME).flatMap(([_writeTaskId, _chan, resume$1]) => resume$1);
|
|
540
|
-
if (resumeMap != null && namespaceHash in resumeMap) {
|
|
541
|
-
const mappedResume = resumeMap[namespaceHash];
|
|
542
|
-
result.push(mappedResume);
|
|
543
|
-
}
|
|
544
|
-
return result;
|
|
545
|
-
})();
|
|
546
533
|
const scratchpad = {
|
|
547
534
|
callCounter: 0,
|
|
548
535
|
interruptCounter: -1,
|
|
549
|
-
resume
|
|
536
|
+
resume: (() => {
|
|
537
|
+
const result = pendingWrites.filter(([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME).flatMap(([_writeTaskId, _chan, resume]) => resume);
|
|
538
|
+
if (resumeMap != null && namespaceHash in resumeMap) {
|
|
539
|
+
const mappedResume = resumeMap[namespaceHash];
|
|
540
|
+
result.push(mappedResume);
|
|
541
|
+
}
|
|
542
|
+
return result;
|
|
543
|
+
})(),
|
|
550
544
|
nullResume,
|
|
551
545
|
subgraphCounter: 0,
|
|
552
546
|
currentTaskInput,
|
|
@@ -556,7 +550,6 @@ function _scratchpad({ pendingWrites, taskId, currentTaskInput, resumeMap, names
|
|
|
556
550
|
pendingWrites.splice(pendingWrites.findIndex(([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME), 1);
|
|
557
551
|
return nullResume;
|
|
558
552
|
}
|
|
559
|
-
return void 0;
|
|
560
553
|
}
|
|
561
554
|
};
|
|
562
555
|
return scratchpad;
|
package/dist/pregel/algo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algo.js","names":["maxVersion: number | string | undefined","values: Record<string, unknown>","updatedChannels: Set<string>","e: any","tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription>","writes: [keyof Cc, unknown][]","val: any","resume"],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n mergeConfigs,\n patchConfig,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n All,\n BaseCheckpointSaver,\n Checkpoint,\n ReadonlyCheckpoint,\n copyCheckpoint,\n type PendingWrite,\n type PendingWriteValue,\n uuid5,\n maxChannelVersion,\n BaseStore,\n CheckpointPendingWrite,\n SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n _isSend,\n _isSendInterface,\n CONFIG_KEY_CHECKPOINT_MAP,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_READ,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_SEND,\n INTERRUPT,\n RESERVED,\n Send,\n TAG_HIDDEN,\n TASKS,\n CHECKPOINT_NAMESPACE_END,\n PUSH,\n PULL,\n RESUME,\n NULL_TASK_ID,\n CONFIG_KEY_SCRATCHPAD,\n RETURN,\n ERROR,\n NO_WRITES,\n CONFIG_KEY_PREVIOUS_STATE,\n PREVIOUS,\n CACHE_NS_WRITES,\n CONFIG_KEY_RESUME_MAP,\n START,\n} from \"../constants.js\";\nimport {\n Call,\n isCall,\n PregelExecutableTask,\n PregelScratchpad,\n PregelTaskDescription,\n SimpleTaskPath,\n TaskPath,\n VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n return current !== undefined ? current + 1 : 1;\n};\n\nfunction triggersNextStep(\n updatedChannels: Set<string>,\n triggerToNodes: Record<string, string[]> | undefined\n) {\n if (triggerToNodes == null) return false;\n\n for (const chan of updatedChannels) {\n if (triggerToNodes[chan]) return true;\n }\n\n return false;\n}\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n channelVersions: Record<string, number | string>\n): number | string | undefined {\n let maxVersion: number | string | undefined;\n for (const chan in channelVersions) {\n if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n if (maxVersion == null) {\n maxVersion = channelVersions[chan];\n } else {\n maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n }\n }\n return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n checkpoint: Checkpoint,\n interruptNodes: All | N[],\n tasks: PregelExecutableTask<N, C>[]\n): boolean {\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n let anyChannelUpdated = false;\n\n if (\n (checkpoint.channel_versions[START] ?? nullVersion) >\n (seen[START] ?? nullVersion)\n ) {\n anyChannelUpdated = true;\n } else {\n for (const chan in checkpoint.channel_versions) {\n if (\n !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n )\n continue;\n\n if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n anyChannelUpdated = true;\n break;\n }\n }\n }\n\n const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n interruptNodes === \"*\"\n ? !task.config?.tags?.includes(TAG_HIDDEN)\n : interruptNodes.includes(task.name)\n );\n\n return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n checkpoint: ReadonlyCheckpoint,\n channels: Cc,\n task: WritesProtocol<keyof Cc>,\n select: Array<keyof Cc> | keyof Cc,\n fresh: boolean = false\n): Record<string, unknown> | unknown {\n let updated = new Set<keyof Cc>();\n\n if (!Array.isArray(select)) {\n for (const [c] of task.writes) {\n if (c === select) {\n updated = new Set([c]);\n break;\n }\n }\n updated = updated || new Set();\n } else {\n updated = new Set(\n select.filter((c) => task.writes.some(([key, _]) => key === c))\n );\n }\n\n let values: Record<string, unknown>;\n\n if (fresh && updated.size > 0) {\n const localChannels = Object.fromEntries(\n Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n ) as Partial<Cc>;\n\n const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n _applyWrites(\n copyCheckpoint(newCheckpoint),\n newChannels,\n [task],\n undefined,\n undefined\n );\n values = readChannels({ ...channels, ...newChannels }, select);\n } else {\n values = readChannels(channels, select);\n }\n\n return values;\n}\n\nexport function _localWrite(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n commit: (writes: [string, any][]) => any,\n processes: Record<string, PregelNode>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writes: [string, any][]\n) {\n for (const [chan, value] of writes) {\n if ([PUSH, TASKS].includes(chan) && value != null) {\n if (!_isSend(value)) {\n throw new InvalidUpdateError(\n `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n value\n )}`\n );\n }\n if (!(value.node in processes)) {\n throw new InvalidUpdateError(\n `Invalid node name \"${value.node}\" in Send packet`\n );\n }\n }\n }\n commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n NO_WRITES,\n PUSH,\n RESUME,\n INTERRUPT,\n RETURN,\n ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n checkpoint: Checkpoint,\n channels: Cc,\n tasks: WritesProtocol<keyof Cc>[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNextVersion: ((version: any) => any) | undefined,\n triggerToNodes: Record<string, string[]> | undefined\n): Set<string> {\n // Sort tasks by first 3 path elements for deterministic order\n // Later path parts (like task IDs) are ignored for sorting\n tasks.sort((a, b) => {\n const aPath = a.path?.slice(0, 3) || [];\n const bPath = b.path?.slice(0, 3) || [];\n\n // Compare each path element\n for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n if (aPath[i] < bPath[i]) return -1;\n if (aPath[i] > bPath[i]) return 1;\n }\n\n // If one path is shorter, it comes first\n return aPath.length - bPath.length;\n });\n\n // if no task has triggers this is applying writes from the null task only\n // so we don't do anything other than update the channels written to\n const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n // Filter out non instances of BaseChannel\n const onlyChannels = getOnlyChannels(channels);\n\n // Update seen versions\n for (const task of tasks) {\n checkpoint.versions_seen[task.name] ??= {};\n for (const chan of task.triggers) {\n if (chan in checkpoint.channel_versions) {\n checkpoint.versions_seen[task.name][chan] =\n checkpoint.channel_versions[chan];\n }\n }\n }\n\n // Find the highest version of all channels\n let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n // Consume all channels that were read\n const channelsToConsume = new Set(\n tasks\n .flatMap((task) => task.triggers)\n .filter((chan) => !RESERVED.includes(chan))\n );\n\n let usedNewVersion = false;\n for (const chan of channelsToConsume) {\n if (chan in onlyChannels && onlyChannels[chan].consume()) {\n if (getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n usedNewVersion = true;\n }\n }\n }\n\n // Group writes by channel\n const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n for (const task of tasks) {\n for (const [chan, val] of task.writes) {\n if (IGNORE.has(chan)) {\n // do nothing\n } else if (chan in onlyChannels) {\n pendingWritesByChannel[chan] ??= [];\n pendingWritesByChannel[chan].push(val);\n }\n }\n }\n\n // Find the highest version of all channels\n if (maxVersion != null && getNextVersion != null) {\n maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;\n }\n\n const updatedChannels: Set<string> = new Set();\n // Apply writes to channels\n for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n if (chan in onlyChannels) {\n const channel = onlyChannels[chan];\n let updated;\n try {\n updated = channel.update(vals);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === InvalidUpdateError.unminifiable_name) {\n const wrappedError = new InvalidUpdateError(\n `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n vals\n )}: ${e.message}`\n );\n wrappedError.lc_error_code = e.lc_error_code;\n throw wrappedError;\n } else {\n throw e;\n }\n }\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n // Channels that weren't updated in this step are notified of a new step\n if (bumpStep) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.isAvailable() && !updatedChannels.has(chan)) {\n const updated = channel.update([]);\n\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n }\n\n // If this is (tentatively) the last superstep, notify all channels of finish\n if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.finish() && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n return updatedChannels;\n}\n\nfunction* candidateNodes(\n checkpoint: ReadonlyCheckpoint,\n processes: StrRecord<string, PregelNode>,\n extra: NextTaskExtraFields\n) {\n // This section is an optimization that allows which\n // nodes will be active during the next step.\n // When there's information about:\n // 1. Which channels were updated in the previous step\n // 2. Which nodes are triggered by which channels\n // Then we can determine which nodes should be triggered\n // in the next step without having to cycle through all nodes.\n if (extra.updatedChannels != null && extra.triggerToNodes != null) {\n const triggeredNodes = new Set<string>();\n\n // Get all nodes that have triggers associated with an updated channel\n for (const channel of extra.updatedChannels) {\n const nodeIds = extra.triggerToNodes[channel];\n for (const id of nodeIds ?? []) triggeredNodes.add(id);\n }\n\n // Sort the nodes to ensure deterministic order\n yield* [...triggeredNodes].sort();\n return;\n }\n\n // If there are no values in checkpoint, no need to run\n // through all the PULL candidates\n const isEmptyChannelVersions = (() => {\n for (const chan in checkpoint.channel_versions) {\n if (checkpoint.channel_versions[chan] !== null) return false;\n }\n return true;\n })();\n\n if (isEmptyChannelVersions) return;\n for (const name in processes) {\n if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n yield name;\n }\n}\n\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n | Record<string, PregelTaskDescription>\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n const tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription> = {};\n\n // Consume pending tasks\n const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n if (tasksChannel?.isAvailable()) {\n const len = tasksChannel.get().length;\n for (let i = 0; i < len; i += 1) {\n const task = _prepareSingleTask(\n [PUSH, i],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n }\n\n // Check if any processes should be run in next step\n // If so, prepare the values to be passed to them\n for (const name of candidateNodes(checkpoint, processes, extra)) {\n const task = _prepareSingleTask(\n [PULL, name],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n return tasks;\n}\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: SimpleTaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: LangGraphRunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFields\n):\n | PregelTaskDescription\n | PregelExecutableTask<keyof Nn, keyof Cc>\n | undefined {\n const { step, checkpointer, manager } = extra;\n const configurable = config.configurable ?? {};\n const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n const call = taskPath[taskPath.length - 1] as Call;\n const proc = getRunnableForFunc(call.name, call.func);\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? call.name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n const id = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n call.name,\n PUSH,\n taskPath[1],\n taskPath[2],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n // we append `true` to the task path to indicate that a call is being made\n // so we should not return interrupts from this task (responsibility lies with the parent)\n const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n const metadata = {\n langgraph_step: step,\n langgraph_node: call.name,\n langgraph_triggers: triggers,\n langgraph_path: outputTaskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const writes: [keyof Cc, unknown][] = [];\n const task = {\n name: call.name,\n input: call.input,\n proc,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n store: extra.store ?? config.store,\n }),\n {\n runName: call.name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: id,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: call.name,\n writes: writes as PendingWrite[],\n triggers,\n path: outputTaskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId: id,\n currentTaskInput: call.input,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: call.retry,\n cache_key: call.cache\n ? {\n key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n ttl: call.cache.ttl,\n }\n : undefined,\n id,\n path: outputTaskPath,\n writers: [],\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n return task;\n } else {\n return {\n id,\n name: call.name,\n interrupts: [],\n path: outputTaskPath,\n };\n }\n } else if (taskPath[0] === PUSH) {\n const index =\n typeof taskPath[1] === \"number\"\n ? taskPath[1]\n : parseInt(taskPath[1] as string, 10);\n\n if (!channels[TASKS]?.isAvailable()) {\n return undefined;\n }\n\n const sends = channels[TASKS].get() as SendProtocol[];\n if (index < 0 || index >= sends.length) {\n return undefined;\n }\n\n const packet =\n _isSendInterface(sends[index]) && !_isSend(sends[index])\n ? new Send(sends[index].node, sends[index].args)\n : sends[index];\n\n if (!_isSendInterface(packet)) {\n console.warn(\n `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n );\n return undefined;\n }\n if (!(packet.node in processes)) {\n console.warn(\n `Ignoring unknown node name ${packet.node} in pending sends.`\n );\n return undefined;\n }\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? packet.node\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n packet.node,\n PUSH,\n index.toString(),\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: packet.node,\n langgraph_triggers: triggers,\n langgraph_path: taskPath.slice(0, 3),\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const proc = processes[packet.node];\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name: packet.node,\n input: packet.args,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: packet.node,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: packet.node,\n writes: writes as PendingWrite[],\n triggers,\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: packet.args,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name: packet.node,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n } else if (taskPath[0] === PULL) {\n const name = taskPath[1].toString();\n const proc = processes[name];\n if (proc === undefined) {\n return undefined;\n }\n\n // Check if this task already has successful writes in the pending writes\n if (pendingWrites?.length) {\n // Find the task ID for this node/path\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n name,\n ]),\n checkpoint.id\n );\n\n // Check if there are successful writes (not ERROR) for this task ID\n const hasSuccessfulWrites = pendingWrites.some(\n (w) => w[0] === taskId && w[1] !== ERROR\n );\n\n // If task completed successfully, don't include it in next tasks\n if (hasSuccessfulWrites) {\n return undefined;\n }\n }\n\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n if (nullVersion === undefined) {\n return undefined;\n }\n const seen = checkpoint.versions_seen[name] ?? {};\n\n // Find the first trigger that is available and has a new version\n const trigger = proc.triggers.find((chan) => {\n if (!channels[chan].isAvailable()) return false;\n\n return (\n (checkpoint.channel_versions[chan] ?? nullVersion) >\n (seen[chan] ?? nullVersion)\n );\n });\n\n // If any of the channels read by this process were updated\n if (trigger !== undefined) {\n const val = _procInput(proc, channels, forExecution);\n if (val === undefined) {\n return undefined;\n }\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n [trigger],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: name,\n langgraph_triggers: [trigger],\n langgraph_path: taskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name,\n input: val,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => {\n writes.push(...items);\n },\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name,\n writes: writes as PendingWrite[],\n triggers: [trigger],\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: val,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers: [trigger],\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Function injected under CONFIG_KEY_READ in task config, to read current state.\n * Used by conditional edges to read a copy of the state with reflecting the writes\n * from that node only.\n *\n * @internal\n */\nfunction _procInput(\n proc: PregelNode,\n channels: StrRecord<string, BaseChannel>,\n forExecution: boolean\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let val: any;\n\n if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n val = {};\n for (const [k, chan] of Object.entries(proc.channels)) {\n if (proc.triggers.includes(chan)) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n return undefined;\n } else {\n throw e;\n }\n }\n } else if (chan in channels) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n }\n } else if (Array.isArray(proc.channels)) {\n let successfulRead = false;\n for (const chan of proc.channels) {\n try {\n val = readChannel(channels, chan, false);\n successfulRead = true;\n break;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n if (!successfulRead) {\n return undefined;\n }\n } else {\n throw new Error(\n `Invalid channels type, expected list or dict, got ${proc.channels}`\n );\n }\n\n // If the process has a mapper, apply it to the value\n if (forExecution && proc.mapper !== undefined) {\n val = proc.mapper(val);\n }\n\n return val;\n}\n\nfunction _scratchpad({\n pendingWrites,\n taskId,\n currentTaskInput,\n resumeMap,\n namespaceHash,\n}: {\n pendingWrites: CheckpointPendingWrite[];\n taskId: string;\n currentTaskInput: unknown;\n resumeMap: Record<string, unknown> | undefined;\n namespaceHash: string;\n}): PregelScratchpad {\n const nullResume = pendingWrites.find(\n ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n )?.[2];\n\n const resume = (() => {\n const result = pendingWrites\n .filter(\n ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n )\n .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n if (resumeMap != null && namespaceHash in resumeMap) {\n const mappedResume = resumeMap[namespaceHash];\n result.push(mappedResume);\n }\n\n return result;\n })();\n\n const scratchpad = {\n callCounter: 0,\n interruptCounter: -1,\n resume,\n nullResume,\n subgraphCounter: 0,\n currentTaskInput,\n consumeNullResume: () => {\n if (scratchpad.nullResume) {\n delete scratchpad.nullResume;\n pendingWrites.splice(\n pendingWrites.findIndex(\n ([writeTaskId, chan]) =>\n writeTaskId === NULL_TASK_ID && chan === RESUME\n ),\n 1\n );\n return nullResume;\n }\n\n return undefined;\n },\n };\n return scratchpad;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"algo.js","names":[],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n mergeConfigs,\n patchConfig,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n All,\n BaseCheckpointSaver,\n Checkpoint,\n ReadonlyCheckpoint,\n copyCheckpoint,\n type PendingWrite,\n type PendingWriteValue,\n uuid5,\n maxChannelVersion,\n BaseStore,\n CheckpointPendingWrite,\n SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n _isSend,\n _isSendInterface,\n CONFIG_KEY_CHECKPOINT_MAP,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_READ,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_SEND,\n INTERRUPT,\n RESERVED,\n Send,\n TAG_HIDDEN,\n TASKS,\n CHECKPOINT_NAMESPACE_END,\n PUSH,\n PULL,\n RESUME,\n NULL_TASK_ID,\n CONFIG_KEY_SCRATCHPAD,\n RETURN,\n ERROR,\n NO_WRITES,\n CONFIG_KEY_PREVIOUS_STATE,\n PREVIOUS,\n CACHE_NS_WRITES,\n CONFIG_KEY_RESUME_MAP,\n START,\n} from \"../constants.js\";\nimport {\n Call,\n isCall,\n PregelExecutableTask,\n PregelScratchpad,\n PregelTaskDescription,\n SimpleTaskPath,\n TaskPath,\n VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n return current !== undefined ? current + 1 : 1;\n};\n\nfunction triggersNextStep(\n updatedChannels: Set<string>,\n triggerToNodes: Record<string, string[]> | undefined\n) {\n if (triggerToNodes == null) return false;\n\n for (const chan of updatedChannels) {\n if (triggerToNodes[chan]) return true;\n }\n\n return false;\n}\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n channelVersions: Record<string, number | string>\n): number | string | undefined {\n let maxVersion: number | string | undefined;\n for (const chan in channelVersions) {\n if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n if (maxVersion == null) {\n maxVersion = channelVersions[chan];\n } else {\n maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n }\n }\n return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n checkpoint: Checkpoint,\n interruptNodes: All | N[],\n tasks: PregelExecutableTask<N, C>[]\n): boolean {\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n let anyChannelUpdated = false;\n\n if (\n (checkpoint.channel_versions[START] ?? nullVersion) >\n (seen[START] ?? nullVersion)\n ) {\n anyChannelUpdated = true;\n } else {\n for (const chan in checkpoint.channel_versions) {\n if (\n !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n )\n continue;\n\n if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n anyChannelUpdated = true;\n break;\n }\n }\n }\n\n const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n interruptNodes === \"*\"\n ? !task.config?.tags?.includes(TAG_HIDDEN)\n : interruptNodes.includes(task.name)\n );\n\n return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n checkpoint: ReadonlyCheckpoint,\n channels: Cc,\n task: WritesProtocol<keyof Cc>,\n select: Array<keyof Cc> | keyof Cc,\n fresh: boolean = false\n): Record<string, unknown> | unknown {\n let updated = new Set<keyof Cc>();\n\n if (!Array.isArray(select)) {\n for (const [c] of task.writes) {\n if (c === select) {\n updated = new Set([c]);\n break;\n }\n }\n updated = updated || new Set();\n } else {\n updated = new Set(\n select.filter((c) => task.writes.some(([key, _]) => key === c))\n );\n }\n\n let values: Record<string, unknown>;\n\n if (fresh && updated.size > 0) {\n const localChannels = Object.fromEntries(\n Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n ) as Partial<Cc>;\n\n const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n _applyWrites(\n copyCheckpoint(newCheckpoint),\n newChannels,\n [task],\n undefined,\n undefined\n );\n values = readChannels({ ...channels, ...newChannels }, select);\n } else {\n values = readChannels(channels, select);\n }\n\n return values;\n}\n\nexport function _localWrite(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n commit: (writes: [string, any][]) => any,\n processes: Record<string, PregelNode>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writes: [string, any][]\n) {\n for (const [chan, value] of writes) {\n if ([PUSH, TASKS].includes(chan) && value != null) {\n if (!_isSend(value)) {\n throw new InvalidUpdateError(\n `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n value\n )}`\n );\n }\n if (!(value.node in processes)) {\n throw new InvalidUpdateError(\n `Invalid node name \"${value.node}\" in Send packet`\n );\n }\n }\n }\n commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n NO_WRITES,\n PUSH,\n RESUME,\n INTERRUPT,\n RETURN,\n ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n checkpoint: Checkpoint,\n channels: Cc,\n tasks: WritesProtocol<keyof Cc>[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNextVersion: ((version: any) => any) | undefined,\n triggerToNodes: Record<string, string[]> | undefined\n): Set<string> {\n // Sort tasks by first 3 path elements for deterministic order\n // Later path parts (like task IDs) are ignored for sorting\n tasks.sort((a, b) => {\n const aPath = a.path?.slice(0, 3) || [];\n const bPath = b.path?.slice(0, 3) || [];\n\n // Compare each path element\n for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n if (aPath[i] < bPath[i]) return -1;\n if (aPath[i] > bPath[i]) return 1;\n }\n\n // If one path is shorter, it comes first\n return aPath.length - bPath.length;\n });\n\n // if no task has triggers this is applying writes from the null task only\n // so we don't do anything other than update the channels written to\n const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n // Filter out non instances of BaseChannel\n const onlyChannels = getOnlyChannels(channels);\n\n // Update seen versions\n for (const task of tasks) {\n checkpoint.versions_seen[task.name] ??= {};\n for (const chan of task.triggers) {\n if (chan in checkpoint.channel_versions) {\n checkpoint.versions_seen[task.name][chan] =\n checkpoint.channel_versions[chan];\n }\n }\n }\n\n // Find the highest version of all channels\n let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n // Consume all channels that were read\n const channelsToConsume = new Set(\n tasks\n .flatMap((task) => task.triggers)\n .filter((chan) => !RESERVED.includes(chan))\n );\n\n let usedNewVersion = false;\n for (const chan of channelsToConsume) {\n if (chan in onlyChannels && onlyChannels[chan].consume()) {\n if (getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n usedNewVersion = true;\n }\n }\n }\n\n // Group writes by channel\n const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n for (const task of tasks) {\n for (const [chan, val] of task.writes) {\n if (IGNORE.has(chan)) {\n // do nothing\n } else if (chan in onlyChannels) {\n pendingWritesByChannel[chan] ??= [];\n pendingWritesByChannel[chan].push(val);\n }\n }\n }\n\n // Find the highest version of all channels\n if (maxVersion != null && getNextVersion != null) {\n maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;\n }\n\n const updatedChannels: Set<string> = new Set();\n // Apply writes to channels\n for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n if (chan in onlyChannels) {\n const channel = onlyChannels[chan];\n let updated;\n try {\n updated = channel.update(vals);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === InvalidUpdateError.unminifiable_name) {\n const wrappedError = new InvalidUpdateError(\n `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n vals\n )}: ${e.message}`\n );\n wrappedError.lc_error_code = e.lc_error_code;\n throw wrappedError;\n } else {\n throw e;\n }\n }\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n // Channels that weren't updated in this step are notified of a new step\n if (bumpStep) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.isAvailable() && !updatedChannels.has(chan)) {\n const updated = channel.update([]);\n\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n }\n\n // If this is (tentatively) the last superstep, notify all channels of finish\n if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.finish() && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n return updatedChannels;\n}\n\nfunction* candidateNodes(\n checkpoint: ReadonlyCheckpoint,\n processes: StrRecord<string, PregelNode>,\n extra: NextTaskExtraFields\n) {\n // This section is an optimization that allows which\n // nodes will be active during the next step.\n // When there's information about:\n // 1. Which channels were updated in the previous step\n // 2. Which nodes are triggered by which channels\n // Then we can determine which nodes should be triggered\n // in the next step without having to cycle through all nodes.\n if (extra.updatedChannels != null && extra.triggerToNodes != null) {\n const triggeredNodes = new Set<string>();\n\n // Get all nodes that have triggers associated with an updated channel\n for (const channel of extra.updatedChannels) {\n const nodeIds = extra.triggerToNodes[channel];\n for (const id of nodeIds ?? []) triggeredNodes.add(id);\n }\n\n // Sort the nodes to ensure deterministic order\n yield* [...triggeredNodes].sort();\n return;\n }\n\n // If there are no values in checkpoint, no need to run\n // through all the PULL candidates\n const isEmptyChannelVersions = (() => {\n for (const chan in checkpoint.channel_versions) {\n if (checkpoint.channel_versions[chan] !== null) return false;\n }\n return true;\n })();\n\n if (isEmptyChannelVersions) return;\n for (const name in processes) {\n if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n yield name;\n }\n}\n\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n | Record<string, PregelTaskDescription>\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n const tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription> = {};\n\n // Consume pending tasks\n const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n if (tasksChannel?.isAvailable()) {\n const len = tasksChannel.get().length;\n for (let i = 0; i < len; i += 1) {\n const task = _prepareSingleTask(\n [PUSH, i],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n }\n\n // Check if any processes should be run in next step\n // If so, prepare the values to be passed to them\n for (const name of candidateNodes(checkpoint, processes, extra)) {\n const task = _prepareSingleTask(\n [PULL, name],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n return tasks;\n}\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: SimpleTaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: LangGraphRunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFields\n):\n | PregelTaskDescription\n | PregelExecutableTask<keyof Nn, keyof Cc>\n | undefined {\n const { step, checkpointer, manager } = extra;\n const configurable = config.configurable ?? {};\n const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n const call = taskPath[taskPath.length - 1] as Call;\n const proc = getRunnableForFunc(call.name, call.func);\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? call.name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n const id = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n call.name,\n PUSH,\n taskPath[1],\n taskPath[2],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n // we append `true` to the task path to indicate that a call is being made\n // so we should not return interrupts from this task (responsibility lies with the parent)\n const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n const metadata = {\n langgraph_step: step,\n langgraph_node: call.name,\n langgraph_triggers: triggers,\n langgraph_path: outputTaskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const writes: [keyof Cc, unknown][] = [];\n const task = {\n name: call.name,\n input: call.input,\n proc,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n store: extra.store ?? config.store,\n }),\n {\n runName: call.name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: id,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: call.name,\n writes: writes as PendingWrite[],\n triggers,\n path: outputTaskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId: id,\n currentTaskInput: call.input,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: call.retry,\n cache_key: call.cache\n ? {\n key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n ttl: call.cache.ttl,\n }\n : undefined,\n id,\n path: outputTaskPath,\n writers: [],\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n return task;\n } else {\n return {\n id,\n name: call.name,\n interrupts: [],\n path: outputTaskPath,\n };\n }\n } else if (taskPath[0] === PUSH) {\n const index =\n typeof taskPath[1] === \"number\"\n ? taskPath[1]\n : parseInt(taskPath[1] as string, 10);\n\n if (!channels[TASKS]?.isAvailable()) {\n return undefined;\n }\n\n const sends = channels[TASKS].get() as SendProtocol[];\n if (index < 0 || index >= sends.length) {\n return undefined;\n }\n\n const packet =\n _isSendInterface(sends[index]) && !_isSend(sends[index])\n ? new Send(sends[index].node, sends[index].args)\n : sends[index];\n\n if (!_isSendInterface(packet)) {\n console.warn(\n `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n );\n return undefined;\n }\n if (!(packet.node in processes)) {\n console.warn(\n `Ignoring unknown node name ${packet.node} in pending sends.`\n );\n return undefined;\n }\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? packet.node\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n packet.node,\n PUSH,\n index.toString(),\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: packet.node,\n langgraph_triggers: triggers,\n langgraph_path: taskPath.slice(0, 3),\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const proc = processes[packet.node];\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name: packet.node,\n input: packet.args,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: packet.node,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: packet.node,\n writes: writes as PendingWrite[],\n triggers,\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: packet.args,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name: packet.node,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n } else if (taskPath[0] === PULL) {\n const name = taskPath[1].toString();\n const proc = processes[name];\n if (proc === undefined) {\n return undefined;\n }\n\n // Check if this task already has successful writes in the pending writes\n if (pendingWrites?.length) {\n // Find the task ID for this node/path\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n name,\n ]),\n checkpoint.id\n );\n\n // Check if there are successful writes (not ERROR) for this task ID\n const hasSuccessfulWrites = pendingWrites.some(\n (w) => w[0] === taskId && w[1] !== ERROR\n );\n\n // If task completed successfully, don't include it in next tasks\n if (hasSuccessfulWrites) {\n return undefined;\n }\n }\n\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n if (nullVersion === undefined) {\n return undefined;\n }\n const seen = checkpoint.versions_seen[name] ?? {};\n\n // Find the first trigger that is available and has a new version\n const trigger = proc.triggers.find((chan) => {\n if (!channels[chan].isAvailable()) return false;\n\n return (\n (checkpoint.channel_versions[chan] ?? nullVersion) >\n (seen[chan] ?? nullVersion)\n );\n });\n\n // If any of the channels read by this process were updated\n if (trigger !== undefined) {\n const val = _procInput(proc, channels, forExecution);\n if (val === undefined) {\n return undefined;\n }\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n [trigger],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: name,\n langgraph_triggers: [trigger],\n langgraph_path: taskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name,\n input: val,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => {\n writes.push(...items);\n },\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name,\n writes: writes as PendingWrite[],\n triggers: [trigger],\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: val,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers: [trigger],\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Function injected under CONFIG_KEY_READ in task config, to read current state.\n * Used by conditional edges to read a copy of the state with reflecting the writes\n * from that node only.\n *\n * @internal\n */\nfunction _procInput(\n proc: PregelNode,\n channels: StrRecord<string, BaseChannel>,\n forExecution: boolean\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let val: any;\n\n if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n val = {};\n for (const [k, chan] of Object.entries(proc.channels)) {\n if (proc.triggers.includes(chan)) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n return undefined;\n } else {\n throw e;\n }\n }\n } else if (chan in channels) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n }\n } else if (Array.isArray(proc.channels)) {\n let successfulRead = false;\n for (const chan of proc.channels) {\n try {\n val = readChannel(channels, chan, false);\n successfulRead = true;\n break;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n if (!successfulRead) {\n return undefined;\n }\n } else {\n throw new Error(\n `Invalid channels type, expected list or dict, got ${proc.channels}`\n );\n }\n\n // If the process has a mapper, apply it to the value\n if (forExecution && proc.mapper !== undefined) {\n val = proc.mapper(val);\n }\n\n return val;\n}\n\nfunction _scratchpad({\n pendingWrites,\n taskId,\n currentTaskInput,\n resumeMap,\n namespaceHash,\n}: {\n pendingWrites: CheckpointPendingWrite[];\n taskId: string;\n currentTaskInput: unknown;\n resumeMap: Record<string, unknown> | undefined;\n namespaceHash: string;\n}): PregelScratchpad {\n const nullResume = pendingWrites.find(\n ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n )?.[2];\n\n const resume = (() => {\n const result = pendingWrites\n .filter(\n ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n )\n .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n if (resumeMap != null && namespaceHash in resumeMap) {\n const mappedResume = resumeMap[namespaceHash];\n result.push(mappedResume);\n }\n\n return result;\n })();\n\n const scratchpad = {\n callCounter: 0,\n interruptCounter: -1,\n resume,\n nullResume,\n subgraphCounter: 0,\n currentTaskInput,\n consumeNullResume: () => {\n if (scratchpad.nullResume) {\n delete scratchpad.nullResume;\n pendingWrites.splice(\n pendingWrites.findIndex(\n ([writeTaskId, chan]) =>\n writeTaskId === NULL_TASK_ID && chan === RESUME\n ),\n 1\n );\n return nullResume;\n }\n\n return undefined;\n },\n };\n return scratchpad;\n}\n"],"mappings":"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"}
|
package/dist/pregel/call.cjs
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
2
1
|
const require_constants = require('../constants.cjs');
|
|
3
2
|
const require_utils = require('../utils.cjs');
|
|
4
3
|
const require_write = require('./write.cjs');
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
let _langchain_core_singletons = require("@langchain/core/singletons");
|
|
5
|
+
let _langchain_core_runnables = require("@langchain/core/runnables");
|
|
7
6
|
|
|
8
7
|
//#region src/pregel/call.ts
|
|
9
8
|
/**
|
|
10
9
|
* Wraps a user function in a Runnable that writes the returned value to the RETURN channel.
|
|
11
10
|
*/
|
|
12
11
|
function getRunnableForFunc(name, func) {
|
|
13
|
-
|
|
14
|
-
func: (input) => func(...input),
|
|
12
|
+
return new _langchain_core_runnables.RunnableSequence({
|
|
15
13
|
name,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
first: new require_utils.RunnableCallable({
|
|
15
|
+
func: (input) => func(...input),
|
|
16
|
+
name,
|
|
17
|
+
trace: false,
|
|
18
|
+
recurse: false
|
|
19
|
+
}),
|
|
22
20
|
last: new require_write.ChannelWrite([{
|
|
23
21
|
channel: require_constants.RETURN,
|
|
24
22
|
value: require_write.PASSTHROUGH
|
|
@@ -26,7 +24,7 @@ function getRunnableForFunc(name, func) {
|
|
|
26
24
|
});
|
|
27
25
|
}
|
|
28
26
|
function getRunnableForEntrypoint(name, func) {
|
|
29
|
-
|
|
27
|
+
return new require_utils.RunnableCallable({
|
|
30
28
|
func: (input, config) => {
|
|
31
29
|
return func(input, config);
|
|
32
30
|
},
|
|
@@ -34,10 +32,9 @@ function getRunnableForEntrypoint(name, func) {
|
|
|
34
32
|
trace: false,
|
|
35
33
|
recurse: false
|
|
36
34
|
});
|
|
37
|
-
return run;
|
|
38
35
|
}
|
|
39
36
|
function call({ func, name, cache, retry }, ...args) {
|
|
40
|
-
const config =
|
|
37
|
+
const config = _langchain_core_singletons.AsyncLocalStorageProviderSingleton.getRunnableConfig();
|
|
41
38
|
if (typeof config.configurable?.[require_constants.CONFIG_KEY_CALL] === "function") return config.configurable[require_constants.CONFIG_KEY_CALL](func, name, args, {
|
|
42
39
|
retry,
|
|
43
40
|
cache,
|
package/dist/pregel/call.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.cjs","names":["
|
|
1
|
+
{"version":3,"file":"call.cjs","names":["RunnableSequence","RunnableCallable","ChannelWrite","RETURN","PASSTHROUGH","TAG_HIDDEN","AsyncLocalStorageProviderSingleton","CONFIG_KEY_CALL"],"sources":["../../src/pregel/call.ts"],"sourcesContent":["import {\n Runnable,\n RunnableConfig,\n RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from \"../constants.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"./write.js\";\nimport { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nimport { RunnableCallable, type RunnableCallableArgs } from \"../utils.js\";\nimport { EntrypointFunc, EntrypointReturnT, TaskFunc } from \"../func/types.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\n\n/**\n * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.\n */\nexport function getRunnableForFunc<ArgsT extends unknown[], OutputT>(\n name: string,\n func: TaskFunc<ArgsT, OutputT>\n): Runnable<ArgsT, OutputT, LangGraphRunnableConfig> {\n const run = new RunnableCallable<ArgsT, OutputT>({\n func: (input: ArgsT) => func(...input),\n name,\n trace: false,\n recurse: false,\n } as RunnableCallableArgs);\n\n return new RunnableSequence<ArgsT, OutputT>({\n name,\n first: run,\n last: new ChannelWrite<OutputT>(\n [{ channel: RETURN, value: PASSTHROUGH }],\n [TAG_HIDDEN]\n ),\n });\n}\n\nexport function getRunnableForEntrypoint<InputT, OutputT>(\n name: string,\n func: EntrypointFunc<InputT, OutputT>\n): Runnable<InputT, EntrypointReturnT<OutputT>, LangGraphRunnableConfig> {\n const run = new RunnableCallable<InputT, EntrypointReturnT<OutputT>>({\n func: (input: InputT, config: LangGraphRunnableConfig) => {\n return func(input, config);\n },\n name,\n trace: false,\n recurse: false,\n });\n\n return run;\n}\n\nexport type CallWrapperOptions<ArgsT extends unknown[], OutputT> = {\n func: TaskFunc<ArgsT, OutputT>;\n name: string;\n retry?: RetryPolicy;\n cache?: CachePolicy;\n};\n\nexport function call<ArgsT extends unknown[], OutputT>(\n { func, name, cache, retry }: CallWrapperOptions<ArgsT, OutputT>,\n ...args: ArgsT\n): Promise<OutputT> {\n const config =\n AsyncLocalStorageProviderSingleton.getRunnableConfig() as RunnableConfig;\n if (typeof config.configurable?.[CONFIG_KEY_CALL] === \"function\") {\n return config.configurable[CONFIG_KEY_CALL](func, name, args, {\n retry,\n cache,\n callbacks: config.callbacks,\n });\n }\n throw new Error(\n \"Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.\"\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,mBACd,MACA,MACmD;AAQnD,QAAO,IAAIA,2CAAiC;EAC1C;EACA,OATU,IAAIC,+BAAiC;GAC/C,OAAO,UAAiB,KAAK,GAAG,MAAM;GACtC;GACA,OAAO;GACP,SAAS;GACV,CAAyB;EAKxB,MAAM,IAAIC,2BACR,CAAC;GAAE,SAASC;GAAQ,OAAOC;GAAa,CAAC,EACzC,CAACC,6BAAW,CACb;EACF,CAAC;;AAGJ,SAAgB,yBACd,MACA,MACuE;AAUvE,QATY,IAAIJ,+BAAqD;EACnE,OAAO,OAAe,WAAoC;AACxD,UAAO,KAAK,OAAO,OAAO;;EAE5B;EACA,OAAO;EACP,SAAS;EACV,CAAC;;AAYJ,SAAgB,KACd,EAAE,MAAM,MAAM,OAAO,SACrB,GAAG,MACe;CAClB,MAAM,SACJK,8DAAmC,mBAAmB;AACxD,KAAI,OAAO,OAAO,eAAeC,uCAAqB,WACpD,QAAO,OAAO,aAAaA,mCAAiB,MAAM,MAAM,MAAM;EAC5D;EACA;EACA,WAAW,OAAO;EACnB,CAAC;AAEJ,OAAM,IAAI,MACR,sHACD"}
|
package/dist/pregel/call.js
CHANGED
|
@@ -9,15 +9,14 @@ import { RunnableSequence } from "@langchain/core/runnables";
|
|
|
9
9
|
* Wraps a user function in a Runnable that writes the returned value to the RETURN channel.
|
|
10
10
|
*/
|
|
11
11
|
function getRunnableForFunc(name, func) {
|
|
12
|
-
const run = new RunnableCallable({
|
|
13
|
-
func: (input) => func(...input),
|
|
14
|
-
name,
|
|
15
|
-
trace: false,
|
|
16
|
-
recurse: false
|
|
17
|
-
});
|
|
18
12
|
return new RunnableSequence({
|
|
19
13
|
name,
|
|
20
|
-
first:
|
|
14
|
+
first: new RunnableCallable({
|
|
15
|
+
func: (input) => func(...input),
|
|
16
|
+
name,
|
|
17
|
+
trace: false,
|
|
18
|
+
recurse: false
|
|
19
|
+
}),
|
|
21
20
|
last: new ChannelWrite([{
|
|
22
21
|
channel: RETURN,
|
|
23
22
|
value: PASSTHROUGH
|
|
@@ -25,7 +24,7 @@ function getRunnableForFunc(name, func) {
|
|
|
25
24
|
});
|
|
26
25
|
}
|
|
27
26
|
function getRunnableForEntrypoint(name, func) {
|
|
28
|
-
|
|
27
|
+
return new RunnableCallable({
|
|
29
28
|
func: (input, config) => {
|
|
30
29
|
return func(input, config);
|
|
31
30
|
},
|
|
@@ -33,7 +32,6 @@ function getRunnableForEntrypoint(name, func) {
|
|
|
33
32
|
trace: false,
|
|
34
33
|
recurse: false
|
|
35
34
|
});
|
|
36
|
-
return run;
|
|
37
35
|
}
|
|
38
36
|
function call({ func, name, cache, retry }, ...args) {
|
|
39
37
|
const config = AsyncLocalStorageProviderSingleton.getRunnableConfig();
|
package/dist/pregel/call.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","names":[],"sources":["../../src/pregel/call.ts"],"sourcesContent":["import {\n Runnable,\n RunnableConfig,\n RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from \"../constants.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"./write.js\";\nimport { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nimport { RunnableCallable, type RunnableCallableArgs } from \"../utils.js\";\nimport { EntrypointFunc, EntrypointReturnT, TaskFunc } from \"../func/types.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\n\n/**\n * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.\n */\nexport function getRunnableForFunc<ArgsT extends unknown[], OutputT>(\n name: string,\n func: TaskFunc<ArgsT, OutputT>\n): Runnable<ArgsT, OutputT, LangGraphRunnableConfig> {\n const run = new RunnableCallable<ArgsT, OutputT>({\n func: (input: ArgsT) => func(...input),\n name,\n trace: false,\n recurse: false,\n } as RunnableCallableArgs);\n\n return new RunnableSequence<ArgsT, OutputT>({\n name,\n first: run,\n last: new ChannelWrite<OutputT>(\n [{ channel: RETURN, value: PASSTHROUGH }],\n [TAG_HIDDEN]\n ),\n });\n}\n\nexport function getRunnableForEntrypoint<InputT, OutputT>(\n name: string,\n func: EntrypointFunc<InputT, OutputT>\n): Runnable<InputT, EntrypointReturnT<OutputT>, LangGraphRunnableConfig> {\n const run = new RunnableCallable<InputT, EntrypointReturnT<OutputT>>({\n func: (input: InputT, config: LangGraphRunnableConfig) => {\n return func(input, config);\n },\n name,\n trace: false,\n recurse: false,\n });\n\n return run;\n}\n\nexport type CallWrapperOptions<ArgsT extends unknown[], OutputT> = {\n func: TaskFunc<ArgsT, OutputT>;\n name: string;\n retry?: RetryPolicy;\n cache?: CachePolicy;\n};\n\nexport function call<ArgsT extends unknown[], OutputT>(\n { func, name, cache, retry }: CallWrapperOptions<ArgsT, OutputT>,\n ...args: ArgsT\n): Promise<OutputT> {\n const config =\n AsyncLocalStorageProviderSingleton.getRunnableConfig() as RunnableConfig;\n if (typeof config.configurable?.[CONFIG_KEY_CALL] === \"function\") {\n return config.configurable[CONFIG_KEY_CALL](func, name, args, {\n retry,\n cache,\n callbacks: config.callbacks,\n });\n }\n throw new Error(\n \"Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.\"\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,mBACd,MACA,MACmD;
|
|
1
|
+
{"version":3,"file":"call.js","names":[],"sources":["../../src/pregel/call.ts"],"sourcesContent":["import {\n Runnable,\n RunnableConfig,\n RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport { AsyncLocalStorageProviderSingleton } from \"@langchain/core/singletons\";\nimport { CONFIG_KEY_CALL, RETURN, TAG_HIDDEN } from \"../constants.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"./write.js\";\nimport { CachePolicy, RetryPolicy } from \"./utils/index.js\";\nimport { RunnableCallable, type RunnableCallableArgs } from \"../utils.js\";\nimport { EntrypointFunc, EntrypointReturnT, TaskFunc } from \"../func/types.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\n\n/**\n * Wraps a user function in a Runnable that writes the returned value to the RETURN channel.\n */\nexport function getRunnableForFunc<ArgsT extends unknown[], OutputT>(\n name: string,\n func: TaskFunc<ArgsT, OutputT>\n): Runnable<ArgsT, OutputT, LangGraphRunnableConfig> {\n const run = new RunnableCallable<ArgsT, OutputT>({\n func: (input: ArgsT) => func(...input),\n name,\n trace: false,\n recurse: false,\n } as RunnableCallableArgs);\n\n return new RunnableSequence<ArgsT, OutputT>({\n name,\n first: run,\n last: new ChannelWrite<OutputT>(\n [{ channel: RETURN, value: PASSTHROUGH }],\n [TAG_HIDDEN]\n ),\n });\n}\n\nexport function getRunnableForEntrypoint<InputT, OutputT>(\n name: string,\n func: EntrypointFunc<InputT, OutputT>\n): Runnable<InputT, EntrypointReturnT<OutputT>, LangGraphRunnableConfig> {\n const run = new RunnableCallable<InputT, EntrypointReturnT<OutputT>>({\n func: (input: InputT, config: LangGraphRunnableConfig) => {\n return func(input, config);\n },\n name,\n trace: false,\n recurse: false,\n });\n\n return run;\n}\n\nexport type CallWrapperOptions<ArgsT extends unknown[], OutputT> = {\n func: TaskFunc<ArgsT, OutputT>;\n name: string;\n retry?: RetryPolicy;\n cache?: CachePolicy;\n};\n\nexport function call<ArgsT extends unknown[], OutputT>(\n { func, name, cache, retry }: CallWrapperOptions<ArgsT, OutputT>,\n ...args: ArgsT\n): Promise<OutputT> {\n const config =\n AsyncLocalStorageProviderSingleton.getRunnableConfig() as RunnableConfig;\n if (typeof config.configurable?.[CONFIG_KEY_CALL] === \"function\") {\n return config.configurable[CONFIG_KEY_CALL](func, name, args, {\n retry,\n cache,\n callbacks: config.callbacks,\n });\n }\n throw new Error(\n \"Async local storage not initialized. Please call initializeAsyncLocalStorageSingleton() before using this function.\"\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,mBACd,MACA,MACmD;AAQnD,QAAO,IAAI,iBAAiC;EAC1C;EACA,OATU,IAAI,iBAAiC;GAC/C,OAAO,UAAiB,KAAK,GAAG,MAAM;GACtC;GACA,OAAO;GACP,SAAS;GACV,CAAyB;EAKxB,MAAM,IAAI,aACR,CAAC;GAAE,SAAS;GAAQ,OAAO;GAAa,CAAC,EACzC,CAAC,WAAW,CACb;EACF,CAAC;;AAGJ,SAAgB,yBACd,MACA,MACuE;AAUvE,QATY,IAAI,iBAAqD;EACnE,OAAO,OAAe,WAAoC;AACxD,UAAO,KAAK,OAAO,OAAO;;EAE5B;EACA,OAAO;EACP,SAAS;EACV,CAAC;;AAYJ,SAAgB,KACd,EAAE,MAAM,MAAM,OAAO,SACrB,GAAG,MACe;CAClB,MAAM,SACJ,mCAAmC,mBAAmB;AACxD,KAAI,OAAO,OAAO,eAAe,qBAAqB,WACpD,QAAO,OAAO,aAAa,iBAAiB,MAAM,MAAM,MAAM;EAC5D;EACA;EACA,WAAW,OAAO;EACnB,CAAC;AAEJ,OAAM,IAAI,MACR,sHACD"}
|
package/dist/pregel/debug.cjs
CHANGED
|
@@ -24,17 +24,16 @@ const wrap = (color, text) => `${color.start}${text}${color.end}`;
|
|
|
24
24
|
function* mapDebugTasks(tasks) {
|
|
25
25
|
for (const { id, name, input, config, triggers, writes } of tasks) {
|
|
26
26
|
if (config?.tags?.includes(require_constants.TAG_HIDDEN)) continue;
|
|
27
|
-
const interrupts = writes.filter(([writeId, n]) => {
|
|
28
|
-
return writeId === id && n === require_constants.INTERRUPT;
|
|
29
|
-
}).map(([, v]) => {
|
|
30
|
-
return v;
|
|
31
|
-
});
|
|
32
27
|
yield {
|
|
33
28
|
id,
|
|
34
29
|
name,
|
|
35
30
|
input,
|
|
36
31
|
triggers,
|
|
37
|
-
interrupts
|
|
32
|
+
interrupts: writes.filter(([writeId, n]) => {
|
|
33
|
+
return writeId === id && n === require_constants.INTERRUPT;
|
|
34
|
+
}).map(([, v]) => {
|
|
35
|
+
return v;
|
|
36
|
+
})
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
39
|
}
|
|
@@ -83,8 +82,7 @@ function* mapDebugCheckpoint(config, channels, streamChannels, metadata, tasks,
|
|
|
83
82
|
const parentNs = config.configurable?.checkpoint_ns;
|
|
84
83
|
const taskStates = {};
|
|
85
84
|
for (const task of tasks) {
|
|
86
|
-
|
|
87
|
-
if (!candidates.find(require_subgraph.findSubgraphPregel)) continue;
|
|
85
|
+
if (!(task.subgraphs?.length ? task.subgraphs : [task.proc]).find(require_subgraph.findSubgraphPregel)) continue;
|
|
88
86
|
let taskNs = `${task.name}:${task.id}`;
|
|
89
87
|
if (parentNs) taskNs = `${parentNs}|${taskNs}`;
|
|
90
88
|
taskStates[task.id] = { configurable: {
|
|
@@ -115,7 +113,6 @@ function tasksWithWrites(tasks, pendingWrites, states, outputKeys) {
|
|
|
115
113
|
if (!results.length) return void 0;
|
|
116
114
|
return mapTaskResultWrites(results);
|
|
117
115
|
}
|
|
118
|
-
return void 0;
|
|
119
116
|
})();
|
|
120
117
|
if (error) return {
|
|
121
118
|
id: task.id,
|