Skip to content

Commit 935a8b9

Browse files
authored
Merge pull request #131 from Dooders/dev
Dev
2 parents 116679d + 17d7b05 commit 935a8b9

2 files changed

Lines changed: 132 additions & 16 deletions

File tree

memory/embeddings/vector_store.py

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -556,29 +556,57 @@ def store_memory_vectors(
556556
embeddings = memory_entry.get("embeddings", {})
557557
metadata = memory_entry.get("metadata", {})
558558

559+
def store_vector(
560+
index,
561+
memory_id: str,
562+
vector: List[float],
563+
metadata: Dict[str, Any],
564+
tier: str,
565+
) -> bool:
566+
"""
567+
Store a vector in the appropriate index.
568+
569+
Args:
570+
index: Vector index to store in
571+
memory_id: Unique identifier for the memory
572+
vector: Vector to store
573+
metadata: Metadata to store
574+
tier: Tier to store the vector in ("stm", "im", or "ltm")
575+
576+
Returns:
577+
True if storage was successful
578+
"""
579+
try:
580+
logger.debug(f"Storing {tier.upper()} vector for memory {memory_id}")
581+
return index.add(memory_id, vector, metadata)
582+
except Exception as e:
583+
logger.error(
584+
f"Failed to store {tier.upper()} vector for memory {memory_id}: {e}"
585+
)
586+
return False
587+
559588
success = True
560589

561-
# Store in STM index
590+
# Store in appropriate index based on tier
562591
if tier == "stm":
563-
logger.debug("Storing STM vector for memory %s", memory_id)
564-
success = success and self.stm_index.add(
565-
memory_id, embeddings["full_vector"], metadata
592+
success = store_vector(
593+
self.stm_index, memory_id, embeddings["full_vector"], metadata, "stm"
566594
)
567-
568-
# Store in IM index
569-
if tier == "im":
595+
elif tier == "im":
570596
#! TODO: Use compressed vector
571-
logger.debug("Storing IM vector for memory %s", memory_id)
572-
success = success and self.im_index.add(
573-
memory_id, embeddings["full_vector"], metadata
597+
logger.debug(
598+
f"@@@@@@@@@@@@@@@@@@@@@@@@@ Storing IM vector for memory {memory_id}"
574599
)
575-
576-
# Store in LTM index
577-
if tier == "ltm":
600+
success = store_vector(
601+
self.im_index, memory_id, embeddings["full_vector"], metadata, "im"
602+
)
603+
logger.debug(
604+
f"@@@@@@@@@@@@@@@@@@@@@@@@@ Result of storing IM vector: {success}"
605+
)
606+
elif tier == "ltm":
578607
#! TODO: Use abstract vector
579-
logger.debug("Storing LTM vector for memory %s", memory_id)
580-
success = success and self.ltm_index.add(
581-
memory_id, embeddings["full_vector"], metadata
608+
success = store_vector(
609+
self.ltm_index, memory_id, embeddings["full_vector"], metadata, "ltm"
582610
)
583611

584612
return success

memory/utils/logging.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import os
2+
import logging
3+
import sys
4+
5+
# Use current working directory for logs
6+
LOGS_DIR = os.path.join(os.getcwd(), "logs")
7+
8+
print(f"Current working directory: {os.getcwd()}")
9+
print(f"Logs directory: {LOGS_DIR}")
10+
11+
# Configure logging
12+
logger = logging.getLogger()
13+
14+
15+
def setup_logging(demo_name: str, log_dir: str = LOGS_DIR) -> logging.Logger:
16+
"""Set up logging to both console and file.
17+
18+
Args:
19+
demo_name: Name of the demo for log file naming
20+
21+
Returns:
22+
Configured logger instance
23+
"""
24+
try:
25+
# Create logs directory if it doesn't exist
26+
os.makedirs(log_dir, exist_ok=True)
27+
print(f"Created logs directory at: {log_dir}")
28+
29+
# Use a fixed log filename based on demo name (without timestamp)
30+
log_file = os.path.join(log_dir, f"{demo_name}.log")
31+
print(f"Log file will be created at: {log_file}")
32+
33+
# Clear the existing log file if it exists
34+
with open(log_file, "w") as f:
35+
# Empty the file by opening it in write mode
36+
pass
37+
print(f"Initialized log file: {log_file}")
38+
39+
40+
logger.setLevel(logging.DEBUG)
41+
42+
# Clear existing handlers if any
43+
if logger.handlers:
44+
logger.handlers.clear()
45+
46+
# File handler for logging to file
47+
file_handler = logging.FileHandler(log_file)
48+
file_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
49+
file_handler.setFormatter(file_formatter)
50+
file_handler.setLevel(logging.DEBUG)
51+
52+
# Console handler for logging to console
53+
console_handler = logging.StreamHandler()
54+
console_formatter = logging.Formatter("%(message)s")
55+
console_handler.setFormatter(console_formatter)
56+
console_handler.setLevel(logging.INFO)
57+
58+
# Create a filter to exclude embedding-related log messages
59+
class EmbeddingFilter(logging.Filter):
60+
def filter(self, record):
61+
# Skip any log messages containing "embedding" or "vector"
62+
return not any(
63+
term in record.getMessage().lower()
64+
for term in ["embedding", "vector", "encoded"]
65+
)
66+
67+
# Add the filter to both handlers
68+
embedding_filter = EmbeddingFilter()
69+
file_handler.addFilter(embedding_filter)
70+
console_handler.addFilter(embedding_filter)
71+
72+
# Add handlers to logger
73+
logger.addHandler(file_handler)
74+
logger.addHandler(console_handler)
75+
76+
# Log a test message to verify logging is working
77+
logger.info(f"Logging initialized for {demo_name}")
78+
print(f"Logging setup complete for {demo_name}")
79+
80+
return logger
81+
except Exception as e:
82+
print(f"Error setting up logging: {e}")
83+
# Fallback to basic console logging
84+
logging.basicConfig(level=logging.INFO)
85+
return logging.getLogger()
86+
87+
88+

0 commit comments

Comments
 (0)