@langchain/langgraph 0.2.60 → 0.2.62

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.
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/pregel/retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/pregel/retry.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PregelRunner = void 0;
4
4
  const types_js_1 = require("./types.cjs");
5
+ const index_js_1 = require("./utils/index.cjs");
5
6
  const constants_js_1 = require("../constants.cjs");
6
7
  const errors_js_1 = require("../errors.cjs");
7
8
  const retry_js_1 = require("./retry.cjs");
@@ -36,18 +37,23 @@ class PregelRunner {
36
37
  * @param options - Options for the execution.
37
38
  */
38
39
  async tick(options = {}) {
39
- const { timeout, signal, retryPolicy, onStepWrite, maxConcurrency } = options;
40
+ const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
40
41
  const nodeErrors = new Set();
41
42
  let graphBubbleUp;
43
+ const exceptionSignalController = new AbortController();
42
44
  // Start task execution
43
45
  const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
46
+ const currentSignals = this._initializeAbortSignals({
47
+ exceptionSignalController,
48
+ timeout,
49
+ signal: options.signal,
50
+ });
44
51
  const taskStream = this._executeTasksWithRetry(pendingTasks, {
45
- stepTimeout: timeout,
46
- signal,
52
+ signals: currentSignals,
47
53
  retryPolicy,
48
54
  maxConcurrency,
49
55
  });
50
- for await (const { task, error } of taskStream) {
56
+ for await (const { task, error, signalAborted } of taskStream) {
51
57
  this._commit(task, error);
52
58
  if ((0, errors_js_1.isGraphInterrupt)(error)) {
53
59
  graphBubbleUp = error;
@@ -55,7 +61,22 @@ class PregelRunner {
55
61
  else if ((0, errors_js_1.isGraphBubbleUp)(error) && !(0, errors_js_1.isGraphInterrupt)(graphBubbleUp)) {
56
62
  graphBubbleUp = error;
57
63
  }
58
- else if (error) {
64
+ else if (error && (nodeErrors.size === 0 || !signalAborted)) {
65
+ /*
66
+ * The goal here is to capture the exception that causes the graph to terminate early. In
67
+ * theory it's possible for multiple nodes to throw, so this also handles the edge case of
68
+ * capturing concurrent exceptions thrown before the node saw an abort. This is checked via
69
+ * the signalAborted flag, which records the state of the abort signal at the time the node
70
+ * execution finished.
71
+ *
72
+ * There is a case however where one node throws some error causing us to trigger an abort,
73
+ * which then causes other concurrently executing nodes to throw their own AbortErrors. In
74
+ * this case we don't care about reporting the abort errors thrown by the other nodes,
75
+ * because they don't tell the user anything about what caused the graph execution to
76
+ * terminate early, so we ignore them (and any other errors that occur after the node sees
77
+ * an abort signal).
78
+ */
79
+ exceptionSignalController.abort();
59
80
  nodeErrors.add(error);
60
81
  }
61
82
  }
@@ -75,14 +96,60 @@ class PregelRunner {
75
96
  throw graphBubbleUp;
76
97
  }
77
98
  }
99
+ /**
100
+ * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
101
+ * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
102
+ * while still allowing nodes to gracefully exit.
103
+ *
104
+ * This method must only be called once per PregelRunner#tick. It has the side effect of updating
105
+ * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
106
+ * ticks and subgraph calls.
107
+ *
108
+ * @param options - Options for the initialization.
109
+ * @returns The current abort signals.
110
+ * @internal
111
+ */
112
+ _initializeAbortSignals({ exceptionSignalController, timeout, signal, }) {
113
+ const previousSignals = this.loop.config.configurable?.[constants_js_1.CONFIG_KEY_ABORT_SIGNALS] ?? {};
114
+ // This is true when a node calls a subgraph and, rather than forwarding its own AbortSignal,
115
+ // it creates a new AbortSignal and passes that along instead.
116
+ const subgraphCalledWithSignalCreatedByNode = signal &&
117
+ previousSignals.composedAbortSignal &&
118
+ signal !== previousSignals.composedAbortSignal;
119
+ const externalAbortSignal = subgraphCalledWithSignalCreatedByNode
120
+ ? // Chain the signals here to make sure that the subgraph receives the external abort signal in
121
+ // addition to the signal created by the node.
122
+ (0, index_js_1.combineAbortSignals)(previousSignals.externalAbortSignal, signal)
123
+ : // Otherwise, just keep using the external abort signal, or initialize it if it hasn't been
124
+ // assigned yet
125
+ previousSignals.externalAbortSignal ?? signal;
126
+ const errorAbortSignal = previousSignals.errorAbortSignal
127
+ ? // Chaining here rather than always using a fresh one handles the case where a subgraph is
128
+ // called in a parallel branch to some other node in the parent graph.
129
+ (0, index_js_1.combineAbortSignals)(previousSignals.errorAbortSignal, exceptionSignalController.signal)
130
+ : exceptionSignalController.signal;
131
+ const timeoutAbortSignal = timeout
132
+ ? AbortSignal.timeout(timeout)
133
+ : undefined;
134
+ const composedAbortSignal = (0, index_js_1.combineAbortSignals)(...(externalAbortSignal ? [externalAbortSignal] : []), ...(timeoutAbortSignal ? [timeoutAbortSignal] : []), errorAbortSignal);
135
+ const currentSignals = {
136
+ externalAbortSignal,
137
+ errorAbortSignal,
138
+ timeoutAbortSignal,
139
+ composedAbortSignal,
140
+ };
141
+ this.loop.config = (0, index_js_1.patchConfigurable)(this.loop.config, {
142
+ [constants_js_1.CONFIG_KEY_ABORT_SIGNALS]: currentSignals,
143
+ });
144
+ return currentSignals;
145
+ }
78
146
  /**
79
147
  * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
80
148
  * @param tasks - The tasks to execute.
81
149
  * @param options - Options for the execution.
82
150
  */
83
151
  async *_executeTasksWithRetry(tasks, options) {
84
- const { stepTimeout, retryPolicy, maxConcurrency } = options ?? {};
85
- let signal = options?.signal;
152
+ const { retryPolicy, maxConcurrency, signals } = options ?? {};
86
153
  const promiseAddedSymbol = Symbol.for("promiseAdded");
87
154
  let addedPromiseSignal;
88
155
  let addedPromiseWait;
@@ -196,29 +263,26 @@ class PregelRunner {
196
263
  }
197
264
  return Promise.resolve();
198
265
  }
199
- if (stepTimeout && signal) {
200
- if ("any" in AbortSignal) {
201
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
- signal = AbortSignal.any([
203
- signal,
204
- AbortSignal.timeout(stepTimeout),
205
- ]);
206
- }
207
- }
208
- else if (stepTimeout) {
209
- signal = AbortSignal.timeout(stepTimeout);
210
- }
211
- if (signal?.aborted) {
266
+ if (signals?.composedAbortSignal?.aborted) {
212
267
  // note: don't use throwIfAborted here because it throws a DOMException,
213
268
  // which isn't consistent with how we throw on abort below.
214
269
  throw new Error("Abort");
215
270
  }
216
271
  let startedTasksCount = 0;
217
272
  let listener;
218
- const signalPromise = new Promise((_resolve, reject) => {
219
- listener = () => reject(new Error("Abort"));
220
- signal?.addEventListener("abort", listener);
221
- }).finally(() => signal?.removeEventListener("abort", listener));
273
+ const timeoutOrCancelSignal = signals?.externalAbortSignal || signals?.timeoutAbortSignal
274
+ ? (0, index_js_1.combineAbortSignals)(...(signals.externalAbortSignal
275
+ ? [signals.externalAbortSignal]
276
+ : []), ...(signals.timeoutAbortSignal ? [signals.timeoutAbortSignal] : []))
277
+ : undefined;
278
+ const abortPromise = timeoutOrCancelSignal
279
+ ? new Promise((_resolve, reject) => {
280
+ listener = () => reject(new Error("Abort"));
281
+ timeoutOrCancelSignal.addEventListener("abort", listener, {
282
+ once: true,
283
+ });
284
+ })
285
+ : undefined;
222
286
  while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&
223
287
  tasks.length) {
224
288
  for (; Object.values(executingTasksMap).length <
@@ -227,13 +291,17 @@ class PregelRunner {
227
291
  executingTasksMap[task.id] = (0, retry_js_1._runWithRetry)(task, retryPolicy, {
228
292
  [constants_js_1.CONFIG_KEY_SEND]: writer?.bind(null, this, task),
229
293
  [constants_js_1.CONFIG_KEY_CALL]: call?.bind(null, this, task),
230
- }).catch((error) => {
231
- return { task, error };
294
+ }, signals?.composedAbortSignal).catch((error) => {
295
+ return {
296
+ task,
297
+ error,
298
+ signalAborted: signals?.composedAbortSignal?.aborted,
299
+ };
232
300
  });
233
301
  }
234
302
  const settledTask = await Promise.race([
235
303
  ...Object.values(executingTasksMap),
236
- signalPromise,
304
+ ...(abortPromise ? [abortPromise] : []),
237
305
  addedPromiseWait,
238
306
  ]);
239
307
  if (settledTask === promiseAddedSymbol) {
@@ -47,6 +47,20 @@ export declare class PregelRunner {
47
47
  * @param options - Options for the execution.
48
48
  */
49
49
  tick(options?: TickOptions): Promise<void>;
50
+ /**
51
+ * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
52
+ * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
53
+ * while still allowing nodes to gracefully exit.
54
+ *
55
+ * This method must only be called once per PregelRunner#tick. It has the side effect of updating
56
+ * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
57
+ * ticks and subgraph calls.
58
+ *
59
+ * @param options - Options for the initialization.
60
+ * @returns The current abort signals.
61
+ * @internal
62
+ */
63
+ private _initializeAbortSignals;
50
64
  /**
51
65
  * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
52
66
  * @param tasks - The tasks to execute.
@@ -1,5 +1,6 @@
1
- import { Call } from "./types.js";
2
- import { CONFIG_KEY_SEND, CONFIG_KEY_SCRATCHPAD, PUSH, ERROR, INTERRUPT, RESUME, NO_WRITES, TAG_HIDDEN, RETURN, CONFIG_KEY_CALL, } from "../constants.js";
1
+ import { Call, } from "./types.js";
2
+ import { combineAbortSignals, patchConfigurable, } from "./utils/index.js";
3
+ import { CONFIG_KEY_SEND, CONFIG_KEY_SCRATCHPAD, PUSH, ERROR, INTERRUPT, RESUME, NO_WRITES, TAG_HIDDEN, RETURN, CONFIG_KEY_CALL, CONFIG_KEY_ABORT_SIGNALS, } from "../constants.js";
3
4
  import { isGraphBubbleUp, isGraphInterrupt } from "../errors.js";
4
5
  import { _runWithRetry } from "./retry.js";
5
6
  /**
@@ -33,18 +34,23 @@ export class PregelRunner {
33
34
  * @param options - Options for the execution.
34
35
  */
35
36
  async tick(options = {}) {
36
- const { timeout, signal, retryPolicy, onStepWrite, maxConcurrency } = options;
37
+ const { timeout, retryPolicy, onStepWrite, maxConcurrency } = options;
37
38
  const nodeErrors = new Set();
38
39
  let graphBubbleUp;
40
+ const exceptionSignalController = new AbortController();
39
41
  // Start task execution
40
42
  const pendingTasks = Object.values(this.loop.tasks).filter((t) => t.writes.length === 0);
43
+ const currentSignals = this._initializeAbortSignals({
44
+ exceptionSignalController,
45
+ timeout,
46
+ signal: options.signal,
47
+ });
41
48
  const taskStream = this._executeTasksWithRetry(pendingTasks, {
42
- stepTimeout: timeout,
43
- signal,
49
+ signals: currentSignals,
44
50
  retryPolicy,
45
51
  maxConcurrency,
46
52
  });
47
- for await (const { task, error } of taskStream) {
53
+ for await (const { task, error, signalAborted } of taskStream) {
48
54
  this._commit(task, error);
49
55
  if (isGraphInterrupt(error)) {
50
56
  graphBubbleUp = error;
@@ -52,7 +58,22 @@ export class PregelRunner {
52
58
  else if (isGraphBubbleUp(error) && !isGraphInterrupt(graphBubbleUp)) {
53
59
  graphBubbleUp = error;
54
60
  }
55
- else if (error) {
61
+ else if (error && (nodeErrors.size === 0 || !signalAborted)) {
62
+ /*
63
+ * The goal here is to capture the exception that causes the graph to terminate early. In
64
+ * theory it's possible for multiple nodes to throw, so this also handles the edge case of
65
+ * capturing concurrent exceptions thrown before the node saw an abort. This is checked via
66
+ * the signalAborted flag, which records the state of the abort signal at the time the node
67
+ * execution finished.
68
+ *
69
+ * There is a case however where one node throws some error causing us to trigger an abort,
70
+ * which then causes other concurrently executing nodes to throw their own AbortErrors. In
71
+ * this case we don't care about reporting the abort errors thrown by the other nodes,
72
+ * because they don't tell the user anything about what caused the graph execution to
73
+ * terminate early, so we ignore them (and any other errors that occur after the node sees
74
+ * an abort signal).
75
+ */
76
+ exceptionSignalController.abort();
56
77
  nodeErrors.add(error);
57
78
  }
58
79
  }
@@ -72,14 +93,60 @@ export class PregelRunner {
72
93
  throw graphBubbleUp;
73
94
  }
74
95
  }
96
+ /**
97
+ * Initializes the current AbortSignals for the PregelRunner, handling the various ways that
98
+ * AbortSignals must be chained together so that the PregelLoop can be interrupted if necessary
99
+ * while still allowing nodes to gracefully exit.
100
+ *
101
+ * This method must only be called once per PregelRunner#tick. It has the side effect of updating
102
+ * the PregelLoop#config with the new AbortSignals so they may be propagated correctly to future
103
+ * ticks and subgraph calls.
104
+ *
105
+ * @param options - Options for the initialization.
106
+ * @returns The current abort signals.
107
+ * @internal
108
+ */
109
+ _initializeAbortSignals({ exceptionSignalController, timeout, signal, }) {
110
+ const previousSignals = this.loop.config.configurable?.[CONFIG_KEY_ABORT_SIGNALS] ?? {};
111
+ // This is true when a node calls a subgraph and, rather than forwarding its own AbortSignal,
112
+ // it creates a new AbortSignal and passes that along instead.
113
+ const subgraphCalledWithSignalCreatedByNode = signal &&
114
+ previousSignals.composedAbortSignal &&
115
+ signal !== previousSignals.composedAbortSignal;
116
+ const externalAbortSignal = subgraphCalledWithSignalCreatedByNode
117
+ ? // Chain the signals here to make sure that the subgraph receives the external abort signal in
118
+ // addition to the signal created by the node.
119
+ combineAbortSignals(previousSignals.externalAbortSignal, signal)
120
+ : // Otherwise, just keep using the external abort signal, or initialize it if it hasn't been
121
+ // assigned yet
122
+ previousSignals.externalAbortSignal ?? signal;
123
+ const errorAbortSignal = previousSignals.errorAbortSignal
124
+ ? // Chaining here rather than always using a fresh one handles the case where a subgraph is
125
+ // called in a parallel branch to some other node in the parent graph.
126
+ combineAbortSignals(previousSignals.errorAbortSignal, exceptionSignalController.signal)
127
+ : exceptionSignalController.signal;
128
+ const timeoutAbortSignal = timeout
129
+ ? AbortSignal.timeout(timeout)
130
+ : undefined;
131
+ const composedAbortSignal = combineAbortSignals(...(externalAbortSignal ? [externalAbortSignal] : []), ...(timeoutAbortSignal ? [timeoutAbortSignal] : []), errorAbortSignal);
132
+ const currentSignals = {
133
+ externalAbortSignal,
134
+ errorAbortSignal,
135
+ timeoutAbortSignal,
136
+ composedAbortSignal,
137
+ };
138
+ this.loop.config = patchConfigurable(this.loop.config, {
139
+ [CONFIG_KEY_ABORT_SIGNALS]: currentSignals,
140
+ });
141
+ return currentSignals;
142
+ }
75
143
  /**
76
144
  * Concurrently executes tasks with the requested retry policy, yielding a {@link SettledPregelTask} for each task as it completes.
77
145
  * @param tasks - The tasks to execute.
78
146
  * @param options - Options for the execution.
79
147
  */
80
148
  async *_executeTasksWithRetry(tasks, options) {
81
- const { stepTimeout, retryPolicy, maxConcurrency } = options ?? {};
82
- let signal = options?.signal;
149
+ const { retryPolicy, maxConcurrency, signals } = options ?? {};
83
150
  const promiseAddedSymbol = Symbol.for("promiseAdded");
84
151
  let addedPromiseSignal;
85
152
  let addedPromiseWait;
@@ -193,29 +260,26 @@ export class PregelRunner {
193
260
  }
194
261
  return Promise.resolve();
195
262
  }
196
- if (stepTimeout && signal) {
197
- if ("any" in AbortSignal) {
198
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
- signal = AbortSignal.any([
200
- signal,
201
- AbortSignal.timeout(stepTimeout),
202
- ]);
203
- }
204
- }
205
- else if (stepTimeout) {
206
- signal = AbortSignal.timeout(stepTimeout);
207
- }
208
- if (signal?.aborted) {
263
+ if (signals?.composedAbortSignal?.aborted) {
209
264
  // note: don't use throwIfAborted here because it throws a DOMException,
210
265
  // which isn't consistent with how we throw on abort below.
211
266
  throw new Error("Abort");
212
267
  }
213
268
  let startedTasksCount = 0;
214
269
  let listener;
215
- const signalPromise = new Promise((_resolve, reject) => {
216
- listener = () => reject(new Error("Abort"));
217
- signal?.addEventListener("abort", listener);
218
- }).finally(() => signal?.removeEventListener("abort", listener));
270
+ const timeoutOrCancelSignal = signals?.externalAbortSignal || signals?.timeoutAbortSignal
271
+ ? combineAbortSignals(...(signals.externalAbortSignal
272
+ ? [signals.externalAbortSignal]
273
+ : []), ...(signals.timeoutAbortSignal ? [signals.timeoutAbortSignal] : []))
274
+ : undefined;
275
+ const abortPromise = timeoutOrCancelSignal
276
+ ? new Promise((_resolve, reject) => {
277
+ listener = () => reject(new Error("Abort"));
278
+ timeoutOrCancelSignal.addEventListener("abort", listener, {
279
+ once: true,
280
+ });
281
+ })
282
+ : undefined;
219
283
  while ((startedTasksCount === 0 || Object.keys(executingTasksMap).length > 0) &&
220
284
  tasks.length) {
221
285
  for (; Object.values(executingTasksMap).length <
@@ -224,13 +288,17 @@ export class PregelRunner {
224
288
  executingTasksMap[task.id] = _runWithRetry(task, retryPolicy, {
225
289
  [CONFIG_KEY_SEND]: writer?.bind(null, this, task),
226
290
  [CONFIG_KEY_CALL]: call?.bind(null, this, task),
227
- }).catch((error) => {
228
- return { task, error };
291
+ }, signals?.composedAbortSignal).catch((error) => {
292
+ return {
293
+ task,
294
+ error,
295
+ signalAborted: signals?.composedAbortSignal?.aborted,
296
+ };
229
297
  });
230
298
  }
231
299
  const settledTask = await Promise.race([
232
300
  ...Object.values(executingTasksMap),
233
- signalPromise,
301
+ ...(abortPromise ? [abortPromise] : []),
234
302
  addedPromiseWait,
235
303
  ]);
236
304
  if (settledTask === promiseAddedSymbol) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/pregel/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/pregel/runner.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,68 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IterableReadableWritableStream = void 0;
3
+ exports.IterableReadableWritableStream = exports.IterableReadableStreamWithAbortSignal = void 0;
4
4
  const stream_1 = require("@langchain/core/utils/stream");
5
+ /**
6
+ * A wrapper around an IterableReadableStream that allows for aborting the stream when
7
+ * {@link cancel} is called.
8
+ */
9
+ class IterableReadableStreamWithAbortSignal extends stream_1.IterableReadableStream {
10
+ /**
11
+ * @param readableStream - The stream to wrap.
12
+ * @param abortController - The abort controller to use. Optional. One will be created if not provided.
13
+ */
14
+ constructor(readableStream, abortController) {
15
+ const reader = readableStream.getReader();
16
+ const ac = abortController ?? new AbortController();
17
+ super({
18
+ start(controller) {
19
+ return pump();
20
+ function pump() {
21
+ return reader.read().then(({ done, value }) => {
22
+ // When no more data needs to be consumed, close the stream
23
+ if (done) {
24
+ controller.close();
25
+ return;
26
+ }
27
+ // Enqueue the next data chunk into our target stream
28
+ controller.enqueue(value);
29
+ return pump();
30
+ });
31
+ }
32
+ },
33
+ });
34
+ Object.defineProperty(this, "_abortController", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: void 0
39
+ });
40
+ Object.defineProperty(this, "_reader", {
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true,
44
+ value: void 0
45
+ });
46
+ this._abortController = ac;
47
+ this._reader = reader;
48
+ }
49
+ /**
50
+ * Aborts the stream, abandoning any pending operations in progress. Calling this triggers an
51
+ * {@link AbortSignal} that is propagated to the tasks that are producing the data for this stream.
52
+ * @param reason - The reason for aborting the stream. Optional.
53
+ */
54
+ async cancel(reason) {
55
+ this._abortController.abort(reason);
56
+ this._reader.releaseLock();
57
+ }
58
+ /**
59
+ * The {@link AbortSignal} for the stream. Aborted when {@link cancel} is called.
60
+ */
61
+ get signal() {
62
+ return this._abortController.signal;
63
+ }
64
+ }
65
+ exports.IterableReadableStreamWithAbortSignal = IterableReadableStreamWithAbortSignal;
5
66
  class IterableReadableWritableStream extends stream_1.IterableReadableStream {
6
67
  get closed() {
7
68
  return this._closed;
@@ -1,6 +1,29 @@
1
1
  import { IterableReadableStream } from "@langchain/core/utils/stream";
2
2
  import { StreamMode } from "./types.js";
3
3
  export type StreamChunk = [string[], StreamMode, unknown];
4
+ /**
5
+ * A wrapper around an IterableReadableStream that allows for aborting the stream when
6
+ * {@link cancel} is called.
7
+ */
8
+ export declare class IterableReadableStreamWithAbortSignal<T> extends IterableReadableStream<T> {
9
+ protected _abortController: AbortController;
10
+ protected _reader: ReadableStreamDefaultReader<T>;
11
+ /**
12
+ * @param readableStream - The stream to wrap.
13
+ * @param abortController - The abort controller to use. Optional. One will be created if not provided.
14
+ */
15
+ constructor(readableStream: ReadableStream<T>, abortController?: AbortController);
16
+ /**
17
+ * Aborts the stream, abandoning any pending operations in progress. Calling this triggers an
18
+ * {@link AbortSignal} that is propagated to the tasks that are producing the data for this stream.
19
+ * @param reason - The reason for aborting the stream. Optional.
20
+ */
21
+ cancel(reason?: unknown): Promise<void>;
22
+ /**
23
+ * The {@link AbortSignal} for the stream. Aborted when {@link cancel} is called.
24
+ */
25
+ get signal(): AbortSignal;
26
+ }
4
27
  export declare class IterableReadableWritableStream extends IterableReadableStream<StreamChunk> {
5
28
  modes: Set<StreamMode>;
6
29
  private controller;
@@ -1,4 +1,64 @@
1
1
  import { IterableReadableStream } from "@langchain/core/utils/stream";
2
+ /**
3
+ * A wrapper around an IterableReadableStream that allows for aborting the stream when
4
+ * {@link cancel} is called.
5
+ */
6
+ export class IterableReadableStreamWithAbortSignal extends IterableReadableStream {
7
+ /**
8
+ * @param readableStream - The stream to wrap.
9
+ * @param abortController - The abort controller to use. Optional. One will be created if not provided.
10
+ */
11
+ constructor(readableStream, abortController) {
12
+ const reader = readableStream.getReader();
13
+ const ac = abortController ?? new AbortController();
14
+ super({
15
+ start(controller) {
16
+ return pump();
17
+ function pump() {
18
+ return reader.read().then(({ done, value }) => {
19
+ // When no more data needs to be consumed, close the stream
20
+ if (done) {
21
+ controller.close();
22
+ return;
23
+ }
24
+ // Enqueue the next data chunk into our target stream
25
+ controller.enqueue(value);
26
+ return pump();
27
+ });
28
+ }
29
+ },
30
+ });
31
+ Object.defineProperty(this, "_abortController", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: void 0
36
+ });
37
+ Object.defineProperty(this, "_reader", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: void 0
42
+ });
43
+ this._abortController = ac;
44
+ this._reader = reader;
45
+ }
46
+ /**
47
+ * Aborts the stream, abandoning any pending operations in progress. Calling this triggers an
48
+ * {@link AbortSignal} that is propagated to the tasks that are producing the data for this stream.
49
+ * @param reason - The reason for aborting the stream. Optional.
50
+ */
51
+ async cancel(reason) {
52
+ this._abortController.abort(reason);
53
+ this._reader.releaseLock();
54
+ }
55
+ /**
56
+ * The {@link AbortSignal} for the stream. Aborted when {@link cancel} is called.
57
+ */
58
+ get signal() {
59
+ return this._abortController.signal;
60
+ }
61
+ }
2
62
  export class IterableReadableWritableStream extends IterableReadableStream {
3
63
  get closed() {
4
64
  return this._closed;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/pregel/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAMtE,MAAM,OAAO,8BAA+B,SAAQ,sBAAmC;IASrF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,MAGX;QACC,IAAI,+BAEK,CAAC;QACV,MAAM,uBAAuB,GAC3B,IAAI,OAAO,CAAkC,CAAC,OAAO,EAAE,EAAE;YACvD,+BAA+B,GAAG,OAAO,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEL,KAAK,CAAC;YACJ,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBACpB,+BAAgC,CAAC,UAAU,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC,CAAC;QA5BL;;;;;WAAuB;QAEvB;;;;;WAAoD;QAEpD;;;;;WAAqD;QAErD;;;;mBAA2B,KAAK;WAAC;QAwB/B,qEAAqE;QACrE,cAAc;QACd,KAAK,uBAAuB,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC/C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI;YACF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SACzB;QAAC,OAAO,CAAC,EAAE;YACV,OAAO;SACR;gBAAS;YACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACrB;IACH,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,CAAM;QACV,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/pregel/stream.ts"],"names":[],"mappings":"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"}