UNPKG

langchain

Version:
439 lines (438 loc) 15.3 kB
import { AgentMiddleware } from "./types.js"; import * as _langchain_core_messages0 from "@langchain/core/messages"; import { BaseMessage } from "@langchain/core/messages"; import { z } from "zod/v3"; import { InferInteropZodInput } from "@langchain/core/utils/types"; import * as _langchain_core_language_models_base0 from "@langchain/core/language_models/base"; import { BaseLanguageModel } from "@langchain/core/language_models/base"; //#region src/agents/middleware/summarization.d.ts type TokenCounter = (messages: BaseMessage[]) => number | Promise<number>; declare const contextSizeSchema: z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to use as the trigger */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to use as the trigger */ tokens: z.ZodOptional<z.ZodNumber>; /** * Number of messages to use as the trigger */ messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>; type ContextSize = z.infer<typeof contextSizeSchema>; declare const keepSchema: z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to keep */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to keep */ tokens: z.ZodOptional<z.ZodNumber>; messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>; type KeepSize = z.infer<typeof keepSchema>; declare const contextSchema: z.ZodObject<{ /** * Model to use for summarization */ model: z.ZodType<string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>; /** * Trigger conditions for summarization. * Can be a single condition object (all properties must be met) or an array of conditions (any condition must be met). * * @example * ```ts * // Single condition: trigger if tokens >= 5000 AND messages >= 3 * trigger: { tokens: 5000, messages: 3 } * * // Multiple conditions: trigger if (tokens >= 5000 AND messages >= 3) OR (tokens >= 3000 AND messages >= 6) * trigger: [ * { tokens: 5000, messages: 3 }, * { tokens: 3000, messages: 6 } * ] * ``` */ trigger: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to use as the trigger */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to use as the trigger */ tokens: z.ZodOptional<z.ZodNumber>; /** * Number of messages to use as the trigger */ messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, z.ZodArray<z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to use as the trigger */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to use as the trigger */ tokens: z.ZodOptional<z.ZodNumber>; /** * Number of messages to use as the trigger */ messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, "many">]>>; /** * Keep conditions for summarization */ keep: z.ZodOptional<z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to keep */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to keep */ tokens: z.ZodOptional<z.ZodNumber>; messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>>; /** * Token counter function to use for summarization */ tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodType<BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>, z.ZodTypeDef, BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>>, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>; /** * Summary prompt to use for summarization * @default {@link DEFAULT_SUMMARY_PROMPT} */ summaryPrompt: z.ZodDefault<z.ZodString>; /** * Number of tokens to trim to before summarizing */ trimTokensToSummarize: z.ZodOptional<z.ZodNumber>; /** * Prefix to add to the summary */ summaryPrefix: z.ZodOptional<z.ZodString>; /** * @deprecated Use `trigger: { tokens: value }` instead. */ maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>; /** * @deprecated Use `keep: { messages: value }` instead. */ messagesToKeep: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>; trigger?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }[] | { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; keep?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; tokenCounter?: ((args_0: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], ...args: unknown[]) => number | Promise<number>) | undefined; summaryPrompt: string; trimTokensToSummarize?: number | undefined; summaryPrefix?: string | undefined; maxTokensBeforeSummary?: number | undefined; messagesToKeep?: number | undefined; }, { model: string | BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>; trigger?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }[] | { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; keep?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; tokenCounter?: ((args_0: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], ...args: unknown[]) => number | Promise<number>) | undefined; summaryPrompt?: string | undefined; trimTokensToSummarize?: number | undefined; summaryPrefix?: string | undefined; maxTokensBeforeSummary?: number | undefined; messagesToKeep?: number | undefined; }>; type SummarizationMiddlewareConfig = InferInteropZodInput<typeof contextSchema>; /** * Summarization middleware that automatically summarizes conversation history when token limits are approached. * * This middleware monitors message token counts and automatically summarizes older * messages when a threshold is reached, preserving recent messages and maintaining * context continuity by ensuring AI/Tool message pairs remain together. * * @param options Configuration options for the summarization middleware * @returns A middleware instance * * @example * ```ts * import { summarizationMiddleware } from "langchain"; * import { createAgent } from "langchain"; * * // Single condition: trigger if tokens >= 4000 AND messages >= 10 * const agent1 = createAgent({ * llm: model, * tools: [getWeather], * middleware: [ * summarizationMiddleware({ * model: new ChatOpenAI({ model: "gpt-4o" }), * trigger: { tokens: 4000, messages: 10 }, * keep: { messages: 20 }, * }) * ], * }); * * // Multiple conditions: trigger if (tokens >= 5000 AND messages >= 3) OR (tokens >= 3000 AND messages >= 6) * const agent2 = createAgent({ * llm: model, * tools: [getWeather], * middleware: [ * summarizationMiddleware({ * model: new ChatOpenAI({ model: "gpt-4o" }), * trigger: [ * { tokens: 5000, messages: 3 }, * { tokens: 3000, messages: 6 }, * ], * keep: { messages: 20 }, * }) * ], * }); * * ``` */ declare function summarizationMiddleware(options: SummarizationMiddlewareConfig): AgentMiddleware<undefined, z.ZodObject<{ trigger: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to use as the trigger */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to use as the trigger */ tokens: z.ZodOptional<z.ZodNumber>; /** * Number of messages to use as the trigger */ messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, z.ZodArray<z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to use as the trigger */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to use as the trigger */ tokens: z.ZodOptional<z.ZodNumber>; /** * Number of messages to use as the trigger */ messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, "many">]>>; keep: z.ZodOptional<z.ZodEffects<z.ZodObject<{ /** * Fraction of the model's context size to keep */ fraction: z.ZodOptional<z.ZodNumber>; /** * Number of tokens to keep */ tokens: z.ZodOptional<z.ZodNumber>; messages: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }, { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }>>; tokenCounter: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodArray<z.ZodType<BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>, z.ZodTypeDef, BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>>, "many">], z.ZodUnknown>, z.ZodUnion<[z.ZodNumber, z.ZodPromise<z.ZodNumber>]>>>; summaryPrompt: z.ZodDefault<z.ZodString>; trimTokensToSummarize: z.ZodOptional<z.ZodNumber>; summaryPrefix: z.ZodOptional<z.ZodString>; maxTokensBeforeSummary: z.ZodOptional<z.ZodNumber>; messagesToKeep: z.ZodOptional<z.ZodNumber>; } & { model: z.ZodOptional<z.ZodType<BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>, z.ZodTypeDef, BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions>>>; }, "strip", z.ZodTypeAny, { trigger?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }[] | { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; keep?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; tokenCounter?: ((args_0: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], ...args: unknown[]) => number | Promise<number>) | undefined; summaryPrompt: string; trimTokensToSummarize?: number | undefined; summaryPrefix?: string | undefined; maxTokensBeforeSummary?: number | undefined; messagesToKeep?: number | undefined; model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined; }, { trigger?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; }[] | { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; keep?: { fraction?: number | undefined; tokens?: number | undefined; messages?: number | undefined; } | undefined; tokenCounter?: ((args_0: BaseMessage<_langchain_core_messages0.MessageStructure, _langchain_core_messages0.MessageType>[], ...args: unknown[]) => number | Promise<number>) | undefined; summaryPrompt?: string | undefined; trimTokensToSummarize?: number | undefined; summaryPrefix?: string | undefined; maxTokensBeforeSummary?: number | undefined; messagesToKeep?: number | undefined; model?: BaseLanguageModel<any, _langchain_core_language_models_base0.BaseLanguageModelCallOptions> | undefined; }>, any>; //#endregion export { ContextSize, KeepSize, SummarizationMiddlewareConfig, TokenCounter, summarizationMiddleware }; //# sourceMappingURL=summarization.d.ts.map