Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
# app.py - Hybrid Memory-Augmented Graph RAG with Groq
|
| 2 |
import hashlib
|
| 3 |
import os
|
|
|
|
| 4 |
from collections import defaultdict
|
| 5 |
from datetime import datetime
|
| 6 |
|
|
@@ -37,7 +38,11 @@ def rrf_score(rank: int, k: int = RRF_K) -> float:
|
|
| 37 |
# ========================= MEMORY LAYER =========================
|
| 38 |
class HybridMemory:
|
| 39 |
def __init__(self):
|
| 40 |
-
self.embeddings = HuggingFaceEmbeddings(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
self.vector_memory = None
|
| 42 |
self.graph_memory = nx.Graph()
|
| 43 |
self.memory_dir = "user_memory"
|
|
@@ -46,17 +51,19 @@ class HybridMemory:
|
|
| 46 |
|
| 47 |
def load_memory(self):
|
| 48 |
vector_path = os.path.join(self.memory_dir, "vector_memory")
|
| 49 |
-
graph_path = os.path.join(self.memory_dir, "memory_graph.
|
| 50 |
-
|
| 51 |
if os.path.exists(vector_path):
|
| 52 |
self.vector_memory = FAISS.load_local(vector_path, self.embeddings, allow_dangerous_deserialization=True)
|
| 53 |
if os.path.exists(graph_path):
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
def save_memory(self):
|
| 57 |
if self.vector_memory:
|
| 58 |
self.vector_memory.save_local(os.path.join(self.memory_dir, "vector_memory"))
|
| 59 |
-
|
|
|
|
| 60 |
|
| 61 |
def add_memory(self, text: str, memory_type: str = "fact", metadata: dict = None):
|
| 62 |
if metadata is None:
|
|
@@ -110,11 +117,21 @@ class HybridMemory:
|
|
| 110 |
|
| 111 |
# ========================= ORIGINAL PIPELINE FUNCTIONS =========================
|
| 112 |
@st.cache_resource
|
| 113 |
-
def load_embed_model():
|
|
|
|
|
|
|
| 114 |
@st.cache_resource
|
| 115 |
-
def load_reranker():
|
|
|
|
|
|
|
| 116 |
@st.cache_resource
|
| 117 |
-
def load_lc_embeddings():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
@st.cache_resource
|
| 119 |
def load_spacy():
|
| 120 |
try:
|
|
|
|
| 1 |
# app.py - Hybrid Memory-Augmented Graph RAG with Groq
|
| 2 |
import hashlib
|
| 3 |
import os
|
| 4 |
+
import pickle
|
| 5 |
from collections import defaultdict
|
| 6 |
from datetime import datetime
|
| 7 |
|
|
|
|
| 38 |
# ========================= MEMORY LAYER =========================
|
| 39 |
class HybridMemory:
|
| 40 |
def __init__(self):
|
| 41 |
+
self.embeddings = HuggingFaceEmbeddings(
|
| 42 |
+
model_name=EMBED_MODEL_NAME,
|
| 43 |
+
cache_folder="/tmp/model_cache",
|
| 44 |
+
model_kwargs={"device": "cpu"},
|
| 45 |
+
)
|
| 46 |
self.vector_memory = None
|
| 47 |
self.graph_memory = nx.Graph()
|
| 48 |
self.memory_dir = "user_memory"
|
|
|
|
| 51 |
|
| 52 |
def load_memory(self):
|
| 53 |
vector_path = os.path.join(self.memory_dir, "vector_memory")
|
| 54 |
+
graph_path = os.path.join(self.memory_dir, "memory_graph.pkl")
|
| 55 |
+
|
| 56 |
if os.path.exists(vector_path):
|
| 57 |
self.vector_memory = FAISS.load_local(vector_path, self.embeddings, allow_dangerous_deserialization=True)
|
| 58 |
if os.path.exists(graph_path):
|
| 59 |
+
with open(graph_path, "rb") as f:
|
| 60 |
+
self.graph_memory = pickle.load(f)
|
| 61 |
|
| 62 |
def save_memory(self):
|
| 63 |
if self.vector_memory:
|
| 64 |
self.vector_memory.save_local(os.path.join(self.memory_dir, "vector_memory"))
|
| 65 |
+
with open(os.path.join(self.memory_dir, "memory_graph.pkl"), "wb") as f:
|
| 66 |
+
pickle.dump(self.graph_memory, f)
|
| 67 |
|
| 68 |
def add_memory(self, text: str, memory_type: str = "fact", metadata: dict = None):
|
| 69 |
if metadata is None:
|
|
|
|
| 117 |
|
| 118 |
# ========================= ORIGINAL PIPELINE FUNCTIONS =========================
|
| 119 |
@st.cache_resource
|
| 120 |
+
def load_embed_model():
|
| 121 |
+
return SentenceTransformer(EMBED_MODEL_NAME, cache_folder="/tmp/model_cache")
|
| 122 |
+
|
| 123 |
@st.cache_resource
|
| 124 |
+
def load_reranker():
|
| 125 |
+
return CrossEncoder(RERANKER_MODEL)
|
| 126 |
+
|
| 127 |
@st.cache_resource
|
| 128 |
+
def load_lc_embeddings():
|
| 129 |
+
return HuggingFaceEmbeddings(
|
| 130 |
+
model_name=EMBED_MODEL_NAME,
|
| 131 |
+
cache_folder="/tmp/model_cache",
|
| 132 |
+
model_kwargs={"device": "cpu"},
|
| 133 |
+
)
|
| 134 |
+
|
| 135 |
@st.cache_resource
|
| 136 |
def load_spacy():
|
| 137 |
try:
|