langchain.js
    Preparing search index...

    Interface ContextEdit

    Protocol describing a context editing strategy.

    Implement this interface to create custom strategies for managing conversation context size. The apply method should modify the messages array in-place and return the updated token count.

    import { HumanMessage, type ContextEdit, type BaseMessage  } from "langchain";

    class RemoveOldHumanMessages implements ContextEdit {
    constructor(private keepRecent: number = 10) {}

    async apply({ messages, countTokens }) {
    // Check current token count
    const tokens = await countTokens(messages);

    // Remove old human messages if over limit, keeping the most recent ones
    if (tokens > 50000) {
    const humanMessages: number[] = [];

    // Find all human message indices
    for (let i = 0; i < messages.length; i++) {
    if (HumanMessage.isInstance(messages[i])) {
    humanMessages.push(i);
    }
    }

    // Remove old human messages (keep only the most recent N)
    const toRemove = humanMessages.slice(0, -this.keepRecent);
    for (let i = toRemove.length - 1; i >= 0; i--) {
    messages.splice(toRemove[i]!, 1);
    }
    }
    }
    }
    interface ContextEdit {
        apply(
            params: {
                countTokens: TokenCounter;
                messages: BaseMessage[];
                model?: any;
            },
        ): void
        | Promise<void>;
    }

    Implemented by

    Index

    Methods

    Methods

    • Apply an edit to the message list, returning the new token count.

      This method should:

      1. Check if editing is needed based on tokens parameter
      2. Modify the messages array in-place (if needed)
      3. Return the new token count after modifications

      Parameters

      • params: { countTokens: TokenCounter; messages: BaseMessage[]; model?: any }

        Parameters for the editing operation

        • countTokens: TokenCounter

          Function to count tokens in a message array

        • messages: BaseMessage[]

          Array of messages to potentially edit (modify in-place)

        • Optionalmodel?: any

          Optional model instance for model profile information

      Returns void | Promise<void>

      The updated token count after applying edits