Aventra-OS-Chat / memory_store.py
Tpayne101's picture
Update memory_store.py
9ad1ca7 verified
import os
import json
import numpy as np
class MemoryStore:
def __init__(self, path="/mnt/data/memory.json"):
self.path = path
os.makedirs(os.path.dirname(self.path), exist_ok=True) # ensure folder exists
self.memories = []
self.load()
def add_memory(self, text, vector):
# avoid duplicates based on cosine similarity
if self.memories:
sims = [self.cosine_similarity(vector, np.array(m["vector"])) for m in self.memories]
if max(sims) > 0.95:
return "Duplicate detected — memory already stored."
self.memories.append({"text": text, "vector": vector.tolist()})
self.save()
return "Saved new memory."
def retrieve_relevant(self, query_vector, top_k=5):
if not self.memories:
return []
scored = [
(m["text"], self.cosine_similarity(query_vector, np.array(m["vector"])))
for m in self.memories
]
return sorted(scored, key=lambda x: x[1], reverse=True)[:top_k]
def save(self):
os.makedirs(os.path.dirname(self.path), exist_ok=True)
with open(self.path, "w") as f:
json.dump(self.memories, f)
def load(self):
if os.path.exists(self.path):
with open(self.path, "r") as f:
self.memories = json.load(f)
else:
self.memories = []
@staticmethod
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))