From cc25e71d94e07eb9c7c69f51d2743a9247cf5c6e Mon Sep 17 00:00:00 2001 From: rajib76 Date: Sat, 15 Jun 2024 08:37:05 -0700 Subject: [PATCH 1/5] moved the neo4j user to env file --- .gitignore | 3 ++- README.md | 1 + src/memary/agent/base_agent.py | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 771e58d7..f80ec107 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ .DS_Store dist/ README_hidden.md -**/__pycache__/ \ No newline at end of file +**/__pycache__/ +.idea \ No newline at end of file diff --git a/README.md b/README.md index afa4e642..baba1b37 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ memary will default to the locally run models unless explicitly specified. ``` OPENAI_API_KEY="YOUR_API_KEY" NEO4J_PW="YOUR_NEO4J_PW" +NEO4J_USER="YOUR_NEO4J_PW" NEO4J_URL="YOUR_NEO4J_URL" PERPLEXITY_API_KEY="YOUR_API_KEY" GOOGLEMAPS_API_KEY="YOUR_API_KEY" diff --git a/src/memary/agent/base_agent.py b/src/memary/agent/base_agent.py index a63a12fa..5706f2b8 100644 --- a/src/memary/agent/base_agent.py +++ b/src/memary/agent/base_agent.py @@ -71,7 +71,10 @@ def __init__( pplx_api_key = os.getenv("PERPLEXITY_API_KEY") # Neo4j credentials - self.neo4j_username = "neo4j" + # self.neo4j_username = "neo4j" + # Rajib - Neo4J user was hardcoded. + # Moved it to .env + self.neo4j_username = os.getenv("NEO4J_USER") self.neo4j_password = os.getenv("NEO4J_PW") self.neo4j_url = os.getenv("NEO4J_URL") database = "neo4j" From 1e06a677b2ab2de4e20845604cdcb43f59236e6a Mon Sep 17 00:00:00 2001 From: rajib76 Date: Sat, 15 Jun 2024 10:08:34 -0700 Subject: [PATCH 2/5] changed the typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index baba1b37..85e9428d 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ memary will default to the locally run models unless explicitly specified. ``` OPENAI_API_KEY="YOUR_API_KEY" NEO4J_PW="YOUR_NEO4J_PW" -NEO4J_USER="YOUR_NEO4J_PW" +NEO4J_USER="YOUR_NEO4J_USER" NEO4J_URL="YOUR_NEO4J_URL" PERPLEXITY_API_KEY="YOUR_API_KEY" GOOGLEMAPS_API_KEY="YOUR_API_KEY" From 5556e201c902d13a8bbb16e6a42f90e40e05eff9 Mon Sep 17 00:00:00 2001 From: rajib76 Date: Sat, 15 Jun 2024 15:53:05 -0700 Subject: [PATCH 3/5] fixed spelling of memory --- src/memary/memory/entity_knowledge_store.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/memary/memory/entity_knowledge_store.py b/src/memary/memory/entity_knowledge_store.py index ca08f2d7..6cca4427 100644 --- a/src/memary/memory/entity_knowledge_store.py +++ b/src/memary/memory/entity_knowledge_store.py @@ -23,7 +23,6 @@ def init_memory(self): def return_memory(self): return self.knowledge_memory - def load_memory_from_file(self): try: with open(self.file_name, 'r') as file: @@ -46,10 +45,9 @@ def add_memory(self, memory_stream: list[MemoryItem]): Args: memory_stream (list): list of MemoryItem """ - knowledge_meory = self._convert_memory_to_knowledge_memory( + knowledge_memory = self._convert_memory_to_knowledge_memory( memory_stream) - self._update_knowledge_memory(knowledge_meory) - + self._update_knowledge_memory(knowledge_memory) def _update_knowledge_memory(self, knowledge_memory: list): """update self.knowledge memory with new knowledge memory items @@ -87,6 +85,3 @@ def _convert_memory_to_knowledge_memory( def get_memory(self) -> list[KnowledgeMemoryItem]: return self.knowledge_memory - - - From 25c518f3d42ea4e5a6d45514813dd21aa23542f3 Mon Sep 17 00:00:00 2001 From: rajib76 Date: Sun, 16 Jun 2024 07:58:17 -0700 Subject: [PATCH 4/5] moved NEO4J_DB to env --- README.md | 1 + src/memary/agent/base_agent.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 85e9428d..e3895275 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ memary will default to the locally run models unless explicitly specified. OPENAI_API_KEY="YOUR_API_KEY" NEO4J_PW="YOUR_NEO4J_PW" NEO4J_USER="YOUR_NEO4J_USER" +NEO4J_DB="YOUR_NEO4J_DATABASE" NEO4J_URL="YOUR_NEO4J_URL" PERPLEXITY_API_KEY="YOUR_API_KEY" GOOGLEMAPS_API_KEY="YOUR_API_KEY" diff --git a/src/memary/agent/base_agent.py b/src/memary/agent/base_agent.py index 5706f2b8..10eedb41 100644 --- a/src/memary/agent/base_agent.py +++ b/src/memary/agent/base_agent.py @@ -77,7 +77,9 @@ def __init__( self.neo4j_username = os.getenv("NEO4J_USER") self.neo4j_password = os.getenv("NEO4J_PW") self.neo4j_url = os.getenv("NEO4J_URL") - database = "neo4j" + # Adding the database also as env variable + database = os.getenv("NEO4J_DB") + # database = "neo4j" # initialize APIs self.load_llm_model(llm_model_name) From 47c27363e007b78bf8b870a6063b8ced2ef16e34 Mon Sep 17 00:00:00 2001 From: rajib76 Date: Sun, 16 Jun 2024 21:27:19 -0700 Subject: [PATCH 5/5] added the forgetting feature using ebbinghaus law --- src/memary/memory/base_memory.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/memary/memory/base_memory.py b/src/memary/memory/base_memory.py index c2733aff..9d2a0a3d 100644 --- a/src/memary/memory/base_memory.py +++ b/src/memary/memory/base_memory.py @@ -1,5 +1,6 @@ import json import logging +import math from abc import ABC, abstractmethod from datetime import datetime, timedelta @@ -77,6 +78,29 @@ def remove_memory_by_index(self, index): logging.info("Invalid index. Memory item not removed.") return False + def calculate_retention_score(self, strength:int,days_elapsed_since_last_used:int): + """ + strength: This parameter denotes the strength of the memory.The strenght of the memory + is equivalent to the number of times the memory item has been accessed. In case of entity, + this will be the number of times(count), the entity has been used + days_elapsed_since_last_used: This is the duration in days that has elapsed from today till the + memory was last accessed. + """ + score = math.exp(-days_elapsed_since_last_used / strength) + + return score + + def forget_memory(self,threshold_retention_score): + """ + This function calcualtes the retention score for each memory item + and then keeps the one whose score is more than threshold + """ + today = datetime.today() + self.memory = [item for item in self.return_memory if + self.calculate_retention_score(item.count, (today - item.date).days) >= threshold_retention_score] + + logging.info("Old memory has been forgotten.") + def clear_memory(self): self.memory = [] if self.file_name: