[docs]classFileChatMessageHistory(BaseChatMessageHistory):"""Chat message history that stores history in a local file."""
[docs]def__init__(self,file_path:str,*,encoding:Optional[str]=None,ensure_ascii:bool=True,)->None:"""Initialize the file path for the chat history. Args: file_path: The path to the local file to store the chat history. encoding: The encoding to use for file operations. Defaults to None. ensure_ascii: If True, escape non-ASCII in JSON. Defaults to True. """self.file_path=Path(file_path)self.encoding=encodingself.ensure_ascii=ensure_asciiifnotself.file_path.exists():self.file_path.touch()self.file_path.write_text(json.dumps([],ensure_ascii=self.ensure_ascii),encoding=self.encoding)
@propertydefmessages(self)->List[BaseMessage]:# type: ignore"""Retrieve the messages from the local file"""items=json.loads(self.file_path.read_text(encoding=self.encoding))messages=messages_from_dict(items)returnmessages
[docs]defadd_message(self,message:BaseMessage)->None:"""Append the message to the record in the local file"""messages=messages_to_dict(self.messages)messages.append(messages_to_dict([message])[0])self.file_path.write_text(json.dumps(messages,ensure_ascii=self.ensure_ascii),encoding=self.encoding)
[docs]defclear(self)->None:"""Clear session memory from the local file"""self.file_path.write_text(json.dumps([],ensure_ascii=self.ensure_ascii),encoding=self.encoding)