import { MetadataProcessor } from './chunking/processor';
import { VectorStore } from './vector/store';
import { MockEmbedding } from './vector/embedding';
async function testVectorIntegration() {
try {
console.log('Testing complete vector integration...');
// Initialize components
const embeddingModel = new MockEmbedding();
const vectorStore = new VectorStore({
host: 'localhost',
port: 5433,
database: 'sfdxrag',
user: 'postgres',
password: 'postgres'
}, embeddingModel);
const processor = new MetadataProcessor();
// Use real CallManagementService data
const apexMetadata = {
fullName: "CallManagementService",
Body: `public class CallManagementService {
@AuraEnabled
public static CallInitiationResponse initiateDirectCall(String phoneNumber) {
if (String.isBlank(phoneNumber)) {
return null;
}
List<aidialer__AI_Dialer_Setting__mdt> settings = [
SELECT aidialer__Value__c
FROM aidialer__AI_Dialer_Setting__mdt
WHERE DeveloperName = 'Default_Assistant_ID'
];
return new CallInitiationResponse();
}
}`,
createdDate: "2025-08-27T19:35:30.000+0000"
};
// 1. Process metadata into chunks
console.log('\n1. Processing metadata into chunks...');
const chunks = await processor.processMetadata(
apexMetadata,
'ApexClass',
'test_org_123'
);
console.log(`✓ Generated ${chunks.length} chunks`);
// 2. Store chunks in vector database
console.log('\n2. Storing chunks in vector database...');
await vectorStore.storeBatch(chunks);
console.log('✓ Stored all chunks');
// 3. Test vector search
console.log('\n3. Testing vector search...');
const vectorResults = await vectorStore.vectorSearch('phone number validation', 3);
console.log(`✓ Vector search returned ${vectorResults.length} results`);
vectorResults.forEach((result, i) => {
console.log(` ${i+1}. ${result.name} (similarity: ${result.similarity?.toFixed(3)})`);
});
// 4. Test keyword search
console.log('\n4. Testing keyword search...');
const keywordResults = await vectorStore.keywordSearch('aidialer setting', 3);
console.log(`✓ Keyword search returned ${keywordResults.length} results`);
keywordResults.forEach((result, i) => {
console.log(` ${i+1}. ${result.name} (rank: ${result.rank?.toFixed(3)})`);
});
// 5. Test symbol search
console.log('\n5. Testing symbol search...');
const symbolResults = await vectorStore.symbolSearch('aidialer__AI_Dialer_Setting__mdt', 3);
console.log(`✓ Symbol search returned ${symbolResults.length} results`);
symbolResults.forEach((result, i) => {
console.log(` ${i+1}. ${result.name} - symbols: ${result.symbols.slice(0, 3).join(', ')}`);
});
// 6. Test hybrid search
console.log('\n6. Testing hybrid search...');
const hybridResults = await vectorStore.hybridSearch('default assistant ID settings', 3);
console.log(`✓ Hybrid search returned ${hybridResults.length} results`);
hybridResults.forEach((result, i) => {
console.log(` ${i+1}. ${result.name} (combined rank: ${result.rank?.toFixed(3)})`);
});
await vectorStore.close();
console.log('\n✅ Complete vector integration test successful!');
} catch (error) {
console.error('❌ Vector integration test failed:', error);
}
}
testVectorIntegration();