Skip to main content
Glama

MCP Memory Service

autonomous-memory-consolidation.md15.7 kB
# Autonomous Implementation Guide for Dream-Inspired Memory Consolidation ## Overview This document provides a comprehensive guide for implementing the [Dream-Inspired Memory Consolidation System](./dream-inspired-memory-consolidation.md) as a fully autonomous system that runs without external AI dependencies. ## Key Insight **The dream-inspired memory consolidation system can run almost entirely on autopilot** by leveraging the embeddings already generated during memory storage. These embeddings, combined with mathematical algorithms and rule-based logic, enable autonomous operation without external AI. ## Autonomous Components Analysis ### ✅ 100% Autonomous: Exponential Decay Scoring Pure mathematical calculations requiring zero AI intervention: ```python import math from datetime import datetime class AutonomousDecayCalculator: def __init__(self, retention_periods): self.retention_periods = retention_periods def calculate_relevance(self, memory): """Calculate memory relevance using pure math.""" age = (datetime.now() - memory.created_at).total_seconds() / 86400 # days base_score = memory.importance_score retention_period = self.retention_periods.get( memory.memory_type, self.retention_periods['default'] ) # Exponential decay decay_factor = math.exp(-age / retention_period) # Connection boost (pure counting) connection_boost = 1 + (0.1 * len(memory.connections)) return base_score * decay_factor * connection_boost ``` ### ✅ 100% Autonomous: Creative Association System Uses existing embeddings with vector mathematics: ```python import numpy as np from itertools import combinations import random class AutonomousAssociationEngine: def __init__(self, similarity_threshold=(0.3, 0.7)): self.min_similarity, self.max_similarity = similarity_threshold def find_associations(self, memories): """Find creative connections using only embeddings.""" # Limit pairs to prevent combinatorial explosion max_pairs = min(100, len(memories) * (len(memories) - 1) // 2) if len(memories) < 2: return [] # Random sampling of pairs all_pairs = list(combinations(range(len(memories)), 2)) sampled_pairs = random.sample( all_pairs, min(max_pairs, len(all_pairs)) ) associations = [] for i, j in sampled_pairs: # Cosine similarity using existing embeddings similarity = self._cosine_similarity( memories[i].embedding, memories[j].embedding ) # Check if in creative "sweet spot" if self.min_similarity < similarity < self.max_similarity: associations.append({ 'memory_1': memories[i].hash, 'memory_2': memories[j].hash, 'similarity': similarity, 'discovered_at': datetime.now() }) return associations def _cosine_similarity(self, vec1, vec2): """Calculate cosine similarity between two vectors.""" vec1 = np.array(vec1) vec2 = np.array(vec2) dot_product = np.dot(vec1, vec2) norm_product = np.linalg.norm(vec1) * np.linalg.norm(vec2) return dot_product / norm_product if norm_product > 0 else 0 ``` ### ✅ 100% Autonomous: Controlled Forgetting Rule-based logic with no AI required: ```python class AutonomousPruningEngine: def __init__(self, config): self.relevance_threshold = config['relevance_threshold'] self.access_threshold_days = config['access_threshold_days'] self.protected_tags = {'important', 'critical', 'reference'} def identify_forgettable_memories(self, memories): """Identify memories for archival using rules.""" forgettable = [] for memory in memories: # Skip protected memories if memory.tags & self.protected_tags: continue # Check relevance score if memory.relevance_score < self.relevance_threshold: # Check connections if len(memory.connections) == 0: # Check last access days_since_access = ( datetime.now() - memory.last_accessed ).days if days_since_access > self.access_threshold_days: forgettable.append(memory) return forgettable ``` ### 🔧 90% Autonomous: Semantic Compression Uses statistical methods instead of generative AI: ```python from collections import Counter from sklearn.cluster import AgglomerativeClustering import numpy as np class AutonomousCompressionEngine: def __init__(self): self.keyword_extractor = TFIDFKeywordExtractor() def compress_cluster(self, memories): """Compress memories without using generative AI.""" if not memories: return None # 1. Find centroid (most representative memory) embeddings = np.array([m.embedding for m in memories]) centroid = np.mean(embeddings, axis=0) # Calculate distances to centroid distances = [ np.linalg.norm(centroid - emb) for emb in embeddings ] representative_idx = np.argmin(distances) representative_memory = memories[representative_idx] # 2. Extract keywords using TF-IDF all_content = ' '.join([m.content for m in memories]) keywords = self.keyword_extractor.extract(all_content, top_k=20) # 3. Aggregate metadata all_tags = set() for memory in memories: all_tags.update(memory.tags) # 4. Create structured summary (not prose) compressed = { "type": "compressed_cluster", "representative_content": representative_memory.content, "representative_hash": representative_memory.hash, "cluster_size": len(memories), "keywords": keywords, "common_tags": list(all_tags), "temporal_range": { "start": min(m.created_at for m in memories), "end": max(m.created_at for m in memories) }, "centroid_embedding": centroid.tolist(), "member_hashes": [m.hash for m in memories] } return compressed class TFIDFKeywordExtractor: """Simple TF-IDF based keyword extraction.""" def extract(self, text, top_k=10): # Simple word frequency for demonstration # In practice, use sklearn's TfidfVectorizer words = text.lower().split() word_freq = Counter(words) # Filter common words (simple stopword removal) stopwords = {'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at'} keywords = [ (word, count) for word, count in word_freq.most_common(top_k * 2) if word not in stopwords and len(word) > 3 ] return keywords[:top_k] ``` ## Complete Autonomous Architecture ```python from apscheduler.schedulers.background import BackgroundScheduler import logging class AutonomousMemoryConsolidator: """ Fully autonomous memory consolidation system. Runs without any external AI dependencies. """ def __init__(self, storage, config): self.storage = storage self.config = config # Initialize autonomous components self.decay_calculator = AutonomousDecayCalculator( config['retention_periods'] ) self.association_engine = AutonomousAssociationEngine() self.compression_engine = AutonomousCompressionEngine() self.pruning_engine = AutonomousPruningEngine(config['forgetting']) # Setup scheduling self.scheduler = BackgroundScheduler() self._setup_schedules() logging.info("Autonomous Memory Consolidator initialized") def _setup_schedules(self): """Configure autonomous scheduling.""" # Daily consolidation at 3 AM self.scheduler.add_job( func=self.run_daily_consolidation, trigger="cron", hour=3, minute=0, id="daily_consolidation" ) # Weekly consolidation on Mondays at 4 AM self.scheduler.add_job( func=self.run_weekly_consolidation, trigger="cron", day_of_week='mon', hour=4, minute=0, id="weekly_consolidation" ) # Monthly consolidation on 1st at 5 AM self.scheduler.add_job( func=self.run_monthly_consolidation, trigger="cron", day=1, hour=5, minute=0, id="monthly_consolidation" ) def start(self): """Start the autonomous consolidation system.""" self.scheduler.start() logging.info("Autonomous consolidation scheduler started") async def run_daily_consolidation(self): """Daily consolidation - fully autonomous.""" try: # Get recent memories memories = await self.storage.get_recent_memories(days=1) # Update relevance scores (pure math) for memory in memories: memory.relevance_score = self.decay_calculator.calculate_relevance(memory) await self.storage.update_relevance_score(memory.hash, memory.relevance_score) # Find associations (vector math) associations = self.association_engine.find_associations(memories) for assoc in associations: await self.storage.store_association(assoc) logging.info( f"Daily consolidation complete: " f"{len(memories)} memories processed, " f"{len(associations)} associations found" ) except Exception as e: logging.error(f"Daily consolidation failed: {e}") async def run_weekly_consolidation(self): """Weekly consolidation with clustering.""" try: # Get week's memories memories = await self.storage.get_recent_memories(days=7) # Cluster memories using embeddings clusters = self._cluster_memories(memories) # Compress large clusters for cluster in clusters: if len(cluster) >= self.config['compression']['min_cluster_size']: compressed = self.compression_engine.compress_cluster(cluster) await self.storage.store_compressed_memory(compressed) logging.info(f"Weekly consolidation: {len(clusters)} clusters processed") except Exception as e: logging.error(f"Weekly consolidation failed: {e}") def _cluster_memories(self, memories, threshold=0.3): """Cluster memories using hierarchical clustering.""" if len(memories) < 2: return [[m] for m in memories] # Extract embeddings embeddings = np.array([m.embedding for m in memories]) # Hierarchical clustering clustering = AgglomerativeClustering( n_clusters=None, distance_threshold=threshold, linkage='average' ) labels = clustering.fit_predict(embeddings) # Group by cluster clusters = {} for idx, label in enumerate(labels): if label not in clusters: clusters[label] = [] clusters[label].append(memories[idx]) return list(clusters.values()) ``` ## Deployment Configuration ```yaml # autonomous_consolidation_config.yaml autonomous_mode: enabled: true # No external AI endpoints needed! external_ai_required: false # Retention periods (in days) retention_periods: critical: 365 reference: 180 standard: 30 temporary: 7 default: 30 # Association discovery associations: min_similarity: 0.3 max_similarity: 0.7 max_pairs_per_run: 100 enabled: true # Forgetting rules forgetting: relevance_threshold: 0.1 access_threshold_days: 90 archive_path: "./memory_archive" enabled: true # Compression settings compression: min_cluster_size: 5 clustering_threshold: 0.3 enabled: true # Scheduling (cron expressions) schedules: daily: "0 3 * * *" # 3:00 AM daily weekly: "0 4 * * 1" # 4:00 AM Mondays monthly: "0 5 1 * *" # 5:00 AM first of month ``` ## Key Advantages of Autonomous Operation ### 1. **Complete Independence** - No API keys required - No external service dependencies - No internet connection needed - Works entirely offline ### 2. **Predictable Behavior** - Deterministic algorithms - Reproducible results - Easy to debug and test - Consistent performance ### 3. **Cost Efficiency** - Zero ongoing AI costs - No API rate limits - No usage-based billing - Minimal computational resources ### 4. **Privacy & Security** - All processing stays local - No data leaves your system - Complete data sovereignty - No third-party exposure ### 5. **Performance** - No network latency - Instant processing - Parallel operations possible - Scales with local hardware ## What's Different from AI-Powered Version? | Feature | AI-Powered | Autonomous | |---------|------------|------------| | Natural language summaries | ✅ Eloquent prose | ❌ Structured data | | Complex reasoning | ✅ Nuanced understanding | ❌ Rule-based logic | | Summary quality | ✅ Human-like | ✅ Statistically representative | | Cost | 💰 Ongoing API costs | ✅ Free after setup | | Speed | 🐌 Network dependent | 🚀 Local processing | | Privacy | ⚠️ Data sent to API | 🔒 Completely private | | Reliability | ⚠️ Service dependent | ✅ Always available | ## Implementation Checklist - [ ] Install required Python packages (numpy, scikit-learn, apscheduler) - [ ] Configure retention periods for your use case - [ ] Set up clustering thresholds based on your embedding model - [ ] Configure scheduling based on your memory volume - [ ] Test each component independently - [ ] Monitor initial runs and adjust thresholds - [ ] Set up logging and monitoring - [ ] Create backup strategy for archived memories ## Conclusion The autonomous implementation proves that sophisticated memory consolidation doesn't require external AI. By leveraging existing embeddings and mathematical algorithms, we achieve a system that mimics biological memory processes while maintaining complete independence, privacy, and cost-effectiveness. This approach transforms the dream-inspired concept into a practical, deployable system that can run indefinitely without human intervention or external dependencies - a true "set it and forget it" solution for memory management. --- *Related Documents:* - [Dream-Inspired Memory Consolidation System](./dream-inspired-memory-consolidation.md) - [Issue #11: Multi-Layered Memory Consolidation](https://github.com/doobidoo/mcp-memory-service/issues/11) *Created: July 28, 2025*

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/doobidoo/mcp-memory-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server