Sa-m's picture
Upload folder using huggingface_hub
0279c66 verified
Raw
History Blame Contribute Delete
2.25 kB
import chromadb
from chromadb.config import Settings
import logging
from typing import List, Dict, Any
logger = logging.getLogger(__name__)
class CrossSampleMemory:
"""
Cross-Sample Memory Retrieval Pipeline for ParamAgent-plus.
Uses ChromaDB to retrieve relevant reasoning patterns from past experiences.
"""
def __init__(self, db_path: str = "./data/chroma_db", collection_name: str = "trajectory_bank"):
self.db_path = db_path
self.client = chromadb.PersistentClient(path=db_path, settings=Settings(anonymized_telemetry=False))
self.collection = self.client.get_or_create_collection(
name=collection_name,
metadata={"hnsw:space": "cosine"}
)
logger.info(f"Initialized CrossSampleMemory at {db_path} with collection '{collection_name}'")
def add_trajectory(self, trajectory_id: str, problem_description: str, final_reflection: str, metadata: Dict[str, Any] = None):
"""
Stores a successful reasoning trajectory and reflection into the bank.
"""
if metadata is None:
metadata = {}
# We index based on the problem description to find similar problems later
self.collection.add(
documents=[problem_description],
metadatas=[{"reflection": final_reflection, **metadata}],
ids=[trajectory_id]
)
logger.debug(f"Added trajectory {trajectory_id} to memory bank.")
def retrieve_similar_patterns(self, current_problem: str, n_results: int = 3) -> List[Dict[str, Any]]:
"""
Retrieves relevant cross-sample reasoning patterns based on the current problem context.
"""
if self.collection.count() == 0:
return []
# Query the DB for similar problem descriptions
results = self.collection.query(
query_texts=[current_problem],
n_results=min(n_results, self.collection.count())
)
retrieved_patterns = []
if results['metadatas'] and len(results['metadatas'][0]) > 0:
for metadata in results['metadatas'][0]:
retrieved_patterns.append(metadata)
return retrieved_patterns