@langchain/langgraph 1.1.5 → 1.2.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 (128) hide show
  1. package/dist/channels/binop.cjs +13 -2
  2. package/dist/channels/binop.cjs.map +1 -1
  3. package/dist/channels/binop.d.cts +4 -2
  4. package/dist/channels/binop.d.cts.map +1 -1
  5. package/dist/channels/binop.d.ts +4 -2
  6. package/dist/channels/binop.d.ts.map +1 -1
  7. package/dist/channels/binop.js +14 -3
  8. package/dist/channels/binop.js.map +1 -1
  9. package/dist/constants.cjs +78 -0
  10. package/dist/constants.cjs.map +1 -1
  11. package/dist/constants.d.cts +49 -1
  12. package/dist/constants.d.cts.map +1 -1
  13. package/dist/constants.d.ts +49 -1
  14. package/dist/constants.d.ts.map +1 -1
  15. package/dist/constants.js +76 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/func/index.cjs +1 -1
  18. package/dist/func/index.d.cts +1 -1
  19. package/dist/func/index.d.ts +1 -1
  20. package/dist/func/index.js +1 -1
  21. package/dist/graph/annotation.cjs.map +1 -1
  22. package/dist/graph/annotation.d.cts +3 -2
  23. package/dist/graph/annotation.d.cts.map +1 -1
  24. package/dist/graph/annotation.d.ts +3 -2
  25. package/dist/graph/annotation.d.ts.map +1 -1
  26. package/dist/graph/annotation.js.map +1 -1
  27. package/dist/graph/graph.cjs +3 -6
  28. package/dist/graph/graph.cjs.map +1 -1
  29. package/dist/graph/graph.d.cts +2 -2
  30. package/dist/graph/graph.d.cts.map +1 -1
  31. package/dist/graph/graph.d.ts +2 -2
  32. package/dist/graph/graph.d.ts.map +1 -1
  33. package/dist/graph/graph.js +3 -6
  34. package/dist/graph/graph.js.map +1 -1
  35. package/dist/graph/index.cjs +1 -1
  36. package/dist/graph/index.d.ts +1 -1
  37. package/dist/graph/index.js +1 -1
  38. package/dist/graph/messages_annotation.d.cts +3 -2
  39. package/dist/graph/messages_annotation.d.cts.map +1 -1
  40. package/dist/graph/messages_annotation.d.ts +3 -2
  41. package/dist/graph/messages_annotation.d.ts.map +1 -1
  42. package/dist/graph/state.cjs +1 -1
  43. package/dist/graph/state.d.cts +1 -1
  44. package/dist/graph/state.d.ts +1 -1
  45. package/dist/graph/state.js +1 -1
  46. package/dist/graph/types.cjs +1 -1
  47. package/dist/graph/types.d.cts +1 -1
  48. package/dist/graph/types.d.ts +1 -1
  49. package/dist/graph/types.js +1 -1
  50. package/dist/graph/zod/meta.cjs.map +1 -1
  51. package/dist/graph/zod/meta.d.cts +3 -2
  52. package/dist/graph/zod/meta.d.cts.map +1 -1
  53. package/dist/graph/zod/meta.d.ts +3 -2
  54. package/dist/graph/zod/meta.d.ts.map +1 -1
  55. package/dist/graph/zod/meta.js.map +1 -1
  56. package/dist/index.cjs +2 -1
  57. package/dist/index.d.cts +2 -2
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.js +2 -2
  60. package/dist/interrupt.cjs +1 -1
  61. package/dist/interrupt.js +1 -1
  62. package/dist/prebuilt/react_agent_executor.cjs +1 -1
  63. package/dist/prebuilt/react_agent_executor.d.cts +5 -5
  64. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -1
  65. package/dist/prebuilt/react_agent_executor.d.ts +5 -5
  66. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -1
  67. package/dist/prebuilt/react_agent_executor.js +1 -1
  68. package/dist/prebuilt/tool_node.cjs +1 -1
  69. package/dist/prebuilt/tool_node.d.cts +1 -1
  70. package/dist/prebuilt/tool_node.d.ts +1 -1
  71. package/dist/prebuilt/tool_node.js +1 -1
  72. package/dist/pregel/algo.cjs +1 -1
  73. package/dist/pregel/algo.d.ts +1 -1
  74. package/dist/pregel/algo.js +1 -1
  75. package/dist/pregel/index.cjs +13 -1
  76. package/dist/pregel/index.cjs.map +1 -1
  77. package/dist/pregel/index.d.cts +2 -1
  78. package/dist/pregel/index.d.cts.map +1 -1
  79. package/dist/pregel/index.d.ts +2 -1
  80. package/dist/pregel/index.d.ts.map +1 -1
  81. package/dist/pregel/index.js +14 -2
  82. package/dist/pregel/index.js.map +1 -1
  83. package/dist/pregel/io.cjs +1 -1
  84. package/dist/pregel/io.js +1 -1
  85. package/dist/pregel/loop.cjs +1 -1
  86. package/dist/pregel/loop.js +1 -1
  87. package/dist/pregel/read.cjs +4 -1
  88. package/dist/pregel/read.cjs.map +1 -1
  89. package/dist/pregel/read.d.cts.map +1 -1
  90. package/dist/pregel/read.d.ts.map +1 -1
  91. package/dist/pregel/read.js +4 -1
  92. package/dist/pregel/read.js.map +1 -1
  93. package/dist/pregel/remote.cjs +1 -1
  94. package/dist/pregel/remote.js +1 -1
  95. package/dist/pregel/retry.cjs +1 -1
  96. package/dist/pregel/retry.js +1 -1
  97. package/dist/pregel/runner.cjs +1 -1
  98. package/dist/pregel/runner.js +1 -1
  99. package/dist/pregel/stream.cjs +81 -0
  100. package/dist/pregel/stream.cjs.map +1 -1
  101. package/dist/pregel/stream.d.ts +2 -1
  102. package/dist/pregel/stream.js +81 -1
  103. package/dist/pregel/stream.js.map +1 -1
  104. package/dist/pregel/types.cjs.map +1 -1
  105. package/dist/pregel/types.d.cts +27 -2
  106. package/dist/pregel/types.d.cts.map +1 -1
  107. package/dist/pregel/types.d.ts +27 -2
  108. package/dist/pregel/types.d.ts.map +1 -1
  109. package/dist/pregel/types.js.map +1 -1
  110. package/dist/pregel/write.cjs +2 -1
  111. package/dist/pregel/write.cjs.map +1 -1
  112. package/dist/pregel/write.d.cts +1 -1
  113. package/dist/pregel/write.d.cts.map +1 -1
  114. package/dist/pregel/write.d.ts +1 -1
  115. package/dist/pregel/write.d.ts.map +1 -1
  116. package/dist/pregel/write.js +2 -1
  117. package/dist/pregel/write.js.map +1 -1
  118. package/dist/state/schema.cjs.map +1 -1
  119. package/dist/state/schema.d.cts +3 -2
  120. package/dist/state/schema.d.cts.map +1 -1
  121. package/dist/state/schema.d.ts +3 -2
  122. package/dist/state/schema.d.ts.map +1 -1
  123. package/dist/state/schema.js.map +1 -1
  124. package/dist/web.cjs +2 -1
  125. package/dist/web.d.cts +2 -2
  126. package/dist/web.d.ts +2 -2
  127. package/dist/web.js +2 -2
  128. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../src/constants.ts"],"sourcesContent":["import { PendingWrite } from \"@langchain/langgraph-checkpoint\";\n\n/** Special reserved node name denoting the start of a graph. */\nexport const START = \"__start__\";\n/** Special reserved node name denoting the end of a graph. */\nexport const END = \"__end__\";\nexport const INPUT = \"__input__\";\nexport const COPY = \"__copy__\";\nexport const ERROR = \"__error__\";\n\n/** Special reserved cache namespaces */\nexport const CACHE_NS_WRITES = \"__pregel_ns_writes\";\n\nexport const CONFIG_KEY_SEND = \"__pregel_send\";\n/** config key containing function used to call a node (push task) */\nexport const CONFIG_KEY_CALL = \"__pregel_call\";\nexport const CONFIG_KEY_READ = \"__pregel_read\";\nexport const CONFIG_KEY_CHECKPOINTER = \"__pregel_checkpointer\";\nexport const CONFIG_KEY_RESUMING = \"__pregel_resuming\";\nexport const CONFIG_KEY_TASK_ID = \"__pregel_task_id\";\nexport const CONFIG_KEY_STREAM = \"__pregel_stream\";\nexport const CONFIG_KEY_RESUME_VALUE = \"__pregel_resume_value\";\nexport const CONFIG_KEY_RESUME_MAP = \"__pregel_resume_map\";\nexport const CONFIG_KEY_SCRATCHPAD = \"__pregel_scratchpad\";\n/** config key containing state from previous invocation of graph for the given thread */\nexport const CONFIG_KEY_PREVIOUS_STATE = \"__pregel_previous\";\nexport const CONFIG_KEY_DURABILITY = \"__pregel_durability\";\nexport const CONFIG_KEY_CHECKPOINT_ID = \"checkpoint_id\";\nexport const CONFIG_KEY_CHECKPOINT_NS = \"checkpoint_ns\";\n\nexport const CONFIG_KEY_NODE_FINISHED = \"__pregel_node_finished\";\n\n// this one is part of public API\nexport const CONFIG_KEY_CHECKPOINT_MAP = \"checkpoint_map\";\n\nexport const CONFIG_KEY_ABORT_SIGNALS = \"__pregel_abort_signals\";\n\n/** Special channel reserved for graph interrupts */\nexport const INTERRUPT = \"__interrupt__\";\n/** Special channel reserved for graph resume */\nexport const RESUME = \"__resume__\";\n/** Special channel reserved for cases when a task exits without any writes */\nexport const NO_WRITES = \"__no_writes__\";\n/** Special channel reserved for graph return */\nexport const RETURN = \"__return__\";\n/** Special channel reserved for graph previous state */\nexport const PREVIOUS = \"__previous__\";\nexport const RUNTIME_PLACEHOLDER = \"__pregel_runtime_placeholder__\";\nexport const RECURSION_LIMIT_DEFAULT = 25;\n\nexport const TAG_HIDDEN = \"langsmith:hidden\";\nexport const TAG_NOSTREAM = \"langsmith:nostream\";\nexport const SELF = \"__self__\";\n\nexport const TASKS = \"__pregel_tasks\";\nexport const PUSH = \"__pregel_push\";\nexport const PULL = \"__pregel_pull\";\n\nexport const TASK_NAMESPACE = \"6ba7b831-9dad-11d1-80b4-00c04fd430c8\";\nexport const NULL_TASK_ID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const RESERVED = [\n TAG_HIDDEN,\n INPUT,\n INTERRUPT,\n RESUME,\n ERROR,\n NO_WRITES,\n\n // reserved config.configurable keys\n CONFIG_KEY_SEND,\n CONFIG_KEY_READ,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_DURABILITY,\n CONFIG_KEY_STREAM,\n CONFIG_KEY_RESUMING,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_CALL,\n CONFIG_KEY_RESUME_VALUE,\n CONFIG_KEY_SCRATCHPAD,\n CONFIG_KEY_PREVIOUS_STATE,\n CONFIG_KEY_CHECKPOINT_MAP,\n CONFIG_KEY_CHECKPOINT_NS,\n CONFIG_KEY_CHECKPOINT_ID,\n];\n\nexport const CHECKPOINT_NAMESPACE_SEPARATOR = \"|\";\nexport const CHECKPOINT_NAMESPACE_END = \":\";\n\n/** @internal */\nconst COMMAND_SYMBOL = Symbol.for(\"langgraph.command\");\n\n/**\n * Instance of a {@link Command} class.\n *\n * This is used to avoid IntelliSense suggesting public fields\n * of {@link Command} class when a plain object is expected.\n *\n * @see {@link Command}\n * @internal\n */\nexport class CommandInstance<\n Resume = unknown,\n Update = Record<string, unknown>,\n Nodes extends string = string\n> {\n [COMMAND_SYMBOL]: CommandParams<Resume, Update, Nodes>;\n\n constructor(args: CommandParams<Resume, Update, Nodes>) {\n this[COMMAND_SYMBOL] = args;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface SendInterface<Node extends string = string, Args = any> {\n node: Node;\n args: Args;\n}\n\nexport function _isSendInterface(x: unknown): x is SendInterface {\n const operation = x as SendInterface;\n return (\n operation !== null &&\n operation !== undefined &&\n typeof operation.node === \"string\" &&\n operation.args !== undefined\n );\n}\n\n/**\n *\n * A message or packet to send to a specific node in the graph.\n *\n * The `Send` class is used within a `StateGraph`'s conditional edges to\n * dynamically invoke a node with a custom state at the next step.\n *\n * Importantly, the sent state can differ from the core graph's state,\n * allowing for flexible and dynamic workflow management.\n *\n * One such example is a \"map-reduce\" workflow where your graph invokes\n * the same node multiple times in parallel with different states,\n * before aggregating the results back into the main graph's state.\n *\n * @example\n * ```typescript\n * import { Annotation, Send, StateGraph } from \"@langchain/langgraph\";\n *\n * const ChainState = Annotation.Root({\n * subjects: Annotation<string[]>,\n * jokes: Annotation<string[]>({\n * reducer: (a, b) => a.concat(b),\n * }),\n * });\n *\n * const continueToJokes = async (state: typeof ChainState.State) => {\n * return state.subjects.map((subject) => {\n * return new Send(\"generate_joke\", { subjects: [subject] });\n * });\n * };\n *\n * const graph = new StateGraph(ChainState)\n * .addNode(\"generate_joke\", (state) => ({\n * jokes: [`Joke about ${state.subjects}`],\n * }))\n * .addConditionalEdges(\"__start__\", continueToJokes)\n * .addEdge(\"generate_joke\", \"__end__\")\n * .compile();\n *\n * const res = await graph.invoke({ subjects: [\"cats\", \"dogs\"] });\n * console.log(res);\n *\n * // Invoking with two subjects results in a generated joke for each\n * // { subjects: [\"cats\", \"dogs\"], jokes: [`Joke about cats`, `Joke about dogs`] }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Send<Node extends string = string, Args = any>\n implements SendInterface<Node, Args>\n{\n lg_name = \"Send\";\n\n public node: Node;\n\n public args: Args;\n\n constructor(node: Node, args: Args) {\n this.node = node;\n this.args = _deserializeCommandSendObjectGraph(args) as Args;\n }\n\n toJSON() {\n return { lg_name: this.lg_name, node: this.node, args: this.args };\n }\n}\n\nexport function _isSend(x: unknown): x is Send {\n // eslint-disable-next-line no-instanceof/no-instanceof\n return x instanceof Send;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Interrupt<Value = any> = {\n id?: string;\n value?: Value;\n};\n\n/**\n * Checks if the given graph invoke / stream chunk contains interrupt.\n *\n * @example\n * ```ts\n * import { INTERRUPT, isInterrupted } from \"@langchain/langgraph\";\n *\n * const values = await graph.invoke({ foo: \"bar\" });\n * if (isInterrupted<string>(values)) {\n * const interrupt = values[INTERRUPT][0].value;\n * }\n * ```\n *\n * @param values - The values to check.\n * @returns `true` if the values contain an interrupt, `false` otherwise.\n */\nexport function isInterrupted<Value = unknown>(\n values: unknown\n): values is { [INTERRUPT]: Interrupt<Value>[] } {\n if (!values || typeof values !== \"object\") return false;\n if (!(INTERRUPT in values)) return false;\n return Array.isArray(values[INTERRUPT]);\n}\n\nexport type CommandParams<\n Resume = unknown,\n Update = Record<string, unknown>,\n Nodes extends string = string\n> = {\n /**\n * A discriminator field used to identify the type of object. Must be populated when serializing.\n *\n * Optional because it's not required to specify this when directly constructing a {@link Command}\n * object.\n */\n lg_name?: \"Command\";\n\n /**\n * Value to resume execution with. To be used together with {@link interrupt}.\n */\n resume?: Resume;\n /**\n * Graph to send the command to. Supported values are:\n * - None: the current graph (default)\n * - The specific name of the graph to send the command to\n * - {@link Command.PARENT}: closest parent graph (only supported when returned from a node in a subgraph)\n */\n graph?: string;\n\n /**\n * Update to apply to the graph's state.\n */\n update?: Update | [string, unknown][];\n\n /**\n * Can be one of the following:\n * - name of the node to navigate to next (any node that belongs to the specified `graph`)\n * - sequence of node names to navigate to next\n * - `Send` object (to execute a node with the input provided)\n * - sequence of `Send` objects\n */\n goto?:\n | Nodes\n | SendInterface<Nodes> // eslint-disable-line @typescript-eslint/no-explicit-any\n | (Nodes | SendInterface<Nodes>)[]; // eslint-disable-line @typescript-eslint/no-explicit-any\n};\n\n/**\n * One or more commands to update the graph's state and send messages to nodes.\n * Can be used to combine routing logic with state updates in lieu of conditional edges\n *\n * @example\n * ```ts\n * import { Annotation, Command } from \"@langchain/langgraph\";\n *\n * // Define graph state\n * const StateAnnotation = Annotation.Root({\n * foo: Annotation<string>,\n * });\n *\n * // Define the nodes\n * const nodeA = async (_state: typeof StateAnnotation.State) => {\n * console.log(\"Called A\");\n * // this is a replacement for a real conditional edge function\n * const goto = Math.random() > .5 ? \"nodeB\" : \"nodeC\";\n * // note how Command allows you to BOTH update the graph state AND route to the next node\n * return new Command({\n * // this is the state update\n * update: {\n * foo: \"a\",\n * },\n * // this is a replacement for an edge\n * goto,\n * });\n * };\n *\n * // Nodes B and C are unchanged\n * const nodeB = async (state: typeof StateAnnotation.State) => {\n * console.log(\"Called B\");\n * return {\n * foo: state.foo + \"|b\",\n * };\n * }\n *\n * const nodeC = async (state: typeof StateAnnotation.State) => {\n * console.log(\"Called C\");\n * return {\n * foo: state.foo + \"|c\",\n * };\n * }\n * \n * import { StateGraph } from \"@langchain/langgraph\";\n\n * // NOTE: there are no edges between nodes A, B and C!\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(\"nodeA\", nodeA, {\n * ends: [\"nodeB\", \"nodeC\"],\n * })\n * .addNode(\"nodeB\", nodeB)\n * .addNode(\"nodeC\", nodeC)\n * .addEdge(\"__start__\", \"nodeA\")\n * .compile();\n * \n * await graph.invoke({ foo: \"\" });\n *\n * // Randomly oscillates between\n * // { foo: 'a|c' } and { foo: 'a|b' }\n * ```\n */\nexport class Command<\n Resume = unknown,\n Update extends Record<string, unknown> = Record<string, unknown>,\n Nodes extends string = string\n> extends CommandInstance<Resume, Update, Nodes> {\n readonly lg_name = \"Command\";\n\n lc_direct_tool_output = true;\n\n /**\n * Graph to send the command to. Supported values are:\n * - None: the current graph (default)\n * - The specific name of the graph to send the command to\n * - {@link Command.PARENT}: closest parent graph (only supported when returned from a node in a subgraph)\n */\n graph?: string;\n\n /**\n * Update to apply to the graph's state as a result of executing the node that is returning the command.\n * Written to the state as if the node had simply returned this value instead of the Command object.\n */\n update?: Update | [string, unknown][];\n\n /**\n * Value to resume execution with. To be used together with {@link interrupt}.\n */\n resume?: Resume;\n\n /**\n * Can be one of the following:\n * - name of the node to navigate to next (any node that belongs to the specified `graph`)\n * - sequence of node names to navigate to next\n * - {@link Send} object (to execute a node with the exact input provided in the {@link Send} object)\n * - sequence of {@link Send} objects\n */\n goto?: Nodes | Send<Nodes> | (Nodes | Send<Nodes>)[] = [];\n\n static PARENT = \"__parent__\";\n\n constructor(args: Omit<CommandParams<Resume, Update, Nodes>, \"lg_name\">) {\n super(args);\n this.resume = args.resume;\n this.graph = args.graph;\n this.update = args.update;\n if (args.goto) {\n type ValidArg = Nodes | Send<Nodes, Update>;\n\n this.goto = Array.isArray(args.goto)\n ? (_deserializeCommandSendObjectGraph(args.goto) as ValidArg[])\n : [_deserializeCommandSendObjectGraph(args.goto) as ValidArg];\n }\n }\n\n /**\n * Convert the update field to a list of {@link PendingWrite} tuples\n * @returns List of {@link PendingWrite} tuples of the form `[channelKey, value]`.\n * @internal\n */\n _updateAsTuples(): PendingWrite[] {\n if (\n this.update &&\n typeof this.update === \"object\" &&\n !Array.isArray(this.update)\n ) {\n return Object.entries(this.update);\n } else if (\n Array.isArray(this.update) &&\n this.update.every(\n (t): t is [string, unknown] =>\n Array.isArray(t) && t.length === 2 && typeof t[0] === \"string\"\n )\n ) {\n return this.update;\n } else {\n return [[\"__root__\", this.update]];\n }\n }\n\n toJSON() {\n let serializedGoto;\n if (typeof this.goto === \"string\") {\n serializedGoto = this.goto;\n } else if (_isSend(this.goto)) {\n serializedGoto = this.goto.toJSON();\n } else {\n serializedGoto = this.goto?.map((innerGoto) => {\n if (typeof innerGoto === \"string\") {\n return innerGoto;\n } else {\n return innerGoto.toJSON();\n }\n });\n }\n return {\n lg_name: this.lg_name,\n update: this.update,\n resume: this.resume,\n goto: serializedGoto,\n };\n }\n}\n\n/**\n * A type guard to check if the given value is a {@link Command}.\n *\n * Useful for type narrowing when working with the {@link Command} object.\n *\n * @param x - The value to check.\n * @returns `true` if the value is a {@link Command}, `false` otherwise.\n */\nexport function isCommand(x: unknown): x is Command {\n if (typeof x !== \"object\") {\n return false;\n }\n\n if (x === null || x === undefined) {\n return false;\n }\n\n if (\"lg_name\" in x && x.lg_name === \"Command\") {\n return true;\n }\n\n return false;\n}\n\n/**\n * Reconstructs Command and Send objects from a deeply nested tree of anonymous objects\n * matching their interfaces.\n *\n * This is only exported for testing purposes. It is NOT intended to be used outside of\n * the Command and Send classes.\n *\n * @internal\n *\n * @param x - The command send tree to convert.\n * @param seen - A map of seen objects to avoid infinite loops.\n * @returns The converted command send tree.\n */\nexport function _deserializeCommandSendObjectGraph(\n x: unknown,\n seen: Map<object, unknown> = new Map()\n): unknown {\n if (x !== undefined && x !== null && typeof x === \"object\") {\n // If we've already processed this object, return the transformed version\n if (seen.has(x)) {\n return seen.get(x);\n }\n\n let result: unknown;\n\n if (Array.isArray(x)) {\n // Create the array first, then populate it\n result = [];\n // Add to seen map before processing elements to handle self-references\n seen.set(x, result);\n\n // Now populate the array\n x.forEach((item, index) => {\n (result as unknown[])[index] = _deserializeCommandSendObjectGraph(\n item,\n seen\n );\n });\n // eslint-disable-next-line no-instanceof/no-instanceof\n } else if (isCommand(x) && !(x instanceof Command)) {\n result = new Command(x);\n seen.set(x, result);\n // eslint-disable-next-line no-instanceof/no-instanceof\n } else if (_isSendInterface(x) && !(x instanceof Send)) {\n result = new Send(x.node, x.args);\n seen.set(x, result);\n } else if (isCommand(x) || _isSend(x)) {\n result = x;\n seen.set(x, result);\n } else if (\"lc_serializable\" in x && x.lc_serializable) {\n result = x;\n seen.set(x, result);\n } else {\n // Create empty object first\n result = {};\n // Add to seen map before processing properties to handle self-references\n seen.set(x, result);\n\n // Now populate the object\n for (const [key, value] of Object.entries(x)) {\n (result as Record<string, unknown>)[key] =\n _deserializeCommandSendObjectGraph(value, seen);\n }\n }\n\n return result;\n }\n return x;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../src/constants.ts"],"sourcesContent":["import { PendingWrite } from \"@langchain/langgraph-checkpoint\";\n\n/** Special reserved node name denoting the start of a graph. */\nexport const START = \"__start__\";\n/** Special reserved node name denoting the end of a graph. */\nexport const END = \"__end__\";\nexport const INPUT = \"__input__\";\nexport const COPY = \"__copy__\";\nexport const ERROR = \"__error__\";\n\n/** Special reserved cache namespaces */\nexport const CACHE_NS_WRITES = \"__pregel_ns_writes\";\n\nexport const CONFIG_KEY_SEND = \"__pregel_send\";\n/** config key containing function used to call a node (push task) */\nexport const CONFIG_KEY_CALL = \"__pregel_call\";\nexport const CONFIG_KEY_READ = \"__pregel_read\";\nexport const CONFIG_KEY_CHECKPOINTER = \"__pregel_checkpointer\";\nexport const CONFIG_KEY_RESUMING = \"__pregel_resuming\";\nexport const CONFIG_KEY_TASK_ID = \"__pregel_task_id\";\nexport const CONFIG_KEY_STREAM = \"__pregel_stream\";\nexport const CONFIG_KEY_RESUME_VALUE = \"__pregel_resume_value\";\nexport const CONFIG_KEY_RESUME_MAP = \"__pregel_resume_map\";\nexport const CONFIG_KEY_SCRATCHPAD = \"__pregel_scratchpad\";\n/** config key containing state from previous invocation of graph for the given thread */\nexport const CONFIG_KEY_PREVIOUS_STATE = \"__pregel_previous\";\nexport const CONFIG_KEY_DURABILITY = \"__pregel_durability\";\nexport const CONFIG_KEY_CHECKPOINT_ID = \"checkpoint_id\";\nexport const CONFIG_KEY_CHECKPOINT_NS = \"checkpoint_ns\";\n\nexport const CONFIG_KEY_NODE_FINISHED = \"__pregel_node_finished\";\n\n// this one is part of public API\nexport const CONFIG_KEY_CHECKPOINT_MAP = \"checkpoint_map\";\n\nexport const CONFIG_KEY_ABORT_SIGNALS = \"__pregel_abort_signals\";\n\n/** Special channel reserved for graph interrupts */\nexport const INTERRUPT = \"__interrupt__\";\n/** Special channel reserved for graph resume */\nexport const RESUME = \"__resume__\";\n/** Special channel reserved for cases when a task exits without any writes */\nexport const NO_WRITES = \"__no_writes__\";\n/** Special channel reserved for graph return */\nexport const RETURN = \"__return__\";\n/** Special channel reserved for graph previous state */\nexport const PREVIOUS = \"__previous__\";\nexport const RUNTIME_PLACEHOLDER = \"__pregel_runtime_placeholder__\";\nexport const RECURSION_LIMIT_DEFAULT = 25;\n\nexport const TAG_HIDDEN = \"langsmith:hidden\";\nexport const TAG_NOSTREAM = \"langsmith:nostream\";\nexport const SELF = \"__self__\";\n\nexport const TASKS = \"__pregel_tasks\";\nexport const PUSH = \"__pregel_push\";\nexport const PULL = \"__pregel_pull\";\n\nexport const TASK_NAMESPACE = \"6ba7b831-9dad-11d1-80b4-00c04fd430c8\";\nexport const NULL_TASK_ID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const RESERVED = [\n TAG_HIDDEN,\n INPUT,\n INTERRUPT,\n RESUME,\n ERROR,\n NO_WRITES,\n\n // reserved config.configurable keys\n CONFIG_KEY_SEND,\n CONFIG_KEY_READ,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_DURABILITY,\n CONFIG_KEY_STREAM,\n CONFIG_KEY_RESUMING,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_CALL,\n CONFIG_KEY_RESUME_VALUE,\n CONFIG_KEY_SCRATCHPAD,\n CONFIG_KEY_PREVIOUS_STATE,\n CONFIG_KEY_CHECKPOINT_MAP,\n CONFIG_KEY_CHECKPOINT_NS,\n CONFIG_KEY_CHECKPOINT_ID,\n];\n\nexport const CHECKPOINT_NAMESPACE_SEPARATOR = \"|\";\nexport const CHECKPOINT_NAMESPACE_END = \":\";\n\n/** @internal */\nconst COMMAND_SYMBOL = Symbol.for(\"langgraph.command\");\n\n/**\n * Instance of a {@link Command} class.\n *\n * This is used to avoid IntelliSense suggesting public fields\n * of {@link Command} class when a plain object is expected.\n *\n * @see {@link Command}\n * @internal\n */\nexport class CommandInstance<\n Resume = unknown,\n Update = Record<string, unknown>,\n Nodes extends string = string\n> {\n [COMMAND_SYMBOL]: CommandParams<Resume, Update, Nodes>;\n\n constructor(args: CommandParams<Resume, Update, Nodes>) {\n this[COMMAND_SYMBOL] = args;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface SendInterface<Node extends string = string, Args = any> {\n node: Node;\n args: Args;\n}\n\nexport function _isSendInterface(x: unknown): x is SendInterface {\n const operation = x as SendInterface;\n return (\n operation !== null &&\n operation !== undefined &&\n typeof operation.node === \"string\" &&\n operation.args !== undefined\n );\n}\n\n/**\n *\n * A message or packet to send to a specific node in the graph.\n *\n * The `Send` class is used within a `StateGraph`'s conditional edges to\n * dynamically invoke a node with a custom state at the next step.\n *\n * Importantly, the sent state can differ from the core graph's state,\n * allowing for flexible and dynamic workflow management.\n *\n * One such example is a \"map-reduce\" workflow where your graph invokes\n * the same node multiple times in parallel with different states,\n * before aggregating the results back into the main graph's state.\n *\n * @example\n * ```typescript\n * import { Annotation, Send, StateGraph } from \"@langchain/langgraph\";\n *\n * const ChainState = Annotation.Root({\n * subjects: Annotation<string[]>,\n * jokes: Annotation<string[]>({\n * reducer: (a, b) => a.concat(b),\n * }),\n * });\n *\n * const continueToJokes = async (state: typeof ChainState.State) => {\n * return state.subjects.map((subject) => {\n * return new Send(\"generate_joke\", { subjects: [subject] });\n * });\n * };\n *\n * const graph = new StateGraph(ChainState)\n * .addNode(\"generate_joke\", (state) => ({\n * jokes: [`Joke about ${state.subjects}`],\n * }))\n * .addConditionalEdges(\"__start__\", continueToJokes)\n * .addEdge(\"generate_joke\", \"__end__\")\n * .compile();\n *\n * const res = await graph.invoke({ subjects: [\"cats\", \"dogs\"] });\n * console.log(res);\n *\n * // Invoking with two subjects results in a generated joke for each\n * // { subjects: [\"cats\", \"dogs\"], jokes: [`Joke about cats`, `Joke about dogs`] }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Send<Node extends string = string, Args = any>\n implements SendInterface<Node, Args>\n{\n lg_name = \"Send\";\n\n public node: Node;\n\n public args: Args;\n\n constructor(node: Node, args: Args) {\n this.node = node;\n this.args = _deserializeCommandSendObjectGraph(args) as Args;\n }\n\n toJSON() {\n return { lg_name: this.lg_name, node: this.node, args: this.args };\n }\n}\n\nexport function _isSend(x: unknown): x is Send {\n // eslint-disable-next-line no-instanceof/no-instanceof\n return x instanceof Send;\n}\n\nexport const OVERWRITE = \"__overwrite__\";\n\n/**\n * An object representing a direct overwrite of a value for a channel.\n * Used to signal that the channel value should be replaced with the given value,\n * bypassing any reducer or binary operator logic.\n *\n * @template ValueType - The type of the value being overwritten.\n * @property {ValueType} [OVERWRITE] - The value to directly set.\n *\n * @example\n * const overwriteObj: OverwriteValue<number> = { __overwrite__: 123 };\n */\nexport interface OverwriteValue<ValueType> {\n [OVERWRITE]: ValueType;\n}\n\n/**\n * Bypass a reducer and write the wrapped value directly to a\n * {@link BinaryOperatorAggregate} channel.\n *\n * Receiving multiple `Overwrite` values for the same channel in a single\n * super-step will raise an {@link InvalidUpdateError}.\n *\n * @example\n * ```typescript\n * import { Annotation, StateGraph, Overwrite } from \"@langchain/langgraph\";\n *\n * const State = Annotation.Root({\n * messages: Annotation<string[]>({\n * reducer: (a, b) => a.concat(b),\n * default: () => [],\n * }),\n * });\n *\n * const replaceMessages = (_state: typeof State.State) => {\n * return { messages: new Overwrite([\"replacement\"]) };\n * };\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Overwrite<ValueType = any> implements OverwriteValue<ValueType> {\n lg_name = \"Overwrite\";\n\n readonly [OVERWRITE]: ValueType;\n\n constructor(value: ValueType) {\n this[OVERWRITE] = value;\n }\n\n get value(): ValueType {\n return this[OVERWRITE];\n }\n\n toJSON() {\n return { [OVERWRITE]: this[OVERWRITE] };\n }\n\n static isInstance<ValueType>(value: unknown): value is Overwrite<ValueType> {\n if (!value || typeof value !== \"object\") return false;\n if (OVERWRITE in value) return true;\n if (\"lg_name\" in value && value.lg_name === \"Overwrite\") return true;\n return false;\n }\n}\n\n/**\n * Helper function to detect and extract the value from an Overwrite wrapper,\n * supporting both the Overwrite class instance and the serialized object format.\n *\n * Use to check if a provided value represents an Overwrite: returns the\n * unwrapped value if so, or undefined otherwise.\n *\n * - If the value is an Overwrite instance (preferred API), return its `.value`.\n * - If the value is a wire-format object ({ [OVERWRITE]: value }), extract it.\n * - Otherwise, returns undefined.\n *\n * @template ValueType - The expected type of the Overwrite value.\n * @param value - The value to check (may be anything).\n * @returns The unwrapped value if value is an Overwrite, or undefined otherwise.\n * @internal\n */\nexport function _getOverwriteValue<ValueType>(\n value: unknown\n): [true, ValueType] | [false, undefined] {\n if (typeof value === \"object\" && value !== null && OVERWRITE in value) {\n return [true, (value as Record<string, ValueType>)[OVERWRITE]];\n }\n return [false, undefined];\n}\n\n/**\n * Type guard to check if a value is an Overwrite value -- either the class\n * instance or the wire format object.\n *\n * @template ValueType - The expected type of the Overwrite value.\n * @param value - The value to check (may be anything).\n * @returns `true` if the value is an Overwrite value, `false` otherwise.\n * @internal\n */\nexport function _isOverwriteValue<ValueType>(\n value: unknown\n): value is OverwriteValue<ValueType> {\n return _getOverwriteValue<ValueType>(value)[0];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Interrupt<Value = any> = {\n id?: string;\n value?: Value;\n};\n\n/**\n * Checks if the given graph invoke / stream chunk contains interrupt.\n *\n * @example\n * ```ts\n * import { INTERRUPT, isInterrupted } from \"@langchain/langgraph\";\n *\n * const values = await graph.invoke({ foo: \"bar\" });\n * if (isInterrupted<string>(values)) {\n * const interrupt = values[INTERRUPT][0].value;\n * }\n * ```\n *\n * @param values - The values to check.\n * @returns `true` if the values contain an interrupt, `false` otherwise.\n */\nexport function isInterrupted<Value = unknown>(\n values: unknown\n): values is { [INTERRUPT]: Interrupt<Value>[] } {\n if (!values || typeof values !== \"object\") return false;\n if (!(INTERRUPT in values)) return false;\n return Array.isArray(values[INTERRUPT]);\n}\n\nexport type CommandParams<\n Resume = unknown,\n Update = Record<string, unknown>,\n Nodes extends string = string\n> = {\n /**\n * A discriminator field used to identify the type of object. Must be populated when serializing.\n *\n * Optional because it's not required to specify this when directly constructing a {@link Command}\n * object.\n */\n lg_name?: \"Command\";\n\n /**\n * Value to resume execution with. To be used together with {@link interrupt}.\n */\n resume?: Resume;\n /**\n * Graph to send the command to. Supported values are:\n * - None: the current graph (default)\n * - The specific name of the graph to send the command to\n * - {@link Command.PARENT}: closest parent graph (only supported when returned from a node in a subgraph)\n */\n graph?: string;\n\n /**\n * Update to apply to the graph's state.\n */\n update?: Update | [string, unknown][];\n\n /**\n * Can be one of the following:\n * - name of the node to navigate to next (any node that belongs to the specified `graph`)\n * - sequence of node names to navigate to next\n * - `Send` object (to execute a node with the input provided)\n * - sequence of `Send` objects\n */\n goto?:\n | Nodes\n | SendInterface<Nodes> // eslint-disable-line @typescript-eslint/no-explicit-any\n | (Nodes | SendInterface<Nodes>)[]; // eslint-disable-line @typescript-eslint/no-explicit-any\n};\n\n/**\n * One or more commands to update the graph's state and send messages to nodes.\n * Can be used to combine routing logic with state updates in lieu of conditional edges\n *\n * @example\n * ```ts\n * import { Annotation, Command } from \"@langchain/langgraph\";\n *\n * // Define graph state\n * const StateAnnotation = Annotation.Root({\n * foo: Annotation<string>,\n * });\n *\n * // Define the nodes\n * const nodeA = async (_state: typeof StateAnnotation.State) => {\n * console.log(\"Called A\");\n * // this is a replacement for a real conditional edge function\n * const goto = Math.random() > .5 ? \"nodeB\" : \"nodeC\";\n * // note how Command allows you to BOTH update the graph state AND route to the next node\n * return new Command({\n * // this is the state update\n * update: {\n * foo: \"a\",\n * },\n * // this is a replacement for an edge\n * goto,\n * });\n * };\n *\n * // Nodes B and C are unchanged\n * const nodeB = async (state: typeof StateAnnotation.State) => {\n * console.log(\"Called B\");\n * return {\n * foo: state.foo + \"|b\",\n * };\n * }\n *\n * const nodeC = async (state: typeof StateAnnotation.State) => {\n * console.log(\"Called C\");\n * return {\n * foo: state.foo + \"|c\",\n * };\n * }\n * \n * import { StateGraph } from \"@langchain/langgraph\";\n\n * // NOTE: there are no edges between nodes A, B and C!\n * const graph = new StateGraph(StateAnnotation)\n * .addNode(\"nodeA\", nodeA, {\n * ends: [\"nodeB\", \"nodeC\"],\n * })\n * .addNode(\"nodeB\", nodeB)\n * .addNode(\"nodeC\", nodeC)\n * .addEdge(\"__start__\", \"nodeA\")\n * .compile();\n * \n * await graph.invoke({ foo: \"\" });\n *\n * // Randomly oscillates between\n * // { foo: 'a|c' } and { foo: 'a|b' }\n * ```\n */\nexport class Command<\n Resume = unknown,\n Update extends Record<string, unknown> = Record<string, unknown>,\n Nodes extends string = string\n> extends CommandInstance<Resume, Update, Nodes> {\n readonly lg_name = \"Command\";\n\n lc_direct_tool_output = true;\n\n /**\n * Graph to send the command to. Supported values are:\n * - None: the current graph (default)\n * - The specific name of the graph to send the command to\n * - {@link Command.PARENT}: closest parent graph (only supported when returned from a node in a subgraph)\n */\n graph?: string;\n\n /**\n * Update to apply to the graph's state as a result of executing the node that is returning the command.\n * Written to the state as if the node had simply returned this value instead of the Command object.\n */\n update?: Update | [string, unknown][];\n\n /**\n * Value to resume execution with. To be used together with {@link interrupt}.\n */\n resume?: Resume;\n\n /**\n * Can be one of the following:\n * - name of the node to navigate to next (any node that belongs to the specified `graph`)\n * - sequence of node names to navigate to next\n * - {@link Send} object (to execute a node with the exact input provided in the {@link Send} object)\n * - sequence of {@link Send} objects\n */\n goto?: Nodes | Send<Nodes> | (Nodes | Send<Nodes>)[] = [];\n\n static PARENT = \"__parent__\";\n\n constructor(args: Omit<CommandParams<Resume, Update, Nodes>, \"lg_name\">) {\n super(args);\n this.resume = args.resume;\n this.graph = args.graph;\n this.update = args.update;\n if (args.goto) {\n type ValidArg = Nodes | Send<Nodes, Update>;\n\n this.goto = Array.isArray(args.goto)\n ? (_deserializeCommandSendObjectGraph(args.goto) as ValidArg[])\n : [_deserializeCommandSendObjectGraph(args.goto) as ValidArg];\n }\n }\n\n /**\n * Convert the update field to a list of {@link PendingWrite} tuples\n * @returns List of {@link PendingWrite} tuples of the form `[channelKey, value]`.\n * @internal\n */\n _updateAsTuples(): PendingWrite[] {\n if (\n this.update &&\n typeof this.update === \"object\" &&\n !Array.isArray(this.update)\n ) {\n return Object.entries(this.update);\n } else if (\n Array.isArray(this.update) &&\n this.update.every(\n (t): t is [string, unknown] =>\n Array.isArray(t) && t.length === 2 && typeof t[0] === \"string\"\n )\n ) {\n return this.update;\n } else {\n return [[\"__root__\", this.update]];\n }\n }\n\n toJSON() {\n let serializedGoto;\n if (typeof this.goto === \"string\") {\n serializedGoto = this.goto;\n } else if (_isSend(this.goto)) {\n serializedGoto = this.goto.toJSON();\n } else {\n serializedGoto = this.goto?.map((innerGoto) => {\n if (typeof innerGoto === \"string\") {\n return innerGoto;\n } else {\n return innerGoto.toJSON();\n }\n });\n }\n return {\n lg_name: this.lg_name,\n update: this.update,\n resume: this.resume,\n goto: serializedGoto,\n };\n }\n}\n\n/**\n * A type guard to check if the given value is a {@link Command}.\n *\n * Useful for type narrowing when working with the {@link Command} object.\n *\n * @param x - The value to check.\n * @returns `true` if the value is a {@link Command}, `false` otherwise.\n */\nexport function isCommand(x: unknown): x is Command {\n if (typeof x !== \"object\") {\n return false;\n }\n\n if (x === null || x === undefined) {\n return false;\n }\n\n if (\"lg_name\" in x && x.lg_name === \"Command\") {\n return true;\n }\n\n return false;\n}\n\n/**\n * Reconstructs Command and Send objects from a deeply nested tree of anonymous objects\n * matching their interfaces.\n *\n * This is only exported for testing purposes. It is NOT intended to be used outside of\n * the Command and Send classes.\n *\n * @internal\n *\n * @param x - The command send tree to convert.\n * @param seen - A map of seen objects to avoid infinite loops.\n * @returns The converted command send tree.\n */\nexport function _deserializeCommandSendObjectGraph(\n x: unknown,\n seen: Map<object, unknown> = new Map()\n): unknown {\n if (x !== undefined && x !== null && typeof x === \"object\") {\n // If we've already processed this object, return the transformed version\n if (seen.has(x)) {\n return seen.get(x);\n }\n\n let result: unknown;\n\n if (Array.isArray(x)) {\n // Create the array first, then populate it\n result = [];\n // Add to seen map before processing elements to handle self-references\n seen.set(x, result);\n\n // Now populate the array\n x.forEach((item, index) => {\n (result as unknown[])[index] = _deserializeCommandSendObjectGraph(\n item,\n seen\n );\n });\n // eslint-disable-next-line no-instanceof/no-instanceof\n } else if (isCommand(x) && !(x instanceof Command)) {\n result = new Command(x);\n seen.set(x, result);\n // eslint-disable-next-line no-instanceof/no-instanceof\n } else if (_isSendInterface(x) && !(x instanceof Send)) {\n result = new Send(x.node, x.args);\n seen.set(x, result);\n } else if (isCommand(x) || _isSend(x)) {\n result = x;\n seen.set(x, result);\n } else if (\"lc_serializable\" in x && x.lc_serializable) {\n result = x;\n seen.set(x, result);\n } else {\n // Create empty object first\n result = {};\n // Add to seen map before processing properties to handle self-references\n seen.set(x, result);\n\n // Now populate the object\n for (const [key, value] of Object.entries(x)) {\n (result as Record<string, unknown>)[key] =\n _deserializeCommandSendObjectGraph(value, seen);\n }\n }\n\n return result;\n }\n return x;\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- const require_last_value = require('../channels/last_value.cjs');
2
1
  const require_constants = require('../constants.cjs');
2
+ const require_last_value = require('../channels/last_value.cjs');
3
3
  const require_utils = require('../utils.cjs');
4
4
  const require_write = require('../pregel/write.cjs');
5
5
  const require_read = require('../pregel/read.cjs');
@@ -1,8 +1,8 @@
1
+ import { END, PREVIOUS, START } from "../constants.cjs";
1
2
  import { LastValue } from "../channels/last_value.cjs";
2
3
  import { EphemeralValue } from "../channels/ephemeral_value.cjs";
3
4
  import { CachePolicy, RetryPolicy } from "../pregel/utils/index.cjs";
4
5
  import { PregelNode } from "../pregel/read.cjs";
5
- import { END, PREVIOUS, START } from "../constants.cjs";
6
6
  import { Pregel } from "../pregel/index.cjs";
7
7
  import { EntrypointFinal, EntrypointFinalSaveT, EntrypointFunc, EntrypointReturnT, TaskFunc } from "./types.cjs";
8
8
  import { BaseCache, BaseCheckpointSaver, BaseStore } from "@langchain/langgraph-checkpoint";
@@ -1,8 +1,8 @@
1
+ import { END, PREVIOUS, START } from "../constants.js";
1
2
  import { LastValue } from "../channels/last_value.js";
2
3
  import { EphemeralValue } from "../channels/ephemeral_value.js";
3
4
  import { CachePolicy, RetryPolicy } from "../pregel/utils/index.js";
4
5
  import { PregelNode } from "../pregel/read.js";
5
- import { END, PREVIOUS, START } from "../constants.js";
6
6
  import { Pregel } from "../pregel/index.js";
7
7
  import { EntrypointFinal, EntrypointFinalSaveT, EntrypointFunc, EntrypointReturnT, TaskFunc } from "./types.js";
8
8
  import { BaseCache, BaseCheckpointSaver, BaseStore } from "@langchain/langgraph-checkpoint";
@@ -1,5 +1,5 @@
1
- import { LastValue } from "../channels/last_value.js";
2
1
  import { CONFIG_KEY_PREVIOUS_STATE, END, PREVIOUS, START, TAG_HIDDEN } from "../constants.js";
2
+ import { LastValue } from "../channels/last_value.js";
3
3
  import { RunnableCallable, isAsyncGeneratorFunction, isGeneratorFunction } from "../utils.js";
4
4
  import { ChannelWrite, PASSTHROUGH } from "../pregel/write.js";
5
5
  import { PregelNode } from "../pregel/read.js";
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.cjs","names":["LastValue","BinaryOperatorAggregate"],"sources":["../../src/graph/annotation.ts"],"sourcesContent":["import { RunnableLike } from \"../pregel/runnable_types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { BinaryOperator, BinaryOperatorAggregate } from \"../channels/binop.js\";\nimport { LastValue } from \"../channels/last_value.js\";\n\nexport type SingleReducer<ValueType, UpdateType = ValueType> =\n | {\n reducer: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | {\n /**\n * @deprecated Use `reducer` instead\n */\n value: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | null;\n\nexport interface StateDefinition {\n [key: string]: BaseChannel | (() => BaseChannel);\n}\n\ntype ExtractValueType<C> = C extends BaseChannel\n ? C[\"ValueType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"ValueType\"]\n : never;\n\ntype ExtractUpdateType<C> = C extends BaseChannel\n ? C[\"UpdateType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"UpdateType\"]\n : never;\n\nexport type StateType<SD extends StateDefinition> = {\n [key in keyof SD]: ExtractValueType<SD[key]>;\n};\n\nexport type UpdateType<SD extends StateDefinition> = {\n [key in keyof SD]?: ExtractUpdateType<SD[key]>;\n};\n\nexport type NodeType<SD extends StateDefinition> = RunnableLike<\n StateType<SD>,\n UpdateType<SD> | Partial<StateType<SD>>\n>;\n\n/** @ignore */\nexport interface AnnotationFunction {\n <ValueType>(): LastValue<ValueType>;\n <ValueType, UpdateType = ValueType>(\n annotation: SingleReducer<ValueType, UpdateType>\n ): BinaryOperatorAggregate<ValueType, UpdateType>;\n Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;\n}\n\n/**\n * Should not be instantiated directly. See {@link Annotation}.\n */\nexport class AnnotationRoot<SD extends StateDefinition> {\n lc_graph_name = \"AnnotationRoot\";\n\n declare State: StateType<SD>;\n\n declare Update: UpdateType<SD>;\n\n declare Node: NodeType<SD>;\n\n spec: SD;\n\n constructor(s: SD) {\n this.spec = s;\n }\n\n static isInstance(value: unknown): value is AnnotationRoot<StateDefinition> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"lc_graph_name\" in value &&\n (value as { lc_graph_name: unknown }).lc_graph_name === \"AnnotationRoot\"\n );\n }\n}\n\n/**\n * Helper that instantiates channels within a StateGraph state.\n *\n * Can be used as a field in an {@link Annotation.Root} wrapper in one of two ways:\n * 1. **Directly**: Creates a channel that stores the most recent value returned from a node.\n * 2. **With a reducer**: Creates a channel that applies the reducer on a node's return value.\n *\n * @example\n * ```ts\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single string key named \"currentOutput\"\n * const SimpleAnnotation = Annotation.Root({\n * currentOutput: Annotation<string>,\n * });\n *\n * const graphBuilder = new StateGraph(SimpleAnnotation);\n *\n * // A node in the graph that returns an object with a \"currentOutput\" key\n * // replaces the value in the state. You can get the state type as shown below:\n * const myNode = (state: typeof SimpleAnnotation.State) => {\n * return {\n * currentOutput: \"some_new_value\",\n * };\n * }\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n *\n * @example\n * ```ts\n * import { type BaseMessage, AIMessage } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const AnnotationWithReducer = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * // Different types are allowed for updates\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(AnnotationWithReducer);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof AnnotationWithReducer.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n * @namespace\n * @property Root\n * Helper function that instantiates a StateGraph state. See {@link Annotation} for usage.\n */\nexport const Annotation: AnnotationFunction = function <\n ValueType,\n UpdateType = ValueType\n>(\n annotation?: SingleReducer<ValueType, UpdateType>\n): BaseChannel<ValueType, UpdateType> {\n if (annotation) {\n return getChannel<ValueType, UpdateType>(annotation);\n } else {\n // @ts-expect-error - Annotation without reducer\n return new LastValue<ValueType>();\n }\n} as AnnotationFunction;\n\nAnnotation.Root = <S extends StateDefinition>(sd: S) => new AnnotationRoot(sd);\n\nexport function getChannel<V, U = V>(\n reducer: SingleReducer<V, U>\n): BaseChannel<V, U> {\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"reducer\" in reducer &&\n reducer.reducer\n ) {\n return new BinaryOperatorAggregate(reducer.reducer, reducer.default);\n }\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"value\" in reducer &&\n reducer.value\n ) {\n return new BinaryOperatorAggregate(reducer.value, reducer.default);\n }\n // @ts-expect-error - Annotation without reducer\n return new LastValue<V>();\n}\n"],"mappings":";;;;;;;AA4DA,IAAa,iBAAb,MAAwD;CACtD,gBAAgB;CAQhB;CAEA,YAAY,GAAO;AACjB,OAAK,OAAO;;CAGd,OAAO,WAAW,OAA0D;AAC1E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,mBAAmB,SAClB,MAAqC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4E9D,MAAa,aAAiC,SAI5C,YACoC;AACpC,KAAI,WACF,QAAO,WAAkC,WAAW;KAGpD,QAAO,IAAIA,8BAAsB;;AAIrC,WAAW,QAAmC,OAAU,IAAI,eAAe,GAAG;AAE9E,SAAgB,WACd,SACmB;AACnB,KACE,OAAO,YAAY,YACnB,WACA,aAAa,WACb,QAAQ,QAER,QAAO,IAAIC,sCAAwB,QAAQ,SAAS,QAAQ,QAAQ;AAEtE,KACE,OAAO,YAAY,YACnB,WACA,WAAW,WACX,QAAQ,MAER,QAAO,IAAIA,sCAAwB,QAAQ,OAAO,QAAQ,QAAQ;AAGpE,QAAO,IAAID,8BAAc"}
1
+ {"version":3,"file":"annotation.cjs","names":["LastValue","BinaryOperatorAggregate"],"sources":["../../src/graph/annotation.ts"],"sourcesContent":["import { RunnableLike } from \"../pregel/runnable_types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { BinaryOperator, BinaryOperatorAggregate } from \"../channels/binop.js\";\nimport { LastValue } from \"../channels/last_value.js\";\nimport type { OverwriteValue } from \"../constants.js\";\n\nexport type SingleReducer<ValueType, UpdateType = ValueType> =\n | {\n reducer: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | {\n /**\n * @deprecated Use `reducer` instead\n */\n value: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | null;\n\nexport interface StateDefinition {\n [key: string]: BaseChannel | (() => BaseChannel);\n}\n\ntype ExtractValueType<C> = C extends BaseChannel\n ? C[\"ValueType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"ValueType\"]\n : never;\n\ntype ExtractUpdateType<C> = C extends BaseChannel\n ? C[\"UpdateType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"UpdateType\"]\n : never;\n\nexport type StateType<SD extends StateDefinition> = {\n [key in keyof SD]: ExtractValueType<SD[key]>;\n};\n\nexport type UpdateType<SD extends StateDefinition> = {\n [key in keyof SD]?: ExtractUpdateType<SD[key]>;\n};\n\nexport type NodeType<SD extends StateDefinition> = RunnableLike<\n StateType<SD>,\n UpdateType<SD> | Partial<StateType<SD>>\n>;\n\n/** @ignore */\nexport interface AnnotationFunction {\n <ValueType, UpdateType = ValueType>(\n annotation: SingleReducer<ValueType, UpdateType>\n ): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType>;\n <ValueType>(): LastValue<ValueType>;\n Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;\n}\n\n/**\n * Should not be instantiated directly. See {@link Annotation}.\n */\nexport class AnnotationRoot<SD extends StateDefinition> {\n lc_graph_name = \"AnnotationRoot\";\n\n declare State: StateType<SD>;\n\n declare Update: UpdateType<SD>;\n\n declare Node: NodeType<SD>;\n\n spec: SD;\n\n constructor(s: SD) {\n this.spec = s;\n }\n\n static isInstance(value: unknown): value is AnnotationRoot<StateDefinition> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"lc_graph_name\" in value &&\n (value as { lc_graph_name: unknown }).lc_graph_name === \"AnnotationRoot\"\n );\n }\n}\n\n/**\n * Helper that instantiates channels within a StateGraph state.\n *\n * Can be used as a field in an {@link Annotation.Root} wrapper in one of two ways:\n * 1. **Directly**: Creates a channel that stores the most recent value returned from a node.\n * 2. **With a reducer**: Creates a channel that applies the reducer on a node's return value.\n *\n * @example\n * ```ts\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single string key named \"currentOutput\"\n * const SimpleAnnotation = Annotation.Root({\n * currentOutput: Annotation<string>,\n * });\n *\n * const graphBuilder = new StateGraph(SimpleAnnotation);\n *\n * // A node in the graph that returns an object with a \"currentOutput\" key\n * // replaces the value in the state. You can get the state type as shown below:\n * const myNode = (state: typeof SimpleAnnotation.State) => {\n * return {\n * currentOutput: \"some_new_value\",\n * };\n * }\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n *\n * @example\n * ```ts\n * import { type BaseMessage, AIMessage } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const AnnotationWithReducer = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * // Different types are allowed for updates\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(AnnotationWithReducer);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof AnnotationWithReducer.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n * @namespace\n * @property Root\n * Helper function that instantiates a StateGraph state. See {@link Annotation} for usage.\n */\nexport const Annotation: AnnotationFunction = function <\n ValueType,\n UpdateType = ValueType\n>(\n annotation?: SingleReducer<ValueType, UpdateType>\n): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType> {\n if (annotation) {\n return getChannel<ValueType, UpdateType>(annotation);\n } else {\n // @ts-expect-error - Annotation without reducer\n return new LastValue<ValueType>();\n }\n} as AnnotationFunction;\n\nAnnotation.Root = <S extends StateDefinition>(sd: S) => new AnnotationRoot(sd);\n\nexport function getChannel<V, U = V>(\n reducer: SingleReducer<V, U>\n): BaseChannel<V, OverwriteValue<V> | U> {\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"reducer\" in reducer &&\n reducer.reducer\n ) {\n return new BinaryOperatorAggregate(reducer.reducer, reducer.default);\n }\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"value\" in reducer &&\n reducer.value\n ) {\n return new BinaryOperatorAggregate(reducer.value, reducer.default);\n }\n // @ts-expect-error - Annotation without reducer\n return new LastValue<V>();\n}\n"],"mappings":";;;;;;;AA6DA,IAAa,iBAAb,MAAwD;CACtD,gBAAgB;CAQhB;CAEA,YAAY,GAAO;AACjB,OAAK,OAAO;;CAGd,OAAO,WAAW,OAA0D;AAC1E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,mBAAmB,SAClB,MAAqC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4E9D,MAAa,aAAiC,SAI5C,YACgE;AAChE,KAAI,WACF,QAAO,WAAkC,WAAW;KAGpD,QAAO,IAAIA,8BAAsB;;AAIrC,WAAW,QAAmC,OAAU,IAAI,eAAe,GAAG;AAE9E,SAAgB,WACd,SACuC;AACvC,KACE,OAAO,YAAY,YACnB,WACA,aAAa,WACb,QAAQ,QAER,QAAO,IAAIC,sCAAwB,QAAQ,SAAS,QAAQ,QAAQ;AAEtE,KACE,OAAO,YAAY,YACnB,WACA,WAAW,WACX,QAAQ,MAER,QAAO,IAAIA,sCAAwB,QAAQ,OAAO,QAAQ,QAAQ;AAGpE,QAAO,IAAID,8BAAc"}
@@ -1,5 +1,6 @@
1
1
  import { BaseChannel } from "../channels/base.cjs";
2
- import { BinaryOperator, BinaryOperatorAggregate } from "../channels/binop.cjs";
2
+ import { OverwriteValue } from "../constants.cjs";
3
+ import { BinaryOperator } from "../channels/binop.cjs";
3
4
  import { LastValue } from "../channels/last_value.cjs";
4
5
  import { RunnableLike } from "../pregel/runnable_types.cjs";
5
6
 
@@ -24,8 +25,8 @@ type UpdateType<SD extends StateDefinition> = { [key in keyof SD]?: ExtractUpdat
24
25
  type NodeType<SD extends StateDefinition> = RunnableLike<StateType<SD>, UpdateType<SD> | Partial<StateType<SD>>>;
25
26
  /** @ignore */
26
27
  interface AnnotationFunction {
28
+ <ValueType, UpdateType = ValueType>(annotation: SingleReducer<ValueType, UpdateType>): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType>;
27
29
  <ValueType>(): LastValue<ValueType>;
28
- <ValueType, UpdateType = ValueType>(annotation: SingleReducer<ValueType, UpdateType>): BinaryOperatorAggregate<ValueType, UpdateType>;
29
30
  Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;
30
31
  }
31
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.d.cts","names":[],"sources":["../../src/graph/annotation.ts"],"mappings":";;;;;;KAKY,aAAA,yBAAsC,SAAA;EAE5C,OAAA,EAAS,cAAA,CAAe,SAAA,EAAW,UAAA;EACnC,OAAA,SAAgB,SAAA;AAAA;EAHG;;;EASnB,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,UAAA;EACjC,OAAA,SAAgB,SAAA;AAAA;AAAA,UAIL,eAAA;EAAA,CACd,GAAA,WAAc,WAAA,UAAqB,WAAA;AAAA;AAAA,KAGjC,gBAAA,MAAsB,CAAA,SAAU,WAAA,GACjC,CAAA,gBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGV,iBAAA,MAAuB,CAAA,SAAU,WAAA,GAClC,CAAA,iBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGH,SAAA,YAAqB,eAAA,oBACjB,EAAA,GAAK,gBAAA,CAAiB,EAAA,CAAG,GAAA;AAAA,KAG7B,UAAA,YAAsB,eAAA,oBAClB,EAAA,IAAM,iBAAA,CAAkB,EAAA,CAAG,GAAA;AAAA,KAG/B,QAAA,YAAoB,eAAA,IAAmB,YAAA,CACjD,SAAA,CAAU,EAAA,GACV,UAAA,CAAW,EAAA,IAAM,OAAA,CAAQ,SAAA,CAAU,EAAA;;UAIpB,kBAAA;EAAA,eACA,SAAA,CAAU,SAAA;EAAA,yBACA,SAAA,EACvB,UAAA,EAAY,aAAA,CAAc,SAAA,EAAW,UAAA,IACpC,uBAAA,CAAwB,SAAA,EAAW,UAAA;EACtC,IAAA,aAAiB,eAAA,EAAiB,EAAA,EAAI,CAAA,KAAM,cAAA,CAAe,CAAA;AAAA;;;;cAMhD,cAAA,YAA0B,eAAA;EACrC,aAAA;EAEQ,KAAA,EAAO,SAAA,CAAU,EAAA;EAEjB,MAAA,EAAQ,UAAA,CAAW,EAAA;EAEnB,IAAA,EAAM,QAAA,CAAS,EAAA;EAEvB,IAAA,EAAM,EAAA;EAEN,WAAA,CAAY,CAAA,EAAG,EAAA;EAAA,OAIR,UAAA,CAAW,KAAA,YAAiB,KAAA,IAAS,cAAA,CAAe,eAAA;AAAA;;;AAtD5D;;;;;;;;;;;;;;;;;;;;;;AAKe;;;;;;;;;;;;;;;;;;;;;;AAShB;;;;;;;;;;;;;;;;;;;AAIA;;;;;;cAqHa,UAAA,EAAY,kBAAA"}
1
+ {"version":3,"file":"annotation.d.cts","names":[],"sources":["../../src/graph/annotation.ts"],"mappings":";;;;;;;KAMY,aAAA,yBAAsC,SAAA;EAE5C,OAAA,EAAS,cAAA,CAAe,SAAA,EAAW,UAAA;EACnC,OAAA,SAAgB,SAAA;AAAA;EAHG;;;EASnB,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,UAAA;EACjC,OAAA,SAAgB,SAAA;AAAA;AAAA,UAIL,eAAA;EAAA,CACd,GAAA,WAAc,WAAA,UAAqB,WAAA;AAAA;AAAA,KAGjC,gBAAA,MAAsB,CAAA,SAAU,WAAA,GACjC,CAAA,gBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGV,iBAAA,MAAuB,CAAA,SAAU,WAAA,GAClC,CAAA,iBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGH,SAAA,YAAqB,eAAA,oBACjB,EAAA,GAAK,gBAAA,CAAiB,EAAA,CAAG,GAAA;AAAA,KAG7B,UAAA,YAAsB,eAAA,oBAClB,EAAA,IAAM,iBAAA,CAAkB,EAAA,CAAG,GAAA;AAAA,KAG/B,QAAA,YAAoB,eAAA,IAAmB,YAAA,CACjD,SAAA,CAAU,EAAA,GACV,UAAA,CAAW,EAAA,IAAM,OAAA,CAAQ,SAAA,CAAU,EAAA;;UAIpB,kBAAA;EAAA,yBACU,SAAA,EACvB,UAAA,EAAY,aAAA,CAAc,SAAA,EAAW,UAAA,IACpC,WAAA,CAAY,SAAA,EAAW,cAAA,CAAe,SAAA,IAAa,UAAA;EAAA,eACvC,SAAA,CAAU,SAAA;EACzB,IAAA,aAAiB,eAAA,EAAiB,EAAA,EAAI,CAAA,KAAM,cAAA,CAAe,CAAA;AAAA;;;;cAMhD,cAAA,YAA0B,eAAA;EACrC,aAAA;EAEQ,KAAA,EAAO,SAAA,CAAU,EAAA;EAEjB,MAAA,EAAQ,UAAA,CAAW,EAAA;EAEnB,IAAA,EAAM,QAAA,CAAS,EAAA;EAEvB,IAAA,EAAM,EAAA;EAEN,WAAA,CAAY,CAAA,EAAG,EAAA;EAAA,OAIR,UAAA,CAAW,KAAA,YAAiB,KAAA,IAAS,cAAA,CAAe,eAAA;AAAA;;;AAtD5D;;;;;;;;;;;;;;;;;;;;;;AAKe;;;;;;;;;;;;;;;;;;;;;;AAShB;;;;;;;;;;;;;;;;;;;AAIA;;;;;;cAqHa,UAAA,EAAY,kBAAA"}
@@ -1,5 +1,6 @@
1
1
  import { BaseChannel } from "../channels/base.js";
2
- import { BinaryOperator, BinaryOperatorAggregate } from "../channels/binop.js";
2
+ import { OverwriteValue } from "../constants.js";
3
+ import { BinaryOperator } from "../channels/binop.js";
3
4
  import { LastValue } from "../channels/last_value.js";
4
5
  import { RunnableLike } from "../pregel/runnable_types.js";
5
6
 
@@ -24,8 +25,8 @@ type UpdateType<SD extends StateDefinition> = { [key in keyof SD]?: ExtractUpdat
24
25
  type NodeType<SD extends StateDefinition> = RunnableLike<StateType<SD>, UpdateType<SD> | Partial<StateType<SD>>>;
25
26
  /** @ignore */
26
27
  interface AnnotationFunction {
28
+ <ValueType, UpdateType = ValueType>(annotation: SingleReducer<ValueType, UpdateType>): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType>;
27
29
  <ValueType>(): LastValue<ValueType>;
28
- <ValueType, UpdateType = ValueType>(annotation: SingleReducer<ValueType, UpdateType>): BinaryOperatorAggregate<ValueType, UpdateType>;
29
30
  Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;
30
31
  }
31
32
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.d.ts","names":[],"sources":["../../src/graph/annotation.ts"],"mappings":";;;;;;KAKY,aAAA,yBAAsC,SAAA;EAE5C,OAAA,EAAS,cAAA,CAAe,SAAA,EAAW,UAAA;EACnC,OAAA,SAAgB,SAAA;AAAA;EAHG;;;EASnB,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,UAAA;EACjC,OAAA,SAAgB,SAAA;AAAA;AAAA,UAIL,eAAA;EAAA,CACd,GAAA,WAAc,WAAA,UAAqB,WAAA;AAAA;AAAA,KAGjC,gBAAA,MAAsB,CAAA,SAAU,WAAA,GACjC,CAAA,gBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGV,iBAAA,MAAuB,CAAA,SAAU,WAAA,GAClC,CAAA,iBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGH,SAAA,YAAqB,eAAA,oBACjB,EAAA,GAAK,gBAAA,CAAiB,EAAA,CAAG,GAAA;AAAA,KAG7B,UAAA,YAAsB,eAAA,oBAClB,EAAA,IAAM,iBAAA,CAAkB,EAAA,CAAG,GAAA;AAAA,KAG/B,QAAA,YAAoB,eAAA,IAAmB,YAAA,CACjD,SAAA,CAAU,EAAA,GACV,UAAA,CAAW,EAAA,IAAM,OAAA,CAAQ,SAAA,CAAU,EAAA;;UAIpB,kBAAA;EAAA,eACA,SAAA,CAAU,SAAA;EAAA,yBACA,SAAA,EACvB,UAAA,EAAY,aAAA,CAAc,SAAA,EAAW,UAAA,IACpC,uBAAA,CAAwB,SAAA,EAAW,UAAA;EACtC,IAAA,aAAiB,eAAA,EAAiB,EAAA,EAAI,CAAA,KAAM,cAAA,CAAe,CAAA;AAAA;;;;cAMhD,cAAA,YAA0B,eAAA;EACrC,aAAA;EAEQ,KAAA,EAAO,SAAA,CAAU,EAAA;EAEjB,MAAA,EAAQ,UAAA,CAAW,EAAA;EAEnB,IAAA,EAAM,QAAA,CAAS,EAAA;EAEvB,IAAA,EAAM,EAAA;EAEN,WAAA,CAAY,CAAA,EAAG,EAAA;EAAA,OAIR,UAAA,CAAW,KAAA,YAAiB,KAAA,IAAS,cAAA,CAAe,eAAA;AAAA;;;AAtD5D;;;;;;;;;;;;;;;;;;;;;;AAKe;;;;;;;;;;;;;;;;;;;;;;AAShB;;;;;;;;;;;;;;;;;;;AAIA;;;;;;cAqHa,UAAA,EAAY,kBAAA"}
1
+ {"version":3,"file":"annotation.d.ts","names":[],"sources":["../../src/graph/annotation.ts"],"mappings":";;;;;;;KAMY,aAAA,yBAAsC,SAAA;EAE5C,OAAA,EAAS,cAAA,CAAe,SAAA,EAAW,UAAA;EACnC,OAAA,SAAgB,SAAA;AAAA;EAHG;;;EASnB,KAAA,EAAO,cAAA,CAAe,SAAA,EAAW,UAAA;EACjC,OAAA,SAAgB,SAAA;AAAA;AAAA,UAIL,eAAA;EAAA,CACd,GAAA,WAAc,WAAA,UAAqB,WAAA;AAAA;AAAA,KAGjC,gBAAA,MAAsB,CAAA,SAAU,WAAA,GACjC,CAAA,gBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGV,iBAAA,MAAuB,CAAA,SAAU,WAAA,GAClC,CAAA,iBACA,CAAA,gBAAgB,WAAA,IAChB,UAAA,CAAW,CAAA;AAAA,KAGH,SAAA,YAAqB,eAAA,oBACjB,EAAA,GAAK,gBAAA,CAAiB,EAAA,CAAG,GAAA;AAAA,KAG7B,UAAA,YAAsB,eAAA,oBAClB,EAAA,IAAM,iBAAA,CAAkB,EAAA,CAAG,GAAA;AAAA,KAG/B,QAAA,YAAoB,eAAA,IAAmB,YAAA,CACjD,SAAA,CAAU,EAAA,GACV,UAAA,CAAW,EAAA,IAAM,OAAA,CAAQ,SAAA,CAAU,EAAA;;UAIpB,kBAAA;EAAA,yBACU,SAAA,EACvB,UAAA,EAAY,aAAA,CAAc,SAAA,EAAW,UAAA,IACpC,WAAA,CAAY,SAAA,EAAW,cAAA,CAAe,SAAA,IAAa,UAAA;EAAA,eACvC,SAAA,CAAU,SAAA;EACzB,IAAA,aAAiB,eAAA,EAAiB,EAAA,EAAI,CAAA,KAAM,cAAA,CAAe,CAAA;AAAA;;;;cAMhD,cAAA,YAA0B,eAAA;EACrC,aAAA;EAEQ,KAAA,EAAO,SAAA,CAAU,EAAA;EAEjB,MAAA,EAAQ,UAAA,CAAW,EAAA;EAEnB,IAAA,EAAM,QAAA,CAAS,EAAA;EAEvB,IAAA,EAAM,EAAA;EAEN,WAAA,CAAY,CAAA,EAAG,EAAA;EAAA,OAIR,UAAA,CAAW,KAAA,YAAiB,KAAA,IAAS,cAAA,CAAe,eAAA;AAAA;;;AAtD5D;;;;;;;;;;;;;;;;;;;;;;AAKe;;;;;;;;;;;;;;;;;;;;;;AAShB;;;;;;;;;;;;;;;;;;;AAIA;;;;;;cAqHa,UAAA,EAAY,kBAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.js","names":[],"sources":["../../src/graph/annotation.ts"],"sourcesContent":["import { RunnableLike } from \"../pregel/runnable_types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { BinaryOperator, BinaryOperatorAggregate } from \"../channels/binop.js\";\nimport { LastValue } from \"../channels/last_value.js\";\n\nexport type SingleReducer<ValueType, UpdateType = ValueType> =\n | {\n reducer: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | {\n /**\n * @deprecated Use `reducer` instead\n */\n value: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | null;\n\nexport interface StateDefinition {\n [key: string]: BaseChannel | (() => BaseChannel);\n}\n\ntype ExtractValueType<C> = C extends BaseChannel\n ? C[\"ValueType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"ValueType\"]\n : never;\n\ntype ExtractUpdateType<C> = C extends BaseChannel\n ? C[\"UpdateType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"UpdateType\"]\n : never;\n\nexport type StateType<SD extends StateDefinition> = {\n [key in keyof SD]: ExtractValueType<SD[key]>;\n};\n\nexport type UpdateType<SD extends StateDefinition> = {\n [key in keyof SD]?: ExtractUpdateType<SD[key]>;\n};\n\nexport type NodeType<SD extends StateDefinition> = RunnableLike<\n StateType<SD>,\n UpdateType<SD> | Partial<StateType<SD>>\n>;\n\n/** @ignore */\nexport interface AnnotationFunction {\n <ValueType>(): LastValue<ValueType>;\n <ValueType, UpdateType = ValueType>(\n annotation: SingleReducer<ValueType, UpdateType>\n ): BinaryOperatorAggregate<ValueType, UpdateType>;\n Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;\n}\n\n/**\n * Should not be instantiated directly. See {@link Annotation}.\n */\nexport class AnnotationRoot<SD extends StateDefinition> {\n lc_graph_name = \"AnnotationRoot\";\n\n declare State: StateType<SD>;\n\n declare Update: UpdateType<SD>;\n\n declare Node: NodeType<SD>;\n\n spec: SD;\n\n constructor(s: SD) {\n this.spec = s;\n }\n\n static isInstance(value: unknown): value is AnnotationRoot<StateDefinition> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"lc_graph_name\" in value &&\n (value as { lc_graph_name: unknown }).lc_graph_name === \"AnnotationRoot\"\n );\n }\n}\n\n/**\n * Helper that instantiates channels within a StateGraph state.\n *\n * Can be used as a field in an {@link Annotation.Root} wrapper in one of two ways:\n * 1. **Directly**: Creates a channel that stores the most recent value returned from a node.\n * 2. **With a reducer**: Creates a channel that applies the reducer on a node's return value.\n *\n * @example\n * ```ts\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single string key named \"currentOutput\"\n * const SimpleAnnotation = Annotation.Root({\n * currentOutput: Annotation<string>,\n * });\n *\n * const graphBuilder = new StateGraph(SimpleAnnotation);\n *\n * // A node in the graph that returns an object with a \"currentOutput\" key\n * // replaces the value in the state. You can get the state type as shown below:\n * const myNode = (state: typeof SimpleAnnotation.State) => {\n * return {\n * currentOutput: \"some_new_value\",\n * };\n * }\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n *\n * @example\n * ```ts\n * import { type BaseMessage, AIMessage } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const AnnotationWithReducer = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * // Different types are allowed for updates\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(AnnotationWithReducer);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof AnnotationWithReducer.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n * @namespace\n * @property Root\n * Helper function that instantiates a StateGraph state. See {@link Annotation} for usage.\n */\nexport const Annotation: AnnotationFunction = function <\n ValueType,\n UpdateType = ValueType\n>(\n annotation?: SingleReducer<ValueType, UpdateType>\n): BaseChannel<ValueType, UpdateType> {\n if (annotation) {\n return getChannel<ValueType, UpdateType>(annotation);\n } else {\n // @ts-expect-error - Annotation without reducer\n return new LastValue<ValueType>();\n }\n} as AnnotationFunction;\n\nAnnotation.Root = <S extends StateDefinition>(sd: S) => new AnnotationRoot(sd);\n\nexport function getChannel<V, U = V>(\n reducer: SingleReducer<V, U>\n): BaseChannel<V, U> {\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"reducer\" in reducer &&\n reducer.reducer\n ) {\n return new BinaryOperatorAggregate(reducer.reducer, reducer.default);\n }\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"value\" in reducer &&\n reducer.value\n ) {\n return new BinaryOperatorAggregate(reducer.value, reducer.default);\n }\n // @ts-expect-error - Annotation without reducer\n return new LastValue<V>();\n}\n"],"mappings":";;;;;;;AA4DA,IAAa,iBAAb,MAAwD;CACtD,gBAAgB;CAQhB;CAEA,YAAY,GAAO;AACjB,OAAK,OAAO;;CAGd,OAAO,WAAW,OAA0D;AAC1E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,mBAAmB,SAClB,MAAqC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4E9D,MAAa,aAAiC,SAI5C,YACoC;AACpC,KAAI,WACF,QAAO,WAAkC,WAAW;KAGpD,QAAO,IAAI,WAAsB;;AAIrC,WAAW,QAAmC,OAAU,IAAI,eAAe,GAAG;AAE9E,SAAgB,WACd,SACmB;AACnB,KACE,OAAO,YAAY,YACnB,WACA,aAAa,WACb,QAAQ,QAER,QAAO,IAAI,wBAAwB,QAAQ,SAAS,QAAQ,QAAQ;AAEtE,KACE,OAAO,YAAY,YACnB,WACA,WAAW,WACX,QAAQ,MAER,QAAO,IAAI,wBAAwB,QAAQ,OAAO,QAAQ,QAAQ;AAGpE,QAAO,IAAI,WAAc"}
1
+ {"version":3,"file":"annotation.js","names":[],"sources":["../../src/graph/annotation.ts"],"sourcesContent":["import { RunnableLike } from \"../pregel/runnable_types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { BinaryOperator, BinaryOperatorAggregate } from \"../channels/binop.js\";\nimport { LastValue } from \"../channels/last_value.js\";\nimport type { OverwriteValue } from \"../constants.js\";\n\nexport type SingleReducer<ValueType, UpdateType = ValueType> =\n | {\n reducer: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | {\n /**\n * @deprecated Use `reducer` instead\n */\n value: BinaryOperator<ValueType, UpdateType>;\n default?: () => ValueType;\n }\n | null;\n\nexport interface StateDefinition {\n [key: string]: BaseChannel | (() => BaseChannel);\n}\n\ntype ExtractValueType<C> = C extends BaseChannel\n ? C[\"ValueType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"ValueType\"]\n : never;\n\ntype ExtractUpdateType<C> = C extends BaseChannel\n ? C[\"UpdateType\"]\n : C extends () => BaseChannel\n ? ReturnType<C>[\"UpdateType\"]\n : never;\n\nexport type StateType<SD extends StateDefinition> = {\n [key in keyof SD]: ExtractValueType<SD[key]>;\n};\n\nexport type UpdateType<SD extends StateDefinition> = {\n [key in keyof SD]?: ExtractUpdateType<SD[key]>;\n};\n\nexport type NodeType<SD extends StateDefinition> = RunnableLike<\n StateType<SD>,\n UpdateType<SD> | Partial<StateType<SD>>\n>;\n\n/** @ignore */\nexport interface AnnotationFunction {\n <ValueType, UpdateType = ValueType>(\n annotation: SingleReducer<ValueType, UpdateType>\n ): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType>;\n <ValueType>(): LastValue<ValueType>;\n Root: <S extends StateDefinition>(sd: S) => AnnotationRoot<S>;\n}\n\n/**\n * Should not be instantiated directly. See {@link Annotation}.\n */\nexport class AnnotationRoot<SD extends StateDefinition> {\n lc_graph_name = \"AnnotationRoot\";\n\n declare State: StateType<SD>;\n\n declare Update: UpdateType<SD>;\n\n declare Node: NodeType<SD>;\n\n spec: SD;\n\n constructor(s: SD) {\n this.spec = s;\n }\n\n static isInstance(value: unknown): value is AnnotationRoot<StateDefinition> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"lc_graph_name\" in value &&\n (value as { lc_graph_name: unknown }).lc_graph_name === \"AnnotationRoot\"\n );\n }\n}\n\n/**\n * Helper that instantiates channels within a StateGraph state.\n *\n * Can be used as a field in an {@link Annotation.Root} wrapper in one of two ways:\n * 1. **Directly**: Creates a channel that stores the most recent value returned from a node.\n * 2. **With a reducer**: Creates a channel that applies the reducer on a node's return value.\n *\n * @example\n * ```ts\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single string key named \"currentOutput\"\n * const SimpleAnnotation = Annotation.Root({\n * currentOutput: Annotation<string>,\n * });\n *\n * const graphBuilder = new StateGraph(SimpleAnnotation);\n *\n * // A node in the graph that returns an object with a \"currentOutput\" key\n * // replaces the value in the state. You can get the state type as shown below:\n * const myNode = (state: typeof SimpleAnnotation.State) => {\n * return {\n * currentOutput: \"some_new_value\",\n * };\n * }\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n *\n * @example\n * ```ts\n * import { type BaseMessage, AIMessage } from \"@langchain/core/messages\";\n * import { StateGraph, Annotation } from \"@langchain/langgraph\";\n *\n * // Define a state with a single key named \"messages\" that will\n * // combine a returned BaseMessage or arrays of BaseMessages\n * const AnnotationWithReducer = Annotation.Root({\n * messages: Annotation<BaseMessage[]>({\n * // Different types are allowed for updates\n * reducer: (left: BaseMessage[], right: BaseMessage | BaseMessage[]) => {\n * if (Array.isArray(right)) {\n * return left.concat(right);\n * }\n * return left.concat([right]);\n * },\n * default: () => [],\n * }),\n * });\n *\n * const graphBuilder = new StateGraph(AnnotationWithReducer);\n *\n * // A node in the graph that returns an object with a \"messages\" key\n * // will update the state by combining the existing value with the returned one.\n * const myNode = (state: typeof AnnotationWithReducer.State) => {\n * return {\n * messages: [new AIMessage(\"Some new response\")],\n * };\n * };\n *\n * const graph = graphBuilder\n * .addNode(\"myNode\", myNode)\n * ...\n * .compile();\n * ```\n * @namespace\n * @property Root\n * Helper function that instantiates a StateGraph state. See {@link Annotation} for usage.\n */\nexport const Annotation: AnnotationFunction = function <\n ValueType,\n UpdateType = ValueType\n>(\n annotation?: SingleReducer<ValueType, UpdateType>\n): BaseChannel<ValueType, OverwriteValue<ValueType> | UpdateType> {\n if (annotation) {\n return getChannel<ValueType, UpdateType>(annotation);\n } else {\n // @ts-expect-error - Annotation without reducer\n return new LastValue<ValueType>();\n }\n} as AnnotationFunction;\n\nAnnotation.Root = <S extends StateDefinition>(sd: S) => new AnnotationRoot(sd);\n\nexport function getChannel<V, U = V>(\n reducer: SingleReducer<V, U>\n): BaseChannel<V, OverwriteValue<V> | U> {\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"reducer\" in reducer &&\n reducer.reducer\n ) {\n return new BinaryOperatorAggregate(reducer.reducer, reducer.default);\n }\n if (\n typeof reducer === \"object\" &&\n reducer &&\n \"value\" in reducer &&\n reducer.value\n ) {\n return new BinaryOperatorAggregate(reducer.value, reducer.default);\n }\n // @ts-expect-error - Annotation without reducer\n return new LastValue<V>();\n}\n"],"mappings":";;;;;;;AA6DA,IAAa,iBAAb,MAAwD;CACtD,gBAAgB;CAQhB;CAEA,YAAY,GAAO;AACjB,OAAK,OAAO;;CAGd,OAAO,WAAW,OAA0D;AAC1E,SACE,OAAO,UAAU,YACjB,UAAU,QACV,mBAAmB,SAClB,MAAqC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4E9D,MAAa,aAAiC,SAI5C,YACgE;AAChE,KAAI,WACF,QAAO,WAAkC,WAAW;KAGpD,QAAO,IAAI,WAAsB;;AAIrC,WAAW,QAAmC,OAAU,IAAI,eAAe,GAAG;AAE9E,SAAgB,WACd,SACuC;AACvC,KACE,OAAO,YAAY,YACnB,WACA,aAAa,WACb,QAAQ,QAER,QAAO,IAAI,wBAAwB,QAAQ,SAAS,QAAQ,QAAQ;AAEtE,KACE,OAAO,YAAY,YACnB,WACA,WAAW,WACX,QAAQ,MAER,QAAO,IAAI,wBAAwB,QAAQ,OAAO,QAAQ,QAAQ;AAGpE,QAAO,IAAI,WAAc"}
@@ -1,5 +1,5 @@
1
- const require_errors = require('../errors.cjs');
2
1
  const require_constants = require('../constants.cjs');
2
+ const require_errors = require('../errors.cjs');
3
3
  const require_utils = require('../utils.cjs');
4
4
  const require_write = require('../pregel/write.cjs');
5
5
  const require_read = require('../pregel/read.cjs');
@@ -17,7 +17,7 @@ var Branch = class {
17
17
  ends;
18
18
  constructor(options) {
19
19
  if (_langchain_core_runnables.Runnable.isRunnable(options.path)) this.path = options.path;
20
- else this.path = (0, _langchain_core_runnables._coerceToRunnable)(options.path).withConfig({ runName: `Branch` });
20
+ else this.path = (0, _langchain_core_runnables._coerceToRunnable)(options.path);
21
21
  this.ends = Array.isArray(options.pathMap) ? options.pathMap.reduce((acc, n) => {
22
22
  acc[n] = n;
23
23
  return acc;
@@ -105,10 +105,7 @@ var Graph = class {
105
105
  pathMap
106
106
  };
107
107
  this.warnIfCompiled("Adding an edge to a graph that has already been compiled. This will not be reflected in the compiled graph.");
108
- if (!_langchain_core_runnables.Runnable.isRunnable(options.path)) {
109
- const pathDisplayValues = Array.isArray(options.pathMap) ? options.pathMap.join(",") : Object.keys(options.pathMap ?? {}).join(",");
110
- options.path = (0, _langchain_core_runnables._coerceToRunnable)(options.path).withConfig({ runName: `Branch<${options.source}${pathDisplayValues !== "" ? `,${pathDisplayValues}` : ""}>`.slice(0, 63) });
111
- }
108
+ if (!_langchain_core_runnables.Runnable.isRunnable(options.path)) options.path = (0, _langchain_core_runnables._coerceToRunnable)(options.path);
112
109
  const name = options.path.getName() === "RunnableLambda" ? "condition" : options.path.getName();
113
110
  if (this.branches[options.source] && this.branches[options.source][name]) throw new Error(`Condition \`${name}\` already present for node \`${source}\``);
114
111
  this.branches[options.source] ??= {};
@@ -1 +1 @@
1
- {"version":3,"file":"graph.cjs","names":["Runnable","ChannelWrite","RunnableCallable","NodeInterrupt","_isSend","END","InvalidUpdateError","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","isPregelLike","START","EphemeralValue","UnreachableNodeError","Pregel","PregelNode","PASSTHROUGH","TAG_HIDDEN","Channel","DrawableGraph","z","gatherIterator","gatherIteratorSync"],"sources":["../../src/graph/graph.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n _coerceToRunnable,\n Runnable,\n RunnableConfig,\n RunnableInterface,\n RunnableIOSchema,\n type RunnableLike as LangChainRunnableLike,\n} from \"@langchain/core/runnables\";\nimport {\n Node as DrawableGraphNode,\n Graph as DrawableGraph,\n} from \"@langchain/core/runnables/graph\";\nimport { All, BaseCheckpointSaver } from \"@langchain/langgraph-checkpoint\";\nimport { z } from \"zod/v4\";\nimport { validate as isUuid } from \"uuid\";\nimport type {\n RunnableLike,\n LangGraphRunnableConfig,\n} from \"../pregel/runnable_types.js\";\nimport { PregelNode } from \"../pregel/read.js\";\nimport { Channel, Pregel } from \"../pregel/index.js\";\nimport type { PregelParams } from \"../pregel/types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { EphemeralValue } from \"../channels/ephemeral_value.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"../pregel/write.js\";\nimport {\n _isSend,\n CHECKPOINT_NAMESPACE_END,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n END,\n Send,\n START,\n TAG_HIDDEN,\n} from \"../constants.js\";\nimport {\n gatherIterator,\n gatherIteratorSync,\n RunnableCallable,\n} from \"../utils.js\";\nimport {\n InvalidUpdateError,\n NodeInterrupt,\n UnreachableNodeError,\n} from \"../errors.js\";\nimport { StateDefinition, StateType } from \"./annotation.js\";\nimport { isPregelLike } from \"../pregel/utils/subgraph.js\";\n\nexport interface BranchOptions<\n IO,\n N extends string,\n CallOptions extends LangGraphRunnableConfig = LangGraphRunnableConfig\n> {\n source: N;\n path: RunnableLike<IO, BranchPathReturnValue, CallOptions>;\n pathMap?: Record<string, N | typeof END> | (N | typeof END)[];\n}\n\nexport type BranchPathReturnValue =\n | string\n | Send\n | (string | Send)[]\n | Promise<string | Send | (string | Send)[]>;\n\ntype NodeAction<S, U, C extends StateDefinition> = RunnableLike<\n S,\n U extends object ? U & Record<string, any> : U, // eslint-disable-line @typescript-eslint/no-explicit-any\n LangGraphRunnableConfig<StateType<C>>\n>;\n\nexport class Branch<\n IO,\n N extends string,\n CallOptions extends LangGraphRunnableConfig = LangGraphRunnableConfig\n> {\n path: Runnable<IO, BranchPathReturnValue, CallOptions>;\n\n ends?: Record<string, N | typeof END>;\n\n constructor(options: Omit<BranchOptions<IO, N, CallOptions>, \"source\">) {\n if (Runnable.isRunnable(options.path)) {\n this.path = options.path as Runnable<\n IO,\n BranchPathReturnValue,\n CallOptions\n >;\n } else {\n this.path = _coerceToRunnable(\n options.path as LangChainRunnableLike<\n IO,\n BranchPathReturnValue,\n CallOptions\n >\n ).withConfig({ runName: `Branch` } as CallOptions);\n }\n this.ends = Array.isArray(options.pathMap)\n ? options.pathMap.reduce((acc, n) => {\n acc[n] = n;\n return acc;\n }, {} as Record<string, N | typeof END>)\n : options.pathMap;\n }\n\n run(\n writer: (\n dests: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => Runnable | void | Promise<void>,\n reader?: (config: CallOptions) => IO\n ) {\n return ChannelWrite.registerWriter(\n new RunnableCallable({\n name: \"<branch_run>\",\n trace: false,\n func: async (input: IO, config: CallOptions) => {\n try {\n return await this._route(input, config, writer, reader);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // Detect & warn if NodeInterrupt is thrown in a conditional edge\n if (e.name === NodeInterrupt.unminifiable_name) {\n console.warn(\n \"[WARN]: 'NodeInterrupt' thrown in conditional edge. This is likely a bug in your graph implementation.\\n\" +\n \"NodeInterrupt should only be thrown inside a node, not in edge conditions.\"\n );\n }\n throw e;\n }\n },\n })\n );\n }\n\n async _route(\n input: IO,\n config: CallOptions,\n writer: (\n dests: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => Runnable | void | Promise<void>,\n reader?: (config: CallOptions) => IO\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Runnable | any> {\n let result = await this.path.invoke(\n reader ? reader(config) : input,\n config\n );\n if (!Array.isArray(result)) {\n result = [result];\n }\n\n let destinations: (string | Send)[];\n if (this.ends) {\n destinations = result.map((r) => (_isSend(r) ? r : this.ends![r]));\n } else {\n destinations = result;\n }\n if (destinations.some((dest) => !dest)) {\n throw new Error(\"Branch condition returned unknown or null destination\");\n }\n if (destinations.filter(_isSend).some((packet) => packet.node === END)) {\n throw new InvalidUpdateError(\"Cannot send a packet to the END node\");\n }\n const writeResult = await writer(destinations, config);\n return writeResult ?? input;\n }\n}\n\nexport type NodeSpec<RunInput, RunOutput> = {\n runnable: Runnable<RunInput, RunOutput>;\n metadata?: Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subgraphs?: Pregel<any, any>[];\n ends?: string[];\n defer?: boolean;\n};\n\nexport type AddNodeOptions<Nodes extends string = string> = {\n metadata?: Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subgraphs?: Pregel<any, any>[];\n ends?: Nodes[];\n defer?: boolean;\n};\n\nexport class Graph<\n N extends string = typeof START | typeof END,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n NodeSpecType extends NodeSpec<RunInput, RunOutput> = NodeSpec<\n RunInput,\n RunOutput\n >,\n C extends StateDefinition = StateDefinition\n> {\n nodes: Record<N, NodeSpecType>;\n\n edges: Set<[N | typeof START, N | typeof END]>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n branches: Record<string, Record<string, Branch<RunInput, N, any>>>;\n\n entryPoint?: string;\n\n compiled = false;\n\n constructor() {\n this.nodes = {} as Record<N, NodeSpecType>;\n this.edges = new Set();\n this.branches = {};\n }\n\n protected warnIfCompiled(message: string): void {\n if (this.compiled) {\n console.warn(message);\n }\n }\n\n get allEdges(): Set<[string, string]> {\n return this.edges;\n }\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n nodes:\n | Record<K, NodeAction<NodeInput, NodeOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ][]\n ): Graph<N | K, RunInput, RunOutput>;\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ): Graph<N | K, RunInput, RunOutput>;\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n ...args:\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ]\n | [\n nodes:\n | Record<K, NodeAction<NodeInput, NodeOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ][]\n ]\n ): Graph<N | K, RunInput, RunOutput> {\n function isMutlipleNodes(\n args: unknown[]\n ): args is [\n nodes:\n | Record<K, NodeAction<NodeInput, RunOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, RunOutput, C>,\n options?: AddNodeOptions\n ][],\n options?: AddNodeOptions\n ] {\n return args.length >= 1 && typeof args[0] !== \"string\";\n }\n\n const nodes = (\n isMutlipleNodes(args) // eslint-disable-line no-nested-ternary\n ? Array.isArray(args[0])\n ? args[0]\n : Object.entries(args[0])\n : [[args[0], args[1], args[2]]]\n ) as [K, NodeAction<NodeInput, RunOutput, C>, AddNodeOptions][];\n\n if (nodes.length === 0) {\n throw new Error(\"No nodes provided in `addNode`\");\n }\n\n for (const [key, action, options] of nodes) {\n for (const reservedChar of [\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CHECKPOINT_NAMESPACE_END,\n ]) {\n if (key.includes(reservedChar)) {\n throw new Error(\n `\"${reservedChar}\" is a reserved character and is not allowed in node names.`\n );\n }\n }\n this.warnIfCompiled(\n `Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (key in this.nodes) {\n throw new Error(`Node \\`${key}\\` already present.`);\n }\n if (key === END) {\n throw new Error(`Node \\`${key}\\` is reserved.`);\n }\n\n const runnable = _coerceToRunnable<RunInput, RunOutput>(\n // Account for arbitrary state due to Send API\n action as RunnableLike<RunInput, RunOutput>\n );\n\n this.nodes[key as unknown as N] = {\n runnable,\n metadata: options?.metadata,\n subgraphs: isPregelLike(runnable) ? [runnable] : options?.subgraphs,\n ends: options?.ends,\n } as NodeSpecType;\n }\n\n return this as Graph<N | K, RunInput, RunOutput, NodeSpecType>;\n }\n\n addEdge(startKey: N | typeof START, endKey: N | typeof END): this {\n this.warnIfCompiled(\n `Adding an edge to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (startKey === END) {\n throw new Error(\"END cannot be a start node\");\n }\n if (endKey === START) {\n throw new Error(\"START cannot be an end node\");\n }\n if (\n Array.from(this.edges).some(([start]) => start === startKey) &&\n !(\"channels\" in this)\n ) {\n throw new Error(\n `Already found path for ${startKey}. For multiple edges, use StateGraph.`\n );\n }\n\n this.edges.add([startKey, endKey]);\n\n return this;\n }\n\n addConditionalEdges(\n source: BranchOptions<RunInput, N, LangGraphRunnableConfig<StateType<C>>>\n ): this;\n\n addConditionalEdges(\n source: N,\n path: RunnableLike<\n RunInput,\n BranchPathReturnValue,\n LangGraphRunnableConfig<StateType<C>>\n >,\n pathMap?: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n >[\"pathMap\"]\n ): this;\n\n addConditionalEdges(\n source:\n | N\n | BranchOptions<RunInput, N, LangGraphRunnableConfig<StateType<C>>>,\n path?: RunnableLike<\n RunInput,\n BranchPathReturnValue,\n LangGraphRunnableConfig<StateType<C>>\n >,\n pathMap?: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n >[\"pathMap\"]\n ): this {\n const options: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n > = typeof source === \"object\" ? source : { source, path: path!, pathMap };\n\n this.warnIfCompiled(\n \"Adding an edge to a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n if (!Runnable.isRunnable(options.path)) {\n const pathDisplayValues = Array.isArray(options.pathMap)\n ? options.pathMap.join(\",\")\n : Object.keys(options.pathMap ?? {}).join(\",\");\n options.path = _coerceToRunnable(\n options.path as LangChainRunnableLike<\n RunInput,\n BranchPathReturnValue,\n LangGraphRunnableConfig<StateType<C>>\n >\n ).withConfig({\n runName: `Branch<${options.source}${\n pathDisplayValues !== \"\" ? `,${pathDisplayValues}` : \"\"\n }>`.slice(0, 63),\n });\n }\n // find a name for condition\n const name =\n options.path.getName() === \"RunnableLambda\"\n ? \"condition\"\n : options.path.getName();\n // validate condition\n if (this.branches[options.source] && this.branches[options.source][name]) {\n throw new Error(\n `Condition \\`${name}\\` already present for node \\`${source}\\``\n );\n }\n // save it\n this.branches[options.source] ??= {};\n this.branches[options.source][name] = new Branch(options);\n return this;\n }\n\n /**\n * @deprecated use `addEdge(START, key)` instead\n */\n setEntryPoint(key: N): this {\n this.warnIfCompiled(\n \"Setting the entry point of a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n\n return this.addEdge(START, key);\n }\n\n /**\n * @deprecated use `addEdge(key, END)` instead\n */\n setFinishPoint(key: N): this {\n this.warnIfCompiled(\n \"Setting a finish point of a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n\n return this.addEdge(key, END);\n }\n\n compile({\n checkpointer,\n interruptBefore,\n interruptAfter,\n name,\n }: {\n checkpointer?: BaseCheckpointSaver | false;\n interruptBefore?: N[] | All;\n interruptAfter?: N[] | All;\n name?: string;\n } = {}): CompiledGraph<N> {\n // validate the graph\n this.validate([\n ...(Array.isArray(interruptBefore) ? interruptBefore : []),\n ...(Array.isArray(interruptAfter) ? interruptAfter : []),\n ]);\n\n // create empty compiled graph\n const compiled = new CompiledGraph({\n builder: this,\n checkpointer,\n interruptAfter,\n interruptBefore,\n autoValidate: false,\n nodes: {} as Record<N | typeof START, PregelNode<RunInput, RunOutput>>,\n channels: {\n [START]: new EphemeralValue(),\n [END]: new EphemeralValue(),\n } as Record<N | typeof START | typeof END | string, BaseChannel>,\n inputChannels: START,\n outputChannels: END,\n streamChannels: [] as N[],\n streamMode: \"values\",\n name,\n });\n\n // attach nodes, edges and branches\n for (const [key, node] of Object.entries<NodeSpec<RunInput, RunOutput>>(\n this.nodes\n )) {\n compiled.attachNode(key as N, node);\n }\n for (const [start, end] of this.edges) {\n compiled.attachEdge(start, end);\n }\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const [name, branch] of Object.entries(branches)) {\n compiled.attachBranch(start as N, name, branch);\n }\n }\n\n return compiled.validate();\n }\n\n validate(interrupt?: string[]): void {\n // assemble sources\n const allSources = new Set([...this.allEdges].map(([src, _]) => src));\n for (const [start] of Object.entries(this.branches)) {\n allSources.add(start);\n }\n\n // validate sources\n for (const source of allSources) {\n if (source !== START && !(source in this.nodes)) {\n throw new Error(`Found edge starting at unknown node \\`${source}\\``);\n }\n }\n\n // assemble targets\n const allTargets = new Set([...this.allEdges].map(([_, target]) => target));\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const branch of Object.values(branches)) {\n if (branch.ends != null) {\n for (const end of Object.values(branch.ends)) {\n allTargets.add(end);\n }\n } else {\n allTargets.add(END);\n for (const node of Object.keys(this.nodes)) {\n if (node !== start) {\n allTargets.add(node);\n }\n }\n }\n }\n }\n for (const node of Object.values<NodeSpecType>(this.nodes)) {\n for (const target of node.ends ?? []) {\n allTargets.add(target);\n }\n }\n // validate targets\n for (const node of Object.keys(this.nodes)) {\n if (!allTargets.has(node)) {\n throw new UnreachableNodeError(\n [\n `Node \\`${node}\\` is not reachable.`,\n \"\",\n \"If you are returning Command objects from your node,\",\n 'make sure you are passing names of potential destination nodes as an \"ends\" array',\n 'into \".addNode(..., { ends: [\"node1\", \"node2\"] })\".',\n ].join(\"\\n\"),\n {\n lc_error_code: \"UNREACHABLE_NODE\",\n }\n );\n }\n }\n for (const target of allTargets) {\n if (target !== END && !(target in this.nodes)) {\n throw new Error(`Found edge ending at unknown node \\`${target}\\``);\n }\n }\n\n // validate interrupts\n if (interrupt) {\n for (const node of interrupt) {\n if (!(node in this.nodes)) {\n throw new Error(`Interrupt node \\`${node}\\` is not present`);\n }\n }\n }\n\n this.compiled = true;\n }\n}\n\nexport class CompiledGraph<\n N extends string,\n State = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n Update = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n InputType = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n OutputType = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n NodeReturnType = unknown,\n CommandType = unknown,\n StreamCustomType = any // eslint-disable-line @typescript-eslint/no-explicit-any\n> extends Pregel<\n Record<N | typeof START, PregelNode<State, Update>>,\n Record<N | typeof START | typeof END | string, BaseChannel>,\n ContextType & Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n InputType,\n OutputType,\n InputType,\n OutputType,\n NodeReturnType,\n CommandType,\n StreamCustomType\n> {\n declare \"~NodeType\": N;\n\n declare \"~NodeReturnType\": NodeReturnType;\n\n declare \"~RunInput\": Update;\n\n declare \"~RunOutput\": State;\n\n builder: Graph<N, State, Update>;\n\n constructor({\n builder,\n ...rest\n }: { builder: Graph<N, State, Update> } & PregelParams<\n Record<N | typeof START, PregelNode<State, Update>>,\n Record<N | typeof START | typeof END | string, BaseChannel>\n >) {\n super(rest);\n this.builder = builder;\n }\n\n attachNode(key: N, node: NodeSpec<State, Update>): void {\n this.channels[key] = new EphemeralValue();\n this.nodes[key] = new PregelNode({\n channels: [],\n triggers: [],\n metadata: node.metadata,\n subgraphs: node.subgraphs,\n ends: node.ends,\n })\n .pipe(node.runnable)\n .pipe(\n new ChannelWrite([{ channel: key, value: PASSTHROUGH }], [TAG_HIDDEN])\n );\n (this.streamChannels as N[]).push(key);\n }\n\n attachEdge(start: N | typeof START, end: N | typeof END): void {\n if (end === END) {\n if (start === START) {\n throw new Error(\"Cannot have an edge from START to END\");\n }\n this.nodes[start].writers.push(\n new ChannelWrite([{ channel: END, value: PASSTHROUGH }], [TAG_HIDDEN])\n );\n } else {\n this.nodes[end].triggers.push(start);\n (this.nodes[end].channels as string[]).push(start);\n }\n }\n\n attachBranch(\n start: N | typeof START,\n name: string,\n branch: Branch<State, N>\n ) {\n // add hidden start node\n if (start === START && !this.nodes[START]) {\n this.nodes[START] = Channel.subscribeTo(START, { tags: [TAG_HIDDEN] });\n }\n\n // attach branch writer\n this.nodes[start].pipe(\n branch.run((dests) => {\n const writes = dests.map((dest) => {\n if (_isSend(dest)) {\n return dest;\n }\n return {\n channel: dest === END ? END : `branch:${start}:${name}:${dest}`,\n value: PASSTHROUGH,\n };\n });\n return new ChannelWrite(writes, [TAG_HIDDEN]);\n })\n );\n\n // attach branch readers\n const ends = branch.ends\n ? Object.values(branch.ends)\n : (Object.keys(this.nodes) as N[]);\n for (const end of ends) {\n if (end !== END) {\n const channelName = `branch:${start}:${name}:${end}`;\n (this.channels as Record<string, BaseChannel>)[channelName] =\n new EphemeralValue();\n this.nodes[end].triggers.push(channelName);\n (this.nodes[end].channels as string[]).push(channelName);\n }\n }\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n override async getGraphAsync(\n config?: RunnableConfig & { xray?: boolean | number }\n ): Promise<DrawableGraph> {\n const xray = config?.xray;\n const graph = new DrawableGraph();\n const startNodes: Record<string, DrawableGraphNode> = {\n [START]: graph.addNode({ schema: z.any() }, START),\n };\n const endNodes: Record<string, DrawableGraphNode> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let subgraphs: Record<string, CompiledGraph<any>> = {};\n if (xray) {\n subgraphs = Object.fromEntries(\n (await gatherIterator(this.getSubgraphsAsync())).filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (x): x is [string, CompiledGraph<any>] => isCompiledGraph(x[1])\n )\n );\n }\n\n function addEdge(\n start: string,\n end: string,\n label?: string,\n conditional = false\n ) {\n if (end === END && endNodes[END] === undefined) {\n endNodes[END] = graph.addNode({ schema: z.any() }, END);\n }\n if (startNodes[start] === undefined) {\n return;\n }\n if (endNodes[end] === undefined) {\n throw new Error(`End node ${end} not found!`);\n }\n return graph.addEdge(\n startNodes[start],\n endNodes[end],\n label !== end ? label : undefined,\n conditional\n );\n }\n\n for (const [key, nodeSpec] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n const displayKey = _escapeMermaidKeywords(key);\n const node = nodeSpec.runnable;\n const metadata = nodeSpec.metadata ?? {};\n if (\n this.interruptBefore?.includes(key) &&\n this.interruptAfter?.includes(key)\n ) {\n metadata.__interrupt = \"before,after\";\n } else if (this.interruptBefore?.includes(key)) {\n metadata.__interrupt = \"before\";\n } else if (this.interruptAfter?.includes(key)) {\n metadata.__interrupt = \"after\";\n }\n if (xray) {\n const newXrayValue = typeof xray === \"number\" ? xray - 1 : xray;\n const drawableSubgraph =\n subgraphs[key] !== undefined\n ? await subgraphs[key].getGraphAsync({\n ...config,\n xray: newXrayValue,\n })\n : node.getGraph(config);\n\n drawableSubgraph.trimFirstNode();\n drawableSubgraph.trimLastNode();\n\n if (Object.keys(drawableSubgraph.nodes).length > 1) {\n const [e, s] = graph.extend(drawableSubgraph, displayKey);\n if (e === undefined) {\n throw new Error(\n `Could not extend subgraph \"${key}\" due to missing entrypoint.`\n );\n }\n\n // TODO: Remove default name once we stop supporting core 0.2.0\n // eslint-disable-next-line no-inner-declarations\n function _isRunnableInterface(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n thing: any\n ): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n }\n // eslint-disable-next-line no-inner-declarations\n function _nodeDataStr(\n id: string | undefined,\n data: RunnableInterface | RunnableIOSchema\n ): string {\n if (id !== undefined && !isUuid(id)) {\n return id;\n } else if (_isRunnableInterface(data)) {\n try {\n let dataStr = data.getName();\n dataStr = dataStr.startsWith(\"Runnable\")\n ? dataStr.slice(\"Runnable\".length)\n : dataStr;\n return dataStr;\n } catch (error) {\n return data.getName();\n }\n } else {\n return data.name ?? \"UnknownSchema\";\n }\n }\n // TODO: Remove casts when we stop supporting core 0.2.0\n if (s !== undefined) {\n startNodes[displayKey] = {\n name: _nodeDataStr(s.id, s.data),\n ...s,\n } as DrawableGraphNode;\n }\n endNodes[displayKey] = {\n name: _nodeDataStr(e.id, e.data),\n ...e,\n } as DrawableGraphNode;\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n }\n const sortedEdges = [...this.builder.allEdges].sort(([a], [b]) => {\n if (a < b) {\n return -1;\n } else if (b > a) {\n return 1;\n } else {\n return 0;\n }\n });\n for (const [start, end] of sortedEdges) {\n addEdge(_escapeMermaidKeywords(start), _escapeMermaidKeywords(end));\n }\n for (const [start, branches] of Object.entries(this.builder.branches)) {\n const defaultEnds: Record<string, string> = {\n ...Object.fromEntries(\n Object.keys(this.builder.nodes)\n .filter((k) => k !== start)\n .map((k) => [_escapeMermaidKeywords(k), _escapeMermaidKeywords(k)])\n ),\n [END]: END,\n };\n for (const branch of Object.values(branches)) {\n let ends;\n if (branch.ends !== undefined) {\n ends = branch.ends;\n } else {\n ends = defaultEnds;\n }\n for (const [label, end] of Object.entries(ends)) {\n addEdge(\n _escapeMermaidKeywords(start),\n _escapeMermaidKeywords(end),\n label,\n true\n );\n }\n }\n }\n for (const [key, node] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n if (node.ends !== undefined) {\n for (const end of node.ends) {\n addEdge(\n _escapeMermaidKeywords(key),\n _escapeMermaidKeywords(end),\n undefined,\n true\n );\n }\n }\n }\n return graph;\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n *\n * @deprecated Use getGraphAsync instead. The async method will be the default in the next minor core release.\n */\n override getGraph(\n config?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n const xray = config?.xray;\n const graph = new DrawableGraph();\n const startNodes: Record<string, DrawableGraphNode> = {\n [START]: graph.addNode(\n {\n schema: z.any(),\n },\n START\n ),\n };\n const endNodes: Record<string, DrawableGraphNode> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let subgraphs: Record<string, CompiledGraph<any>> = {};\n if (xray) {\n subgraphs = Object.fromEntries(\n gatherIteratorSync(this.getSubgraphs()).filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (x): x is [string, CompiledGraph<any>] => isCompiledGraph(x[1])\n )\n );\n }\n\n function addEdge(\n start: string,\n end: string,\n label?: string,\n conditional = false\n ) {\n if (end === END && endNodes[END] === undefined) {\n endNodes[END] = graph.addNode({ schema: z.any() }, END);\n }\n return graph.addEdge(\n startNodes[start],\n endNodes[end],\n label !== end ? label : undefined,\n conditional\n );\n }\n\n for (const [key, nodeSpec] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n const displayKey = _escapeMermaidKeywords(key);\n const node = nodeSpec.runnable;\n const metadata = nodeSpec.metadata ?? {};\n if (\n this.interruptBefore?.includes(key) &&\n this.interruptAfter?.includes(key)\n ) {\n metadata.__interrupt = \"before,after\";\n } else if (this.interruptBefore?.includes(key)) {\n metadata.__interrupt = \"before\";\n } else if (this.interruptAfter?.includes(key)) {\n metadata.__interrupt = \"after\";\n }\n if (xray) {\n const newXrayValue = typeof xray === \"number\" ? xray - 1 : xray;\n const drawableSubgraph =\n subgraphs[key] !== undefined\n ? subgraphs[key].getGraph({\n ...config,\n xray: newXrayValue,\n })\n : node.getGraph(config);\n drawableSubgraph.trimFirstNode();\n drawableSubgraph.trimLastNode();\n if (Object.keys(drawableSubgraph.nodes).length > 1) {\n const [e, s] = graph.extend(drawableSubgraph, displayKey);\n if (e === undefined) {\n throw new Error(\n `Could not extend subgraph \"${key}\" due to missing entrypoint.`\n );\n }\n\n // TODO: Remove default name once we stop supporting core 0.2.0\n // eslint-disable-next-line no-inner-declarations\n function _isRunnableInterface(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n thing: any\n ): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n }\n // eslint-disable-next-line no-inner-declarations\n function _nodeDataStr(\n id: string | undefined,\n data: RunnableInterface | RunnableIOSchema\n ): string {\n if (id !== undefined && !isUuid(id)) {\n return id;\n } else if (_isRunnableInterface(data)) {\n try {\n let dataStr = data.getName();\n dataStr = dataStr.startsWith(\"Runnable\")\n ? dataStr.slice(\"Runnable\".length)\n : dataStr;\n return dataStr;\n } catch (error) {\n return data.getName();\n }\n } else {\n return data.name ?? \"UnknownSchema\";\n }\n }\n // TODO: Remove casts when we stop supporting core 0.2.0\n if (s !== undefined) {\n startNodes[displayKey] = {\n name: _nodeDataStr(s.id, s.data),\n ...s,\n } as DrawableGraphNode;\n }\n endNodes[displayKey] = {\n name: _nodeDataStr(e.id, e.data),\n ...e,\n } as DrawableGraphNode;\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n }\n const sortedEdges = [...this.builder.allEdges].sort(([a], [b]) => {\n if (a < b) {\n return -1;\n } else if (b > a) {\n return 1;\n } else {\n return 0;\n }\n });\n for (const [start, end] of sortedEdges) {\n addEdge(_escapeMermaidKeywords(start), _escapeMermaidKeywords(end));\n }\n for (const [start, branches] of Object.entries(this.builder.branches)) {\n const defaultEnds: Record<string, string> = {\n ...Object.fromEntries(\n Object.keys(this.builder.nodes)\n .filter((k) => k !== start)\n .map((k) => [_escapeMermaidKeywords(k), _escapeMermaidKeywords(k)])\n ),\n [END]: END,\n };\n for (const branch of Object.values(branches)) {\n let ends;\n if (branch.ends !== undefined) {\n ends = branch.ends;\n } else {\n ends = defaultEnds;\n }\n for (const [label, end] of Object.entries(ends)) {\n addEdge(\n _escapeMermaidKeywords(start),\n _escapeMermaidKeywords(end),\n label,\n true\n );\n }\n }\n }\n return graph;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isCompiledGraph(x: unknown): x is CompiledGraph<any> {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (x as CompiledGraph<any>).attachNode === \"function\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (x as CompiledGraph<any>).attachEdge === \"function\"\n );\n}\n\nfunction _escapeMermaidKeywords(key: string) {\n if (key === \"subgraph\") {\n return `\"${key}\"`;\n }\n return key;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"graph.cjs","names":["Runnable","ChannelWrite","RunnableCallable","NodeInterrupt","_isSend","END","InvalidUpdateError","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","isPregelLike","START","EphemeralValue","UnreachableNodeError","Pregel","PregelNode","PASSTHROUGH","TAG_HIDDEN","Channel","DrawableGraph","z","gatherIterator","gatherIteratorSync"],"sources":["../../src/graph/graph.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n _coerceToRunnable,\n Runnable,\n RunnableConfig,\n RunnableInterface,\n RunnableIOSchema,\n type RunnableLike as LangChainRunnableLike,\n} from \"@langchain/core/runnables\";\nimport {\n Node as DrawableGraphNode,\n Graph as DrawableGraph,\n} from \"@langchain/core/runnables/graph\";\nimport { All, BaseCheckpointSaver } from \"@langchain/langgraph-checkpoint\";\nimport { z } from \"zod/v4\";\nimport { validate as isUuid } from \"uuid\";\nimport type {\n RunnableLike,\n LangGraphRunnableConfig,\n} from \"../pregel/runnable_types.js\";\nimport { PregelNode } from \"../pregel/read.js\";\nimport { Channel, Pregel } from \"../pregel/index.js\";\nimport type { PregelParams } from \"../pregel/types.js\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { EphemeralValue } from \"../channels/ephemeral_value.js\";\nimport { ChannelWrite, PASSTHROUGH } from \"../pregel/write.js\";\nimport {\n _isSend,\n CHECKPOINT_NAMESPACE_END,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n END,\n Send,\n START,\n TAG_HIDDEN,\n} from \"../constants.js\";\nimport {\n gatherIterator,\n gatherIteratorSync,\n RunnableCallable,\n} from \"../utils.js\";\nimport {\n InvalidUpdateError,\n NodeInterrupt,\n UnreachableNodeError,\n} from \"../errors.js\";\nimport { StateDefinition, StateType } from \"./annotation.js\";\nimport { isPregelLike } from \"../pregel/utils/subgraph.js\";\n\nexport interface BranchOptions<\n IO,\n N extends string,\n CallOptions extends LangGraphRunnableConfig = LangGraphRunnableConfig\n> {\n source: N;\n path: RunnableLike<IO, BranchPathReturnValue, CallOptions>;\n pathMap?: Record<string, N | typeof END> | (N | typeof END)[];\n}\n\nexport type BranchPathReturnValue =\n | string\n | Send\n | (string | Send)[]\n | Promise<string | Send | (string | Send)[]>;\n\ntype NodeAction<S, U, C extends StateDefinition> = RunnableLike<\n S,\n U extends object ? U & Record<string, any> : U, // eslint-disable-line @typescript-eslint/no-explicit-any\n LangGraphRunnableConfig<StateType<C>>\n>;\n\nexport class Branch<\n IO,\n N extends string,\n CallOptions extends LangGraphRunnableConfig = LangGraphRunnableConfig\n> {\n path: Runnable<IO, BranchPathReturnValue>;\n\n ends?: Record<string, N | typeof END>;\n\n constructor(options: Omit<BranchOptions<IO, N, CallOptions>, \"source\">) {\n if (Runnable.isRunnable(options.path)) {\n this.path = options.path as Runnable<IO, BranchPathReturnValue>;\n } else {\n this.path = _coerceToRunnable(\n options.path as LangChainRunnableLike<IO, BranchPathReturnValue>\n );\n }\n this.ends = Array.isArray(options.pathMap)\n ? options.pathMap.reduce((acc, n) => {\n acc[n] = n;\n return acc;\n }, {} as Record<string, N | typeof END>)\n : options.pathMap;\n }\n\n run(\n writer: (\n dests: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => Runnable | void | Promise<void>,\n reader?: (config: CallOptions) => IO\n ) {\n return ChannelWrite.registerWriter(\n new RunnableCallable({\n name: \"<branch_run>\",\n trace: false,\n func: async (input: IO, config: CallOptions) => {\n try {\n return await this._route(input, config, writer, reader);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // Detect & warn if NodeInterrupt is thrown in a conditional edge\n if (e.name === NodeInterrupt.unminifiable_name) {\n console.warn(\n \"[WARN]: 'NodeInterrupt' thrown in conditional edge. This is likely a bug in your graph implementation.\\n\" +\n \"NodeInterrupt should only be thrown inside a node, not in edge conditions.\"\n );\n }\n throw e;\n }\n },\n })\n );\n }\n\n async _route(\n input: IO,\n config: CallOptions,\n writer: (\n dests: (string | Send)[],\n config: LangGraphRunnableConfig\n ) => Runnable | void | Promise<void>,\n reader?: (config: CallOptions) => IO\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Promise<Runnable | any> {\n let result = await this.path.invoke(\n reader ? reader(config) : input,\n config\n );\n if (!Array.isArray(result)) {\n result = [result];\n }\n\n let destinations: (string | Send)[];\n if (this.ends) {\n destinations = result.map((r) => (_isSend(r) ? r : this.ends![r]));\n } else {\n destinations = result;\n }\n if (destinations.some((dest) => !dest)) {\n throw new Error(\"Branch condition returned unknown or null destination\");\n }\n if (destinations.filter(_isSend).some((packet) => packet.node === END)) {\n throw new InvalidUpdateError(\"Cannot send a packet to the END node\");\n }\n const writeResult = await writer(destinations, config);\n return writeResult ?? input;\n }\n}\n\nexport type NodeSpec<RunInput, RunOutput> = {\n runnable: Runnable<RunInput, RunOutput>;\n metadata?: Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subgraphs?: Pregel<any, any>[];\n ends?: string[];\n defer?: boolean;\n};\n\nexport type AddNodeOptions<Nodes extends string = string> = {\n metadata?: Record<string, unknown>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n subgraphs?: Pregel<any, any>[];\n ends?: Nodes[];\n defer?: boolean;\n};\n\nexport class Graph<\n N extends string = typeof START | typeof END,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n NodeSpecType extends NodeSpec<RunInput, RunOutput> = NodeSpec<\n RunInput,\n RunOutput\n >,\n C extends StateDefinition = StateDefinition\n> {\n nodes: Record<N, NodeSpecType>;\n\n edges: Set<[N | typeof START, N | typeof END]>;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n branches: Record<string, Record<string, Branch<RunInput, N, any>>>;\n\n entryPoint?: string;\n\n compiled = false;\n\n constructor() {\n this.nodes = {} as Record<N, NodeSpecType>;\n this.edges = new Set();\n this.branches = {};\n }\n\n protected warnIfCompiled(message: string): void {\n if (this.compiled) {\n console.warn(message);\n }\n }\n\n get allEdges(): Set<[string, string]> {\n return this.edges;\n }\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n nodes:\n | Record<K, NodeAction<NodeInput, NodeOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ][]\n ): Graph<N | K, RunInput, RunOutput>;\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ): Graph<N | K, RunInput, RunOutput>;\n\n addNode<K extends string, NodeInput = RunInput, NodeOutput = RunOutput>(\n ...args:\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ]\n | [\n nodes:\n | Record<K, NodeAction<NodeInput, NodeOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, NodeOutput, C>,\n options?: AddNodeOptions\n ][]\n ]\n ): Graph<N | K, RunInput, RunOutput> {\n function isMutlipleNodes(\n args: unknown[]\n ): args is [\n nodes:\n | Record<K, NodeAction<NodeInput, RunOutput, C>>\n | [\n key: K,\n action: NodeAction<NodeInput, RunOutput, C>,\n options?: AddNodeOptions\n ][],\n options?: AddNodeOptions\n ] {\n return args.length >= 1 && typeof args[0] !== \"string\";\n }\n\n const nodes = (\n isMutlipleNodes(args) // eslint-disable-line no-nested-ternary\n ? Array.isArray(args[0])\n ? args[0]\n : Object.entries(args[0])\n : [[args[0], args[1], args[2]]]\n ) as [K, NodeAction<NodeInput, RunOutput, C>, AddNodeOptions][];\n\n if (nodes.length === 0) {\n throw new Error(\"No nodes provided in `addNode`\");\n }\n\n for (const [key, action, options] of nodes) {\n for (const reservedChar of [\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CHECKPOINT_NAMESPACE_END,\n ]) {\n if (key.includes(reservedChar)) {\n throw new Error(\n `\"${reservedChar}\" is a reserved character and is not allowed in node names.`\n );\n }\n }\n this.warnIfCompiled(\n `Adding a node to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (key in this.nodes) {\n throw new Error(`Node \\`${key}\\` already present.`);\n }\n if (key === END) {\n throw new Error(`Node \\`${key}\\` is reserved.`);\n }\n\n const runnable = _coerceToRunnable<RunInput, RunOutput>(\n // Account for arbitrary state due to Send API\n action as RunnableLike<RunInput, RunOutput>\n );\n\n this.nodes[key as unknown as N] = {\n runnable,\n metadata: options?.metadata,\n subgraphs: isPregelLike(runnable) ? [runnable] : options?.subgraphs,\n ends: options?.ends,\n } as NodeSpecType;\n }\n\n return this as Graph<N | K, RunInput, RunOutput, NodeSpecType>;\n }\n\n addEdge(startKey: N | typeof START, endKey: N | typeof END): this {\n this.warnIfCompiled(\n `Adding an edge to a graph that has already been compiled. This will not be reflected in the compiled graph.`\n );\n\n if (startKey === END) {\n throw new Error(\"END cannot be a start node\");\n }\n if (endKey === START) {\n throw new Error(\"START cannot be an end node\");\n }\n if (\n Array.from(this.edges).some(([start]) => start === startKey) &&\n !(\"channels\" in this)\n ) {\n throw new Error(\n `Already found path for ${startKey}. For multiple edges, use StateGraph.`\n );\n }\n\n this.edges.add([startKey, endKey]);\n\n return this;\n }\n\n addConditionalEdges(\n source: BranchOptions<RunInput, N, LangGraphRunnableConfig<StateType<C>>>\n ): this;\n\n addConditionalEdges(\n source: N,\n path: RunnableLike<\n RunInput,\n BranchPathReturnValue,\n LangGraphRunnableConfig<StateType<C>>\n >,\n pathMap?: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n >[\"pathMap\"]\n ): this;\n\n addConditionalEdges(\n source:\n | N\n | BranchOptions<RunInput, N, LangGraphRunnableConfig<StateType<C>>>,\n path?: RunnableLike<\n RunInput,\n BranchPathReturnValue,\n LangGraphRunnableConfig<StateType<C>>\n >,\n pathMap?: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n >[\"pathMap\"]\n ): this {\n const options: BranchOptions<\n RunInput,\n N,\n LangGraphRunnableConfig<StateType<C>>\n > = typeof source === \"object\" ? source : { source, path: path!, pathMap };\n\n this.warnIfCompiled(\n \"Adding an edge to a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n if (!Runnable.isRunnable(options.path)) {\n options.path = _coerceToRunnable(\n options.path as LangChainRunnableLike<RunInput, BranchPathReturnValue>\n );\n }\n // find a name for condition\n const name =\n options.path.getName() === \"RunnableLambda\"\n ? \"condition\"\n : options.path.getName();\n // validate condition\n if (this.branches[options.source] && this.branches[options.source][name]) {\n throw new Error(\n `Condition \\`${name}\\` already present for node \\`${source}\\``\n );\n }\n // save it\n this.branches[options.source] ??= {};\n this.branches[options.source][name] = new Branch(options);\n return this;\n }\n\n /**\n * @deprecated use `addEdge(START, key)` instead\n */\n setEntryPoint(key: N): this {\n this.warnIfCompiled(\n \"Setting the entry point of a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n\n return this.addEdge(START, key);\n }\n\n /**\n * @deprecated use `addEdge(key, END)` instead\n */\n setFinishPoint(key: N): this {\n this.warnIfCompiled(\n \"Setting a finish point of a graph that has already been compiled. This will not be reflected in the compiled graph.\"\n );\n\n return this.addEdge(key, END);\n }\n\n compile({\n checkpointer,\n interruptBefore,\n interruptAfter,\n name,\n }: {\n checkpointer?: BaseCheckpointSaver | false;\n interruptBefore?: N[] | All;\n interruptAfter?: N[] | All;\n name?: string;\n } = {}): CompiledGraph<N> {\n // validate the graph\n this.validate([\n ...(Array.isArray(interruptBefore) ? interruptBefore : []),\n ...(Array.isArray(interruptAfter) ? interruptAfter : []),\n ]);\n\n // create empty compiled graph\n const compiled = new CompiledGraph({\n builder: this,\n checkpointer,\n interruptAfter,\n interruptBefore,\n autoValidate: false,\n nodes: {} as Record<N | typeof START, PregelNode<RunInput, RunOutput>>,\n channels: {\n [START]: new EphemeralValue(),\n [END]: new EphemeralValue(),\n } as Record<N | typeof START | typeof END | string, BaseChannel>,\n inputChannels: START,\n outputChannels: END,\n streamChannels: [] as N[],\n streamMode: \"values\",\n name,\n });\n\n // attach nodes, edges and branches\n for (const [key, node] of Object.entries<NodeSpec<RunInput, RunOutput>>(\n this.nodes\n )) {\n compiled.attachNode(key as N, node);\n }\n for (const [start, end] of this.edges) {\n compiled.attachEdge(start, end);\n }\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const [name, branch] of Object.entries(branches)) {\n compiled.attachBranch(start as N, name, branch);\n }\n }\n\n return compiled.validate();\n }\n\n validate(interrupt?: string[]): void {\n // assemble sources\n const allSources = new Set([...this.allEdges].map(([src, _]) => src));\n for (const [start] of Object.entries(this.branches)) {\n allSources.add(start);\n }\n\n // validate sources\n for (const source of allSources) {\n if (source !== START && !(source in this.nodes)) {\n throw new Error(`Found edge starting at unknown node \\`${source}\\``);\n }\n }\n\n // assemble targets\n const allTargets = new Set([...this.allEdges].map(([_, target]) => target));\n for (const [start, branches] of Object.entries(this.branches)) {\n for (const branch of Object.values(branches)) {\n if (branch.ends != null) {\n for (const end of Object.values(branch.ends)) {\n allTargets.add(end);\n }\n } else {\n allTargets.add(END);\n for (const node of Object.keys(this.nodes)) {\n if (node !== start) {\n allTargets.add(node);\n }\n }\n }\n }\n }\n for (const node of Object.values<NodeSpecType>(this.nodes)) {\n for (const target of node.ends ?? []) {\n allTargets.add(target);\n }\n }\n // validate targets\n for (const node of Object.keys(this.nodes)) {\n if (!allTargets.has(node)) {\n throw new UnreachableNodeError(\n [\n `Node \\`${node}\\` is not reachable.`,\n \"\",\n \"If you are returning Command objects from your node,\",\n 'make sure you are passing names of potential destination nodes as an \"ends\" array',\n 'into \".addNode(..., { ends: [\"node1\", \"node2\"] })\".',\n ].join(\"\\n\"),\n {\n lc_error_code: \"UNREACHABLE_NODE\",\n }\n );\n }\n }\n for (const target of allTargets) {\n if (target !== END && !(target in this.nodes)) {\n throw new Error(`Found edge ending at unknown node \\`${target}\\``);\n }\n }\n\n // validate interrupts\n if (interrupt) {\n for (const node of interrupt) {\n if (!(node in this.nodes)) {\n throw new Error(`Interrupt node \\`${node}\\` is not present`);\n }\n }\n }\n\n this.compiled = true;\n }\n}\n\nexport class CompiledGraph<\n N extends string,\n State = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n Update = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n ContextType extends Record<string, any> = Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n InputType = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n OutputType = any, // eslint-disable-line @typescript-eslint/no-explicit-any\n NodeReturnType = unknown,\n CommandType = unknown,\n StreamCustomType = any // eslint-disable-line @typescript-eslint/no-explicit-any\n> extends Pregel<\n Record<N | typeof START, PregelNode<State, Update>>,\n Record<N | typeof START | typeof END | string, BaseChannel>,\n ContextType & Record<string, any>, // eslint-disable-line @typescript-eslint/no-explicit-any\n InputType,\n OutputType,\n InputType,\n OutputType,\n NodeReturnType,\n CommandType,\n StreamCustomType\n> {\n declare \"~NodeType\": N;\n\n declare \"~NodeReturnType\": NodeReturnType;\n\n declare \"~RunInput\": Update;\n\n declare \"~RunOutput\": State;\n\n builder: Graph<N, State, Update>;\n\n constructor({\n builder,\n ...rest\n }: { builder: Graph<N, State, Update> } & PregelParams<\n Record<N | typeof START, PregelNode<State, Update>>,\n Record<N | typeof START | typeof END | string, BaseChannel>\n >) {\n super(rest);\n this.builder = builder;\n }\n\n attachNode(key: N, node: NodeSpec<State, Update>): void {\n this.channels[key] = new EphemeralValue();\n this.nodes[key] = new PregelNode({\n channels: [],\n triggers: [],\n metadata: node.metadata,\n subgraphs: node.subgraphs,\n ends: node.ends,\n })\n .pipe(node.runnable)\n .pipe(\n new ChannelWrite([{ channel: key, value: PASSTHROUGH }], [TAG_HIDDEN])\n );\n (this.streamChannels as N[]).push(key);\n }\n\n attachEdge(start: N | typeof START, end: N | typeof END): void {\n if (end === END) {\n if (start === START) {\n throw new Error(\"Cannot have an edge from START to END\");\n }\n this.nodes[start].writers.push(\n new ChannelWrite([{ channel: END, value: PASSTHROUGH }], [TAG_HIDDEN])\n );\n } else {\n this.nodes[end].triggers.push(start);\n (this.nodes[end].channels as string[]).push(start);\n }\n }\n\n attachBranch(\n start: N | typeof START,\n name: string,\n branch: Branch<State, N>\n ) {\n // add hidden start node\n if (start === START && !this.nodes[START]) {\n this.nodes[START] = Channel.subscribeTo(START, { tags: [TAG_HIDDEN] });\n }\n\n // attach branch writer\n this.nodes[start].pipe(\n branch.run((dests) => {\n const writes = dests.map((dest) => {\n if (_isSend(dest)) {\n return dest;\n }\n return {\n channel: dest === END ? END : `branch:${start}:${name}:${dest}`,\n value: PASSTHROUGH,\n };\n });\n return new ChannelWrite(writes, [TAG_HIDDEN]);\n })\n );\n\n // attach branch readers\n const ends = branch.ends\n ? Object.values(branch.ends)\n : (Object.keys(this.nodes) as N[]);\n for (const end of ends) {\n if (end !== END) {\n const channelName = `branch:${start}:${name}:${end}`;\n (this.channels as Record<string, BaseChannel>)[channelName] =\n new EphemeralValue();\n this.nodes[end].triggers.push(channelName);\n (this.nodes[end].channels as string[]).push(channelName);\n }\n }\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n */\n override async getGraphAsync(\n config?: RunnableConfig & { xray?: boolean | number }\n ): Promise<DrawableGraph> {\n const xray = config?.xray;\n const graph = new DrawableGraph();\n const startNodes: Record<string, DrawableGraphNode> = {\n [START]: graph.addNode({ schema: z.any() }, START),\n };\n const endNodes: Record<string, DrawableGraphNode> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let subgraphs: Record<string, CompiledGraph<any>> = {};\n if (xray) {\n subgraphs = Object.fromEntries(\n (await gatherIterator(this.getSubgraphsAsync())).filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (x): x is [string, CompiledGraph<any>] => isCompiledGraph(x[1])\n )\n );\n }\n\n function addEdge(\n start: string,\n end: string,\n label?: string,\n conditional = false\n ) {\n if (end === END && endNodes[END] === undefined) {\n endNodes[END] = graph.addNode({ schema: z.any() }, END);\n }\n if (startNodes[start] === undefined) {\n return;\n }\n if (endNodes[end] === undefined) {\n throw new Error(`End node ${end} not found!`);\n }\n return graph.addEdge(\n startNodes[start],\n endNodes[end],\n label !== end ? label : undefined,\n conditional\n );\n }\n\n for (const [key, nodeSpec] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n const displayKey = _escapeMermaidKeywords(key);\n const node = nodeSpec.runnable;\n const metadata = nodeSpec.metadata ?? {};\n if (\n this.interruptBefore?.includes(key) &&\n this.interruptAfter?.includes(key)\n ) {\n metadata.__interrupt = \"before,after\";\n } else if (this.interruptBefore?.includes(key)) {\n metadata.__interrupt = \"before\";\n } else if (this.interruptAfter?.includes(key)) {\n metadata.__interrupt = \"after\";\n }\n if (xray) {\n const newXrayValue = typeof xray === \"number\" ? xray - 1 : xray;\n const drawableSubgraph =\n subgraphs[key] !== undefined\n ? await subgraphs[key].getGraphAsync({\n ...config,\n xray: newXrayValue,\n })\n : node.getGraph(config);\n\n drawableSubgraph.trimFirstNode();\n drawableSubgraph.trimLastNode();\n\n if (Object.keys(drawableSubgraph.nodes).length > 1) {\n const [e, s] = graph.extend(drawableSubgraph, displayKey);\n if (e === undefined) {\n throw new Error(\n `Could not extend subgraph \"${key}\" due to missing entrypoint.`\n );\n }\n\n // TODO: Remove default name once we stop supporting core 0.2.0\n // eslint-disable-next-line no-inner-declarations\n function _isRunnableInterface(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n thing: any\n ): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n }\n // eslint-disable-next-line no-inner-declarations\n function _nodeDataStr(\n id: string | undefined,\n data: RunnableInterface | RunnableIOSchema\n ): string {\n if (id !== undefined && !isUuid(id)) {\n return id;\n } else if (_isRunnableInterface(data)) {\n try {\n let dataStr = data.getName();\n dataStr = dataStr.startsWith(\"Runnable\")\n ? dataStr.slice(\"Runnable\".length)\n : dataStr;\n return dataStr;\n } catch (error) {\n return data.getName();\n }\n } else {\n return data.name ?? \"UnknownSchema\";\n }\n }\n // TODO: Remove casts when we stop supporting core 0.2.0\n if (s !== undefined) {\n startNodes[displayKey] = {\n name: _nodeDataStr(s.id, s.data),\n ...s,\n } as DrawableGraphNode;\n }\n endNodes[displayKey] = {\n name: _nodeDataStr(e.id, e.data),\n ...e,\n } as DrawableGraphNode;\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n }\n const sortedEdges = [...this.builder.allEdges].sort(([a], [b]) => {\n if (a < b) {\n return -1;\n } else if (b > a) {\n return 1;\n } else {\n return 0;\n }\n });\n for (const [start, end] of sortedEdges) {\n addEdge(_escapeMermaidKeywords(start), _escapeMermaidKeywords(end));\n }\n for (const [start, branches] of Object.entries(this.builder.branches)) {\n const defaultEnds: Record<string, string> = {\n ...Object.fromEntries(\n Object.keys(this.builder.nodes)\n .filter((k) => k !== start)\n .map((k) => [_escapeMermaidKeywords(k), _escapeMermaidKeywords(k)])\n ),\n [END]: END,\n };\n for (const branch of Object.values(branches)) {\n let ends;\n if (branch.ends !== undefined) {\n ends = branch.ends;\n } else {\n ends = defaultEnds;\n }\n for (const [label, end] of Object.entries(ends)) {\n addEdge(\n _escapeMermaidKeywords(start),\n _escapeMermaidKeywords(end),\n label,\n true\n );\n }\n }\n }\n for (const [key, node] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n if (node.ends !== undefined) {\n for (const end of node.ends) {\n addEdge(\n _escapeMermaidKeywords(key),\n _escapeMermaidKeywords(end),\n undefined,\n true\n );\n }\n }\n }\n return graph;\n }\n\n /**\n * Returns a drawable representation of the computation graph.\n *\n * @deprecated Use getGraphAsync instead. The async method will be the default in the next minor core release.\n */\n override getGraph(\n config?: RunnableConfig & { xray?: boolean | number }\n ): DrawableGraph {\n const xray = config?.xray;\n const graph = new DrawableGraph();\n const startNodes: Record<string, DrawableGraphNode> = {\n [START]: graph.addNode(\n {\n schema: z.any(),\n },\n START\n ),\n };\n const endNodes: Record<string, DrawableGraphNode> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let subgraphs: Record<string, CompiledGraph<any>> = {};\n if (xray) {\n subgraphs = Object.fromEntries(\n gatherIteratorSync(this.getSubgraphs()).filter(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (x): x is [string, CompiledGraph<any>] => isCompiledGraph(x[1])\n )\n );\n }\n\n function addEdge(\n start: string,\n end: string,\n label?: string,\n conditional = false\n ) {\n if (end === END && endNodes[END] === undefined) {\n endNodes[END] = graph.addNode({ schema: z.any() }, END);\n }\n return graph.addEdge(\n startNodes[start],\n endNodes[end],\n label !== end ? label : undefined,\n conditional\n );\n }\n\n for (const [key, nodeSpec] of Object.entries(this.builder.nodes) as [\n N,\n NodeSpec<State, Update>\n ][]) {\n const displayKey = _escapeMermaidKeywords(key);\n const node = nodeSpec.runnable;\n const metadata = nodeSpec.metadata ?? {};\n if (\n this.interruptBefore?.includes(key) &&\n this.interruptAfter?.includes(key)\n ) {\n metadata.__interrupt = \"before,after\";\n } else if (this.interruptBefore?.includes(key)) {\n metadata.__interrupt = \"before\";\n } else if (this.interruptAfter?.includes(key)) {\n metadata.__interrupt = \"after\";\n }\n if (xray) {\n const newXrayValue = typeof xray === \"number\" ? xray - 1 : xray;\n const drawableSubgraph =\n subgraphs[key] !== undefined\n ? subgraphs[key].getGraph({\n ...config,\n xray: newXrayValue,\n })\n : node.getGraph(config);\n drawableSubgraph.trimFirstNode();\n drawableSubgraph.trimLastNode();\n if (Object.keys(drawableSubgraph.nodes).length > 1) {\n const [e, s] = graph.extend(drawableSubgraph, displayKey);\n if (e === undefined) {\n throw new Error(\n `Could not extend subgraph \"${key}\" due to missing entrypoint.`\n );\n }\n\n // TODO: Remove default name once we stop supporting core 0.2.0\n // eslint-disable-next-line no-inner-declarations\n function _isRunnableInterface(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n thing: any\n ): thing is RunnableInterface {\n return thing ? thing.lc_runnable : false;\n }\n // eslint-disable-next-line no-inner-declarations\n function _nodeDataStr(\n id: string | undefined,\n data: RunnableInterface | RunnableIOSchema\n ): string {\n if (id !== undefined && !isUuid(id)) {\n return id;\n } else if (_isRunnableInterface(data)) {\n try {\n let dataStr = data.getName();\n dataStr = dataStr.startsWith(\"Runnable\")\n ? dataStr.slice(\"Runnable\".length)\n : dataStr;\n return dataStr;\n } catch (error) {\n return data.getName();\n }\n } else {\n return data.name ?? \"UnknownSchema\";\n }\n }\n // TODO: Remove casts when we stop supporting core 0.2.0\n if (s !== undefined) {\n startNodes[displayKey] = {\n name: _nodeDataStr(s.id, s.data),\n ...s,\n } as DrawableGraphNode;\n }\n endNodes[displayKey] = {\n name: _nodeDataStr(e.id, e.data),\n ...e,\n } as DrawableGraphNode;\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n } else {\n // TODO: Remove when we stop supporting core 0.2.0\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const newNode = graph.addNode(node, displayKey, metadata);\n startNodes[displayKey] = newNode;\n endNodes[displayKey] = newNode;\n }\n }\n const sortedEdges = [...this.builder.allEdges].sort(([a], [b]) => {\n if (a < b) {\n return -1;\n } else if (b > a) {\n return 1;\n } else {\n return 0;\n }\n });\n for (const [start, end] of sortedEdges) {\n addEdge(_escapeMermaidKeywords(start), _escapeMermaidKeywords(end));\n }\n for (const [start, branches] of Object.entries(this.builder.branches)) {\n const defaultEnds: Record<string, string> = {\n ...Object.fromEntries(\n Object.keys(this.builder.nodes)\n .filter((k) => k !== start)\n .map((k) => [_escapeMermaidKeywords(k), _escapeMermaidKeywords(k)])\n ),\n [END]: END,\n };\n for (const branch of Object.values(branches)) {\n let ends;\n if (branch.ends !== undefined) {\n ends = branch.ends;\n } else {\n ends = defaultEnds;\n }\n for (const [label, end] of Object.entries(ends)) {\n addEdge(\n _escapeMermaidKeywords(start),\n _escapeMermaidKeywords(end),\n label,\n true\n );\n }\n }\n }\n return graph;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isCompiledGraph(x: unknown): x is CompiledGraph<any> {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (x as CompiledGraph<any>).attachNode === \"function\" &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n typeof (x as CompiledGraph<any>).attachEdge === \"function\"\n );\n}\n\nfunction _escapeMermaidKeywords(key: string) {\n if (key === \"subgraph\") {\n return `\"${key}\"`;\n }\n return key;\n}\n"],"mappings":";;;;;;;;;;;;;;AAsEA,IAAa,SAAb,MAIE;CACA;CAEA;CAEA,YAAY,SAA4D;AACtE,MAAIA,mCAAS,WAAW,QAAQ,KAAK,CACnC,MAAK,OAAO,QAAQ;MAEpB,MAAK,wDACH,QAAQ,KACT;AAEH,OAAK,OAAO,MAAM,QAAQ,QAAQ,QAAQ,GACtC,QAAQ,QAAQ,QAAQ,KAAK,MAAM;AACjC,OAAI,KAAK;AACT,UAAO;KACN,EAAE,CAAmC,GACxC,QAAQ;;CAGd,IACE,QAIA,QACA;AACA,SAAOC,2BAAa,eAClB,IAAIC,+BAAiB;GACnB,MAAM;GACN,OAAO;GACP,MAAM,OAAO,OAAW,WAAwB;AAC9C,QAAI;AACF,YAAO,MAAM,KAAK,OAAO,OAAO,QAAQ,QAAQ,OAAO;aAEhD,GAAQ;AAEf,SAAI,EAAE,SAASC,6BAAc,kBAC3B,SAAQ,KACN,qLAED;AAEH,WAAM;;;GAGX,CAAC,CACH;;CAGH,MAAM,OACJ,OACA,QACA,QAIA,QAEyB;EACzB,IAAI,SAAS,MAAM,KAAK,KAAK,OAC3B,SAAS,OAAO,OAAO,GAAG,OAC1B,OACD;AACD,MAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,UAAS,CAAC,OAAO;EAGnB,IAAI;AACJ,MAAI,KAAK,KACP,gBAAe,OAAO,KAAK,MAAOC,0BAAQ,EAAE,GAAG,IAAI,KAAK,KAAM,GAAI;MAElE,gBAAe;AAEjB,MAAI,aAAa,MAAM,SAAS,CAAC,KAAK,CACpC,OAAM,IAAI,MAAM,wDAAwD;AAE1E,MAAI,aAAa,OAAOA,0BAAQ,CAAC,MAAM,WAAW,OAAO,SAASC,sBAAI,CACpE,OAAM,IAAIC,kCAAmB,uCAAuC;AAGtE,SADoB,MAAM,OAAO,cAAc,OAAO,IAChC;;;AAqB1B,IAAa,QAAb,MAWE;CACA;CAEA;CAGA;CAEA;CAEA,WAAW;CAEX,cAAc;AACZ,OAAK,QAAQ,EAAE;AACf,OAAK,wBAAQ,IAAI,KAAK;AACtB,OAAK,WAAW,EAAE;;CAGpB,AAAU,eAAe,SAAuB;AAC9C,MAAI,KAAK,SACP,SAAQ,KAAK,QAAQ;;CAIzB,IAAI,WAAkC;AACpC,SAAO,KAAK;;CAmBd,QACE,GAAG,MAegC;EACnC,SAAS,gBACP,MAUA;AACA,UAAO,KAAK,UAAU,KAAK,OAAO,KAAK,OAAO;;EAGhD,MAAM,QACJ,gBAAgB,KAAK,GACjB,MAAM,QAAQ,KAAK,GAAG,GACpB,KAAK,KACL,OAAO,QAAQ,KAAK,GAAG,GACzB,CAAC;GAAC,KAAK;GAAI,KAAK;GAAI,KAAK;GAAG,CAAC;AAGnC,MAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MAAM,iCAAiC;AAGnD,OAAK,MAAM,CAAC,KAAK,QAAQ,YAAY,OAAO;AAC1C,QAAK,MAAM,gBAAgB,CACzBC,kDACAC,2CACD,CACC,KAAI,IAAI,SAAS,aAAa,CAC5B,OAAM,IAAI,MACR,IAAI,aAAa,6DAClB;AAGL,QAAK,eACH,6GACD;AAED,OAAI,OAAO,KAAK,MACd,OAAM,IAAI,MAAM,UAAU,IAAI,qBAAqB;AAErD,OAAI,QAAQH,sBACV,OAAM,IAAI,MAAM,UAAU,IAAI,iBAAiB;GAGjD,MAAM,4DAEJ,OACD;AAED,QAAK,MAAM,OAAuB;IAChC;IACA,UAAU,SAAS;IACnB,WAAWI,8BAAa,SAAS,GAAG,CAAC,SAAS,GAAG,SAAS;IAC1D,MAAM,SAAS;IAChB;;AAGH,SAAO;;CAGT,QAAQ,UAA4B,QAA8B;AAChE,OAAK,eACH,8GACD;AAED,MAAI,aAAaJ,sBACf,OAAM,IAAI,MAAM,6BAA6B;AAE/C,MAAI,WAAWK,wBACb,OAAM,IAAI,MAAM,8BAA8B;AAEhD,MACE,MAAM,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,UAAU,SAAS,IAC5D,EAAE,cAAc,MAEhB,OAAM,IAAI,MACR,0BAA0B,SAAS,uCACpC;AAGH,OAAK,MAAM,IAAI,CAAC,UAAU,OAAO,CAAC;AAElC,SAAO;;CAqBT,oBACE,QAGA,MAKA,SAKM;EACN,MAAM,UAIF,OAAO,WAAW,WAAW,SAAS;GAAE;GAAc;GAAO;GAAS;AAE1E,OAAK,eACH,8GACD;AACD,MAAI,CAACV,mCAAS,WAAW,QAAQ,KAAK,CACpC,SAAQ,wDACN,QAAQ,KACT;EAGH,MAAM,OACJ,QAAQ,KAAK,SAAS,KAAK,mBACvB,cACA,QAAQ,KAAK,SAAS;AAE5B,MAAI,KAAK,SAAS,QAAQ,WAAW,KAAK,SAAS,QAAQ,QAAQ,MACjE,OAAM,IAAI,MACR,eAAe,KAAK,gCAAgC,OAAO,IAC5D;AAGH,OAAK,SAAS,QAAQ,YAAY,EAAE;AACpC,OAAK,SAAS,QAAQ,QAAQ,QAAQ,IAAI,OAAO,QAAQ;AACzD,SAAO;;;;;CAMT,cAAc,KAAc;AAC1B,OAAK,eACH,uHACD;AAED,SAAO,KAAK,QAAQU,yBAAO,IAAI;;;;;CAMjC,eAAe,KAAc;AAC3B,OAAK,eACH,sHACD;AAED,SAAO,KAAK,QAAQ,KAAKL,sBAAI;;CAG/B,QAAQ,EACN,cACA,iBACA,gBACA,SAME,EAAE,EAAoB;AAExB,OAAK,SAAS,CACZ,GAAI,MAAM,QAAQ,gBAAgB,GAAG,kBAAkB,EAAE,EACzD,GAAI,MAAM,QAAQ,eAAe,GAAG,iBAAiB,EAAE,CACxD,CAAC;EAGF,MAAM,WAAW,IAAI,cAAc;GACjC,SAAS;GACT;GACA;GACA;GACA,cAAc;GACd,OAAO,EAAE;GACT,UAAU;KACPK,0BAAQ,IAAIC,wCAAgB;KAC5BN,wBAAM,IAAIM,wCAAgB;IAC5B;GACD,eAAeD;GACf,gBAAgBL;GAChB,gBAAgB,EAAE;GAClB,YAAY;GACZ;GACD,CAAC;AAGF,OAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAC/B,KAAK,MACN,CACC,UAAS,WAAW,KAAU,KAAK;AAErC,OAAK,MAAM,CAAC,OAAO,QAAQ,KAAK,MAC9B,UAAS,WAAW,OAAO,IAAI;AAEjC,OAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,KAAK,SAAS,CAC3D,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,SAAS,CACnD,UAAS,aAAa,OAAY,MAAM,OAAO;AAInD,SAAO,SAAS,UAAU;;CAG5B,SAAS,WAA4B;EAEnC,MAAM,aAAa,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC;AACrE,OAAK,MAAM,CAAC,UAAU,OAAO,QAAQ,KAAK,SAAS,CACjD,YAAW,IAAI,MAAM;AAIvB,OAAK,MAAM,UAAU,WACnB,KAAI,WAAWK,2BAAS,EAAE,UAAU,KAAK,OACvC,OAAM,IAAI,MAAM,yCAAyC,OAAO,IAAI;EAKxE,MAAM,aAAa,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,YAAY,OAAO,CAAC;AAC3E,OAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,KAAK,SAAS,CAC3D,MAAK,MAAM,UAAU,OAAO,OAAO,SAAS,CAC1C,KAAI,OAAO,QAAQ,KACjB,MAAK,MAAM,OAAO,OAAO,OAAO,OAAO,KAAK,CAC1C,YAAW,IAAI,IAAI;OAEhB;AACL,cAAW,IAAIL,sBAAI;AACnB,QAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,MAAM,CACxC,KAAI,SAAS,MACX,YAAW,IAAI,KAAK;;AAM9B,OAAK,MAAM,QAAQ,OAAO,OAAqB,KAAK,MAAM,CACxD,MAAK,MAAM,UAAU,KAAK,QAAQ,EAAE,CAClC,YAAW,IAAI,OAAO;AAI1B,OAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,MAAM,CACxC,KAAI,CAAC,WAAW,IAAI,KAAK,CACvB,OAAM,IAAIO,oCACR;GACE,UAAU,KAAK;GACf;GACA;GACA;GACA;GACD,CAAC,KAAK,KAAK,EACZ,EACE,eAAe,oBAChB,CACF;AAGL,OAAK,MAAM,UAAU,WACnB,KAAI,WAAWP,yBAAO,EAAE,UAAU,KAAK,OACrC,OAAM,IAAI,MAAM,uCAAuC,OAAO,IAAI;AAKtE,MAAI,WACF;QAAK,MAAM,QAAQ,UACjB,KAAI,EAAE,QAAQ,KAAK,OACjB,OAAM,IAAI,MAAM,oBAAoB,KAAK,mBAAmB;;AAKlE,OAAK,WAAW;;;AAIpB,IAAa,gBAAb,cAUUQ,4BAWR;CASA;CAEA,YAAY,EACV,SACA,GAAG,QAIF;AACD,QAAM,KAAK;AACX,OAAK,UAAU;;CAGjB,WAAW,KAAQ,MAAqC;AACtD,OAAK,SAAS,OAAO,IAAIF,wCAAgB;AACzC,OAAK,MAAM,OAAO,IAAIG,wBAAW;GAC/B,UAAU,EAAE;GACZ,UAAU,EAAE;GACZ,UAAU,KAAK;GACf,WAAW,KAAK;GAChB,MAAM,KAAK;GACZ,CAAC,CACC,KAAK,KAAK,SAAS,CACnB,KACC,IAAIb,2BAAa,CAAC;GAAE,SAAS;GAAK,OAAOc;GAAa,CAAC,EAAE,CAACC,6BAAW,CAAC,CACvE;AACH,EAAC,KAAK,eAAuB,KAAK,IAAI;;CAGxC,WAAW,OAAyB,KAA2B;AAC7D,MAAI,QAAQX,uBAAK;AACf,OAAI,UAAUK,wBACZ,OAAM,IAAI,MAAM,wCAAwC;AAE1D,QAAK,MAAM,OAAO,QAAQ,KACxB,IAAIT,2BAAa,CAAC;IAAE,SAASI;IAAK,OAAOU;IAAa,CAAC,EAAE,CAACC,6BAAW,CAAC,CACvE;SACI;AACL,QAAK,MAAM,KAAK,SAAS,KAAK,MAAM;AACpC,GAAC,KAAK,MAAM,KAAK,SAAsB,KAAK,MAAM;;;CAItD,aACE,OACA,MACA,QACA;AAEA,MAAI,UAAUN,2BAAS,CAAC,KAAK,MAAMA,yBACjC,MAAK,MAAMA,2BAASO,6BAAQ,YAAYP,yBAAO,EAAE,MAAM,CAACM,6BAAW,EAAE,CAAC;AAIxE,OAAK,MAAM,OAAO,KAChB,OAAO,KAAK,UAAU;AAUpB,UAAO,IAAIf,2BATI,MAAM,KAAK,SAAS;AACjC,QAAIG,0BAAQ,KAAK,CACf,QAAO;AAET,WAAO;KACL,SAAS,SAASC,wBAAMA,wBAAM,UAAU,MAAM,GAAG,KAAK,GAAG;KACzD,OAAOU;KACR;KACD,EAC8B,CAACC,6BAAW,CAAC;IAC7C,CACH;EAGD,MAAM,OAAO,OAAO,OAChB,OAAO,OAAO,OAAO,KAAK,GACzB,OAAO,KAAK,KAAK,MAAM;AAC5B,OAAK,MAAM,OAAO,KAChB,KAAI,QAAQX,uBAAK;GACf,MAAM,cAAc,UAAU,MAAM,GAAG,KAAK,GAAG;AAC/C,GAAC,KAAK,SAAyC,eAC7C,IAAIM,wCAAgB;AACtB,QAAK,MAAM,KAAK,SAAS,KAAK,YAAY;AAC1C,GAAC,KAAK,MAAM,KAAK,SAAsB,KAAK,YAAY;;;;;;CAQ9D,MAAe,cACb,QACwB;EACxB,MAAM,OAAO,QAAQ;EACrB,MAAM,QAAQ,IAAIO,uCAAe;EACjC,MAAM,aAAgD,GACnDR,0BAAQ,MAAM,QAAQ,EAAE,QAAQS,SAAE,KAAK,EAAE,EAAET,wBAAM,EACnD;EACD,MAAM,WAA8C,EAAE;EAEtD,IAAI,YAAgD,EAAE;AACtD,MAAI,KACF,aAAY,OAAO,aAChB,MAAMU,6BAAe,KAAK,mBAAmB,CAAC,EAAE,QAE9C,MAAyC,gBAAgB,EAAE,GAAG,CAChE,CACF;EAGH,SAAS,QACP,OACA,KACA,OACA,cAAc,OACd;AACA,OAAI,QAAQf,yBAAO,SAASA,2BAAS,OACnC,UAASA,yBAAO,MAAM,QAAQ,EAAE,QAAQc,SAAE,KAAK,EAAE,EAAEd,sBAAI;AAEzD,OAAI,WAAW,WAAW,OACxB;AAEF,OAAI,SAAS,SAAS,OACpB,OAAM,IAAI,MAAM,YAAY,IAAI,aAAa;AAE/C,UAAO,MAAM,QACX,WAAW,QACX,SAAS,MACT,UAAU,MAAM,QAAQ,QACxB,YACD;;AAGH,OAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,KAAK,QAAQ,MAAM,EAG3D;GACH,MAAM,aAAa,uBAAuB,IAAI;GAC9C,MAAM,OAAO,SAAS;GACtB,MAAM,WAAW,SAAS,YAAY,EAAE;AACxC,OACE,KAAK,iBAAiB,SAAS,IAAI,IACnC,KAAK,gBAAgB,SAAS,IAAI,CAElC,UAAS,cAAc;YACd,KAAK,iBAAiB,SAAS,IAAI,CAC5C,UAAS,cAAc;YACd,KAAK,gBAAgB,SAAS,IAAI,CAC3C,UAAS,cAAc;AAEzB,OAAI,MAAM;IACR,MAAM,eAAe,OAAO,SAAS,WAAW,OAAO,IAAI;IAC3D,MAAM,mBACJ,UAAU,SAAS,SACf,MAAM,UAAU,KAAK,cAAc;KACjC,GAAG;KACH,MAAM;KACP,CAAC,GACF,KAAK,SAAS,OAAO;AAE3B,qBAAiB,eAAe;AAChC,qBAAiB,cAAc;AAE/B,QAAI,OAAO,KAAK,iBAAiB,MAAM,CAAC,SAAS,GAAG;KAClD,MAAM,CAAC,GAAG,KAAK,MAAM,OAAO,kBAAkB,WAAW;AACzD,SAAI,MAAM,OACR,OAAM,IAAI,MACR,8BAA8B,IAAI,8BACnC;KAKH,SAAS,qBAEP,OAC4B;AAC5B,aAAO,QAAQ,MAAM,cAAc;;KAGrC,SAAS,aACP,IACA,MACQ;AACR,UAAI,OAAO,UAAa,oBAAQ,GAAG,CACjC,QAAO;eACE,qBAAqB,KAAK,CACnC,KAAI;OACF,IAAI,UAAU,KAAK,SAAS;AAC5B,iBAAU,QAAQ,WAAW,WAAW,GACpC,QAAQ,MAAM,EAAkB,GAChC;AACJ,cAAO;eACA,OAAO;AACd,cAAO,KAAK,SAAS;;UAGvB,QAAO,KAAK,QAAQ;;AAIxB,SAAI,MAAM,OACR,YAAW,cAAc;MACvB,MAAM,aAAa,EAAE,IAAI,EAAE,KAAK;MAChC,GAAG;MACJ;AAEH,cAAS,cAAc;MACrB,MAAM,aAAa,EAAE,IAAI,EAAE,KAAK;MAChC,GAAG;MACJ;WACI;KAIL,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY,SAAS;AACzD,gBAAW,cAAc;AACzB,cAAS,cAAc;;UAEpB;IAIL,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY,SAAS;AACzD,eAAW,cAAc;AACzB,aAAS,cAAc;;;EAG3B,MAAM,cAAc,CAAC,GAAG,KAAK,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;AAChE,OAAI,IAAI,EACN,QAAO;YACE,IAAI,EACb,QAAO;OAEP,QAAO;IAET;AACF,OAAK,MAAM,CAAC,OAAO,QAAQ,YACzB,SAAQ,uBAAuB,MAAM,EAAE,uBAAuB,IAAI,CAAC;AAErE,OAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,KAAK,QAAQ,SAAS,EAAE;GACrE,MAAM,cAAsC;IAC1C,GAAG,OAAO,YACR,OAAO,KAAK,KAAK,QAAQ,MAAM,CAC5B,QAAQ,MAAM,MAAM,MAAM,CAC1B,KAAK,MAAM,CAAC,uBAAuB,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC,CACtE;KACAA,wBAAMA;IACR;AACD,QAAK,MAAM,UAAU,OAAO,OAAO,SAAS,EAAE;IAC5C,IAAI;AACJ,QAAI,OAAO,SAAS,OAClB,QAAO,OAAO;QAEd,QAAO;AAET,SAAK,MAAM,CAAC,OAAO,QAAQ,OAAO,QAAQ,KAAK,CAC7C,SACE,uBAAuB,MAAM,EAC7B,uBAAuB,IAAI,EAC3B,OACA,KACD;;;AAIP,OAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,KAAK,QAAQ,MAAM,CAI1D,KAAI,KAAK,SAAS,OAChB,MAAK,MAAM,OAAO,KAAK,KACrB,SACE,uBAAuB,IAAI,EAC3B,uBAAuB,IAAI,EAC3B,QACA,KACD;AAIP,SAAO;;;;;;;CAQT,AAAS,SACP,QACe;EACf,MAAM,OAAO,QAAQ;EACrB,MAAM,QAAQ,IAAIa,uCAAe;EACjC,MAAM,aAAgD,GACnDR,0BAAQ,MAAM,QACb,EACE,QAAQS,SAAE,KAAK,EAChB,EACDT,wBACD,EACF;EACD,MAAM,WAA8C,EAAE;EAEtD,IAAI,YAAgD,EAAE;AACtD,MAAI,KACF,aAAY,OAAO,YACjBW,iCAAmB,KAAK,cAAc,CAAC,CAAC,QAErC,MAAyC,gBAAgB,EAAE,GAAG,CAChE,CACF;EAGH,SAAS,QACP,OACA,KACA,OACA,cAAc,OACd;AACA,OAAI,QAAQhB,yBAAO,SAASA,2BAAS,OACnC,UAASA,yBAAO,MAAM,QAAQ,EAAE,QAAQc,SAAE,KAAK,EAAE,EAAEd,sBAAI;AAEzD,UAAO,MAAM,QACX,WAAW,QACX,SAAS,MACT,UAAU,MAAM,QAAQ,QACxB,YACD;;AAGH,OAAK,MAAM,CAAC,KAAK,aAAa,OAAO,QAAQ,KAAK,QAAQ,MAAM,EAG3D;GACH,MAAM,aAAa,uBAAuB,IAAI;GAC9C,MAAM,OAAO,SAAS;GACtB,MAAM,WAAW,SAAS,YAAY,EAAE;AACxC,OACE,KAAK,iBAAiB,SAAS,IAAI,IACnC,KAAK,gBAAgB,SAAS,IAAI,CAElC,UAAS,cAAc;YACd,KAAK,iBAAiB,SAAS,IAAI,CAC5C,UAAS,cAAc;YACd,KAAK,gBAAgB,SAAS,IAAI,CAC3C,UAAS,cAAc;AAEzB,OAAI,MAAM;IACR,MAAM,eAAe,OAAO,SAAS,WAAW,OAAO,IAAI;IAC3D,MAAM,mBACJ,UAAU,SAAS,SACf,UAAU,KAAK,SAAS;KACtB,GAAG;KACH,MAAM;KACP,CAAC,GACF,KAAK,SAAS,OAAO;AAC3B,qBAAiB,eAAe;AAChC,qBAAiB,cAAc;AAC/B,QAAI,OAAO,KAAK,iBAAiB,MAAM,CAAC,SAAS,GAAG;KAClD,MAAM,CAAC,GAAG,KAAK,MAAM,OAAO,kBAAkB,WAAW;AACzD,SAAI,MAAM,OACR,OAAM,IAAI,MACR,8BAA8B,IAAI,8BACnC;KAKH,SAAS,qBAEP,OAC4B;AAC5B,aAAO,QAAQ,MAAM,cAAc;;KAGrC,SAAS,aACP,IACA,MACQ;AACR,UAAI,OAAO,UAAa,oBAAQ,GAAG,CACjC,QAAO;eACE,qBAAqB,KAAK,CACnC,KAAI;OACF,IAAI,UAAU,KAAK,SAAS;AAC5B,iBAAU,QAAQ,WAAW,WAAW,GACpC,QAAQ,MAAM,EAAkB,GAChC;AACJ,cAAO;eACA,OAAO;AACd,cAAO,KAAK,SAAS;;UAGvB,QAAO,KAAK,QAAQ;;AAIxB,SAAI,MAAM,OACR,YAAW,cAAc;MACvB,MAAM,aAAa,EAAE,IAAI,EAAE,KAAK;MAChC,GAAG;MACJ;AAEH,cAAS,cAAc;MACrB,MAAM,aAAa,EAAE,IAAI,EAAE,KAAK;MAChC,GAAG;MACJ;WACI;KAIL,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY,SAAS;AACzD,gBAAW,cAAc;AACzB,cAAS,cAAc;;UAEpB;IAIL,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY,SAAS;AACzD,eAAW,cAAc;AACzB,aAAS,cAAc;;;EAG3B,MAAM,cAAc,CAAC,GAAG,KAAK,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO;AAChE,OAAI,IAAI,EACN,QAAO;YACE,IAAI,EACb,QAAO;OAEP,QAAO;IAET;AACF,OAAK,MAAM,CAAC,OAAO,QAAQ,YACzB,SAAQ,uBAAuB,MAAM,EAAE,uBAAuB,IAAI,CAAC;AAErE,OAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,KAAK,QAAQ,SAAS,EAAE;GACrE,MAAM,cAAsC;IAC1C,GAAG,OAAO,YACR,OAAO,KAAK,KAAK,QAAQ,MAAM,CAC5B,QAAQ,MAAM,MAAM,MAAM,CAC1B,KAAK,MAAM,CAAC,uBAAuB,EAAE,EAAE,uBAAuB,EAAE,CAAC,CAAC,CACtE;KACAA,wBAAMA;IACR;AACD,QAAK,MAAM,UAAU,OAAO,OAAO,SAAS,EAAE;IAC5C,IAAI;AACJ,QAAI,OAAO,SAAS,OAClB,QAAO,OAAO;QAEd,QAAO;AAET,SAAK,MAAM,CAAC,OAAO,QAAQ,OAAO,QAAQ,KAAK,CAC7C,SACE,uBAAuB,MAAM,EAC7B,uBAAuB,IAAI,EAC3B,OACA,KACD;;;AAIP,SAAO;;;AAKX,SAAS,gBAAgB,GAAqC;AAC5D,QAEE,OAAQ,EAAyB,eAAe,cAEhD,OAAQ,EAAyB,eAAe;;AAIpD,SAAS,uBAAuB,KAAa;AAC3C,KAAI,QAAQ,WACV,QAAO,IAAI,IAAI;AAEjB,QAAO"}
@@ -1,9 +1,9 @@
1
1
  import { BaseChannel } from "../channels/base.cjs";
2
+ import { END, START, Send } from "../constants.cjs";
2
3
  import { LangGraphRunnableConfig, RunnableLike as RunnableLike$1 } from "../pregel/runnable_types.cjs";
3
4
  import { StateDefinition, StateType } from "./annotation.cjs";
4
5
  import { RunnableCallable } from "../utils.cjs";
5
6
  import { PregelNode } from "../pregel/read.cjs";
6
- import { END, START, Send } from "../constants.cjs";
7
7
  import { PregelParams } from "../pregel/types.cjs";
8
8
  import { Pregel } from "../pregel/index.cjs";
9
9
  import { All, BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
@@ -19,7 +19,7 @@ interface BranchOptions<IO, N extends string, CallOptions extends LangGraphRunna
19
19
  type BranchPathReturnValue = string | Send | (string | Send)[] | Promise<string | Send | (string | Send)[]>;
20
20
  type NodeAction<S, U, C extends StateDefinition> = RunnableLike$1<S, U extends object ? U & Record<string, any> : U, LangGraphRunnableConfig<StateType<C>>>;
21
21
  declare class Branch<IO, N extends string, CallOptions extends LangGraphRunnableConfig = LangGraphRunnableConfig> {
22
- path: Runnable<IO, BranchPathReturnValue, CallOptions>;
22
+ path: Runnable<IO, BranchPathReturnValue>;
23
23
  ends?: Record<string, N | typeof END>;
24
24
  constructor(options: Omit<BranchOptions<IO, N, CallOptions>, "source">);
25
25
  run(writer: (dests: (string | Send)[], config: LangGraphRunnableConfig) => Runnable | void | Promise<void>, reader?: (config: CallOptions) => IO): RunnableCallable<unknown, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.cts","names":[],"sources":["../../src/graph/graph.ts"],"mappings":"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"}
1
+ {"version":3,"file":"graph.d.cts","names":[],"sources":["../../src/graph/graph.ts"],"mappings":"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"}