!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Get started](/v0.1/docs/get_started/)
    
    *   [Introduction](/v0.1/docs/get_started/introduction/)
    *   [Installation](/v0.1/docs/get_started/installation/)
    *   [Quickstart](/v0.1/docs/get_started/quickstart/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
    
    *   [Get started](/v0.1/docs/expression_language/get_started/)
    *   [Why use LCEL?](/v0.1/docs/expression_language/why/)
    *   [Interface](/v0.1/docs/expression_language/interface/)
    *   [Streaming](/v0.1/docs/expression_language/streaming/)
    *   [How to](/v0.1/docs/expression_language/how_to/routing/)
        
    *   [Cookbook](/v0.1/docs/expression_language/cookbook/)
        
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
    *   [Retrieval](/v0.1/docs/modules/data_connection/)
        
    *   [Chains](/v0.1/docs/modules/chains/)
    *   [Agents](/v0.1/docs/modules/agents/)
        
    *   [More](/v0.1/docs/modules/memory/)
        
        *   [Memory](/v0.1/docs/modules/memory/)
            
            *   [\[Beta\] Memory](/v0.1/docs/modules/memory/)
            *   [Chat Message History](/v0.1/docs/modules/memory/chat_messages/)
                
            *   [Memory types](/v0.1/docs/modules/memory/types/)
                
                *   [Conversation buffer memory](/v0.1/docs/modules/memory/types/buffer/)
                *   [Using Buffer Memory with Chat Models](/v0.1/docs/modules/memory/types/buffer_memory_chat/)
                *   [Conversation buffer window memory](/v0.1/docs/modules/memory/types/buffer_window/)
                *   [Entity memory](/v0.1/docs/modules/memory/types/entity_summary_memory/)
                *   [Combined memory](/v0.1/docs/modules/memory/types/multiple_memory/)
                *   [Conversation summary memory](/v0.1/docs/modules/memory/types/summary/)
                *   [Conversation summary buffer memory](/v0.1/docs/modules/memory/types/summary_buffer/)
                *   [Vector store-backed memory](/v0.1/docs/modules/memory/types/vectorstore_retriever_memory/)
        *   [Callbacks](/v0.1/docs/modules/callbacks/)
            
        *   [Experimental](/v0.1/docs/modules/experimental/)
            
*   [Security](/v0.1/docs/security/)
*   [Guides](/v0.1/docs/guides/)
    
*   [Ecosystem](/v0.1/docs/ecosystem/)
    
*   [LangGraph](/v0.1/docs/langgraph/)
*   * * *
    

*   [](/v0.1/)
*   [Modules](/v0.1/docs/modules/)
*   More
*   [Memory](/v0.1/docs/modules/memory/)
*   [Memory types](/v0.1/docs/modules/memory/types/)
*   Conversation summary buffer memory

ConversationSummaryBufferMemory
===============================

`ConversationSummaryBufferMemory` combines the ideas behind [BufferMemory](/v0.1/docs/modules/memory/types/buffer/) and [ConversationSummaryMemory](/v0.1/docs/modules/memory/types/summary/). It keeps a buffer of recent interactions in memory, but rather than just completely flushing old interactions it compiles them into a summary and uses both. Unlike the previous implementation though, it uses token length rather than number of interactions to determine when to flush interactions.

Let's first walk through how to use it:

tip

See [this section for general instructions on installing integration packages](/v0.1/docs/get_started/installation/#installing-integration-packages).

*   npm
*   Yarn
*   pnpm

    npm install @langchain/openai

    yarn add @langchain/openai

    pnpm add @langchain/openai

    import { OpenAI, ChatOpenAI } from "@langchain/openai";import { ConversationSummaryBufferMemory } from "langchain/memory";import { ConversationChain } from "langchain/chains";import {  ChatPromptTemplate,  HumanMessagePromptTemplate,  MessagesPlaceholder,  SystemMessagePromptTemplate,} from "@langchain/core/prompts";// summary buffer memoryconst memory = new ConversationSummaryBufferMemory({  llm: new OpenAI({ model: "gpt-3.5-turbo-instruct", temperature: 0 }),  maxTokenLimit: 10,});await memory.saveContext({ input: "hi" }, { output: "whats up" });await memory.saveContext({ input: "not much you" }, { output: "not much" });const history = await memory.loadMemoryVariables({});console.log({ history });/*  {    history: {      history: 'System: \n' +        'The human greets the AI, to which the AI responds.\n' +        'Human: not much you\n' +        'AI: not much'    }  }*/// We can also get the history as a list of messages (this is useful if you are using this with a chat prompt).const chatPromptMemory = new ConversationSummaryBufferMemory({  llm: new ChatOpenAI({ model: "gpt-3.5-turbo", temperature: 0 }),  maxTokenLimit: 10,  returnMessages: true,});await chatPromptMemory.saveContext({ input: "hi" }, { output: "whats up" });await chatPromptMemory.saveContext(  { input: "not much you" },  { output: "not much" });// We can also utilize the predict_new_summary method directly.const messages = await chatPromptMemory.chatHistory.getMessages();const previous_summary = "";const predictSummary = await chatPromptMemory.predictNewSummary(  messages,  previous_summary);console.log(JSON.stringify(predictSummary));// Using in a chain// Let's walk through an example, again setting verbose to true so we can see the prompt.const chatPrompt = ChatPromptTemplate.fromMessages([  SystemMessagePromptTemplate.fromTemplate(    "The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know."  ),  new MessagesPlaceholder("history"),  HumanMessagePromptTemplate.fromTemplate("{input}"),]);const model = new ChatOpenAI({ temperature: 0.9, verbose: true });const chain = new ConversationChain({  llm: model,  memory: chatPromptMemory,  prompt: chatPrompt,});const res1 = await chain.invoke({ input: "Hi, what's up?" });console.log({ res1 });/*  {    res1: 'Hello! I am an AI language model, always ready to have a conversation. How can I assist you today?'  }*/const res2 = await chain.invoke({  input: "Just working on writing some documentation!",});console.log({ res2 });/*  {    res2: "That sounds productive! Documentation is an important aspect of many projects. Is there anything specific you need assistance with regarding your documentation? I'm here to help!"  }*/const res3 = await chain.invoke({  input: "For LangChain! Have you heard of it?",});console.log({ res3 });/*  {    res3: 'Yes, I am familiar with LangChain! It is a blockchain-based language learning platform that aims to connect language learners with native speakers for real-time practice and feedback. It utilizes smart contracts to facilitate secure transactions and incentivize participation. Users can earn tokens by providing language learning services or consuming them for language lessons.'  }*/const res4 = await chain.invoke({  input:    "That's not the right one, although a lot of people confuse it for that!",});console.log({ res4 });/*  {    res4: "I apologize for the confusion! Could you please provide some more information about the LangChain you're referring to? That way, I can better understand and assist you with writing documentation for it."  }*/

#### API Reference:

*   [OpenAI](https://api.js.langchain.com/classes/langchain_openai.OpenAI.html) from `@langchain/openai`
*   [ChatOpenAI](https://api.js.langchain.com/classes/langchain_openai.ChatOpenAI.html) from `@langchain/openai`
*   [ConversationSummaryBufferMemory](https://api.js.langchain.com/classes/langchain_memory.ConversationSummaryBufferMemory.html) from `langchain/memory`
*   [ConversationChain](https://api.js.langchain.com/classes/langchain_chains.ConversationChain.html) from `langchain/chains`
*   [ChatPromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.ChatPromptTemplate.html) from `@langchain/core/prompts`
*   [HumanMessagePromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.HumanMessagePromptTemplate.html) from `@langchain/core/prompts`
*   [MessagesPlaceholder](https://api.js.langchain.com/classes/langchain_core_prompts.MessagesPlaceholder.html) from `@langchain/core/prompts`
*   [SystemMessagePromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.SystemMessagePromptTemplate.html) from `@langchain/core/prompts`

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Conversation summary memory

](/v0.1/docs/modules/memory/types/summary/)[

Next

Vector store-backed memory

](/v0.1/docs/modules/memory/types/vectorstore_retriever_memory/)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.