mirror of
https://github.com/hwchase17/langchain.git
synced 2025-07-22 20:43:08 +00:00
langchain[patch]: Fix summary buffer memory with return message flag (#21115)
## Description Memory return could be set as `str` or `message` by `return_messages` flag as mentioned in https://python.langchain.com/docs/modules/memory/#whether-memory-is-a-string-or-a-list-of-messages, where `langchain.chains.conversation.memory.ConversationSummaryBufferMemory` did not implement that. This commit added `buffer_as_str` and `buffer_as_messages` function, and `buffer` now affected by `return_messages` flag. ## Example Test Code and Output ```python # Fix: ConversationSummaryBufferMemory with return_messages flag function # Test code from langchain.chains.conversation.memory import ConversationSummaryBufferMemory from langchain_community.llms.ollama import Ollama llm = Ollama() # Create an instance of ConversationSummaryBufferMemory with return_messages set to True memory = ConversationSummaryBufferMemory(return_messages=True, llm=llm) # Add user and AI messages to the chat memory memory.chat_memory.add_user_message("hi!") memory.chat_memory.add_ai_message("what's up?") # Print the buffer print("Buffer:") print(*map(type, memory.buffer), sep="\n") print(memory.buffer, "\n") # Print the buffer as a string print("Buffer as String:") print(type(memory.buffer_as_str)) print(memory.buffer_as_str, "\n") # Print the buffer as messages print("Buffer as Messages:") print(*map(type, memory.buffer_as_messages), sep="\n") print(memory.buffer_as_messages, "\n") # Print the buffer after setting return_messages to False memory.return_messages = False print("Buffer after setting return_messages to False:") print(type(memory.buffer)) print(memory.buffer, "\n") ``` ```plaintext Buffer: <class 'langchain_core.messages.human.HumanMessage'> <class 'langchain_core.messages.ai.AIMessage'> [HumanMessage(content='hi!'), AIMessage(content="what's up?")] Buffer as String: <class 'str'> Human: hi! AI: what's up? Buffer as Messages: <class 'langchain_core.messages.human.HumanMessage'> <class 'langchain_core.messages.ai.AIMessage'> [HumanMessage(content='hi!'), AIMessage(content="what's up?")] Buffer after setting return_messages to False: <class 'str'> Human: hi! AI: what's up? ``` --------- Co-authored-by: Bagatur <22008038+baskaryan@users.noreply.github.com>
This commit is contained in:
parent
9639457222
commit
ee1adaacaa
@ -1,4 +1,4 @@
|
||||
from typing import Any, Dict, List
|
||||
from typing import Any, Dict, List, Union
|
||||
|
||||
from langchain_core.messages import BaseMessage, get_buffer_string
|
||||
from langchain_core.pydantic_v1 import root_validator
|
||||
@ -15,8 +15,9 @@ class ConversationSummaryBufferMemory(BaseChatMemory, SummarizerMixin):
|
||||
memory_key: str = "history"
|
||||
|
||||
@property
|
||||
def buffer(self) -> List[BaseMessage]:
|
||||
return self.chat_memory.messages
|
||||
def buffer(self) -> Union[str, List[BaseMessage]]:
|
||||
"""String buffer of memory."""
|
||||
return self.load_memory_variables({})[self.memory_key]
|
||||
|
||||
@property
|
||||
def memory_variables(self) -> List[str]:
|
||||
@ -28,7 +29,7 @@ class ConversationSummaryBufferMemory(BaseChatMemory, SummarizerMixin):
|
||||
|
||||
def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
|
||||
"""Return history buffer."""
|
||||
buffer = self.buffer
|
||||
buffer = self.chat_memory.messages
|
||||
if self.moving_summary_buffer != "":
|
||||
first_messages: List[BaseMessage] = [
|
||||
self.summary_message_cls(content=self.moving_summary_buffer)
|
||||
|
Loading…
Reference in New Issue
Block a user