@langchain/langgraph 1.0.0-alpha.0 → 1.0.0-alpha.1

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 (191) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/channels/any_value.cjs +46 -0
  3. package/dist/channels/any_value.cjs.map +1 -0
  4. package/dist/channels/any_value.d.cts +0 -2
  5. package/dist/channels/any_value.d.cts.map +1 -1
  6. package/dist/channels/any_value.d.ts +0 -2
  7. package/dist/channels/any_value.d.ts.map +1 -1
  8. package/dist/channels/any_value.js +46 -0
  9. package/dist/channels/any_value.js.map +1 -0
  10. package/dist/channels/base.cjs +3 -7
  11. package/dist/channels/base.cjs.map +1 -1
  12. package/dist/channels/base.d.cts +8 -2
  13. package/dist/channels/base.d.cts.map +1 -1
  14. package/dist/channels/base.d.ts +7 -2
  15. package/dist/channels/base.d.ts.map +1 -1
  16. package/dist/channels/base.js +3 -7
  17. package/dist/channels/base.js.map +1 -1
  18. package/dist/channels/dynamic_barrier_value.cjs +76 -0
  19. package/dist/channels/dynamic_barrier_value.cjs.map +1 -0
  20. package/dist/channels/dynamic_barrier_value.d.cts +0 -1
  21. package/dist/channels/dynamic_barrier_value.d.cts.map +1 -1
  22. package/dist/channels/dynamic_barrier_value.d.ts +0 -1
  23. package/dist/channels/dynamic_barrier_value.d.ts.map +1 -1
  24. package/dist/channels/dynamic_barrier_value.js +76 -0
  25. package/dist/channels/dynamic_barrier_value.js.map +1 -0
  26. package/dist/channels/ephemeral_value.cjs +0 -2
  27. package/dist/channels/ephemeral_value.cjs.map +1 -1
  28. package/dist/channels/ephemeral_value.d.cts +0 -1
  29. package/dist/channels/ephemeral_value.d.cts.map +1 -1
  30. package/dist/channels/ephemeral_value.d.ts +0 -1
  31. package/dist/channels/ephemeral_value.d.ts.map +1 -1
  32. package/dist/channels/ephemeral_value.js +0 -2
  33. package/dist/channels/ephemeral_value.js.map +1 -1
  34. package/dist/channels/index.cjs +19 -0
  35. package/dist/channels/index.d.cts +9 -0
  36. package/dist/channels/index.d.ts +9 -0
  37. package/dist/channels/index.js +7 -1
  38. package/dist/channels/last_value.cjs +0 -1
  39. package/dist/channels/last_value.cjs.map +1 -1
  40. package/dist/channels/last_value.d.cts +14 -2
  41. package/dist/channels/last_value.d.cts.map +1 -1
  42. package/dist/channels/last_value.d.ts +14 -2
  43. package/dist/channels/last_value.d.ts.map +1 -1
  44. package/dist/channels/last_value.js +0 -1
  45. package/dist/channels/last_value.js.map +1 -1
  46. package/dist/channels/named_barrier_value.cjs +1 -1
  47. package/dist/channels/named_barrier_value.cjs.map +1 -1
  48. package/dist/channels/named_barrier_value.d.cts +15 -2
  49. package/dist/channels/named_barrier_value.d.cts.map +1 -1
  50. package/dist/channels/named_barrier_value.d.ts +15 -2
  51. package/dist/channels/named_barrier_value.d.ts.map +1 -1
  52. package/dist/channels/named_barrier_value.js +1 -2
  53. package/dist/channels/named_barrier_value.js.map +1 -1
  54. package/dist/channels/topic.cjs +1 -1
  55. package/dist/channels/topic.cjs.map +1 -1
  56. package/dist/channels/topic.d.cts +7 -1
  57. package/dist/channels/topic.d.cts.map +1 -1
  58. package/dist/channels/topic.d.ts +7 -1
  59. package/dist/channels/topic.d.ts.map +1 -1
  60. package/dist/channels/topic.js +1 -1
  61. package/dist/channels/topic.js.map +1 -1
  62. package/dist/constants.cjs +4 -1
  63. package/dist/constants.cjs.map +1 -1
  64. package/dist/constants.d.cts +5 -4
  65. package/dist/constants.d.cts.map +1 -1
  66. package/dist/constants.d.ts +5 -4
  67. package/dist/constants.d.ts.map +1 -1
  68. package/dist/constants.js +4 -1
  69. package/dist/constants.js.map +1 -1
  70. package/dist/errors.cjs +2 -1
  71. package/dist/errors.cjs.map +1 -1
  72. package/dist/errors.d.cts +2 -1
  73. package/dist/errors.d.cts.map +1 -1
  74. package/dist/errors.d.ts +2 -1
  75. package/dist/errors.d.ts.map +1 -1
  76. package/dist/errors.js +2 -1
  77. package/dist/errors.js.map +1 -1
  78. package/dist/func/index.cjs +3 -0
  79. package/dist/func/index.cjs.map +1 -1
  80. package/dist/func/index.d.cts +5 -1
  81. package/dist/func/index.d.cts.map +1 -1
  82. package/dist/func/index.d.ts +5 -1
  83. package/dist/func/index.d.ts.map +1 -1
  84. package/dist/func/index.js +3 -0
  85. package/dist/func/index.js.map +1 -1
  86. package/dist/graph/annotation.d.cts +1 -1
  87. package/dist/graph/annotation.d.ts +1 -1
  88. package/dist/graph/graph.cjs +5 -5
  89. package/dist/graph/graph.cjs.map +1 -1
  90. package/dist/graph/graph.d.cts +4 -2
  91. package/dist/graph/graph.d.cts.map +1 -1
  92. package/dist/graph/graph.d.ts +4 -2
  93. package/dist/graph/graph.d.ts.map +1 -1
  94. package/dist/graph/graph.js +1 -1
  95. package/dist/graph/graph.js.map +1 -1
  96. package/dist/graph/index.js +1 -1
  97. package/dist/graph/messages_annotation.d.cts +1 -1
  98. package/dist/graph/messages_annotation.d.cts.map +1 -1
  99. package/dist/graph/messages_annotation.d.ts +1 -1
  100. package/dist/graph/state.cjs +15 -18
  101. package/dist/graph/state.cjs.map +1 -1
  102. package/dist/graph/state.d.cts +40 -25
  103. package/dist/graph/state.d.cts.map +1 -1
  104. package/dist/graph/state.d.ts +39 -24
  105. package/dist/graph/state.d.ts.map +1 -1
  106. package/dist/graph/state.js +17 -19
  107. package/dist/graph/state.js.map +1 -1
  108. package/dist/graph/zod/plugin.cjs +1 -1
  109. package/dist/graph/zod/plugin.js +3 -3
  110. package/dist/graph/zod/plugin.js.map +1 -1
  111. package/dist/graph/zod/zod-registry.d.cts.map +1 -1
  112. package/dist/graph/zod/zod-registry.d.ts.map +1 -1
  113. package/dist/index.cjs +3 -2
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.d.cts +10 -9
  116. package/dist/index.d.ts +10 -9
  117. package/dist/index.js +4 -3
  118. package/dist/index.js.map +1 -1
  119. package/dist/interrupt.cjs +1 -1
  120. package/dist/interrupt.cjs.map +1 -1
  121. package/dist/interrupt.js +1 -1
  122. package/dist/interrupt.js.map +1 -1
  123. package/dist/prebuilt/agent_executor.d.cts +1 -1
  124. package/dist/prebuilt/agent_executor.d.cts.map +1 -1
  125. package/dist/prebuilt/agent_executor.d.ts +1 -1
  126. package/dist/prebuilt/agent_executor.d.ts.map +1 -1
  127. package/dist/prebuilt/react_agent_executor.cjs +1 -1
  128. package/dist/prebuilt/react_agent_executor.cjs.map +1 -1
  129. package/dist/prebuilt/react_agent_executor.d.cts +5 -5
  130. package/dist/prebuilt/react_agent_executor.d.cts.map +1 -1
  131. package/dist/prebuilt/react_agent_executor.d.ts +4 -4
  132. package/dist/prebuilt/react_agent_executor.d.ts.map +1 -1
  133. package/dist/prebuilt/react_agent_executor.js +1 -1
  134. package/dist/prebuilt/react_agent_executor.js.map +1 -1
  135. package/dist/pregel/algo.cjs +36 -6
  136. package/dist/pregel/algo.cjs.map +1 -1
  137. package/dist/pregel/algo.d.cts +1 -1
  138. package/dist/pregel/algo.d.cts.map +1 -1
  139. package/dist/pregel/algo.d.ts +1 -1
  140. package/dist/pregel/algo.d.ts.map +1 -1
  141. package/dist/pregel/algo.js +37 -7
  142. package/dist/pregel/algo.js.map +1 -1
  143. package/dist/pregel/index.cjs +8 -4
  144. package/dist/pregel/index.cjs.map +1 -1
  145. package/dist/pregel/index.d.cts +8 -6
  146. package/dist/pregel/index.d.cts.map +1 -1
  147. package/dist/pregel/index.d.ts +8 -6
  148. package/dist/pregel/index.d.ts.map +1 -1
  149. package/dist/pregel/index.js +8 -4
  150. package/dist/pregel/index.js.map +1 -1
  151. package/dist/pregel/loop.cjs +7 -4
  152. package/dist/pregel/loop.cjs.map +1 -1
  153. package/dist/pregel/loop.js +7 -4
  154. package/dist/pregel/loop.js.map +1 -1
  155. package/dist/pregel/remote.d.cts +2 -2
  156. package/dist/pregel/remote.d.cts.map +1 -1
  157. package/dist/pregel/remote.d.ts +2 -2
  158. package/dist/pregel/remote.d.ts.map +1 -1
  159. package/dist/pregel/runnable_types.d.cts +34 -10
  160. package/dist/pregel/runnable_types.d.cts.map +1 -1
  161. package/dist/pregel/runnable_types.d.ts +34 -10
  162. package/dist/pregel/runnable_types.d.ts.map +1 -1
  163. package/dist/pregel/stream.cjs +3 -3
  164. package/dist/pregel/stream.cjs.map +1 -1
  165. package/dist/pregel/stream.js +3 -3
  166. package/dist/pregel/stream.js.map +1 -1
  167. package/dist/pregel/types.cjs.map +1 -1
  168. package/dist/pregel/types.d.cts +10 -7
  169. package/dist/pregel/types.d.cts.map +1 -1
  170. package/dist/pregel/types.d.ts +10 -7
  171. package/dist/pregel/types.d.ts.map +1 -1
  172. package/dist/pregel/types.js.map +1 -1
  173. package/dist/pregel/utils/config.cjs +1 -0
  174. package/dist/pregel/utils/config.cjs.map +1 -1
  175. package/dist/pregel/utils/config.js +1 -0
  176. package/dist/pregel/utils/config.js.map +1 -1
  177. package/dist/ui/stream.cjs.map +1 -1
  178. package/dist/ui/stream.js.map +1 -1
  179. package/dist/web.cjs +4 -5
  180. package/dist/web.d.cts +8 -8
  181. package/dist/web.d.ts +8 -8
  182. package/dist/web.js +3 -3
  183. package/dist/writer.cjs +15 -0
  184. package/dist/writer.cjs.map +1 -0
  185. package/dist/writer.d.cts +5 -0
  186. package/dist/writer.d.cts.map +1 -0
  187. package/dist/writer.d.ts +5 -0
  188. package/dist/writer.d.ts.map +1 -0
  189. package/dist/writer.js +14 -0
  190. package/dist/writer.js.map +1 -0
  191. package/package.json +18 -8
@@ -1 +1 @@
1
- {"version":3,"file":"react_agent_executor.js","names":["promptRunnable: Runnable","boundToolName: string | undefined","model","nextSteps: unknown[]","toolClasses: (ClientTool | ServerTool)[]","toolNode: ToolNode","cachedStaticModel: Runnable | null","modelWithTools: LanguageModelLike","llm","model: LanguageModelLike","schema","prompt","modelRunnable: Runnable","entrypoint: \"agent\" | \"pre_model_hook\"","inputSchema: AnnotationRoot<ToAnnotationRoot<A>[\"spec\"]> | undefined","toolMessageIds: Set<string>","lastAiMessage: AIMessage | undefined"],"sources":["../../src/prebuilt/react_agent_executor.ts"],"sourcesContent":["import {\n BaseChatModel,\n BindToolsInput,\n} from \"@langchain/core/language_models/chat_models\";\nimport { LanguageModelLike } from \"@langchain/core/language_models/base\";\nimport {\n BaseMessage,\n BaseMessageLike,\n isAIMessage,\n isBaseMessage,\n isToolMessage,\n SystemMessage,\n type AIMessage,\n} from \"@langchain/core/messages\";\nimport {\n Runnable,\n RunnableConfig,\n RunnableLambda,\n RunnableToolLike,\n RunnableSequence,\n RunnableBinding,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { DynamicTool, StructuredToolInterface } from \"@langchain/core/tools\";\nimport type {\n InteropZodObject,\n InteropZodType,\n} from \"@langchain/core/utils/types\";\nimport {\n All,\n BaseCheckpointSaver,\n BaseStore,\n} from \"@langchain/langgraph-checkpoint\";\n\nimport {\n StateGraph,\n type CompiledStateGraph,\n AnnotationRoot,\n} from \"../graph/index.js\";\nimport { MessagesAnnotation } from \"../graph/messages_annotation.js\";\nimport { ToolNode } from \"./tool_node.js\";\nimport { LangGraphRunnableConfig, Runtime } from \"../pregel/runnable_types.js\";\nimport { Annotation } from \"../graph/annotation.js\";\nimport { Messages, messagesStateReducer } from \"../graph/message.js\";\nimport { END, Send, START } from \"../constants.js\";\nimport { withAgentName } from \"./agentName.js\";\nimport type { InteropZodToStateDefinition } from \"../graph/zod/meta.js\";\n\n/**\n * @deprecated `AgentState` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { AgentState } from \"langchain\";`\n */\nexport interface AgentState<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseType extends Record<string, any> = Record<string, any>\n> {\n messages: BaseMessage[];\n // TODO: This won't be set until we\n // implement managed values in LangGraphJS\n // Will be useful for inserting a message on\n // graph recursion end\n // is_last_step: boolean;\n structuredResponse: StructuredResponseType;\n}\n\nexport type N = typeof START | \"agent\" | \"tools\";\n\ntype StructuredResponseSchemaOptions<StructuredResponseType> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: InteropZodType<StructuredResponseType> | Record<string, any>;\n prompt?: string;\n\n strict?: boolean;\n [key: string]: unknown;\n};\n\nfunction _convertMessageModifierToPrompt(\n messageModifier: MessageModifier\n): Prompt {\n // Handle string or SystemMessage\n if (\n typeof messageModifier === \"string\" ||\n (isBaseMessage(messageModifier) && messageModifier._getType() === \"system\")\n ) {\n return messageModifier;\n }\n\n // Handle callable function\n if (typeof messageModifier === \"function\") {\n return async (state: typeof MessagesAnnotation.State) =>\n messageModifier(state.messages);\n }\n\n // Handle Runnable\n if (Runnable.isRunnable(messageModifier)) {\n return RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => state.messages\n ).pipe(messageModifier);\n }\n\n throw new Error(\n `Unexpected type for messageModifier: ${typeof messageModifier}`\n );\n}\n\nconst PROMPT_RUNNABLE_NAME = \"prompt\";\n\nfunction _getPromptRunnable(prompt?: Prompt): Runnable {\n let promptRunnable: Runnable;\n\n if (prompt == null) {\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => state.messages\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (typeof prompt === \"string\") {\n const systemMessage = new SystemMessage(prompt);\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => {\n return [systemMessage, ...(state.messages ?? [])];\n }\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (isBaseMessage(prompt) && prompt._getType() === \"system\") {\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => [prompt, ...state.messages]\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (typeof prompt === \"function\") {\n promptRunnable = RunnableLambda.from(prompt).withConfig({\n runName: PROMPT_RUNNABLE_NAME,\n });\n } else if (Runnable.isRunnable(prompt)) {\n promptRunnable = prompt;\n } else {\n throw new Error(`Got unexpected type for 'prompt': ${typeof prompt}`);\n }\n\n return promptRunnable;\n}\n\ntype ServerTool = Record<string, unknown>;\ntype ClientTool = StructuredToolInterface | DynamicTool | RunnableToolLike;\n\nfunction isClientTool(tool: ClientTool | ServerTool): tool is ClientTool {\n return Runnable.isRunnable(tool);\n}\n\nfunction _getPrompt(\n prompt?: Prompt,\n stateModifier?: CreateReactAgentParams[\"stateModifier\"],\n messageModifier?: CreateReactAgentParams[\"messageModifier\"]\n): Runnable {\n // Check if multiple modifiers exist\n const definedCount = [prompt, stateModifier, messageModifier].filter(\n (x) => x != null\n ).length;\n if (definedCount > 1) {\n throw new Error(\n \"Expected only one of prompt, stateModifier, or messageModifier, got multiple values\"\n );\n }\n\n let finalPrompt = prompt;\n if (stateModifier != null) {\n finalPrompt = stateModifier;\n } else if (messageModifier != null) {\n finalPrompt = _convertMessageModifierToPrompt(messageModifier);\n }\n\n return _getPromptRunnable(finalPrompt);\n}\n\nfunction _isBaseChatModel(model: LanguageModelLike): model is BaseChatModel {\n return (\n \"invoke\" in model &&\n typeof model.invoke === \"function\" &&\n \"_modelType\" in model\n );\n}\n\ninterface ConfigurableModelInterface {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _queuedMethodOperations: Record<string, any>;\n _model: () => Promise<BaseChatModel>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _isConfigurableModel(model: any): model is ConfigurableModelInterface {\n return (\n \"_queuedMethodOperations\" in model &&\n \"_model\" in model &&\n typeof model._model === \"function\"\n );\n}\n\nfunction _isChatModelWithBindTools(\n llm: LanguageModelLike\n): llm is BaseChatModel & Required<Pick<BaseChatModel, \"bindTools\">> {\n if (!_isBaseChatModel(llm)) return false;\n return \"bindTools\" in llm && typeof llm.bindTools === \"function\";\n}\n\nexport async function _shouldBindTools(\n llm: LanguageModelLike,\n tools: (ClientTool | ServerTool)[]\n): Promise<boolean> {\n // If model is a RunnableSequence, find a RunnableBinding or BaseChatModel in its steps\n let model = llm;\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n ) || model;\n }\n\n if (_isConfigurableModel(model)) {\n model = await model._model();\n }\n\n // If not a RunnableBinding, we should bind tools\n if (!RunnableBinding.isRunnableBinding(model)) {\n return true;\n }\n\n let boundTools = (() => {\n // check if model.kwargs contain the tools key\n if (\n model.kwargs != null &&\n typeof model.kwargs === \"object\" &&\n \"tools\" in model.kwargs &&\n Array.isArray(model.kwargs.tools)\n ) {\n return (model.kwargs.tools ?? null) as BindToolsInput[] | null;\n }\n\n // Some models can bind the tools via `withConfig()` instead of `bind()`\n if (\n model.config != null &&\n typeof model.config === \"object\" &&\n \"tools\" in model.config &&\n Array.isArray(model.config.tools)\n ) {\n return (model.config.tools ?? null) as BindToolsInput[] | null;\n }\n\n return null;\n })();\n\n // google-style\n if (\n boundTools != null &&\n boundTools.length === 1 &&\n \"functionDeclarations\" in boundTools[0]\n ) {\n boundTools = boundTools[0].functionDeclarations;\n }\n\n // If no tools in kwargs, we should bind tools\n if (boundTools == null) return true;\n\n // Check if tools count matches\n if (tools.length !== boundTools.length) {\n throw new Error(\n \"Number of tools in the model.bindTools() and tools passed to createReactAgent must match\"\n );\n }\n\n const toolNames = new Set<string>(\n tools.flatMap((tool) => (isClientTool(tool) ? tool.name : []))\n );\n\n const boundToolNames = new Set<string>();\n\n for (const boundTool of boundTools) {\n let boundToolName: string | undefined;\n\n // OpenAI-style tool\n if (\"type\" in boundTool && boundTool.type === \"function\") {\n boundToolName = boundTool.function.name;\n }\n // Anthropic or Google-style tool\n else if (\"name\" in boundTool) {\n boundToolName = boundTool.name;\n }\n // Bedrock-style tool\n else if (\"toolSpec\" in boundTool && \"name\" in boundTool.toolSpec) {\n boundToolName = boundTool.toolSpec.name;\n }\n // unknown tool type so we'll ignore it\n else {\n continue;\n }\n\n if (boundToolName) {\n boundToolNames.add(boundToolName);\n }\n }\n\n const missingTools = [...toolNames].filter((x) => !boundToolNames.has(x));\n if (missingTools.length > 0) {\n throw new Error(\n `Missing tools '${missingTools}' in the model.bindTools().` +\n `Tools in the model.bindTools() must match the tools passed to createReactAgent.`\n );\n }\n\n return false;\n}\n\nconst _simpleBindTools = (\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[]\n) => {\n if (_isChatModelWithBindTools(llm)) {\n return llm.bindTools(toolClasses);\n }\n\n if (\n RunnableBinding.isRunnableBinding(llm) &&\n _isChatModelWithBindTools(llm.bound)\n ) {\n const newBound = llm.bound.bindTools(toolClasses);\n\n if (RunnableBinding.isRunnableBinding(newBound)) {\n return new RunnableBinding({\n bound: newBound.bound,\n config: { ...llm.config, ...newBound.config },\n kwargs: { ...llm.kwargs, ...newBound.kwargs },\n configFactories: newBound.configFactories ?? llm.configFactories,\n });\n }\n\n return new RunnableBinding({\n bound: newBound,\n config: llm.config,\n kwargs: llm.kwargs,\n configFactories: llm.configFactories,\n });\n }\n\n return null;\n};\n\nexport async function _bindTools(\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[]\n) {\n const model = _simpleBindTools(llm, toolClasses);\n if (model) return model;\n\n if (_isConfigurableModel(llm)) {\n const model = _simpleBindTools(await llm._model(), toolClasses);\n if (model) return model;\n }\n\n if (RunnableSequence.isRunnableSequence(llm)) {\n const modelStep = llm.steps.findIndex(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n );\n\n if (modelStep >= 0) {\n const model = _simpleBindTools(llm.steps[modelStep], toolClasses);\n if (model) {\n const nextSteps: unknown[] = llm.steps.slice();\n nextSteps.splice(modelStep, 1, model);\n\n return RunnableSequence.from(\n nextSteps as [RunnableLike, ...RunnableLike[], RunnableLike]\n );\n }\n }\n }\n\n throw new Error(`llm ${llm} must define bindTools method.`);\n}\n\nexport async function _getModel(\n llm: LanguageModelLike | ConfigurableModelInterface\n): Promise<LanguageModelLike> {\n // If model is a RunnableSequence, find a RunnableBinding or BaseChatModel in its steps\n let model = llm;\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n ) || model;\n }\n\n if (_isConfigurableModel(model)) {\n model = await model._model();\n }\n\n // Get the underlying model from a RunnableBinding\n if (RunnableBinding.isRunnableBinding(model)) {\n model = model.bound;\n }\n\n if (!_isBaseChatModel(model)) {\n throw new Error(\n `Expected \\`llm\\` to be a ChatModel or RunnableBinding (e.g. llm.bind_tools(...)) with invoke() and generate() methods, got ${model.constructor.name}`\n );\n }\n\n return model;\n}\n\nexport type Prompt =\n | SystemMessage\n | string\n | ((\n state: typeof MessagesAnnotation.State,\n config: LangGraphRunnableConfig\n ) => BaseMessageLike[])\n | ((\n state: typeof MessagesAnnotation.State,\n config: LangGraphRunnableConfig\n ) => Promise<BaseMessageLike[]>)\n | Runnable;\n\n/** @deprecated Use Prompt instead. */\nexport type StateModifier = Prompt;\n\n/** @deprecated Use Prompt instead. */\nexport type MessageModifier =\n | SystemMessage\n | string\n | ((messages: BaseMessage[]) => BaseMessage[])\n | ((messages: BaseMessage[]) => Promise<BaseMessage[]>)\n | Runnable;\n\nexport const createReactAgentAnnotation = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>\n>() =>\n Annotation.Root({\n messages: Annotation<BaseMessage[], Messages>({\n reducer: messagesStateReducer,\n default: () => [],\n }),\n structuredResponse: Annotation<T>,\n });\n\ntype WithStateGraphNodes<K extends string, Graph> = Graph extends StateGraph<\n infer SD,\n infer S,\n infer U,\n infer N,\n infer I,\n infer O,\n infer C\n>\n ? StateGraph<SD, S, U, N | K, I, O, C>\n : never;\n\nconst PreHookAnnotation = Annotation.Root({\n llmInputMessages: Annotation<BaseMessage[], Messages>({\n reducer: (_, update) => messagesStateReducer([], update),\n default: () => [],\n }),\n});\n\ntype PreHookAnnotation = typeof PreHookAnnotation;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyAnnotationRoot = AnnotationRoot<any>;\n\ntype ToAnnotationRoot<A extends AnyAnnotationRoot | InteropZodObject> =\n A extends AnyAnnotationRoot\n ? A\n : A extends InteropZodObject\n ? AnnotationRoot<InteropZodToStateDefinition<A>>\n : never;\n\n/**\n * @deprecated `CreateReactAgentParams` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { CreateReactAgentParams } from \"langchain\";`\n */\nexport type CreateReactAgentParams<\n A extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseType extends Record<string, any> = Record<string, any>,\n C extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot\n> = {\n /** The chat model that can utilize OpenAI-style tool calling. */\n llm:\n | LanguageModelLike\n | ((\n state: ToAnnotationRoot<A>[\"State\"] & PreHookAnnotation[\"State\"],\n runtime: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => Promise<LanguageModelLike> | LanguageModelLike);\n\n /** A list of tools or a ToolNode. */\n tools: ToolNode | (ServerTool | ClientTool)[];\n\n /**\n * @deprecated Use prompt instead.\n */\n messageModifier?: MessageModifier;\n\n /**\n * @deprecated Use prompt instead.\n */\n stateModifier?: StateModifier;\n\n /**\n * An optional prompt for the LLM. This takes full graph state BEFORE the LLM is called and prepares the input to LLM.\n *\n * Can take a few different forms:\n *\n * - str: This is converted to a SystemMessage and added to the beginning of the list of messages in state[\"messages\"].\n * - SystemMessage: this is added to the beginning of the list of messages in state[\"messages\"].\n * - Function: This function should take in full graph state and the output is then passed to the language model.\n * - Runnable: This runnable should take in full graph state and the output is then passed to the language model.\n *\n * Note:\n * Prior to `v0.2.46`, the prompt was set using `stateModifier` / `messagesModifier` parameters.\n * This is now deprecated and will be removed in a future release.\n */\n prompt?: Prompt;\n\n /**\n * Additional state schema for the agent.\n */\n stateSchema?: A;\n\n /**\n * An optional schema for the context.\n */\n contextSchema?: C;\n /** An optional checkpoint saver to persist the agent's state. */\n checkpointSaver?: BaseCheckpointSaver | boolean;\n /** An optional checkpoint saver to persist the agent's state. Alias of \"checkpointSaver\". */\n checkpointer?: BaseCheckpointSaver | boolean;\n /** An optional list of node names to interrupt before running. */\n interruptBefore?: N[] | All;\n /** An optional list of node names to interrupt after running. */\n interruptAfter?: N[] | All;\n store?: BaseStore;\n /**\n * An optional schema for the final agent output.\n *\n * If provided, output will be formatted to match the given schema and returned in the 'structuredResponse' state key.\n * If not provided, `structuredResponse` will not be present in the output state.\n *\n * Can be passed in as:\n * - Zod schema\n * - JSON schema\n * - { prompt, schema }, where schema is one of the above.\n * The prompt will be used together with the model that is being used to generate the structured response.\n *\n * @remarks\n * **Important**: `responseFormat` requires the model to support `.withStructuredOutput()`.\n *\n * **Note**: The graph will make a separate call to the LLM to generate the structured response after the agent loop is finished.\n * This is not the only strategy to get structured responses, see more options in [this guide](https://langchain-ai.github.io/langgraph/how-tos/react-agent-structured-output/).\n */\n responseFormat?:\n | InteropZodType<StructuredResponseType>\n | StructuredResponseSchemaOptions<StructuredResponseType>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>;\n\n /**\n * An optional name for the agent.\n */\n name?: string;\n\n /**\n * An optional description for the agent.\n * This can be used to describe the agent to the underlying supervisor LLM.\n */\n description?: string | undefined;\n\n /**\n * Use to specify how to expose the agent name to the underlying supervisor LLM.\n\n - undefined: Relies on the LLM provider {@link AIMessage#name}. Currently, only OpenAI supports this.\n - `\"inline\"`: Add the agent name directly into the content field of the {@link AIMessage} using XML-style tags.\n Example: `\"How can I help you\"` -> `\"<name>agent_name</name><content>How can I help you?</content>\"`\n */\n includeAgentName?: \"inline\" | undefined;\n\n /**\n * An optional node to add before the `agent` node (i.e., the node that calls the LLM).\n * Useful for managing long message histories (e.g., message trimming, summarization, etc.).\n */\n preModelHook?: RunnableLike<\n ToAnnotationRoot<A>[\"State\"] & PreHookAnnotation[\"State\"],\n ToAnnotationRoot<A>[\"Update\"] & PreHookAnnotation[\"Update\"],\n LangGraphRunnableConfig\n >;\n\n /**\n * An optional node to add after the `agent` node (i.e., the node that calls the LLM).\n * Useful for implementing human-in-the-loop, guardrails, validation, or other post-processing.\n */\n postModelHook?: RunnableLike<\n ToAnnotationRoot<A>[\"State\"],\n ToAnnotationRoot<A>[\"Update\"],\n LangGraphRunnableConfig\n >;\n\n /**\n * Determines the version of the graph to create.\n *\n * Can be one of\n * - `\"v1\"`: The tool node processes a single message. All tool calls in the message are\n * executed in parallel within the tool node.\n * - `\"v2\"`: The tool node processes a single tool call. Tool calls are distributed across\n * multiple instances of the tool node using the Send API.\n *\n * @default `\"v1\"`\n */\n version?: \"v1\" | \"v2\";\n};\n\n/**\n * @deprecated `createReactAgent` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { createReactAgent } from \"langchain\";`\n *\n * Creates a StateGraph agent that relies on a chat model utilizing tool calling.\n *\n * @example\n * ```ts\n * import { ChatOpenAI } from \"@langchain/openai\";\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n * import { createReactAgent } from \"@langchain/langgraph/prebuilt\";\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * });\n *\n * const getWeather = tool((input) => {\n * if ([\"sf\", \"san francisco\"].includes(input.location.toLowerCase())) {\n * return \"It's 60 degrees and foggy.\";\n * } else {\n * return \"It's 90 degrees and sunny.\";\n * }\n * }, {\n * name: \"get_weather\",\n * description: \"Call to get the current weather.\",\n * schema: z.object({\n * location: z.string().describe(\"Location to get the weather for.\"),\n * })\n * })\n *\n * const agent = createReactAgent({ llm: model, tools: [getWeather] });\n *\n * const inputs = {\n * messages: [{ role: \"user\", content: \"what is the weather in SF?\" }],\n * };\n *\n * const stream = await agent.stream(inputs, { streamMode: \"values\" });\n *\n * for await (const { messages } of stream) {\n * console.log(messages);\n * }\n * // Returns the messages in the state at each step of execution\n * ```\n */\nexport function createReactAgent<\n A extends AnyAnnotationRoot | InteropZodObject = typeof MessagesAnnotation,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseFormat extends Record<string, any> = Record<string, any>,\n C extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot\n>(\n params: CreateReactAgentParams<A, StructuredResponseFormat, C>\n): CompiledStateGraph<\n ToAnnotationRoot<A>[\"State\"],\n ToAnnotationRoot<A>[\"Update\"],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n typeof MessagesAnnotation.spec & ToAnnotationRoot<A>[\"spec\"],\n ReturnType<\n typeof createReactAgentAnnotation<StructuredResponseFormat>\n >[\"spec\"] &\n ToAnnotationRoot<A>[\"spec\"]\n> {\n const {\n llm,\n tools,\n messageModifier,\n stateModifier,\n prompt,\n stateSchema,\n contextSchema,\n checkpointSaver,\n checkpointer,\n interruptBefore,\n interruptAfter,\n store,\n responseFormat,\n preModelHook,\n postModelHook,\n name,\n description,\n version = \"v1\",\n includeAgentName,\n } = params;\n\n let toolClasses: (ClientTool | ServerTool)[];\n\n let toolNode: ToolNode;\n if (!Array.isArray(tools)) {\n toolClasses = tools.tools;\n toolNode = tools;\n } else {\n toolClasses = tools;\n toolNode = new ToolNode(toolClasses.filter(isClientTool));\n }\n\n let cachedStaticModel: Runnable | null = null;\n\n const _getStaticModel = async (llm: LanguageModelLike): Promise<Runnable> => {\n if (cachedStaticModel) return cachedStaticModel;\n\n let modelWithTools: LanguageModelLike;\n if (await _shouldBindTools(llm, toolClasses)) {\n modelWithTools = await _bindTools(llm, toolClasses);\n } else {\n modelWithTools = llm;\n }\n\n const promptRunnable = _getPrompt(prompt, stateModifier, messageModifier);\n const modelRunnable =\n includeAgentName === \"inline\"\n ? withAgentName(modelWithTools, includeAgentName)\n : modelWithTools;\n\n cachedStaticModel = promptRunnable.pipe(modelRunnable);\n return cachedStaticModel;\n };\n\n const _getDynamicModel = async (\n llm: (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n runtime: LangGraphRunnableConfig\n ) => Promise<LanguageModelLike> | LanguageModelLike,\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: LangGraphRunnableConfig\n ) => {\n const model = await llm(state, config);\n\n return _getPrompt(prompt, stateModifier, messageModifier).pipe(\n includeAgentName === \"inline\"\n ? withAgentName(model, includeAgentName)\n : model\n );\n };\n\n // If any of the tools are configured to return_directly after running,\n // our graph needs to check if these were called\n const shouldReturnDirect = new Set(\n toolClasses\n .filter(isClientTool)\n .filter((tool) => \"returnDirect\" in tool && tool.returnDirect)\n .map((tool) => tool.name)\n );\n\n function getModelInputState(\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"]\n ): Omit<AgentState<StructuredResponseFormat>, \"llmInputMessages\"> {\n const { messages, llmInputMessages, ...rest } = state;\n if (llmInputMessages != null && llmInputMessages.length > 0) {\n return { messages: llmInputMessages, ...rest };\n }\n return { messages, ...rest };\n }\n\n const generateStructuredResponse = async (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: RunnableConfig\n ) => {\n if (responseFormat == null) {\n throw new Error(\n \"Attempted to generate structured output with no passed response schema. Please contact us for help.\"\n );\n }\n const messages = [...state.messages];\n let modelWithStructuredOutput;\n\n const model: LanguageModelLike =\n typeof llm === \"function\"\n ? await llm(state, config)\n : await _getModel(llm);\n\n if (!_isBaseChatModel(model)) {\n throw new Error(\n `Expected \\`llm\\` to be a ChatModel with .withStructuredOutput() method, got ${model.constructor.name}`\n );\n }\n\n if (typeof responseFormat === \"object\" && \"schema\" in responseFormat) {\n const { prompt, schema, ...options } =\n responseFormat as StructuredResponseSchemaOptions<StructuredResponseFormat>;\n\n modelWithStructuredOutput = model.withStructuredOutput(schema, options);\n if (prompt != null) {\n messages.unshift(new SystemMessage({ content: prompt }));\n }\n } else {\n modelWithStructuredOutput = model.withStructuredOutput(responseFormat);\n }\n\n const response = await modelWithStructuredOutput.invoke(messages, config);\n return { structuredResponse: response };\n };\n\n const callModel = async (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: RunnableConfig\n ) => {\n // NOTE: we're dynamically creating the model runnable here\n // to ensure that we can validate ConfigurableModel properly\n const modelRunnable: Runnable =\n typeof llm === \"function\"\n ? await _getDynamicModel(llm, state, config)\n : await _getStaticModel(llm);\n\n // TODO: Auto-promote streaming.\n const response = (await modelRunnable.invoke(\n getModelInputState(state),\n config\n )) as BaseMessage;\n // add agent name to the AIMessage\n // TODO: figure out if we can avoid mutating the message directly\n response.name = name;\n response.lc_kwargs.name = name;\n return { messages: [response] };\n };\n\n const schema =\n stateSchema ?? createReactAgentAnnotation<StructuredResponseFormat>();\n\n const workflow = new StateGraph(\n schema as AnyAnnotationRoot,\n contextSchema\n ).addNode(\"tools\", toolNode);\n\n if (!(\"messages\" in workflow._schemaDefinition)) {\n throw new Error(\"Missing required `messages` key in state schema.\");\n }\n\n const allNodeWorkflows = workflow as WithStateGraphNodes<\n | \"pre_model_hook\"\n | \"post_model_hook\"\n | \"generate_structured_response\"\n | \"agent\",\n typeof workflow\n >;\n\n const conditionalMap = <T extends string>(map: Record<string, T | null>) => {\n return Object.fromEntries(\n Object.entries(map).filter(([_, v]) => v != null) as [string, T][]\n );\n };\n\n let entrypoint: \"agent\" | \"pre_model_hook\" = \"agent\";\n let inputSchema: AnnotationRoot<ToAnnotationRoot<A>[\"spec\"]> | undefined;\n if (preModelHook != null) {\n allNodeWorkflows\n .addNode(\"pre_model_hook\", preModelHook)\n .addEdge(\"pre_model_hook\", \"agent\");\n entrypoint = \"pre_model_hook\";\n\n inputSchema = Annotation.Root({\n ...workflow._schemaDefinition,\n ...PreHookAnnotation.spec,\n });\n } else {\n entrypoint = \"agent\";\n }\n\n allNodeWorkflows\n .addNode(\"agent\", callModel, { input: inputSchema })\n .addEdge(START, entrypoint);\n\n if (postModelHook != null) {\n allNodeWorkflows\n .addNode(\"post_model_hook\", postModelHook)\n .addEdge(\"agent\", \"post_model_hook\")\n .addConditionalEdges(\n \"post_model_hook\",\n (state: AgentState<StructuredResponseFormat>) => {\n const { messages } = state;\n\n const toolMessageIds: Set<string> = new Set(\n messages.filter(isToolMessage).map((msg) => msg.tool_call_id)\n );\n\n let lastAiMessage: AIMessage | undefined;\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const message = messages[i];\n if (isAIMessage(message)) {\n lastAiMessage = message;\n break;\n }\n }\n\n const pendingToolCalls =\n lastAiMessage?.tool_calls?.filter(\n (i) => i.id == null || !toolMessageIds.has(i.id)\n ) ?? [];\n\n const lastMessage = messages.at(-1);\n if (pendingToolCalls.length > 0) {\n if (version === \"v2\") {\n return pendingToolCalls.map(\n (toolCall) =>\n new Send(\"tools\", { ...state, lg_tool_call: toolCall })\n );\n }\n return \"tools\";\n }\n\n if (lastMessage && isToolMessage(lastMessage)) return entrypoint;\n if (responseFormat != null) return \"generate_structured_response\";\n return END;\n },\n conditionalMap({\n tools: \"tools\",\n [entrypoint]: entrypoint,\n generate_structured_response:\n responseFormat != null ? \"generate_structured_response\" : null,\n [END]: responseFormat != null ? null : END,\n })\n );\n }\n\n if (responseFormat !== undefined) {\n workflow\n .addNode(\"generate_structured_response\", generateStructuredResponse)\n .addEdge(\"generate_structured_response\", END);\n }\n\n if (postModelHook == null) {\n allNodeWorkflows.addConditionalEdges(\n \"agent\",\n (state: AgentState<StructuredResponseFormat>) => {\n const { messages } = state;\n const lastMessage = messages[messages.length - 1];\n\n // if there's no function call, we finish\n if (!isAIMessage(lastMessage) || !lastMessage.tool_calls?.length) {\n if (responseFormat != null) return \"generate_structured_response\";\n return END;\n }\n\n // there are function calls, we continue\n if (version === \"v2\") {\n return lastMessage.tool_calls.map(\n (toolCall) =>\n new Send(\"tools\", { ...state, lg_tool_call: toolCall })\n );\n }\n\n return \"tools\";\n },\n conditionalMap({\n tools: \"tools\",\n generate_structured_response:\n responseFormat != null ? \"generate_structured_response\" : null,\n [END]: responseFormat != null ? null : END,\n })\n );\n }\n\n if (shouldReturnDirect.size > 0) {\n allNodeWorkflows.addConditionalEdges(\n \"tools\",\n (state: AgentState<StructuredResponseFormat>) => {\n // Check the last consecutive tool calls\n for (let i = state.messages.length - 1; i >= 0; i -= 1) {\n const message = state.messages[i];\n if (!isToolMessage(message)) break;\n\n // Check if this tool is configured to return directly\n if (\n message.name !== undefined &&\n shouldReturnDirect.has(message.name)\n ) {\n return END;\n }\n }\n\n return entrypoint;\n },\n conditionalMap({ [entrypoint]: entrypoint, [END]: END })\n );\n } else {\n allNodeWorkflows.addEdge(\"tools\", entrypoint);\n }\n\n return allNodeWorkflows.compile({\n checkpointer: checkpointer ?? checkpointSaver,\n interruptBefore,\n interruptAfter,\n store,\n name,\n description,\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"react_agent_executor.js","names":["promptRunnable: Runnable","boundToolName: string | undefined","model","nextSteps: unknown[]","toolClasses: (ClientTool | ServerTool)[]","toolNode: ToolNode","cachedStaticModel: Runnable | null","modelWithTools: LanguageModelLike","llm","model: LanguageModelLike","schema","prompt","modelRunnable: Runnable","entrypoint: \"agent\" | \"pre_model_hook\"","inputSchema: AnnotationRoot<ToAnnotationRoot<A>[\"spec\"]> | undefined","toolMessageIds: Set<string>","lastAiMessage: AIMessage | undefined"],"sources":["../../src/prebuilt/react_agent_executor.ts"],"sourcesContent":["import {\n BaseChatModel,\n BindToolsInput,\n} from \"@langchain/core/language_models/chat_models\";\nimport { LanguageModelLike } from \"@langchain/core/language_models/base\";\nimport {\n BaseMessage,\n BaseMessageLike,\n isAIMessage,\n isBaseMessage,\n isToolMessage,\n SystemMessage,\n type AIMessage,\n} from \"@langchain/core/messages\";\nimport {\n Runnable,\n RunnableLambda,\n RunnableToolLike,\n RunnableSequence,\n RunnableBinding,\n type RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { DynamicTool, StructuredToolInterface } from \"@langchain/core/tools\";\nimport type {\n InteropZodObject,\n InteropZodType,\n} from \"@langchain/core/utils/types\";\nimport {\n All,\n BaseCheckpointSaver,\n BaseStore,\n} from \"@langchain/langgraph-checkpoint\";\n\nimport {\n StateGraph,\n type CompiledStateGraph,\n AnnotationRoot,\n} from \"../graph/index.js\";\nimport { MessagesAnnotation } from \"../graph/messages_annotation.js\";\nimport { ToolNode } from \"./tool_node.js\";\nimport { LangGraphRunnableConfig, Runtime } from \"../pregel/runnable_types.js\";\nimport { Annotation } from \"../graph/annotation.js\";\nimport { Messages, messagesStateReducer } from \"../graph/message.js\";\nimport { END, Send, START } from \"../constants.js\";\nimport { withAgentName } from \"./agentName.js\";\nimport type { InteropZodToStateDefinition } from \"../graph/zod/meta.js\";\n\n/**\n * @deprecated `AgentState` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { AgentState } from \"langchain\";`\n */\nexport interface AgentState<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseType extends Record<string, any> = Record<string, any>\n> {\n messages: BaseMessage[];\n // TODO: This won't be set until we\n // implement managed values in LangGraphJS\n // Will be useful for inserting a message on\n // graph recursion end\n // is_last_step: boolean;\n structuredResponse: StructuredResponseType;\n}\n\nexport type N = typeof START | \"agent\" | \"tools\";\n\ntype StructuredResponseSchemaOptions<StructuredResponseType> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: InteropZodType<StructuredResponseType> | Record<string, any>;\n prompt?: string;\n\n strict?: boolean;\n [key: string]: unknown;\n};\n\nfunction _convertMessageModifierToPrompt(\n messageModifier: MessageModifier\n): Prompt {\n // Handle string or SystemMessage\n if (\n typeof messageModifier === \"string\" ||\n (isBaseMessage(messageModifier) && messageModifier._getType() === \"system\")\n ) {\n return messageModifier;\n }\n\n // Handle callable function\n if (typeof messageModifier === \"function\") {\n return async (state: typeof MessagesAnnotation.State) =>\n messageModifier(state.messages);\n }\n\n // Handle Runnable\n if (Runnable.isRunnable(messageModifier)) {\n return RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => state.messages\n ).pipe(messageModifier);\n }\n\n throw new Error(\n `Unexpected type for messageModifier: ${typeof messageModifier}`\n );\n}\n\nconst PROMPT_RUNNABLE_NAME = \"prompt\";\n\nfunction _getPromptRunnable(prompt?: Prompt): Runnable {\n let promptRunnable: Runnable;\n\n if (prompt == null) {\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => state.messages\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (typeof prompt === \"string\") {\n const systemMessage = new SystemMessage(prompt);\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => {\n return [systemMessage, ...(state.messages ?? [])];\n }\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (isBaseMessage(prompt) && prompt._getType() === \"system\") {\n promptRunnable = RunnableLambda.from(\n (state: typeof MessagesAnnotation.State) => [prompt, ...state.messages]\n ).withConfig({ runName: PROMPT_RUNNABLE_NAME });\n } else if (typeof prompt === \"function\") {\n promptRunnable = RunnableLambda.from(prompt).withConfig({\n runName: PROMPT_RUNNABLE_NAME,\n });\n } else if (Runnable.isRunnable(prompt)) {\n promptRunnable = prompt;\n } else {\n throw new Error(`Got unexpected type for 'prompt': ${typeof prompt}`);\n }\n\n return promptRunnable;\n}\n\ntype ServerTool = Record<string, unknown>;\ntype ClientTool = StructuredToolInterface | DynamicTool | RunnableToolLike;\n\nfunction isClientTool(tool: ClientTool | ServerTool): tool is ClientTool {\n return Runnable.isRunnable(tool);\n}\n\nfunction _getPrompt(\n prompt?: Prompt,\n stateModifier?: CreateReactAgentParams[\"stateModifier\"],\n messageModifier?: CreateReactAgentParams[\"messageModifier\"]\n): Runnable {\n // Check if multiple modifiers exist\n const definedCount = [prompt, stateModifier, messageModifier].filter(\n (x) => x != null\n ).length;\n if (definedCount > 1) {\n throw new Error(\n \"Expected only one of prompt, stateModifier, or messageModifier, got multiple values\"\n );\n }\n\n let finalPrompt = prompt;\n if (stateModifier != null) {\n finalPrompt = stateModifier;\n } else if (messageModifier != null) {\n finalPrompt = _convertMessageModifierToPrompt(messageModifier);\n }\n\n return _getPromptRunnable(finalPrompt);\n}\n\nfunction _isBaseChatModel(model: LanguageModelLike): model is BaseChatModel {\n return (\n \"invoke\" in model &&\n typeof model.invoke === \"function\" &&\n \"_modelType\" in model\n );\n}\n\ninterface ConfigurableModelInterface {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _queuedMethodOperations: Record<string, any>;\n _model: () => Promise<BaseChatModel>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _isConfigurableModel(model: any): model is ConfigurableModelInterface {\n return (\n \"_queuedMethodOperations\" in model &&\n \"_model\" in model &&\n typeof model._model === \"function\"\n );\n}\n\nfunction _isChatModelWithBindTools(\n llm: LanguageModelLike\n): llm is BaseChatModel & Required<Pick<BaseChatModel, \"bindTools\">> {\n if (!_isBaseChatModel(llm)) return false;\n return \"bindTools\" in llm && typeof llm.bindTools === \"function\";\n}\n\nexport async function _shouldBindTools(\n llm: LanguageModelLike,\n tools: (ClientTool | ServerTool)[]\n): Promise<boolean> {\n // If model is a RunnableSequence, find a RunnableBinding or BaseChatModel in its steps\n let model = llm;\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n ) || model;\n }\n\n if (_isConfigurableModel(model)) {\n model = await model._model();\n }\n\n // If not a RunnableBinding, we should bind tools\n if (!RunnableBinding.isRunnableBinding(model)) {\n return true;\n }\n\n let boundTools = (() => {\n // check if model.kwargs contain the tools key\n if (\n model.kwargs != null &&\n typeof model.kwargs === \"object\" &&\n \"tools\" in model.kwargs &&\n Array.isArray(model.kwargs.tools)\n ) {\n return (model.kwargs.tools ?? null) as BindToolsInput[] | null;\n }\n\n // Some models can bind the tools via `withConfig()` instead of `bind()`\n if (\n model.config != null &&\n typeof model.config === \"object\" &&\n \"tools\" in model.config &&\n Array.isArray(model.config.tools)\n ) {\n return (model.config.tools ?? null) as BindToolsInput[] | null;\n }\n\n return null;\n })();\n\n // google-style\n if (\n boundTools != null &&\n boundTools.length === 1 &&\n \"functionDeclarations\" in boundTools[0]\n ) {\n boundTools = boundTools[0].functionDeclarations;\n }\n\n // If no tools in kwargs, we should bind tools\n if (boundTools == null) return true;\n\n // Check if tools count matches\n if (tools.length !== boundTools.length) {\n throw new Error(\n \"Number of tools in the model.bindTools() and tools passed to createReactAgent must match\"\n );\n }\n\n const toolNames = new Set<string>(\n tools.flatMap((tool) => (isClientTool(tool) ? tool.name : []))\n );\n\n const boundToolNames = new Set<string>();\n\n for (const boundTool of boundTools) {\n let boundToolName: string | undefined;\n\n // OpenAI-style tool\n if (\"type\" in boundTool && boundTool.type === \"function\") {\n boundToolName = boundTool.function.name;\n }\n // Anthropic or Google-style tool\n else if (\"name\" in boundTool) {\n boundToolName = boundTool.name;\n }\n // Bedrock-style tool\n else if (\"toolSpec\" in boundTool && \"name\" in boundTool.toolSpec) {\n boundToolName = boundTool.toolSpec.name;\n }\n // unknown tool type so we'll ignore it\n else {\n continue;\n }\n\n if (boundToolName) {\n boundToolNames.add(boundToolName);\n }\n }\n\n const missingTools = [...toolNames].filter((x) => !boundToolNames.has(x));\n if (missingTools.length > 0) {\n throw new Error(\n `Missing tools '${missingTools}' in the model.bindTools().` +\n `Tools in the model.bindTools() must match the tools passed to createReactAgent.`\n );\n }\n\n return false;\n}\n\nconst _simpleBindTools = (\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[]\n) => {\n if (_isChatModelWithBindTools(llm)) {\n return llm.bindTools(toolClasses);\n }\n\n if (\n RunnableBinding.isRunnableBinding(llm) &&\n _isChatModelWithBindTools(llm.bound)\n ) {\n const newBound = llm.bound.bindTools(toolClasses);\n\n if (RunnableBinding.isRunnableBinding(newBound)) {\n return new RunnableBinding({\n bound: newBound.bound,\n config: { ...llm.config, ...newBound.config },\n kwargs: { ...llm.kwargs, ...newBound.kwargs },\n configFactories: newBound.configFactories ?? llm.configFactories,\n });\n }\n\n return new RunnableBinding({\n bound: newBound,\n config: llm.config,\n kwargs: llm.kwargs,\n configFactories: llm.configFactories,\n });\n }\n\n return null;\n};\n\nexport async function _bindTools(\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[]\n) {\n const model = _simpleBindTools(llm, toolClasses);\n if (model) return model;\n\n if (_isConfigurableModel(llm)) {\n const model = _simpleBindTools(await llm._model(), toolClasses);\n if (model) return model;\n }\n\n if (RunnableSequence.isRunnableSequence(llm)) {\n const modelStep = llm.steps.findIndex(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n );\n\n if (modelStep >= 0) {\n const model = _simpleBindTools(llm.steps[modelStep], toolClasses);\n if (model) {\n const nextSteps: unknown[] = llm.steps.slice();\n nextSteps.splice(modelStep, 1, model);\n\n return RunnableSequence.from(\n nextSteps as [RunnableLike, ...RunnableLike[], RunnableLike]\n );\n }\n }\n }\n\n throw new Error(`llm ${llm} must define bindTools method.`);\n}\n\nexport async function _getModel(\n llm: LanguageModelLike | ConfigurableModelInterface\n): Promise<LanguageModelLike> {\n // If model is a RunnableSequence, find a RunnableBinding or BaseChatModel in its steps\n let model = llm;\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find(\n (step) =>\n RunnableBinding.isRunnableBinding(step) ||\n _isBaseChatModel(step) ||\n _isConfigurableModel(step)\n ) || model;\n }\n\n if (_isConfigurableModel(model)) {\n model = await model._model();\n }\n\n // Get the underlying model from a RunnableBinding\n if (RunnableBinding.isRunnableBinding(model)) {\n model = model.bound;\n }\n\n if (!_isBaseChatModel(model)) {\n throw new Error(\n `Expected \\`llm\\` to be a ChatModel or RunnableBinding (e.g. llm.bind_tools(...)) with invoke() and generate() methods, got ${model.constructor.name}`\n );\n }\n\n return model;\n}\n\nexport type Prompt =\n | SystemMessage\n | string\n | ((\n state: typeof MessagesAnnotation.State,\n config: LangGraphRunnableConfig\n ) => BaseMessageLike[])\n | ((\n state: typeof MessagesAnnotation.State,\n config: LangGraphRunnableConfig\n ) => Promise<BaseMessageLike[]>)\n | Runnable;\n\n/** @deprecated Use Prompt instead. */\nexport type StateModifier = Prompt;\n\n/** @deprecated Use Prompt instead. */\nexport type MessageModifier =\n | SystemMessage\n | string\n | ((messages: BaseMessage[]) => BaseMessage[])\n | ((messages: BaseMessage[]) => Promise<BaseMessage[]>)\n | Runnable;\n\nexport const createReactAgentAnnotation = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Record<string, any> = Record<string, any>\n>() =>\n Annotation.Root({\n messages: Annotation<BaseMessage[], Messages>({\n reducer: messagesStateReducer,\n default: () => [],\n }),\n structuredResponse: Annotation<T>,\n });\n\ntype WithStateGraphNodes<K extends string, Graph> = Graph extends StateGraph<\n infer SD,\n infer S,\n infer U,\n infer N,\n infer I,\n infer O,\n infer C\n>\n ? StateGraph<SD, S, U, N | K, I, O, C>\n : never;\n\nconst PreHookAnnotation = Annotation.Root({\n llmInputMessages: Annotation<BaseMessage[], Messages>({\n reducer: (_, update) => messagesStateReducer([], update),\n default: () => [],\n }),\n});\n\ntype PreHookAnnotation = typeof PreHookAnnotation;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyAnnotationRoot = AnnotationRoot<any>;\n\ntype ToAnnotationRoot<A extends AnyAnnotationRoot | InteropZodObject> =\n A extends AnyAnnotationRoot\n ? A\n : A extends InteropZodObject\n ? AnnotationRoot<InteropZodToStateDefinition<A>>\n : never;\n\n/**\n * @deprecated `CreateReactAgentParams` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { CreateAgentParams } from \"langchain\";`\n */\nexport type CreateReactAgentParams<\n A extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseType extends Record<string, any> = Record<string, any>,\n C extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot\n> = {\n /** The chat model that can utilize OpenAI-style tool calling. */\n llm:\n | LanguageModelLike\n | ((\n state: ToAnnotationRoot<A>[\"State\"] & PreHookAnnotation[\"State\"],\n runtime: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => Promise<LanguageModelLike> | LanguageModelLike);\n\n /** A list of tools or a ToolNode. */\n tools: ToolNode | (ServerTool | ClientTool)[];\n\n /**\n * @deprecated Use prompt instead.\n */\n messageModifier?: MessageModifier;\n\n /**\n * @deprecated Use prompt instead.\n */\n stateModifier?: StateModifier;\n\n /**\n * An optional prompt for the LLM. This takes full graph state BEFORE the LLM is called and prepares the input to LLM.\n *\n * Can take a few different forms:\n *\n * - str: This is converted to a SystemMessage and added to the beginning of the list of messages in state[\"messages\"].\n * - SystemMessage: this is added to the beginning of the list of messages in state[\"messages\"].\n * - Function: This function should take in full graph state and the output is then passed to the language model.\n * - Runnable: This runnable should take in full graph state and the output is then passed to the language model.\n *\n * Note:\n * Prior to `v0.2.46`, the prompt was set using `stateModifier` / `messagesModifier` parameters.\n * This is now deprecated and will be removed in a future release.\n */\n prompt?: Prompt;\n\n /**\n * Additional state schema for the agent.\n */\n stateSchema?: A;\n\n /**\n * An optional schema for the context.\n */\n contextSchema?: C;\n /** An optional checkpoint saver to persist the agent's state. */\n checkpointSaver?: BaseCheckpointSaver | boolean;\n /** An optional checkpoint saver to persist the agent's state. Alias of \"checkpointSaver\". */\n checkpointer?: BaseCheckpointSaver | boolean;\n /** An optional list of node names to interrupt before running. */\n interruptBefore?: N[] | All;\n /** An optional list of node names to interrupt after running. */\n interruptAfter?: N[] | All;\n store?: BaseStore;\n /**\n * An optional schema for the final agent output.\n *\n * If provided, output will be formatted to match the given schema and returned in the 'structuredResponse' state key.\n * If not provided, `structuredResponse` will not be present in the output state.\n *\n * Can be passed in as:\n * - Zod schema\n * - JSON schema\n * - { prompt, schema }, where schema is one of the above.\n * The prompt will be used together with the model that is being used to generate the structured response.\n *\n * @remarks\n * **Important**: `responseFormat` requires the model to support `.withStructuredOutput()`.\n *\n * **Note**: The graph will make a separate call to the LLM to generate the structured response after the agent loop is finished.\n * This is not the only strategy to get structured responses, see more options in [this guide](https://langchain-ai.github.io/langgraph/how-tos/react-agent-structured-output/).\n */\n responseFormat?:\n | InteropZodType<StructuredResponseType>\n | StructuredResponseSchemaOptions<StructuredResponseType>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n | Record<string, any>;\n\n /**\n * An optional name for the agent.\n */\n name?: string;\n\n /**\n * An optional description for the agent.\n * This can be used to describe the agent to the underlying supervisor LLM.\n */\n description?: string | undefined;\n\n /**\n * Use to specify how to expose the agent name to the underlying supervisor LLM.\n\n - undefined: Relies on the LLM provider {@link AIMessage#name}. Currently, only OpenAI supports this.\n - `\"inline\"`: Add the agent name directly into the content field of the {@link AIMessage} using XML-style tags.\n Example: `\"How can I help you\"` -> `\"<name>agent_name</name><content>How can I help you?</content>\"`\n */\n includeAgentName?: \"inline\" | undefined;\n\n /**\n * An optional node to add before the `agent` node (i.e., the node that calls the LLM).\n * Useful for managing long message histories (e.g., message trimming, summarization, etc.).\n */\n preModelHook?: RunnableLike<\n ToAnnotationRoot<A>[\"State\"] & PreHookAnnotation[\"State\"],\n ToAnnotationRoot<A>[\"Update\"] & PreHookAnnotation[\"Update\"],\n LangGraphRunnableConfig\n >;\n\n /**\n * An optional node to add after the `agent` node (i.e., the node that calls the LLM).\n * Useful for implementing human-in-the-loop, guardrails, validation, or other post-processing.\n */\n postModelHook?: RunnableLike<\n ToAnnotationRoot<A>[\"State\"],\n ToAnnotationRoot<A>[\"Update\"],\n LangGraphRunnableConfig\n >;\n\n /**\n * Determines the version of the graph to create.\n *\n * Can be one of\n * - `\"v1\"`: The tool node processes a single message. All tool calls in the message are\n * executed in parallel within the tool node.\n * - `\"v2\"`: The tool node processes a single tool call. Tool calls are distributed across\n * multiple instances of the tool node using the Send API.\n *\n * @default `\"v1\"`\n */\n version?: \"v1\" | \"v2\";\n};\n\n/**\n * @deprecated `createReactAgent` has been moved to {@link https://www.npmjs.com/package/langchain langchain} package.\n * Update your import to `import { createAgent } from \"langchain\";`\n *\n * Creates a StateGraph agent that relies on a chat model utilizing tool calling.\n *\n * @example\n * ```ts\n * import { ChatOpenAI } from \"@langchain/openai\";\n * import { tool } from \"@langchain/core/tools\";\n * import { z } from \"zod\";\n * import { createReactAgent } from \"@langchain/langgraph/prebuilt\";\n *\n * const model = new ChatOpenAI({\n * model: \"gpt-4o\",\n * });\n *\n * const getWeather = tool((input) => {\n * if ([\"sf\", \"san francisco\"].includes(input.location.toLowerCase())) {\n * return \"It's 60 degrees and foggy.\";\n * } else {\n * return \"It's 90 degrees and sunny.\";\n * }\n * }, {\n * name: \"get_weather\",\n * description: \"Call to get the current weather.\",\n * schema: z.object({\n * location: z.string().describe(\"Location to get the weather for.\"),\n * })\n * })\n *\n * const agent = createReactAgent({ llm: model, tools: [getWeather] });\n *\n * const inputs = {\n * messages: [{ role: \"user\", content: \"what is the weather in SF?\" }],\n * };\n *\n * const stream = await agent.stream(inputs, { streamMode: \"values\" });\n *\n * for await (const { messages } of stream) {\n * console.log(messages);\n * }\n * // Returns the messages in the state at each step of execution\n * ```\n */\nexport function createReactAgent<\n A extends AnyAnnotationRoot | InteropZodObject = typeof MessagesAnnotation,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n StructuredResponseFormat extends Record<string, any> = Record<string, any>,\n C extends AnyAnnotationRoot | InteropZodObject = AnyAnnotationRoot\n>(\n params: CreateReactAgentParams<A, StructuredResponseFormat, C>\n): CompiledStateGraph<\n ToAnnotationRoot<A>[\"State\"],\n ToAnnotationRoot<A>[\"Update\"],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n typeof MessagesAnnotation.spec & ToAnnotationRoot<A>[\"spec\"],\n ReturnType<\n typeof createReactAgentAnnotation<StructuredResponseFormat>\n >[\"spec\"] &\n ToAnnotationRoot<A>[\"spec\"]\n> {\n const {\n llm,\n tools,\n messageModifier,\n stateModifier,\n prompt,\n stateSchema,\n contextSchema,\n checkpointSaver,\n checkpointer,\n interruptBefore,\n interruptAfter,\n store,\n responseFormat,\n preModelHook,\n postModelHook,\n name,\n description,\n version = \"v1\",\n includeAgentName,\n } = params;\n\n let toolClasses: (ClientTool | ServerTool)[];\n\n let toolNode: ToolNode;\n if (!Array.isArray(tools)) {\n toolClasses = tools.tools;\n toolNode = tools;\n } else {\n toolClasses = tools;\n toolNode = new ToolNode(toolClasses.filter(isClientTool));\n }\n\n let cachedStaticModel: Runnable | null = null;\n\n const _getStaticModel = async (llm: LanguageModelLike): Promise<Runnable> => {\n if (cachedStaticModel) return cachedStaticModel;\n\n let modelWithTools: LanguageModelLike;\n if (await _shouldBindTools(llm, toolClasses)) {\n modelWithTools = await _bindTools(llm, toolClasses);\n } else {\n modelWithTools = llm;\n }\n\n const promptRunnable = _getPrompt(prompt, stateModifier, messageModifier);\n const modelRunnable =\n includeAgentName === \"inline\"\n ? withAgentName(modelWithTools, includeAgentName)\n : modelWithTools;\n\n cachedStaticModel = promptRunnable.pipe(modelRunnable);\n return cachedStaticModel;\n };\n\n const _getDynamicModel = async (\n llm: (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n runtime: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => Promise<LanguageModelLike> | LanguageModelLike,\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => {\n const model = await llm(state, config);\n\n return _getPrompt(prompt, stateModifier, messageModifier).pipe(\n includeAgentName === \"inline\"\n ? withAgentName(model, includeAgentName)\n : model\n );\n };\n\n // If any of the tools are configured to return_directly after running,\n // our graph needs to check if these were called\n const shouldReturnDirect = new Set(\n toolClasses\n .filter(isClientTool)\n .filter((tool) => \"returnDirect\" in tool && tool.returnDirect)\n .map((tool) => tool.name)\n );\n\n function getModelInputState(\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"]\n ): Omit<AgentState<StructuredResponseFormat>, \"llmInputMessages\"> {\n const { messages, llmInputMessages, ...rest } = state;\n if (llmInputMessages != null && llmInputMessages.length > 0) {\n return { messages: llmInputMessages, ...rest };\n }\n return { messages, ...rest };\n }\n\n const generateStructuredResponse = async (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => {\n if (responseFormat == null) {\n throw new Error(\n \"Attempted to generate structured output with no passed response schema. Please contact us for help.\"\n );\n }\n const messages = [...state.messages];\n let modelWithStructuredOutput;\n\n const model: LanguageModelLike =\n typeof llm === \"function\"\n ? await llm(state, config)\n : await _getModel(llm);\n\n if (!_isBaseChatModel(model)) {\n throw new Error(\n `Expected \\`llm\\` to be a ChatModel with .withStructuredOutput() method, got ${model.constructor.name}`\n );\n }\n\n if (typeof responseFormat === \"object\" && \"schema\" in responseFormat) {\n const { prompt, schema, ...options } =\n responseFormat as StructuredResponseSchemaOptions<StructuredResponseFormat>;\n\n modelWithStructuredOutput = model.withStructuredOutput(schema, options);\n if (prompt != null) {\n messages.unshift(new SystemMessage({ content: prompt }));\n }\n } else {\n modelWithStructuredOutput = model.withStructuredOutput(responseFormat);\n }\n\n const response = await modelWithStructuredOutput.invoke(messages, config);\n return { structuredResponse: response };\n };\n\n const callModel = async (\n state: AgentState<StructuredResponseFormat> & PreHookAnnotation[\"State\"],\n config: Runtime<ToAnnotationRoot<C>[\"State\"]>\n ) => {\n // NOTE: we're dynamically creating the model runnable here\n // to ensure that we can validate ConfigurableModel properly\n const modelRunnable: Runnable =\n typeof llm === \"function\"\n ? await _getDynamicModel(llm, state, config)\n : await _getStaticModel(llm);\n\n // TODO: Auto-promote streaming.\n const response = (await modelRunnable.invoke(\n getModelInputState(state),\n config\n )) as BaseMessage;\n // add agent name to the AIMessage\n // TODO: figure out if we can avoid mutating the message directly\n response.name = name;\n response.lc_kwargs.name = name;\n return { messages: [response] };\n };\n\n const schema =\n stateSchema ?? createReactAgentAnnotation<StructuredResponseFormat>();\n\n const workflow = new StateGraph(\n schema as AnyAnnotationRoot,\n contextSchema\n ).addNode(\"tools\", toolNode);\n\n if (!(\"messages\" in workflow._schemaDefinition)) {\n throw new Error(\"Missing required `messages` key in state schema.\");\n }\n\n const allNodeWorkflows = workflow as WithStateGraphNodes<\n | \"pre_model_hook\"\n | \"post_model_hook\"\n | \"generate_structured_response\"\n | \"agent\",\n typeof workflow\n >;\n\n const conditionalMap = <T extends string>(map: Record<string, T | null>) => {\n return Object.fromEntries(\n Object.entries(map).filter(([_, v]) => v != null) as [string, T][]\n );\n };\n\n let entrypoint: \"agent\" | \"pre_model_hook\" = \"agent\";\n let inputSchema: AnnotationRoot<ToAnnotationRoot<A>[\"spec\"]> | undefined;\n if (preModelHook != null) {\n allNodeWorkflows\n .addNode(\"pre_model_hook\", preModelHook)\n .addEdge(\"pre_model_hook\", \"agent\");\n entrypoint = \"pre_model_hook\";\n\n inputSchema = Annotation.Root({\n ...workflow._schemaDefinition,\n ...PreHookAnnotation.spec,\n });\n } else {\n entrypoint = \"agent\";\n }\n\n allNodeWorkflows\n .addNode(\"agent\", callModel, { input: inputSchema })\n .addEdge(START, entrypoint);\n\n if (postModelHook != null) {\n allNodeWorkflows\n .addNode(\"post_model_hook\", postModelHook)\n .addEdge(\"agent\", \"post_model_hook\")\n .addConditionalEdges(\n \"post_model_hook\",\n (state: AgentState<StructuredResponseFormat>) => {\n const { messages } = state;\n\n const toolMessageIds: Set<string> = new Set(\n messages.filter(isToolMessage).map((msg) => msg.tool_call_id)\n );\n\n let lastAiMessage: AIMessage | undefined;\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const message = messages[i];\n if (isAIMessage(message)) {\n lastAiMessage = message;\n break;\n }\n }\n\n const pendingToolCalls =\n lastAiMessage?.tool_calls?.filter(\n (i) => i.id == null || !toolMessageIds.has(i.id)\n ) ?? [];\n\n const lastMessage = messages.at(-1);\n if (pendingToolCalls.length > 0) {\n if (version === \"v2\") {\n return pendingToolCalls.map(\n (toolCall) =>\n new Send(\"tools\", { ...state, lg_tool_call: toolCall })\n );\n }\n return \"tools\";\n }\n\n if (lastMessage && isToolMessage(lastMessage)) return entrypoint;\n if (responseFormat != null) return \"generate_structured_response\";\n return END;\n },\n conditionalMap({\n tools: \"tools\",\n [entrypoint]: entrypoint,\n generate_structured_response:\n responseFormat != null ? \"generate_structured_response\" : null,\n [END]: responseFormat != null ? null : END,\n })\n );\n }\n\n if (responseFormat !== undefined) {\n workflow\n .addNode(\"generate_structured_response\", generateStructuredResponse)\n .addEdge(\"generate_structured_response\", END);\n }\n\n if (postModelHook == null) {\n allNodeWorkflows.addConditionalEdges(\n \"agent\",\n (state: AgentState<StructuredResponseFormat>) => {\n const { messages } = state;\n const lastMessage = messages[messages.length - 1];\n\n // if there's no function call, we finish\n if (!isAIMessage(lastMessage) || !lastMessage.tool_calls?.length) {\n if (responseFormat != null) return \"generate_structured_response\";\n return END;\n }\n\n // there are function calls, we continue\n if (version === \"v2\") {\n return lastMessage.tool_calls.map(\n (toolCall) =>\n new Send(\"tools\", { ...state, lg_tool_call: toolCall })\n );\n }\n\n return \"tools\";\n },\n conditionalMap({\n tools: \"tools\",\n generate_structured_response:\n responseFormat != null ? \"generate_structured_response\" : null,\n [END]: responseFormat != null ? null : END,\n })\n );\n }\n\n if (shouldReturnDirect.size > 0) {\n allNodeWorkflows.addConditionalEdges(\n \"tools\",\n (state: AgentState<StructuredResponseFormat>) => {\n // Check the last consecutive tool calls\n for (let i = state.messages.length - 1; i >= 0; i -= 1) {\n const message = state.messages[i];\n if (!isToolMessage(message)) break;\n\n // Check if this tool is configured to return directly\n if (\n message.name !== undefined &&\n shouldReturnDirect.has(message.name)\n ) {\n return END;\n }\n }\n\n return entrypoint;\n },\n conditionalMap({ [entrypoint]: entrypoint, [END]: END })\n );\n } else {\n allNodeWorkflows.addEdge(\"tools\", entrypoint);\n }\n\n return allNodeWorkflows.compile({\n checkpointer: checkpointer ?? checkpointSaver,\n interruptBefore,\n interruptAfter,\n store,\n name,\n description,\n });\n}\n"],"mappings":"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"}
@@ -14,6 +14,11 @@ const __langchain_core_runnables = require_rolldown_runtime.__toESM(require("@la
14
14
  const increment = (current) => {
15
15
  return current !== void 0 ? current + 1 : 1;
16
16
  };
17
+ function triggersNextStep(updatedChannels, triggerToNodes) {
18
+ if (triggerToNodes == null) return false;
19
+ for (const chan of updatedChannels) if (triggerToNodes[chan]) return true;
20
+ return false;
21
+ }
17
22
  function maxChannelMapVersion(channelVersions) {
18
23
  let maxVersion;
19
24
  for (const chan in channelVersions) {
@@ -27,7 +32,8 @@ function shouldInterrupt(checkpoint, interruptNodes, tasks) {
27
32
  const nullVersion = require_index.getNullChannelVersion(checkpoint.channel_versions);
28
33
  const seen = checkpoint.versions_seen[require_constants.INTERRUPT] ?? {};
29
34
  let anyChannelUpdated = false;
30
- for (const chan in checkpoint.channel_versions) {
35
+ if ((checkpoint.channel_versions[require_constants.START] ?? nullVersion) > (seen[require_constants.START] ?? nullVersion)) anyChannelUpdated = true;
36
+ else for (const chan in checkpoint.channel_versions) {
31
37
  if (!Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)) continue;
32
38
  if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {
33
39
  anyChannelUpdated = true;
@@ -92,15 +98,19 @@ function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNode
92
98
  }
93
99
  let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
94
100
  const channelsToConsume = new Set(tasks.flatMap((task) => task.triggers).filter((chan) => !require_constants.RESERVED.includes(chan)));
101
+ let usedNewVersion = false;
95
102
  for (const chan of channelsToConsume) if (chan in onlyChannels && onlyChannels[chan].consume()) {
96
- if (getNextVersion !== void 0) checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
103
+ if (getNextVersion !== void 0) {
104
+ checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
105
+ usedNewVersion = true;
106
+ }
97
107
  }
98
108
  const pendingWritesByChannel = {};
99
109
  for (const task of tasks) for (const [chan, val] of task.writes) if (IGNORE.has(chan)) {} else if (chan in onlyChannels) {
100
110
  pendingWritesByChannel[chan] ??= [];
101
111
  pendingWritesByChannel[chan].push(val);
102
112
  }
103
- maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
113
+ if (maxVersion != null && getNextVersion != null) maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;
104
114
  const updatedChannels = /* @__PURE__ */ new Set();
105
115
  for (const [chan, vals] of Object.entries(pendingWritesByChannel)) if (chan in onlyChannels) {
106
116
  const channel = onlyChannels[chan];
@@ -130,7 +140,7 @@ function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNode
130
140
  }
131
141
  }
132
142
  }
133
- if (bumpStep && !Object.keys(triggerToNodes ?? {}).some((channel) => updatedChannels.has(channel))) for (const chan in onlyChannels) {
143
+ if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) for (const chan in onlyChannels) {
134
144
  if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;
135
145
  const channel = onlyChannels[chan];
136
146
  if (channel.finish() && getNextVersion !== void 0) {
@@ -138,6 +148,27 @@ function _applyWrites(checkpoint, channels, tasks, getNextVersion, triggerToNode
138
148
  if (channel.isAvailable()) updatedChannels.add(chan);
139
149
  }
140
150
  }
151
+ return updatedChannels;
152
+ }
153
+ function* candidateNodes(checkpoint, processes, extra) {
154
+ if (extra.updatedChannels != null && extra.triggerToNodes != null) {
155
+ const triggeredNodes = /* @__PURE__ */ new Set();
156
+ for (const channel of extra.updatedChannels) {
157
+ const nodeIds = extra.triggerToNodes[channel];
158
+ for (const id of nodeIds ?? []) triggeredNodes.add(id);
159
+ }
160
+ yield* [...triggeredNodes].sort();
161
+ return;
162
+ }
163
+ const isEmptyChannelVersions = (() => {
164
+ for (const chan in checkpoint.channel_versions) if (checkpoint.channel_versions[chan] !== null) return false;
165
+ return true;
166
+ })();
167
+ if (isEmptyChannelVersions) return;
168
+ for (const name in processes) {
169
+ if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
170
+ yield name;
171
+ }
141
172
  }
142
173
  /**
143
174
  * Prepare the set of tasks that will make up the next Pregel step.
@@ -154,8 +185,7 @@ function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, confi
154
185
  if (task !== void 0) tasks[task.id] = task;
155
186
  }
156
187
  }
157
- for (const name in processes) {
158
- if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;
188
+ for (const name of candidateNodes(checkpoint, processes, extra)) {
159
189
  const task = _prepareSingleTask([require_constants.PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
160
190
  if (task !== void 0) tasks[task.id] = task;
161
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"algo.cjs","names":["maxVersion: number | string | undefined","getNullChannelVersion","INTERRUPT","TAG_HIDDEN","values: Record<string, unknown>","createCheckpoint","emptyChannels","readChannels","PUSH","TASKS","_isSend","InvalidUpdateError","NO_WRITES","RESUME","RETURN","ERROR","getOnlyChannels","RESERVED","updatedChannels: Set<string>","e: any","tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription>","PULL","isCall","getRunnableForFunc","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","writes: [keyof Cc, unknown][]","CONFIG_KEY_TASK_ID","CONFIG_KEY_SEND","CONFIG_KEY_READ","CONFIG_KEY_CHECKPOINTER","CONFIG_KEY_CHECKPOINT_MAP","CONFIG_KEY_SCRATCHPAD","CONFIG_KEY_RESUME_MAP","XXH3","CONFIG_KEY_PREVIOUS_STATE","PREVIOUS","CACHE_NS_WRITES","_isSendInterface","Send","val: any","readChannel","EmptyChannelError","NULL_TASK_ID","resume"],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n mergeConfigs,\n patchConfig,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n All,\n BaseCheckpointSaver,\n Checkpoint,\n ReadonlyCheckpoint,\n copyCheckpoint,\n type PendingWrite,\n type PendingWriteValue,\n uuid5,\n maxChannelVersion,\n BaseStore,\n CheckpointPendingWrite,\n SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n _isSend,\n _isSendInterface,\n CONFIG_KEY_CHECKPOINT_MAP,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_READ,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_SEND,\n INTERRUPT,\n RESERVED,\n Send,\n TAG_HIDDEN,\n TASKS,\n CHECKPOINT_NAMESPACE_END,\n PUSH,\n PULL,\n RESUME,\n NULL_TASK_ID,\n CONFIG_KEY_SCRATCHPAD,\n RETURN,\n ERROR,\n NO_WRITES,\n CONFIG_KEY_PREVIOUS_STATE,\n PREVIOUS,\n CACHE_NS_WRITES,\n CONFIG_KEY_RESUME_MAP,\n} from \"../constants.js\";\nimport {\n Call,\n isCall,\n PregelExecutableTask,\n PregelScratchpad,\n PregelTaskDescription,\n SimpleTaskPath,\n TaskPath,\n VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n return current !== undefined ? current + 1 : 1;\n};\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n channelVersions: Record<string, number | string>\n): number | string | undefined {\n let maxVersion: number | string | undefined;\n for (const chan in channelVersions) {\n if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n if (maxVersion == null) {\n maxVersion = channelVersions[chan];\n } else {\n maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n }\n }\n return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n checkpoint: Checkpoint,\n interruptNodes: All | N[],\n tasks: PregelExecutableTask<N, C>[]\n): boolean {\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n let anyChannelUpdated = false;\n for (const chan in checkpoint.channel_versions) {\n if (\n !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n )\n continue;\n\n if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n anyChannelUpdated = true;\n break;\n }\n }\n\n const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n interruptNodes === \"*\"\n ? !task.config?.tags?.includes(TAG_HIDDEN)\n : interruptNodes.includes(task.name)\n );\n\n return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n checkpoint: ReadonlyCheckpoint,\n channels: Cc,\n task: WritesProtocol<keyof Cc>,\n select: Array<keyof Cc> | keyof Cc,\n fresh: boolean = false\n): Record<string, unknown> | unknown {\n let updated = new Set<keyof Cc>();\n\n if (!Array.isArray(select)) {\n for (const [c] of task.writes) {\n if (c === select) {\n updated = new Set([c]);\n break;\n }\n }\n updated = updated || new Set();\n } else {\n updated = new Set(\n select.filter((c) => task.writes.some(([key, _]) => key === c))\n );\n }\n\n let values: Record<string, unknown>;\n\n if (fresh && updated.size > 0) {\n const localChannels = Object.fromEntries(\n Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n ) as Partial<Cc>;\n\n const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n _applyWrites(\n copyCheckpoint(newCheckpoint),\n newChannels,\n [task],\n undefined,\n undefined\n );\n values = readChannels({ ...channels, ...newChannels }, select);\n } else {\n values = readChannels(channels, select);\n }\n\n return values;\n}\n\nexport function _localWrite(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n commit: (writes: [string, any][]) => any,\n processes: Record<string, PregelNode>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writes: [string, any][]\n) {\n for (const [chan, value] of writes) {\n if ([PUSH, TASKS].includes(chan) && value != null) {\n if (!_isSend(value)) {\n throw new InvalidUpdateError(\n `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n value\n )}`\n );\n }\n if (!(value.node in processes)) {\n throw new InvalidUpdateError(\n `Invalid node name \"${value.node}\" in Send packet`\n );\n }\n }\n }\n commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n NO_WRITES,\n PUSH,\n RESUME,\n INTERRUPT,\n RETURN,\n ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n checkpoint: Checkpoint,\n channels: Cc,\n tasks: WritesProtocol<keyof Cc>[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNextVersion: ((version: any) => any) | undefined,\n triggerToNodes: Record<string, string[]> | undefined\n): void {\n // Sort tasks by first 3 path elements for deterministic order\n // Later path parts (like task IDs) are ignored for sorting\n tasks.sort((a, b) => {\n const aPath = a.path?.slice(0, 3) || [];\n const bPath = b.path?.slice(0, 3) || [];\n\n // Compare each path element\n for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n if (aPath[i] < bPath[i]) return -1;\n if (aPath[i] > bPath[i]) return 1;\n }\n\n // If one path is shorter, it comes first\n return aPath.length - bPath.length;\n });\n\n // if no task has triggers this is applying writes from the null task only\n // so we don't do anything other than update the channels written to\n const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n // Filter out non instances of BaseChannel\n const onlyChannels = getOnlyChannels(channels);\n\n // Update seen versions\n for (const task of tasks) {\n checkpoint.versions_seen[task.name] ??= {};\n for (const chan of task.triggers) {\n if (chan in checkpoint.channel_versions) {\n checkpoint.versions_seen[task.name][chan] =\n checkpoint.channel_versions[chan];\n }\n }\n }\n\n // Find the highest version of all channels\n let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n // Consume all channels that were read\n const channelsToConsume = new Set(\n tasks\n .flatMap((task) => task.triggers)\n .filter((chan) => !RESERVED.includes(chan))\n );\n\n for (const chan of channelsToConsume) {\n if (chan in onlyChannels && onlyChannels[chan].consume()) {\n if (getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n }\n }\n }\n\n // Group writes by channel\n const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n for (const task of tasks) {\n for (const [chan, val] of task.writes) {\n if (IGNORE.has(chan)) {\n // do nothing\n } else if (chan in onlyChannels) {\n pendingWritesByChannel[chan] ??= [];\n pendingWritesByChannel[chan].push(val);\n }\n }\n }\n\n // Find the highest version of all channels\n maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n const updatedChannels: Set<string> = new Set();\n // Apply writes to channels\n for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n if (chan in onlyChannels) {\n const channel = onlyChannels[chan];\n let updated;\n try {\n updated = channel.update(vals);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === InvalidUpdateError.unminifiable_name) {\n const wrappedError = new InvalidUpdateError(\n `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n vals\n )}: ${e.message}`\n );\n wrappedError.lc_error_code = e.lc_error_code;\n throw wrappedError;\n } else {\n throw e;\n }\n }\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n // Channels that weren't updated in this step are notified of a new step\n if (bumpStep) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.isAvailable() && !updatedChannels.has(chan)) {\n const updated = channel.update([]);\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n }\n\n // If this is (tentatively) the last superstep, notify all channels of finish\n if (\n bumpStep &&\n !Object.keys(triggerToNodes ?? {}).some((channel) =>\n updatedChannels.has(channel)\n )\n ) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.finish() && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n}\n\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n | Record<string, PregelTaskDescription>\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n const tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription> = {};\n\n // Consume pending tasks\n const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n if (tasksChannel?.isAvailable()) {\n const len = tasksChannel.get().length;\n for (let i = 0; i < len; i += 1) {\n const task = _prepareSingleTask(\n [PUSH, i],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n }\n\n // Check if any processes should be run in next step\n // If so, prepare the values to be passed to them\n for (const name in processes) {\n if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n const task = _prepareSingleTask(\n [PULL, name],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n return tasks;\n}\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: SimpleTaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: LangGraphRunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFields\n):\n | PregelTaskDescription\n | PregelExecutableTask<keyof Nn, keyof Cc>\n | undefined {\n const { step, checkpointer, manager } = extra;\n const configurable = config.configurable ?? {};\n const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n const call = taskPath[taskPath.length - 1] as Call;\n const proc = getRunnableForFunc(call.name, call.func);\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? call.name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n const id = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n call.name,\n PUSH,\n taskPath[1],\n taskPath[2],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n // we append `true` to the task path to indicate that a call is being made\n // so we should not return interrupts from this task (responsibility lies with the parent)\n const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n const metadata = {\n langgraph_step: step,\n langgraph_node: call.name,\n langgraph_triggers: triggers,\n langgraph_path: outputTaskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const writes: [keyof Cc, unknown][] = [];\n const task = {\n name: call.name,\n input: call.input,\n proc,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n store: extra.store ?? config.store,\n }),\n {\n runName: call.name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: id,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: call.name,\n writes: writes as PendingWrite[],\n triggers,\n path: outputTaskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId: id,\n currentTaskInput: call.input,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: call.retry,\n cache_key: call.cache\n ? {\n key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n ttl: call.cache.ttl,\n }\n : undefined,\n id,\n path: outputTaskPath,\n writers: [],\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n return task;\n } else {\n return {\n id,\n name: call.name,\n interrupts: [],\n path: outputTaskPath,\n };\n }\n } else if (taskPath[0] === PUSH) {\n const index =\n typeof taskPath[1] === \"number\"\n ? taskPath[1]\n : parseInt(taskPath[1] as string, 10);\n\n if (!channels[TASKS]?.isAvailable()) {\n return undefined;\n }\n\n const sends = channels[TASKS].get() as SendProtocol[];\n if (index < 0 || index >= sends.length) {\n return undefined;\n }\n\n const packet =\n _isSendInterface(sends[index]) && !_isSend(sends[index])\n ? new Send(sends[index].node, sends[index].args)\n : sends[index];\n\n if (!_isSendInterface(packet)) {\n console.warn(\n `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n );\n return undefined;\n }\n if (!(packet.node in processes)) {\n console.warn(\n `Ignoring unknown node name ${packet.node} in pending sends.`\n );\n return undefined;\n }\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? packet.node\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n packet.node,\n PUSH,\n index.toString(),\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: packet.node,\n langgraph_triggers: triggers,\n langgraph_path: taskPath.slice(0, 3),\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const proc = processes[packet.node];\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name: packet.node,\n input: packet.args,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: packet.node,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: packet.node,\n writes: writes as PendingWrite[],\n triggers,\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: packet.args,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name: packet.node,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n } else if (taskPath[0] === PULL) {\n const name = taskPath[1].toString();\n const proc = processes[name];\n if (proc === undefined) {\n return undefined;\n }\n\n // Check if this task already has successful writes in the pending writes\n if (pendingWrites?.length) {\n // Find the task ID for this node/path\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n name,\n ]),\n checkpoint.id\n );\n\n // Check if there are successful writes (not ERROR) for this task ID\n const hasSuccessfulWrites = pendingWrites.some(\n (w) => w[0] === taskId && w[1] !== ERROR\n );\n\n // If task completed successfully, don't include it in next tasks\n if (hasSuccessfulWrites) {\n return undefined;\n }\n }\n\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n if (nullVersion === undefined) {\n return undefined;\n }\n const seen = checkpoint.versions_seen[name] ?? {};\n\n // Find the first trigger that is available and has a new version\n const trigger = proc.triggers.find((chan) => {\n if (!channels[chan].isAvailable()) return false;\n\n return (\n (checkpoint.channel_versions[chan] ?? nullVersion) >\n (seen[chan] ?? nullVersion)\n );\n });\n\n // If any of the channels read by this process were updated\n if (trigger !== undefined) {\n const val = _procInput(proc, channels, forExecution);\n if (val === undefined) {\n return undefined;\n }\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n [trigger],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: name,\n langgraph_triggers: [trigger],\n langgraph_path: taskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name,\n input: val,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => {\n writes.push(...items);\n },\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name,\n writes: writes as PendingWrite[],\n triggers: [trigger],\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: val,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers: [trigger],\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Function injected under CONFIG_KEY_READ in task config, to read current state.\n * Used by conditional edges to read a copy of the state with reflecting the writes\n * from that node only.\n *\n * @internal\n */\nfunction _procInput(\n proc: PregelNode,\n channels: StrRecord<string, BaseChannel>,\n forExecution: boolean\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let val: any;\n\n if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n val = {};\n for (const [k, chan] of Object.entries(proc.channels)) {\n if (proc.triggers.includes(chan)) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n return undefined;\n } else {\n throw e;\n }\n }\n } else if (chan in channels) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n }\n } else if (Array.isArray(proc.channels)) {\n let successfulRead = false;\n for (const chan of proc.channels) {\n try {\n val = readChannel(channels, chan, false);\n successfulRead = true;\n break;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n if (!successfulRead) {\n return undefined;\n }\n } else {\n throw new Error(\n `Invalid channels type, expected list or dict, got ${proc.channels}`\n );\n }\n\n // If the process has a mapper, apply it to the value\n if (forExecution && proc.mapper !== undefined) {\n val = proc.mapper(val);\n }\n\n return val;\n}\n\nfunction _scratchpad({\n pendingWrites,\n taskId,\n currentTaskInput,\n resumeMap,\n namespaceHash,\n}: {\n pendingWrites: CheckpointPendingWrite[];\n taskId: string;\n currentTaskInput: unknown;\n resumeMap: Record<string, unknown> | undefined;\n namespaceHash: string;\n}): PregelScratchpad {\n const nullResume = pendingWrites.find(\n ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n )?.[2];\n\n const resume = (() => {\n const result = pendingWrites\n .filter(\n ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n )\n .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n if (resumeMap != null && namespaceHash in resumeMap) {\n const mappedResume = resumeMap[namespaceHash];\n result.push(mappedResume);\n }\n\n return result;\n })();\n\n const scratchpad = {\n callCounter: 0,\n interruptCounter: -1,\n resume,\n nullResume,\n subgraphCounter: 0,\n currentTaskInput,\n consumeNullResume: () => {\n if (scratchpad.nullResume) {\n delete scratchpad.nullResume;\n pendingWrites.splice(\n pendingWrites.findIndex(\n ([writeTaskId, chan]) =>\n writeTaskId === NULL_TASK_ID && chan === RESUME\n ),\n 1\n );\n return nullResume;\n }\n\n return undefined;\n },\n };\n return scratchpad;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"algo.cjs","names":["maxVersion: number | string | undefined","getNullChannelVersion","INTERRUPT","START","TAG_HIDDEN","values: Record<string, unknown>","createCheckpoint","emptyChannels","readChannels","PUSH","TASKS","_isSend","InvalidUpdateError","NO_WRITES","RESUME","RETURN","ERROR","getOnlyChannels","RESERVED","updatedChannels: Set<string>","e: any","tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription>","PULL","isCall","getRunnableForFunc","CHECKPOINT_NAMESPACE_SEPARATOR","CHECKPOINT_NAMESPACE_END","writes: [keyof Cc, unknown][]","CONFIG_KEY_TASK_ID","CONFIG_KEY_SEND","CONFIG_KEY_READ","CONFIG_KEY_CHECKPOINTER","CONFIG_KEY_CHECKPOINT_MAP","CONFIG_KEY_SCRATCHPAD","CONFIG_KEY_RESUME_MAP","XXH3","CONFIG_KEY_PREVIOUS_STATE","PREVIOUS","CACHE_NS_WRITES","_isSendInterface","Send","val: any","readChannel","EmptyChannelError","NULL_TASK_ID","resume"],"sources":["../../src/pregel/algo.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport {\n mergeConfigs,\n patchConfig,\n RunnableConfig,\n} from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport {\n All,\n BaseCheckpointSaver,\n Checkpoint,\n ReadonlyCheckpoint,\n copyCheckpoint,\n type PendingWrite,\n type PendingWriteValue,\n uuid5,\n maxChannelVersion,\n BaseStore,\n CheckpointPendingWrite,\n SendProtocol,\n} from \"@langchain/langgraph-checkpoint\";\nimport {\n BaseChannel,\n createCheckpoint,\n emptyChannels,\n getOnlyChannels,\n} from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { readChannel, readChannels } from \"./io.js\";\nimport {\n _isSend,\n _isSendInterface,\n CONFIG_KEY_CHECKPOINT_MAP,\n CHECKPOINT_NAMESPACE_SEPARATOR,\n CONFIG_KEY_CHECKPOINTER,\n CONFIG_KEY_READ,\n CONFIG_KEY_TASK_ID,\n CONFIG_KEY_SEND,\n INTERRUPT,\n RESERVED,\n Send,\n TAG_HIDDEN,\n TASKS,\n CHECKPOINT_NAMESPACE_END,\n PUSH,\n PULL,\n RESUME,\n NULL_TASK_ID,\n CONFIG_KEY_SCRATCHPAD,\n RETURN,\n ERROR,\n NO_WRITES,\n CONFIG_KEY_PREVIOUS_STATE,\n PREVIOUS,\n CACHE_NS_WRITES,\n CONFIG_KEY_RESUME_MAP,\n START,\n} from \"../constants.js\";\nimport {\n Call,\n isCall,\n PregelExecutableTask,\n PregelScratchpad,\n PregelTaskDescription,\n SimpleTaskPath,\n TaskPath,\n VariadicTaskPath,\n} from \"./types.js\";\nimport { EmptyChannelError, InvalidUpdateError } from \"../errors.js\";\nimport { getNullChannelVersion } from \"./utils/index.js\";\nimport { LangGraphRunnableConfig } from \"./runnable_types.js\";\nimport { getRunnableForFunc } from \"./call.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\nimport { XXH3 } from \"../hash.js\";\nimport { Topic } from \"../channels/topic.js\";\n\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\n\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\n\nexport const increment = (current?: number) => {\n return current !== undefined ? current + 1 : 1;\n};\n\nfunction triggersNextStep(\n updatedChannels: Set<string>,\n triggerToNodes: Record<string, string[]> | undefined\n) {\n if (triggerToNodes == null) return false;\n\n for (const chan of updatedChannels) {\n if (triggerToNodes[chan]) return true;\n }\n\n return false;\n}\n\n// Avoids unnecessary double iteration\nfunction maxChannelMapVersion(\n channelVersions: Record<string, number | string>\n): number | string | undefined {\n let maxVersion: number | string | undefined;\n for (const chan in channelVersions) {\n if (!Object.prototype.hasOwnProperty.call(channelVersions, chan)) continue;\n if (maxVersion == null) {\n maxVersion = channelVersions[chan];\n } else {\n maxVersion = maxChannelVersion(maxVersion, channelVersions[chan]);\n }\n }\n return maxVersion;\n}\n\nexport function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(\n checkpoint: Checkpoint,\n interruptNodes: All | N[],\n tasks: PregelExecutableTask<N, C>[]\n): boolean {\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n const seen = checkpoint.versions_seen[INTERRUPT] ?? {};\n\n let anyChannelUpdated = false;\n\n if (\n (checkpoint.channel_versions[START] ?? nullVersion) >\n (seen[START] ?? nullVersion)\n ) {\n anyChannelUpdated = true;\n } else {\n for (const chan in checkpoint.channel_versions) {\n if (\n !Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan)\n )\n continue;\n\n if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {\n anyChannelUpdated = true;\n break;\n }\n }\n }\n\n const anyTriggeredNodeInInterruptNodes = tasks.some((task) =>\n interruptNodes === \"*\"\n ? !task.config?.tags?.includes(TAG_HIDDEN)\n : interruptNodes.includes(task.name)\n );\n\n return anyChannelUpdated && anyTriggeredNodeInInterruptNodes;\n}\n\nexport function _localRead<Cc extends Record<string, BaseChannel>>(\n checkpoint: ReadonlyCheckpoint,\n channels: Cc,\n task: WritesProtocol<keyof Cc>,\n select: Array<keyof Cc> | keyof Cc,\n fresh: boolean = false\n): Record<string, unknown> | unknown {\n let updated = new Set<keyof Cc>();\n\n if (!Array.isArray(select)) {\n for (const [c] of task.writes) {\n if (c === select) {\n updated = new Set([c]);\n break;\n }\n }\n updated = updated || new Set();\n } else {\n updated = new Set(\n select.filter((c) => task.writes.some(([key, _]) => key === c))\n );\n }\n\n let values: Record<string, unknown>;\n\n if (fresh && updated.size > 0) {\n const localChannels = Object.fromEntries(\n Object.entries(channels).filter(([k, _]) => updated.has(k as keyof Cc))\n ) as Partial<Cc>;\n\n const newCheckpoint = createCheckpoint(checkpoint, localChannels as Cc, -1);\n const newChannels = emptyChannels(localChannels as Cc, newCheckpoint);\n\n _applyWrites(\n copyCheckpoint(newCheckpoint),\n newChannels,\n [task],\n undefined,\n undefined\n );\n values = readChannels({ ...channels, ...newChannels }, select);\n } else {\n values = readChannels(channels, select);\n }\n\n return values;\n}\n\nexport function _localWrite(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n commit: (writes: [string, any][]) => any,\n processes: Record<string, PregelNode>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n writes: [string, any][]\n) {\n for (const [chan, value] of writes) {\n if ([PUSH, TASKS].includes(chan) && value != null) {\n if (!_isSend(value)) {\n throw new InvalidUpdateError(\n `Invalid packet type, expected SendProtocol, got ${JSON.stringify(\n value\n )}`\n );\n }\n if (!(value.node in processes)) {\n throw new InvalidUpdateError(\n `Invalid node name \"${value.node}\" in Send packet`\n );\n }\n }\n }\n commit(writes);\n}\n\nconst IGNORE = new Set<string | number | symbol>([\n NO_WRITES,\n PUSH,\n RESUME,\n INTERRUPT,\n RETURN,\n ERROR,\n]);\n\nexport function _applyWrites<Cc extends Record<string, BaseChannel>>(\n checkpoint: Checkpoint,\n channels: Cc,\n tasks: WritesProtocol<keyof Cc>[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getNextVersion: ((version: any) => any) | undefined,\n triggerToNodes: Record<string, string[]> | undefined\n): Set<string> {\n // Sort tasks by first 3 path elements for deterministic order\n // Later path parts (like task IDs) are ignored for sorting\n tasks.sort((a, b) => {\n const aPath = a.path?.slice(0, 3) || [];\n const bPath = b.path?.slice(0, 3) || [];\n\n // Compare each path element\n for (let i = 0; i < Math.min(aPath.length, bPath.length); i += 1) {\n if (aPath[i] < bPath[i]) return -1;\n if (aPath[i] > bPath[i]) return 1;\n }\n\n // If one path is shorter, it comes first\n return aPath.length - bPath.length;\n });\n\n // if no task has triggers this is applying writes from the null task only\n // so we don't do anything other than update the channels written to\n const bumpStep = tasks.some((task) => task.triggers.length > 0);\n\n // Filter out non instances of BaseChannel\n const onlyChannels = getOnlyChannels(channels);\n\n // Update seen versions\n for (const task of tasks) {\n checkpoint.versions_seen[task.name] ??= {};\n for (const chan of task.triggers) {\n if (chan in checkpoint.channel_versions) {\n checkpoint.versions_seen[task.name][chan] =\n checkpoint.channel_versions[chan];\n }\n }\n }\n\n // Find the highest version of all channels\n let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);\n\n // Consume all channels that were read\n const channelsToConsume = new Set(\n tasks\n .flatMap((task) => task.triggers)\n .filter((chan) => !RESERVED.includes(chan))\n );\n\n let usedNewVersion = false;\n for (const chan of channelsToConsume) {\n if (chan in onlyChannels && onlyChannels[chan].consume()) {\n if (getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n usedNewVersion = true;\n }\n }\n }\n\n // Group writes by channel\n const pendingWritesByChannel = {} as Record<keyof Cc, PendingWriteValue[]>;\n for (const task of tasks) {\n for (const [chan, val] of task.writes) {\n if (IGNORE.has(chan)) {\n // do nothing\n } else if (chan in onlyChannels) {\n pendingWritesByChannel[chan] ??= [];\n pendingWritesByChannel[chan].push(val);\n }\n }\n }\n\n // Find the highest version of all channels\n if (maxVersion != null && getNextVersion != null) {\n maxVersion = usedNewVersion ? getNextVersion(maxVersion) : maxVersion;\n }\n\n const updatedChannels: Set<string> = new Set();\n // Apply writes to channels\n for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {\n if (chan in onlyChannels) {\n const channel = onlyChannels[chan];\n let updated;\n try {\n updated = channel.update(vals);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === InvalidUpdateError.unminifiable_name) {\n const wrappedError = new InvalidUpdateError(\n `Invalid update for channel \"${chan}\" with values ${JSON.stringify(\n vals\n )}: ${e.message}`\n );\n wrappedError.lc_error_code = e.lc_error_code;\n throw wrappedError;\n } else {\n throw e;\n }\n }\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n // Channels that weren't updated in this step are notified of a new step\n if (bumpStep) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.isAvailable() && !updatedChannels.has(chan)) {\n const updated = channel.update([]);\n\n if (updated && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n }\n\n // If this is (tentatively) the last superstep, notify all channels of finish\n if (bumpStep && !triggersNextStep(updatedChannels, triggerToNodes)) {\n for (const chan in onlyChannels) {\n if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan)) continue;\n\n const channel = onlyChannels[chan];\n if (channel.finish() && getNextVersion !== undefined) {\n checkpoint.channel_versions[chan] = getNextVersion(maxVersion);\n\n // unavailable channels can't trigger tasks, so don't add them\n if (channel.isAvailable()) updatedChannels.add(chan);\n }\n }\n }\n\n return updatedChannels;\n}\n\nfunction* candidateNodes(\n checkpoint: ReadonlyCheckpoint,\n processes: StrRecord<string, PregelNode>,\n extra: NextTaskExtraFields\n) {\n // This section is an optimization that allows which\n // nodes will be active during the next step.\n // When there's information about:\n // 1. Which channels were updated in the previous step\n // 2. Which nodes are triggered by which channels\n // Then we can determine which nodes should be triggered\n // in the next step without having to cycle through all nodes.\n if (extra.updatedChannels != null && extra.triggerToNodes != null) {\n const triggeredNodes = new Set<string>();\n\n // Get all nodes that have triggers associated with an updated channel\n for (const channel of extra.updatedChannels) {\n const nodeIds = extra.triggerToNodes[channel];\n for (const id of nodeIds ?? []) triggeredNodes.add(id);\n }\n\n // Sort the nodes to ensure deterministic order\n yield* [...triggeredNodes].sort();\n return;\n }\n\n // If there are no values in checkpoint, no need to run\n // through all the PULL candidates\n const isEmptyChannelVersions = (() => {\n for (const chan in checkpoint.channel_versions) {\n if (checkpoint.channel_versions[chan] !== null) return false;\n }\n return true;\n })();\n\n if (isEmptyChannelVersions) return;\n for (const name in processes) {\n if (!Object.prototype.hasOwnProperty.call(processes, name)) continue;\n yield name;\n }\n}\n\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\n\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\n\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFieldsWithoutStore\n): Record<string, PregelTaskDescription>;\n\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFieldsWithStore\n): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\n\n/**\n * Prepare the set of tasks that will make up the next Pregel step.\n * This is the union of all PUSH tasks (Sends) and PULL tasks (nodes triggered\n * by edges).\n */\nexport function _prepareNextTasks<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: [string, string, unknown][] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore | NextTaskExtraFieldsWithoutStore\n):\n | Record<string, PregelTaskDescription>\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>> {\n const tasks:\n | Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>\n | Record<string, PregelTaskDescription> = {};\n\n // Consume pending tasks\n const tasksChannel = channels[TASKS] as Topic<SendProtocol> | undefined;\n\n if (tasksChannel?.isAvailable()) {\n const len = tasksChannel.get().length;\n for (let i = 0; i < len; i += 1) {\n const task = _prepareSingleTask(\n [PUSH, i],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n }\n\n // Check if any processes should be run in next step\n // If so, prepare the values to be passed to them\n for (const name of candidateNodes(checkpoint, processes, extra)) {\n const task = _prepareSingleTask(\n [PULL, name],\n checkpoint,\n pendingWrites,\n processes,\n channels,\n config,\n forExecution,\n extra\n );\n if (task !== undefined) {\n tasks[task.id] = task;\n }\n }\n return tasks;\n}\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: SimpleTaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: false,\n extra: NextTaskExtraFields\n): PregelTaskDescription | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: true,\n extra: NextTaskExtraFields\n): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: RunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFieldsWithStore\n): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n\n/**\n * Prepares a single task for the next Pregel step, given a task path, which\n * uniquely identifies a PUSH or PULL task within the graph.\n */\nexport function _prepareSingleTask<\n Nn extends StrRecord<string, PregelNode>,\n Cc extends StrRecord<string, BaseChannel>\n>(\n taskPath: TaskPath,\n checkpoint: ReadonlyCheckpoint,\n pendingWrites: CheckpointPendingWrite[] | undefined,\n processes: Nn,\n channels: Cc,\n config: LangGraphRunnableConfig,\n forExecution: boolean,\n extra: NextTaskExtraFields\n):\n | PregelTaskDescription\n | PregelExecutableTask<keyof Nn, keyof Cc>\n | undefined {\n const { step, checkpointer, manager } = extra;\n const configurable = config.configurable ?? {};\n const parentNamespace = configurable.checkpoint_ns ?? \"\";\n\n if (taskPath[0] === PUSH && isCall(taskPath[taskPath.length - 1])) {\n const call = taskPath[taskPath.length - 1] as Call;\n const proc = getRunnableForFunc(call.name, call.func);\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? call.name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${call.name}`;\n const id = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n call.name,\n PUSH,\n taskPath[1],\n taskPath[2],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${id}`;\n\n // we append `true` to the task path to indicate that a call is being made\n // so we should not return interrupts from this task (responsibility lies with the parent)\n const outputTaskPath = [...taskPath.slice(0, 3), true] as VariadicTaskPath;\n const metadata = {\n langgraph_step: step,\n langgraph_node: call.name,\n langgraph_triggers: triggers,\n langgraph_path: outputTaskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const writes: [keyof Cc, unknown][] = [];\n const task = {\n name: call.name,\n input: call.input,\n proc,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n store: extra.store ?? config.store,\n }),\n {\n runName: call.name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: id,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: call.name,\n writes: writes as PendingWrite[],\n triggers,\n path: outputTaskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId: id,\n currentTaskInput: call.input,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]: checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: call.retry,\n cache_key: call.cache\n ? {\n key: XXH3((call.cache.keyFunc ?? JSON.stringify)([call.input])),\n ns: [CACHE_NS_WRITES, call.name ?? \"__dynamic__\"],\n ttl: call.cache.ttl,\n }\n : undefined,\n id,\n path: outputTaskPath,\n writers: [],\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n return task;\n } else {\n return {\n id,\n name: call.name,\n interrupts: [],\n path: outputTaskPath,\n };\n }\n } else if (taskPath[0] === PUSH) {\n const index =\n typeof taskPath[1] === \"number\"\n ? taskPath[1]\n : parseInt(taskPath[1] as string, 10);\n\n if (!channels[TASKS]?.isAvailable()) {\n return undefined;\n }\n\n const sends = channels[TASKS].get() as SendProtocol[];\n if (index < 0 || index >= sends.length) {\n return undefined;\n }\n\n const packet =\n _isSendInterface(sends[index]) && !_isSend(sends[index])\n ? new Send(sends[index].node, sends[index].args)\n : sends[index];\n\n if (!_isSendInterface(packet)) {\n console.warn(\n `Ignoring invalid packet ${JSON.stringify(packet)} in pending sends.`\n );\n return undefined;\n }\n if (!(packet.node in processes)) {\n console.warn(\n `Ignoring unknown node name ${packet.node} in pending sends.`\n );\n return undefined;\n }\n const triggers = [PUSH];\n const checkpointNamespace =\n parentNamespace === \"\"\n ? packet.node\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${packet.node}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n packet.node,\n PUSH,\n index.toString(),\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: packet.node,\n langgraph_triggers: triggers,\n langgraph_path: taskPath.slice(0, 3),\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const proc = processes[packet.node];\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name: packet.node,\n input: packet.args,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: packet.node,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => writes.push(...items),\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name: packet.node,\n writes: writes as PendingWrite[],\n triggers,\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: packet.args,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers,\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([packet.args])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", packet.node],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name: packet.node,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n } else if (taskPath[0] === PULL) {\n const name = taskPath[1].toString();\n const proc = processes[name];\n if (proc === undefined) {\n return undefined;\n }\n\n // Check if this task already has successful writes in the pending writes\n if (pendingWrites?.length) {\n // Find the task ID for this node/path\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n name,\n ]),\n checkpoint.id\n );\n\n // Check if there are successful writes (not ERROR) for this task ID\n const hasSuccessfulWrites = pendingWrites.some(\n (w) => w[0] === taskId && w[1] !== ERROR\n );\n\n // If task completed successfully, don't include it in next tasks\n if (hasSuccessfulWrites) {\n return undefined;\n }\n }\n\n const nullVersion = getNullChannelVersion(checkpoint.channel_versions);\n if (nullVersion === undefined) {\n return undefined;\n }\n const seen = checkpoint.versions_seen[name] ?? {};\n\n // Find the first trigger that is available and has a new version\n const trigger = proc.triggers.find((chan) => {\n if (!channels[chan].isAvailable()) return false;\n\n return (\n (checkpoint.channel_versions[chan] ?? nullVersion) >\n (seen[chan] ?? nullVersion)\n );\n });\n\n // If any of the channels read by this process were updated\n if (trigger !== undefined) {\n const val = _procInput(proc, channels, forExecution);\n if (val === undefined) {\n return undefined;\n }\n const checkpointNamespace =\n parentNamespace === \"\"\n ? name\n : `${parentNamespace}${CHECKPOINT_NAMESPACE_SEPARATOR}${name}`;\n const taskId = uuid5(\n JSON.stringify([\n checkpointNamespace,\n step.toString(),\n name,\n PULL,\n [trigger],\n ]),\n checkpoint.id\n );\n const taskCheckpointNamespace = `${checkpointNamespace}${CHECKPOINT_NAMESPACE_END}${taskId}`;\n let metadata = {\n langgraph_step: step,\n langgraph_node: name,\n langgraph_triggers: [trigger],\n langgraph_path: taskPath,\n langgraph_checkpoint_ns: taskCheckpointNamespace,\n };\n if (forExecution) {\n const node = proc.getNode();\n if (node !== undefined) {\n if (proc.metadata !== undefined) {\n metadata = { ...metadata, ...proc.metadata };\n }\n const writes: [keyof Cc, unknown][] = [];\n return {\n name,\n input: val,\n proc: node,\n subgraphs: proc.subgraphs,\n writes,\n config: patchConfig(\n mergeConfigs(config, {\n metadata,\n tags: proc.tags,\n store: extra.store ?? config.store,\n }),\n {\n runName: name,\n callbacks: manager?.getChild(`graph:step:${step}`),\n configurable: {\n [CONFIG_KEY_TASK_ID]: taskId,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [CONFIG_KEY_SEND]: (writes_: PendingWrite[]) =>\n _localWrite(\n (items: PendingWrite<keyof Cc>[]) => {\n writes.push(...items);\n },\n processes,\n writes_\n ),\n [CONFIG_KEY_READ]: (\n select_: Array<keyof Cc> | keyof Cc,\n fresh_: boolean = false\n ) =>\n _localRead(\n checkpoint,\n channels,\n {\n name,\n writes: writes as PendingWrite[],\n triggers: [trigger],\n path: taskPath,\n },\n select_,\n fresh_\n ),\n [CONFIG_KEY_CHECKPOINTER]:\n checkpointer ?? configurable[CONFIG_KEY_CHECKPOINTER],\n [CONFIG_KEY_CHECKPOINT_MAP]: {\n ...configurable[CONFIG_KEY_CHECKPOINT_MAP],\n [parentNamespace]: checkpoint.id,\n },\n [CONFIG_KEY_SCRATCHPAD]: _scratchpad({\n pendingWrites: pendingWrites ?? [],\n taskId,\n currentTaskInput: val,\n resumeMap: config.configurable?.[CONFIG_KEY_RESUME_MAP],\n namespaceHash: XXH3(taskCheckpointNamespace),\n }),\n [CONFIG_KEY_PREVIOUS_STATE]:\n checkpoint.channel_values[PREVIOUS],\n checkpoint_id: undefined,\n checkpoint_ns: taskCheckpointNamespace,\n },\n }\n ),\n triggers: [trigger],\n retry_policy: proc.retryPolicy,\n cache_key: proc.cachePolicy\n ? {\n key: XXH3(\n (proc.cachePolicy.keyFunc ?? JSON.stringify)([val])\n ),\n ns: [CACHE_NS_WRITES, proc.name ?? \"__dynamic__\", name],\n ttl: proc.cachePolicy.ttl,\n }\n : undefined,\n id: taskId,\n path: taskPath,\n writers: proc.getWriters(),\n } satisfies PregelExecutableTask<keyof Nn, keyof Cc>;\n }\n } else {\n return {\n id: taskId,\n name,\n interrupts: [],\n path: taskPath,\n } satisfies PregelTaskDescription;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Function injected under CONFIG_KEY_READ in task config, to read current state.\n * Used by conditional edges to read a copy of the state with reflecting the writes\n * from that node only.\n *\n * @internal\n */\nfunction _procInput(\n proc: PregelNode,\n channels: StrRecord<string, BaseChannel>,\n forExecution: boolean\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let val: any;\n\n if (typeof proc.channels === \"object\" && !Array.isArray(proc.channels)) {\n val = {};\n for (const [k, chan] of Object.entries(proc.channels)) {\n if (proc.triggers.includes(chan)) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n return undefined;\n } else {\n throw e;\n }\n }\n } else if (chan in channels) {\n try {\n val[k] = readChannel(channels, chan, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n }\n } else if (Array.isArray(proc.channels)) {\n let successfulRead = false;\n for (const chan of proc.channels) {\n try {\n val = readChannel(channels, chan, false);\n successfulRead = true;\n break;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e.name === EmptyChannelError.unminifiable_name) {\n continue;\n } else {\n throw e;\n }\n }\n }\n if (!successfulRead) {\n return undefined;\n }\n } else {\n throw new Error(\n `Invalid channels type, expected list or dict, got ${proc.channels}`\n );\n }\n\n // If the process has a mapper, apply it to the value\n if (forExecution && proc.mapper !== undefined) {\n val = proc.mapper(val);\n }\n\n return val;\n}\n\nfunction _scratchpad({\n pendingWrites,\n taskId,\n currentTaskInput,\n resumeMap,\n namespaceHash,\n}: {\n pendingWrites: CheckpointPendingWrite[];\n taskId: string;\n currentTaskInput: unknown;\n resumeMap: Record<string, unknown> | undefined;\n namespaceHash: string;\n}): PregelScratchpad {\n const nullResume = pendingWrites.find(\n ([writeTaskId, chan]) => writeTaskId === NULL_TASK_ID && chan === RESUME\n )?.[2];\n\n const resume = (() => {\n const result = pendingWrites\n .filter(\n ([writeTaskId, chan]) => writeTaskId === taskId && chan === RESUME\n )\n .flatMap(([_writeTaskId, _chan, resume]) => resume);\n\n if (resumeMap != null && namespaceHash in resumeMap) {\n const mappedResume = resumeMap[namespaceHash];\n result.push(mappedResume);\n }\n\n return result;\n })();\n\n const scratchpad = {\n callCounter: 0,\n interruptCounter: -1,\n resume,\n nullResume,\n subgraphCounter: 0,\n currentTaskInput,\n consumeNullResume: () => {\n if (scratchpad.nullResume) {\n delete scratchpad.nullResume;\n pendingWrites.splice(\n pendingWrites.findIndex(\n ([writeTaskId, chan]) =>\n writeTaskId === NULL_TASK_ID && chan === RESUME\n ),\n 1\n );\n return nullResume;\n }\n\n return undefined;\n },\n };\n return scratchpad;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { All, BaseCheckpointSaver, BaseStore, PendingWrite } from "@langchain/langgraph-checkpoint";
1
+ import { All, BaseCheckpointSaver, BaseStore, Checkpoint, PendingWrite, ReadonlyCheckpoint } from "@langchain/langgraph-checkpoint";
2
2
  import { RunnableConfig } from "@langchain/core/runnables";
3
3
  import { CallbackManagerForChainRun } from "@langchain/core/callbacks/manager";
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"algo.d.cts","names":["RunnableConfig","CallbackManagerForChainRun","All","BaseCheckpointSaver","Checkpoint","ReadonlyCheckpoint","PendingWrite","BaseStore","CheckpointPendingWrite","BaseChannel","PregelNode","PregelExecutableTask","PregelTaskDescription","SimpleTaskPath","TaskPath","IterableReadableWritableStream","StrRecord","K","T","WritesProtocol","C","increment","shouldInterrupt","PropertyKey","N","_localRead","Record","Cc","Array","_localWrite","_applyWrites","NextTaskExtraFields","NextTaskExtraFieldsWithStore","NextTaskExtraFieldsWithoutStore","_prepareNextTasks","Nn","_prepareSingleTask"],"sources":["../../src/pregel/algo.d.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { All, BaseCheckpointSaver, Checkpoint, ReadonlyCheckpoint, type PendingWrite, BaseStore, CheckpointPendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { PregelExecutableTask, PregelTaskDescription, SimpleTaskPath, TaskPath } from \"./types.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\nexport declare const increment: (current?: number | undefined) => number;\nexport declare function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(checkpoint: Checkpoint, interruptNodes: All | N[], tasks: PregelExecutableTask<N, C>[]): boolean;\nexport declare function _localRead<Cc extends Record<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, channels: Cc, task: WritesProtocol<keyof Cc>, select: Array<keyof Cc> | keyof Cc, fresh?: boolean): Record<string, unknown> | unknown;\nexport declare function _localWrite(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ncommit: (writes: [string, any][]) => any, processes: Record<string, PregelNode>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nwrites: [string, any][]): void;\nexport declare function _applyWrites<Cc extends Record<string, BaseChannel>>(checkpoint: Checkpoint, channels: Cc, tasks: WritesProtocol<keyof Cc>[], \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ngetNextVersion: ((version: any) => any) | undefined, triggerToNodes: Record<string, string[]> | undefined): void;\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n};\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFieldsWithoutStore): Record<string, PregelTaskDescription>;\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFieldsWithStore): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: SimpleTaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: boolean, extra: NextTaskExtraFieldsWithStore): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n"],"mappings":";;;;;;;;;KAWYgB,yCACFC,IAAIC"}
1
+ {"version":3,"file":"algo.d.cts","names":["RunnableConfig","CallbackManagerForChainRun","All","BaseCheckpointSaver","Checkpoint","ReadonlyCheckpoint","PendingWrite","BaseStore","CheckpointPendingWrite","BaseChannel","PregelNode","PregelExecutableTask","PregelTaskDescription","SimpleTaskPath","TaskPath","IterableReadableWritableStream","StrRecord","K","T","WritesProtocol","C","increment","shouldInterrupt","PropertyKey","N","_localRead","Record","Cc","Array","_localWrite","_applyWrites","Set","NextTaskExtraFields","NextTaskExtraFieldsWithStore","NextTaskExtraFieldsWithoutStore","_prepareNextTasks","Nn","_prepareSingleTask"],"sources":["../../src/pregel/algo.d.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { All, BaseCheckpointSaver, Checkpoint, ReadonlyCheckpoint, type PendingWrite, BaseStore, CheckpointPendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { PregelExecutableTask, PregelTaskDescription, SimpleTaskPath, TaskPath } from \"./types.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\nexport declare const increment: (current?: number | undefined) => number;\nexport declare function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(checkpoint: Checkpoint, interruptNodes: All | N[], tasks: PregelExecutableTask<N, C>[]): boolean;\nexport declare function _localRead<Cc extends Record<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, channels: Cc, task: WritesProtocol<keyof Cc>, select: Array<keyof Cc> | keyof Cc, fresh?: boolean): Record<string, unknown> | unknown;\nexport declare function _localWrite(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ncommit: (writes: [string, any][]) => any, processes: Record<string, PregelNode>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nwrites: [string, any][]): void;\nexport declare function _applyWrites<Cc extends Record<string, BaseChannel>>(checkpoint: Checkpoint, channels: Cc, tasks: WritesProtocol<keyof Cc>[], \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ngetNextVersion: ((version: any) => any) | undefined, triggerToNodes: Record<string, string[]> | undefined): Set<string>;\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFieldsWithoutStore): Record<string, PregelTaskDescription>;\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFieldsWithStore): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: SimpleTaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: boolean, extra: NextTaskExtraFieldsWithStore): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n"],"mappings":";;;;;;;;;KAWYgB,yCACFC,IAAIC"}
@@ -1,4 +1,4 @@
1
- import { All, BaseCheckpointSaver, BaseStore, PendingWrite } from "@langchain/langgraph-checkpoint";
1
+ import { All, BaseCheckpointSaver, BaseStore, Checkpoint, PendingWrite, ReadonlyCheckpoint } from "@langchain/langgraph-checkpoint";
2
2
  import { RunnableConfig } from "@langchain/core/runnables";
3
3
  import { CallbackManagerForChainRun } from "@langchain/core/callbacks/manager";
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"algo.d.ts","names":["RunnableConfig","CallbackManagerForChainRun","All","BaseCheckpointSaver","Checkpoint","ReadonlyCheckpoint","PendingWrite","BaseStore","CheckpointPendingWrite","BaseChannel","PregelNode","PregelExecutableTask","PregelTaskDescription","SimpleTaskPath","TaskPath","IterableReadableWritableStream","StrRecord","K","T","WritesProtocol","C","increment","shouldInterrupt","PropertyKey","N","_localRead","Record","Cc","Array","_localWrite","_applyWrites","NextTaskExtraFields","NextTaskExtraFieldsWithStore","NextTaskExtraFieldsWithoutStore","_prepareNextTasks","Nn","_prepareSingleTask"],"sources":["../../src/pregel/algo.d.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { All, BaseCheckpointSaver, Checkpoint, ReadonlyCheckpoint, type PendingWrite, BaseStore, CheckpointPendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { PregelExecutableTask, PregelTaskDescription, SimpleTaskPath, TaskPath } from \"./types.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\nexport declare const increment: (current?: number | undefined) => number;\nexport declare function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(checkpoint: Checkpoint, interruptNodes: All | N[], tasks: PregelExecutableTask<N, C>[]): boolean;\nexport declare function _localRead<Cc extends Record<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, channels: Cc, task: WritesProtocol<keyof Cc>, select: Array<keyof Cc> | keyof Cc, fresh?: boolean): Record<string, unknown> | unknown;\nexport declare function _localWrite(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ncommit: (writes: [string, any][]) => any, processes: Record<string, PregelNode>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nwrites: [string, any][]): void;\nexport declare function _applyWrites<Cc extends Record<string, BaseChannel>>(checkpoint: Checkpoint, channels: Cc, tasks: WritesProtocol<keyof Cc>[], \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ngetNextVersion: ((version: any) => any) | undefined, triggerToNodes: Record<string, string[]> | undefined): void;\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n};\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFieldsWithoutStore): Record<string, PregelTaskDescription>;\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFieldsWithStore): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: SimpleTaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: boolean, extra: NextTaskExtraFieldsWithStore): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n"],"mappings":";;;;;;;;;KAWYgB,yCACFC,IAAIC"}
1
+ {"version":3,"file":"algo.d.ts","names":["RunnableConfig","CallbackManagerForChainRun","All","BaseCheckpointSaver","Checkpoint","ReadonlyCheckpoint","PendingWrite","BaseStore","CheckpointPendingWrite","BaseChannel","PregelNode","PregelExecutableTask","PregelTaskDescription","SimpleTaskPath","TaskPath","IterableReadableWritableStream","StrRecord","K","T","WritesProtocol","C","increment","shouldInterrupt","PropertyKey","N","_localRead","Record","Cc","Array","_localWrite","_applyWrites","Set","NextTaskExtraFields","NextTaskExtraFieldsWithStore","NextTaskExtraFieldsWithoutStore","_prepareNextTasks","Nn","_prepareSingleTask"],"sources":["../../src/pregel/algo.d.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { RunnableConfig } from \"@langchain/core/runnables\";\nimport { CallbackManagerForChainRun } from \"@langchain/core/callbacks/manager\";\nimport { All, BaseCheckpointSaver, Checkpoint, ReadonlyCheckpoint, type PendingWrite, BaseStore, CheckpointPendingWrite } from \"@langchain/langgraph-checkpoint\";\nimport { BaseChannel } from \"../channels/base.js\";\nimport { PregelNode } from \"./read.js\";\nimport { PregelExecutableTask, PregelTaskDescription, SimpleTaskPath, TaskPath } from \"./types.js\";\nimport { IterableReadableWritableStream } from \"./stream.js\";\n/**\n * Construct a type with a set of properties K of type T\n */\nexport type StrRecord<K extends string, T> = {\n [P in K]: T;\n};\nexport type WritesProtocol<C = string> = {\n name: string;\n writes: PendingWrite<C>[];\n triggers: string[];\n path?: TaskPath;\n};\nexport declare const increment: (current?: number | undefined) => number;\nexport declare function shouldInterrupt<N extends PropertyKey, C extends PropertyKey>(checkpoint: Checkpoint, interruptNodes: All | N[], tasks: PregelExecutableTask<N, C>[]): boolean;\nexport declare function _localRead<Cc extends Record<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, channels: Cc, task: WritesProtocol<keyof Cc>, select: Array<keyof Cc> | keyof Cc, fresh?: boolean): Record<string, unknown> | unknown;\nexport declare function _localWrite(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ncommit: (writes: [string, any][]) => any, processes: Record<string, PregelNode>, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nwrites: [string, any][]): void;\nexport declare function _applyWrites<Cc extends Record<string, BaseChannel>>(checkpoint: Checkpoint, channels: Cc, tasks: WritesProtocol<keyof Cc>[], \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ngetNextVersion: ((version: any) => any) | undefined, triggerToNodes: Record<string, string[]> | undefined): Set<string>;\nexport type NextTaskExtraFields = {\n step: number;\n isResuming?: boolean;\n checkpointer?: BaseCheckpointSaver;\n manager?: CallbackManagerForChainRun;\n store?: BaseStore;\n stream?: IterableReadableWritableStream;\n triggerToNodes?: Record<string, string[]>;\n updatedChannels?: Set<string>;\n};\nexport type NextTaskExtraFieldsWithStore = NextTaskExtraFields & {\n store?: BaseStore;\n};\nexport type NextTaskExtraFieldsWithoutStore = NextTaskExtraFields & {\n store?: never;\n};\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFieldsWithoutStore): Record<string, PregelTaskDescription>;\nexport declare function _prepareNextTasks<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(checkpoint: ReadonlyCheckpoint, pendingWrites: [string, string, unknown][] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFieldsWithStore): Record<string, PregelExecutableTask<keyof Nn, keyof Cc>>;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: SimpleTaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: false, extra: NextTaskExtraFields): PregelTaskDescription | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: true, extra: NextTaskExtraFields): PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\nexport declare function _prepareSingleTask<Nn extends StrRecord<string, PregelNode>, Cc extends StrRecord<string, BaseChannel>>(taskPath: TaskPath, checkpoint: ReadonlyCheckpoint, pendingWrites: CheckpointPendingWrite[] | undefined, processes: Nn, channels: Cc, config: RunnableConfig, forExecution: boolean, extra: NextTaskExtraFieldsWithStore): PregelTaskDescription | PregelExecutableTask<keyof Nn, keyof Cc> | undefined;\n"],"mappings":";;;;;;;;;KAWYgB,yCACFC,IAAIC"}