Skip to main content
Glama

MCP Memory Service

test-adaptive-weights.js5.74 kB
#!/usr/bin/env node /** * Test Adaptive Memory Weight Adjustment * Tests the new dynamic weight adjustment based on memory age distribution */ const { analyzeMemoryAgeDistribution, calculateAdaptiveGitWeight } = require('./utilities/memory-scorer'); console.log('=== ADAPTIVE WEIGHT ADJUSTMENT TEST ===\n'); // Scenario 1: Stale memory set (your actual problem) console.log('📊 Scenario 1: Stale Memory Set (Median > 30 days)'); console.log('─'.repeat(80)); const staleMemories = [ { created_at_iso: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000).toISOString(), content: 'Old README work' }, { created_at_iso: new Date(Date.now() - 54 * 24 * 60 * 60 * 1000).toISOString(), content: 'Old wiki docs' }, { created_at_iso: new Date(Date.now() - 24 * 24 * 60 * 60 * 1000).toISOString(), content: 'Contributing guide' }, { created_at_iso: new Date(Date.now() - 57 * 24 * 60 * 60 * 1000).toISOString(), content: 'GitHub issue work' }, { created_at_iso: new Date(Date.now() - 52 * 24 * 60 * 60 * 1000).toISOString(), content: 'Old PR merge' }, ]; const ageAnalysis1 = analyzeMemoryAgeDistribution(staleMemories, { verbose: true }); console.log('\n🔍 Analysis Results:'); console.log(` Median Age: ${Math.round(ageAnalysis1.medianAge)} days`); console.log(` Average Age: ${Math.round(ageAnalysis1.avgAge)} days`); console.log(` Recent Count: ${ageAnalysis1.recentCount}/${ageAnalysis1.totalCount} (${Math.round(ageAnalysis1.recentCount/ageAnalysis1.totalCount*100)}%)`); console.log(` Is Stale: ${ageAnalysis1.isStale ? '✅ YES' : '❌ NO'}`); if (ageAnalysis1.recommendedAdjustments.reason) { console.log('\n💡 Recommended Adjustments:'); console.log(` Reason: ${ageAnalysis1.recommendedAdjustments.reason}`); console.log(` Time Decay Weight: 0.25 → ${ageAnalysis1.recommendedAdjustments.timeDecay}`); console.log(` Tag Relevance Weight: 0.35 → ${ageAnalysis1.recommendedAdjustments.tagRelevance}`); } // Test adaptive git weight with recent commits but stale memories const gitContext1 = { recentCommits: [ { date: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(), message: 'chore: bump version to v8.5.0' }, { date: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(), message: 'fix: sync script import path' }, ] }; const gitWeightResult1 = calculateAdaptiveGitWeight(gitContext1, ageAnalysis1, 1.8, { verbose: true }); console.log('\n⚙️ Adaptive Git Weight:'); console.log(` Configured Weight: 1.8x`); console.log(` Adaptive Weight: ${gitWeightResult1.weight.toFixed(1)}x`); console.log(` Adjusted: ${gitWeightResult1.adjusted ? '✅ YES' : '❌ NO'}`); console.log(` Reason: ${gitWeightResult1.reason}`); // Scenario 2: Recent memory set console.log('\n\n📊 Scenario 2: Recent Memory Set (All memories < 14 days)'); console.log('─'.repeat(80)); const recentMemories = [ { created_at_iso: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString(), content: 'Recent HTTP fix' }, { created_at_iso: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString(), content: 'Dark mode feature' }, { created_at_iso: new Date(Date.now() - 4 * 24 * 60 * 60 * 1000).toISOString(), content: 'ChromaDB removal' }, { created_at_iso: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(), content: 'Memory optimization' }, { created_at_iso: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000).toISOString(), content: 'Token savings' }, ]; const ageAnalysis2 = analyzeMemoryAgeDistribution(recentMemories, { verbose: true }); console.log('\n🔍 Analysis Results:'); console.log(` Median Age: ${Math.round(ageAnalysis2.medianAge)} days`); console.log(` Average Age: ${Math.round(ageAnalysis2.avgAge)} days`); console.log(` Recent Count: ${ageAnalysis2.recentCount}/${ageAnalysis2.totalCount} (${Math.round(ageAnalysis2.recentCount/ageAnalysis2.totalCount*100)}%)`); console.log(` Is Stale: ${ageAnalysis2.isStale ? '✅ YES' : '❌ NO'}`); const gitContext2 = { recentCommits: [ { date: new Date(Date.now() - 1 * 24 * 60 * 60 * 1000).toISOString(), message: 'chore: bump version' }, ] }; const gitWeightResult2 = calculateAdaptiveGitWeight(gitContext2, ageAnalysis2, 1.8, { verbose: true }); console.log('\n⚙️ Adaptive Git Weight:'); console.log(` Configured Weight: 1.8x`); console.log(` Adaptive Weight: ${gitWeightResult2.weight.toFixed(1)}x`); console.log(` Adjusted: ${gitWeightResult2.adjusted ? '✅ YES' : '❌ NO'}`); console.log(` Reason: ${gitWeightResult2.reason}`); // Summary console.log('\n\n✅ Test Summary:'); console.log('─'.repeat(80)); console.log('Expected Behavior:'); console.log(' 1. Stale memories (median > 30d) should trigger auto-calibration'); console.log(' → Increase time decay weight, reduce tag relevance weight'); console.log(' 2. Recent commits + stale memories should reduce git weight'); console.log(' → Prevents old git memories from dominating'); console.log(' 3. Recent commits + recent memories should keep git weight'); console.log(' → Git context is relevant and aligned'); console.log('\nActual Results:'); console.log(` ✅ Scenario 1: ${ageAnalysis1.isStale ? 'Auto-calibrated weights' : 'ERROR: Should calibrate'}`); console.log(` ✅ Scenario 1 Git: ${gitWeightResult1.adjusted ? 'Reduced git weight from 1.8 to ' + gitWeightResult1.weight.toFixed(1) : 'ERROR: Should adjust'}`); console.log(` ✅ Scenario 2: ${!ageAnalysis2.isStale ? 'No calibration needed' : 'ERROR: Should not calibrate'}`); console.log(` ✅ Scenario 2 Git: ${!gitWeightResult2.adjusted ? 'Kept git weight at 1.8' : 'ERROR: Should not adjust'}`); console.log('\n🎉 Dynamic weight adjustment is working as expected!');

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