langchain.js
    Preparing search index...

    Function summarizationMiddleware

    • 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.

      Parameters

      • options: InferInteropZodInput

        Configuration options for the summarization middleware

      Returns AgentMiddleware<
          undefined,
          ZodObject<
              {
                  keep: ZodOptional<
                      ZodEffects<
                          ZodObject<
                              {
                                  fraction: ZodOptional<ZodNumber>;
                                  messages: ZodOptional<ZodNumber>;
                                  tokens: ZodOptional<ZodNumber>;
                              },
                              "strip",
                              ZodTypeAny,
                              { fraction?: number; messages?: number; tokens?: number },
                              { fraction?: number; messages?: number; tokens?: number },
                          >,
                          { fraction?: number; messages?: number; tokens?: number },
                          { fraction?: number; messages?: number; tokens?: number },
                      >,
                  >;
                  maxTokensBeforeSummary: ZodOptional<ZodNumber>;
                  messagesToKeep: ZodOptional<ZodNumber>;
                  summaryPrefix: ZodOptional<ZodString>;
                  summaryPrompt: ZodDefault<ZodString>;
                  tokenCounter: ZodOptional<
                      ZodFunction<
                          ZodTuple<
                              [ZodArray<ZodType<BaseMessage, ZodTypeDef, BaseMessage>, "many">],
                              ZodUnknown,
                          >,
                          ZodUnion<[ZodNumber, ZodPromise<ZodNumber>]>,
                      >,
                  >;
                  trigger: ZodOptional<
                      ZodUnion<
                          [
                              ZodEffects<
                                  ZodObject<
                                      {
                                          fraction: ZodOptional<(...)>;
                                          messages: ZodOptional<(...)>;
                                          tokens: ZodOptional<(...)>;
                                      },
                                      "strip",
                                      ZodTypeAny,
                                      {
                                          fraction?: (...)
                                          | (...);
                                          messages?: (...) | (...);
                                          tokens?: (...) | (...);
                                      },
                                      {
                                          fraction?: (...)
                                          | (...);
                                          messages?: (...) | (...);
                                          tokens?: (...) | (...);
                                      },
                                  >,
                                  { fraction?: number; messages?: number; tokens?: number },
                                  { fraction?: number; messages?: number; tokens?: number },
                              >,
                              ZodArray<
                                  ZodEffects<
                                      ZodObject<
                                          { fraction: ...; messages: ...; tokens: ... },
                                          "strip",
                                          ZodTypeAny,
                                          { fraction?: ...; messages?: ...; tokens?: ... },
                                          { fraction?: ...; messages?: ...; tokens?: ... },
                                      >,
                                      {
                                          fraction?: (...) | (...);
                                          messages?: (...) | (...);
                                          tokens?: (...) | (...);
                                      },
                                      {
                                          fraction?: (...)
                                          | (...);
                                          messages?: (...) | (...);
                                          tokens?: (...) | (...);
                                      },
                                  >,
                                  "many",
                              >,
                          ],
                      >,
                  >;
                  trimTokensToSummarize: ZodOptional<ZodNumber>;
              } & {
                  model: ZodOptional<
                      ZodType<BaseLanguageModel, ZodTypeDef, BaseLanguageModel>,
                  >;
              },
              "strip",
              ZodTypeAny,
              {
                  keep?: unknown;
                  maxTokensBeforeSummary?: unknown;
                  messagesToKeep?: unknown;
                  model?: unknown;
                  summaryPrefix?: unknown;
                  summaryPrompt?: unknown;
                  tokenCounter?: unknown;
                  trigger?: unknown;
                  trimTokensToSummarize?: unknown;
                  [key: string]: any;
              },
              {
                  keep?: unknown;
                  maxTokensBeforeSummary?: unknown;
                  messagesToKeep?: unknown;
                  model?: unknown;
                  summaryPrefix?: unknown;
                  summaryPrompt?: unknown;
                  tokenCounter?: unknown;
                  trigger?: unknown;
                  trimTokensToSummarize?: unknown;
                  [key: string]: any;
              },
          >,
          any,
      >

      A middleware instance

      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 },
      })
      ],
      });