@langchain/langgraph 1.3.6 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channels/base.cjs +78 -2
- package/dist/channels/base.cjs.map +1 -1
- package/dist/channels/base.d.cts +35 -2
- package/dist/channels/base.d.cts.map +1 -1
- package/dist/channels/base.d.ts +35 -2
- package/dist/channels/base.d.ts.map +1 -1
- package/dist/channels/base.js +77 -4
- package/dist/channels/base.js.map +1 -1
- package/dist/channels/delta.cjs +136 -0
- package/dist/channels/delta.cjs.map +1 -0
- package/dist/channels/delta.d.cts +99 -0
- package/dist/channels/delta.d.cts.map +1 -0
- package/dist/channels/delta.d.ts +99 -0
- package/dist/channels/delta.d.ts.map +1 -0
- package/dist/channels/delta.js +136 -0
- package/dist/channels/delta.js.map +1 -0
- package/dist/channels/index.cjs +5 -0
- package/dist/channels/index.d.cts +3 -2
- package/dist/channels/index.d.ts +3 -2
- package/dist/channels/index.js +3 -2
- package/dist/constants.cjs +62 -4
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +33 -2
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.ts +33 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +59 -5
- package/dist/constants.js.map +1 -1
- package/dist/errors.cjs +128 -0
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.cts +86 -1
- package/dist/errors.d.cts.map +1 -1
- package/dist/errors.d.ts +86 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +123 -1
- package/dist/errors.js.map +1 -1
- package/dist/func/index.cjs +9 -2
- package/dist/func/index.cjs.map +1 -1
- package/dist/func/index.d.cts +14 -0
- package/dist/func/index.d.cts.map +1 -1
- package/dist/func/index.d.ts +14 -0
- package/dist/func/index.d.ts.map +1 -1
- package/dist/func/index.js +9 -2
- package/dist/func/index.js.map +1 -1
- package/dist/graph/graph.cjs +44 -7
- package/dist/graph/graph.cjs.map +1 -1
- package/dist/graph/graph.d.cts +24 -2
- package/dist/graph/graph.d.cts.map +1 -1
- package/dist/graph/graph.d.ts +24 -2
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +44 -7
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/index.d.ts +3 -3
- package/dist/graph/messages_reducer.cjs +55 -0
- package/dist/graph/messages_reducer.cjs.map +1 -1
- package/dist/graph/messages_reducer.d.cts +28 -1
- package/dist/graph/messages_reducer.d.cts.map +1 -1
- package/dist/graph/messages_reducer.d.ts +28 -1
- package/dist/graph/messages_reducer.d.ts.map +1 -1
- package/dist/graph/messages_reducer.js +56 -2
- package/dist/graph/messages_reducer.js.map +1 -1
- package/dist/graph/state.cjs +174 -7
- package/dist/graph/state.cjs.map +1 -1
- package/dist/graph/state.d.cts +193 -17
- package/dist/graph/state.d.cts.map +1 -1
- package/dist/graph/state.d.ts +193 -17
- package/dist/graph/state.d.ts.map +1 -1
- package/dist/graph/state.js +175 -8
- package/dist/graph/state.js.map +1 -1
- package/dist/graph/zod/schema.cjs +5 -0
- package/dist/graph/zod/schema.cjs.map +1 -1
- package/dist/graph/zod/schema.d.cts.map +1 -1
- package/dist/graph/zod/schema.d.ts.map +1 -1
- package/dist/graph/zod/schema.js +5 -0
- package/dist/graph/zod/schema.js.map +1 -1
- package/dist/index.cjs +11 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -8
- package/dist/index.d.ts +11 -8
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/prebuilt/react_agent_executor.d.cts +1 -1
- package/dist/pregel/algo.cjs +182 -21
- package/dist/pregel/algo.cjs.map +1 -1
- package/dist/pregel/algo.d.cts +1 -1
- package/dist/pregel/algo.d.cts.map +1 -1
- package/dist/pregel/algo.d.ts +1 -1
- package/dist/pregel/algo.d.ts.map +1 -1
- package/dist/pregel/algo.js +185 -25
- package/dist/pregel/algo.js.map +1 -1
- package/dist/pregel/call.cjs +2 -1
- package/dist/pregel/call.cjs.map +1 -1
- package/dist/pregel/call.js +2 -1
- package/dist/pregel/call.js.map +1 -1
- package/dist/pregel/index.cjs +15 -3
- package/dist/pregel/index.cjs.map +1 -1
- package/dist/pregel/index.d.cts.map +1 -1
- package/dist/pregel/index.d.ts.map +1 -1
- package/dist/pregel/index.js +17 -5
- package/dist/pregel/index.js.map +1 -1
- package/dist/pregel/loop.cjs +362 -41
- package/dist/pregel/loop.cjs.map +1 -1
- package/dist/pregel/loop.js +365 -44
- package/dist/pregel/loop.js.map +1 -1
- package/dist/pregel/messages-v2.cjs +1 -1
- package/dist/pregel/messages-v2.js +1 -1
- package/dist/pregel/messages.cjs +1 -1
- package/dist/pregel/messages.js +1 -1
- package/dist/pregel/read.cjs +15 -5
- package/dist/pregel/read.cjs.map +1 -1
- package/dist/pregel/read.d.cts +9 -0
- package/dist/pregel/read.d.cts.map +1 -1
- package/dist/pregel/read.d.ts +9 -0
- package/dist/pregel/read.d.ts.map +1 -1
- package/dist/pregel/read.js +15 -5
- package/dist/pregel/read.js.map +1 -1
- package/dist/pregel/remote-run-stream.cjs +107 -0
- package/dist/pregel/remote-run-stream.cjs.map +1 -0
- package/dist/pregel/remote-run-stream.d.cts +33 -0
- package/dist/pregel/remote-run-stream.d.cts.map +1 -0
- package/dist/pregel/remote-run-stream.d.ts +33 -0
- package/dist/pregel/remote-run-stream.d.ts.map +1 -0
- package/dist/pregel/remote-run-stream.js +107 -0
- package/dist/pregel/remote-run-stream.js.map +1 -0
- package/dist/pregel/remote.cjs +61 -1
- package/dist/pregel/remote.cjs.map +1 -1
- package/dist/pregel/remote.d.cts +17 -0
- package/dist/pregel/remote.d.cts.map +1 -1
- package/dist/pregel/remote.d.ts +17 -0
- package/dist/pregel/remote.d.ts.map +1 -1
- package/dist/pregel/remote.js +61 -1
- package/dist/pregel/remote.js.map +1 -1
- package/dist/pregel/replay.cjs +62 -0
- package/dist/pregel/replay.cjs.map +1 -0
- package/dist/pregel/replay.js +62 -0
- package/dist/pregel/replay.js.map +1 -0
- package/dist/pregel/retry.cjs +8 -6
- package/dist/pregel/retry.cjs.map +1 -1
- package/dist/pregel/retry.js +8 -6
- package/dist/pregel/retry.js.map +1 -1
- package/dist/pregel/runnable_types.d.cts +20 -0
- package/dist/pregel/runnable_types.d.cts.map +1 -1
- package/dist/pregel/runnable_types.d.ts +20 -0
- package/dist/pregel/runnable_types.d.ts.map +1 -1
- package/dist/pregel/runner.cjs +48 -7
- package/dist/pregel/runner.cjs.map +1 -1
- package/dist/pregel/runner.js +50 -9
- package/dist/pregel/runner.js.map +1 -1
- package/dist/pregel/runtime.cjs +64 -0
- package/dist/pregel/runtime.cjs.map +1 -0
- package/dist/pregel/runtime.d.cts +57 -0
- package/dist/pregel/runtime.d.cts.map +1 -0
- package/dist/pregel/runtime.d.ts +57 -0
- package/dist/pregel/runtime.d.ts.map +1 -0
- package/dist/pregel/runtime.js +64 -0
- package/dist/pregel/runtime.js.map +1 -0
- package/dist/pregel/stream.cjs +2 -0
- package/dist/pregel/stream.cjs.map +1 -1
- package/dist/pregel/stream.js +2 -0
- package/dist/pregel/stream.js.map +1 -1
- package/dist/pregel/timeout.cjs +216 -0
- package/dist/pregel/timeout.cjs.map +1 -0
- package/dist/pregel/timeout.js +216 -0
- package/dist/pregel/timeout.js.map +1 -0
- package/dist/pregel/types.cjs +3 -1
- package/dist/pregel/types.cjs.map +1 -1
- package/dist/pregel/types.d.cts +13 -0
- package/dist/pregel/types.d.cts.map +1 -1
- package/dist/pregel/types.d.ts +14 -1
- package/dist/pregel/types.d.ts.map +1 -1
- package/dist/pregel/types.js +3 -1
- package/dist/pregel/types.js.map +1 -1
- package/dist/pregel/utils/config.cjs +3 -1
- 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 +3 -1
- package/dist/pregel/utils/config.js.map +1 -1
- package/dist/pregel/utils/index.cjs +1 -0
- package/dist/pregel/utils/index.cjs.map +1 -1
- package/dist/pregel/utils/index.d.cts +6 -1
- package/dist/pregel/utils/index.d.cts.map +1 -1
- package/dist/pregel/utils/index.d.ts +6 -1
- package/dist/pregel/utils/index.d.ts.map +1 -1
- package/dist/pregel/utils/index.js +1 -0
- package/dist/pregel/utils/index.js.map +1 -1
- package/dist/pregel/utils/timeout.cjs +34 -0
- package/dist/pregel/utils/timeout.cjs.map +1 -0
- package/dist/pregel/utils/timeout.d.cts +45 -0
- package/dist/pregel/utils/timeout.d.cts.map +1 -0
- package/dist/pregel/utils/timeout.d.ts +45 -0
- package/dist/pregel/utils/timeout.d.ts.map +1 -0
- package/dist/pregel/utils/timeout.js +34 -0
- package/dist/pregel/utils/timeout.js.map +1 -0
- package/dist/stream/index.cjs +1 -0
- package/dist/stream/index.d.cts +2 -1
- package/dist/stream/index.d.ts +2 -1
- package/dist/stream/index.js +1 -0
- package/dist/stream/stream-channel.d.cts +9 -1
- package/dist/stream/stream-channel.d.cts.map +1 -1
- package/dist/stream/stream-channel.d.ts +9 -1
- package/dist/stream/stream-channel.d.ts.map +1 -1
- package/dist/stream/subscription.cjs +136 -0
- package/dist/stream/subscription.cjs.map +1 -0
- package/dist/stream/subscription.d.cts +94 -0
- package/dist/stream/subscription.d.cts.map +1 -0
- package/dist/stream/subscription.d.ts +94 -0
- package/dist/stream/subscription.d.ts.map +1 -0
- package/dist/stream/subscription.js +131 -0
- package/dist/stream/subscription.js.map +1 -0
- package/dist/stream/types.d.cts +1 -1
- package/dist/stream/types.d.ts +1 -1
- package/dist/stream.cjs +16 -0
- package/dist/stream.d.cts +5 -0
- package/dist/stream.d.ts +5 -0
- package/dist/stream.js +4 -0
- package/dist/web.cjs +11 -0
- package/dist/web.d.cts +11 -8
- package/dist/web.d.ts +11 -8
- package/dist/web.js +5 -3
- package/package.json +18 -6
package/dist/pregel/read.js
CHANGED
|
@@ -38,10 +38,13 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
38
38
|
tags = [];
|
|
39
39
|
retryPolicy;
|
|
40
40
|
cachePolicy;
|
|
41
|
+
timeout;
|
|
41
42
|
subgraphs;
|
|
42
43
|
ends;
|
|
44
|
+
isErrorHandler;
|
|
45
|
+
errorHandlerNode;
|
|
43
46
|
constructor(fields) {
|
|
44
|
-
const { channels, triggers, mapper, writers, bound, kwargs, metadata, retryPolicy, cachePolicy, tags, subgraphs, ends } = fields;
|
|
47
|
+
const { channels, triggers, mapper, writers, bound, kwargs, metadata, retryPolicy, cachePolicy, timeout, tags, subgraphs, ends, isErrorHandler, errorHandlerNode } = fields;
|
|
45
48
|
const mergedTags = [...fields.config?.tags ? fields.config.tags : [], ...tags ?? []];
|
|
46
49
|
super({
|
|
47
50
|
...fields,
|
|
@@ -61,8 +64,11 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
61
64
|
this.tags = mergedTags;
|
|
62
65
|
this.retryPolicy = retryPolicy;
|
|
63
66
|
this.cachePolicy = cachePolicy;
|
|
67
|
+
this.timeout = timeout;
|
|
64
68
|
this.subgraphs = subgraphs;
|
|
65
69
|
this.ends = ends;
|
|
70
|
+
this.isErrorHandler = isErrorHandler;
|
|
71
|
+
this.errorHandlerNode = errorHandlerNode;
|
|
66
72
|
}
|
|
67
73
|
getWriters() {
|
|
68
74
|
const newWriters = [...this.writers];
|
|
@@ -107,7 +113,8 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
107
113
|
kwargs: this.kwargs,
|
|
108
114
|
config: this.config,
|
|
109
115
|
retryPolicy: this.retryPolicy,
|
|
110
|
-
cachePolicy: this.cachePolicy
|
|
116
|
+
cachePolicy: this.cachePolicy,
|
|
117
|
+
timeout: this.timeout
|
|
111
118
|
});
|
|
112
119
|
}
|
|
113
120
|
pipe(coerceable) {
|
|
@@ -120,7 +127,8 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
120
127
|
config: this.config,
|
|
121
128
|
kwargs: this.kwargs,
|
|
122
129
|
retryPolicy: this.retryPolicy,
|
|
123
|
-
cachePolicy: this.cachePolicy
|
|
130
|
+
cachePolicy: this.cachePolicy,
|
|
131
|
+
timeout: this.timeout
|
|
124
132
|
});
|
|
125
133
|
else if (this.bound === defaultRunnableBound) return new PregelNode({
|
|
126
134
|
channels: this.channels,
|
|
@@ -131,7 +139,8 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
131
139
|
config: this.config,
|
|
132
140
|
kwargs: this.kwargs,
|
|
133
141
|
retryPolicy: this.retryPolicy,
|
|
134
|
-
cachePolicy: this.cachePolicy
|
|
142
|
+
cachePolicy: this.cachePolicy,
|
|
143
|
+
timeout: this.timeout
|
|
135
144
|
});
|
|
136
145
|
else return new PregelNode({
|
|
137
146
|
channels: this.channels,
|
|
@@ -142,7 +151,8 @@ var PregelNode = class PregelNode extends RunnableBinding {
|
|
|
142
151
|
config: this.config,
|
|
143
152
|
kwargs: this.kwargs,
|
|
144
153
|
retryPolicy: this.retryPolicy,
|
|
145
|
-
cachePolicy: this.cachePolicy
|
|
154
|
+
cachePolicy: this.cachePolicy,
|
|
155
|
+
timeout: this.timeout
|
|
146
156
|
});
|
|
147
157
|
}
|
|
148
158
|
};
|
package/dist/pregel/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","names":[],"sources":["../../src/pregel/read.ts"],"sourcesContent":["import {\n Runnable,\n RunnableBinding,\n RunnableBindingArgs,\n RunnableConfig,\n RunnablePassthrough,\n RunnableSequence,\n _coerceToRunnable,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { CONFIG_KEY_READ } from \"../constants.js\";\nimport { ChannelWrite } from \"./write.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type { CachePolicy, RetryPolicy } from \"./utils/index.js\";\n\nexport class ChannelRead<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n> extends RunnableCallable {\n lc_graph_name = \"ChannelRead\";\n\n channel: string | Array<string>;\n\n fresh: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(\n channel: string | Array<string>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any,\n fresh: boolean = false\n ) {\n super({\n trace: false,\n func: (_: RunInput, config: RunnableConfig) =>\n ChannelRead.doRead(config, this.channel, this.fresh, this.mapper),\n });\n this.fresh = fresh;\n this.mapper = mapper;\n this.channel = channel;\n this.name = Array.isArray(channel)\n ? `ChannelRead<${channel.join(\",\")}>`\n : `ChannelRead<${channel}>`;\n }\n\n static doRead<T = unknown>(\n config: RunnableConfig,\n channel: string | Array<string>,\n fresh: boolean,\n mapper?: (args: unknown) => unknown\n ): T {\n const read: (arg: string | string[], fresh: boolean) => unknown =\n config.configurable?.[CONFIG_KEY_READ];\n if (!read) {\n throw new Error(\n \"Runnable is not configured with a read function. Make sure to call in the context of a Pregel process\"\n );\n }\n if (mapper) {\n return mapper(read(channel, fresh)) as T;\n } else {\n return read(channel, fresh) as T;\n }\n }\n}\n\nconst defaultRunnableBound =\n /* #__PURE__ */ new RunnablePassthrough<PregelNodeInputType>();\n\ninterface PregelNodeArgs<RunInput, RunOutput> extends Partial<\n RunnableBindingArgs<RunInput, RunOutput>\n> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\n\nexport class PregelNode<\n RunInput = PregelNodeInputType,\n RunOutput = PregelNodeOutputType,\n> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name = \"PregelNode\";\n\n channels: Record<string, string> | string[];\n\n triggers: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n writers: Runnable[] = [];\n\n bound: Runnable<RunInput, RunOutput> = defaultRunnableBound;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any> = {};\n\n metadata: Record<string, unknown> = {};\n\n tags: string[] = [];\n\n retryPolicy?: RetryPolicy;\n\n cachePolicy?: CachePolicy;\n\n subgraphs?: Runnable[];\n\n ends?: string[];\n\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>) {\n const {\n channels,\n triggers,\n mapper,\n writers,\n bound,\n kwargs,\n metadata,\n retryPolicy,\n cachePolicy,\n tags,\n subgraphs,\n ends,\n } = fields;\n const mergedTags = [\n ...(fields.config?.tags ? fields.config.tags : []),\n ...(tags ?? []),\n ];\n\n super({\n ...fields,\n bound:\n fields.bound ??\n (defaultRunnableBound as unknown as Runnable<RunInput, RunOutput>),\n config: {\n ...(fields.config ? fields.config : {}),\n tags: mergedTags,\n },\n });\n\n this.channels = channels;\n this.triggers = triggers;\n this.mapper = mapper;\n this.writers = writers ?? this.writers;\n this.bound = bound ?? this.bound;\n this.kwargs = kwargs ?? this.kwargs;\n this.metadata = metadata ?? this.metadata;\n this.tags = mergedTags;\n this.retryPolicy = retryPolicy;\n this.cachePolicy = cachePolicy;\n this.subgraphs = subgraphs;\n this.ends = ends;\n }\n\n getWriters(): Array<Runnable> {\n const newWriters = [...this.writers];\n while (\n newWriters.length > 1 &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 1] instanceof ChannelWrite &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 2] instanceof ChannelWrite\n ) {\n // we can combine writes if they are consecutive\n // careful to not modify the original writers list or ChannelWrite\n const endWriters = newWriters.slice(-2) as ChannelWrite[];\n const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);\n newWriters[newWriters.length - 2] = new ChannelWrite(\n combinedWrites,\n endWriters[0].config?.tags\n );\n newWriters.pop();\n }\n return newWriters;\n }\n\n getNode(): Runnable<RunInput, RunOutput> | undefined {\n const writers = this.getWriters();\n if (this.bound === defaultRunnableBound && writers.length === 0) {\n return undefined;\n } else if (this.bound === defaultRunnableBound && writers.length === 1) {\n return writers[0];\n } else if (this.bound === defaultRunnableBound) {\n return new RunnableSequence({\n first: writers[0],\n middle: writers.slice(1, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else if (writers.length > 0) {\n return new RunnableSequence({\n first: this.bound,\n middle: writers.slice(0, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else {\n return this.bound;\n }\n }\n\n join(channels: Array<string>): PregelNode<RunInput, RunOutput> {\n if (!Array.isArray(channels)) {\n throw new Error(\"channels must be a list\");\n }\n if (typeof this.channels !== \"object\") {\n throw new Error(\"all channels must be named when using .join()\");\n }\n\n return new PregelNode<RunInput, RunOutput>({\n channels: {\n ...this.channels,\n ...Object.fromEntries(channels.map((chan) => [chan, chan])),\n },\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound,\n kwargs: this.kwargs,\n config: this.config,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n }\n\n pipe<NewRunOutput>(\n coerceable: RunnableLike\n ): PregelNode<RunInput, Exclude<NewRunOutput, Error>> {\n if (ChannelWrite.isWriter(coerceable)) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: [...this.writers, coerceable],\n bound: this.bound as unknown as PregelNode<\n RunInput,\n Exclude<NewRunOutput, Error>\n >,\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n } else if (this.bound === defaultRunnableBound) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: _coerceToRunnable<RunInput, NewRunOutput>(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n } else {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound.pipe(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read.js","names":[],"sources":["../../src/pregel/read.ts"],"sourcesContent":["import {\n Runnable,\n RunnableBinding,\n RunnableBindingArgs,\n RunnableConfig,\n RunnablePassthrough,\n RunnableSequence,\n _coerceToRunnable,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { CONFIG_KEY_READ } from \"../constants.js\";\nimport { ChannelWrite } from \"./write.js\";\nimport { RunnableCallable } from \"../utils.js\";\nimport type { CachePolicy, RetryPolicy, TimeoutPolicy } from \"./utils/index.js\";\n\nexport class ChannelRead<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n> extends RunnableCallable {\n lc_graph_name = \"ChannelRead\";\n\n channel: string | Array<string>;\n\n fresh: boolean = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(\n channel: string | Array<string>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any,\n fresh: boolean = false\n ) {\n super({\n trace: false,\n func: (_: RunInput, config: RunnableConfig) =>\n ChannelRead.doRead(config, this.channel, this.fresh, this.mapper),\n });\n this.fresh = fresh;\n this.mapper = mapper;\n this.channel = channel;\n this.name = Array.isArray(channel)\n ? `ChannelRead<${channel.join(\",\")}>`\n : `ChannelRead<${channel}>`;\n }\n\n static doRead<T = unknown>(\n config: RunnableConfig,\n channel: string | Array<string>,\n fresh: boolean,\n mapper?: (args: unknown) => unknown\n ): T {\n const read: (arg: string | string[], fresh: boolean) => unknown =\n config.configurable?.[CONFIG_KEY_READ];\n if (!read) {\n throw new Error(\n \"Runnable is not configured with a read function. Make sure to call in the context of a Pregel process\"\n );\n }\n if (mapper) {\n return mapper(read(channel, fresh)) as T;\n } else {\n return read(channel, fresh) as T;\n }\n }\n}\n\nconst defaultRunnableBound =\n /* #__PURE__ */ new RunnablePassthrough<PregelNodeInputType>();\n\ninterface PregelNodeArgs<RunInput, RunOutput> extends Partial<\n RunnableBindingArgs<RunInput, RunOutput>\n> {\n channels: Record<string, string> | string[];\n triggers: Array<string>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n writers?: Runnable<RunOutput, unknown>[];\n tags?: string[];\n bound?: Runnable<RunInput, RunOutput>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs?: Record<string, any>;\n config?: RunnableConfig;\n metadata?: Record<string, unknown>;\n retryPolicy?: RetryPolicy;\n cachePolicy?: CachePolicy;\n timeout?: TimeoutPolicy;\n subgraphs?: Runnable[];\n ends?: string[];\n /** Whether this node is an auto-generated node-level error handler. */\n isErrorHandler?: boolean;\n /** Name of the error handler node to run if this node's execution fails. */\n errorHandlerNode?: string;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeInputType = any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type PregelNodeOutputType = any;\n\nexport class PregelNode<\n RunInput = PregelNodeInputType,\n RunOutput = PregelNodeOutputType,\n> extends RunnableBinding<RunInput, RunOutput, RunnableConfig> {\n lc_graph_name = \"PregelNode\";\n\n channels: Record<string, string> | string[];\n\n triggers: string[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mapper?: (args: any) => any;\n\n writers: Runnable[] = [];\n\n bound: Runnable<RunInput, RunOutput> = defaultRunnableBound;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n kwargs: Record<string, any> = {};\n\n metadata: Record<string, unknown> = {};\n\n tags: string[] = [];\n\n retryPolicy?: RetryPolicy;\n\n cachePolicy?: CachePolicy;\n\n timeout?: TimeoutPolicy;\n\n subgraphs?: Runnable[];\n\n ends?: string[];\n\n isErrorHandler?: boolean;\n\n errorHandlerNode?: string;\n\n constructor(fields: PregelNodeArgs<RunInput, RunOutput>) {\n const {\n channels,\n triggers,\n mapper,\n writers,\n bound,\n kwargs,\n metadata,\n retryPolicy,\n cachePolicy,\n timeout,\n tags,\n subgraphs,\n ends,\n isErrorHandler,\n errorHandlerNode,\n } = fields;\n const mergedTags = [\n ...(fields.config?.tags ? fields.config.tags : []),\n ...(tags ?? []),\n ];\n\n super({\n ...fields,\n bound:\n fields.bound ??\n (defaultRunnableBound as unknown as Runnable<RunInput, RunOutput>),\n config: {\n ...(fields.config ? fields.config : {}),\n tags: mergedTags,\n },\n });\n\n this.channels = channels;\n this.triggers = triggers;\n this.mapper = mapper;\n this.writers = writers ?? this.writers;\n this.bound = bound ?? this.bound;\n this.kwargs = kwargs ?? this.kwargs;\n this.metadata = metadata ?? this.metadata;\n this.tags = mergedTags;\n this.retryPolicy = retryPolicy;\n this.cachePolicy = cachePolicy;\n this.timeout = timeout;\n this.subgraphs = subgraphs;\n this.ends = ends;\n this.isErrorHandler = isErrorHandler;\n this.errorHandlerNode = errorHandlerNode;\n }\n\n getWriters(): Array<Runnable> {\n const newWriters = [...this.writers];\n while (\n newWriters.length > 1 &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 1] instanceof ChannelWrite &&\n // eslint-disable-next-line no-instanceof/no-instanceof\n newWriters[newWriters.length - 2] instanceof ChannelWrite\n ) {\n // we can combine writes if they are consecutive\n // careful to not modify the original writers list or ChannelWrite\n const endWriters = newWriters.slice(-2) as ChannelWrite[];\n const combinedWrites = endWriters[0].writes.concat(endWriters[1].writes);\n newWriters[newWriters.length - 2] = new ChannelWrite(\n combinedWrites,\n endWriters[0].config?.tags\n );\n newWriters.pop();\n }\n return newWriters;\n }\n\n getNode(): Runnable<RunInput, RunOutput> | undefined {\n const writers = this.getWriters();\n if (this.bound === defaultRunnableBound && writers.length === 0) {\n return undefined;\n } else if (this.bound === defaultRunnableBound && writers.length === 1) {\n return writers[0];\n } else if (this.bound === defaultRunnableBound) {\n return new RunnableSequence({\n first: writers[0],\n middle: writers.slice(1, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else if (writers.length > 0) {\n return new RunnableSequence({\n first: this.bound,\n middle: writers.slice(0, writers.length - 1),\n last: writers[writers.length - 1],\n omitSequenceTags: true,\n });\n } else {\n return this.bound;\n }\n }\n\n join(channels: Array<string>): PregelNode<RunInput, RunOutput> {\n if (!Array.isArray(channels)) {\n throw new Error(\"channels must be a list\");\n }\n if (typeof this.channels !== \"object\") {\n throw new Error(\"all channels must be named when using .join()\");\n }\n\n return new PregelNode<RunInput, RunOutput>({\n channels: {\n ...this.channels,\n ...Object.fromEntries(channels.map((chan) => [chan, chan])),\n },\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound,\n kwargs: this.kwargs,\n config: this.config,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n }\n\n pipe<NewRunOutput>(\n coerceable: RunnableLike\n ): PregelNode<RunInput, Exclude<NewRunOutput, Error>> {\n if (ChannelWrite.isWriter(coerceable)) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: [...this.writers, coerceable],\n bound: this.bound as unknown as PregelNode<\n RunInput,\n Exclude<NewRunOutput, Error>\n >,\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n } else if (this.bound === defaultRunnableBound) {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: _coerceToRunnable<RunInput, NewRunOutput>(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n } else {\n return new PregelNode<RunInput, Exclude<NewRunOutput, Error>>({\n channels: this.channels,\n triggers: this.triggers,\n mapper: this.mapper,\n writers: this.writers,\n bound: this.bound.pipe(coerceable),\n config: this.config,\n kwargs: this.kwargs,\n retryPolicy: this.retryPolicy,\n cachePolicy: this.cachePolicy,\n timeout: this.timeout,\n });\n }\n }\n}\n"],"mappings":";;;;;AAeA,IAAa,cAAb,MAAa,oBAGH,iBAAiB;CACzB,gBAAgB;CAEhB;CAEA,QAAiB;CAGjB;CAGA,YACE,SAEA,QACA,QAAiB,OACjB;AACA,QAAM;GACJ,OAAO;GACP,OAAO,GAAa,WAClB,YAAY,OAAO,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO;GACpE,CAAC;AACF,OAAK,QAAQ;AACb,OAAK,SAAS;AACd,OAAK,UAAU;AACf,OAAK,OAAO,MAAM,QAAQ,QAAQ,GAC9B,eAAe,QAAQ,KAAK,IAAI,CAAC,KACjC,eAAe,QAAQ;;CAG7B,OAAO,OACL,QACA,SACA,OACA,QACG;EACH,MAAM,OACJ,OAAO,eAAe;AACxB,MAAI,CAAC,KACH,OAAM,IAAI,MACR,wGACD;AAEH,MAAI,OACF,QAAO,OAAO,KAAK,SAAS,MAAM,CAAC;MAEnC,QAAO,KAAK,SAAS,MAAM;;;AAKjC,MAAM,uCACY,IAAI,qBAA0C;AAiChE,IAAa,aAAb,MAAa,mBAGH,gBAAqD;CAC7D,gBAAgB;CAEhB;CAEA,WAAqB,EAAE;CAGvB;CAEA,UAAsB,EAAE;CAExB,QAAuC;CAGvC,SAA8B,EAAE;CAEhC,WAAoC,EAAE;CAEtC,OAAiB,EAAE;CAEnB;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA;CAEA,YAAY,QAA6C;EACvD,MAAM,EACJ,UACA,UACA,QACA,SACA,OACA,QACA,UACA,aACA,aACA,SACA,MACA,WACA,MACA,gBACA,qBACE;EACJ,MAAM,aAAa,CACjB,GAAI,OAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,EAAE,EACjD,GAAI,QAAQ,EAAE,CACf;AAED,QAAM;GACJ,GAAG;GACH,OACE,OAAO,SACN;GACH,QAAQ;IACN,GAAI,OAAO,SAAS,OAAO,SAAS,EAAE;IACtC,MAAM;IACP;GACF,CAAC;AAEF,OAAK,WAAW;AAChB,OAAK,WAAW;AAChB,OAAK,SAAS;AACd,OAAK,UAAU,WAAW,KAAK;AAC/B,OAAK,QAAQ,SAAS,KAAK;AAC3B,OAAK,SAAS,UAAU,KAAK;AAC7B,OAAK,WAAW,YAAY,KAAK;AACjC,OAAK,OAAO;AACZ,OAAK,cAAc;AACnB,OAAK,cAAc;AACnB,OAAK,UAAU;AACf,OAAK,YAAY;AACjB,OAAK,OAAO;AACZ,OAAK,iBAAiB;AACtB,OAAK,mBAAmB;;CAG1B,aAA8B;EAC5B,MAAM,aAAa,CAAC,GAAG,KAAK,QAAQ;AACpC,SACE,WAAW,SAAS,KAEpB,WAAW,WAAW,SAAS,cAAc,gBAE7C,WAAW,WAAW,SAAS,cAAc,cAC7C;GAGA,MAAM,aAAa,WAAW,MAAM,GAAG;GACvC,MAAM,iBAAiB,WAAW,GAAG,OAAO,OAAO,WAAW,GAAG,OAAO;AACxE,cAAW,WAAW,SAAS,KAAK,IAAI,aACtC,gBACA,WAAW,GAAG,QAAQ,KACvB;AACD,cAAW,KAAK;;AAElB,SAAO;;CAGT,UAAqD;EACnD,MAAM,UAAU,KAAK,YAAY;AACjC,MAAI,KAAK,UAAU,wBAAwB,QAAQ,WAAW,EAC5D;WACS,KAAK,UAAU,wBAAwB,QAAQ,WAAW,EACnE,QAAO,QAAQ;WACN,KAAK,UAAU,qBACxB,QAAO,IAAI,iBAAiB;GAC1B,OAAO,QAAQ;GACf,QAAQ,QAAQ,MAAM,GAAG,QAAQ,SAAS,EAAE;GAC5C,MAAM,QAAQ,QAAQ,SAAS;GAC/B,kBAAkB;GACnB,CAAC;WACO,QAAQ,SAAS,EAC1B,QAAO,IAAI,iBAAiB;GAC1B,OAAO,KAAK;GACZ,QAAQ,QAAQ,MAAM,GAAG,QAAQ,SAAS,EAAE;GAC5C,MAAM,QAAQ,QAAQ,SAAS;GAC/B,kBAAkB;GACnB,CAAC;MAEF,QAAO,KAAK;;CAIhB,KAAK,UAA0D;AAC7D,MAAI,CAAC,MAAM,QAAQ,SAAS,CAC1B,OAAM,IAAI,MAAM,0BAA0B;AAE5C,MAAI,OAAO,KAAK,aAAa,SAC3B,OAAM,IAAI,MAAM,gDAAgD;AAGlE,SAAO,IAAI,WAAgC;GACzC,UAAU;IACR,GAAG,KAAK;IACR,GAAG,OAAO,YAAY,SAAS,KAAK,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5D;GACD,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,OAAO,KAAK;GACZ,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,SAAS,KAAK;GACf,CAAC;;CAGJ,KACE,YACoD;AACpD,MAAI,aAAa,SAAS,WAAW,CACnC,QAAO,IAAI,WAAmD;GAC5D,UAAU,KAAK;GACf,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,CAAC,GAAG,KAAK,SAAS,WAAW;GACtC,OAAO,KAAK;GAIZ,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,SAAS,KAAK;GACf,CAAC;WACO,KAAK,UAAU,qBACxB,QAAO,IAAI,WAAmD;GAC5D,UAAU,KAAK;GACf,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,OAAO,kBAA0C,WAAW;GAC5D,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,SAAS,KAAK;GACf,CAAC;MAEF,QAAO,IAAI,WAAmD;GAC5D,UAAU,KAAK;GACf,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,OAAO,KAAK,MAAM,KAAK,WAAW;GAClC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,SAAS,KAAK;GACf,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const require_mux = require("../stream/mux.cjs");
|
|
2
|
+
const require_run_stream = require("../stream/run-stream.cjs");
|
|
3
|
+
//#region src/pregel/remote-run-stream.ts
|
|
4
|
+
const REMOTE_V3_CHANNELS = [
|
|
5
|
+
"values",
|
|
6
|
+
"updates",
|
|
7
|
+
"messages",
|
|
8
|
+
"tools",
|
|
9
|
+
"custom",
|
|
10
|
+
"tasks",
|
|
11
|
+
"checkpoints",
|
|
12
|
+
"lifecycle",
|
|
13
|
+
"input"
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.
|
|
17
|
+
*/
|
|
18
|
+
var RemoteGraphRunStream = class extends require_run_stream.GraphRunStream {
|
|
19
|
+
#client;
|
|
20
|
+
#thread;
|
|
21
|
+
#runId;
|
|
22
|
+
#abortController;
|
|
23
|
+
constructor(params) {
|
|
24
|
+
const abortController = params.abortController ?? new AbortController();
|
|
25
|
+
super([], new require_mux.StreamMux(), 0, 0, params.thread.extensions, abortController);
|
|
26
|
+
this.#client = params.client;
|
|
27
|
+
this.#thread = params.thread;
|
|
28
|
+
this.#runId = params.runId;
|
|
29
|
+
this.#abortController = abortController;
|
|
30
|
+
}
|
|
31
|
+
[Symbol.asyncIterator]() {
|
|
32
|
+
return this.#iterateEvents()[Symbol.asyncIterator]();
|
|
33
|
+
}
|
|
34
|
+
get subgraphs() {
|
|
35
|
+
return this.#thread.subgraphs;
|
|
36
|
+
}
|
|
37
|
+
get values() {
|
|
38
|
+
return this.#thread.values;
|
|
39
|
+
}
|
|
40
|
+
get messages() {
|
|
41
|
+
return this.#thread.messages;
|
|
42
|
+
}
|
|
43
|
+
get lifecycle() {
|
|
44
|
+
return this.#iterateLifecycle();
|
|
45
|
+
}
|
|
46
|
+
messagesFrom(node) {
|
|
47
|
+
const messages = this.messages;
|
|
48
|
+
return { async *[Symbol.asyncIterator]() {
|
|
49
|
+
for await (const message of messages) if (message.node === node) yield message;
|
|
50
|
+
} };
|
|
51
|
+
}
|
|
52
|
+
get output() {
|
|
53
|
+
return this.#thread.output;
|
|
54
|
+
}
|
|
55
|
+
get interrupted() {
|
|
56
|
+
return this.#thread.interrupted;
|
|
57
|
+
}
|
|
58
|
+
get interrupts() {
|
|
59
|
+
return this.#thread.interrupts;
|
|
60
|
+
}
|
|
61
|
+
abort(reason) {
|
|
62
|
+
if (this.#abortController.signal.aborted) return;
|
|
63
|
+
this.#abortController.abort(reason);
|
|
64
|
+
this.#cancelAndClose();
|
|
65
|
+
}
|
|
66
|
+
get signal() {
|
|
67
|
+
return this.#abortController.signal;
|
|
68
|
+
}
|
|
69
|
+
get thread() {
|
|
70
|
+
return this.#thread;
|
|
71
|
+
}
|
|
72
|
+
async #cancelAndClose() {
|
|
73
|
+
try {
|
|
74
|
+
if (this.#runId != null) await this.#client.runs.cancel(this.#thread.threadId, this.#runId, false);
|
|
75
|
+
} catch {}
|
|
76
|
+
try {
|
|
77
|
+
await this.#thread.close();
|
|
78
|
+
} catch {}
|
|
79
|
+
}
|
|
80
|
+
async *#iterateEvents() {
|
|
81
|
+
const subscription = await this.#thread.subscribe({ channels: REMOTE_V3_CHANNELS });
|
|
82
|
+
try {
|
|
83
|
+
for await (const event of subscription) yield event;
|
|
84
|
+
} finally {
|
|
85
|
+
await subscription.unsubscribe();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async *#iterateLifecycle() {
|
|
89
|
+
const subscription = await this.#thread.subscribe({ channels: ["lifecycle"] });
|
|
90
|
+
try {
|
|
91
|
+
for await (const event of subscription) yield eventToLifecycleEntry(event);
|
|
92
|
+
} finally {
|
|
93
|
+
await subscription.unsubscribe();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
function eventToLifecycleEntry(event) {
|
|
98
|
+
return {
|
|
99
|
+
...event.params.data,
|
|
100
|
+
namespace: event.params.namespace,
|
|
101
|
+
timestamp: event.params.timestamp
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
exports.RemoteGraphRunStream = RemoteGraphRunStream;
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=remote-run-stream.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-run-stream.cjs","names":["GraphRunStream","#client","#thread","#runId","#abortController","StreamMux","#iterateEvents","#iterateLifecycle","#cancelAndClose"],"sources":["../../src/pregel/remote-run-stream.ts"],"sourcesContent":["import type { Channel, Event } from \"@langchain/protocol\";\nimport type { Client, ThreadStream } from \"@langchain/langgraph-sdk\";\n\nimport { GraphRunStream, SubgraphRunStream } from \"../stream/run-stream.js\";\nimport { StreamMux } from \"../stream/mux.js\";\nimport type {\n ChatModelStreamHandle,\n InterruptPayload,\n ProtocolEvent,\n} from \"../stream/types.js\";\nimport type { LifecycleEntry } from \"../stream/transformers/index.js\";\n\nconst REMOTE_V3_CHANNELS: Channel[] = [\n \"values\",\n \"updates\",\n \"messages\",\n \"tools\",\n \"custom\",\n \"tasks\",\n \"checkpoints\",\n \"lifecycle\",\n \"input\",\n];\n\n/**\n * Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.\n */\nexport class RemoteGraphRunStream<\n TValues = Record<string, unknown>,\n TExtensions extends Record<string, unknown> = Record<string, unknown>,\n> extends GraphRunStream<TValues, TExtensions> {\n readonly #client: Client;\n\n readonly #thread: ThreadStream<TExtensions>;\n\n readonly #runId: string | undefined;\n\n readonly #abortController: AbortController;\n\n constructor(params: {\n client: Client;\n thread: ThreadStream<TExtensions>;\n runId?: string;\n abortController?: AbortController;\n }) {\n const abortController = params.abortController ?? new AbortController();\n super(\n [],\n new StreamMux(),\n 0,\n 0,\n params.thread.extensions as TExtensions,\n abortController\n );\n this.#client = params.client;\n this.#thread = params.thread;\n this.#runId = params.runId;\n this.#abortController = abortController;\n }\n\n override [Symbol.asyncIterator](): AsyncIterator<ProtocolEvent> {\n return this.#iterateEvents()[Symbol.asyncIterator]();\n }\n\n override get subgraphs(): AsyncIterable<SubgraphRunStream> {\n const subgraphs = this.#thread.subgraphs as unknown;\n return subgraphs as AsyncIterable<SubgraphRunStream>;\n }\n\n override get values(): AsyncIterable<TValues> & PromiseLike<TValues> {\n return this.#thread.values as AsyncIterable<TValues> & PromiseLike<TValues>;\n }\n\n override get messages(): AsyncIterable<ChatModelStreamHandle> {\n const messages = this.#thread.messages as unknown;\n return messages as AsyncIterable<ChatModelStreamHandle>;\n }\n\n override get lifecycle(): AsyncIterable<LifecycleEntry> {\n return this.#iterateLifecycle();\n }\n\n override messagesFrom(node: string): AsyncIterable<ChatModelStreamHandle> {\n const messages = this.messages;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of messages) {\n if (message.node === node) {\n yield message;\n }\n }\n },\n };\n }\n\n override get output(): Promise<TValues> {\n return this.#thread.output as Promise<TValues>;\n }\n\n override get interrupted(): boolean {\n return this.#thread.interrupted;\n }\n\n override get interrupts(): readonly InterruptPayload[] {\n return this.#thread.interrupts as readonly InterruptPayload[];\n }\n\n override abort(reason?: unknown): void {\n if (this.#abortController.signal.aborted) return;\n this.#abortController.abort(reason);\n void this.#cancelAndClose();\n }\n\n override get signal(): AbortSignal {\n return this.#abortController.signal;\n }\n\n get thread(): ThreadStream<TExtensions> {\n return this.#thread;\n }\n\n async #cancelAndClose(): Promise<void> {\n try {\n if (this.#runId != null) {\n await this.#client.runs.cancel(\n this.#thread.threadId,\n this.#runId,\n false\n );\n }\n } catch {\n // Best effort: closing the ThreadStream still releases client resources.\n }\n try {\n await this.#thread.close();\n } catch {\n // Best effort.\n }\n }\n\n async *#iterateEvents(): AsyncGenerator<ProtocolEvent> {\n const subscription = await this.#thread.subscribe({\n channels: REMOTE_V3_CHANNELS,\n });\n try {\n for await (const event of subscription) {\n yield event as unknown as ProtocolEvent;\n }\n } finally {\n await subscription.unsubscribe();\n }\n }\n\n async *#iterateLifecycle(): AsyncGenerator<LifecycleEntry> {\n const subscription = await this.#thread.subscribe({\n channels: [\"lifecycle\"],\n });\n try {\n for await (const event of subscription) {\n yield eventToLifecycleEntry(event);\n }\n } finally {\n await subscription.unsubscribe();\n }\n }\n}\n\nfunction eventToLifecycleEntry(event: Event): LifecycleEntry {\n return {\n ...(event.params.data as Record<string, unknown>),\n namespace: event.params.namespace,\n timestamp: event.params.timestamp,\n } as LifecycleEntry;\n}\n"],"mappings":";;;AAYA,MAAM,qBAAgC;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAKD,IAAa,uBAAb,cAGUA,mBAAAA,eAAqC;CAC7C;CAEA;CAEA;CAEA;CAEA,YAAY,QAKT;EACD,MAAM,kBAAkB,OAAO,mBAAmB,IAAI,iBAAiB;AACvE,QACE,EAAE,EACF,IAAIK,YAAAA,WAAW,EACf,GACA,GACA,OAAO,OAAO,YACd,gBACD;AACD,QAAA,SAAe,OAAO;AACtB,QAAA,SAAe,OAAO;AACtB,QAAA,QAAc,OAAO;AACrB,QAAA,kBAAwB;;CAG1B,CAAU,OAAO,iBAA+C;AAC9D,SAAO,MAAA,eAAqB,CAAC,OAAO,gBAAgB;;CAGtD,IAAa,YAA8C;AAEzD,SADkB,MAAA,OAAa;;CAIjC,IAAa,SAAwD;AACnE,SAAO,MAAA,OAAa;;CAGtB,IAAa,WAAiD;AAE5D,SADiB,MAAA,OAAa;;CAIhC,IAAa,YAA2C;AACtD,SAAO,MAAA,kBAAwB;;CAGjC,aAAsB,MAAoD;EACxE,MAAM,WAAW,KAAK;AACtB,SAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,cAAW,MAAM,WAAW,SAC1B,KAAI,QAAQ,SAAS,KACnB,OAAM;KAIb;;CAGH,IAAa,SAA2B;AACtC,SAAO,MAAA,OAAa;;CAGtB,IAAa,cAAuB;AAClC,SAAO,MAAA,OAAa;;CAGtB,IAAa,aAA0C;AACrD,SAAO,MAAA,OAAa;;CAGtB,MAAe,QAAwB;AACrC,MAAI,MAAA,gBAAsB,OAAO,QAAS;AAC1C,QAAA,gBAAsB,MAAM,OAAO;AAC9B,QAAA,gBAAsB;;CAG7B,IAAa,SAAsB;AACjC,SAAO,MAAA,gBAAsB;;CAG/B,IAAI,SAAoC;AACtC,SAAO,MAAA;;CAGT,OAAA,iBAAuC;AACrC,MAAI;AACF,OAAI,MAAA,SAAe,KACjB,OAAM,MAAA,OAAa,KAAK,OACtB,MAAA,OAAa,UACb,MAAA,OACA,MACD;UAEG;AAGR,MAAI;AACF,SAAM,MAAA,OAAa,OAAO;UACpB;;CAKV,QAAA,gBAAuD;EACrD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,oBACX,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM;YAEA;AACR,SAAM,aAAa,aAAa;;;CAIpC,QAAA,mBAA2D;EACzD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,CAAC,YAAY,EACxB,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM,sBAAsB,MAAM;YAE5B;AACR,SAAM,aAAa,aAAa;;;;AAKtC,SAAS,sBAAsB,OAA8B;AAC3D,QAAO;EACL,GAAI,MAAM,OAAO;EACjB,WAAW,MAAM,OAAO;EACxB,WAAW,MAAM,OAAO;EACzB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ChatModelStreamHandle, InterruptPayload, ProtocolEvent } from "../stream/types.cjs";
|
|
2
|
+
import { LifecycleEntry } from "../stream/transformers/types.cjs";
|
|
3
|
+
import { GraphRunStream, SubgraphRunStream } from "../stream/run-stream.cjs";
|
|
4
|
+
import { Client, ThreadStream } from "@langchain/langgraph-sdk";
|
|
5
|
+
|
|
6
|
+
//#region src/pregel/remote-run-stream.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.
|
|
9
|
+
*/
|
|
10
|
+
declare class RemoteGraphRunStream<TValues = Record<string, unknown>, TExtensions extends Record<string, unknown> = Record<string, unknown>> extends GraphRunStream<TValues, TExtensions> {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(params: {
|
|
13
|
+
client: Client;
|
|
14
|
+
thread: ThreadStream<TExtensions>;
|
|
15
|
+
runId?: string;
|
|
16
|
+
abortController?: AbortController;
|
|
17
|
+
});
|
|
18
|
+
[Symbol.asyncIterator](): AsyncIterator<ProtocolEvent>;
|
|
19
|
+
get subgraphs(): AsyncIterable<SubgraphRunStream>;
|
|
20
|
+
get values(): AsyncIterable<TValues> & PromiseLike<TValues>;
|
|
21
|
+
get messages(): AsyncIterable<ChatModelStreamHandle>;
|
|
22
|
+
get lifecycle(): AsyncIterable<LifecycleEntry>;
|
|
23
|
+
messagesFrom(node: string): AsyncIterable<ChatModelStreamHandle>;
|
|
24
|
+
get output(): Promise<TValues>;
|
|
25
|
+
get interrupted(): boolean;
|
|
26
|
+
get interrupts(): readonly InterruptPayload[];
|
|
27
|
+
abort(reason?: unknown): void;
|
|
28
|
+
get signal(): AbortSignal;
|
|
29
|
+
get thread(): ThreadStream<TExtensions>;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { RemoteGraphRunStream };
|
|
33
|
+
//# sourceMappingURL=remote-run-stream.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-run-stream.d.cts","names":[],"sources":["../../src/pregel/remote-run-stream.ts"],"mappings":";;;;;;;;AA2BA;cAAa,oBAAA,WACD,MAAA,uCACU,MAAA,oBAA0B,MAAA,2BACtC,cAAA,CAAe,OAAA,EAAS,WAAA;EAAA;EAShC,WAAA,CAAY,MAAA;IACV,MAAA,EAAQ,MAAA;IACR,MAAA,EAAQ,YAAA,CAAa,WAAA;IACrB,KAAA;IACA,eAAA,GAAkB,eAAA;EAAA;EAAA,CAiBV,MAAA,CAAO,aAAA,KAAkB,aAAA,CAAc,aAAA;EAAA,IAIpC,SAAA,CAAA,GAAa,aAAA,CAAc,iBAAA;EAAA,IAK3B,MAAA,CAAA,GAAU,aAAA,CAAc,OAAA,IAAW,WAAA,CAAY,OAAA;EAAA,IAI/C,QAAA,CAAA,GAAY,aAAA,CAAc,qBAAA;EAAA,IAK1B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAI/B,YAAA,CAAa,IAAA,WAAe,aAAA,CAAc,qBAAA;EAAA,IAatC,MAAA,CAAA,GAAU,OAAA,CAAQ,OAAA;EAAA,IAIlB,WAAA,CAAA;EAAA,IAIA,UAAA,CAAA,YAAuB,gBAAA;EAI3B,KAAA,CAAM,MAAA;EAAA,IAMF,MAAA,CAAA,GAAU,WAAA;EAAA,IAInB,MAAA,CAAA,GAAU,YAAA,CAAa,WAAA;AAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ChatModelStreamHandle, InterruptPayload, ProtocolEvent } from "../stream/types.js";
|
|
2
|
+
import { LifecycleEntry } from "../stream/transformers/types.js";
|
|
3
|
+
import { GraphRunStream, SubgraphRunStream } from "../stream/run-stream.js";
|
|
4
|
+
import { Client, ThreadStream } from "@langchain/langgraph-sdk";
|
|
5
|
+
|
|
6
|
+
//#region src/pregel/remote-run-stream.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.
|
|
9
|
+
*/
|
|
10
|
+
declare class RemoteGraphRunStream<TValues = Record<string, unknown>, TExtensions extends Record<string, unknown> = Record<string, unknown>> extends GraphRunStream<TValues, TExtensions> {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(params: {
|
|
13
|
+
client: Client;
|
|
14
|
+
thread: ThreadStream<TExtensions>;
|
|
15
|
+
runId?: string;
|
|
16
|
+
abortController?: AbortController;
|
|
17
|
+
});
|
|
18
|
+
[Symbol.asyncIterator](): AsyncIterator<ProtocolEvent>;
|
|
19
|
+
get subgraphs(): AsyncIterable<SubgraphRunStream>;
|
|
20
|
+
get values(): AsyncIterable<TValues> & PromiseLike<TValues>;
|
|
21
|
+
get messages(): AsyncIterable<ChatModelStreamHandle>;
|
|
22
|
+
get lifecycle(): AsyncIterable<LifecycleEntry>;
|
|
23
|
+
messagesFrom(node: string): AsyncIterable<ChatModelStreamHandle>;
|
|
24
|
+
get output(): Promise<TValues>;
|
|
25
|
+
get interrupted(): boolean;
|
|
26
|
+
get interrupts(): readonly InterruptPayload[];
|
|
27
|
+
abort(reason?: unknown): void;
|
|
28
|
+
get signal(): AbortSignal;
|
|
29
|
+
get thread(): ThreadStream<TExtensions>;
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { RemoteGraphRunStream };
|
|
33
|
+
//# sourceMappingURL=remote-run-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-run-stream.d.ts","names":[],"sources":["../../src/pregel/remote-run-stream.ts"],"mappings":";;;;;;;;;cA2Ba,oBAAA,WACD,MAAA,uCACU,MAAA,oBAA0B,MAAA,2BACtC,cAAA,CAAe,OAAA,EAAS,WAAA;EAAA;EAShC,WAAA,CAAY,MAAA;IACV,MAAA,EAAQ,MAAA;IACR,MAAA,EAAQ,YAAA,CAAa,WAAA;IACrB,KAAA;IACA,eAAA,GAAkB,eAAA;EAAA;EAAA,CAiBV,MAAA,CAAO,aAAA,KAAkB,aAAA,CAAc,aAAA;EAAA,IAIpC,SAAA,CAAA,GAAa,aAAA,CAAc,iBAAA;EAAA,IAK3B,MAAA,CAAA,GAAU,aAAA,CAAc,OAAA,IAAW,WAAA,CAAY,OAAA;EAAA,IAI/C,QAAA,CAAA,GAAY,aAAA,CAAc,qBAAA;EAAA,IAK1B,SAAA,CAAA,GAAa,aAAA,CAAc,cAAA;EAI/B,YAAA,CAAa,IAAA,WAAe,aAAA,CAAc,qBAAA;EAAA,IAatC,MAAA,CAAA,GAAU,OAAA,CAAQ,OAAA;EAAA,IAIlB,WAAA,CAAA;EAAA,IAIA,UAAA,CAAA,YAAuB,gBAAA;EAI3B,KAAA,CAAM,MAAA;EAAA,IAMF,MAAA,CAAA,GAAU,WAAA;EAAA,IAInB,MAAA,CAAA,GAAU,YAAA,CAAa,WAAA;AAAA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { StreamMux } from "../stream/mux.js";
|
|
2
|
+
import { GraphRunStream } from "../stream/run-stream.js";
|
|
3
|
+
//#region src/pregel/remote-run-stream.ts
|
|
4
|
+
const REMOTE_V3_CHANNELS = [
|
|
5
|
+
"values",
|
|
6
|
+
"updates",
|
|
7
|
+
"messages",
|
|
8
|
+
"tools",
|
|
9
|
+
"custom",
|
|
10
|
+
"tasks",
|
|
11
|
+
"checkpoints",
|
|
12
|
+
"lifecycle",
|
|
13
|
+
"input"
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.
|
|
17
|
+
*/
|
|
18
|
+
var RemoteGraphRunStream = class extends GraphRunStream {
|
|
19
|
+
#client;
|
|
20
|
+
#thread;
|
|
21
|
+
#runId;
|
|
22
|
+
#abortController;
|
|
23
|
+
constructor(params) {
|
|
24
|
+
const abortController = params.abortController ?? new AbortController();
|
|
25
|
+
super([], new StreamMux(), 0, 0, params.thread.extensions, abortController);
|
|
26
|
+
this.#client = params.client;
|
|
27
|
+
this.#thread = params.thread;
|
|
28
|
+
this.#runId = params.runId;
|
|
29
|
+
this.#abortController = abortController;
|
|
30
|
+
}
|
|
31
|
+
[Symbol.asyncIterator]() {
|
|
32
|
+
return this.#iterateEvents()[Symbol.asyncIterator]();
|
|
33
|
+
}
|
|
34
|
+
get subgraphs() {
|
|
35
|
+
return this.#thread.subgraphs;
|
|
36
|
+
}
|
|
37
|
+
get values() {
|
|
38
|
+
return this.#thread.values;
|
|
39
|
+
}
|
|
40
|
+
get messages() {
|
|
41
|
+
return this.#thread.messages;
|
|
42
|
+
}
|
|
43
|
+
get lifecycle() {
|
|
44
|
+
return this.#iterateLifecycle();
|
|
45
|
+
}
|
|
46
|
+
messagesFrom(node) {
|
|
47
|
+
const messages = this.messages;
|
|
48
|
+
return { async *[Symbol.asyncIterator]() {
|
|
49
|
+
for await (const message of messages) if (message.node === node) yield message;
|
|
50
|
+
} };
|
|
51
|
+
}
|
|
52
|
+
get output() {
|
|
53
|
+
return this.#thread.output;
|
|
54
|
+
}
|
|
55
|
+
get interrupted() {
|
|
56
|
+
return this.#thread.interrupted;
|
|
57
|
+
}
|
|
58
|
+
get interrupts() {
|
|
59
|
+
return this.#thread.interrupts;
|
|
60
|
+
}
|
|
61
|
+
abort(reason) {
|
|
62
|
+
if (this.#abortController.signal.aborted) return;
|
|
63
|
+
this.#abortController.abort(reason);
|
|
64
|
+
this.#cancelAndClose();
|
|
65
|
+
}
|
|
66
|
+
get signal() {
|
|
67
|
+
return this.#abortController.signal;
|
|
68
|
+
}
|
|
69
|
+
get thread() {
|
|
70
|
+
return this.#thread;
|
|
71
|
+
}
|
|
72
|
+
async #cancelAndClose() {
|
|
73
|
+
try {
|
|
74
|
+
if (this.#runId != null) await this.#client.runs.cancel(this.#thread.threadId, this.#runId, false);
|
|
75
|
+
} catch {}
|
|
76
|
+
try {
|
|
77
|
+
await this.#thread.close();
|
|
78
|
+
} catch {}
|
|
79
|
+
}
|
|
80
|
+
async *#iterateEvents() {
|
|
81
|
+
const subscription = await this.#thread.subscribe({ channels: REMOTE_V3_CHANNELS });
|
|
82
|
+
try {
|
|
83
|
+
for await (const event of subscription) yield event;
|
|
84
|
+
} finally {
|
|
85
|
+
await subscription.unsubscribe();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async *#iterateLifecycle() {
|
|
89
|
+
const subscription = await this.#thread.subscribe({ channels: ["lifecycle"] });
|
|
90
|
+
try {
|
|
91
|
+
for await (const event of subscription) yield eventToLifecycleEntry(event);
|
|
92
|
+
} finally {
|
|
93
|
+
await subscription.unsubscribe();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
function eventToLifecycleEntry(event) {
|
|
98
|
+
return {
|
|
99
|
+
...event.params.data,
|
|
100
|
+
namespace: event.params.namespace,
|
|
101
|
+
timestamp: event.params.timestamp
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { RemoteGraphRunStream };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=remote-run-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-run-stream.js","names":["#client","#thread","#runId","#abortController","#iterateEvents","#iterateLifecycle","#cancelAndClose"],"sources":["../../src/pregel/remote-run-stream.ts"],"sourcesContent":["import type { Channel, Event } from \"@langchain/protocol\";\nimport type { Client, ThreadStream } from \"@langchain/langgraph-sdk\";\n\nimport { GraphRunStream, SubgraphRunStream } from \"../stream/run-stream.js\";\nimport { StreamMux } from \"../stream/mux.js\";\nimport type {\n ChatModelStreamHandle,\n InterruptPayload,\n ProtocolEvent,\n} from \"../stream/types.js\";\nimport type { LifecycleEntry } from \"../stream/transformers/index.js\";\n\nconst REMOTE_V3_CHANNELS: Channel[] = [\n \"values\",\n \"updates\",\n \"messages\",\n \"tools\",\n \"custom\",\n \"tasks\",\n \"checkpoints\",\n \"lifecycle\",\n \"input\",\n];\n\n/**\n * Adapts the SDK's remote ThreadStream to the local GraphRunStream shape.\n */\nexport class RemoteGraphRunStream<\n TValues = Record<string, unknown>,\n TExtensions extends Record<string, unknown> = Record<string, unknown>,\n> extends GraphRunStream<TValues, TExtensions> {\n readonly #client: Client;\n\n readonly #thread: ThreadStream<TExtensions>;\n\n readonly #runId: string | undefined;\n\n readonly #abortController: AbortController;\n\n constructor(params: {\n client: Client;\n thread: ThreadStream<TExtensions>;\n runId?: string;\n abortController?: AbortController;\n }) {\n const abortController = params.abortController ?? new AbortController();\n super(\n [],\n new StreamMux(),\n 0,\n 0,\n params.thread.extensions as TExtensions,\n abortController\n );\n this.#client = params.client;\n this.#thread = params.thread;\n this.#runId = params.runId;\n this.#abortController = abortController;\n }\n\n override [Symbol.asyncIterator](): AsyncIterator<ProtocolEvent> {\n return this.#iterateEvents()[Symbol.asyncIterator]();\n }\n\n override get subgraphs(): AsyncIterable<SubgraphRunStream> {\n const subgraphs = this.#thread.subgraphs as unknown;\n return subgraphs as AsyncIterable<SubgraphRunStream>;\n }\n\n override get values(): AsyncIterable<TValues> & PromiseLike<TValues> {\n return this.#thread.values as AsyncIterable<TValues> & PromiseLike<TValues>;\n }\n\n override get messages(): AsyncIterable<ChatModelStreamHandle> {\n const messages = this.#thread.messages as unknown;\n return messages as AsyncIterable<ChatModelStreamHandle>;\n }\n\n override get lifecycle(): AsyncIterable<LifecycleEntry> {\n return this.#iterateLifecycle();\n }\n\n override messagesFrom(node: string): AsyncIterable<ChatModelStreamHandle> {\n const messages = this.messages;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of messages) {\n if (message.node === node) {\n yield message;\n }\n }\n },\n };\n }\n\n override get output(): Promise<TValues> {\n return this.#thread.output as Promise<TValues>;\n }\n\n override get interrupted(): boolean {\n return this.#thread.interrupted;\n }\n\n override get interrupts(): readonly InterruptPayload[] {\n return this.#thread.interrupts as readonly InterruptPayload[];\n }\n\n override abort(reason?: unknown): void {\n if (this.#abortController.signal.aborted) return;\n this.#abortController.abort(reason);\n void this.#cancelAndClose();\n }\n\n override get signal(): AbortSignal {\n return this.#abortController.signal;\n }\n\n get thread(): ThreadStream<TExtensions> {\n return this.#thread;\n }\n\n async #cancelAndClose(): Promise<void> {\n try {\n if (this.#runId != null) {\n await this.#client.runs.cancel(\n this.#thread.threadId,\n this.#runId,\n false\n );\n }\n } catch {\n // Best effort: closing the ThreadStream still releases client resources.\n }\n try {\n await this.#thread.close();\n } catch {\n // Best effort.\n }\n }\n\n async *#iterateEvents(): AsyncGenerator<ProtocolEvent> {\n const subscription = await this.#thread.subscribe({\n channels: REMOTE_V3_CHANNELS,\n });\n try {\n for await (const event of subscription) {\n yield event as unknown as ProtocolEvent;\n }\n } finally {\n await subscription.unsubscribe();\n }\n }\n\n async *#iterateLifecycle(): AsyncGenerator<LifecycleEntry> {\n const subscription = await this.#thread.subscribe({\n channels: [\"lifecycle\"],\n });\n try {\n for await (const event of subscription) {\n yield eventToLifecycleEntry(event);\n }\n } finally {\n await subscription.unsubscribe();\n }\n }\n}\n\nfunction eventToLifecycleEntry(event: Event): LifecycleEntry {\n return {\n ...(event.params.data as Record<string, unknown>),\n namespace: event.params.namespace,\n timestamp: event.params.timestamp,\n } as LifecycleEntry;\n}\n"],"mappings":";;;AAYA,MAAM,qBAAgC;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAKD,IAAa,uBAAb,cAGU,eAAqC;CAC7C;CAEA;CAEA;CAEA;CAEA,YAAY,QAKT;EACD,MAAM,kBAAkB,OAAO,mBAAmB,IAAI,iBAAiB;AACvE,QACE,EAAE,EACF,IAAI,WAAW,EACf,GACA,GACA,OAAO,OAAO,YACd,gBACD;AACD,QAAA,SAAe,OAAO;AACtB,QAAA,SAAe,OAAO;AACtB,QAAA,QAAc,OAAO;AACrB,QAAA,kBAAwB;;CAG1B,CAAU,OAAO,iBAA+C;AAC9D,SAAO,MAAA,eAAqB,CAAC,OAAO,gBAAgB;;CAGtD,IAAa,YAA8C;AAEzD,SADkB,MAAA,OAAa;;CAIjC,IAAa,SAAwD;AACnE,SAAO,MAAA,OAAa;;CAGtB,IAAa,WAAiD;AAE5D,SADiB,MAAA,OAAa;;CAIhC,IAAa,YAA2C;AACtD,SAAO,MAAA,kBAAwB;;CAGjC,aAAsB,MAAoD;EACxE,MAAM,WAAW,KAAK;AACtB,SAAO,EACL,QAAQ,OAAO,iBAAiB;AAC9B,cAAW,MAAM,WAAW,SAC1B,KAAI,QAAQ,SAAS,KACnB,OAAM;KAIb;;CAGH,IAAa,SAA2B;AACtC,SAAO,MAAA,OAAa;;CAGtB,IAAa,cAAuB;AAClC,SAAO,MAAA,OAAa;;CAGtB,IAAa,aAA0C;AACrD,SAAO,MAAA,OAAa;;CAGtB,MAAe,QAAwB;AACrC,MAAI,MAAA,gBAAsB,OAAO,QAAS;AAC1C,QAAA,gBAAsB,MAAM,OAAO;AAC9B,QAAA,gBAAsB;;CAG7B,IAAa,SAAsB;AACjC,SAAO,MAAA,gBAAsB;;CAG/B,IAAI,SAAoC;AACtC,SAAO,MAAA;;CAGT,OAAA,iBAAuC;AACrC,MAAI;AACF,OAAI,MAAA,SAAe,KACjB,OAAM,MAAA,OAAa,KAAK,OACtB,MAAA,OAAa,UACb,MAAA,OACA,MACD;UAEG;AAGR,MAAI;AACF,SAAM,MAAA,OAAa,OAAO;UACpB;;CAKV,QAAA,gBAAuD;EACrD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,oBACX,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM;YAEA;AACR,SAAM,aAAa,aAAa;;;CAIpC,QAAA,mBAA2D;EACzD,MAAM,eAAe,MAAM,MAAA,OAAa,UAAU,EAChD,UAAU,CAAC,YAAY,EACxB,CAAC;AACF,MAAI;AACF,cAAW,MAAM,SAAS,aACxB,OAAM,sBAAsB,MAAM;YAE5B;AACR,SAAM,aAAa,aAAa;;;;AAKtC,SAAS,sBAAsB,OAA8B;AAC3D,QAAO;EACL,GAAI,MAAM,OAAO;EACjB,WAAW,MAAM,OAAO;EACxB,WAAW,MAAM,OAAO;EACzB"}
|
package/dist/pregel/remote.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const require_constants = require("../constants.cjs");
|
|
2
2
|
const require_errors = require("../errors.cjs");
|
|
3
3
|
const require_config = require("./utils/config.cjs");
|
|
4
|
+
const require_stream = require("./stream.cjs");
|
|
4
5
|
require("../web.cjs");
|
|
6
|
+
const require_remote_run_stream = require("./remote-run-stream.cjs");
|
|
5
7
|
let _langchain_core_runnables = require("@langchain/core/runnables");
|
|
6
8
|
let _langchain_core_runnables_graph = require("@langchain/core/runnables/graph");
|
|
7
9
|
let _langchain_core_messages = require("@langchain/core/messages");
|
|
@@ -42,6 +44,22 @@ const getStreamModes = (streamMode, defaultStreamMode = "updates") => {
|
|
|
42
44
|
reqSingle
|
|
43
45
|
};
|
|
44
46
|
};
|
|
47
|
+
function protocolEventsToEventStream(run) {
|
|
48
|
+
const encoder = new TextEncoder();
|
|
49
|
+
return new ReadableStream({ async start(controller) {
|
|
50
|
+
try {
|
|
51
|
+
for await (const event of run) {
|
|
52
|
+
const namespace = event.params.namespace;
|
|
53
|
+
const eventName = namespace.length ? `${event.method}|${namespace.join("|")}` : event.method;
|
|
54
|
+
controller.enqueue(encoder.encode(`event: ${eventName}\ndata: ${JSON.stringify(event.params.data ?? {})}\n\n`));
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
controller.enqueue(encoder.encode(`event: error\ndata: ${JSON.stringify({ message: String(error) })}\n\n`));
|
|
58
|
+
} finally {
|
|
59
|
+
controller.close();
|
|
60
|
+
}
|
|
61
|
+
} });
|
|
62
|
+
}
|
|
45
63
|
/**
|
|
46
64
|
* The `RemoteGraph` class is a client implementation for calling remote
|
|
47
65
|
* APIs that implement the LangGraph Server API specification.
|
|
@@ -239,9 +257,51 @@ var RemoteGraph = class extends _langchain_core_runnables.Runnable {
|
|
|
239
257
|
for await (const chunk of stream) lastValue = chunk;
|
|
240
258
|
return lastValue;
|
|
241
259
|
}
|
|
242
|
-
streamEvents(
|
|
260
|
+
streamEvents(input, options, _streamOptions) {
|
|
261
|
+
if (options.version === "v3") return this._streamEventsV3(input, options);
|
|
243
262
|
throw new Error("Not implemented.");
|
|
244
263
|
}
|
|
264
|
+
_rejectV3Unsupported(options) {
|
|
265
|
+
if (options.transformers !== void 0) throw new Error("RemoteGraph.streamEvents({ version: \"v3\" }) does not support `transformers`.");
|
|
266
|
+
if (options.control !== void 0) throw new Error("RemoteGraph.streamEvents({ version: \"v3\" }) does not support `control`.");
|
|
267
|
+
if (options.interruptBefore !== void 0 || this.interruptBefore !== void 0) throw new Error("RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptBefore`.");
|
|
268
|
+
if (options.interruptAfter !== void 0 || this.interruptAfter !== void 0) throw new Error("RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptAfter`.");
|
|
269
|
+
}
|
|
270
|
+
async _streamEventsV3(input, options) {
|
|
271
|
+
this._rejectV3Unsupported(options);
|
|
272
|
+
const abortController = new AbortController();
|
|
273
|
+
const mergedConfig = (0, _langchain_core_runnables.mergeConfigs)(this.config, options);
|
|
274
|
+
const sanitizedConfig = this._sanitizeConfig(mergedConfig);
|
|
275
|
+
const configurable = { ...sanitizedConfig.configurable };
|
|
276
|
+
const threadId = configurable.thread_id;
|
|
277
|
+
delete configurable.thread_id;
|
|
278
|
+
const runConfig = {
|
|
279
|
+
...sanitizedConfig,
|
|
280
|
+
configurable
|
|
281
|
+
};
|
|
282
|
+
const thread = typeof threadId === "string" ? this.client.threads.stream(threadId, { assistantId: this.graphId }) : this.client.threads.stream({ assistantId: this.graphId });
|
|
283
|
+
let serializedInput;
|
|
284
|
+
if (require_constants.isCommand(input)) serializedInput = input.toJSON();
|
|
285
|
+
else serializedInput = _serializeInputs(input);
|
|
286
|
+
const run = await thread.run.start({
|
|
287
|
+
input: serializedInput,
|
|
288
|
+
config: runConfig
|
|
289
|
+
});
|
|
290
|
+
const graphRun = new require_remote_run_stream.RemoteGraphRunStream({
|
|
291
|
+
client: this.client,
|
|
292
|
+
thread,
|
|
293
|
+
runId: run.run_id,
|
|
294
|
+
abortController
|
|
295
|
+
});
|
|
296
|
+
if (mergedConfig.signal != null) if (mergedConfig.signal.aborted) graphRun.abort(mergedConfig.signal.reason);
|
|
297
|
+
else mergedConfig.signal.addEventListener("abort", () => graphRun.abort(mergedConfig.signal?.reason), { once: true });
|
|
298
|
+
if (options.encoding === "text/event-stream") {
|
|
299
|
+
const encodingAbortController = new AbortController();
|
|
300
|
+
encodingAbortController.signal.addEventListener("abort", () => graphRun.abort(encodingAbortController.signal.reason), { once: true });
|
|
301
|
+
return new require_stream.IterableReadableStreamWithAbortSignal(protocolEventsToEventStream(graphRun), encodingAbortController);
|
|
302
|
+
}
|
|
303
|
+
return graphRun;
|
|
304
|
+
}
|
|
245
305
|
async *_streamIterator(input, options) {
|
|
246
306
|
const mergedConfig = (0, _langchain_core_runnables.mergeConfigs)(this.config, options);
|
|
247
307
|
const { threadId, context, config: sanitizedConfig } = this.#prepareRunRequest(mergedConfig);
|