langchain 1.0.0-alpha.9 → 1.0.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 (141) hide show
  1. package/CHANGELOG.md +260 -0
  2. package/README.md +29 -77
  3. package/dist/agents/ReactAgent.cjs +6 -5
  4. package/dist/agents/ReactAgent.cjs.map +1 -1
  5. package/dist/agents/ReactAgent.d.cts +11 -11
  6. package/dist/agents/ReactAgent.d.cts.map +1 -1
  7. package/dist/agents/ReactAgent.d.ts +11 -11
  8. package/dist/agents/ReactAgent.d.ts.map +1 -1
  9. package/dist/agents/ReactAgent.js +6 -5
  10. package/dist/agents/ReactAgent.js.map +1 -1
  11. package/dist/agents/annotation.cjs +8 -9
  12. package/dist/agents/annotation.cjs.map +1 -1
  13. package/dist/agents/annotation.js +8 -9
  14. package/dist/agents/annotation.js.map +1 -1
  15. package/dist/agents/index.cjs.map +1 -1
  16. package/dist/agents/index.d.cts +23 -23
  17. package/dist/agents/index.d.cts.map +1 -1
  18. package/dist/agents/index.d.ts +23 -23
  19. package/dist/agents/index.d.ts.map +1 -1
  20. package/dist/agents/index.js.map +1 -1
  21. package/dist/agents/middleware/callLimit.cjs +29 -27
  22. package/dist/agents/middleware/callLimit.cjs.map +1 -1
  23. package/dist/agents/middleware/callLimit.d.cts.map +1 -1
  24. package/dist/agents/middleware/callLimit.d.ts.map +1 -1
  25. package/dist/agents/middleware/callLimit.js +29 -27
  26. package/dist/agents/middleware/callLimit.js.map +1 -1
  27. package/dist/agents/middleware/contextEditing.cjs +1 -1
  28. package/dist/agents/middleware/contextEditing.d.cts.map +1 -1
  29. package/dist/agents/middleware/contextEditing.d.ts.map +1 -1
  30. package/dist/agents/middleware/contextEditing.js +1 -1
  31. package/dist/agents/middleware/dynamicSystemPrompt.d.cts.map +1 -1
  32. package/dist/agents/middleware/dynamicSystemPrompt.d.ts.map +1 -1
  33. package/dist/agents/middleware/hitl.cjs +92 -90
  34. package/dist/agents/middleware/hitl.cjs.map +1 -1
  35. package/dist/agents/middleware/hitl.d.cts +20 -20
  36. package/dist/agents/middleware/hitl.d.cts.map +1 -1
  37. package/dist/agents/middleware/hitl.d.ts +20 -20
  38. package/dist/agents/middleware/hitl.d.ts.map +1 -1
  39. package/dist/agents/middleware/hitl.js +92 -90
  40. package/dist/agents/middleware/hitl.js.map +1 -1
  41. package/dist/agents/middleware/modelFallback.cjs +1 -1
  42. package/dist/agents/middleware/modelFallback.cjs.map +1 -1
  43. package/dist/agents/middleware/modelFallback.d.cts +1 -1
  44. package/dist/agents/middleware/modelFallback.d.cts.map +1 -1
  45. package/dist/agents/middleware/modelFallback.d.ts +1 -1
  46. package/dist/agents/middleware/modelFallback.d.ts.map +1 -1
  47. package/dist/agents/middleware/modelFallback.js +1 -1
  48. package/dist/agents/middleware/modelFallback.js.map +1 -1
  49. package/dist/agents/middleware/promptCaching.d.cts.map +1 -1
  50. package/dist/agents/middleware/promptCaching.d.ts.map +1 -1
  51. package/dist/agents/middleware/summarization.cjs +1 -1
  52. package/dist/agents/middleware/summarization.js +1 -1
  53. package/dist/agents/middleware/todoListMiddleware.d.cts.map +1 -1
  54. package/dist/agents/middleware/todoListMiddleware.d.ts.map +1 -1
  55. package/dist/agents/middleware/toolCallLimit.cjs +30 -28
  56. package/dist/agents/middleware/toolCallLimit.cjs.map +1 -1
  57. package/dist/agents/middleware/toolCallLimit.d.cts.map +1 -1
  58. package/dist/agents/middleware/toolCallLimit.d.ts.map +1 -1
  59. package/dist/agents/middleware/toolCallLimit.js +30 -28
  60. package/dist/agents/middleware/toolCallLimit.js.map +1 -1
  61. package/dist/agents/middleware/types.d.cts +165 -19
  62. package/dist/agents/middleware/types.d.cts.map +1 -1
  63. package/dist/agents/middleware/types.d.ts +165 -19
  64. package/dist/agents/middleware/types.d.ts.map +1 -1
  65. package/dist/agents/middleware/utils.cjs +10 -0
  66. package/dist/agents/middleware/utils.cjs.map +1 -1
  67. package/dist/agents/middleware/utils.d.cts.map +1 -1
  68. package/dist/agents/middleware/utils.d.ts.map +1 -1
  69. package/dist/agents/middleware/utils.js +9 -1
  70. package/dist/agents/middleware/utils.js.map +1 -1
  71. package/dist/agents/middleware.cjs +6 -10
  72. package/dist/agents/middleware.cjs.map +1 -1
  73. package/dist/agents/middleware.d.cts +12 -32
  74. package/dist/agents/middleware.d.cts.map +1 -1
  75. package/dist/agents/middleware.d.ts +12 -32
  76. package/dist/agents/middleware.d.ts.map +1 -1
  77. package/dist/agents/middleware.js +6 -10
  78. package/dist/agents/middleware.js.map +1 -1
  79. package/dist/agents/nodes/AfterAgentNode.cjs +3 -1
  80. package/dist/agents/nodes/AfterAgentNode.cjs.map +1 -1
  81. package/dist/agents/nodes/AfterAgentNode.js +3 -1
  82. package/dist/agents/nodes/AfterAgentNode.js.map +1 -1
  83. package/dist/agents/nodes/AfterModelNode.cjs +3 -1
  84. package/dist/agents/nodes/AfterModelNode.cjs.map +1 -1
  85. package/dist/agents/nodes/AfterModelNode.js +3 -1
  86. package/dist/agents/nodes/AfterModelNode.js.map +1 -1
  87. package/dist/agents/nodes/AgentNode.cjs +1 -0
  88. package/dist/agents/nodes/AgentNode.cjs.map +1 -1
  89. package/dist/agents/nodes/AgentNode.js +1 -0
  90. package/dist/agents/nodes/AgentNode.js.map +1 -1
  91. package/dist/agents/nodes/BeforeAgentNode.cjs +3 -1
  92. package/dist/agents/nodes/BeforeAgentNode.cjs.map +1 -1
  93. package/dist/agents/nodes/BeforeAgentNode.js +3 -1
  94. package/dist/agents/nodes/BeforeAgentNode.js.map +1 -1
  95. package/dist/agents/nodes/BeforeModelNode.cjs +3 -1
  96. package/dist/agents/nodes/BeforeModelNode.cjs.map +1 -1
  97. package/dist/agents/nodes/BeforeModelNode.js +3 -1
  98. package/dist/agents/nodes/BeforeModelNode.js.map +1 -1
  99. package/dist/agents/nodes/ToolNode.cjs +37 -36
  100. package/dist/agents/nodes/ToolNode.cjs.map +1 -1
  101. package/dist/agents/nodes/ToolNode.js +37 -36
  102. package/dist/agents/nodes/ToolNode.js.map +1 -1
  103. package/dist/agents/nodes/middleware.cjs +10 -9
  104. package/dist/agents/nodes/middleware.cjs.map +1 -1
  105. package/dist/agents/nodes/middleware.js +10 -9
  106. package/dist/agents/nodes/middleware.js.map +1 -1
  107. package/dist/agents/nodes/types.d.cts +15 -0
  108. package/dist/agents/nodes/types.d.cts.map +1 -1
  109. package/dist/agents/nodes/types.d.ts +15 -0
  110. package/dist/agents/nodes/types.d.ts.map +1 -1
  111. package/dist/agents/types.d.cts +48 -3
  112. package/dist/agents/types.d.cts.map +1 -1
  113. package/dist/agents/types.d.ts +48 -3
  114. package/dist/agents/types.d.ts.map +1 -1
  115. package/dist/agents/utils.cjs +4 -4
  116. package/dist/agents/utils.cjs.map +1 -1
  117. package/dist/agents/utils.js +4 -4
  118. package/dist/agents/utils.js.map +1 -1
  119. package/dist/index.cjs +6 -6
  120. package/dist/index.d.cts +2 -2
  121. package/dist/index.d.ts +2 -2
  122. package/dist/index.js +1 -1
  123. package/dist/load/import_map.cjs +1 -5
  124. package/dist/load/import_map.cjs.map +1 -1
  125. package/dist/load/import_map.js +1 -5
  126. package/dist/load/import_map.js.map +1 -1
  127. package/package.json +30 -49
  128. package/dist/embeddings/cache_backed.cjs +0 -140
  129. package/dist/embeddings/cache_backed.cjs.map +0 -1
  130. package/dist/embeddings/cache_backed.d.cts +0 -107
  131. package/dist/embeddings/cache_backed.d.cts.map +0 -1
  132. package/dist/embeddings/cache_backed.d.ts +0 -107
  133. package/dist/embeddings/cache_backed.d.ts.map +0 -1
  134. package/dist/embeddings/cache_backed.js +0 -134
  135. package/dist/embeddings/cache_backed.js.map +0 -1
  136. package/dist/embeddings/fake.cjs +0 -22
  137. package/dist/embeddings/fake.cjs.map +0 -1
  138. package/dist/embeddings/fake.d.cts +0 -1
  139. package/dist/embeddings/fake.d.ts +0 -1
  140. package/dist/embeddings/fake.js +0 -12
  141. package/dist/embeddings/fake.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["message: T","updatedContent: MessageContent","updatedName: string | undefined","tool: ClientTool | ServerTool","llm: LanguageModelLike","toolClasses: (ClientTool | ServerTool)[]","options: Partial<BaseChatModelCallOptions>","step: RunnableLike","message?: BaseMessage","prompt?: Prompt","promptRunnable: Runnable","state: typeof MessagesAnnotation.State","model","nextSteps: unknown[]","handlers: ToolCallWrapper[]","outer: ToolCallWrapper","inner: ToolCallWrapper","innerHandler: ToolCallHandler","middleware: readonly AgentMiddleware[]","wrappedHandler: ToolCallWrapper"],"sources":["../../src/agents/utils.ts"],"sourcesContent":["import {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageLike,\n SystemMessage,\n MessageContent,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { MessagesAnnotation, isCommand } from \"@langchain/langgraph\";\nimport {\n BaseChatModel,\n type BaseChatModelCallOptions,\n} from \"@langchain/core/language_models/chat_models\";\nimport {\n LanguageModelLike,\n BaseLanguageModelInput,\n} from \"@langchain/core/language_models/base\";\nimport {\n Runnable,\n RunnableLike,\n RunnableConfig,\n RunnableLambda,\n RunnableSequence,\n RunnableBinding,\n} from \"@langchain/core/runnables\";\n\nimport { isBaseChatModel, isConfigurableModel } from \"./model.js\";\nimport type { ClientTool, ServerTool } from \"./tools.js\";\nimport { MultipleToolsBoundError } from \"./errors.js\";\nimport { PROMPT_RUNNABLE_NAME } from \"./constants.js\";\nimport type { AgentBuiltInState } from \"./runtime.js\";\nimport type {\n ToolCallWrapper,\n ToolCallHandler,\n AgentMiddleware,\n ToolCallRequest,\n} from \"./middleware/types.js\";\n\nconst NAME_PATTERN = /<name>(.*?)<\\/name>/s;\nconst CONTENT_PATTERN = /<content>(.*?)<\\/content>/s;\n\nexport type AgentNameMode = \"inline\";\n\n/**\n * Attach formatted agent names to the messages passed to and from a language model.\n *\n * This is useful for making a message history with multiple agents more coherent.\n *\n * NOTE: agent name is consumed from the message.name field.\n * If you're using an agent built with createAgent, name is automatically set.\n * If you're building a custom agent, make sure to set the name on the AI message returned by the LLM.\n *\n * @param message - Message to add agent name formatting to\n * @returns Message with agent name formatting\n *\n * @internal\n */\nexport function _addInlineAgentName<T extends BaseMessageLike>(\n message: T\n): T | AIMessage {\n if (!AIMessage.isInstance(message) || AIMessageChunk.isInstance(message)) {\n return message;\n }\n\n if (!message.name) {\n return message;\n }\n\n const { name } = message;\n\n if (typeof message.content === \"string\") {\n return new AIMessage({\n ...message.lc_kwargs,\n content: `<name>${name}</name><content>${message.content}</content>`,\n name: undefined,\n });\n }\n\n const updatedContent = [];\n let textBlockCount = 0;\n\n for (const contentBlock of message.content) {\n if (typeof contentBlock === \"string\") {\n textBlockCount += 1;\n updatedContent.push(\n `<name>${name}</name><content>${contentBlock}</content>`\n );\n } else if (\n typeof contentBlock === \"object\" &&\n \"type\" in contentBlock &&\n contentBlock.type === \"text\"\n ) {\n textBlockCount += 1;\n updatedContent.push({\n ...contentBlock,\n text: `<name>${name}</name><content>${contentBlock.text}</content>`,\n });\n } else {\n updatedContent.push(contentBlock);\n }\n }\n\n if (!textBlockCount) {\n updatedContent.unshift({\n type: \"text\",\n text: `<name>${name}</name><content></content>`,\n });\n }\n return new AIMessage({\n ...message.lc_kwargs,\n content: updatedContent as MessageContent,\n name: undefined,\n });\n}\n\n/**\n * Remove explicit name and content XML tags from the AI message content.\n *\n * Examples:\n *\n * @example\n * ```typescript\n * removeInlineAgentName(new AIMessage({ content: \"<name>assistant</name><content>Hello</content>\", name: \"assistant\" }))\n * // AIMessage with content: \"Hello\"\n *\n * removeInlineAgentName(new AIMessage({ content: [{type: \"text\", text: \"<name>assistant</name><content>Hello</content>\"}], name: \"assistant\" }))\n * // AIMessage with content: [{type: \"text\", text: \"Hello\"}]\n * ```\n *\n * @internal\n */\nexport function _removeInlineAgentName<T extends BaseMessage>(message: T): T {\n if (!AIMessage.isInstance(message) || !message.content) {\n return message;\n }\n\n let updatedContent: MessageContent = [];\n let updatedName: string | undefined;\n\n if (Array.isArray(message.content)) {\n updatedContent = message.content\n .filter((block) => {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const nameMatch = block.text.match(NAME_PATTERN);\n const contentMatch = block.text.match(CONTENT_PATTERN);\n // don't include empty content blocks that were added because there was no text block to modify\n if (nameMatch && (!contentMatch || contentMatch[1] === \"\")) {\n // capture name from text block\n updatedName = nameMatch[1];\n return false;\n }\n return true;\n }\n return true;\n })\n .map((block) => {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const nameMatch = block.text.match(NAME_PATTERN);\n const contentMatch = block.text.match(CONTENT_PATTERN);\n\n if (!nameMatch || !contentMatch) {\n return block;\n }\n\n // capture name from text block\n updatedName = nameMatch[1];\n\n return {\n ...block,\n text: contentMatch[1],\n };\n }\n return block;\n });\n } else {\n const content = message.content as string;\n const nameMatch = content.match(NAME_PATTERN);\n const contentMatch = content.match(CONTENT_PATTERN);\n\n if (!nameMatch || !contentMatch) {\n return message;\n }\n\n updatedName = nameMatch[1];\n updatedContent = contentMatch[1];\n }\n\n return new AIMessage({\n ...(Object.keys(message.lc_kwargs ?? {}).length > 0\n ? message.lc_kwargs\n : message),\n content: updatedContent,\n name: updatedName,\n }) as T;\n}\n\nexport function isClientTool(\n tool: ClientTool | ServerTool\n): tool is ClientTool {\n return Runnable.isRunnable(tool);\n}\n\n/**\n * Helper function to check if a language model has a bindTools method.\n * @param llm - The language model to check if it has a bindTools method.\n * @returns True if the language model has a bindTools method, false otherwise.\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\n/**\n * Helper function to bind tools to a language model.\n * @param llm - The language model to bind tools to.\n * @param toolClasses - The tools to bind to the language model.\n * @param options - The options to pass to the language model.\n * @returns The language model with the tools bound to it.\n */\nconst _simpleBindTools = (\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[],\n options: Partial<BaseChatModelCallOptions> = {}\n) => {\n if (_isChatModelWithBindTools(llm)) {\n return llm.bindTools(toolClasses, options);\n }\n\n if (\n RunnableBinding.isRunnableBinding(llm) &&\n _isChatModelWithBindTools(llm.bound)\n ) {\n const newBound = llm.bound.bindTools(toolClasses, options);\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\n/**\n * Check if the LLM already has bound tools and throw if it does.\n *\n * @param llm - The LLM to check.\n * @returns void\n */\nexport function validateLLMHasNoBoundTools(llm: LanguageModelLike): void {\n /**\n * If llm is a function, we can't validate until runtime, so skip\n */\n if (typeof llm === \"function\") {\n return;\n }\n\n let model = llm;\n\n /**\n * If model is a RunnableSequence, find a RunnableBinding in its steps\n */\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find((step: RunnableLike) =>\n RunnableBinding.isRunnableBinding(step)\n ) || model;\n }\n\n /**\n * If model is configurable, get the underlying model\n */\n if (isConfigurableModel(model)) {\n /**\n * Can't validate async model retrieval in constructor\n */\n return;\n }\n\n /**\n * Check if model is a RunnableBinding with bound tools\n */\n if (RunnableBinding.isRunnableBinding(model)) {\n const hasToolsInKwargs =\n model.kwargs != null &&\n typeof model.kwargs === \"object\" &&\n \"tools\" in model.kwargs &&\n Array.isArray(model.kwargs.tools) &&\n model.kwargs.tools.length > 0;\n\n const hasToolsInConfig =\n model.config != null &&\n typeof model.config === \"object\" &&\n \"tools\" in model.config &&\n Array.isArray(model.config.tools) &&\n model.config.tools.length > 0;\n\n if (hasToolsInKwargs || hasToolsInConfig) {\n throw new MultipleToolsBoundError();\n }\n }\n\n /**\n * Also check if model has tools property directly (e.g., FakeToolCallingModel)\n */\n if (\n \"tools\" in model &&\n model.tools !== undefined &&\n Array.isArray(model.tools) &&\n model.tools.length > 0\n ) {\n throw new MultipleToolsBoundError();\n }\n}\n\n/**\n * Check if the last message in the messages array has tool calls.\n *\n * @param messages - The messages to check.\n * @returns True if the last message has tool calls, false otherwise.\n */\nexport function hasToolCalls(message?: BaseMessage): boolean {\n return Boolean(\n AIMessage.isInstance(message) &&\n message.tool_calls &&\n message.tool_calls.length > 0\n );\n}\n\ntype Prompt = string | SystemMessage;\n\nexport function 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 {\n throw new Error(`Got unexpected type for 'prompt': ${typeof prompt}`);\n }\n\n return promptRunnable;\n}\n\n/**\n * Helper function to bind tools to a language model.\n * @param llm - The language model to bind tools to.\n * @param toolClasses - The tools to bind to the language model.\n * @param options - The options to pass to the language model.\n * @returns The language model with the tools bound to it.\n */\nexport async function bindTools(\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[],\n options: Partial<BaseChatModelCallOptions> = {}\n): Promise<\n | RunnableSequence<unknown, unknown>\n | RunnableBinding<unknown, unknown, RunnableConfig<Record<string, unknown>>>\n | Runnable<BaseLanguageModelInput, AIMessageChunk, BaseChatModelCallOptions>\n> {\n const model = _simpleBindTools(llm, toolClasses, options);\n if (model) return model;\n\n if (isConfigurableModel(llm)) {\n const model = _simpleBindTools(await llm._model(), toolClasses, options);\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(\n llm.steps[modelStep],\n toolClasses,\n options\n );\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\n/**\n * Compose multiple wrapToolCall handlers into a single middleware stack.\n *\n * Composes handlers so the first in the list becomes the outermost layer.\n * Each handler receives a handler callback to execute inner layers.\n *\n * @param handlers - List of handlers. First handler wraps all others.\n * @returns Composed handler, or undefined if handlers array is empty.\n *\n * @example\n * ```typescript\n * // handlers=[auth, retry] means: auth wraps retry\n * // Flow: auth calls retry, retry calls base handler\n * const auth: ToolCallWrapper = async (request, handler) => {\n * try {\n * return await handler(request.toolCall);\n * } catch (error) {\n * if (error.message === \"Unauthorized\") {\n * await refreshToken();\n * return await handler(request.toolCall);\n * }\n * throw error;\n * }\n * };\n *\n * const retry: ToolCallWrapper = async (request, handler) => {\n * for (let attempt = 0; attempt < 3; attempt++) {\n * try {\n * return await handler(request.toolCall);\n * } catch (error) {\n * if (attempt === 2) throw error;\n * }\n * }\n * throw new Error(\"Unreachable\");\n * };\n *\n * const composedHandler = chainToolCallHandlers([auth, retry]);\n * ```\n */\nfunction chainToolCallHandlers(\n handlers: ToolCallWrapper[]\n): ToolCallWrapper | undefined {\n if (handlers.length === 0) {\n return undefined;\n }\n\n if (handlers.length === 1) {\n return handlers[0];\n }\n\n // Compose two handlers where outer wraps inner\n function composeTwo(\n outer: ToolCallWrapper,\n inner: ToolCallWrapper\n ): ToolCallWrapper {\n return async (request, handler) => {\n // Create a wrapper that calls inner with the base handler\n const innerHandler: ToolCallHandler = async () =>\n inner(request, async (tc) => handler(tc));\n\n // Call outer with the wrapped inner as its handler\n return outer(request, innerHandler);\n };\n }\n\n // Compose right-to-left: outer(inner(innermost(handler)))\n let result = handlers[handlers.length - 1];\n for (let i = handlers.length - 2; i >= 0; i--) {\n result = composeTwo(handlers[i], result);\n }\n\n return result;\n}\n\n/**\n * Wrapping `wrapToolCall` invocation so we can inject middleware name into\n * the error message.\n *\n * @param middleware list of middleware passed to the agent\n * @returns single wrap function\n */\nexport function wrapToolCall(middleware: readonly AgentMiddleware[]) {\n const middlewareWithWrapToolCall = middleware.filter((m) => m.wrapToolCall);\n\n if (middlewareWithWrapToolCall.length === 0) {\n return;\n }\n\n return chainToolCallHandlers(\n middlewareWithWrapToolCall.map((m) => {\n const originalHandler = m.wrapToolCall!;\n /**\n * Wrap with error handling and validation\n */\n const wrappedHandler: ToolCallWrapper = async (request, handler) => {\n try {\n const result = await originalHandler(\n request as ToolCallRequest<AgentBuiltInState, unknown>,\n handler\n );\n\n /**\n * Validate return type\n */\n if (!ToolMessage.isInstance(result) && !isCommand(result)) {\n throw new Error(\n `Invalid response from \"wrapToolCall\" in middleware \"${m.name}\": ` +\n `expected ToolMessage or Command, got ${typeof result}`\n );\n }\n\n return result;\n } catch (error) {\n /**\n * Add middleware context to error if not already added\n */\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n error instanceof Error &&\n !error.message.includes(`middleware \"${m.name}\"`)\n ) {\n error.message = `Error in middleware \"${m.name}\": ${error.message}`;\n }\n throw error;\n }\n };\n return wrappedHandler;\n })\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","names":["message: T","updatedContent: MessageContent","updatedName: string | undefined","tool: ClientTool | ServerTool","llm: LanguageModelLike","toolClasses: (ClientTool | ServerTool)[]","options: Partial<BaseChatModelCallOptions>","step: RunnableLike","message?: BaseMessage","prompt?: Prompt","promptRunnable: Runnable","state: typeof MessagesAnnotation.State","model","nextSteps: unknown[]","handlers: WrapToolCallHook[]","outer: WrapToolCallHook","inner: WrapToolCallHook","innerHandler: ToolCallHandler","middleware: readonly AgentMiddleware[]","wrappedHandler: WrapToolCallHook"],"sources":["../../src/agents/utils.ts"],"sourcesContent":["import {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageLike,\n SystemMessage,\n MessageContent,\n ToolMessage,\n} from \"@langchain/core/messages\";\nimport { MessagesAnnotation, isCommand } from \"@langchain/langgraph\";\nimport {\n BaseChatModel,\n type BaseChatModelCallOptions,\n} from \"@langchain/core/language_models/chat_models\";\nimport {\n LanguageModelLike,\n BaseLanguageModelInput,\n} from \"@langchain/core/language_models/base\";\nimport {\n Runnable,\n RunnableLike,\n RunnableConfig,\n RunnableLambda,\n RunnableSequence,\n RunnableBinding,\n} from \"@langchain/core/runnables\";\n\nimport { isBaseChatModel, isConfigurableModel } from \"./model.js\";\nimport type { ClientTool, ServerTool } from \"./tools.js\";\nimport { MultipleToolsBoundError } from \"./errors.js\";\nimport { PROMPT_RUNNABLE_NAME } from \"./constants.js\";\nimport type { AgentBuiltInState } from \"./runtime.js\";\nimport type {\n ToolCallHandler,\n AgentMiddleware,\n ToolCallRequest,\n WrapToolCallHook,\n} from \"./middleware/types.js\";\n\nconst NAME_PATTERN = /<name>(.*?)<\\/name>/s;\nconst CONTENT_PATTERN = /<content>(.*?)<\\/content>/s;\n\nexport type AgentNameMode = \"inline\";\n\n/**\n * Attach formatted agent names to the messages passed to and from a language model.\n *\n * This is useful for making a message history with multiple agents more coherent.\n *\n * NOTE: agent name is consumed from the message.name field.\n * If you're using an agent built with createAgent, name is automatically set.\n * If you're building a custom agent, make sure to set the name on the AI message returned by the LLM.\n *\n * @param message - Message to add agent name formatting to\n * @returns Message with agent name formatting\n *\n * @internal\n */\nexport function _addInlineAgentName<T extends BaseMessageLike>(\n message: T\n): T | AIMessage {\n if (!AIMessage.isInstance(message) || AIMessageChunk.isInstance(message)) {\n return message;\n }\n\n if (!message.name) {\n return message;\n }\n\n const { name } = message;\n\n if (typeof message.content === \"string\") {\n return new AIMessage({\n ...message.lc_kwargs,\n content: `<name>${name}</name><content>${message.content}</content>`,\n name: undefined,\n });\n }\n\n const updatedContent = [];\n let textBlockCount = 0;\n\n for (const contentBlock of message.content) {\n if (typeof contentBlock === \"string\") {\n textBlockCount += 1;\n updatedContent.push(\n `<name>${name}</name><content>${contentBlock}</content>`\n );\n } else if (\n typeof contentBlock === \"object\" &&\n \"type\" in contentBlock &&\n contentBlock.type === \"text\"\n ) {\n textBlockCount += 1;\n updatedContent.push({\n ...contentBlock,\n text: `<name>${name}</name><content>${contentBlock.text}</content>`,\n });\n } else {\n updatedContent.push(contentBlock);\n }\n }\n\n if (!textBlockCount) {\n updatedContent.unshift({\n type: \"text\",\n text: `<name>${name}</name><content></content>`,\n });\n }\n return new AIMessage({\n ...message.lc_kwargs,\n content: updatedContent as MessageContent,\n name: undefined,\n });\n}\n\n/**\n * Remove explicit name and content XML tags from the AI message content.\n *\n * Examples:\n *\n * @example\n * ```typescript\n * removeInlineAgentName(new AIMessage({ content: \"<name>assistant</name><content>Hello</content>\", name: \"assistant\" }))\n * // AIMessage with content: \"Hello\"\n *\n * removeInlineAgentName(new AIMessage({ content: [{type: \"text\", text: \"<name>assistant</name><content>Hello</content>\"}], name: \"assistant\" }))\n * // AIMessage with content: [{type: \"text\", text: \"Hello\"}]\n * ```\n *\n * @internal\n */\nexport function _removeInlineAgentName<T extends BaseMessage>(message: T): T {\n if (!AIMessage.isInstance(message) || !message.content) {\n return message;\n }\n\n let updatedContent: MessageContent = [];\n let updatedName: string | undefined;\n\n if (Array.isArray(message.content)) {\n updatedContent = message.content\n .filter((block) => {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const nameMatch = block.text.match(NAME_PATTERN);\n const contentMatch = block.text.match(CONTENT_PATTERN);\n // don't include empty content blocks that were added because there was no text block to modify\n if (nameMatch && (!contentMatch || contentMatch[1] === \"\")) {\n // capture name from text block\n updatedName = nameMatch[1];\n return false;\n }\n return true;\n }\n return true;\n })\n .map((block) => {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const nameMatch = block.text.match(NAME_PATTERN);\n const contentMatch = block.text.match(CONTENT_PATTERN);\n\n if (!nameMatch || !contentMatch) {\n return block;\n }\n\n // capture name from text block\n updatedName = nameMatch[1];\n\n return {\n ...block,\n text: contentMatch[1],\n };\n }\n return block;\n });\n } else {\n const content = message.content as string;\n const nameMatch = content.match(NAME_PATTERN);\n const contentMatch = content.match(CONTENT_PATTERN);\n\n if (!nameMatch || !contentMatch) {\n return message;\n }\n\n updatedName = nameMatch[1];\n updatedContent = contentMatch[1];\n }\n\n return new AIMessage({\n ...(Object.keys(message.lc_kwargs ?? {}).length > 0\n ? message.lc_kwargs\n : message),\n content: updatedContent,\n name: updatedName,\n }) as T;\n}\n\nexport function isClientTool(\n tool: ClientTool | ServerTool\n): tool is ClientTool {\n return Runnable.isRunnable(tool);\n}\n\n/**\n * Helper function to check if a language model has a bindTools method.\n * @param llm - The language model to check if it has a bindTools method.\n * @returns True if the language model has a bindTools method, false otherwise.\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\n/**\n * Helper function to bind tools to a language model.\n * @param llm - The language model to bind tools to.\n * @param toolClasses - The tools to bind to the language model.\n * @param options - The options to pass to the language model.\n * @returns The language model with the tools bound to it.\n */\nconst _simpleBindTools = (\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[],\n options: Partial<BaseChatModelCallOptions> = {}\n) => {\n if (_isChatModelWithBindTools(llm)) {\n return llm.bindTools(toolClasses, options);\n }\n\n if (\n RunnableBinding.isRunnableBinding(llm) &&\n _isChatModelWithBindTools(llm.bound)\n ) {\n const newBound = llm.bound.bindTools(toolClasses, options);\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\n/**\n * Check if the LLM already has bound tools and throw if it does.\n *\n * @param llm - The LLM to check.\n * @returns void\n */\nexport function validateLLMHasNoBoundTools(llm: LanguageModelLike): void {\n /**\n * If llm is a function, we can't validate until runtime, so skip\n */\n if (typeof llm === \"function\") {\n return;\n }\n\n let model = llm;\n\n /**\n * If model is a RunnableSequence, find a RunnableBinding in its steps\n */\n if (RunnableSequence.isRunnableSequence(model)) {\n model =\n model.steps.find((step: RunnableLike) =>\n RunnableBinding.isRunnableBinding(step)\n ) || model;\n }\n\n /**\n * If model is configurable, get the underlying model\n */\n if (isConfigurableModel(model)) {\n /**\n * Can't validate async model retrieval in constructor\n */\n return;\n }\n\n /**\n * Check if model is a RunnableBinding with bound tools\n */\n if (RunnableBinding.isRunnableBinding(model)) {\n const hasToolsInKwargs =\n model.kwargs != null &&\n typeof model.kwargs === \"object\" &&\n \"tools\" in model.kwargs &&\n Array.isArray(model.kwargs.tools) &&\n model.kwargs.tools.length > 0;\n\n const hasToolsInConfig =\n model.config != null &&\n typeof model.config === \"object\" &&\n \"tools\" in model.config &&\n Array.isArray(model.config.tools) &&\n model.config.tools.length > 0;\n\n if (hasToolsInKwargs || hasToolsInConfig) {\n throw new MultipleToolsBoundError();\n }\n }\n\n /**\n * Also check if model has tools property directly (e.g., FakeToolCallingModel)\n */\n if (\n \"tools\" in model &&\n model.tools !== undefined &&\n Array.isArray(model.tools) &&\n model.tools.length > 0\n ) {\n throw new MultipleToolsBoundError();\n }\n}\n\n/**\n * Check if the last message in the messages array has tool calls.\n *\n * @param messages - The messages to check.\n * @returns True if the last message has tool calls, false otherwise.\n */\nexport function hasToolCalls(message?: BaseMessage): boolean {\n return Boolean(\n AIMessage.isInstance(message) &&\n message.tool_calls &&\n message.tool_calls.length > 0\n );\n}\n\ntype Prompt = string | SystemMessage;\n\nexport function 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 {\n throw new Error(`Got unexpected type for 'prompt': ${typeof prompt}`);\n }\n\n return promptRunnable;\n}\n\n/**\n * Helper function to bind tools to a language model.\n * @param llm - The language model to bind tools to.\n * @param toolClasses - The tools to bind to the language model.\n * @param options - The options to pass to the language model.\n * @returns The language model with the tools bound to it.\n */\nexport async function bindTools(\n llm: LanguageModelLike,\n toolClasses: (ClientTool | ServerTool)[],\n options: Partial<BaseChatModelCallOptions> = {}\n): Promise<\n | RunnableSequence<unknown, unknown>\n | RunnableBinding<unknown, unknown, RunnableConfig<Record<string, unknown>>>\n | Runnable<BaseLanguageModelInput, AIMessageChunk, BaseChatModelCallOptions>\n> {\n const model = _simpleBindTools(llm, toolClasses, options);\n if (model) return model;\n\n if (isConfigurableModel(llm)) {\n const model = _simpleBindTools(await llm._model(), toolClasses, options);\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(\n llm.steps[modelStep],\n toolClasses,\n options\n );\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\n/**\n * Compose multiple wrapToolCall handlers into a single middleware stack.\n *\n * Composes handlers so the first in the list becomes the outermost layer.\n * Each handler receives a handler callback to execute inner layers.\n *\n * @param handlers - List of handlers. First handler wraps all others.\n * @returns Composed handler, or undefined if handlers array is empty.\n *\n * @example\n * ```typescript\n * // handlers=[auth, retry] means: auth wraps retry\n * // Flow: auth calls retry, retry calls base handler\n * const auth: ToolCallWrapper = async (request, handler) => {\n * try {\n * return await handler(request);\n * } catch (error) {\n * if (error.message === \"Unauthorized\") {\n * await refreshToken();\n * return await handler(request);\n * }\n * throw error;\n * }\n * };\n *\n * const retry: ToolCallWrapper = async (request, handler) => {\n * for (let attempt = 0; attempt < 3; attempt++) {\n * try {\n * return await handler(request);\n * } catch (error) {\n * if (attempt === 2) throw error;\n * }\n * }\n * throw new Error(\"Unreachable\");\n * };\n *\n * const composedHandler = chainToolCallHandlers([auth, retry]);\n * ```\n */\nfunction chainToolCallHandlers(\n handlers: WrapToolCallHook[]\n): WrapToolCallHook | undefined {\n if (handlers.length === 0) {\n return undefined;\n }\n\n if (handlers.length === 1) {\n return handlers[0];\n }\n\n // Compose two handlers where outer wraps inner\n function composeTwo(\n outer: WrapToolCallHook,\n inner: WrapToolCallHook\n ): WrapToolCallHook {\n return async (request, handler) => {\n // Create a wrapper that calls inner with the base handler\n const innerHandler: ToolCallHandler = async (req) =>\n inner(req, async (innerReq) => handler(innerReq));\n\n // Call outer with the wrapped inner as its handler\n return outer(request, innerHandler);\n };\n }\n\n // Compose right-to-left: outer(inner(innermost(handler)))\n let result = handlers[handlers.length - 1];\n for (let i = handlers.length - 2; i >= 0; i--) {\n result = composeTwo(handlers[i], result);\n }\n\n return result;\n}\n\n/**\n * Wrapping `wrapToolCall` invocation so we can inject middleware name into\n * the error message.\n *\n * @param middleware list of middleware passed to the agent\n * @returns single wrap function\n */\nexport function wrapToolCall(middleware: readonly AgentMiddleware[]) {\n const middlewareWithWrapToolCall = middleware.filter((m) => m.wrapToolCall);\n\n if (middlewareWithWrapToolCall.length === 0) {\n return;\n }\n\n return chainToolCallHandlers(\n middlewareWithWrapToolCall.map((m) => {\n const originalHandler = m.wrapToolCall!;\n /**\n * Wrap with error handling and validation\n */\n const wrappedHandler: WrapToolCallHook = async (request, handler) => {\n try {\n const result = await originalHandler(\n request as ToolCallRequest<AgentBuiltInState, unknown>,\n handler\n );\n\n /**\n * Validate return type\n */\n if (!ToolMessage.isInstance(result) && !isCommand(result)) {\n throw new Error(\n `Invalid response from \"wrapToolCall\" in middleware \"${m.name}\": ` +\n `expected ToolMessage or Command, got ${typeof result}`\n );\n }\n\n return result;\n } catch (error) {\n /**\n * Add middleware context to error if not already added\n */\n if (\n // eslint-disable-next-line no-instanceof/no-instanceof\n error instanceof Error &&\n !error.message.includes(`middleware \"${m.name}\"`)\n ) {\n error.message = `Error in middleware \"${m.name}\": ${error.message}`;\n }\n throw error;\n }\n };\n return wrappedHandler;\n })\n );\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -2,10 +2,10 @@ const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
2
2
  const require_chat_models_universal = require('./chat_models/universal.cjs');
3
3
  const require_errors = require('./agents/errors.cjs');
4
4
  const require_responses = require('./agents/responses.cjs');
5
+ const require_utils = require('./agents/middleware/utils.cjs');
5
6
  const require_middleware = require('./agents/middleware.cjs');
6
- const require_utils = require('./agents/tests/utils.cjs');
7
+ const require_utils$1 = require('./agents/tests/utils.cjs');
7
8
  const require_index = require('./agents/index.cjs');
8
- const require_utils$1 = require('./agents/middleware/utils.cjs');
9
9
  const require_summarization = require('./agents/middleware/summarization.cjs');
10
10
  const require_hitl = require('./agents/middleware/hitl.cjs');
11
11
  const require_promptCaching = require('./agents/middleware/promptCaching.cjs');
@@ -35,7 +35,7 @@ require_rolldown_runtime.__export(src_exports, {
35
35
  Document: () => __langchain_core_documents.Document,
36
36
  DynamicStructuredTool: () => __langchain_core_tools.DynamicStructuredTool,
37
37
  DynamicTool: () => __langchain_core_tools.DynamicTool,
38
- FakeToolCallingModel: () => require_utils.FakeToolCallingModel,
38
+ FakeToolCallingModel: () => require_utils$1.FakeToolCallingModel,
39
39
  HumanMessage: () => __langchain_core_messages.HumanMessage,
40
40
  HumanMessageChunk: () => __langchain_core_messages.HumanMessageChunk,
41
41
  InMemoryStore: () => __langchain_core_stores.InMemoryStore,
@@ -55,7 +55,7 @@ require_rolldown_runtime.__export(src_exports, {
55
55
  ToolStrategy: () => require_responses.ToolStrategy,
56
56
  anthropicPromptCachingMiddleware: () => require_promptCaching.anthropicPromptCachingMiddleware,
57
57
  contextEditingMiddleware: () => require_contextEditing.contextEditingMiddleware,
58
- countTokensApproximately: () => require_utils$1.countTokensApproximately,
58
+ countTokensApproximately: () => require_utils.countTokensApproximately,
59
59
  createAgent: () => require_index.createAgent,
60
60
  createMiddleware: () => require_middleware.createMiddleware,
61
61
  dynamicSystemPromptMiddleware: () => require_dynamicSystemPrompt.dynamicSystemPromptMiddleware,
@@ -121,7 +121,7 @@ Object.defineProperty(exports, 'DynamicTool', {
121
121
  return __langchain_core_tools.DynamicTool;
122
122
  }
123
123
  });
124
- exports.FakeToolCallingModel = require_utils.FakeToolCallingModel;
124
+ exports.FakeToolCallingModel = require_utils$1.FakeToolCallingModel;
125
125
  Object.defineProperty(exports, 'HumanMessage', {
126
126
  enumerable: true,
127
127
  get: function () {
@@ -186,7 +186,7 @@ Object.defineProperty(exports, 'ToolMessageChunk', {
186
186
  exports.ToolStrategy = require_responses.ToolStrategy;
187
187
  exports.anthropicPromptCachingMiddleware = require_promptCaching.anthropicPromptCachingMiddleware;
188
188
  exports.contextEditingMiddleware = require_contextEditing.contextEditingMiddleware;
189
- exports.countTokensApproximately = require_utils$1.countTokensApproximately;
189
+ exports.countTokensApproximately = require_utils.countTokensApproximately;
190
190
  exports.createAgent = require_index.createAgent;
191
191
  exports.createMiddleware = require_middleware.createMiddleware;
192
192
  exports.dynamicSystemPromptMiddleware = require_dynamicSystemPrompt.dynamicSystemPromptMiddleware;
package/dist/index.d.cts CHANGED
@@ -3,7 +3,7 @@ import { MultipleStructuredOutputsError, MultipleToolsBoundError, StructuredOutp
3
3
  import { ProviderStrategy, ResponseFormat, ResponseFormatUndefined, ToolStrategy, providerStrategy, toolStrategy } from "./agents/responses.cjs";
4
4
  import { JumpToTarget } from "./agents/constants.cjs";
5
5
  import { Runtime } from "./agents/runtime.cjs";
6
- import { AgentMiddleware, ToolCallHandler, ToolCallRequest, ToolCallWrapper } from "./agents/middleware/types.cjs";
6
+ import { AgentMiddleware, ToolCallHandler, ToolCallRequest, WrapToolCallHook } from "./agents/middleware/types.cjs";
7
7
  import { BuiltInState, CreateAgentParams, ExecutedToolCall, ExtractZodArrayTypes, Interrupt, JumpTo, N, ToolCall, ToolResult, UserInput, WithStateGraphNodes } from "./agents/types.cjs";
8
8
  import { ReactAgent } from "./agents/ReactAgent.cjs";
9
9
  import { createMiddleware } from "./agents/middleware.cjs";
@@ -26,4 +26,4 @@ import { DynamicStructuredTool, DynamicTool, StructuredTool, Tool, tool } from "
26
26
  import { InMemoryStore } from "@langchain/core/stores";
27
27
  import { getContextVariable, setContextVariable } from "@langchain/core/context";
28
28
  import { Document, DocumentInput } from "@langchain/core/documents";
29
- export { AIMessage, AIMessageChunk, Action, ActionRequest, AgentMiddleware, ApproveDecision, BaseMessage, BaseMessageChunk, BuiltInState, ClearToolUsesEdit, ClearToolUsesEditConfig, type ContentBlock, ContextEdit, ContextEditingMiddlewareConfig, CreateAgentParams, Decision, DecisionType, DescriptionFactory, Document, type DocumentInput, DynamicStructuredTool, DynamicSystemPromptMiddlewareConfig, DynamicTool, EditDecision, ExecutedToolCall, ExtractZodArrayTypes, FakeToolCallingModel, HITLRequest, HITLResponse, HumanInTheLoopMiddlewareConfig, HumanMessage, HumanMessageChunk, InMemoryStore, Interrupt, InterruptOnConfig, JumpTo, JumpToTarget, LLMToolSelectorConfig, ModelCallLimitMiddlewareConfig, MultipleStructuredOutputsError, MultipleToolsBoundError, N, PIIRedactionMiddlewareConfig, PromptCachingMiddlewareConfig, ProviderStrategy, ReactAgent, RejectDecision, ResponseFormat, ResponseFormatUndefined, ReviewConfig, Runtime, StructuredOutputParsingError, StructuredTool, SummarizationMiddlewareConfig, SystemMessage, SystemMessageChunk, TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT, TodoListMiddlewareOptions, TokenCounter, Tool, ToolCall, ToolCallHandler, ToolCallLimitConfig, ToolCallLimitExceededError, ToolCallRequest, ToolCallWrapper, ToolInvocationError, ToolMessage, ToolMessageChunk, ToolResult, ToolStrategy, UserInput, WithStateGraphNodes, anthropicPromptCachingMiddleware, contextEditingMiddleware, countTokensApproximately, createAgent, createMiddleware, dynamicSystemPromptMiddleware, filterMessages, getContextVariable, humanInTheLoopMiddleware, initChatModel, llmToolSelectorMiddleware, modelCallLimitMiddleware, modelFallbackMiddleware, piiRedactionMiddleware, providerStrategy, setContextVariable, summarizationMiddleware, todoListMiddleware, tool, toolCallLimitMiddleware, toolStrategy, trimMessages };
29
+ export { AIMessage, AIMessageChunk, Action, ActionRequest, AgentMiddleware, ApproveDecision, BaseMessage, BaseMessageChunk, BuiltInState, ClearToolUsesEdit, ClearToolUsesEditConfig, type ContentBlock, ContextEdit, ContextEditingMiddlewareConfig, CreateAgentParams, Decision, DecisionType, DescriptionFactory, Document, type DocumentInput, DynamicStructuredTool, DynamicSystemPromptMiddlewareConfig, DynamicTool, EditDecision, ExecutedToolCall, ExtractZodArrayTypes, FakeToolCallingModel, HITLRequest, HITLResponse, HumanInTheLoopMiddlewareConfig, HumanMessage, HumanMessageChunk, InMemoryStore, Interrupt, InterruptOnConfig, JumpTo, JumpToTarget, LLMToolSelectorConfig, ModelCallLimitMiddlewareConfig, MultipleStructuredOutputsError, MultipleToolsBoundError, N, PIIRedactionMiddlewareConfig, PromptCachingMiddlewareConfig, ProviderStrategy, ReactAgent, RejectDecision, ResponseFormat, ResponseFormatUndefined, ReviewConfig, Runtime, StructuredOutputParsingError, StructuredTool, SummarizationMiddlewareConfig, SystemMessage, SystemMessageChunk, TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT, TodoListMiddlewareOptions, TokenCounter, Tool, ToolCall, ToolCallHandler, ToolCallLimitConfig, ToolCallLimitExceededError, ToolCallRequest, ToolInvocationError, ToolMessage, ToolMessageChunk, ToolResult, ToolStrategy, UserInput, WithStateGraphNodes, WrapToolCallHook, anthropicPromptCachingMiddleware, contextEditingMiddleware, countTokensApproximately, createAgent, createMiddleware, dynamicSystemPromptMiddleware, filterMessages, getContextVariable, humanInTheLoopMiddleware, initChatModel, llmToolSelectorMiddleware, modelCallLimitMiddleware, modelFallbackMiddleware, piiRedactionMiddleware, providerStrategy, setContextVariable, summarizationMiddleware, todoListMiddleware, tool, toolCallLimitMiddleware, toolStrategy, trimMessages };
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { MultipleStructuredOutputsError, MultipleToolsBoundError, StructuredOutp
3
3
  import { ProviderStrategy, ResponseFormat, ResponseFormatUndefined, ToolStrategy, providerStrategy, toolStrategy } from "./agents/responses.js";
4
4
  import { JumpToTarget } from "./agents/constants.js";
5
5
  import { Runtime } from "./agents/runtime.js";
6
- import { AgentMiddleware, ToolCallHandler, ToolCallRequest, ToolCallWrapper } from "./agents/middleware/types.js";
6
+ import { AgentMiddleware, ToolCallHandler, ToolCallRequest, WrapToolCallHook } from "./agents/middleware/types.js";
7
7
  import { BuiltInState, CreateAgentParams, ExecutedToolCall, ExtractZodArrayTypes, Interrupt, JumpTo, N, ToolCall, ToolResult, UserInput, WithStateGraphNodes } from "./agents/types.js";
8
8
  import { ReactAgent } from "./agents/ReactAgent.js";
9
9
  import { createMiddleware } from "./agents/middleware.js";
@@ -26,4 +26,4 @@ import { DynamicStructuredTool, DynamicTool, StructuredTool, Tool, tool } from "
26
26
  import { InMemoryStore } from "@langchain/core/stores";
27
27
  import { getContextVariable, setContextVariable } from "@langchain/core/context";
28
28
  import { Document, DocumentInput } from "@langchain/core/documents";
29
- export { AIMessage, AIMessageChunk, Action, ActionRequest, AgentMiddleware, ApproveDecision, BaseMessage, BaseMessageChunk, BuiltInState, ClearToolUsesEdit, ClearToolUsesEditConfig, type ContentBlock, ContextEdit, ContextEditingMiddlewareConfig, CreateAgentParams, Decision, DecisionType, DescriptionFactory, Document, type DocumentInput, DynamicStructuredTool, DynamicSystemPromptMiddlewareConfig, DynamicTool, EditDecision, ExecutedToolCall, ExtractZodArrayTypes, FakeToolCallingModel, HITLRequest, HITLResponse, HumanInTheLoopMiddlewareConfig, HumanMessage, HumanMessageChunk, InMemoryStore, Interrupt, InterruptOnConfig, JumpTo, JumpToTarget, LLMToolSelectorConfig, ModelCallLimitMiddlewareConfig, MultipleStructuredOutputsError, MultipleToolsBoundError, N, PIIRedactionMiddlewareConfig, PromptCachingMiddlewareConfig, ProviderStrategy, ReactAgent, RejectDecision, ResponseFormat, ResponseFormatUndefined, ReviewConfig, Runtime, StructuredOutputParsingError, StructuredTool, SummarizationMiddlewareConfig, SystemMessage, SystemMessageChunk, TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT, TodoListMiddlewareOptions, TokenCounter, Tool, ToolCall, ToolCallHandler, ToolCallLimitConfig, ToolCallLimitExceededError, ToolCallRequest, ToolCallWrapper, ToolInvocationError, ToolMessage, ToolMessageChunk, ToolResult, ToolStrategy, UserInput, WithStateGraphNodes, anthropicPromptCachingMiddleware, contextEditingMiddleware, countTokensApproximately, createAgent, createMiddleware, dynamicSystemPromptMiddleware, filterMessages, getContextVariable, humanInTheLoopMiddleware, initChatModel, llmToolSelectorMiddleware, modelCallLimitMiddleware, modelFallbackMiddleware, piiRedactionMiddleware, providerStrategy, setContextVariable, summarizationMiddleware, todoListMiddleware, tool, toolCallLimitMiddleware, toolStrategy, trimMessages };
29
+ export { AIMessage, AIMessageChunk, Action, ActionRequest, AgentMiddleware, ApproveDecision, BaseMessage, BaseMessageChunk, BuiltInState, ClearToolUsesEdit, ClearToolUsesEditConfig, type ContentBlock, ContextEdit, ContextEditingMiddlewareConfig, CreateAgentParams, Decision, DecisionType, DescriptionFactory, Document, type DocumentInput, DynamicStructuredTool, DynamicSystemPromptMiddlewareConfig, DynamicTool, EditDecision, ExecutedToolCall, ExtractZodArrayTypes, FakeToolCallingModel, HITLRequest, HITLResponse, HumanInTheLoopMiddlewareConfig, HumanMessage, HumanMessageChunk, InMemoryStore, Interrupt, InterruptOnConfig, JumpTo, JumpToTarget, LLMToolSelectorConfig, ModelCallLimitMiddlewareConfig, MultipleStructuredOutputsError, MultipleToolsBoundError, N, PIIRedactionMiddlewareConfig, PromptCachingMiddlewareConfig, ProviderStrategy, ReactAgent, RejectDecision, ResponseFormat, ResponseFormatUndefined, ReviewConfig, Runtime, StructuredOutputParsingError, StructuredTool, SummarizationMiddlewareConfig, SystemMessage, SystemMessageChunk, TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT, TodoListMiddlewareOptions, TokenCounter, Tool, ToolCall, ToolCallHandler, ToolCallLimitConfig, ToolCallLimitExceededError, ToolCallRequest, ToolInvocationError, ToolMessage, ToolMessageChunk, ToolResult, ToolStrategy, UserInput, WithStateGraphNodes, WrapToolCallHook, anthropicPromptCachingMiddleware, contextEditingMiddleware, countTokensApproximately, createAgent, createMiddleware, dynamicSystemPromptMiddleware, filterMessages, getContextVariable, humanInTheLoopMiddleware, initChatModel, llmToolSelectorMiddleware, modelCallLimitMiddleware, modelFallbackMiddleware, piiRedactionMiddleware, providerStrategy, setContextVariable, summarizationMiddleware, todoListMiddleware, tool, toolCallLimitMiddleware, toolStrategy, trimMessages };
package/dist/index.js CHANGED
@@ -2,10 +2,10 @@ import { __export } from "./_virtual/rolldown_runtime.js";
2
2
  import { initChatModel } from "./chat_models/universal.js";
3
3
  import { MultipleStructuredOutputsError, MultipleToolsBoundError, StructuredOutputParsingError, ToolInvocationError } from "./agents/errors.js";
4
4
  import { ProviderStrategy, ToolStrategy, providerStrategy, toolStrategy } from "./agents/responses.js";
5
+ import { countTokensApproximately } from "./agents/middleware/utils.js";
5
6
  import { createMiddleware } from "./agents/middleware.js";
6
7
  import { FakeToolCallingModel } from "./agents/tests/utils.js";
7
8
  import { createAgent } from "./agents/index.js";
8
- import { countTokensApproximately } from "./agents/middleware/utils.js";
9
9
  import { summarizationMiddleware } from "./agents/middleware/summarization.js";
10
10
  import { humanInTheLoopMiddleware } from "./agents/middleware/hitl.js";
11
11
  import { anthropicPromptCachingMiddleware } from "./agents/middleware/promptCaching.js";
@@ -1,10 +1,8 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  const require_chat_models_universal = require('../chat_models/universal.cjs');
3
3
  const require_index = require('../index.cjs');
4
- const require_storage_encoder_backed = require('../storage/encoder_backed.cjs');
5
- const require_embeddings_cache_backed = require('../embeddings/cache_backed.cjs');
6
- const require_embeddings_fake = require('../embeddings/fake.cjs');
7
4
  const require_load_serializable = require('./serializable.cjs');
5
+ const require_storage_encoder_backed = require('../storage/encoder_backed.cjs');
8
6
  const require_storage_in_memory = require('../storage/in_memory.cjs');
9
7
  const require_storage_file_system = require('../storage/file_system.cjs');
10
8
  const __langchain_core_messages = require_rolldown_runtime.__toESM(require("@langchain/core/messages"));
@@ -17,8 +15,6 @@ const __langchain_core_outputs = require_rolldown_runtime.__toESM(require("@lang
17
15
  var import_map_exports = {};
18
16
  require_rolldown_runtime.__export(import_map_exports, {
19
17
  chat_models__universal: () => require_chat_models_universal.universal_exports,
20
- embeddings__cache_backed: () => require_embeddings_cache_backed.cache_backed_exports,
21
- embeddings__fake: () => require_embeddings_fake.fake_exports,
22
18
  index: () => require_index.src_exports,
23
19
  load__serializable: () => require_load_serializable.serializable_exports,
24
20
  prompts__base: () => prompts__base,
@@ -1 +1 @@
1
- {"version":3,"file":"import_map.cjs","names":[],"sources":["../../src/load/import_map.ts"],"sourcesContent":["// Auto-generated by import-map plugin. Do not edit manually.\n\nexport * as index from \"../index.js\";\nexport * as chat_models__universal from \"../chat_models/universal.js\";\nexport * as embeddings__cache_backed from \"../embeddings/cache_backed.js\";\nexport * as embeddings__fake from \"../embeddings/fake.js\";\nexport * as load__serializable from \"../load/serializable.js\";\nexport * as storage__encoder_backed from \"../storage/encoder_backed.js\";\nexport * as storage__in_memory from \"../storage/in_memory.js\";\nexport * as storage__file_system from \"../storage/file_system.js\";\nimport {\n PromptTemplate,\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n ImagePromptTemplate,\n PipelinePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\nimport { StringPromptValue } from \"@langchain/core/prompt_values\";\nimport {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n} from \"@langchain/core/runnables\";\nimport { ChatGenerationChunk, GenerationChunk } from \"@langchain/core/outputs\";\nconst prompts__prompt = {\n PromptTemplate,\n};\nexport { prompts__prompt };\nconst schema__messages = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema__messages };\nconst schema = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema };\nconst prompts__chat = {\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n};\nexport { prompts__chat };\nconst prompts__image = {\n ImagePromptTemplate,\n};\nexport { prompts__image };\nconst prompts__pipeline = {\n PipelinePromptTemplate,\n};\nexport { prompts__pipeline };\nconst prompts__base = {\n StringPromptValue,\n};\nexport { prompts__base };\nconst schema__runnable = {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n};\nexport { schema__runnable };\nconst schema__output = {\n ChatGenerationChunk,\n GenerationChunk,\n};\nexport { schema__output };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,MAAM,kBAAkB,EACtB,wDACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB,EACrB,kEACD;AAED,MAAM,oBAAoB,EACxB,wEACD;AAED,MAAM,gBAAgB,EACpB,oEACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB;CACrB;CACA;AACD"}
1
+ {"version":3,"file":"import_map.cjs","names":[],"sources":["../../src/load/import_map.ts"],"sourcesContent":["// Auto-generated by import-map plugin. Do not edit manually.\n\nexport * as index from \"../index.js\";\nexport * as chat_models__universal from \"../chat_models/universal.js\";\nexport * as load__serializable from \"../load/serializable.js\";\nexport * as storage__encoder_backed from \"../storage/encoder_backed.js\";\nexport * as storage__in_memory from \"../storage/in_memory.js\";\nexport * as storage__file_system from \"../storage/file_system.js\";\nimport {\n PromptTemplate,\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n ImagePromptTemplate,\n PipelinePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\nimport { StringPromptValue } from \"@langchain/core/prompt_values\";\nimport {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n} from \"@langchain/core/runnables\";\nimport { ChatGenerationChunk, GenerationChunk } from \"@langchain/core/outputs\";\nconst prompts__prompt = {\n PromptTemplate,\n};\nexport { prompts__prompt };\nconst schema__messages = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema__messages };\nconst schema = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema };\nconst prompts__chat = {\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n};\nexport { prompts__chat };\nconst prompts__image = {\n ImagePromptTemplate,\n};\nexport { prompts__image };\nconst prompts__pipeline = {\n PipelinePromptTemplate,\n};\nexport { prompts__pipeline };\nconst prompts__base = {\n StringPromptValue,\n};\nexport { prompts__base };\nconst schema__runnable = {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n};\nexport { schema__runnable };\nconst schema__output = {\n ChatGenerationChunk,\n GenerationChunk,\n};\nexport { schema__output };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,MAAM,kBAAkB,EACtB,wDACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB,EACrB,kEACD;AAED,MAAM,oBAAoB,EACxB,wEACD;AAED,MAAM,gBAAgB,EACpB,oEACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB;CACrB;CACA;AACD"}
@@ -1,10 +1,8 @@
1
1
  import { __export } from "../_virtual/rolldown_runtime.js";
2
2
  import { universal_exports } from "../chat_models/universal.js";
3
3
  import { src_exports } from "../index.js";
4
- import { encoder_backed_exports } from "../storage/encoder_backed.js";
5
- import { cache_backed_exports } from "../embeddings/cache_backed.js";
6
- import { fake_exports } from "../embeddings/fake.js";
7
4
  import { serializable_exports } from "./serializable.js";
5
+ import { encoder_backed_exports } from "../storage/encoder_backed.js";
8
6
  import { in_memory_exports } from "../storage/in_memory.js";
9
7
  import { file_system_exports } from "../storage/file_system.js";
10
8
  import { AIMessage, AIMessageChunk, BaseMessage, BaseMessageChunk, ChatMessage, ChatMessageChunk, FunctionMessage, FunctionMessageChunk, HumanMessage, HumanMessageChunk, SystemMessage, SystemMessageChunk, ToolMessage, ToolMessageChunk } from "@langchain/core/messages";
@@ -17,8 +15,6 @@ import { ChatGenerationChunk, GenerationChunk } from "@langchain/core/outputs";
17
15
  var import_map_exports = {};
18
16
  __export(import_map_exports, {
19
17
  chat_models__universal: () => universal_exports,
20
- embeddings__cache_backed: () => cache_backed_exports,
21
- embeddings__fake: () => fake_exports,
22
18
  index: () => src_exports,
23
19
  load__serializable: () => serializable_exports,
24
20
  prompts__base: () => prompts__base,
@@ -1 +1 @@
1
- {"version":3,"file":"import_map.js","names":[],"sources":["../../src/load/import_map.ts"],"sourcesContent":["// Auto-generated by import-map plugin. Do not edit manually.\n\nexport * as index from \"../index.js\";\nexport * as chat_models__universal from \"../chat_models/universal.js\";\nexport * as embeddings__cache_backed from \"../embeddings/cache_backed.js\";\nexport * as embeddings__fake from \"../embeddings/fake.js\";\nexport * as load__serializable from \"../load/serializable.js\";\nexport * as storage__encoder_backed from \"../storage/encoder_backed.js\";\nexport * as storage__in_memory from \"../storage/in_memory.js\";\nexport * as storage__file_system from \"../storage/file_system.js\";\nimport {\n PromptTemplate,\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n ImagePromptTemplate,\n PipelinePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\nimport { StringPromptValue } from \"@langchain/core/prompt_values\";\nimport {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n} from \"@langchain/core/runnables\";\nimport { ChatGenerationChunk, GenerationChunk } from \"@langchain/core/outputs\";\nconst prompts__prompt = {\n PromptTemplate,\n};\nexport { prompts__prompt };\nconst schema__messages = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema__messages };\nconst schema = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema };\nconst prompts__chat = {\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n};\nexport { prompts__chat };\nconst prompts__image = {\n ImagePromptTemplate,\n};\nexport { prompts__image };\nconst prompts__pipeline = {\n PipelinePromptTemplate,\n};\nexport { prompts__pipeline };\nconst prompts__base = {\n StringPromptValue,\n};\nexport { prompts__base };\nconst schema__runnable = {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n};\nexport { schema__runnable };\nconst schema__output = {\n ChatGenerationChunk,\n GenerationChunk,\n};\nexport { schema__output };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,MAAM,kBAAkB,EACtB,eACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB,EACrB,oBACD;AAED,MAAM,oBAAoB,EACxB,uBACD;AAED,MAAM,gBAAgB,EACpB,kBACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB;CACrB;CACA;AACD"}
1
+ {"version":3,"file":"import_map.js","names":[],"sources":["../../src/load/import_map.ts"],"sourcesContent":["// Auto-generated by import-map plugin. Do not edit manually.\n\nexport * as index from \"../index.js\";\nexport * as chat_models__universal from \"../chat_models/universal.js\";\nexport * as load__serializable from \"../load/serializable.js\";\nexport * as storage__encoder_backed from \"../storage/encoder_backed.js\";\nexport * as storage__in_memory from \"../storage/in_memory.js\";\nexport * as storage__file_system from \"../storage/file_system.js\";\nimport {\n PromptTemplate,\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n ImagePromptTemplate,\n PipelinePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\nimport { StringPromptValue } from \"@langchain/core/prompt_values\";\nimport {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n} from \"@langchain/core/runnables\";\nimport { ChatGenerationChunk, GenerationChunk } from \"@langchain/core/outputs\";\nconst prompts__prompt = {\n PromptTemplate,\n};\nexport { prompts__prompt };\nconst schema__messages = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema__messages };\nconst schema = {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n BaseMessageChunk,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessage,\n FunctionMessageChunk,\n HumanMessage,\n HumanMessageChunk,\n SystemMessage,\n SystemMessageChunk,\n ToolMessage,\n ToolMessageChunk,\n};\nexport { schema };\nconst prompts__chat = {\n AIMessagePromptTemplate,\n ChatMessagePromptTemplate,\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n};\nexport { prompts__chat };\nconst prompts__image = {\n ImagePromptTemplate,\n};\nexport { prompts__image };\nconst prompts__pipeline = {\n PipelinePromptTemplate,\n};\nexport { prompts__pipeline };\nconst prompts__base = {\n StringPromptValue,\n};\nexport { prompts__base };\nconst schema__runnable = {\n RouterRunnable,\n RunnableAssign,\n RunnableBinding,\n RunnableBranch,\n RunnableEach,\n RunnableMap,\n RunnableParallel,\n RunnablePassthrough,\n RunnablePick,\n RunnableRetry,\n RunnableSequence,\n RunnableWithFallbacks,\n RunnableWithMessageHistory,\n};\nexport { schema__runnable };\nconst schema__output = {\n ChatGenerationChunk,\n GenerationChunk,\n};\nexport { schema__output };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,MAAM,kBAAkB,EACtB,eACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,SAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB,EACrB,oBACD;AAED,MAAM,oBAAoB,EACxB,uBACD;AAED,MAAM,gBAAgB,EACpB,kBACD;AAED,MAAM,mBAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;AAED,MAAM,iBAAiB;CACrB;CACA;AACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "langchain",
3
- "version": "1.0.0-alpha.9",
3
+ "version": "1.0.1",
4
4
  "description": "Typescript bindings for langchain",
5
5
  "author": "LangChain",
6
6
  "license": "MIT",
@@ -9,7 +9,10 @@
9
9
  "node": ">=20"
10
10
  },
11
11
  "files": [
12
- "dist/"
12
+ "dist/",
13
+ "CHANGELOG.md",
14
+ "README.md",
15
+ "LICENSE"
13
16
  ],
14
17
  "repository": {
15
18
  "type": "git",
@@ -38,18 +41,18 @@
38
41
  "typescript": "~5.8.3",
39
42
  "vitest": "^3.2.4",
40
43
  "yaml": "^2.8.1",
41
- "@langchain/openai": "1.0.0-alpha.3",
44
+ "@langchain/eslint": "0.1.0",
45
+ "@langchain/anthropic": "1.0.0",
46
+ "@langchain/openai": "1.0.0",
42
47
  "@langchain/cohere": "0.3.4",
43
- "@langchain/anthropic": "1.0.0-alpha.2",
44
- "@langchain/core": "1.0.0-alpha.7",
45
- "@langchain/eslint": "0.1.0"
48
+ "@langchain/core": "1.0.1"
46
49
  },
47
50
  "peerDependencies": {
48
- "@langchain/core": "^1.0.0-alpha.6 <2.0.0"
51
+ "@langchain/core": "^1.0.0"
49
52
  },
50
53
  "dependencies": {
51
- "@langchain/langgraph": "next",
52
- "@langchain/langgraph-checkpoint": "^0.1.1",
54
+ "@langchain/langgraph": "^1.0.0",
55
+ "@langchain/langgraph-checkpoint": "^1.0.0",
53
56
  "uuid": "^10.0.0",
54
57
  "zod": "^3.25.76 || ^4"
55
58
  },
@@ -77,6 +80,7 @@
77
80
  "types": "./dist/index.d.ts",
78
81
  "exports": {
79
82
  ".": {
83
+ "input": "./src/index.ts",
80
84
  "import": {
81
85
  "types": "./dist/index.d.ts",
82
86
  "default": "./dist/index.js"
@@ -84,10 +88,10 @@
84
88
  "require": {
85
89
  "types": "./dist/index.d.cts",
86
90
  "default": "./dist/index.cjs"
87
- },
88
- "input": "./src/index.ts"
91
+ }
89
92
  },
90
93
  "./chat_models/universal": {
94
+ "input": "./src/chat_models/universal.ts",
91
95
  "import": {
92
96
  "types": "./dist/chat_models/universal.d.ts",
93
97
  "default": "./dist/chat_models/universal.js"
@@ -95,32 +99,10 @@
95
99
  "require": {
96
100
  "types": "./dist/chat_models/universal.d.cts",
97
101
  "default": "./dist/chat_models/universal.cjs"
98
- },
99
- "input": "./src/chat_models/universal.ts"
100
- },
101
- "./embeddings/cache_backed": {
102
- "import": {
103
- "types": "./dist/embeddings/cache_backed.d.ts",
104
- "default": "./dist/embeddings/cache_backed.js"
105
- },
106
- "require": {
107
- "types": "./dist/embeddings/cache_backed.d.cts",
108
- "default": "./dist/embeddings/cache_backed.cjs"
109
- },
110
- "input": "./src/embeddings/cache_backed.ts"
111
- },
112
- "./embeddings/fake": {
113
- "import": {
114
- "types": "./dist/embeddings/fake.d.ts",
115
- "default": "./dist/embeddings/fake.js"
116
- },
117
- "require": {
118
- "types": "./dist/embeddings/fake.d.cts",
119
- "default": "./dist/embeddings/fake.cjs"
120
- },
121
- "input": "./src/embeddings/fake.ts"
102
+ }
122
103
  },
123
104
  "./hub": {
105
+ "input": "./src/hub/index.ts",
124
106
  "import": {
125
107
  "types": "./dist/hub/index.d.ts",
126
108
  "default": "./dist/hub/index.js"
@@ -128,10 +110,10 @@
128
110
  "require": {
129
111
  "types": "./dist/hub/index.d.cts",
130
112
  "default": "./dist/hub/index.cjs"
131
- },
132
- "input": "./src/hub/index.ts"
113
+ }
133
114
  },
134
115
  "./hub/node": {
116
+ "input": "./src/hub/node.ts",
135
117
  "import": {
136
118
  "types": "./dist/hub/node.d.ts",
137
119
  "default": "./dist/hub/node.js"
@@ -139,10 +121,10 @@
139
121
  "require": {
140
122
  "types": "./dist/hub/node.d.cts",
141
123
  "default": "./dist/hub/node.cjs"
142
- },
143
- "input": "./src/hub/node.ts"
124
+ }
144
125
  },
145
126
  "./load": {
127
+ "input": "./src/load/index.ts",
146
128
  "import": {
147
129
  "types": "./dist/load/index.d.ts",
148
130
  "default": "./dist/load/index.js"
@@ -150,10 +132,10 @@
150
132
  "require": {
151
133
  "types": "./dist/load/index.d.cts",
152
134
  "default": "./dist/load/index.cjs"
153
- },
154
- "input": "./src/load/index.ts"
135
+ }
155
136
  },
156
137
  "./load/serializable": {
138
+ "input": "./src/load/serializable.ts",
157
139
  "import": {
158
140
  "types": "./dist/load/serializable.d.ts",
159
141
  "default": "./dist/load/serializable.js"
@@ -161,10 +143,10 @@
161
143
  "require": {
162
144
  "types": "./dist/load/serializable.d.cts",
163
145
  "default": "./dist/load/serializable.cjs"
164
- },
165
- "input": "./src/load/serializable.ts"
146
+ }
166
147
  },
167
148
  "./storage/encoder_backed": {
149
+ "input": "./src/storage/encoder_backed.ts",
168
150
  "import": {
169
151
  "types": "./dist/storage/encoder_backed.d.ts",
170
152
  "default": "./dist/storage/encoder_backed.js"
@@ -172,10 +154,10 @@
172
154
  "require": {
173
155
  "types": "./dist/storage/encoder_backed.d.cts",
174
156
  "default": "./dist/storage/encoder_backed.cjs"
175
- },
176
- "input": "./src/storage/encoder_backed.ts"
157
+ }
177
158
  },
178
159
  "./storage/in_memory": {
160
+ "input": "./src/storage/in_memory.ts",
179
161
  "import": {
180
162
  "types": "./dist/storage/in_memory.d.ts",
181
163
  "default": "./dist/storage/in_memory.js"
@@ -183,10 +165,10 @@
183
165
  "require": {
184
166
  "types": "./dist/storage/in_memory.d.cts",
185
167
  "default": "./dist/storage/in_memory.cjs"
186
- },
187
- "input": "./src/storage/in_memory.ts"
168
+ }
188
169
  },
189
170
  "./storage/file_system": {
171
+ "input": "./src/storage/file_system.ts",
190
172
  "import": {
191
173
  "types": "./dist/storage/file_system.d.ts",
192
174
  "default": "./dist/storage/file_system.js"
@@ -194,8 +176,7 @@
194
176
  "require": {
195
177
  "types": "./dist/storage/file_system.d.cts",
196
178
  "default": "./dist/storage/file_system.cjs"
197
- },
198
- "input": "./src/storage/file_system.ts"
179
+ }
199
180
  },
200
181
  "./package.json": "./package.json"
201
182
  },
@@ -1,140 +0,0 @@
1
- const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_storage_encoder_backed = require('../storage/encoder_backed.cjs');
3
- const __langchain_core_utils_hash = require_rolldown_runtime.__toESM(require("@langchain/core/utils/hash"));
4
- const __langchain_core_embeddings = require_rolldown_runtime.__toESM(require("@langchain/core/embeddings"));
5
-
6
- //#region src/embeddings/cache_backed.ts
7
- var cache_backed_exports = {};
8
- require_rolldown_runtime.__export(cache_backed_exports, { CacheBackedEmbeddings: () => CacheBackedEmbeddings });
9
- /**
10
- * Interface for caching results from embedding models.
11
- *
12
- * The interface allows works with any store that implements
13
- * the abstract store interface accepting keys of type str and values of list of
14
- * floats.
15
- *
16
- * If need be, the interface can be extended to accept other implementations
17
- * of the value serializer and deserializer, as well as the key encoder.
18
- * @example
19
- * ```typescript
20
- * const underlyingEmbeddings = new OpenAIEmbeddings();
21
- *
22
- * const cacheBackedEmbeddings = CacheBackedEmbeddings.fromBytesStore(
23
- * underlyingEmbeddings,
24
- * new ConvexKVStore({ ctx }),
25
- * {
26
- * namespace: underlyingEmbeddings.modelName,
27
- * },
28
- * );
29
- *
30
- * const loader = new TextLoader("./state_of_the_union.txt");
31
- * const rawDocuments = await loader.load();
32
- * const splitter = new RecursiveCharacterTextSplitter({
33
- * chunkSize: 1000,
34
- * chunkOverlap: 0,
35
- * });
36
- * const documents = await splitter.splitDocuments(rawDocuments);
37
- *
38
- * let time = Date.now();
39
- * const vectorstore = await ConvexVectorStore.fromDocuments(
40
- * documents,
41
- * cacheBackedEmbeddings,
42
- * { ctx },
43
- * );
44
- * console.log(`Initial creation time: ${Date.now() - time}ms`);
45
- *
46
- * time = Date.now();
47
- * const vectorstore2 = await ConvexVectorStore.fromDocuments(
48
- * documents,
49
- * cacheBackedEmbeddings,
50
- * { ctx },
51
- * );
52
- * console.log(`Cached creation time: ${Date.now() - time}ms`);
53
- *
54
- * ```
55
- */
56
- var CacheBackedEmbeddings = class extends __langchain_core_embeddings.Embeddings {
57
- underlyingEmbeddings;
58
- documentEmbeddingStore;
59
- constructor(fields) {
60
- super(fields);
61
- this.underlyingEmbeddings = fields.underlyingEmbeddings;
62
- this.documentEmbeddingStore = fields.documentEmbeddingStore;
63
- }
64
- /**
65
- * Embed query text.
66
- *
67
- * This method does not support caching at the moment.
68
- *
69
- * Support for caching queries is easy to implement, but might make
70
- * sense to hold off to see the most common patterns.
71
- *
72
- * If the cache has an eviction policy, we may need to be a bit more careful
73
- * about sharing the cache between documents and queries. Generally,
74
- * one is OK evicting query caches, but document caches should be kept.
75
- *
76
- * @param document The text to embed.
77
- * @returns The embedding for the given text.
78
- */
79
- async embedQuery(document) {
80
- return this.underlyingEmbeddings.embedQuery(document);
81
- }
82
- /**
83
- * Embed a list of texts.
84
- *
85
- * The method first checks the cache for the embeddings.
86
- * If the embeddings are not found, the method uses the underlying embedder
87
- * to embed the documents and stores the results in the cache.
88
- *
89
- * @param documents
90
- * @returns A list of embeddings for the given texts.
91
- */
92
- async embedDocuments(documents) {
93
- const vectors = await this.documentEmbeddingStore.mget(documents);
94
- const missingIndicies = [];
95
- const missingDocuments = [];
96
- for (let i = 0; i < vectors.length; i += 1) if (vectors[i] === void 0) {
97
- missingIndicies.push(i);
98
- missingDocuments.push(documents[i]);
99
- }
100
- if (missingDocuments.length) {
101
- const missingVectors = await this.underlyingEmbeddings.embedDocuments(missingDocuments);
102
- const keyValuePairs = missingDocuments.map((document, i) => [document, missingVectors[i]]);
103
- await this.documentEmbeddingStore.mset(keyValuePairs);
104
- for (let i = 0; i < missingIndicies.length; i += 1) vectors[missingIndicies[i]] = missingVectors[i];
105
- }
106
- return vectors;
107
- }
108
- /**
109
- * Create a new CacheBackedEmbeddings instance from another embeddings instance
110
- * and a storage instance.
111
- * @param underlyingEmbeddings Embeddings used to populate the cache for new documents.
112
- * @param documentEmbeddingStore Stores raw document embedding values. Keys are hashes of the document content.
113
- * @param options.namespace Optional namespace for store keys.
114
- * @returns A new CacheBackedEmbeddings instance.
115
- */
116
- static fromBytesStore(underlyingEmbeddings, documentEmbeddingStore, options) {
117
- const encoder = new TextEncoder();
118
- const decoder = new TextDecoder();
119
- const encoderBackedStore = new require_storage_encoder_backed.EncoderBackedStore({
120
- store: documentEmbeddingStore,
121
- keyEncoder: (key) => (options?.namespace ?? "") + (0, __langchain_core_utils_hash.sha256)(key),
122
- valueSerializer: (value) => encoder.encode(JSON.stringify(value)),
123
- valueDeserializer: (serializedValue) => JSON.parse(decoder.decode(serializedValue))
124
- });
125
- return new this({
126
- underlyingEmbeddings,
127
- documentEmbeddingStore: encoderBackedStore
128
- });
129
- }
130
- };
131
-
132
- //#endregion
133
- exports.CacheBackedEmbeddings = CacheBackedEmbeddings;
134
- Object.defineProperty(exports, 'cache_backed_exports', {
135
- enumerable: true,
136
- get: function () {
137
- return cache_backed_exports;
138
- }
139
- });
140
- //# sourceMappingURL=cache_backed.cjs.map