langchain 1.0.1 → 1.0.3

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 (148) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/_virtual/rolldown_runtime.cjs +0 -4
  3. package/dist/_virtual/rolldown_runtime.js +1 -10
  4. package/dist/agents/ReactAgent.cjs +21 -41
  5. package/dist/agents/ReactAgent.cjs.map +1 -1
  6. package/dist/agents/ReactAgent.js +21 -41
  7. package/dist/agents/ReactAgent.js.map +1 -1
  8. package/dist/agents/annotation.cjs +1 -0
  9. package/dist/agents/annotation.cjs.map +1 -1
  10. package/dist/agents/annotation.js +1 -0
  11. package/dist/agents/annotation.js.map +1 -1
  12. package/dist/agents/index.cjs.map +1 -1
  13. package/dist/agents/index.d.cts +11 -11
  14. package/dist/agents/index.d.cts.map +1 -1
  15. package/dist/agents/index.d.ts +11 -11
  16. package/dist/agents/index.d.ts.map +1 -1
  17. package/dist/agents/index.js.map +1 -1
  18. package/dist/agents/middleware/callLimit.d.cts.map +1 -1
  19. package/dist/agents/middleware/callLimit.d.ts.map +1 -1
  20. package/dist/agents/middleware/contextEditing.d.cts.map +1 -1
  21. package/dist/agents/middleware/contextEditing.d.ts.map +1 -1
  22. package/dist/agents/middleware/dynamicSystemPrompt.d.cts.map +1 -1
  23. package/dist/agents/middleware/dynamicSystemPrompt.d.ts.map +1 -1
  24. package/dist/agents/middleware/hitl.cjs +7 -2
  25. package/dist/agents/middleware/hitl.cjs.map +1 -1
  26. package/dist/agents/middleware/hitl.d.cts.map +1 -1
  27. package/dist/agents/middleware/hitl.d.ts.map +1 -1
  28. package/dist/agents/middleware/hitl.js +7 -2
  29. package/dist/agents/middleware/hitl.js.map +1 -1
  30. package/dist/agents/middleware/index.cjs +2 -1
  31. package/dist/agents/middleware/index.d.cts +15 -0
  32. package/dist/agents/middleware/index.d.ts +14 -0
  33. package/dist/agents/middleware/index.js +2 -1
  34. package/dist/agents/middleware/modelCallLimit.cjs +145 -0
  35. package/dist/agents/middleware/modelCallLimit.cjs.map +1 -0
  36. package/dist/agents/middleware/modelCallLimit.d.cts +128 -0
  37. package/dist/agents/middleware/modelCallLimit.d.cts.map +1 -0
  38. package/dist/agents/middleware/modelCallLimit.d.ts +128 -0
  39. package/dist/agents/middleware/modelCallLimit.d.ts.map +1 -0
  40. package/dist/agents/middleware/modelCallLimit.js +144 -0
  41. package/dist/agents/middleware/modelCallLimit.js.map +1 -0
  42. package/dist/agents/middleware/promptCaching.d.cts.map +1 -1
  43. package/dist/agents/middleware/summarization.cjs +4 -2
  44. package/dist/agents/middleware/summarization.cjs.map +1 -1
  45. package/dist/agents/middleware/summarization.d.cts +7 -6
  46. package/dist/agents/middleware/summarization.d.cts.map +1 -1
  47. package/dist/agents/middleware/summarization.d.ts +7 -6
  48. package/dist/agents/middleware/summarization.d.ts.map +1 -1
  49. package/dist/agents/middleware/summarization.js +4 -2
  50. package/dist/agents/middleware/summarization.js.map +1 -1
  51. package/dist/agents/middleware/todoListMiddleware.d.cts.map +1 -1
  52. package/dist/agents/middleware/toolCallLimit.cjs +205 -92
  53. package/dist/agents/middleware/toolCallLimit.cjs.map +1 -1
  54. package/dist/agents/middleware/toolCallLimit.d.cts +46 -37
  55. package/dist/agents/middleware/toolCallLimit.d.cts.map +1 -1
  56. package/dist/agents/middleware/toolCallLimit.d.ts +46 -37
  57. package/dist/agents/middleware/toolCallLimit.d.ts.map +1 -1
  58. package/dist/agents/middleware/toolCallLimit.js +206 -93
  59. package/dist/agents/middleware/toolCallLimit.js.map +1 -1
  60. package/dist/agents/middleware/toolRetry.cjs +224 -0
  61. package/dist/agents/middleware/toolRetry.cjs.map +1 -0
  62. package/dist/agents/middleware/toolRetry.d.cts +179 -0
  63. package/dist/agents/middleware/toolRetry.d.cts.map +1 -0
  64. package/dist/agents/middleware/toolRetry.d.ts +179 -0
  65. package/dist/agents/middleware/toolRetry.d.ts.map +1 -0
  66. package/dist/agents/middleware/toolRetry.js +223 -0
  67. package/dist/agents/middleware/toolRetry.js.map +1 -0
  68. package/dist/agents/middleware/types.d.cts +21 -19
  69. package/dist/agents/middleware/types.d.cts.map +1 -1
  70. package/dist/agents/middleware/types.d.ts +21 -19
  71. package/dist/agents/middleware/types.d.ts.map +1 -1
  72. package/dist/agents/middleware/utils.cjs +7 -0
  73. package/dist/agents/middleware/utils.cjs.map +1 -1
  74. package/dist/agents/middleware/utils.d.cts.map +1 -1
  75. package/dist/agents/middleware/utils.d.ts.map +1 -1
  76. package/dist/agents/middleware/utils.js +7 -1
  77. package/dist/agents/middleware/utils.js.map +1 -1
  78. package/dist/agents/middleware.cjs.map +1 -1
  79. package/dist/agents/middleware.d.cts +4 -4
  80. package/dist/agents/middleware.d.cts.map +1 -1
  81. package/dist/agents/middleware.d.ts +4 -4
  82. package/dist/agents/middleware.d.ts.map +1 -1
  83. package/dist/agents/middleware.js.map +1 -1
  84. package/dist/agents/nodes/AgentNode.cjs +21 -47
  85. package/dist/agents/nodes/AgentNode.cjs.map +1 -1
  86. package/dist/agents/nodes/AgentNode.js +22 -48
  87. package/dist/agents/nodes/AgentNode.js.map +1 -1
  88. package/dist/agents/nodes/ToolNode.cjs +12 -18
  89. package/dist/agents/nodes/ToolNode.cjs.map +1 -1
  90. package/dist/agents/nodes/ToolNode.js +12 -18
  91. package/dist/agents/nodes/ToolNode.js.map +1 -1
  92. package/dist/agents/nodes/middleware.cjs +9 -7
  93. package/dist/agents/nodes/middleware.cjs.map +1 -1
  94. package/dist/agents/nodes/middleware.js +10 -8
  95. package/dist/agents/nodes/middleware.js.map +1 -1
  96. package/dist/agents/nodes/types.d.cts +1 -1
  97. package/dist/agents/nodes/types.d.cts.map +1 -1
  98. package/dist/agents/nodes/types.d.ts +1 -1
  99. package/dist/agents/nodes/types.d.ts.map +1 -1
  100. package/dist/agents/nodes/utils.cjs +5 -1
  101. package/dist/agents/nodes/utils.cjs.map +1 -1
  102. package/dist/agents/nodes/utils.js +5 -1
  103. package/dist/agents/nodes/utils.js.map +1 -1
  104. package/dist/agents/runtime.d.cts +11 -27
  105. package/dist/agents/runtime.d.cts.map +1 -1
  106. package/dist/agents/runtime.d.ts +11 -27
  107. package/dist/agents/runtime.d.ts.map +1 -1
  108. package/dist/agents/state.cjs +45 -0
  109. package/dist/agents/state.cjs.map +1 -0
  110. package/dist/agents/state.js +44 -0
  111. package/dist/agents/state.js.map +1 -0
  112. package/dist/agents/types.d.cts +1 -1
  113. package/dist/agents/types.d.cts.map +1 -1
  114. package/dist/agents/types.d.ts +1 -1
  115. package/dist/agents/types.d.ts.map +1 -1
  116. package/dist/agents/utils.cjs +10 -2
  117. package/dist/agents/utils.cjs.map +1 -1
  118. package/dist/agents/utils.js +10 -2
  119. package/dist/agents/utils.js.map +1 -1
  120. package/dist/chat_models/universal.cjs +4 -3
  121. package/dist/chat_models/universal.cjs.map +1 -1
  122. package/dist/chat_models/universal.js +4 -3
  123. package/dist/chat_models/universal.js.map +1 -1
  124. package/dist/embeddings/cache_backed.cjs +140 -0
  125. package/dist/embeddings/cache_backed.cjs.map +1 -0
  126. package/dist/embeddings/cache_backed.d.cts +107 -0
  127. package/dist/embeddings/cache_backed.d.cts.map +1 -0
  128. package/dist/embeddings/cache_backed.d.ts +107 -0
  129. package/dist/embeddings/cache_backed.d.ts.map +1 -0
  130. package/dist/embeddings/cache_backed.js +134 -0
  131. package/dist/embeddings/cache_backed.js.map +1 -0
  132. package/dist/embeddings/fake.cjs +22 -0
  133. package/dist/embeddings/fake.cjs.map +1 -0
  134. package/dist/embeddings/fake.d.cts +1 -0
  135. package/dist/embeddings/fake.d.ts +1 -0
  136. package/dist/embeddings/fake.js +12 -0
  137. package/dist/embeddings/fake.js.map +1 -0
  138. package/dist/hub/base.cjs +4 -17
  139. package/dist/hub/base.cjs.map +1 -1
  140. package/dist/hub/base.js +2 -15
  141. package/dist/hub/base.js.map +1 -1
  142. package/dist/index.cjs +6 -18
  143. package/dist/index.cjs.map +1 -1
  144. package/dist/index.d.cts +3 -3
  145. package/dist/index.d.ts +3 -3
  146. package/dist/index.js +4 -5
  147. package/dist/index.js.map +1 -1
  148. package/package.json +6 -9
@@ -6,21 +6,21 @@ import { z } from "zod/v3";
6
6
 
7
7
  //#region src/agents/middleware/summarization.d.ts
8
8
  declare const contextSchema: z.ZodObject<{
9
- model: z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
9
+ model: z.ZodType<string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
10
10
  maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;
11
11
  messagesToKeep: z.ZodDefault<z.ZodNumber>;
12
12
  tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;
13
13
  summaryPrompt: z.ZodDefault<z.ZodString>;
14
14
  summaryPrefix: z.ZodDefault<z.ZodString>;
15
15
  }, "strip", z.ZodTypeAny, {
16
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
16
+ model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
17
17
  maxTokensBeforeSummary?: number | undefined;
18
18
  messagesToKeep: number;
19
19
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
20
20
  summaryPrompt: string;
21
21
  summaryPrefix: string;
22
22
  }, {
23
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
23
+ model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
24
24
  maxTokensBeforeSummary?: number | undefined;
25
25
  messagesToKeep?: number | undefined;
26
26
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
@@ -58,26 +58,27 @@ type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;
58
58
  * ```
59
59
  */
60
60
  declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): AgentMiddleware<undefined, z.ZodObject<{
61
- model: z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
62
61
  maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;
63
62
  messagesToKeep: z.ZodDefault<z.ZodNumber>;
64
63
  tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;
65
64
  summaryPrompt: z.ZodDefault<z.ZodString>;
66
65
  summaryPrefix: z.ZodDefault<z.ZodString>;
66
+ } & {
67
+ model: z.ZodOptional<z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>>;
67
68
  }, "strip", z.ZodTypeAny, {
68
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
69
69
  maxTokensBeforeSummary?: number | undefined;
70
70
  messagesToKeep: number;
71
71
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
72
72
  summaryPrompt: string;
73
73
  summaryPrefix: string;
74
+ model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined;
74
75
  }, {
75
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
76
76
  maxTokensBeforeSummary?: number | undefined;
77
77
  messagesToKeep?: number | undefined;
78
78
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
79
79
  summaryPrompt?: string | undefined;
80
80
  summaryPrefix?: string | undefined;
81
+ model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined;
81
82
  }>, any>;
82
83
  //#endregion
83
84
  export { SummarizationMiddlewareConfig, summarizationMiddleware };
@@ -1 +1 @@
1
- {"version":3,"file":"summarization.d.cts","names":["__types_js0","z","BaseLanguageModel","InferInteropZodInput","contextSchema","_langchain_core_language_models_base0","BaseLanguageModelCallOptions","ZodTypeDef","ZodType","ZodNumber","ZodOptional","ZodDefault","ZodAny","ZodArray","ZodUnknown","ZodTuple","ZodPromise","ZodUnion","ZodFunction","ZodString","ZodTypeAny","Promise","ZodObject","SummarizationMiddlewareConfig","summarizationMiddleware","AgentMiddleware"],"sources":["../../../src/agents/middleware/summarization.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport { InferInteropZodInput } from \"@langchain/core/utils/types\";\ndeclare const contextSchema: z.ZodObject<{\n model: z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>;\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): import(\"./types.js\").AgentMiddleware<undefined, z.ZodObject<{\n model: z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>, any>;\nexport {};\n"],"mappings":"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"}
1
+ {"version":3,"file":"summarization.d.cts","names":["__types_js0","z","BaseLanguageModel","InferInteropZodInput","contextSchema","_langchain_core_language_models_base0","BaseLanguageModelCallOptions","ZodTypeDef","ZodType","ZodNumber","ZodOptional","ZodDefault","ZodAny","ZodArray","ZodUnknown","ZodTuple","ZodPromise","ZodUnion","ZodFunction","ZodString","ZodTypeAny","Promise","ZodObject","SummarizationMiddlewareConfig","summarizationMiddleware","AgentMiddleware"],"sources":["../../../src/agents/middleware/summarization.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport { InferInteropZodInput } from \"@langchain/core/utils/types\";\ndeclare const contextSchema: z.ZodObject<{\n model: z.ZodType<string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>;\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): import(\"./types.js\").AgentMiddleware<undefined, z.ZodObject<{\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n} & {\n model: z.ZodOptional<z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>>;\n}, \"strip\", z.ZodTypeAny, {\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n model?: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions> | undefined;\n}, {\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n model?: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions> | undefined;\n}>, any>;\nexport {};\n"],"mappings":"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"}
@@ -6,21 +6,21 @@ import { BaseLanguageModel } from "@langchain/core/language_models/base";
6
6
 
7
7
  //#region src/agents/middleware/summarization.d.ts
8
8
  declare const contextSchema: z.ZodObject<{
9
- model: z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
9
+ model: z.ZodType<string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
10
10
  maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;
11
11
  messagesToKeep: z.ZodDefault<z.ZodNumber>;
12
12
  tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;
13
13
  summaryPrompt: z.ZodDefault<z.ZodString>;
14
14
  summaryPrefix: z.ZodDefault<z.ZodString>;
15
15
  }, "strip", z.ZodTypeAny, {
16
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
16
+ model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
17
17
  maxTokensBeforeSummary?: number | undefined;
18
18
  messagesToKeep: number;
19
19
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
20
20
  summaryPrompt: string;
21
21
  summaryPrefix: string;
22
22
  }, {
23
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
23
+ model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
24
24
  maxTokensBeforeSummary?: number | undefined;
25
25
  messagesToKeep?: number | undefined;
26
26
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
@@ -58,26 +58,27 @@ type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;
58
58
  * ```
59
59
  */
60
60
  declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): AgentMiddleware<undefined, z.ZodObject<{
61
- model: z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>;
62
61
  maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;
63
62
  messagesToKeep: z.ZodDefault<z.ZodNumber>;
64
63
  tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;
65
64
  summaryPrompt: z.ZodDefault<z.ZodString>;
66
65
  summaryPrefix: z.ZodDefault<z.ZodString>;
66
+ } & {
67
+ model: z.ZodOptional<z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>>;
67
68
  }, "strip", z.ZodTypeAny, {
68
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
69
69
  maxTokensBeforeSummary?: number | undefined;
70
70
  messagesToKeep: number;
71
71
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
72
72
  summaryPrompt: string;
73
73
  summaryPrefix: string;
74
+ model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined;
74
75
  }, {
75
- model: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>;
76
76
  maxTokensBeforeSummary?: number | undefined;
77
77
  messagesToKeep?: number | undefined;
78
78
  tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;
79
79
  summaryPrompt?: string | undefined;
80
80
  summaryPrefix?: string | undefined;
81
+ model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined;
81
82
  }>, any>;
82
83
  //#endregion
83
84
  export { SummarizationMiddlewareConfig, summarizationMiddleware };
@@ -1 +1 @@
1
- {"version":3,"file":"summarization.d.ts","names":["__types_js0","z","BaseLanguageModel","InferInteropZodInput","contextSchema","_langchain_core_language_models_base0","BaseLanguageModelCallOptions","ZodTypeDef","ZodType","ZodNumber","ZodOptional","ZodDefault","ZodAny","ZodArray","ZodUnknown","ZodTuple","ZodPromise","ZodUnion","ZodFunction","ZodString","ZodTypeAny","Promise","ZodObject","SummarizationMiddlewareConfig","summarizationMiddleware","AgentMiddleware"],"sources":["../../../src/agents/middleware/summarization.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport { InferInteropZodInput } from \"@langchain/core/utils/types\";\ndeclare const contextSchema: z.ZodObject<{\n model: z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>;\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): import(\"./types.js\").AgentMiddleware<undefined, z.ZodObject<{\n model: z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>, any>;\nexport {};\n"],"mappings":"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"}
1
+ {"version":3,"file":"summarization.d.ts","names":["__types_js0","z","BaseLanguageModel","InferInteropZodInput","contextSchema","_langchain_core_language_models_base0","BaseLanguageModelCallOptions","ZodTypeDef","ZodType","ZodNumber","ZodOptional","ZodDefault","ZodAny","ZodArray","ZodUnknown","ZodTuple","ZodPromise","ZodUnion","ZodFunction","ZodString","ZodTypeAny","Promise","ZodObject","SummarizationMiddlewareConfig","summarizationMiddleware","AgentMiddleware"],"sources":["../../../src/agents/middleware/summarization.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport { InferInteropZodInput } from \"@langchain/core/utils/types\";\ndeclare const contextSchema: z.ZodObject<{\n model: z.ZodType<string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>;\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n}, \"strip\", z.ZodTypeAny, {\n model: string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n}, {\n model: string | BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>;\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n}>;\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>;\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): import(\"./types.js\").AgentMiddleware<undefined, z.ZodObject<{\n maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>;\n messagesToKeep: z.ZodDefault<z.ZodNumber>;\n tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodAny, \"many\">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>;\n summaryPrompt: z.ZodDefault<z.ZodString>;\n summaryPrefix: z.ZodDefault<z.ZodString>;\n} & {\n model: z.ZodOptional<z.ZodType<BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions>>>;\n}, \"strip\", z.ZodTypeAny, {\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep: number;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt: string;\n summaryPrefix: string;\n model?: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions> | undefined;\n}, {\n maxTokensBeforeSummary?: number | undefined;\n messagesToKeep?: number | undefined;\n tokenCounter?: ((args_0: any[], ...args: unknown[]) => number | Promise<number>) | undefined;\n summaryPrompt?: string | undefined;\n summaryPrefix?: string | undefined;\n model?: BaseLanguageModel<any, import(\"@langchain/core/language_models/base\").BaseLanguageModelCallOptions> | undefined;\n}>, any>;\nexport {};\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { initChatModel } from "../../chat_models/universal.js";
1
2
  import { hasToolCalls } from "../utils.js";
2
3
  import { countTokensApproximately } from "./utils.js";
3
4
  import { createMiddleware } from "../middleware.js";
@@ -80,7 +81,7 @@ const contextSchema = z.object({
80
81
  function summarizationMiddleware(options) {
81
82
  return createMiddleware({
82
83
  name: "SummarizationMiddleware",
83
- contextSchema,
84
+ contextSchema: contextSchema.extend({ model: z.custom().optional() }),
84
85
  beforeModel: async (state, runtime) => {
85
86
  /**
86
87
  * Parse user options to get their explicit values
@@ -98,6 +99,7 @@ function summarizationMiddleware(options) {
98
99
  summaryPrefix: runtime.context.summaryPrefix === SUMMARY_PREFIX ? userOptions.summaryPrefix : runtime.context.summaryPrefix ?? userOptions.summaryPrefix
99
100
  };
100
101
  const { messages } = state;
102
+ const model = typeof config.model === "string" ? await initChatModel(config.model) : config.model;
101
103
  ensureMessageIds(messages);
102
104
  const tokenCounter = config.tokenCounter || countTokensApproximately;
103
105
  const totalTokens = await tokenCounter(messages);
@@ -106,7 +108,7 @@ function summarizationMiddleware(options) {
106
108
  const cutoffIndex = findSafeCutoff(conversationMessages, config.messagesToKeep);
107
109
  if (cutoffIndex <= 0) return;
108
110
  const { messagesToSummarize, preservedMessages } = partitionMessages(systemPrompt, conversationMessages, cutoffIndex);
109
- const summary = await createSummary(messagesToSummarize, config.model, config.summaryPrompt, tokenCounter);
111
+ const summary = await createSummary(messagesToSummarize, model, config.summaryPrompt, tokenCounter);
110
112
  const updatedSystemMessage = buildUpdatedSystemMessage(systemPrompt, summary, config.summaryPrefix);
111
113
  return { messages: [
112
114
  new RemoveMessage({ id: REMOVE_ALL_MESSAGES }),
@@ -1 +1 @@
1
- {"version":3,"file":"summarization.js","names":["options: SummarizationMiddlewareConfig","messages: BaseMessage[]","uuid","systemPrompt: SystemMessage | null","conversationMessages: BaseMessage[]","cutoffIndex: number","originalSystemMessage: SystemMessage | null","summary: string","summaryPrefix: string","content","messagesToKeep: number","aiMessage: AIMessage","aiMessageIndex: number","toolCallIds: Set<string>","messagesToSummarize: BaseMessage[]","model: BaseLanguageModel","summaryPrompt: string","tokenCounter: TokenCounter"],"sources":["../../../src/agents/middleware/summarization.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n BaseMessage,\n AIMessage,\n SystemMessage,\n ToolMessage,\n RemoveMessage,\n trimMessages,\n} from \"@langchain/core/messages\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport {\n interopParse,\n InferInteropZodOutput,\n InferInteropZodInput,\n} from \"@langchain/core/utils/types\";\nimport { REMOVE_ALL_MESSAGES } from \"@langchain/langgraph\";\nimport { createMiddleware } from \"../middleware.js\";\nimport { countTokensApproximately } from \"./utils.js\";\nimport { hasToolCalls } from \"../utils.js\";\n\nconst DEFAULT_SUMMARY_PROMPT = `<role>\nContext Extraction Assistant\n</role>\n\n<primary_objective>\nYour sole objective in this task is to extract the highest quality/most relevant context from the conversation history below.\n</primary_objective>\n\n<objective_information>\nYou're nearing the total number of input tokens you can accept, so you must extract the highest quality/most relevant pieces of information from your conversation history.\nThis context will then overwrite the conversation history presented below. Because of this, ensure the context you extract is only the most important information to your overall goal.\n</objective_information>\n\n<instructions>\nThe conversation history below will be replaced with the context you extract in this step. Because of this, you must do your very best to extract and record all of the most important context from the conversation history.\nYou want to ensure that you don't repeat any actions you've already completed, so the context you extract from the conversation history should be focused on the most important information to your overall goal.\n</instructions>\n\nThe user will message you with the full message history you'll be extracting context from, to then replace. Carefully read over it all, and think deeply about what information is most important to your overall goal that should be saved:\n\nWith all of this in mind, please carefully read over the entire conversation history, and extract the most important and relevant context to replace it so that you can free up space in the conversation history.\nRespond ONLY with the extracted context. Do not include any additional information, or text before or after the extracted context.\n\n<messages>\nMessages to summarize:\n{messages}\n</messages>`;\n\nconst SUMMARY_PREFIX = \"## Previous conversation summary:\";\n\nconst DEFAULT_MESSAGES_TO_KEEP = 20;\nconst DEFAULT_TRIM_TOKEN_LIMIT = 4000;\nconst DEFAULT_FALLBACK_MESSAGE_COUNT = 15;\nconst SEARCH_RANGE_FOR_TOOL_PAIRS = 5;\n\ntype TokenCounter = (messages: BaseMessage[]) => number | Promise<number>;\n\nconst contextSchema = z.object({\n model: z.custom<BaseLanguageModel>(),\n maxTokensBeforeSummary: z.number().optional(),\n messagesToKeep: z.number().default(DEFAULT_MESSAGES_TO_KEEP),\n tokenCounter: z\n .function()\n .args(z.array(z.any()))\n .returns(z.union([z.number(), z.promise(z.number())]))\n .optional(),\n summaryPrompt: z.string().default(DEFAULT_SUMMARY_PROMPT),\n summaryPrefix: z.string().default(SUMMARY_PREFIX),\n});\n\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<\n typeof contextSchema\n>;\n\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport function summarizationMiddleware(\n options: SummarizationMiddlewareConfig\n) {\n return createMiddleware({\n name: \"SummarizationMiddleware\",\n contextSchema,\n beforeModel: async (state, runtime) => {\n /**\n * Parse user options to get their explicit values\n */\n const userOptions = interopParse(contextSchema, options);\n\n /**\n * Merge context with user options, preferring user options when context has default values\n */\n const config = {\n model: userOptions.model,\n maxTokensBeforeSummary:\n runtime.context.maxTokensBeforeSummary !== undefined\n ? runtime.context.maxTokensBeforeSummary\n : userOptions.maxTokensBeforeSummary,\n messagesToKeep:\n runtime.context.messagesToKeep === DEFAULT_MESSAGES_TO_KEEP\n ? userOptions.messagesToKeep\n : runtime.context.messagesToKeep ?? userOptions.messagesToKeep,\n tokenCounter:\n runtime.context.tokenCounter !== undefined\n ? runtime.context.tokenCounter\n : userOptions.tokenCounter,\n summaryPrompt:\n runtime.context.summaryPrompt === DEFAULT_SUMMARY_PROMPT\n ? userOptions.summaryPrompt\n : runtime.context.summaryPrompt ?? userOptions.summaryPrompt,\n summaryPrefix:\n runtime.context.summaryPrefix === SUMMARY_PREFIX\n ? userOptions.summaryPrefix\n : runtime.context.summaryPrefix ?? userOptions.summaryPrefix,\n } as InferInteropZodOutput<typeof contextSchema>;\n const { messages } = state;\n\n // Ensure all messages have IDs\n ensureMessageIds(messages);\n\n const tokenCounter = config.tokenCounter || countTokensApproximately;\n const totalTokens = await tokenCounter(messages);\n\n if (\n config.maxTokensBeforeSummary == null ||\n totalTokens < config.maxTokensBeforeSummary\n ) {\n return;\n }\n\n const { systemPrompt, conversationMessages } =\n splitSystemMessage(messages);\n const cutoffIndex = findSafeCutoff(\n conversationMessages,\n config.messagesToKeep\n );\n\n if (cutoffIndex <= 0) {\n return;\n }\n\n const { messagesToSummarize, preservedMessages } = partitionMessages(\n systemPrompt,\n conversationMessages,\n cutoffIndex\n );\n\n const summary = await createSummary(\n messagesToSummarize,\n config.model,\n config.summaryPrompt,\n tokenCounter\n );\n\n const updatedSystemMessage = buildUpdatedSystemMessage(\n systemPrompt,\n summary,\n config.summaryPrefix\n );\n\n return {\n messages: [\n new RemoveMessage({ id: REMOVE_ALL_MESSAGES }),\n updatedSystemMessage,\n ...preservedMessages,\n ],\n };\n },\n });\n}\n\n/**\n * Ensure all messages have unique IDs\n */\nfunction ensureMessageIds(messages: BaseMessage[]): void {\n for (const msg of messages) {\n if (!msg.id) {\n msg.id = uuid();\n }\n }\n}\n\n/**\n * Separate system message from conversation messages\n */\nfunction splitSystemMessage(messages: BaseMessage[]): {\n systemPrompt: SystemMessage | null;\n conversationMessages: BaseMessage[];\n} {\n if (messages.length > 0 && SystemMessage.isInstance(messages[0])) {\n return {\n systemPrompt: messages[0] as SystemMessage,\n conversationMessages: messages.slice(1),\n };\n }\n return {\n systemPrompt: null,\n conversationMessages: messages,\n };\n}\n\n/**\n * Partition messages into those to summarize and those to preserve\n */\nfunction partitionMessages(\n systemPrompt: SystemMessage | null,\n conversationMessages: BaseMessage[],\n cutoffIndex: number\n): { messagesToSummarize: BaseMessage[]; preservedMessages: BaseMessage[] } {\n const messagesToSummarize = conversationMessages.slice(0, cutoffIndex);\n const preservedMessages = conversationMessages.slice(cutoffIndex);\n\n // Include system message in messages to summarize to capture previous summaries\n if (systemPrompt) {\n messagesToSummarize.unshift(systemPrompt);\n }\n\n return { messagesToSummarize, preservedMessages };\n}\n\n/**\n * Build updated system message incorporating the summary\n */\nfunction buildUpdatedSystemMessage(\n originalSystemMessage: SystemMessage | null,\n summary: string,\n summaryPrefix: string\n): SystemMessage {\n let originalContent = \"\";\n if (originalSystemMessage) {\n const { content } = originalSystemMessage;\n if (typeof content === \"string\") {\n originalContent = content.split(summaryPrefix)[0].trim();\n }\n }\n\n const content = originalContent\n ? `${originalContent}\\n${summaryPrefix}\\n${summary}`\n : `${summaryPrefix}\\n${summary}`;\n\n return new SystemMessage({\n content,\n id: originalSystemMessage?.id || uuid(),\n });\n}\n\n/**\n * Find safe cutoff point that preserves AI/Tool message pairs\n */\nfunction findSafeCutoff(\n messages: BaseMessage[],\n messagesToKeep: number\n): number {\n if (messages.length <= messagesToKeep) {\n return 0;\n }\n\n const targetCutoff = messages.length - messagesToKeep;\n\n for (let i = targetCutoff; i >= 0; i--) {\n if (isSafeCutoffPoint(messages, i)) {\n return i;\n }\n }\n\n return 0;\n}\n\n/**\n * Check if cutting at index would separate AI/Tool message pairs\n */\nfunction isSafeCutoffPoint(\n messages: BaseMessage[],\n cutoffIndex: number\n): boolean {\n if (cutoffIndex >= messages.length) {\n return true;\n }\n\n const searchStart = Math.max(0, cutoffIndex - SEARCH_RANGE_FOR_TOOL_PAIRS);\n const searchEnd = Math.min(\n messages.length,\n cutoffIndex + SEARCH_RANGE_FOR_TOOL_PAIRS\n );\n\n for (let i = searchStart; i < searchEnd; i++) {\n if (!hasToolCalls(messages[i])) {\n continue;\n }\n\n const toolCallIds = extractToolCallIds(messages[i] as AIMessage);\n if (cutoffSeparatesToolPair(messages, i, cutoffIndex, toolCallIds)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Extract tool call IDs from an AI message\n */\nfunction extractToolCallIds(aiMessage: AIMessage): Set<string> {\n const toolCallIds = new Set<string>();\n if (aiMessage.tool_calls) {\n for (const toolCall of aiMessage.tool_calls) {\n const id =\n typeof toolCall === \"object\" && \"id\" in toolCall ? toolCall.id : null;\n if (id) {\n toolCallIds.add(id);\n }\n }\n }\n return toolCallIds;\n}\n\n/**\n * Check if cutoff separates an AI message from its corresponding tool messages\n */\nfunction cutoffSeparatesToolPair(\n messages: BaseMessage[],\n aiMessageIndex: number,\n cutoffIndex: number,\n toolCallIds: Set<string>\n): boolean {\n for (let j = aiMessageIndex + 1; j < messages.length; j++) {\n const message = messages[j];\n if (\n ToolMessage.isInstance(message) &&\n toolCallIds.has(message.tool_call_id)\n ) {\n const aiBeforeCutoff = aiMessageIndex < cutoffIndex;\n const toolBeforeCutoff = j < cutoffIndex;\n if (aiBeforeCutoff !== toolBeforeCutoff) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Generate summary for the given messages\n */\nasync function createSummary(\n messagesToSummarize: BaseMessage[],\n model: BaseLanguageModel,\n summaryPrompt: string,\n tokenCounter: TokenCounter\n): Promise<string> {\n if (!messagesToSummarize.length) {\n return \"No previous conversation history.\";\n }\n\n const trimmedMessages = await trimMessagesForSummary(\n messagesToSummarize,\n tokenCounter\n );\n\n if (!trimmedMessages.length) {\n return \"Previous conversation was too long to summarize.\";\n }\n\n try {\n const formattedPrompt = summaryPrompt.replace(\n \"{messages}\",\n JSON.stringify(trimmedMessages, null, 2)\n );\n const response = await model.invoke(formattedPrompt);\n const { content } = response;\n return typeof content === \"string\"\n ? content.trim()\n : \"Error generating summary: Invalid response format\";\n } catch (e) {\n return `Error generating summary: ${e}`;\n }\n}\n\n/**\n * Trim messages to fit within summary generation limits\n */\nasync function trimMessagesForSummary(\n messages: BaseMessage[],\n tokenCounter: TokenCounter\n): Promise<BaseMessage[]> {\n try {\n return await trimMessages(messages, {\n maxTokens: DEFAULT_TRIM_TOKEN_LIMIT,\n tokenCounter: async (msgs) => Promise.resolve(tokenCounter(msgs)),\n strategy: \"last\",\n allowPartial: true,\n includeSystem: true,\n });\n } catch {\n // Fallback to last N messages if trimming fails\n return messages.slice(-DEFAULT_FALLBACK_MESSAGE_COUNT);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"summarization.js","names":["options: SummarizationMiddlewareConfig","messages: BaseMessage[]","uuid","systemPrompt: SystemMessage | null","conversationMessages: BaseMessage[]","cutoffIndex: number","originalSystemMessage: SystemMessage | null","summary: string","summaryPrefix: string","content","messagesToKeep: number","aiMessage: AIMessage","aiMessageIndex: number","toolCallIds: Set<string>","messagesToSummarize: BaseMessage[]","model: BaseLanguageModel","summaryPrompt: string","tokenCounter: TokenCounter"],"sources":["../../../src/agents/middleware/summarization.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nimport { v4 as uuid } from \"uuid\";\nimport {\n BaseMessage,\n AIMessage,\n SystemMessage,\n ToolMessage,\n RemoveMessage,\n trimMessages,\n} from \"@langchain/core/messages\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\nimport {\n interopParse,\n InferInteropZodOutput,\n InferInteropZodInput,\n} from \"@langchain/core/utils/types\";\nimport { REMOVE_ALL_MESSAGES } from \"@langchain/langgraph\";\nimport { createMiddleware } from \"../middleware.js\";\nimport { countTokensApproximately } from \"./utils.js\";\nimport { hasToolCalls } from \"../utils.js\";\nimport { initChatModel } from \"../../chat_models/universal.js\";\n\nconst DEFAULT_SUMMARY_PROMPT = `<role>\nContext Extraction Assistant\n</role>\n\n<primary_objective>\nYour sole objective in this task is to extract the highest quality/most relevant context from the conversation history below.\n</primary_objective>\n\n<objective_information>\nYou're nearing the total number of input tokens you can accept, so you must extract the highest quality/most relevant pieces of information from your conversation history.\nThis context will then overwrite the conversation history presented below. Because of this, ensure the context you extract is only the most important information to your overall goal.\n</objective_information>\n\n<instructions>\nThe conversation history below will be replaced with the context you extract in this step. Because of this, you must do your very best to extract and record all of the most important context from the conversation history.\nYou want to ensure that you don't repeat any actions you've already completed, so the context you extract from the conversation history should be focused on the most important information to your overall goal.\n</instructions>\n\nThe user will message you with the full message history you'll be extracting context from, to then replace. Carefully read over it all, and think deeply about what information is most important to your overall goal that should be saved:\n\nWith all of this in mind, please carefully read over the entire conversation history, and extract the most important and relevant context to replace it so that you can free up space in the conversation history.\nRespond ONLY with the extracted context. Do not include any additional information, or text before or after the extracted context.\n\n<messages>\nMessages to summarize:\n{messages}\n</messages>`;\n\nconst SUMMARY_PREFIX = \"## Previous conversation summary:\";\n\nconst DEFAULT_MESSAGES_TO_KEEP = 20;\nconst DEFAULT_TRIM_TOKEN_LIMIT = 4000;\nconst DEFAULT_FALLBACK_MESSAGE_COUNT = 15;\nconst SEARCH_RANGE_FOR_TOOL_PAIRS = 5;\n\ntype TokenCounter = (messages: BaseMessage[]) => number | Promise<number>;\n\nconst contextSchema = z.object({\n model: z.custom<string | BaseLanguageModel>(),\n maxTokensBeforeSummary: z.number().optional(),\n messagesToKeep: z.number().default(DEFAULT_MESSAGES_TO_KEEP),\n tokenCounter: z\n .function()\n .args(z.array(z.any()))\n .returns(z.union([z.number(), z.promise(z.number())]))\n .optional(),\n summaryPrompt: z.string().default(DEFAULT_SUMMARY_PROMPT),\n summaryPrefix: z.string().default(SUMMARY_PREFIX),\n});\n\nexport type SummarizationMiddlewareConfig = InferInteropZodInput<\n typeof contextSchema\n>;\n\n/**\n * Summarization middleware that automatically summarizes conversation history when token limits are approached.\n *\n * This middleware monitors message token counts and automatically summarizes older\n * messages when a threshold is reached, preserving recent messages and maintaining\n * context continuity by ensuring AI/Tool message pairs remain together.\n *\n * @param options Configuration options for the summarization middleware\n * @returns A middleware instance\n *\n * @example\n * ```ts\n * import { summarizationMiddleware } from \"langchain\";\n * import { createAgent } from \"langchain\";\n *\n * const agent = createAgent({\n * llm: model,\n * tools: [getWeather],\n * middleware: [\n * summarizationMiddleware({\n * model: new ChatOpenAI({ model: \"gpt-4o\" }),\n * maxTokensBeforeSummary: 4000,\n * messagesToKeep: 20,\n * })\n * ],\n * });\n *\n * ```\n */\nexport function summarizationMiddleware(\n options: SummarizationMiddlewareConfig\n) {\n return createMiddleware({\n name: \"SummarizationMiddleware\",\n contextSchema: contextSchema.extend({\n /**\n * `model` should be required when initializing the middleware,\n * but can be omitted within context when invoking the middleware.\n */\n model: z.custom<BaseLanguageModel>().optional(),\n }),\n beforeModel: async (state, runtime) => {\n /**\n * Parse user options to get their explicit values\n */\n const userOptions = interopParse(contextSchema, options);\n\n /**\n * Merge context with user options, preferring user options when context has default values\n */\n const config = {\n model: userOptions.model,\n maxTokensBeforeSummary:\n runtime.context.maxTokensBeforeSummary !== undefined\n ? runtime.context.maxTokensBeforeSummary\n : userOptions.maxTokensBeforeSummary,\n messagesToKeep:\n runtime.context.messagesToKeep === DEFAULT_MESSAGES_TO_KEEP\n ? userOptions.messagesToKeep\n : runtime.context.messagesToKeep ?? userOptions.messagesToKeep,\n tokenCounter:\n runtime.context.tokenCounter !== undefined\n ? runtime.context.tokenCounter\n : userOptions.tokenCounter,\n summaryPrompt:\n runtime.context.summaryPrompt === DEFAULT_SUMMARY_PROMPT\n ? userOptions.summaryPrompt\n : runtime.context.summaryPrompt ?? userOptions.summaryPrompt,\n summaryPrefix:\n runtime.context.summaryPrefix === SUMMARY_PREFIX\n ? userOptions.summaryPrefix\n : runtime.context.summaryPrefix ?? userOptions.summaryPrefix,\n } as InferInteropZodOutput<typeof contextSchema>;\n const { messages } = state;\n\n const model =\n typeof config.model === \"string\"\n ? await initChatModel(config.model)\n : config.model;\n\n // Ensure all messages have IDs\n ensureMessageIds(messages);\n\n const tokenCounter = config.tokenCounter || countTokensApproximately;\n const totalTokens = await tokenCounter(messages);\n\n if (\n config.maxTokensBeforeSummary == null ||\n totalTokens < config.maxTokensBeforeSummary\n ) {\n return;\n }\n\n const { systemPrompt, conversationMessages } =\n splitSystemMessage(messages);\n const cutoffIndex = findSafeCutoff(\n conversationMessages,\n config.messagesToKeep\n );\n\n if (cutoffIndex <= 0) {\n return;\n }\n\n const { messagesToSummarize, preservedMessages } = partitionMessages(\n systemPrompt,\n conversationMessages,\n cutoffIndex\n );\n\n const summary = await createSummary(\n messagesToSummarize,\n model,\n config.summaryPrompt,\n tokenCounter\n );\n\n const updatedSystemMessage = buildUpdatedSystemMessage(\n systemPrompt,\n summary,\n config.summaryPrefix\n );\n\n return {\n messages: [\n new RemoveMessage({ id: REMOVE_ALL_MESSAGES }),\n updatedSystemMessage,\n ...preservedMessages,\n ],\n };\n },\n });\n}\n\n/**\n * Ensure all messages have unique IDs\n */\nfunction ensureMessageIds(messages: BaseMessage[]): void {\n for (const msg of messages) {\n if (!msg.id) {\n msg.id = uuid();\n }\n }\n}\n\n/**\n * Separate system message from conversation messages\n */\nfunction splitSystemMessage(messages: BaseMessage[]): {\n systemPrompt: SystemMessage | null;\n conversationMessages: BaseMessage[];\n} {\n if (messages.length > 0 && SystemMessage.isInstance(messages[0])) {\n return {\n systemPrompt: messages[0] as SystemMessage,\n conversationMessages: messages.slice(1),\n };\n }\n return {\n systemPrompt: null,\n conversationMessages: messages,\n };\n}\n\n/**\n * Partition messages into those to summarize and those to preserve\n */\nfunction partitionMessages(\n systemPrompt: SystemMessage | null,\n conversationMessages: BaseMessage[],\n cutoffIndex: number\n): { messagesToSummarize: BaseMessage[]; preservedMessages: BaseMessage[] } {\n const messagesToSummarize = conversationMessages.slice(0, cutoffIndex);\n const preservedMessages = conversationMessages.slice(cutoffIndex);\n\n // Include system message in messages to summarize to capture previous summaries\n if (systemPrompt) {\n messagesToSummarize.unshift(systemPrompt);\n }\n\n return { messagesToSummarize, preservedMessages };\n}\n\n/**\n * Build updated system message incorporating the summary\n */\nfunction buildUpdatedSystemMessage(\n originalSystemMessage: SystemMessage | null,\n summary: string,\n summaryPrefix: string\n): SystemMessage {\n let originalContent = \"\";\n if (originalSystemMessage) {\n const { content } = originalSystemMessage;\n if (typeof content === \"string\") {\n originalContent = content.split(summaryPrefix)[0].trim();\n }\n }\n\n const content = originalContent\n ? `${originalContent}\\n${summaryPrefix}\\n${summary}`\n : `${summaryPrefix}\\n${summary}`;\n\n return new SystemMessage({\n content,\n id: originalSystemMessage?.id || uuid(),\n });\n}\n\n/**\n * Find safe cutoff point that preserves AI/Tool message pairs\n */\nfunction findSafeCutoff(\n messages: BaseMessage[],\n messagesToKeep: number\n): number {\n if (messages.length <= messagesToKeep) {\n return 0;\n }\n\n const targetCutoff = messages.length - messagesToKeep;\n\n for (let i = targetCutoff; i >= 0; i--) {\n if (isSafeCutoffPoint(messages, i)) {\n return i;\n }\n }\n\n return 0;\n}\n\n/**\n * Check if cutting at index would separate AI/Tool message pairs\n */\nfunction isSafeCutoffPoint(\n messages: BaseMessage[],\n cutoffIndex: number\n): boolean {\n if (cutoffIndex >= messages.length) {\n return true;\n }\n\n const searchStart = Math.max(0, cutoffIndex - SEARCH_RANGE_FOR_TOOL_PAIRS);\n const searchEnd = Math.min(\n messages.length,\n cutoffIndex + SEARCH_RANGE_FOR_TOOL_PAIRS\n );\n\n for (let i = searchStart; i < searchEnd; i++) {\n if (!hasToolCalls(messages[i])) {\n continue;\n }\n\n const toolCallIds = extractToolCallIds(messages[i] as AIMessage);\n if (cutoffSeparatesToolPair(messages, i, cutoffIndex, toolCallIds)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Extract tool call IDs from an AI message\n */\nfunction extractToolCallIds(aiMessage: AIMessage): Set<string> {\n const toolCallIds = new Set<string>();\n if (aiMessage.tool_calls) {\n for (const toolCall of aiMessage.tool_calls) {\n const id =\n typeof toolCall === \"object\" && \"id\" in toolCall ? toolCall.id : null;\n if (id) {\n toolCallIds.add(id);\n }\n }\n }\n return toolCallIds;\n}\n\n/**\n * Check if cutoff separates an AI message from its corresponding tool messages\n */\nfunction cutoffSeparatesToolPair(\n messages: BaseMessage[],\n aiMessageIndex: number,\n cutoffIndex: number,\n toolCallIds: Set<string>\n): boolean {\n for (let j = aiMessageIndex + 1; j < messages.length; j++) {\n const message = messages[j];\n if (\n ToolMessage.isInstance(message) &&\n toolCallIds.has(message.tool_call_id)\n ) {\n const aiBeforeCutoff = aiMessageIndex < cutoffIndex;\n const toolBeforeCutoff = j < cutoffIndex;\n if (aiBeforeCutoff !== toolBeforeCutoff) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Generate summary for the given messages\n */\nasync function createSummary(\n messagesToSummarize: BaseMessage[],\n model: BaseLanguageModel,\n summaryPrompt: string,\n tokenCounter: TokenCounter\n): Promise<string> {\n if (!messagesToSummarize.length) {\n return \"No previous conversation history.\";\n }\n\n const trimmedMessages = await trimMessagesForSummary(\n messagesToSummarize,\n tokenCounter\n );\n\n if (!trimmedMessages.length) {\n return \"Previous conversation was too long to summarize.\";\n }\n\n try {\n const formattedPrompt = summaryPrompt.replace(\n \"{messages}\",\n JSON.stringify(trimmedMessages, null, 2)\n );\n const response = await model.invoke(formattedPrompt);\n const { content } = response;\n return typeof content === \"string\"\n ? content.trim()\n : \"Error generating summary: Invalid response format\";\n } catch (e) {\n return `Error generating summary: ${e}`;\n }\n}\n\n/**\n * Trim messages to fit within summary generation limits\n */\nasync function trimMessagesForSummary(\n messages: BaseMessage[],\n tokenCounter: TokenCounter\n): Promise<BaseMessage[]> {\n try {\n return await trimMessages(messages, {\n maxTokens: DEFAULT_TRIM_TOKEN_LIMIT,\n tokenCounter: async (msgs) => Promise.resolve(tokenCounter(msgs)),\n strategy: \"last\",\n allowPartial: true,\n includeSystem: true,\n });\n } catch {\n // Fallback to last N messages if trimming fails\n return messages.slice(-DEFAULT_FALLBACK_MESSAGE_COUNT);\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"todoListMiddleware.d.cts","names":["z","TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT","stateSchema","ZodString","ZodEnum","ZodTypeAny","ZodObject","ZodArray","ZodDefault","TodoMiddlewareState","infer","TodoListMiddlewareOptions","todoListMiddleware","__types_js9","AgentMiddleware"],"sources":["../../../src/agents/middleware/todoListMiddleware.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nexport declare const TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT = \"## `write_todos`\\n\\nYou have access to the `write_todos` tool to help you manage and plan complex objectives. \\nUse this tool for complex objectives to ensure that you are tracking each necessary step and giving the user visibility into your progress.\\nThis tool is very helpful for planning complex objectives, and for breaking down these larger complex objectives into smaller steps.\\n\\nIt is critical that you mark todos as completed as soon as you are done with a step. Do not batch up multiple steps before marking them as completed.\\nFor simple objectives that only require a few steps, it is better to just complete the objective directly and NOT use this tool.\\nWriting todos takes time and tokens, use it when it is helpful for managing complex many-step problems! But not for simple few-step requests.\\n\\n## Important To-Do List Usage Notes to Remember\\n- The `write_todos` tool should never be called multiple times in parallel.\\n- Don't be afraid to revise the To-Do list as you go. New information may reveal new tasks that need to be done, or old tasks that are irrelevant.\";\ndeclare const stateSchema: z.ZodObject<{\n todos: z.ZodDefault<z.ZodArray<z.ZodObject<{\n content: z.ZodString;\n status: z.ZodEnum<[\"pending\", \"in_progress\", \"completed\"]>;\n }, \"strip\", z.ZodTypeAny, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }>, \"many\">>;\n}, \"strip\", z.ZodTypeAny, {\n todos: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[];\n}, {\n todos?: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[] | undefined;\n}>;\nexport type TodoMiddlewareState = z.infer<typeof stateSchema>;\nexport interface TodoListMiddlewareOptions {\n /**\n * Custom system prompt to guide the agent on using the todo tool.\n * If not provided, uses the default {@link PLANNING_MIDDLEWARE_SYSTEM_PROMPT}.\n */\n systemPrompt?: string;\n /**\n * Custom description for the {@link writeTodos} tool.\n * If not provided, uses the default {@link WRITE_TODOS_DESCRIPTION}.\n */\n toolDescription?: string;\n}\n/**\n * Creates a middleware that provides todo list management capabilities to agents.\n *\n * This middleware adds a `write_todos` tool that allows agents to create and manage\n * structured task lists for complex multi-step operations. It's designed to help\n * agents track progress, organize complex tasks, and provide users with visibility\n * into task completion status.\n *\n * The middleware automatically injects system prompts that guide the agent on when\n * and how to use the todo functionality effectively.\n *\n * @example\n * ```typescript\n * import { todoListMiddleware, createAgent } from 'langchain';\n *\n * const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * middleware: [todoListMiddleware()],\n * });\n *\n * // Agent now has access to write_todos tool and todo state tracking\n * const result = await agent.invoke({\n * messages: [new HumanMessage(\"Help me refactor my codebase\")]\n * });\n *\n * console.log(result.todos); // Array of todo items with status tracking\n * ```\n *\n * @returns A configured middleware instance that provides todo management capabilities\n *\n * @see {@link TodoMiddlewareState} for the state schema\n * @see {@link writeTodos} for the tool implementation\n */\nexport declare function todoListMiddleware(options?: TodoListMiddlewareOptions): import(\"./types.js\").AgentMiddleware<z.ZodObject<{\n todos: z.ZodDefault<z.ZodArray<z.ZodObject<{\n content: z.ZodString;\n status: z.ZodEnum<[\"pending\", \"in_progress\", \"completed\"]>;\n }, \"strip\", z.ZodTypeAny, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }>, \"many\">>;\n}, \"strip\", z.ZodTypeAny, {\n todos: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[];\n}, {\n todos?: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[] | undefined;\n}>, undefined, any>;\nexport {};\n"],"mappings":";;;;cACqBC,kCAAAA;UAwBJU,yBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6COC,kBAAAA,WAA6BD,4BAA4E,gBAAXX,CAAAA,CAAEM;SAC7GN,CAAAA,CAAEQ,WAAWR,CAAAA,CAAEO,SAASP,CAAAA,CAAEM;aACpBN,CAAAA,CAAEG;YACHH,CAAAA,CAAEI;cACFJ,CAAAA,CAAEK;;;;;;;YAONL,CAAAA,CAAEK"}
1
+ {"version":3,"file":"todoListMiddleware.d.cts","names":["z","TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT","stateSchema","ZodString","ZodEnum","ZodTypeAny","ZodObject","ZodArray","ZodDefault","TodoMiddlewareState","infer","TodoListMiddlewareOptions","todoListMiddleware","__types_js4","AgentMiddleware"],"sources":["../../../src/agents/middleware/todoListMiddleware.d.ts"],"sourcesContent":["import { z } from \"zod/v3\";\nexport declare const TODO_LIST_MIDDLEWARE_SYSTEM_PROMPT = \"## `write_todos`\\n\\nYou have access to the `write_todos` tool to help you manage and plan complex objectives. \\nUse this tool for complex objectives to ensure that you are tracking each necessary step and giving the user visibility into your progress.\\nThis tool is very helpful for planning complex objectives, and for breaking down these larger complex objectives into smaller steps.\\n\\nIt is critical that you mark todos as completed as soon as you are done with a step. Do not batch up multiple steps before marking them as completed.\\nFor simple objectives that only require a few steps, it is better to just complete the objective directly and NOT use this tool.\\nWriting todos takes time and tokens, use it when it is helpful for managing complex many-step problems! But not for simple few-step requests.\\n\\n## Important To-Do List Usage Notes to Remember\\n- The `write_todos` tool should never be called multiple times in parallel.\\n- Don't be afraid to revise the To-Do list as you go. New information may reveal new tasks that need to be done, or old tasks that are irrelevant.\";\ndeclare const stateSchema: z.ZodObject<{\n todos: z.ZodDefault<z.ZodArray<z.ZodObject<{\n content: z.ZodString;\n status: z.ZodEnum<[\"pending\", \"in_progress\", \"completed\"]>;\n }, \"strip\", z.ZodTypeAny, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }>, \"many\">>;\n}, \"strip\", z.ZodTypeAny, {\n todos: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[];\n}, {\n todos?: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[] | undefined;\n}>;\nexport type TodoMiddlewareState = z.infer<typeof stateSchema>;\nexport interface TodoListMiddlewareOptions {\n /**\n * Custom system prompt to guide the agent on using the todo tool.\n * If not provided, uses the default {@link PLANNING_MIDDLEWARE_SYSTEM_PROMPT}.\n */\n systemPrompt?: string;\n /**\n * Custom description for the {@link writeTodos} tool.\n * If not provided, uses the default {@link WRITE_TODOS_DESCRIPTION}.\n */\n toolDescription?: string;\n}\n/**\n * Creates a middleware that provides todo list management capabilities to agents.\n *\n * This middleware adds a `write_todos` tool that allows agents to create and manage\n * structured task lists for complex multi-step operations. It's designed to help\n * agents track progress, organize complex tasks, and provide users with visibility\n * into task completion status.\n *\n * The middleware automatically injects system prompts that guide the agent on when\n * and how to use the todo functionality effectively.\n *\n * @example\n * ```typescript\n * import { todoListMiddleware, createAgent } from 'langchain';\n *\n * const agent = createAgent({\n * model: \"openai:gpt-4o\",\n * middleware: [todoListMiddleware()],\n * });\n *\n * // Agent now has access to write_todos tool and todo state tracking\n * const result = await agent.invoke({\n * messages: [new HumanMessage(\"Help me refactor my codebase\")]\n * });\n *\n * console.log(result.todos); // Array of todo items with status tracking\n * ```\n *\n * @returns A configured middleware instance that provides todo management capabilities\n *\n * @see {@link TodoMiddlewareState} for the state schema\n * @see {@link writeTodos} for the tool implementation\n */\nexport declare function todoListMiddleware(options?: TodoListMiddlewareOptions): import(\"./types.js\").AgentMiddleware<z.ZodObject<{\n todos: z.ZodDefault<z.ZodArray<z.ZodObject<{\n content: z.ZodString;\n status: z.ZodEnum<[\"pending\", \"in_progress\", \"completed\"]>;\n }, \"strip\", z.ZodTypeAny, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }, {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }>, \"many\">>;\n}, \"strip\", z.ZodTypeAny, {\n todos: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[];\n}, {\n todos?: {\n content: string;\n status: \"completed\" | \"in_progress\" | \"pending\";\n }[] | undefined;\n}>, undefined, any>;\nexport {};\n"],"mappings":";;;;cACqBC,kCAAAA;UAwBJU,yBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6COC,kBAAAA,WAA6BD,4BAA4E,gBAAXX,CAAAA,CAAEM;SAC7GN,CAAAA,CAAEQ,WAAWR,CAAAA,CAAEO,SAASP,CAAAA,CAAEM;aACpBN,CAAAA,CAAEG;YACHH,CAAAA,CAAEI;cACFJ,CAAAA,CAAEK;;;;;;;YAONL,CAAAA,CAAEK"}