Skip to main content
Glama
test-image-and-optimization.js7.79 kB
/** * Test image memory features and data optimization */ import { createImageModality, createImageModalityFromUrl, validateImageModality, areImagesDuplicate, deduplicateImageModalities } from './src/utils/image-processor.js'; import { normalizeTimestamps, removeAttachmentsRedundancy, deduplicateKeywords, optimizeMemory, calculateSpaceSavings } from './src/utils/data-optimizer.js'; console.log('🧪 Testing Image Memory and Data Optimization...\n'); // Test 1: Create image modality console.log('Test 1: Create Image Modality'); try { const imageModality = createImageModality({ uri: 'https://example.com/image.jpg', tags: ['cat', 'outdoor'], description: 'A cat sitting outdoors', embedding: [0.1, 0.2, 0.3, 0.4, 0.5], metadata: { width: 800, height: 600 } }); console.log('✓ Image modality created:'); console.log(` Type: ${imageModality.type}`); console.log(` URI: ${imageModality.uri}`); console.log(` Tags: ${imageModality.features.tags.join(', ')}`); console.log(` Embedding dimensions: ${imageModality.features.embedding.length}`); } catch (error) { console.error('✗ Failed:', error.message); } // Test 2: Create simple image from URL console.log('\nTest 2: Create Simple Image from URL'); try { const simpleImage = createImageModalityFromUrl( 'https://example.com/photo.png', ['photo', 'landscape'] ); console.log('✓ Simple image created:'); console.log(` URI: ${simpleImage.uri}`); console.log(` Tags: ${simpleImage.features?.tags?.join(', ') || 'none'}`); } catch (error) { console.error('✗ Failed:', error.message); } // Test 3: Validate image modality console.log('\nTest 3: Validate Image Modality'); try { const valid = createImageModality({ uri: 'https://example.com/test.jpg', embedding: [1, 2, 3] }); const invalid = { type: 'image', // missing uri features: { embedding: 'invalid' // should be array } }; const validResult = validateImageModality(valid); const invalidResult = validateImageModality(invalid); console.log(`✓ Valid modality: ${validResult.valid}`); console.log(`✓ Invalid modality: ${invalidResult.valid}`); console.log(` Errors: ${invalidResult.errors.join(', ')}`); } catch (error) { console.error('✗ Failed:', error.message); } // Test 4: Duplicate detection console.log('\nTest 4: Duplicate Image Detection'); try { const img1 = createImageModalityFromUrl('https://example.com/same.jpg'); const img2 = createImageModalityFromUrl('https://example.com/same.jpg'); const img3 = createImageModalityFromUrl('https://example.com/different.jpg'); const isDuplicate12 = areImagesDuplicate(img1, img2); const isDuplicate13 = areImagesDuplicate(img1, img3); console.log(`✓ Same URI detection: ${isDuplicate12}`); console.log(`✓ Different URI detection: ${isDuplicate13 === false}`); } catch (error) { console.error('✗ Failed:', error.message); } // Test 5: Deduplication console.log('\nTest 5: Image Deduplication'); try { const modalities = [ createImageModalityFromUrl('https://example.com/a.jpg'), createImageModalityFromUrl('https://example.com/b.jpg'), createImageModalityFromUrl('https://example.com/a.jpg'), // duplicate { type: 'audio', uri: 'https://example.com/sound.mp3' }, createImageModalityFromUrl('https://example.com/c.jpg') ]; const deduplicated = deduplicateImageModalities(modalities); console.log(`✓ Original count: ${modalities.length}`); console.log(`✓ After deduplication: ${deduplicated.length}`); console.log(`✓ Removed ${modalities.length - deduplicated.length} duplicate(s)`); } catch (error) { console.error('✗ Failed:', error.message); } // Test 6: Normalize timestamps console.log('\nTest 6: Normalize Timestamps'); try { const memory = { text: 'Test memory', time_stamp: new Date('2024-01-01'), timestamp: '2024-01-02', timeStamp: '2024-01-03' }; const normalized = normalizeTimestamps(memory); console.log('✓ Original fields:', Object.keys(memory).filter(k => k.includes('time')).join(', ')); console.log('✓ Normalized fields:', Object.keys(normalized).filter(k => k.includes('time')).join(', ')); console.log('✓ Unified timestamp:', normalized.timestamp); } catch (error) { console.error('✗ Failed:', error.message); } // Test 7: Remove attachments redundancy console.log('\nTest 7: Remove Attachments Redundancy'); try { const memory = { text: 'Test memory', modalities: [{ type: 'image', uri: 'test.jpg' }], attachments: [{ type: 'image', uri: 'test.jpg' }] // duplicate }; const optimized = removeAttachmentsRedundancy(memory); console.log('✓ Original fields:', Object.keys(memory).join(', ')); console.log('✓ Optimized fields:', Object.keys(optimized).join(', ')); console.log('✓ Has modalities:', !!optimized.modalities); console.log('✓ Has attachments:', !!optimized.attachments); } catch (error) { console.error('✗ Failed:', error.message); } // Test 8: Deduplicate keywords console.log('\nTest 8: Deduplicate Keywords'); try { const keywords = [ { word: 'cat', weight: 2.0 }, { word: 'Cat', weight: 1.5 }, // duplicate (case-insensitive) { word: 'dog', weight: 1.0 }, { word: 'cat', weight: 3.0 } // duplicate ]; const deduplicated = deduplicateKeywords(keywords); console.log(`✓ Original count: ${keywords.length}`); console.log(`✓ After deduplication: ${deduplicated.length}`); console.log('✓ Keywords:', deduplicated.map(k => `${k.word}(${k.weight})`).join(', ')); } catch (error) { console.error('✗ Failed:', error.message); } // Test 9: Full memory optimization console.log('\nTest 9: Full Memory Optimization'); try { const memory = { text: 'Test memory', time_stamp: new Date('2024-01-01'), timestamp: '2024-01-02', keywords: [ { word: 'test', weight: 2 }, { word: 'Test', weight: 1 } ], modalities: [ createImageModalityFromUrl('https://example.com/img.jpg'), createImageModalityFromUrl('https://example.com/img.jpg') // duplicate ], attachments: [ createImageModalityFromUrl('https://example.com/img.jpg') ] }; const optimized = optimizeMemory(memory); const savings = calculateSpaceSavings(memory, optimized); console.log('✓ Memory optimized successfully'); console.log(`✓ Original size: ${savings.originalSize} bytes`); console.log(`✓ Optimized size: ${savings.optimizedSize} bytes`); console.log(`✓ Saved: ${savings.saved} bytes (${savings.savedPercent}%)`); console.log('✓ Optimized fields:', Object.keys(optimized).join(', ')); } catch (error) { console.error('✗ Failed:', error.message); } console.log('\n✅ Image Memory and Data Optimization tests complete!\n'); console.log('Summary:'); console.log('- Image modality creation and validation: ✓'); console.log('- Duplicate image detection: ✓'); console.log('- Data format standardization: ✓'); console.log('- Timestamp normalization: ✓'); console.log('- Keyword deduplication: ✓'); console.log('- Space optimization: ✓'); console.log('\nNew Features:'); console.log('1. createImageModality() - Create image modalities with embeddings/tags'); console.log('2. deduplicateImageModalities() - Remove duplicate images'); console.log('3. optimizeMemory() - One-call full memory optimization'); console.log('4. Unified timestamp field (timestamp instead of time_stamp/timeStamp)'); console.log('5. No more attachments redundancy (modalities only)');

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/win10ogod/memory-mcp-server'

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