/** * Test different vector thresholds to find optimal balance */ import { TypeInferenceSystem } from '../dist/query/typeInference.js'; async function testThresholds() { console.log('šŸŽÆ Vector Threshold Tuning Test\n'); console.log('='.repeat(60)); // Test queries: typos and edge cases const testCases = [ { query: 'Find pysicians', expected: 'person', description: 'Typo: physician' }, { query: 'Find documnets', expected: 'document', description: 'Typo: documents' }, { query: 'Find organiztions', expected: 'organization', description: 'Typo: organizations' }, { query: 'Find kompanies', expected: 'organization', description: 'Severe typo: companies' }, { query: 'Find enginners', expected: 'person', description: 'Typo: engineers' }, { query: 'Find xyzabc', expected: null, description: 'Nonsense word (should fail)' } ]; // Test with different thresholds const thresholds = [0.35, 0.30, 0.25, 0.20]; for (const threshold of thresholds) { console.log(`\nšŸ“Š Testing with vectorThreshold = ${threshold}`); console.log('-'.repeat(60)); const system = new TypeInferenceSystem({ enableVectorFallback: true, fallbackConfidenceThreshold: 0.7, vectorThreshold: threshold, debug: false }); let successes = 0; let falsePositives = 0; for (const testCase of testCases) { const results = await system.inferTypesAsync(testCase.query); const matched = results.length > 0; const correctType = results.length > 0 && results[0].type === testCase.expected; if (testCase.expected === null) { // Should NOT match if (!matched) { successes++; console.log(` āœ… "${testCase.query}" correctly returned no matches`); } else { falsePositives++; console.log(` āŒ "${testCase.query}" false positive: ${results[0].type} (${(results[0].confidence * 100).toFixed(1)}%)`); } } else { // Should match expected type if (correctType) { successes++; console.log(` āœ… "${testCase.query}" → ${results[0].type} (${(results[0].confidence * 100).toFixed(1)}%)`); } else if (matched) { console.log(` āš ļø "${testCase.query}" → ${results[0].type} (expected ${testCase.expected})`); } else { console.log(` āŒ "${testCase.query}" no match (expected ${testCase.expected})`); } } } const accuracy = (successes / testCases.length) * 100; console.log(`\n Accuracy: ${successes}/${testCases.length} (${accuracy.toFixed(0)}%), False positives: ${falsePositives}`); } console.log('\n' + '='.repeat(60)); console.log('āœ… Threshold tuning complete!'); console.log('='.repeat(60)); } testThresholds().catch(err => { console.error('āŒ Error:', err.message); process.exit(1); });