@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.
Files changed (221) 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/stream/index.cjs +1 -0
  196. package/dist/stream/index.d.cts +2 -1
  197. package/dist/stream/index.d.ts +2 -1
  198. package/dist/stream/index.js +1 -0
  199. package/dist/stream/stream-channel.d.cts +9 -1
  200. package/dist/stream/stream-channel.d.cts.map +1 -1
  201. package/dist/stream/stream-channel.d.ts +9 -1
  202. package/dist/stream/stream-channel.d.ts.map +1 -1
  203. package/dist/stream/subscription.cjs +136 -0
  204. package/dist/stream/subscription.cjs.map +1 -0
  205. package/dist/stream/subscription.d.cts +94 -0
  206. package/dist/stream/subscription.d.cts.map +1 -0
  207. package/dist/stream/subscription.d.ts +94 -0
  208. package/dist/stream/subscription.d.ts.map +1 -0
  209. package/dist/stream/subscription.js +131 -0
  210. package/dist/stream/subscription.js.map +1 -0
  211. package/dist/stream/types.d.cts +1 -1
  212. package/dist/stream/types.d.ts +1 -1
  213. package/dist/stream.cjs +16 -0
  214. package/dist/stream.d.cts +5 -0
  215. package/dist/stream.d.ts +5 -0
  216. package/dist/stream.js +4 -0
  217. package/dist/web.cjs +11 -0
  218. package/dist/web.d.cts +11 -8
  219. package/dist/web.d.ts +11 -8
  220. package/dist/web.js +5 -3
  221. package/package.json +18 -6
@@ -1 +1 @@
1
- {"version":3,"file":"remote.cjs","names":["BaseMessage","Runnable","Client","propagateConfigurableToMetadata","#prepareRunRequest","CONFIG_KEY_STREAM","isCommand","GraphInterrupt","INTERRUPT","RemoteException","DrawableGraph"],"sources":["../../src/pregel/remote.ts"],"sourcesContent":["import {\n Client,\n type Checkpoint,\n type ThreadState,\n} from \"@langchain/langgraph-sdk\";\nimport {\n Graph as DrawableGraph,\n Node as DrawableNode,\n} from \"@langchain/core/runnables/graph\";\nimport {\n mergeConfigs,\n Runnable,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport {\n All,\n CheckpointListOptions,\n CheckpointMetadata,\n} from \"@langchain/langgraph-checkpoint\";\nimport { StreamEvent } from \"@langchain/core/tracers/log_stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\nimport { BaseMessage } from \"@langchain/core/messages\";\n\nimport {\n BaseChannel,\n GraphInterrupt,\n LangGraphRunnableConfig,\n RemoteException,\n} from \"../web.js\";\nimport { StrRecord } from \"./algo.js\";\nimport { PregelInputType, PregelOptions, PregelOutputType } from \"./index.js\";\nimport { PregelNode } from \"./read.js\";\nimport {\n PregelParams,\n PregelInterface,\n PregelTaskDescription,\n StateSnapshot,\n StreamMode,\n} from \"./types.js\";\nimport {\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_STREAM,\n INTERRUPT,\n isCommand,\n} from \"../constants.js\";\nimport { propagateConfigurableToMetadata } from \"./utils/config.js\";\n\nexport type RemoteGraphParams = Omit<\n PregelParams<StrRecord<string, PregelNode>, StrRecord<string, BaseChannel>>,\n \"channels\" | \"nodes\" | \"inputChannels\" | \"outputChannels\"\n> & {\n graphId: string;\n client?: Client;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n streamResumable?: boolean;\n};\n\ntype StreamEventsOptions = Parameters<Runnable[\"streamEvents\"]>[2];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _serializeInputs = (obj: any): any => {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(_serializeInputs);\n }\n\n // Handle BaseMessage instances by converting them to a serializable format\n if (BaseMessage.isInstance(obj)) {\n const dict = obj.toDict();\n return {\n ...dict.data,\n role: obj.getType(),\n };\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, _serializeInputs(value)])\n );\n};\n\n/**\n * Return a tuple of the final list of stream modes sent to the\n * remote graph and a boolean flag indicating if only one stream mode was\n * originally requested and whether stream mode 'updates'\n * was present in the original list of stream modes.\n *\n * 'updates' mode is always added to the list of stream modes so that interrupts\n * can be detected in the remote graph.\n */\nconst getStreamModes = (\n streamMode?: StreamMode | StreamMode[],\n defaultStreamMode: StreamMode = \"updates\"\n) => {\n const updatedStreamModes: StreamMode[] = [];\n let reqUpdates = false;\n let reqSingle = true;\n\n if (\n streamMode !== undefined &&\n (typeof streamMode === \"string\" ||\n (Array.isArray(streamMode) && streamMode.length > 0))\n ) {\n reqSingle = typeof streamMode === \"string\";\n const mapped = Array.isArray(streamMode) ? streamMode : [streamMode];\n updatedStreamModes.push(...mapped);\n } else {\n updatedStreamModes.push(defaultStreamMode);\n }\n if (updatedStreamModes.includes(\"updates\")) {\n reqUpdates = true;\n } else {\n updatedStreamModes.push(\"updates\");\n }\n return {\n updatedStreamModes,\n reqUpdates,\n reqSingle,\n };\n};\n\n/**\n * The `RemoteGraph` class is a client implementation for calling remote\n * APIs that implement the LangGraph Server API specification.\n *\n * For example, the `RemoteGraph` class can be used to call APIs from deployments\n * on LangSmith Deployment.\n *\n * `RemoteGraph` behaves the same way as a `StateGraph` and can be used directly as\n * a node in another `StateGraph`.\n *\n * @example\n * ```ts\n * import { RemoteGraph } from \"@langchain/langgraph/remote\";\n *\n * // Can also pass a LangGraph SDK client instance directly\n * const remoteGraph = new RemoteGraph({\n * graphId: process.env.LANGGRAPH_REMOTE_GRAPH_ID!,\n * apiKey: process.env.LANGGRAPH_REMOTE_GRAPH_API_KEY,\n * url: process.env.LANGGRAPH_REMOTE_GRAPH_API_URL,\n * });\n *\n * const input = {\n * messages: [\n * {\n * role: \"human\",\n * content: \"Hello world!\",\n * },\n * ],\n * };\n *\n * const config = {\n * configurable: { thread_id: \"threadId1\" },\n * };\n *\n * await remoteGraph.invoke(input, config);\n * ```\n */\nexport class RemoteGraph<\n Nn extends StrRecord<string, PregelNode> = StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel> = StrRecord<string, BaseChannel>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = StrRecord<string, any>,\n>\n extends Runnable<\n PregelInputType,\n PregelOutputType,\n PregelOptions<Nn, Cc, ContextType>\n >\n implements PregelInterface<Nn, Cc, ContextType>\n{\n static lc_name() {\n return \"RemoteGraph\";\n }\n\n lc_namespace = [\"langgraph\", \"pregel\"];\n\n lg_is_pregel = true;\n\n config?: RunnableConfig;\n\n graphId: string;\n\n protected client: Client;\n\n protected interruptBefore?: Array<keyof Nn> | All;\n\n protected interruptAfter?: Array<keyof Nn> | All;\n\n protected streamResumable?: boolean;\n\n constructor(params: RemoteGraphParams) {\n super(params);\n\n this.graphId = params.graphId;\n this.client =\n params.client ??\n new Client({\n apiUrl: params.url,\n apiKey: params.apiKey,\n defaultHeaders: params.headers,\n });\n this.config = params.config;\n this.interruptBefore = params.interruptBefore;\n this.interruptAfter = params.interruptAfter;\n this.streamResumable = params.streamResumable;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Remove ignore when we remove support for 0.2 versions of core\n override withConfig(config: RunnableConfig): typeof this {\n const mergedConfig = mergeConfigs(this.config, config);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new (this.constructor as any)({ ...this, config: mergedConfig });\n }\n\n protected _sanitizeConfig(config: RunnableConfig) {\n const reservedConfigurableKeys = new Set([\n \"callbacks\",\n \"checkpoint_map\",\n \"checkpoint_id\",\n \"checkpoint_ns\",\n ]);\n\n const sanitizeObj = <T>(obj: T): T => {\n try {\n // This will only throw if we're trying to serialize a circular reference\n // or trying to serialize a BigInt...\n JSON.stringify(obj);\n return obj;\n } catch {\n const seen = new WeakSet();\n return JSON.parse(\n JSON.stringify(obj, (_, value) => {\n if (typeof value === \"object\" && value != null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n\n if (typeof value === \"bigint\") return value.toString();\n return value;\n })\n );\n }\n };\n\n const propagateMetadataDefaults = (obj: unknown) => {\n const seen = new WeakSet<object>();\n const visit = (value: unknown) => {\n if (typeof value !== \"object\" || value == null) {\n return;\n }\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n const record = value as Record<string, unknown>;\n const configurable = record.configurable;\n if (\n typeof configurable === \"object\" &&\n configurable != null &&\n !Array.isArray(configurable)\n ) {\n const metadata =\n typeof record.metadata === \"object\" &&\n record.metadata != null &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : undefined;\n record.metadata =\n propagateConfigurableToMetadata(\n configurable as Record<string, unknown>,\n metadata\n ) ?? record.metadata;\n }\n for (const nestedValue of Object.values(record)) {\n visit(nestedValue);\n }\n };\n visit(obj);\n };\n\n propagateMetadataDefaults(config);\n\n // Remove non-JSON serializable fields from the config\n const sanitizedConfig = sanitizeObj(config);\n\n // Only include configurable keys that are not reserved and\n // not starting with \"__pregel_\" prefix\n const newConfigurable = Object.fromEntries(\n Object.entries(sanitizedConfig.configurable ?? {}).filter(\n ([k]) => !reservedConfigurableKeys.has(k) && !k.startsWith(\"__pregel_\")\n )\n );\n\n return {\n tags: sanitizedConfig.tags ?? [],\n metadata: sanitizedConfig.metadata ?? {},\n configurable: newConfigurable,\n recursion_limit: sanitizedConfig.recursionLimit,\n };\n }\n\n /**\n * Prepare config and thread ID for remote run API calls.\n *\n * `thread_id` is passed via the URL path, not in `config.configurable`, so the\n * server can accept a separate `context` payload for stateful runs.\n */\n #prepareRunRequest(mergedConfig: LangGraphRunnableConfig): {\n threadId: string | undefined;\n context: unknown;\n config: ReturnType<RemoteGraph[\"_sanitizeConfig\"]>;\n } {\n const context = mergedConfig.context;\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id as string | undefined;\n delete configurable.thread_id;\n\n return {\n threadId,\n context,\n config: {\n ...sanitizedConfig,\n configurable,\n },\n };\n }\n\n protected _getConfig(checkpoint: Record<string, unknown>): RunnableConfig {\n return {\n configurable: {\n thread_id: checkpoint.thread_id,\n checkpoint_ns: checkpoint.checkpoint_ns,\n checkpoint_id: checkpoint.checkpoint_id,\n checkpoint_map: checkpoint.checkpoint_map ?? {},\n },\n };\n }\n\n protected _checkpointToConfig(\n checkpoint?: Partial<Checkpoint> | null,\n fallbackConfig?: RunnableConfig\n ): RunnableConfig {\n const resolvedCheckpoint =\n checkpoint ?? this._getCheckpoint(fallbackConfig);\n if (resolvedCheckpoint == null) {\n return { configurable: {} };\n }\n\n const configurable: Record<string, unknown> = {};\n if (resolvedCheckpoint.thread_id !== undefined) {\n configurable.thread_id = resolvedCheckpoint.thread_id;\n }\n if (resolvedCheckpoint.checkpoint_ns !== undefined) {\n configurable.checkpoint_ns = resolvedCheckpoint.checkpoint_ns;\n }\n if (resolvedCheckpoint.checkpoint_id !== undefined) {\n configurable.checkpoint_id = resolvedCheckpoint.checkpoint_id;\n }\n\n const hasCheckpointFields =\n resolvedCheckpoint.checkpoint_ns !== undefined ||\n resolvedCheckpoint.checkpoint_id !== undefined ||\n resolvedCheckpoint.checkpoint_map !== undefined;\n if (hasCheckpointFields) {\n configurable.checkpoint_map = resolvedCheckpoint.checkpoint_map ?? {};\n }\n\n return { configurable };\n }\n\n protected _getCheckpoint(config?: RunnableConfig): Checkpoint | undefined {\n if (config?.configurable === undefined) {\n return undefined;\n }\n\n const checkpointKeys = [\n \"thread_id\",\n \"checkpoint_ns\",\n \"checkpoint_id\",\n \"checkpoint_map\",\n ] as const;\n\n const checkpoint = Object.fromEntries(\n checkpointKeys\n .map((key) => [key, config.configurable![key]])\n .filter(([_, value]) => value !== undefined)\n );\n\n return Object.keys(checkpoint).length > 0 ? checkpoint : undefined;\n }\n\n protected _createStateSnapshot(\n state: ThreadState,\n fallbackConfig?: RunnableConfig\n ): StateSnapshot {\n const tasks: PregelTaskDescription[] = state.tasks.map((task) => {\n return {\n id: task.id,\n name: task.name,\n error: task.error ? { message: task.error } : undefined,\n // TODO: remove in LangGraph.js 0.4\n interrupts: task.interrupts.map(({ id, ...rest }) => ({\n interrupt_id: id,\n ...rest,\n })),\n // eslint-disable-next-line no-nested-ternary\n state: task.state\n ? this._createStateSnapshot(\n task.state,\n task.checkpoint\n ? this._checkpointToConfig(task.checkpoint)\n : fallbackConfig\n )\n : task.checkpoint\n ? { configurable: task.checkpoint }\n : undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result: (task as any).result,\n };\n });\n\n return {\n values: state.values,\n next: state.next ? [...state.next] : [],\n // TODO: Fix SDK typing. `ThreadState.checkpoint` is typed as non-null,\n // but deployments can return `null` (e.g. a thread that exists but has\n // not produced a checkpoint yet). See #2328.\n config: this._checkpointToConfig(\n state.checkpoint as Checkpoint | null,\n fallbackConfig\n ),\n metadata: state.metadata\n ? (state.metadata as CheckpointMetadata)\n : undefined,\n createdAt: state.created_at ?? undefined,\n parentConfig: state.parent_checkpoint\n ? this._checkpointToConfig(state.parent_checkpoint)\n : undefined,\n tasks,\n };\n }\n\n override async invoke(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): Promise<PregelOutputType> {\n let lastValue;\n const stream = await this.stream(input, {\n ...options,\n streamMode: \"values\",\n });\n for await (const chunk of stream) {\n lastValue = chunk;\n }\n return lastValue;\n }\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding: \"text/event-stream\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<Uint8Array>;\n\n override streamEvents(\n _input: PregelInputType,\n _options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding?: \"text/event-stream\";\n },\n _streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent | Uint8Array> {\n throw new Error(\"Not implemented.\");\n }\n\n override async *_streamIterator(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): AsyncGenerator<PregelOutputType> {\n const mergedConfig = mergeConfigs(\n this.config,\n options\n ) as LangGraphRunnableConfig;\n const {\n threadId,\n context,\n config: sanitizedConfig,\n } = this.#prepareRunRequest(mergedConfig);\n\n const streamProtocolInstance = options?.configurable?.[CONFIG_KEY_STREAM];\n\n const streamSubgraphs =\n options?.subgraphs ?? streamProtocolInstance !== undefined;\n\n const interruptBefore = options?.interruptBefore ?? this.interruptBefore;\n const interruptAfter = options?.interruptAfter ?? this.interruptAfter;\n\n const { updatedStreamModes, reqSingle, reqUpdates } = getStreamModes(\n options?.streamMode\n );\n\n const extendedStreamModes = [\n ...new Set([\n ...updatedStreamModes,\n ...(streamProtocolInstance?.modes ?? new Set()),\n ]),\n ].map((mode) => {\n if (mode === \"messages\") return \"messages-tuple\";\n return mode;\n });\n\n let command;\n let serializedInput;\n if (isCommand(input)) {\n // TODO: Remove cast when SDK type fix gets merged\n command = input.toJSON() as Record<string, unknown>;\n serializedInput = undefined;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const streamPayload = {\n command,\n input: serializedInput,\n config: sanitizedConfig,\n context,\n streamMode: extendedStreamModes,\n interruptBefore: interruptBefore as string[],\n interruptAfter: interruptAfter as string[],\n streamSubgraphs,\n ifNotExists: \"create\" as const,\n signal: mergedConfig.signal,\n streamResumable: this.streamResumable,\n };\n\n const runStream =\n threadId != null\n ? this.client.runs.stream(threadId, this.graphId, streamPayload)\n : this.client.runs.stream(null, this.graphId, streamPayload);\n\n for await (const chunk of runStream) {\n let mode;\n let namespace: string[];\n if (chunk.event.includes(CHECKPOINT_NAMESPACE_SEPARATOR)) {\n const eventComponents = chunk.event.split(\n CHECKPOINT_NAMESPACE_SEPARATOR\n );\n // eslint-disable-next-line prefer-destructuring\n mode = eventComponents[0];\n namespace = eventComponents.slice(1);\n } else {\n mode = chunk.event;\n namespace = [];\n }\n const callerNamespace = options?.configurable?.checkpoint_ns;\n if (typeof callerNamespace === \"string\") {\n namespace = callerNamespace\n .split(CHECKPOINT_NAMESPACE_SEPARATOR)\n .concat(namespace);\n }\n if (\n streamProtocolInstance !== undefined &&\n streamProtocolInstance.modes?.has(chunk.event)\n ) {\n streamProtocolInstance.push([namespace, mode, chunk.data]);\n }\n if (chunk.event.startsWith(\"updates\")) {\n if (\n typeof chunk.data === \"object\" &&\n chunk.data?.[INTERRUPT] !== undefined\n ) {\n throw new GraphInterrupt(chunk.data[INTERRUPT]);\n }\n if (!reqUpdates) {\n continue;\n }\n } else if (chunk.event?.startsWith(\"error\")) {\n throw new RemoteException(\n typeof chunk.data === \"string\"\n ? chunk.data\n : JSON.stringify(chunk.data)\n );\n }\n if (\n !updatedStreamModes.includes(\n chunk.event.split(CHECKPOINT_NAMESPACE_SEPARATOR)[0] as StreamMode\n )\n ) {\n continue;\n }\n if (options?.subgraphs) {\n if (reqSingle) {\n yield [namespace, chunk.data];\n } else {\n yield [namespace, mode, chunk.data];\n }\n } else if (reqSingle) {\n yield chunk.data;\n } else {\n yield [mode, chunk.data];\n }\n }\n }\n\n async updateState(\n inputConfig: LangGraphRunnableConfig,\n values: Record<string, unknown>,\n asNode?: string\n ): Promise<RunnableConfig> {\n const mergedConfig = mergeConfigs(this.config, inputConfig);\n const response = await this.client.threads.updateState(\n mergedConfig.configurable?.thread_id,\n { values, asNode, checkpoint: this._getCheckpoint(mergedConfig) }\n );\n // TODO: Fix SDK typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this._getConfig((response as any).checkpoint);\n }\n\n async *getStateHistory(\n config: RunnableConfig,\n options?: CheckpointListOptions\n ): AsyncIterableIterator<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n const states = await this.client.threads.getHistory(\n mergedConfig.configurable?.thread_id,\n {\n limit: options?.limit ?? 10,\n // TODO: Fix type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n before: this._getCheckpoint(options?.before) as any,\n metadata: options?.filter,\n checkpoint: this._getCheckpoint(mergedConfig),\n }\n );\n for (const state of states) {\n yield this._createStateSnapshot(state, mergedConfig);\n }\n }\n\n protected _getDrawableNodes(\n nodes: Array<{\n id: string | number;\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: Record<string, any> | string;\n metadata?: unknown;\n }>\n ): Record<string, DrawableNode> {\n const nodesMap: Record<string, DrawableNode> = {};\n for (const node of nodes) {\n const nodeId = node.id;\n nodesMap[nodeId] = {\n id: nodeId.toString(),\n name:\n typeof node.data === \"string\" ? node.data : (node.data?.name ?? \"\"),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: (node.data as any) ?? {},\n metadata:\n typeof node.data !== \"string\" ? (node.data?.metadata ?? {}) : {},\n };\n }\n return nodesMap;\n }\n\n async getState(\n config: RunnableConfig,\n options?: { subgraphs?: boolean }\n ): Promise<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n\n const state = await this.client.threads.getState(\n mergedConfig.configurable?.thread_id,\n this._getCheckpoint(mergedConfig),\n options\n );\n return this._createStateSnapshot(state, mergedConfig);\n }\n\n /** @deprecated Use getGraphAsync instead. The async method will become the default in the next minor release. */\n override getGraph(\n _?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n throw new Error(\n `The synchronous \"getGraph\" is not supported for this graph. Call \"getGraphAsync\" instead.`\n );\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n async getGraphAsync(config?: RunnableConfig & { xray?: boolean | number }) {\n const graph = await this.client.assistants.getGraph(this.graphId, {\n xray: config?.xray,\n });\n return new DrawableGraph({\n nodes: this._getDrawableNodes(graph.nodes),\n edges: graph.edges,\n });\n }\n\n /** @deprecated Use getSubgraphsAsync instead. The async method will become the default in the next minor release. */\n getSubgraphs(): Generator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n throw new Error(\n `The synchronous \"getSubgraphs\" method is not supported for this graph. Call \"getSubgraphsAsync\" instead.`\n );\n }\n\n async *getSubgraphsAsync(\n namespace?: string,\n recurse = false\n ): AsyncGenerator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n const subgraphs = await this.client.assistants.getSubgraphs(this.graphId, {\n namespace,\n recurse,\n });\n\n for (const [ns, graphSchema] of Object.entries(subgraphs)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const remoteSubgraph = new (this.constructor as any)({\n ...this,\n graphId: graphSchema.graph_id,\n });\n yield [ns, remoteSubgraph];\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remote.cjs","names":["BaseMessage","Runnable","Client","propagateConfigurableToMetadata","isCommand","RemoteGraphRunStream","IterableReadableStreamWithAbortSignal","#prepareRunRequest","CONFIG_KEY_STREAM","GraphInterrupt","INTERRUPT","RemoteException","DrawableGraph"],"sources":["../../src/pregel/remote.ts"],"sourcesContent":["import {\n Client,\n type Checkpoint,\n type ThreadState,\n} from \"@langchain/langgraph-sdk\";\nimport {\n Graph as DrawableGraph,\n Node as DrawableNode,\n} from \"@langchain/core/runnables/graph\";\nimport {\n mergeConfigs,\n Runnable,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport {\n All,\n CheckpointListOptions,\n CheckpointMetadata,\n} from \"@langchain/langgraph-checkpoint\";\nimport { StreamEvent } from \"@langchain/core/tracers/log_stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\nimport { BaseMessage } from \"@langchain/core/messages\";\n\nimport {\n BaseChannel,\n GraphInterrupt,\n LangGraphRunnableConfig,\n RemoteException,\n} from \"../web.js\";\nimport { StrRecord } from \"./algo.js\";\nimport { PregelInputType, PregelOptions, PregelOutputType } from \"./index.js\";\nimport { PregelNode } from \"./read.js\";\nimport { RemoteGraphRunStream } from \"./remote-run-stream.js\";\nimport { IterableReadableStreamWithAbortSignal } from \"./stream.js\";\nimport {\n PregelParams,\n PregelInterface,\n PregelTaskDescription,\n StateSnapshot,\n StreamMode,\n} from \"./types.js\";\nimport {\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_STREAM,\n INTERRUPT,\n isCommand,\n} from \"../constants.js\";\nimport { propagateConfigurableToMetadata } from \"./utils/config.js\";\nimport type { ProtocolEvent } from \"../stream/types.js\";\n\nexport type RemoteGraphParams = Omit<\n PregelParams<StrRecord<string, PregelNode>, StrRecord<string, BaseChannel>>,\n \"channels\" | \"nodes\" | \"inputChannels\" | \"outputChannels\"\n> & {\n graphId: string;\n client?: Client;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n streamResumable?: boolean;\n};\n\ntype StreamEventsOptions = Parameters<Runnable[\"streamEvents\"]>[2];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _serializeInputs = (obj: any): any => {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(_serializeInputs);\n }\n\n // Handle BaseMessage instances by converting them to a serializable format\n if (BaseMessage.isInstance(obj)) {\n const dict = obj.toDict();\n return {\n ...dict.data,\n role: obj.getType(),\n };\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, _serializeInputs(value)])\n );\n};\n\n/**\n * Return a tuple of the final list of stream modes sent to the\n * remote graph and a boolean flag indicating if only one stream mode was\n * originally requested and whether stream mode 'updates'\n * was present in the original list of stream modes.\n *\n * 'updates' mode is always added to the list of stream modes so that interrupts\n * can be detected in the remote graph.\n */\nconst getStreamModes = (\n streamMode?: StreamMode | StreamMode[],\n defaultStreamMode: StreamMode = \"updates\"\n) => {\n const updatedStreamModes: StreamMode[] = [];\n let reqUpdates = false;\n let reqSingle = true;\n\n if (\n streamMode !== undefined &&\n (typeof streamMode === \"string\" ||\n (Array.isArray(streamMode) && streamMode.length > 0))\n ) {\n reqSingle = typeof streamMode === \"string\";\n const mapped = Array.isArray(streamMode) ? streamMode : [streamMode];\n updatedStreamModes.push(...mapped);\n } else {\n updatedStreamModes.push(defaultStreamMode);\n }\n if (updatedStreamModes.includes(\"updates\")) {\n reqUpdates = true;\n } else {\n updatedStreamModes.push(\"updates\");\n }\n return {\n updatedStreamModes,\n reqUpdates,\n reqSingle,\n };\n};\n\nfunction protocolEventsToEventStream(run: AsyncIterable<ProtocolEvent>) {\n const encoder = new TextEncoder();\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const event of run) {\n const namespace = event.params.namespace;\n const eventName = namespace.length\n ? `${event.method}|${namespace.join(\"|\")}`\n : event.method;\n controller.enqueue(\n encoder.encode(\n `event: ${eventName}\\ndata: ${JSON.stringify(event.params.data ?? {})}\\n\\n`\n )\n );\n }\n } catch (error) {\n controller.enqueue(\n encoder.encode(\n `event: error\\ndata: ${JSON.stringify({ message: String(error) })}\\n\\n`\n )\n );\n } finally {\n controller.close();\n }\n },\n });\n}\n\n/**\n * The `RemoteGraph` class is a client implementation for calling remote\n * APIs that implement the LangGraph Server API specification.\n *\n * For example, the `RemoteGraph` class can be used to call APIs from deployments\n * on LangSmith Deployment.\n *\n * `RemoteGraph` behaves the same way as a `StateGraph` and can be used directly as\n * a node in another `StateGraph`.\n *\n * @example\n * ```ts\n * import { RemoteGraph } from \"@langchain/langgraph/remote\";\n *\n * // Can also pass a LangGraph SDK client instance directly\n * const remoteGraph = new RemoteGraph({\n * graphId: process.env.LANGGRAPH_REMOTE_GRAPH_ID!,\n * apiKey: process.env.LANGGRAPH_REMOTE_GRAPH_API_KEY,\n * url: process.env.LANGGRAPH_REMOTE_GRAPH_API_URL,\n * });\n *\n * const input = {\n * messages: [\n * {\n * role: \"human\",\n * content: \"Hello world!\",\n * },\n * ],\n * };\n *\n * const config = {\n * configurable: { thread_id: \"threadId1\" },\n * };\n *\n * await remoteGraph.invoke(input, config);\n * ```\n */\nexport class RemoteGraph<\n Nn extends StrRecord<string, PregelNode> = StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel> = StrRecord<string, BaseChannel>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = StrRecord<string, any>,\n>\n extends Runnable<\n PregelInputType,\n PregelOutputType,\n PregelOptions<Nn, Cc, ContextType>\n >\n implements PregelInterface<Nn, Cc, ContextType>\n{\n static lc_name() {\n return \"RemoteGraph\";\n }\n\n lc_namespace = [\"langgraph\", \"pregel\"];\n\n lg_is_pregel = true;\n\n config?: RunnableConfig;\n\n graphId: string;\n\n protected client: Client;\n\n protected interruptBefore?: Array<keyof Nn> | All;\n\n protected interruptAfter?: Array<keyof Nn> | All;\n\n protected streamResumable?: boolean;\n\n constructor(params: RemoteGraphParams) {\n super(params);\n\n this.graphId = params.graphId;\n this.client =\n params.client ??\n new Client({\n apiUrl: params.url,\n apiKey: params.apiKey,\n defaultHeaders: params.headers,\n });\n this.config = params.config;\n this.interruptBefore = params.interruptBefore;\n this.interruptAfter = params.interruptAfter;\n this.streamResumable = params.streamResumable;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Remove ignore when we remove support for 0.2 versions of core\n override withConfig(config: RunnableConfig): typeof this {\n const mergedConfig = mergeConfigs(this.config, config);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new (this.constructor as any)({ ...this, config: mergedConfig });\n }\n\n protected _sanitizeConfig(config: RunnableConfig) {\n const reservedConfigurableKeys = new Set([\n \"callbacks\",\n \"checkpoint_map\",\n \"checkpoint_id\",\n \"checkpoint_ns\",\n ]);\n\n const sanitizeObj = <T>(obj: T): T => {\n try {\n // This will only throw if we're trying to serialize a circular reference\n // or trying to serialize a BigInt...\n JSON.stringify(obj);\n return obj;\n } catch {\n const seen = new WeakSet();\n return JSON.parse(\n JSON.stringify(obj, (_, value) => {\n if (typeof value === \"object\" && value != null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n\n if (typeof value === \"bigint\") return value.toString();\n return value;\n })\n );\n }\n };\n\n const propagateMetadataDefaults = (obj: unknown) => {\n const seen = new WeakSet<object>();\n const visit = (value: unknown) => {\n if (typeof value !== \"object\" || value == null) {\n return;\n }\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n const record = value as Record<string, unknown>;\n const configurable = record.configurable;\n if (\n typeof configurable === \"object\" &&\n configurable != null &&\n !Array.isArray(configurable)\n ) {\n const metadata =\n typeof record.metadata === \"object\" &&\n record.metadata != null &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : undefined;\n record.metadata =\n propagateConfigurableToMetadata(\n configurable as Record<string, unknown>,\n metadata\n ) ?? record.metadata;\n }\n for (const nestedValue of Object.values(record)) {\n visit(nestedValue);\n }\n };\n visit(obj);\n };\n\n propagateMetadataDefaults(config);\n\n // Remove non-JSON serializable fields from the config\n const sanitizedConfig = sanitizeObj(config);\n\n // Only include configurable keys that are not reserved and\n // not starting with \"__pregel_\" prefix\n const newConfigurable = Object.fromEntries(\n Object.entries(sanitizedConfig.configurable ?? {}).filter(\n ([k]) => !reservedConfigurableKeys.has(k) && !k.startsWith(\"__pregel_\")\n )\n );\n\n return {\n tags: sanitizedConfig.tags ?? [],\n metadata: sanitizedConfig.metadata ?? {},\n configurable: newConfigurable,\n recursion_limit: sanitizedConfig.recursionLimit,\n };\n }\n\n /**\n * Prepare config and thread ID for remote run API calls.\n *\n * `thread_id` is passed via the URL path, not in `config.configurable`, so the\n * server can accept a separate `context` payload for stateful runs.\n */\n #prepareRunRequest(mergedConfig: LangGraphRunnableConfig): {\n threadId: string | undefined;\n context: unknown;\n config: ReturnType<RemoteGraph[\"_sanitizeConfig\"]>;\n } {\n const context = mergedConfig.context;\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id as string | undefined;\n delete configurable.thread_id;\n\n return {\n threadId,\n context,\n config: {\n ...sanitizedConfig,\n configurable,\n },\n };\n }\n\n protected _getConfig(checkpoint: Record<string, unknown>): RunnableConfig {\n return {\n configurable: {\n thread_id: checkpoint.thread_id,\n checkpoint_ns: checkpoint.checkpoint_ns,\n checkpoint_id: checkpoint.checkpoint_id,\n checkpoint_map: checkpoint.checkpoint_map ?? {},\n },\n };\n }\n\n protected _checkpointToConfig(\n checkpoint?: Partial<Checkpoint> | null,\n fallbackConfig?: RunnableConfig\n ): RunnableConfig {\n const resolvedCheckpoint =\n checkpoint ?? this._getCheckpoint(fallbackConfig);\n if (resolvedCheckpoint == null) {\n return { configurable: {} };\n }\n\n const configurable: Record<string, unknown> = {};\n if (resolvedCheckpoint.thread_id !== undefined) {\n configurable.thread_id = resolvedCheckpoint.thread_id;\n }\n if (resolvedCheckpoint.checkpoint_ns !== undefined) {\n configurable.checkpoint_ns = resolvedCheckpoint.checkpoint_ns;\n }\n if (resolvedCheckpoint.checkpoint_id !== undefined) {\n configurable.checkpoint_id = resolvedCheckpoint.checkpoint_id;\n }\n\n const hasCheckpointFields =\n resolvedCheckpoint.checkpoint_ns !== undefined ||\n resolvedCheckpoint.checkpoint_id !== undefined ||\n resolvedCheckpoint.checkpoint_map !== undefined;\n if (hasCheckpointFields) {\n configurable.checkpoint_map = resolvedCheckpoint.checkpoint_map ?? {};\n }\n\n return { configurable };\n }\n\n protected _getCheckpoint(config?: RunnableConfig): Checkpoint | undefined {\n if (config?.configurable === undefined) {\n return undefined;\n }\n\n const checkpointKeys = [\n \"thread_id\",\n \"checkpoint_ns\",\n \"checkpoint_id\",\n \"checkpoint_map\",\n ] as const;\n\n const checkpoint = Object.fromEntries(\n checkpointKeys\n .map((key) => [key, config.configurable![key]])\n .filter(([_, value]) => value !== undefined)\n );\n\n return Object.keys(checkpoint).length > 0 ? checkpoint : undefined;\n }\n\n protected _createStateSnapshot(\n state: ThreadState,\n fallbackConfig?: RunnableConfig\n ): StateSnapshot {\n const tasks: PregelTaskDescription[] = state.tasks.map((task) => {\n return {\n id: task.id,\n name: task.name,\n error: task.error ? { message: task.error } : undefined,\n // TODO: remove in LangGraph.js 0.4\n interrupts: task.interrupts.map(({ id, ...rest }) => ({\n interrupt_id: id,\n ...rest,\n })),\n // eslint-disable-next-line no-nested-ternary\n state: task.state\n ? this._createStateSnapshot(\n task.state,\n task.checkpoint\n ? this._checkpointToConfig(task.checkpoint)\n : fallbackConfig\n )\n : task.checkpoint\n ? { configurable: task.checkpoint }\n : undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result: (task as any).result,\n };\n });\n\n return {\n values: state.values,\n next: state.next ? [...state.next] : [],\n // TODO: Fix SDK typing. `ThreadState.checkpoint` is typed as non-null,\n // but deployments can return `null` (e.g. a thread that exists but has\n // not produced a checkpoint yet). See #2328.\n config: this._checkpointToConfig(\n state.checkpoint as Checkpoint | null,\n fallbackConfig\n ),\n metadata: state.metadata\n ? (state.metadata as CheckpointMetadata)\n : undefined,\n createdAt: state.created_at ?? undefined,\n parentConfig: state.parent_checkpoint\n ? this._checkpointToConfig(state.parent_checkpoint)\n : undefined,\n tasks,\n };\n }\n\n override async invoke(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): Promise<PregelOutputType> {\n let lastValue;\n const stream = await this.stream(input, {\n ...options,\n streamMode: \"values\",\n });\n for await (const chunk of stream) {\n lastValue = chunk;\n }\n return lastValue;\n }\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding: \"text/event-stream\";\n }\n ): Promise<IterableReadableStream<Uint8Array>>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: undefined;\n }\n ): Promise<RemoteGraphRunStream<PregelOutputType>>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding: \"text/event-stream\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<Uint8Array>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\" | \"v3\";\n encoding?: \"text/event-stream\";\n },\n _streamOptions?: StreamEventsOptions\n ):\n | IterableReadableStream<StreamEvent | Uint8Array>\n | Promise<RemoteGraphRunStream<PregelOutputType>>\n | Promise<IterableReadableStream<Uint8Array>>\n | Promise<\n | RemoteGraphRunStream<PregelOutputType>\n | IterableReadableStream<Uint8Array>\n > {\n if (options.version === \"v3\") {\n return this._streamEventsV3(\n input,\n options as Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: \"text/event-stream\";\n }\n );\n }\n throw new Error(\"Not implemented.\");\n }\n\n protected _rejectV3Unsupported(\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transformers?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control?: any;\n }\n ) {\n if (options.transformers !== undefined) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `transformers`.'\n );\n }\n if (options.control !== undefined) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `control`.'\n );\n }\n if (\n options.interruptBefore !== undefined ||\n this.interruptBefore !== undefined\n ) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptBefore`.'\n );\n }\n if (\n options.interruptAfter !== undefined ||\n this.interruptAfter !== undefined\n ) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptAfter`.'\n );\n }\n }\n\n protected async _streamEventsV3(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: \"text/event-stream\";\n }\n ): Promise<\n RemoteGraphRunStream<PregelOutputType> | IterableReadableStream<Uint8Array>\n > {\n this._rejectV3Unsupported(options);\n\n const abortController = new AbortController();\n const mergedConfig = mergeConfigs(this.config, options);\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id;\n delete configurable.thread_id;\n\n const runConfig = {\n ...sanitizedConfig,\n configurable,\n };\n\n const thread =\n typeof threadId === \"string\"\n ? this.client.threads.stream(threadId, { assistantId: this.graphId })\n : this.client.threads.stream({ assistantId: this.graphId });\n\n let serializedInput;\n if (isCommand(input)) {\n serializedInput = input.toJSON() as Record<string, unknown>;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const run = await thread.run.start({\n input: serializedInput,\n config: runConfig,\n });\n\n const graphRun = new RemoteGraphRunStream<PregelOutputType>({\n client: this.client,\n thread,\n runId: run.run_id,\n abortController,\n });\n\n if (mergedConfig.signal != null) {\n if (mergedConfig.signal.aborted) {\n graphRun.abort(mergedConfig.signal.reason);\n } else {\n mergedConfig.signal.addEventListener(\n \"abort\",\n () => graphRun.abort(mergedConfig.signal?.reason),\n { once: true }\n );\n }\n }\n\n if (options.encoding === \"text/event-stream\") {\n const encodingAbortController = new AbortController();\n encodingAbortController.signal.addEventListener(\n \"abort\",\n () => graphRun.abort(encodingAbortController.signal.reason),\n { once: true }\n );\n return new IterableReadableStreamWithAbortSignal(\n protocolEventsToEventStream(graphRun),\n encodingAbortController\n );\n }\n\n return graphRun;\n }\n\n override async *_streamIterator(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): AsyncGenerator<PregelOutputType> {\n const mergedConfig = mergeConfigs(\n this.config,\n options\n ) as LangGraphRunnableConfig;\n const {\n threadId,\n context,\n config: sanitizedConfig,\n } = this.#prepareRunRequest(mergedConfig);\n\n const streamProtocolInstance = options?.configurable?.[CONFIG_KEY_STREAM];\n\n const streamSubgraphs =\n options?.subgraphs ?? streamProtocolInstance !== undefined;\n\n const interruptBefore = options?.interruptBefore ?? this.interruptBefore;\n const interruptAfter = options?.interruptAfter ?? this.interruptAfter;\n\n const { updatedStreamModes, reqSingle, reqUpdates } = getStreamModes(\n options?.streamMode\n );\n\n const extendedStreamModes = [\n ...new Set([\n ...updatedStreamModes,\n ...(streamProtocolInstance?.modes ?? new Set()),\n ]),\n ].map((mode) => {\n if (mode === \"messages\") return \"messages-tuple\";\n return mode;\n });\n\n let command;\n let serializedInput;\n if (isCommand(input)) {\n // TODO: Remove cast when SDK type fix gets merged\n command = input.toJSON() as Record<string, unknown>;\n serializedInput = undefined;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const streamPayload = {\n command,\n input: serializedInput,\n config: sanitizedConfig,\n context,\n streamMode: extendedStreamModes,\n interruptBefore: interruptBefore as string[],\n interruptAfter: interruptAfter as string[],\n streamSubgraphs,\n ifNotExists: \"create\" as const,\n signal: mergedConfig.signal,\n streamResumable: this.streamResumable,\n };\n\n const runStream =\n threadId != null\n ? this.client.runs.stream(threadId, this.graphId, streamPayload)\n : this.client.runs.stream(null, this.graphId, streamPayload);\n\n for await (const chunk of runStream) {\n let mode;\n let namespace: string[];\n if (chunk.event.includes(CHECKPOINT_NAMESPACE_SEPARATOR)) {\n const eventComponents = chunk.event.split(\n CHECKPOINT_NAMESPACE_SEPARATOR\n );\n // eslint-disable-next-line prefer-destructuring\n mode = eventComponents[0];\n namespace = eventComponents.slice(1);\n } else {\n mode = chunk.event;\n namespace = [];\n }\n const callerNamespace = options?.configurable?.checkpoint_ns;\n if (typeof callerNamespace === \"string\") {\n namespace = callerNamespace\n .split(CHECKPOINT_NAMESPACE_SEPARATOR)\n .concat(namespace);\n }\n if (\n streamProtocolInstance !== undefined &&\n streamProtocolInstance.modes?.has(chunk.event)\n ) {\n streamProtocolInstance.push([namespace, mode, chunk.data]);\n }\n if (chunk.event.startsWith(\"updates\")) {\n if (\n typeof chunk.data === \"object\" &&\n chunk.data?.[INTERRUPT] !== undefined\n ) {\n throw new GraphInterrupt(chunk.data[INTERRUPT]);\n }\n if (!reqUpdates) {\n continue;\n }\n } else if (chunk.event?.startsWith(\"error\")) {\n throw new RemoteException(\n typeof chunk.data === \"string\"\n ? chunk.data\n : JSON.stringify(chunk.data)\n );\n }\n if (\n !updatedStreamModes.includes(\n chunk.event.split(CHECKPOINT_NAMESPACE_SEPARATOR)[0] as StreamMode\n )\n ) {\n continue;\n }\n if (options?.subgraphs) {\n if (reqSingle) {\n yield [namespace, chunk.data];\n } else {\n yield [namespace, mode, chunk.data];\n }\n } else if (reqSingle) {\n yield chunk.data;\n } else {\n yield [mode, chunk.data];\n }\n }\n }\n\n async updateState(\n inputConfig: LangGraphRunnableConfig,\n values: Record<string, unknown>,\n asNode?: string\n ): Promise<RunnableConfig> {\n const mergedConfig = mergeConfigs(this.config, inputConfig);\n const response = await this.client.threads.updateState(\n mergedConfig.configurable?.thread_id,\n { values, asNode, checkpoint: this._getCheckpoint(mergedConfig) }\n );\n // TODO: Fix SDK typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this._getConfig((response as any).checkpoint);\n }\n\n async *getStateHistory(\n config: RunnableConfig,\n options?: CheckpointListOptions\n ): AsyncIterableIterator<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n const states = await this.client.threads.getHistory(\n mergedConfig.configurable?.thread_id,\n {\n limit: options?.limit ?? 10,\n // TODO: Fix type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n before: this._getCheckpoint(options?.before) as any,\n metadata: options?.filter,\n checkpoint: this._getCheckpoint(mergedConfig),\n }\n );\n for (const state of states) {\n yield this._createStateSnapshot(state, mergedConfig);\n }\n }\n\n protected _getDrawableNodes(\n nodes: Array<{\n id: string | number;\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: Record<string, any> | string;\n metadata?: unknown;\n }>\n ): Record<string, DrawableNode> {\n const nodesMap: Record<string, DrawableNode> = {};\n for (const node of nodes) {\n const nodeId = node.id;\n nodesMap[nodeId] = {\n id: nodeId.toString(),\n name:\n typeof node.data === \"string\" ? node.data : (node.data?.name ?? \"\"),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: (node.data as any) ?? {},\n metadata:\n typeof node.data !== \"string\" ? (node.data?.metadata ?? {}) : {},\n };\n }\n return nodesMap;\n }\n\n async getState(\n config: RunnableConfig,\n options?: { subgraphs?: boolean }\n ): Promise<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n\n const state = await this.client.threads.getState(\n mergedConfig.configurable?.thread_id,\n this._getCheckpoint(mergedConfig),\n options\n );\n return this._createStateSnapshot(state, mergedConfig);\n }\n\n /** @deprecated Use getGraphAsync instead. The async method will become the default in the next minor release. */\n override getGraph(\n _?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n throw new Error(\n `The synchronous \"getGraph\" is not supported for this graph. Call \"getGraphAsync\" instead.`\n );\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n async getGraphAsync(config?: RunnableConfig & { xray?: boolean | number }) {\n const graph = await this.client.assistants.getGraph(this.graphId, {\n xray: config?.xray,\n });\n return new DrawableGraph({\n nodes: this._getDrawableNodes(graph.nodes),\n edges: graph.edges,\n });\n }\n\n /** @deprecated Use getSubgraphsAsync instead. The async method will become the default in the next minor release. */\n getSubgraphs(): Generator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n throw new Error(\n `The synchronous \"getSubgraphs\" method is not supported for this graph. Call \"getSubgraphsAsync\" instead.`\n );\n }\n\n async *getSubgraphsAsync(\n namespace?: string,\n recurse = false\n ): AsyncGenerator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n const subgraphs = await this.client.assistants.getSubgraphs(this.graphId, {\n namespace,\n recurse,\n });\n\n for (const [ns, graphSchema] of Object.entries(subgraphs)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const remoteSubgraph = new (this.constructor as any)({\n ...this,\n graphId: graphSchema.graph_id,\n });\n yield [ns, remoteSubgraph];\n }\n }\n}\n"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { LangGraphRunnableConfig } from "./runnable_types.cjs";
3
3
  import { PregelNode } from "./read.cjs";
4
4
  import { PregelInputType, PregelInterface, PregelOptions, PregelOutputType, PregelParams, StateSnapshot } from "./types.cjs";
5
5
  import { StrRecord } from "./algo.cjs";
6
+ import { RemoteGraphRunStream } from "./remote-run-stream.cjs";
6
7
  import { All, CheckpointListOptions } from "@langchain/langgraph-checkpoint";
7
8
  import { Runnable, RunnableConfig } from "@langchain/core/runnables";
8
9
  import { Graph, Node } from "@langchain/core/runnables/graph";
@@ -83,6 +84,14 @@ declare class RemoteGraph<Nn extends StrRecord<string, PregelNode> = StrRecord<s
83
84
  protected _getCheckpoint(config?: RunnableConfig): Checkpoint$1 | undefined;
84
85
  protected _createStateSnapshot(state: ThreadState, fallbackConfig?: RunnableConfig): StateSnapshot;
85
86
  invoke(input: PregelInputType, options?: Partial<PregelOptions<Nn, Cc, ContextType>>): Promise<PregelOutputType>;
87
+ streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
88
+ version: "v3";
89
+ encoding: "text/event-stream";
90
+ }): Promise<IterableReadableStream<Uint8Array>>;
91
+ streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
92
+ version: "v3";
93
+ encoding?: undefined;
94
+ }): Promise<RemoteGraphRunStream<PregelOutputType>>;
86
95
  streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
87
96
  version: "v1" | "v2";
88
97
  }, streamOptions?: StreamEventsOptions): IterableReadableStream<StreamEvent>;
@@ -90,6 +99,14 @@ declare class RemoteGraph<Nn extends StrRecord<string, PregelNode> = StrRecord<s
90
99
  version: "v1" | "v2";
91
100
  encoding: "text/event-stream";
92
101
  }, streamOptions?: StreamEventsOptions): IterableReadableStream<Uint8Array>;
102
+ protected _rejectV3Unsupported(options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
103
+ transformers?: any;
104
+ control?: any;
105
+ }): void;
106
+ protected _streamEventsV3(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
107
+ version: "v3";
108
+ encoding?: "text/event-stream";
109
+ }): Promise<RemoteGraphRunStream<PregelOutputType> | IterableReadableStream<Uint8Array>>;
93
110
  _streamIterator(input: PregelInputType, options?: Partial<PregelOptions<Nn, Cc, ContextType>>): AsyncGenerator<PregelOutputType>;
94
111
  updateState(inputConfig: LangGraphRunnableConfig, values: Record<string, unknown>, asNode?: string): Promise<RunnableConfig>;
95
112
  getStateHistory(config: RunnableConfig, options?: CheckpointListOptions): AsyncIterableIterator<StateSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"remote.d.cts","names":[],"sources":["../../src/pregel/remote.ts"],"mappings":"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"}
1
+ {"version":3,"file":"remote.d.cts","names":[],"sources":["../../src/pregel/remote.ts"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { LangGraphRunnableConfig } from "./runnable_types.js";
3
3
  import { PregelNode } from "./read.js";
4
4
  import { PregelInputType, PregelInterface, PregelOptions, PregelOutputType, PregelParams, StateSnapshot } from "./types.js";
5
5
  import { StrRecord } from "./algo.js";
6
+ import { RemoteGraphRunStream } from "./remote-run-stream.js";
6
7
  import { All, CheckpointListOptions } from "@langchain/langgraph-checkpoint";
7
8
  import { Runnable, RunnableConfig } from "@langchain/core/runnables";
8
9
  import { Graph, Node } from "@langchain/core/runnables/graph";
@@ -83,6 +84,14 @@ declare class RemoteGraph<Nn extends StrRecord<string, PregelNode> = StrRecord<s
83
84
  protected _getCheckpoint(config?: RunnableConfig): Checkpoint$1 | undefined;
84
85
  protected _createStateSnapshot(state: ThreadState, fallbackConfig?: RunnableConfig): StateSnapshot;
85
86
  invoke(input: PregelInputType, options?: Partial<PregelOptions<Nn, Cc, ContextType>>): Promise<PregelOutputType>;
87
+ streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
88
+ version: "v3";
89
+ encoding: "text/event-stream";
90
+ }): Promise<IterableReadableStream<Uint8Array>>;
91
+ streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
92
+ version: "v3";
93
+ encoding?: undefined;
94
+ }): Promise<RemoteGraphRunStream<PregelOutputType>>;
86
95
  streamEvents(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
87
96
  version: "v1" | "v2";
88
97
  }, streamOptions?: StreamEventsOptions): IterableReadableStream<StreamEvent>;
@@ -90,6 +99,14 @@ declare class RemoteGraph<Nn extends StrRecord<string, PregelNode> = StrRecord<s
90
99
  version: "v1" | "v2";
91
100
  encoding: "text/event-stream";
92
101
  }, streamOptions?: StreamEventsOptions): IterableReadableStream<Uint8Array>;
102
+ protected _rejectV3Unsupported(options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
103
+ transformers?: any;
104
+ control?: any;
105
+ }): void;
106
+ protected _streamEventsV3(input: PregelInputType, options: Partial<PregelOptions<Nn, Cc, ContextType>> & {
107
+ version: "v3";
108
+ encoding?: "text/event-stream";
109
+ }): Promise<RemoteGraphRunStream<PregelOutputType> | IterableReadableStream<Uint8Array>>;
93
110
  _streamIterator(input: PregelInputType, options?: Partial<PregelOptions<Nn, Cc, ContextType>>): AsyncGenerator<PregelOutputType>;
94
111
  updateState(inputConfig: LangGraphRunnableConfig, values: Record<string, unknown>, asNode?: string): Promise<RunnableConfig>;
95
112
  getStateHistory(config: RunnableConfig, options?: CheckpointListOptions): AsyncIterableIterator<StateSnapshot>;
@@ -1 +1 @@
1
- {"version":3,"file":"remote.d.ts","names":[],"sources":["../../src/pregel/remote.ts"],"mappings":";;;;;;;;;;;;;KA+CY,iBAAA,GAAoB,IAAA,CAC9B,YAAA,CAAa,SAAA,SAAkB,UAAA,GAAa,SAAA,SAAkB,WAAA;EAG9D,OAAA;EACA,MAAA,GAAS,MAAA;EACT,GAAA;EACA,MAAA;EACA,OAAA,GAAU,MAAA;EACV,eAAA;AAAA;AAAA,KAGG,mBAAA,GAAsB,UAAA,CAAW,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAFpC;;;;;AAyGF;;;;;;;;cAAa,WAAA,YACA,SAAA,SAAkB,UAAA,IAAc,SAAA,SAAkB,UAAA,cAClD,SAAA,SAAkB,WAAA,IAAe,SAAA,SAAkB,WAAA,uBAE1C,MAAA,gBAAsB,SAAA,uBAElC,QAAA,CACN,eAAA,EACA,gBAAA,EACA,aAAA,CAAc,EAAA,EAAI,EAAA,EAAI,WAAA,cAEb,eAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,WAAA;EAAA;SAE5B,OAAA,CAAA;EAIP,YAAA;EAEA,YAAA;EAEA,MAAA,GAAS,cAAA;EAET,OAAA;EAAA,UAEU,MAAA,EAAQ,MAAA;EAAA,UAER,eAAA,GAAkB,KAAA,OAAY,EAAA,IAAM,GAAA;EAAA,UAEpC,cAAA,GAAiB,KAAA,OAAY,EAAA,IAAM,GAAA;EAAA,UAEnC,eAAA;EAEV,WAAA,CAAY,MAAA,EAAQ,iBAAA;EAmBX,UAAA,CAAW,MAAA,EAAQ,cAAA;EAAA,UAMlB,eAAA,CAAgB,MAAA,EAAQ,cAAA;;;;;;;;YAkHxB,UAAA,CAAW,UAAA,EAAY,MAAA,oBAA0B,cAAA;EAAA,UAWjD,mBAAA,CACR,UAAA,GAAa,OAAA,CAAQ,YAAA,UACrB,cAAA,GAAiB,cAAA,GAChB,cAAA;EAAA,UA6BO,cAAA,CAAe,MAAA,GAAS,cAAA,GAAiB,YAAA;EAAA,UAqBzC,oBAAA,CACR,KAAA,EAAO,WAAA,EACP,cAAA,GAAiB,cAAA,GAChB,aAAA;EAgDY,MAAA,CACb,KAAA,EAAO,eAAA,EACP,OAAA,GAAU,OAAA,CAAQ,aAAA,CAAc,EAAA,EAAI,EAAA,EAAI,WAAA,KACvC,OAAA,CAAQ,gBAAA;EAYF,YAAA,CACP,KAAA,EAAO,eAAA,EACP,OAAA,EAAS,OAAA,CAAQ,aAAA,CAAc,EAAA,EAAI,EAAA,EAAI,WAAA;IACrC,OAAA;EAAA,GAEF,aAAA,GAAgB,mBAAA,GACf,sBAAA,CAAuB,WAAA;EAEjB,YAAA,CACP,KAAA,EAAO,eAAA,EACP,OAAA,EAAS,OAAA,CAAQ,aAAA,CAAc,EAAA,EAAI,EAAA,EAAI,WAAA;IACrC,OAAA;IACA,QAAA;EAAA,GAEF,aAAA,GAAgB,mBAAA,GACf,sBAAA,CAAuB,UAAA;EAaV,eAAA,CACd,KAAA,EAAO,eAAA,EACP,OAAA,GAAU,OAAA,CAAQ,aAAA,CAAc,EAAA,EAAI,EAAA,EAAI,WAAA,KACvC,cAAA,CAAe,gBAAA;EA8HZ,WAAA,CACJ,WAAA,EAAa,uBAAA,EACb,MAAA,EAAQ,MAAA,mBACR,MAAA,YACC,OAAA,CAAQ,cAAA;EAWJ,eAAA,CACL,MAAA,EAAQ,cAAA,EACR,OAAA,GAAU,qBAAA,GACT,qBAAA,CAAsB,aAAA;EAAA,UAkBf,iBAAA,CACR,KAAA,EAAO,KAAA;IACL,EAAA;IACA,IAAA;IAEA,IAAA,GAAO,MAAA;IACP,QAAA;EAAA,KAED,MAAA,SAAe,IAAA;EAiBZ,QAAA,CACJ,MAAA,EAAQ,cAAA,EACR,OAAA;IAAY,SAAA;EAAA,IACX,OAAA,CAAQ,aAAA;EA5NF;EAwOA,QAAA,CACP,CAAA,GAAI,cAAA;IAAmB,IAAA;EAAA,IACtB,KAAA;EAzOgB;;;EAkPb,aAAA,CAAc,MAAA,GAAS,cAAA;IAAmB,IAAA;EAAA,IAAyB,OAAA,CAAA,KAAA;EA1OxC;EAqPjC,YAAA,CAAA,GAAgB,SAAA,UAAmB,eAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,WAAA;EAMpD,iBAAA,CACL,SAAA,WACA,OAAA,aACC,cAAA,UAAwB,eAAA,CAAgB,EAAA,EAAI,EAAA,EAAI,WAAA;AAAA"}
1
+ {"version":3,"file":"remote.d.ts","names":[],"sources":["../../src/pregel/remote.ts"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { CONFIG_KEY_STREAM, INTERRUPT, isCommand } from "../constants.js";
2
2
  import { GraphInterrupt, RemoteException } from "../errors.js";
3
3
  import { propagateConfigurableToMetadata } from "./utils/config.js";
4
+ import { IterableReadableStreamWithAbortSignal } from "./stream.js";
4
5
  import "../web.js";
6
+ import { RemoteGraphRunStream } from "./remote-run-stream.js";
5
7
  import { Runnable, mergeConfigs } from "@langchain/core/runnables";
6
8
  import { Graph } from "@langchain/core/runnables/graph";
7
9
  import { BaseMessage } from "@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 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 = 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 (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 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 IterableReadableStreamWithAbortSignal(protocolEventsToEventStream(graphRun), encodingAbortController);
302
+ }
303
+ return graphRun;
304
+ }
245
305
  async *_streamIterator(input, options) {
246
306
  const mergedConfig = mergeConfigs(this.config, options);
247
307
  const { threadId, context, config: sanitizedConfig } = this.#prepareRunRequest(mergedConfig);
@@ -1 +1 @@
1
- {"version":3,"file":"remote.js","names":["#prepareRunRequest","DrawableGraph"],"sources":["../../src/pregel/remote.ts"],"sourcesContent":["import {\n Client,\n type Checkpoint,\n type ThreadState,\n} from \"@langchain/langgraph-sdk\";\nimport {\n Graph as DrawableGraph,\n Node as DrawableNode,\n} from \"@langchain/core/runnables/graph\";\nimport {\n mergeConfigs,\n Runnable,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport {\n All,\n CheckpointListOptions,\n CheckpointMetadata,\n} from \"@langchain/langgraph-checkpoint\";\nimport { StreamEvent } from \"@langchain/core/tracers/log_stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\nimport { BaseMessage } from \"@langchain/core/messages\";\n\nimport {\n BaseChannel,\n GraphInterrupt,\n LangGraphRunnableConfig,\n RemoteException,\n} from \"../web.js\";\nimport { StrRecord } from \"./algo.js\";\nimport { PregelInputType, PregelOptions, PregelOutputType } from \"./index.js\";\nimport { PregelNode } from \"./read.js\";\nimport {\n PregelParams,\n PregelInterface,\n PregelTaskDescription,\n StateSnapshot,\n StreamMode,\n} from \"./types.js\";\nimport {\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_STREAM,\n INTERRUPT,\n isCommand,\n} from \"../constants.js\";\nimport { propagateConfigurableToMetadata } from \"./utils/config.js\";\n\nexport type RemoteGraphParams = Omit<\n PregelParams<StrRecord<string, PregelNode>, StrRecord<string, BaseChannel>>,\n \"channels\" | \"nodes\" | \"inputChannels\" | \"outputChannels\"\n> & {\n graphId: string;\n client?: Client;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n streamResumable?: boolean;\n};\n\ntype StreamEventsOptions = Parameters<Runnable[\"streamEvents\"]>[2];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _serializeInputs = (obj: any): any => {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(_serializeInputs);\n }\n\n // Handle BaseMessage instances by converting them to a serializable format\n if (BaseMessage.isInstance(obj)) {\n const dict = obj.toDict();\n return {\n ...dict.data,\n role: obj.getType(),\n };\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, _serializeInputs(value)])\n );\n};\n\n/**\n * Return a tuple of the final list of stream modes sent to the\n * remote graph and a boolean flag indicating if only one stream mode was\n * originally requested and whether stream mode 'updates'\n * was present in the original list of stream modes.\n *\n * 'updates' mode is always added to the list of stream modes so that interrupts\n * can be detected in the remote graph.\n */\nconst getStreamModes = (\n streamMode?: StreamMode | StreamMode[],\n defaultStreamMode: StreamMode = \"updates\"\n) => {\n const updatedStreamModes: StreamMode[] = [];\n let reqUpdates = false;\n let reqSingle = true;\n\n if (\n streamMode !== undefined &&\n (typeof streamMode === \"string\" ||\n (Array.isArray(streamMode) && streamMode.length > 0))\n ) {\n reqSingle = typeof streamMode === \"string\";\n const mapped = Array.isArray(streamMode) ? streamMode : [streamMode];\n updatedStreamModes.push(...mapped);\n } else {\n updatedStreamModes.push(defaultStreamMode);\n }\n if (updatedStreamModes.includes(\"updates\")) {\n reqUpdates = true;\n } else {\n updatedStreamModes.push(\"updates\");\n }\n return {\n updatedStreamModes,\n reqUpdates,\n reqSingle,\n };\n};\n\n/**\n * The `RemoteGraph` class is a client implementation for calling remote\n * APIs that implement the LangGraph Server API specification.\n *\n * For example, the `RemoteGraph` class can be used to call APIs from deployments\n * on LangSmith Deployment.\n *\n * `RemoteGraph` behaves the same way as a `StateGraph` and can be used directly as\n * a node in another `StateGraph`.\n *\n * @example\n * ```ts\n * import { RemoteGraph } from \"@langchain/langgraph/remote\";\n *\n * // Can also pass a LangGraph SDK client instance directly\n * const remoteGraph = new RemoteGraph({\n * graphId: process.env.LANGGRAPH_REMOTE_GRAPH_ID!,\n * apiKey: process.env.LANGGRAPH_REMOTE_GRAPH_API_KEY,\n * url: process.env.LANGGRAPH_REMOTE_GRAPH_API_URL,\n * });\n *\n * const input = {\n * messages: [\n * {\n * role: \"human\",\n * content: \"Hello world!\",\n * },\n * ],\n * };\n *\n * const config = {\n * configurable: { thread_id: \"threadId1\" },\n * };\n *\n * await remoteGraph.invoke(input, config);\n * ```\n */\nexport class RemoteGraph<\n Nn extends StrRecord<string, PregelNode> = StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel> = StrRecord<string, BaseChannel>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = StrRecord<string, any>,\n>\n extends Runnable<\n PregelInputType,\n PregelOutputType,\n PregelOptions<Nn, Cc, ContextType>\n >\n implements PregelInterface<Nn, Cc, ContextType>\n{\n static lc_name() {\n return \"RemoteGraph\";\n }\n\n lc_namespace = [\"langgraph\", \"pregel\"];\n\n lg_is_pregel = true;\n\n config?: RunnableConfig;\n\n graphId: string;\n\n protected client: Client;\n\n protected interruptBefore?: Array<keyof Nn> | All;\n\n protected interruptAfter?: Array<keyof Nn> | All;\n\n protected streamResumable?: boolean;\n\n constructor(params: RemoteGraphParams) {\n super(params);\n\n this.graphId = params.graphId;\n this.client =\n params.client ??\n new Client({\n apiUrl: params.url,\n apiKey: params.apiKey,\n defaultHeaders: params.headers,\n });\n this.config = params.config;\n this.interruptBefore = params.interruptBefore;\n this.interruptAfter = params.interruptAfter;\n this.streamResumable = params.streamResumable;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Remove ignore when we remove support for 0.2 versions of core\n override withConfig(config: RunnableConfig): typeof this {\n const mergedConfig = mergeConfigs(this.config, config);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new (this.constructor as any)({ ...this, config: mergedConfig });\n }\n\n protected _sanitizeConfig(config: RunnableConfig) {\n const reservedConfigurableKeys = new Set([\n \"callbacks\",\n \"checkpoint_map\",\n \"checkpoint_id\",\n \"checkpoint_ns\",\n ]);\n\n const sanitizeObj = <T>(obj: T): T => {\n try {\n // This will only throw if we're trying to serialize a circular reference\n // or trying to serialize a BigInt...\n JSON.stringify(obj);\n return obj;\n } catch {\n const seen = new WeakSet();\n return JSON.parse(\n JSON.stringify(obj, (_, value) => {\n if (typeof value === \"object\" && value != null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n\n if (typeof value === \"bigint\") return value.toString();\n return value;\n })\n );\n }\n };\n\n const propagateMetadataDefaults = (obj: unknown) => {\n const seen = new WeakSet<object>();\n const visit = (value: unknown) => {\n if (typeof value !== \"object\" || value == null) {\n return;\n }\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n const record = value as Record<string, unknown>;\n const configurable = record.configurable;\n if (\n typeof configurable === \"object\" &&\n configurable != null &&\n !Array.isArray(configurable)\n ) {\n const metadata =\n typeof record.metadata === \"object\" &&\n record.metadata != null &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : undefined;\n record.metadata =\n propagateConfigurableToMetadata(\n configurable as Record<string, unknown>,\n metadata\n ) ?? record.metadata;\n }\n for (const nestedValue of Object.values(record)) {\n visit(nestedValue);\n }\n };\n visit(obj);\n };\n\n propagateMetadataDefaults(config);\n\n // Remove non-JSON serializable fields from the config\n const sanitizedConfig = sanitizeObj(config);\n\n // Only include configurable keys that are not reserved and\n // not starting with \"__pregel_\" prefix\n const newConfigurable = Object.fromEntries(\n Object.entries(sanitizedConfig.configurable ?? {}).filter(\n ([k]) => !reservedConfigurableKeys.has(k) && !k.startsWith(\"__pregel_\")\n )\n );\n\n return {\n tags: sanitizedConfig.tags ?? [],\n metadata: sanitizedConfig.metadata ?? {},\n configurable: newConfigurable,\n recursion_limit: sanitizedConfig.recursionLimit,\n };\n }\n\n /**\n * Prepare config and thread ID for remote run API calls.\n *\n * `thread_id` is passed via the URL path, not in `config.configurable`, so the\n * server can accept a separate `context` payload for stateful runs.\n */\n #prepareRunRequest(mergedConfig: LangGraphRunnableConfig): {\n threadId: string | undefined;\n context: unknown;\n config: ReturnType<RemoteGraph[\"_sanitizeConfig\"]>;\n } {\n const context = mergedConfig.context;\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id as string | undefined;\n delete configurable.thread_id;\n\n return {\n threadId,\n context,\n config: {\n ...sanitizedConfig,\n configurable,\n },\n };\n }\n\n protected _getConfig(checkpoint: Record<string, unknown>): RunnableConfig {\n return {\n configurable: {\n thread_id: checkpoint.thread_id,\n checkpoint_ns: checkpoint.checkpoint_ns,\n checkpoint_id: checkpoint.checkpoint_id,\n checkpoint_map: checkpoint.checkpoint_map ?? {},\n },\n };\n }\n\n protected _checkpointToConfig(\n checkpoint?: Partial<Checkpoint> | null,\n fallbackConfig?: RunnableConfig\n ): RunnableConfig {\n const resolvedCheckpoint =\n checkpoint ?? this._getCheckpoint(fallbackConfig);\n if (resolvedCheckpoint == null) {\n return { configurable: {} };\n }\n\n const configurable: Record<string, unknown> = {};\n if (resolvedCheckpoint.thread_id !== undefined) {\n configurable.thread_id = resolvedCheckpoint.thread_id;\n }\n if (resolvedCheckpoint.checkpoint_ns !== undefined) {\n configurable.checkpoint_ns = resolvedCheckpoint.checkpoint_ns;\n }\n if (resolvedCheckpoint.checkpoint_id !== undefined) {\n configurable.checkpoint_id = resolvedCheckpoint.checkpoint_id;\n }\n\n const hasCheckpointFields =\n resolvedCheckpoint.checkpoint_ns !== undefined ||\n resolvedCheckpoint.checkpoint_id !== undefined ||\n resolvedCheckpoint.checkpoint_map !== undefined;\n if (hasCheckpointFields) {\n configurable.checkpoint_map = resolvedCheckpoint.checkpoint_map ?? {};\n }\n\n return { configurable };\n }\n\n protected _getCheckpoint(config?: RunnableConfig): Checkpoint | undefined {\n if (config?.configurable === undefined) {\n return undefined;\n }\n\n const checkpointKeys = [\n \"thread_id\",\n \"checkpoint_ns\",\n \"checkpoint_id\",\n \"checkpoint_map\",\n ] as const;\n\n const checkpoint = Object.fromEntries(\n checkpointKeys\n .map((key) => [key, config.configurable![key]])\n .filter(([_, value]) => value !== undefined)\n );\n\n return Object.keys(checkpoint).length > 0 ? checkpoint : undefined;\n }\n\n protected _createStateSnapshot(\n state: ThreadState,\n fallbackConfig?: RunnableConfig\n ): StateSnapshot {\n const tasks: PregelTaskDescription[] = state.tasks.map((task) => {\n return {\n id: task.id,\n name: task.name,\n error: task.error ? { message: task.error } : undefined,\n // TODO: remove in LangGraph.js 0.4\n interrupts: task.interrupts.map(({ id, ...rest }) => ({\n interrupt_id: id,\n ...rest,\n })),\n // eslint-disable-next-line no-nested-ternary\n state: task.state\n ? this._createStateSnapshot(\n task.state,\n task.checkpoint\n ? this._checkpointToConfig(task.checkpoint)\n : fallbackConfig\n )\n : task.checkpoint\n ? { configurable: task.checkpoint }\n : undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result: (task as any).result,\n };\n });\n\n return {\n values: state.values,\n next: state.next ? [...state.next] : [],\n // TODO: Fix SDK typing. `ThreadState.checkpoint` is typed as non-null,\n // but deployments can return `null` (e.g. a thread that exists but has\n // not produced a checkpoint yet). See #2328.\n config: this._checkpointToConfig(\n state.checkpoint as Checkpoint | null,\n fallbackConfig\n ),\n metadata: state.metadata\n ? (state.metadata as CheckpointMetadata)\n : undefined,\n createdAt: state.created_at ?? undefined,\n parentConfig: state.parent_checkpoint\n ? this._checkpointToConfig(state.parent_checkpoint)\n : undefined,\n tasks,\n };\n }\n\n override async invoke(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): Promise<PregelOutputType> {\n let lastValue;\n const stream = await this.stream(input, {\n ...options,\n streamMode: \"values\",\n });\n for await (const chunk of stream) {\n lastValue = chunk;\n }\n return lastValue;\n }\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding: \"text/event-stream\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<Uint8Array>;\n\n override streamEvents(\n _input: PregelInputType,\n _options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding?: \"text/event-stream\";\n },\n _streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent | Uint8Array> {\n throw new Error(\"Not implemented.\");\n }\n\n override async *_streamIterator(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): AsyncGenerator<PregelOutputType> {\n const mergedConfig = mergeConfigs(\n this.config,\n options\n ) as LangGraphRunnableConfig;\n const {\n threadId,\n context,\n config: sanitizedConfig,\n } = this.#prepareRunRequest(mergedConfig);\n\n const streamProtocolInstance = options?.configurable?.[CONFIG_KEY_STREAM];\n\n const streamSubgraphs =\n options?.subgraphs ?? streamProtocolInstance !== undefined;\n\n const interruptBefore = options?.interruptBefore ?? this.interruptBefore;\n const interruptAfter = options?.interruptAfter ?? this.interruptAfter;\n\n const { updatedStreamModes, reqSingle, reqUpdates } = getStreamModes(\n options?.streamMode\n );\n\n const extendedStreamModes = [\n ...new Set([\n ...updatedStreamModes,\n ...(streamProtocolInstance?.modes ?? new Set()),\n ]),\n ].map((mode) => {\n if (mode === \"messages\") return \"messages-tuple\";\n return mode;\n });\n\n let command;\n let serializedInput;\n if (isCommand(input)) {\n // TODO: Remove cast when SDK type fix gets merged\n command = input.toJSON() as Record<string, unknown>;\n serializedInput = undefined;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const streamPayload = {\n command,\n input: serializedInput,\n config: sanitizedConfig,\n context,\n streamMode: extendedStreamModes,\n interruptBefore: interruptBefore as string[],\n interruptAfter: interruptAfter as string[],\n streamSubgraphs,\n ifNotExists: \"create\" as const,\n signal: mergedConfig.signal,\n streamResumable: this.streamResumable,\n };\n\n const runStream =\n threadId != null\n ? this.client.runs.stream(threadId, this.graphId, streamPayload)\n : this.client.runs.stream(null, this.graphId, streamPayload);\n\n for await (const chunk of runStream) {\n let mode;\n let namespace: string[];\n if (chunk.event.includes(CHECKPOINT_NAMESPACE_SEPARATOR)) {\n const eventComponents = chunk.event.split(\n CHECKPOINT_NAMESPACE_SEPARATOR\n );\n // eslint-disable-next-line prefer-destructuring\n mode = eventComponents[0];\n namespace = eventComponents.slice(1);\n } else {\n mode = chunk.event;\n namespace = [];\n }\n const callerNamespace = options?.configurable?.checkpoint_ns;\n if (typeof callerNamespace === \"string\") {\n namespace = callerNamespace\n .split(CHECKPOINT_NAMESPACE_SEPARATOR)\n .concat(namespace);\n }\n if (\n streamProtocolInstance !== undefined &&\n streamProtocolInstance.modes?.has(chunk.event)\n ) {\n streamProtocolInstance.push([namespace, mode, chunk.data]);\n }\n if (chunk.event.startsWith(\"updates\")) {\n if (\n typeof chunk.data === \"object\" &&\n chunk.data?.[INTERRUPT] !== undefined\n ) {\n throw new GraphInterrupt(chunk.data[INTERRUPT]);\n }\n if (!reqUpdates) {\n continue;\n }\n } else if (chunk.event?.startsWith(\"error\")) {\n throw new RemoteException(\n typeof chunk.data === \"string\"\n ? chunk.data\n : JSON.stringify(chunk.data)\n );\n }\n if (\n !updatedStreamModes.includes(\n chunk.event.split(CHECKPOINT_NAMESPACE_SEPARATOR)[0] as StreamMode\n )\n ) {\n continue;\n }\n if (options?.subgraphs) {\n if (reqSingle) {\n yield [namespace, chunk.data];\n } else {\n yield [namespace, mode, chunk.data];\n }\n } else if (reqSingle) {\n yield chunk.data;\n } else {\n yield [mode, chunk.data];\n }\n }\n }\n\n async updateState(\n inputConfig: LangGraphRunnableConfig,\n values: Record<string, unknown>,\n asNode?: string\n ): Promise<RunnableConfig> {\n const mergedConfig = mergeConfigs(this.config, inputConfig);\n const response = await this.client.threads.updateState(\n mergedConfig.configurable?.thread_id,\n { values, asNode, checkpoint: this._getCheckpoint(mergedConfig) }\n );\n // TODO: Fix SDK typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this._getConfig((response as any).checkpoint);\n }\n\n async *getStateHistory(\n config: RunnableConfig,\n options?: CheckpointListOptions\n ): AsyncIterableIterator<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n const states = await this.client.threads.getHistory(\n mergedConfig.configurable?.thread_id,\n {\n limit: options?.limit ?? 10,\n // TODO: Fix type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n before: this._getCheckpoint(options?.before) as any,\n metadata: options?.filter,\n checkpoint: this._getCheckpoint(mergedConfig),\n }\n );\n for (const state of states) {\n yield this._createStateSnapshot(state, mergedConfig);\n }\n }\n\n protected _getDrawableNodes(\n nodes: Array<{\n id: string | number;\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: Record<string, any> | string;\n metadata?: unknown;\n }>\n ): Record<string, DrawableNode> {\n const nodesMap: Record<string, DrawableNode> = {};\n for (const node of nodes) {\n const nodeId = node.id;\n nodesMap[nodeId] = {\n id: nodeId.toString(),\n name:\n typeof node.data === \"string\" ? node.data : (node.data?.name ?? \"\"),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: (node.data as any) ?? {},\n metadata:\n typeof node.data !== \"string\" ? (node.data?.metadata ?? {}) : {},\n };\n }\n return nodesMap;\n }\n\n async getState(\n config: RunnableConfig,\n options?: { subgraphs?: boolean }\n ): Promise<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n\n const state = await this.client.threads.getState(\n mergedConfig.configurable?.thread_id,\n this._getCheckpoint(mergedConfig),\n options\n );\n return this._createStateSnapshot(state, mergedConfig);\n }\n\n /** @deprecated Use getGraphAsync instead. The async method will become the default in the next minor release. */\n override getGraph(\n _?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n throw new Error(\n `The synchronous \"getGraph\" is not supported for this graph. Call \"getGraphAsync\" instead.`\n );\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n async getGraphAsync(config?: RunnableConfig & { xray?: boolean | number }) {\n const graph = await this.client.assistants.getGraph(this.graphId, {\n xray: config?.xray,\n });\n return new DrawableGraph({\n nodes: this._getDrawableNodes(graph.nodes),\n edges: graph.edges,\n });\n }\n\n /** @deprecated Use getSubgraphsAsync instead. The async method will become the default in the next minor release. */\n getSubgraphs(): Generator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n throw new Error(\n `The synchronous \"getSubgraphs\" method is not supported for this graph. Call \"getSubgraphsAsync\" instead.`\n );\n }\n\n async *getSubgraphsAsync(\n namespace?: string,\n recurse = false\n ): AsyncGenerator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n const subgraphs = await this.client.assistants.getSubgraphs(this.graphId, {\n namespace,\n recurse,\n });\n\n for (const [ns, graphSchema] of Object.entries(subgraphs)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const remoteSubgraph = new (this.constructor as any)({\n ...this,\n graphId: graphSchema.graph_id,\n });\n yield [ns, remoteSubgraph];\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remote.js","names":["#prepareRunRequest","DrawableGraph"],"sources":["../../src/pregel/remote.ts"],"sourcesContent":["import {\n Client,\n type Checkpoint,\n type ThreadState,\n} from \"@langchain/langgraph-sdk\";\nimport {\n Graph as DrawableGraph,\n Node as DrawableNode,\n} from \"@langchain/core/runnables/graph\";\nimport {\n mergeConfigs,\n Runnable,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport {\n All,\n CheckpointListOptions,\n CheckpointMetadata,\n} from \"@langchain/langgraph-checkpoint\";\nimport { StreamEvent } from \"@langchain/core/tracers/log_stream\";\nimport { IterableReadableStream } from \"@langchain/core/utils/stream\";\nimport { BaseMessage } from \"@langchain/core/messages\";\n\nimport {\n BaseChannel,\n GraphInterrupt,\n LangGraphRunnableConfig,\n RemoteException,\n} from \"../web.js\";\nimport { StrRecord } from \"./algo.js\";\nimport { PregelInputType, PregelOptions, PregelOutputType } from \"./index.js\";\nimport { PregelNode } from \"./read.js\";\nimport { RemoteGraphRunStream } from \"./remote-run-stream.js\";\nimport { IterableReadableStreamWithAbortSignal } from \"./stream.js\";\nimport {\n PregelParams,\n PregelInterface,\n PregelTaskDescription,\n StateSnapshot,\n StreamMode,\n} from \"./types.js\";\nimport {\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_STREAM,\n INTERRUPT,\n isCommand,\n} from \"../constants.js\";\nimport { propagateConfigurableToMetadata } from \"./utils/config.js\";\nimport type { ProtocolEvent } from \"../stream/types.js\";\n\nexport type RemoteGraphParams = Omit<\n PregelParams<StrRecord<string, PregelNode>, StrRecord<string, BaseChannel>>,\n \"channels\" | \"nodes\" | \"inputChannels\" | \"outputChannels\"\n> & {\n graphId: string;\n client?: Client;\n url?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n streamResumable?: boolean;\n};\n\ntype StreamEventsOptions = Parameters<Runnable[\"streamEvents\"]>[2];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _serializeInputs = (obj: any): any => {\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(_serializeInputs);\n }\n\n // Handle BaseMessage instances by converting them to a serializable format\n if (BaseMessage.isInstance(obj)) {\n const dict = obj.toDict();\n return {\n ...dict.data,\n role: obj.getType(),\n };\n }\n\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [key, _serializeInputs(value)])\n );\n};\n\n/**\n * Return a tuple of the final list of stream modes sent to the\n * remote graph and a boolean flag indicating if only one stream mode was\n * originally requested and whether stream mode 'updates'\n * was present in the original list of stream modes.\n *\n * 'updates' mode is always added to the list of stream modes so that interrupts\n * can be detected in the remote graph.\n */\nconst getStreamModes = (\n streamMode?: StreamMode | StreamMode[],\n defaultStreamMode: StreamMode = \"updates\"\n) => {\n const updatedStreamModes: StreamMode[] = [];\n let reqUpdates = false;\n let reqSingle = true;\n\n if (\n streamMode !== undefined &&\n (typeof streamMode === \"string\" ||\n (Array.isArray(streamMode) && streamMode.length > 0))\n ) {\n reqSingle = typeof streamMode === \"string\";\n const mapped = Array.isArray(streamMode) ? streamMode : [streamMode];\n updatedStreamModes.push(...mapped);\n } else {\n updatedStreamModes.push(defaultStreamMode);\n }\n if (updatedStreamModes.includes(\"updates\")) {\n reqUpdates = true;\n } else {\n updatedStreamModes.push(\"updates\");\n }\n return {\n updatedStreamModes,\n reqUpdates,\n reqSingle,\n };\n};\n\nfunction protocolEventsToEventStream(run: AsyncIterable<ProtocolEvent>) {\n const encoder = new TextEncoder();\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const event of run) {\n const namespace = event.params.namespace;\n const eventName = namespace.length\n ? `${event.method}|${namespace.join(\"|\")}`\n : event.method;\n controller.enqueue(\n encoder.encode(\n `event: ${eventName}\\ndata: ${JSON.stringify(event.params.data ?? {})}\\n\\n`\n )\n );\n }\n } catch (error) {\n controller.enqueue(\n encoder.encode(\n `event: error\\ndata: ${JSON.stringify({ message: String(error) })}\\n\\n`\n )\n );\n } finally {\n controller.close();\n }\n },\n });\n}\n\n/**\n * The `RemoteGraph` class is a client implementation for calling remote\n * APIs that implement the LangGraph Server API specification.\n *\n * For example, the `RemoteGraph` class can be used to call APIs from deployments\n * on LangSmith Deployment.\n *\n * `RemoteGraph` behaves the same way as a `StateGraph` and can be used directly as\n * a node in another `StateGraph`.\n *\n * @example\n * ```ts\n * import { RemoteGraph } from \"@langchain/langgraph/remote\";\n *\n * // Can also pass a LangGraph SDK client instance directly\n * const remoteGraph = new RemoteGraph({\n * graphId: process.env.LANGGRAPH_REMOTE_GRAPH_ID!,\n * apiKey: process.env.LANGGRAPH_REMOTE_GRAPH_API_KEY,\n * url: process.env.LANGGRAPH_REMOTE_GRAPH_API_URL,\n * });\n *\n * const input = {\n * messages: [\n * {\n * role: \"human\",\n * content: \"Hello world!\",\n * },\n * ],\n * };\n *\n * const config = {\n * configurable: { thread_id: \"threadId1\" },\n * };\n *\n * await remoteGraph.invoke(input, config);\n * ```\n */\nexport class RemoteGraph<\n Nn extends StrRecord<string, PregelNode> = StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel> = StrRecord<string, BaseChannel>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = StrRecord<string, any>,\n>\n extends Runnable<\n PregelInputType,\n PregelOutputType,\n PregelOptions<Nn, Cc, ContextType>\n >\n implements PregelInterface<Nn, Cc, ContextType>\n{\n static lc_name() {\n return \"RemoteGraph\";\n }\n\n lc_namespace = [\"langgraph\", \"pregel\"];\n\n lg_is_pregel = true;\n\n config?: RunnableConfig;\n\n graphId: string;\n\n protected client: Client;\n\n protected interruptBefore?: Array<keyof Nn> | All;\n\n protected interruptAfter?: Array<keyof Nn> | All;\n\n protected streamResumable?: boolean;\n\n constructor(params: RemoteGraphParams) {\n super(params);\n\n this.graphId = params.graphId;\n this.client =\n params.client ??\n new Client({\n apiUrl: params.url,\n apiKey: params.apiKey,\n defaultHeaders: params.headers,\n });\n this.config = params.config;\n this.interruptBefore = params.interruptBefore;\n this.interruptAfter = params.interruptAfter;\n this.streamResumable = params.streamResumable;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore Remove ignore when we remove support for 0.2 versions of core\n override withConfig(config: RunnableConfig): typeof this {\n const mergedConfig = mergeConfigs(this.config, config);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return new (this.constructor as any)({ ...this, config: mergedConfig });\n }\n\n protected _sanitizeConfig(config: RunnableConfig) {\n const reservedConfigurableKeys = new Set([\n \"callbacks\",\n \"checkpoint_map\",\n \"checkpoint_id\",\n \"checkpoint_ns\",\n ]);\n\n const sanitizeObj = <T>(obj: T): T => {\n try {\n // This will only throw if we're trying to serialize a circular reference\n // or trying to serialize a BigInt...\n JSON.stringify(obj);\n return obj;\n } catch {\n const seen = new WeakSet();\n return JSON.parse(\n JSON.stringify(obj, (_, value) => {\n if (typeof value === \"object\" && value != null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n\n if (typeof value === \"bigint\") return value.toString();\n return value;\n })\n );\n }\n };\n\n const propagateMetadataDefaults = (obj: unknown) => {\n const seen = new WeakSet<object>();\n const visit = (value: unknown) => {\n if (typeof value !== \"object\" || value == null) {\n return;\n }\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n const record = value as Record<string, unknown>;\n const configurable = record.configurable;\n if (\n typeof configurable === \"object\" &&\n configurable != null &&\n !Array.isArray(configurable)\n ) {\n const metadata =\n typeof record.metadata === \"object\" &&\n record.metadata != null &&\n !Array.isArray(record.metadata)\n ? (record.metadata as Record<string, unknown>)\n : undefined;\n record.metadata =\n propagateConfigurableToMetadata(\n configurable as Record<string, unknown>,\n metadata\n ) ?? record.metadata;\n }\n for (const nestedValue of Object.values(record)) {\n visit(nestedValue);\n }\n };\n visit(obj);\n };\n\n propagateMetadataDefaults(config);\n\n // Remove non-JSON serializable fields from the config\n const sanitizedConfig = sanitizeObj(config);\n\n // Only include configurable keys that are not reserved and\n // not starting with \"__pregel_\" prefix\n const newConfigurable = Object.fromEntries(\n Object.entries(sanitizedConfig.configurable ?? {}).filter(\n ([k]) => !reservedConfigurableKeys.has(k) && !k.startsWith(\"__pregel_\")\n )\n );\n\n return {\n tags: sanitizedConfig.tags ?? [],\n metadata: sanitizedConfig.metadata ?? {},\n configurable: newConfigurable,\n recursion_limit: sanitizedConfig.recursionLimit,\n };\n }\n\n /**\n * Prepare config and thread ID for remote run API calls.\n *\n * `thread_id` is passed via the URL path, not in `config.configurable`, so the\n * server can accept a separate `context` payload for stateful runs.\n */\n #prepareRunRequest(mergedConfig: LangGraphRunnableConfig): {\n threadId: string | undefined;\n context: unknown;\n config: ReturnType<RemoteGraph[\"_sanitizeConfig\"]>;\n } {\n const context = mergedConfig.context;\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id as string | undefined;\n delete configurable.thread_id;\n\n return {\n threadId,\n context,\n config: {\n ...sanitizedConfig,\n configurable,\n },\n };\n }\n\n protected _getConfig(checkpoint: Record<string, unknown>): RunnableConfig {\n return {\n configurable: {\n thread_id: checkpoint.thread_id,\n checkpoint_ns: checkpoint.checkpoint_ns,\n checkpoint_id: checkpoint.checkpoint_id,\n checkpoint_map: checkpoint.checkpoint_map ?? {},\n },\n };\n }\n\n protected _checkpointToConfig(\n checkpoint?: Partial<Checkpoint> | null,\n fallbackConfig?: RunnableConfig\n ): RunnableConfig {\n const resolvedCheckpoint =\n checkpoint ?? this._getCheckpoint(fallbackConfig);\n if (resolvedCheckpoint == null) {\n return { configurable: {} };\n }\n\n const configurable: Record<string, unknown> = {};\n if (resolvedCheckpoint.thread_id !== undefined) {\n configurable.thread_id = resolvedCheckpoint.thread_id;\n }\n if (resolvedCheckpoint.checkpoint_ns !== undefined) {\n configurable.checkpoint_ns = resolvedCheckpoint.checkpoint_ns;\n }\n if (resolvedCheckpoint.checkpoint_id !== undefined) {\n configurable.checkpoint_id = resolvedCheckpoint.checkpoint_id;\n }\n\n const hasCheckpointFields =\n resolvedCheckpoint.checkpoint_ns !== undefined ||\n resolvedCheckpoint.checkpoint_id !== undefined ||\n resolvedCheckpoint.checkpoint_map !== undefined;\n if (hasCheckpointFields) {\n configurable.checkpoint_map = resolvedCheckpoint.checkpoint_map ?? {};\n }\n\n return { configurable };\n }\n\n protected _getCheckpoint(config?: RunnableConfig): Checkpoint | undefined {\n if (config?.configurable === undefined) {\n return undefined;\n }\n\n const checkpointKeys = [\n \"thread_id\",\n \"checkpoint_ns\",\n \"checkpoint_id\",\n \"checkpoint_map\",\n ] as const;\n\n const checkpoint = Object.fromEntries(\n checkpointKeys\n .map((key) => [key, config.configurable![key]])\n .filter(([_, value]) => value !== undefined)\n );\n\n return Object.keys(checkpoint).length > 0 ? checkpoint : undefined;\n }\n\n protected _createStateSnapshot(\n state: ThreadState,\n fallbackConfig?: RunnableConfig\n ): StateSnapshot {\n const tasks: PregelTaskDescription[] = state.tasks.map((task) => {\n return {\n id: task.id,\n name: task.name,\n error: task.error ? { message: task.error } : undefined,\n // TODO: remove in LangGraph.js 0.4\n interrupts: task.interrupts.map(({ id, ...rest }) => ({\n interrupt_id: id,\n ...rest,\n })),\n // eslint-disable-next-line no-nested-ternary\n state: task.state\n ? this._createStateSnapshot(\n task.state,\n task.checkpoint\n ? this._checkpointToConfig(task.checkpoint)\n : fallbackConfig\n )\n : task.checkpoint\n ? { configurable: task.checkpoint }\n : undefined,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result: (task as any).result,\n };\n });\n\n return {\n values: state.values,\n next: state.next ? [...state.next] : [],\n // TODO: Fix SDK typing. `ThreadState.checkpoint` is typed as non-null,\n // but deployments can return `null` (e.g. a thread that exists but has\n // not produced a checkpoint yet). See #2328.\n config: this._checkpointToConfig(\n state.checkpoint as Checkpoint | null,\n fallbackConfig\n ),\n metadata: state.metadata\n ? (state.metadata as CheckpointMetadata)\n : undefined,\n createdAt: state.created_at ?? undefined,\n parentConfig: state.parent_checkpoint\n ? this._checkpointToConfig(state.parent_checkpoint)\n : undefined,\n tasks,\n };\n }\n\n override async invoke(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): Promise<PregelOutputType> {\n let lastValue;\n const stream = await this.stream(input, {\n ...options,\n streamMode: \"values\",\n });\n for await (const chunk of stream) {\n lastValue = chunk;\n }\n return lastValue;\n }\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding: \"text/event-stream\";\n }\n ): Promise<IterableReadableStream<Uint8Array>>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: undefined;\n }\n ): Promise<RemoteGraphRunStream<PregelOutputType>>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<StreamEvent>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\";\n encoding: \"text/event-stream\";\n },\n streamOptions?: StreamEventsOptions\n ): IterableReadableStream<Uint8Array>;\n\n override streamEvents(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v1\" | \"v2\" | \"v3\";\n encoding?: \"text/event-stream\";\n },\n _streamOptions?: StreamEventsOptions\n ):\n | IterableReadableStream<StreamEvent | Uint8Array>\n | Promise<RemoteGraphRunStream<PregelOutputType>>\n | Promise<IterableReadableStream<Uint8Array>>\n | Promise<\n | RemoteGraphRunStream<PregelOutputType>\n | IterableReadableStream<Uint8Array>\n > {\n if (options.version === \"v3\") {\n return this._streamEventsV3(\n input,\n options as Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: \"text/event-stream\";\n }\n );\n }\n throw new Error(\"Not implemented.\");\n }\n\n protected _rejectV3Unsupported(\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transformers?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control?: any;\n }\n ) {\n if (options.transformers !== undefined) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `transformers`.'\n );\n }\n if (options.control !== undefined) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `control`.'\n );\n }\n if (\n options.interruptBefore !== undefined ||\n this.interruptBefore !== undefined\n ) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptBefore`.'\n );\n }\n if (\n options.interruptAfter !== undefined ||\n this.interruptAfter !== undefined\n ) {\n throw new Error(\n 'RemoteGraph.streamEvents({ version: \"v3\" }) does not support `interruptAfter`.'\n );\n }\n }\n\n protected async _streamEventsV3(\n input: PregelInputType,\n options: Partial<PregelOptions<Nn, Cc, ContextType>> & {\n version: \"v3\";\n encoding?: \"text/event-stream\";\n }\n ): Promise<\n RemoteGraphRunStream<PregelOutputType> | IterableReadableStream<Uint8Array>\n > {\n this._rejectV3Unsupported(options);\n\n const abortController = new AbortController();\n const mergedConfig = mergeConfigs(this.config, options);\n const sanitizedConfig = this._sanitizeConfig(mergedConfig);\n const configurable = { ...sanitizedConfig.configurable };\n const threadId = configurable.thread_id;\n delete configurable.thread_id;\n\n const runConfig = {\n ...sanitizedConfig,\n configurable,\n };\n\n const thread =\n typeof threadId === \"string\"\n ? this.client.threads.stream(threadId, { assistantId: this.graphId })\n : this.client.threads.stream({ assistantId: this.graphId });\n\n let serializedInput;\n if (isCommand(input)) {\n serializedInput = input.toJSON() as Record<string, unknown>;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const run = await thread.run.start({\n input: serializedInput,\n config: runConfig,\n });\n\n const graphRun = new RemoteGraphRunStream<PregelOutputType>({\n client: this.client,\n thread,\n runId: run.run_id,\n abortController,\n });\n\n if (mergedConfig.signal != null) {\n if (mergedConfig.signal.aborted) {\n graphRun.abort(mergedConfig.signal.reason);\n } else {\n mergedConfig.signal.addEventListener(\n \"abort\",\n () => graphRun.abort(mergedConfig.signal?.reason),\n { once: true }\n );\n }\n }\n\n if (options.encoding === \"text/event-stream\") {\n const encodingAbortController = new AbortController();\n encodingAbortController.signal.addEventListener(\n \"abort\",\n () => graphRun.abort(encodingAbortController.signal.reason),\n { once: true }\n );\n return new IterableReadableStreamWithAbortSignal(\n protocolEventsToEventStream(graphRun),\n encodingAbortController\n );\n }\n\n return graphRun;\n }\n\n override async *_streamIterator(\n input: PregelInputType,\n options?: Partial<PregelOptions<Nn, Cc, ContextType>>\n ): AsyncGenerator<PregelOutputType> {\n const mergedConfig = mergeConfigs(\n this.config,\n options\n ) as LangGraphRunnableConfig;\n const {\n threadId,\n context,\n config: sanitizedConfig,\n } = this.#prepareRunRequest(mergedConfig);\n\n const streamProtocolInstance = options?.configurable?.[CONFIG_KEY_STREAM];\n\n const streamSubgraphs =\n options?.subgraphs ?? streamProtocolInstance !== undefined;\n\n const interruptBefore = options?.interruptBefore ?? this.interruptBefore;\n const interruptAfter = options?.interruptAfter ?? this.interruptAfter;\n\n const { updatedStreamModes, reqSingle, reqUpdates } = getStreamModes(\n options?.streamMode\n );\n\n const extendedStreamModes = [\n ...new Set([\n ...updatedStreamModes,\n ...(streamProtocolInstance?.modes ?? new Set()),\n ]),\n ].map((mode) => {\n if (mode === \"messages\") return \"messages-tuple\";\n return mode;\n });\n\n let command;\n let serializedInput;\n if (isCommand(input)) {\n // TODO: Remove cast when SDK type fix gets merged\n command = input.toJSON() as Record<string, unknown>;\n serializedInput = undefined;\n } else {\n serializedInput = _serializeInputs(input);\n }\n\n const streamPayload = {\n command,\n input: serializedInput,\n config: sanitizedConfig,\n context,\n streamMode: extendedStreamModes,\n interruptBefore: interruptBefore as string[],\n interruptAfter: interruptAfter as string[],\n streamSubgraphs,\n ifNotExists: \"create\" as const,\n signal: mergedConfig.signal,\n streamResumable: this.streamResumable,\n };\n\n const runStream =\n threadId != null\n ? this.client.runs.stream(threadId, this.graphId, streamPayload)\n : this.client.runs.stream(null, this.graphId, streamPayload);\n\n for await (const chunk of runStream) {\n let mode;\n let namespace: string[];\n if (chunk.event.includes(CHECKPOINT_NAMESPACE_SEPARATOR)) {\n const eventComponents = chunk.event.split(\n CHECKPOINT_NAMESPACE_SEPARATOR\n );\n // eslint-disable-next-line prefer-destructuring\n mode = eventComponents[0];\n namespace = eventComponents.slice(1);\n } else {\n mode = chunk.event;\n namespace = [];\n }\n const callerNamespace = options?.configurable?.checkpoint_ns;\n if (typeof callerNamespace === \"string\") {\n namespace = callerNamespace\n .split(CHECKPOINT_NAMESPACE_SEPARATOR)\n .concat(namespace);\n }\n if (\n streamProtocolInstance !== undefined &&\n streamProtocolInstance.modes?.has(chunk.event)\n ) {\n streamProtocolInstance.push([namespace, mode, chunk.data]);\n }\n if (chunk.event.startsWith(\"updates\")) {\n if (\n typeof chunk.data === \"object\" &&\n chunk.data?.[INTERRUPT] !== undefined\n ) {\n throw new GraphInterrupt(chunk.data[INTERRUPT]);\n }\n if (!reqUpdates) {\n continue;\n }\n } else if (chunk.event?.startsWith(\"error\")) {\n throw new RemoteException(\n typeof chunk.data === \"string\"\n ? chunk.data\n : JSON.stringify(chunk.data)\n );\n }\n if (\n !updatedStreamModes.includes(\n chunk.event.split(CHECKPOINT_NAMESPACE_SEPARATOR)[0] as StreamMode\n )\n ) {\n continue;\n }\n if (options?.subgraphs) {\n if (reqSingle) {\n yield [namespace, chunk.data];\n } else {\n yield [namespace, mode, chunk.data];\n }\n } else if (reqSingle) {\n yield chunk.data;\n } else {\n yield [mode, chunk.data];\n }\n }\n }\n\n async updateState(\n inputConfig: LangGraphRunnableConfig,\n values: Record<string, unknown>,\n asNode?: string\n ): Promise<RunnableConfig> {\n const mergedConfig = mergeConfigs(this.config, inputConfig);\n const response = await this.client.threads.updateState(\n mergedConfig.configurable?.thread_id,\n { values, asNode, checkpoint: this._getCheckpoint(mergedConfig) }\n );\n // TODO: Fix SDK typing\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this._getConfig((response as any).checkpoint);\n }\n\n async *getStateHistory(\n config: RunnableConfig,\n options?: CheckpointListOptions\n ): AsyncIterableIterator<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n const states = await this.client.threads.getHistory(\n mergedConfig.configurable?.thread_id,\n {\n limit: options?.limit ?? 10,\n // TODO: Fix type\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n before: this._getCheckpoint(options?.before) as any,\n metadata: options?.filter,\n checkpoint: this._getCheckpoint(mergedConfig),\n }\n );\n for (const state of states) {\n yield this._createStateSnapshot(state, mergedConfig);\n }\n }\n\n protected _getDrawableNodes(\n nodes: Array<{\n id: string | number;\n name?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: Record<string, any> | string;\n metadata?: unknown;\n }>\n ): Record<string, DrawableNode> {\n const nodesMap: Record<string, DrawableNode> = {};\n for (const node of nodes) {\n const nodeId = node.id;\n nodesMap[nodeId] = {\n id: nodeId.toString(),\n name:\n typeof node.data === \"string\" ? node.data : (node.data?.name ?? \"\"),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data: (node.data as any) ?? {},\n metadata:\n typeof node.data !== \"string\" ? (node.data?.metadata ?? {}) : {},\n };\n }\n return nodesMap;\n }\n\n async getState(\n config: RunnableConfig,\n options?: { subgraphs?: boolean }\n ): Promise<StateSnapshot> {\n const mergedConfig = mergeConfigs(this.config, config);\n\n const state = await this.client.threads.getState(\n mergedConfig.configurable?.thread_id,\n this._getCheckpoint(mergedConfig),\n options\n );\n return this._createStateSnapshot(state, mergedConfig);\n }\n\n /** @deprecated Use getGraphAsync instead. The async method will become the default in the next minor release. */\n override getGraph(\n _?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n throw new Error(\n `The synchronous \"getGraph\" is not supported for this graph. Call \"getGraphAsync\" instead.`\n );\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n async getGraphAsync(config?: RunnableConfig & { xray?: boolean | number }) {\n const graph = await this.client.assistants.getGraph(this.graphId, {\n xray: config?.xray,\n });\n return new DrawableGraph({\n nodes: this._getDrawableNodes(graph.nodes),\n edges: graph.edges,\n });\n }\n\n /** @deprecated Use getSubgraphsAsync instead. The async method will become the default in the next minor release. */\n getSubgraphs(): Generator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n throw new Error(\n `The synchronous \"getSubgraphs\" method is not supported for this graph. Call \"getSubgraphsAsync\" instead.`\n );\n }\n\n async *getSubgraphsAsync(\n namespace?: string,\n recurse = false\n ): AsyncGenerator<[string, PregelInterface<Nn, Cc, ContextType>]> {\n const subgraphs = await this.client.assistants.getSubgraphs(this.graphId, {\n namespace,\n recurse,\n });\n\n for (const [ns, graphSchema] of Object.entries(subgraphs)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const remoteSubgraph = new (this.constructor as any)({\n ...this,\n graphId: graphSchema.graph_id,\n });\n yield [ns, remoteSubgraph];\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ require("../constants.cjs");
2
+ //#region src/pregel/replay.ts
3
+ /**
4
+ * Tracks subgraph checkpoint loading during parent-graph time travel.
5
+ *
6
+ * When a parent replays from a historical checkpoint, nested subgraphs must
7
+ * load the checkpoint that existed *before* the replay point on their first
8
+ * visit, then fall back to normal latest-checkpoint loading on later visits
9
+ * within the same run.
10
+ */
11
+ var ReplayState = class {
12
+ /** Parent checkpoint ID used as the `before` cursor for subgraph lookups. */
13
+ checkpointId;
14
+ #visitedNs = /* @__PURE__ */ new Set();
15
+ /**
16
+ * @param checkpointId - Checkpoint ID from the parent graph at the replay point.
17
+ */
18
+ constructor(checkpointId) {
19
+ this.checkpointId = checkpointId;
20
+ }
21
+ /**
22
+ * Whether this is the first visit to a logical subgraph namespace in the run.
23
+ *
24
+ * Task-id suffixes are stripped so the same subgraph invoked across loop
25
+ * iterations shares one visit record.
26
+ *
27
+ * @param checkpointNs - Subgraph checkpoint namespace.
28
+ */
29
+ #isFirstVisit(checkpointNs) {
30
+ const stableNs = checkpointNs.includes(":") ? checkpointNs.slice(0, checkpointNs.lastIndexOf(":")) : checkpointNs;
31
+ if (this.#visitedNs.has(stableNs)) return false;
32
+ this.#visitedNs.add(stableNs);
33
+ return true;
34
+ }
35
+ /**
36
+ * Load the checkpoint tuple for a subgraph namespace during replay.
37
+ *
38
+ * On the first visit to `checkpointNs`, returns the latest checkpoint saved
39
+ * before {@link ReplayState.checkpointId}. On subsequent visits, delegates to
40
+ * `checkpointer.getTuple` for the current config.
41
+ *
42
+ * @param checkpointNs - Subgraph checkpoint namespace.
43
+ * @param checkpointer - Checkpointer shared with the parent graph.
44
+ * @param checkpointConfig - Runnable config for the subgraph lookup.
45
+ * @returns The resolved checkpoint tuple, if any.
46
+ */
47
+ async getCheckpoint(checkpointNs, checkpointer, checkpointConfig) {
48
+ if (this.#isFirstVisit(checkpointNs)) {
49
+ const results = [];
50
+ for await (const saved of checkpointer.list(checkpointConfig, {
51
+ before: { configurable: { checkpoint_id: this.checkpointId } },
52
+ limit: 1
53
+ })) results.push(saved);
54
+ return results.length > 0 ? results[0] : void 0;
55
+ }
56
+ return await checkpointer.getTuple(checkpointConfig) ?? void 0;
57
+ }
58
+ };
59
+ //#endregion
60
+ exports.ReplayState = ReplayState;
61
+
62
+ //# sourceMappingURL=replay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.cjs","names":["#visitedNs","#isFirstVisit"],"sources":["../../src/pregel/replay.ts"],"sourcesContent":["import type {\n BaseCheckpointSaver,\n CheckpointTuple,\n} from \"@langchain/langgraph-checkpoint\";\nimport type { RunnableConfig } from \"@langchain/core/runnables\";\nimport { CHECKPOINT_NAMESPACE_END } from \"../constants.js\";\n\n/**\n * Tracks subgraph checkpoint loading during parent-graph time travel.\n *\n * When a parent replays from a historical checkpoint, nested subgraphs must\n * load the checkpoint that existed *before* the replay point on their first\n * visit, then fall back to normal latest-checkpoint loading on later visits\n * within the same run.\n */\nexport class ReplayState {\n /** Parent checkpoint ID used as the `before` cursor for subgraph lookups. */\n checkpointId: string;\n\n #visitedNs: Set<string> = new Set();\n\n /**\n * @param checkpointId - Checkpoint ID from the parent graph at the replay point.\n */\n constructor(checkpointId: string) {\n this.checkpointId = checkpointId;\n }\n\n /**\n * Whether this is the first visit to a logical subgraph namespace in the run.\n *\n * Task-id suffixes are stripped so the same subgraph invoked across loop\n * iterations shares one visit record.\n *\n * @param checkpointNs - Subgraph checkpoint namespace.\n */\n #isFirstVisit(checkpointNs: string): boolean {\n const stableNs = checkpointNs.includes(CHECKPOINT_NAMESPACE_END)\n ? checkpointNs.slice(\n 0,\n checkpointNs.lastIndexOf(CHECKPOINT_NAMESPACE_END)\n )\n : checkpointNs;\n if (this.#visitedNs.has(stableNs)) {\n return false;\n }\n this.#visitedNs.add(stableNs);\n return true;\n }\n\n /**\n * Load the checkpoint tuple for a subgraph namespace during replay.\n *\n * On the first visit to `checkpointNs`, returns the latest checkpoint saved\n * before {@link ReplayState.checkpointId}. On subsequent visits, delegates to\n * `checkpointer.getTuple` for the current config.\n *\n * @param checkpointNs - Subgraph checkpoint namespace.\n * @param checkpointer - Checkpointer shared with the parent graph.\n * @param checkpointConfig - Runnable config for the subgraph lookup.\n * @returns The resolved checkpoint tuple, if any.\n */\n async getCheckpoint(\n checkpointNs: string,\n checkpointer: BaseCheckpointSaver,\n checkpointConfig: RunnableConfig\n ): Promise<CheckpointTuple | undefined> {\n if (this.#isFirstVisit(checkpointNs)) {\n const results: CheckpointTuple[] = [];\n for await (const saved of checkpointer.list(checkpointConfig, {\n before: {\n configurable: { checkpoint_id: this.checkpointId },\n },\n limit: 1,\n })) {\n results.push(saved);\n }\n return results.length > 0 ? results[0] : undefined;\n }\n return (await checkpointer.getTuple(checkpointConfig)) ?? undefined;\n }\n}\n"],"mappings":";;;;;;;;;;AAeA,IAAa,cAAb,MAAyB;;CAEvB;CAEA,6BAA0B,IAAI,KAAK;;;;CAKnC,YAAY,cAAsB;AAChC,OAAK,eAAe;;;;;;;;;;CAWtB,cAAc,cAA+B;EAC3C,MAAM,WAAW,aAAa,SAAA,IAAkC,GAC5D,aAAa,MACX,GACA,aAAa,YAAA,IAAqC,CACnD,GACD;AACJ,MAAI,MAAA,UAAgB,IAAI,SAAS,CAC/B,QAAO;AAET,QAAA,UAAgB,IAAI,SAAS;AAC7B,SAAO;;;;;;;;;;;;;;CAeT,MAAM,cACJ,cACA,cACA,kBACsC;AACtC,MAAI,MAAA,aAAmB,aAAa,EAAE;GACpC,MAAM,UAA6B,EAAE;AACrC,cAAW,MAAM,SAAS,aAAa,KAAK,kBAAkB;IAC5D,QAAQ,EACN,cAAc,EAAE,eAAe,KAAK,cAAc,EACnD;IACD,OAAO;IACR,CAAC,CACA,SAAQ,KAAK,MAAM;AAErB,UAAO,QAAQ,SAAS,IAAI,QAAQ,KAAK,KAAA;;AAE3C,SAAQ,MAAM,aAAa,SAAS,iBAAiB,IAAK,KAAA"}