@langchain/langgraph 1.3.7 → 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.
Files changed (199) hide show
  1. package/dist/channels/base.cjs +78 -2
  2. package/dist/channels/base.cjs.map +1 -1
  3. package/dist/channels/base.d.cts +35 -2
  4. package/dist/channels/base.d.cts.map +1 -1
  5. package/dist/channels/base.d.ts +35 -2
  6. package/dist/channels/base.d.ts.map +1 -1
  7. package/dist/channels/base.js +77 -4
  8. package/dist/channels/base.js.map +1 -1
  9. package/dist/channels/delta.cjs +136 -0
  10. package/dist/channels/delta.cjs.map +1 -0
  11. package/dist/channels/delta.d.cts +99 -0
  12. package/dist/channels/delta.d.cts.map +1 -0
  13. package/dist/channels/delta.d.ts +99 -0
  14. package/dist/channels/delta.d.ts.map +1 -0
  15. package/dist/channels/delta.js +136 -0
  16. package/dist/channels/delta.js.map +1 -0
  17. package/dist/channels/index.cjs +5 -0
  18. package/dist/channels/index.d.cts +3 -2
  19. package/dist/channels/index.d.ts +3 -2
  20. package/dist/channels/index.js +3 -2
  21. package/dist/constants.cjs +62 -4
  22. package/dist/constants.cjs.map +1 -1
  23. package/dist/constants.d.cts +33 -2
  24. package/dist/constants.d.cts.map +1 -1
  25. package/dist/constants.d.ts +33 -2
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +59 -5
  28. package/dist/constants.js.map +1 -1
  29. package/dist/errors.cjs +128 -0
  30. package/dist/errors.cjs.map +1 -1
  31. package/dist/errors.d.cts +86 -1
  32. package/dist/errors.d.cts.map +1 -1
  33. package/dist/errors.d.ts +86 -1
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/errors.js +123 -1
  36. package/dist/errors.js.map +1 -1
  37. package/dist/func/index.cjs +9 -2
  38. package/dist/func/index.cjs.map +1 -1
  39. package/dist/func/index.d.cts +14 -0
  40. package/dist/func/index.d.cts.map +1 -1
  41. package/dist/func/index.d.ts +14 -0
  42. package/dist/func/index.d.ts.map +1 -1
  43. package/dist/func/index.js +9 -2
  44. package/dist/func/index.js.map +1 -1
  45. package/dist/graph/graph.cjs +44 -7
  46. package/dist/graph/graph.cjs.map +1 -1
  47. package/dist/graph/graph.d.cts +24 -2
  48. package/dist/graph/graph.d.cts.map +1 -1
  49. package/dist/graph/graph.d.ts +24 -2
  50. package/dist/graph/graph.d.ts.map +1 -1
  51. package/dist/graph/graph.js +44 -7
  52. package/dist/graph/graph.js.map +1 -1
  53. package/dist/graph/index.d.ts +3 -3
  54. package/dist/graph/messages_reducer.cjs +55 -0
  55. package/dist/graph/messages_reducer.cjs.map +1 -1
  56. package/dist/graph/messages_reducer.d.cts +28 -1
  57. package/dist/graph/messages_reducer.d.cts.map +1 -1
  58. package/dist/graph/messages_reducer.d.ts +28 -1
  59. package/dist/graph/messages_reducer.d.ts.map +1 -1
  60. package/dist/graph/messages_reducer.js +56 -2
  61. package/dist/graph/messages_reducer.js.map +1 -1
  62. package/dist/graph/state.cjs +174 -7
  63. package/dist/graph/state.cjs.map +1 -1
  64. package/dist/graph/state.d.cts +193 -17
  65. package/dist/graph/state.d.cts.map +1 -1
  66. package/dist/graph/state.d.ts +193 -17
  67. package/dist/graph/state.d.ts.map +1 -1
  68. package/dist/graph/state.js +175 -8
  69. package/dist/graph/state.js.map +1 -1
  70. package/dist/graph/zod/schema.cjs +5 -0
  71. package/dist/graph/zod/schema.cjs.map +1 -1
  72. package/dist/graph/zod/schema.d.cts.map +1 -1
  73. package/dist/graph/zod/schema.d.ts.map +1 -1
  74. package/dist/graph/zod/schema.js +5 -0
  75. package/dist/graph/zod/schema.js.map +1 -1
  76. package/dist/index.cjs +11 -0
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.d.cts +11 -8
  79. package/dist/index.d.ts +11 -8
  80. package/dist/index.js +5 -3
  81. package/dist/index.js.map +1 -1
  82. package/dist/prebuilt/react_agent_executor.d.cts +1 -1
  83. package/dist/pregel/algo.cjs +182 -21
  84. package/dist/pregel/algo.cjs.map +1 -1
  85. package/dist/pregel/algo.d.cts +1 -1
  86. package/dist/pregel/algo.d.cts.map +1 -1
  87. package/dist/pregel/algo.d.ts +1 -1
  88. package/dist/pregel/algo.d.ts.map +1 -1
  89. package/dist/pregel/algo.js +185 -25
  90. package/dist/pregel/algo.js.map +1 -1
  91. package/dist/pregel/call.cjs +2 -1
  92. package/dist/pregel/call.cjs.map +1 -1
  93. package/dist/pregel/call.js +2 -1
  94. package/dist/pregel/call.js.map +1 -1
  95. package/dist/pregel/index.cjs +15 -3
  96. package/dist/pregel/index.cjs.map +1 -1
  97. package/dist/pregel/index.d.cts.map +1 -1
  98. package/dist/pregel/index.d.ts.map +1 -1
  99. package/dist/pregel/index.js +17 -5
  100. package/dist/pregel/index.js.map +1 -1
  101. package/dist/pregel/loop.cjs +362 -41
  102. package/dist/pregel/loop.cjs.map +1 -1
  103. package/dist/pregel/loop.js +365 -44
  104. package/dist/pregel/loop.js.map +1 -1
  105. package/dist/pregel/messages-v2.cjs +1 -1
  106. package/dist/pregel/messages-v2.js +1 -1
  107. package/dist/pregel/messages.cjs +1 -1
  108. package/dist/pregel/messages.js +1 -1
  109. package/dist/pregel/read.cjs +15 -5
  110. package/dist/pregel/read.cjs.map +1 -1
  111. package/dist/pregel/read.d.cts +9 -0
  112. package/dist/pregel/read.d.cts.map +1 -1
  113. package/dist/pregel/read.d.ts +9 -0
  114. package/dist/pregel/read.d.ts.map +1 -1
  115. package/dist/pregel/read.js +15 -5
  116. package/dist/pregel/read.js.map +1 -1
  117. package/dist/pregel/remote-run-stream.cjs +107 -0
  118. package/dist/pregel/remote-run-stream.cjs.map +1 -0
  119. package/dist/pregel/remote-run-stream.d.cts +33 -0
  120. package/dist/pregel/remote-run-stream.d.cts.map +1 -0
  121. package/dist/pregel/remote-run-stream.d.ts +33 -0
  122. package/dist/pregel/remote-run-stream.d.ts.map +1 -0
  123. package/dist/pregel/remote-run-stream.js +107 -0
  124. package/dist/pregel/remote-run-stream.js.map +1 -0
  125. package/dist/pregel/remote.cjs +61 -1
  126. package/dist/pregel/remote.cjs.map +1 -1
  127. package/dist/pregel/remote.d.cts +17 -0
  128. package/dist/pregel/remote.d.cts.map +1 -1
  129. package/dist/pregel/remote.d.ts +17 -0
  130. package/dist/pregel/remote.d.ts.map +1 -1
  131. package/dist/pregel/remote.js +61 -1
  132. package/dist/pregel/remote.js.map +1 -1
  133. package/dist/pregel/replay.cjs +62 -0
  134. package/dist/pregel/replay.cjs.map +1 -0
  135. package/dist/pregel/replay.js +62 -0
  136. package/dist/pregel/replay.js.map +1 -0
  137. package/dist/pregel/retry.cjs +8 -6
  138. package/dist/pregel/retry.cjs.map +1 -1
  139. package/dist/pregel/retry.js +8 -6
  140. package/dist/pregel/retry.js.map +1 -1
  141. package/dist/pregel/runnable_types.d.cts +20 -0
  142. package/dist/pregel/runnable_types.d.cts.map +1 -1
  143. package/dist/pregel/runnable_types.d.ts +20 -0
  144. package/dist/pregel/runnable_types.d.ts.map +1 -1
  145. package/dist/pregel/runner.cjs +48 -7
  146. package/dist/pregel/runner.cjs.map +1 -1
  147. package/dist/pregel/runner.js +50 -9
  148. package/dist/pregel/runner.js.map +1 -1
  149. package/dist/pregel/runtime.cjs +64 -0
  150. package/dist/pregel/runtime.cjs.map +1 -0
  151. package/dist/pregel/runtime.d.cts +57 -0
  152. package/dist/pregel/runtime.d.cts.map +1 -0
  153. package/dist/pregel/runtime.d.ts +57 -0
  154. package/dist/pregel/runtime.d.ts.map +1 -0
  155. package/dist/pregel/runtime.js +64 -0
  156. package/dist/pregel/runtime.js.map +1 -0
  157. package/dist/pregel/stream.cjs +2 -0
  158. package/dist/pregel/stream.cjs.map +1 -1
  159. package/dist/pregel/stream.js +2 -0
  160. package/dist/pregel/stream.js.map +1 -1
  161. package/dist/pregel/timeout.cjs +216 -0
  162. package/dist/pregel/timeout.cjs.map +1 -0
  163. package/dist/pregel/timeout.js +216 -0
  164. package/dist/pregel/timeout.js.map +1 -0
  165. package/dist/pregel/types.cjs +3 -1
  166. package/dist/pregel/types.cjs.map +1 -1
  167. package/dist/pregel/types.d.cts +13 -0
  168. package/dist/pregel/types.d.cts.map +1 -1
  169. package/dist/pregel/types.d.ts +14 -1
  170. package/dist/pregel/types.d.ts.map +1 -1
  171. package/dist/pregel/types.js +3 -1
  172. package/dist/pregel/types.js.map +1 -1
  173. package/dist/pregel/utils/config.cjs +3 -1
  174. package/dist/pregel/utils/config.cjs.map +1 -1
  175. package/dist/pregel/utils/config.d.cts.map +1 -1
  176. package/dist/pregel/utils/config.d.ts.map +1 -1
  177. package/dist/pregel/utils/config.js +3 -1
  178. package/dist/pregel/utils/config.js.map +1 -1
  179. package/dist/pregel/utils/index.cjs +1 -0
  180. package/dist/pregel/utils/index.cjs.map +1 -1
  181. package/dist/pregel/utils/index.d.cts +6 -1
  182. package/dist/pregel/utils/index.d.cts.map +1 -1
  183. package/dist/pregel/utils/index.d.ts +6 -1
  184. package/dist/pregel/utils/index.d.ts.map +1 -1
  185. package/dist/pregel/utils/index.js +1 -0
  186. package/dist/pregel/utils/index.js.map +1 -1
  187. package/dist/pregel/utils/timeout.cjs +34 -0
  188. package/dist/pregel/utils/timeout.cjs.map +1 -0
  189. package/dist/pregel/utils/timeout.d.cts +45 -0
  190. package/dist/pregel/utils/timeout.d.cts.map +1 -0
  191. package/dist/pregel/utils/timeout.d.ts +45 -0
  192. package/dist/pregel/utils/timeout.d.ts.map +1 -0
  193. package/dist/pregel/utils/timeout.js +34 -0
  194. package/dist/pregel/utils/timeout.js.map +1 -0
  195. package/dist/web.cjs +11 -0
  196. package/dist/web.d.cts +11 -8
  197. package/dist/web.d.ts +11 -8
  198. package/dist/web.js +5 -3
  199. package/package.json +5 -5
@@ -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
  };
@@ -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":"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"}
@@ -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"}
@@ -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(_input, _options, _streamOptions) {
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);