diff --git a/griptape/drivers/memory/conversation/local_conversation_memory_driver.py b/griptape/drivers/memory/conversation/local_conversation_memory_driver.py index dce8ca3fe..b1d6f0ee2 100644 --- a/griptape/drivers/memory/conversation/local_conversation_memory_driver.py +++ b/griptape/drivers/memory/conversation/local_conversation_memory_driver.py @@ -19,7 +19,9 @@ class LocalConversationMemoryDriver(BaseConversationMemoryDriver): def store(self, runs: list[Run], metadata: dict[str, Any]) -> None: if self.persist_file is not None: - Path(self.persist_file).write_text(json.dumps(self._to_params_dict(runs, metadata))) + persist_file = Path(self.persist_file) + persist_file.parent.mkdir(parents=True, exist_ok=True) + persist_file.write_text(json.dumps(self._to_params_dict(runs, metadata))) def load(self) -> tuple[list[Run], dict[str, Any]]: if ( diff --git a/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py b/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py index 0b32698ad..a6bc034ad 100644 --- a/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py +++ b/tests/unit/drivers/memory/conversation/test_local_conversation_memory_driver.py @@ -34,6 +34,17 @@ def test_store(self): assert os.path.exists(self.MEMORY_FILE_PATH) + def test_store_creates_parent_directory(self, tmp_path): + persist_file = tmp_path / "memory" / self.MEMORY_FILE_PATH + memory_driver = LocalConversationMemoryDriver(persist_file=str(persist_file)) + memory = ConversationMemory(conversation_memory_driver=memory_driver, autoload=False) + pipeline = Pipeline(conversation_memory=memory) + + pipeline.add_task(PromptTask("test")) + pipeline.run() + + assert persist_file.exists() + def test_load(self): memory_driver = LocalConversationMemoryDriver(persist_file=self.MEMORY_FILE_PATH) memory = ConversationMemory(