chonkie-adapter.ts
1 /** 2 * ChonkieAdapter Integration Test 3 * 4 * Tests the ChonkieJS adapter for text chunking. 5 * Works without ChonkieJS installed (uses native fallback). 6 * 7 * Run: npx ts-node chonkie-adapter.ts 8 */ 9 10 import { 11 ChonkieAdapter, 12 createChonkieAdapter, 13 hasChonkie, 14 Chunking 15 } from '../../../src/praisonai-ts/dist'; 16 17 async function main() { 18 console.log('=== ChonkieAdapter Integration Test ===\n'); 19 20 // Test 1: Check ChonkieJS availability 21 console.log('1. Checking ChonkieJS availability:'); 22 const chonkieAvailable = await hasChonkie(); 23 console.log(` ChonkieJS installed: ${chonkieAvailable ? '✅' : '❌ (using native fallback)'}`); 24 25 // Test 2: Create adapter with default config 26 console.log('\n2. Testing ChonkieAdapter creation:'); 27 const adapter = new ChonkieAdapter({ 28 strategy: 'token', 29 chunkSize: 100, 30 overlap: 20 31 }); 32 console.log(' Adapter created: ✅'); 33 console.log(' Info:', adapter.getInfo()); 34 35 // Test 3: Chunk text 36 console.log('\n3. Testing text chunking:'); 37 const sampleText = ` 38 PraisonAI is a high-performance, agentic AI framework designed with minimal client-side API. 39 It features extreme performance sensitivity, lazy loading everywhere, and optional dependencies only. 40 The framework supports clean separation between Core SDK, Wrapper/integrations, and Tools/plugins. 41 All features must have a relevant CLI integration and representation. 42 `.trim(); 43 44 const chunks = await adapter.chunk(sampleText); 45 console.log(` Input length: ${sampleText.length} characters`); 46 console.log(` Chunks created: ${chunks.length}`); 47 chunks.forEach((chunk, i) => { 48 console.log(` [${i}]: "${chunk.content.slice(0, 50)}..." (${chunk.content.length} chars)`); 49 }); 50 console.log(' Success: ✅'); 51 52 // Test 4: Different strategies 53 console.log('\n4. Testing different chunking strategies:'); 54 const strategies = ['size', 'sentence', 'paragraph', 'semantic'] as const; 55 56 for (const strategy of strategies) { 57 const strategyAdapter = createChonkieAdapter({ strategy, chunkSize: 80 }); 58 const strategyChunks = await strategyAdapter.chunk(sampleText); 59 console.log(` ${strategy}: ${strategyChunks.length} chunks`); 60 } 61 console.log(' Success: ✅'); 62 63 // Test 5: Native Chunking class 64 console.log('\n5. Testing native Chunking class:'); 65 const nativeChunker = new Chunking({ chunkSize: 100, overlap: 10, strategy: 'sentence' }); 66 const nativeChunks = nativeChunker.chunk(sampleText); 67 console.log(` Native chunks: ${nativeChunks.length}`); 68 console.log(' Success: ✅'); 69 70 // Test 6: Factory function 71 console.log('\n6. Testing createChunking() factory:'); 72 const factoryChunker = createChunking({ chunkSize: 200 }); 73 const factoryChunks = factoryChunker.chunk(sampleText); 74 console.log(` Factory chunks: ${factoryChunks.length}`); 75 console.log(' Success: ✅'); 76 77 // Test 7: Merge small chunks 78 console.log('\n7. Testing mergeSmallChunks:'); 79 const tinyChunker = new Chunking({ chunkSize: 20, overlap: 5 }); 80 const tinyChunks = tinyChunker.chunk(sampleText); 81 const mergedChunks = tinyChunker.mergeSmallChunks(tinyChunks, 50); 82 console.log(` Before merge: ${tinyChunks.length} chunks`); 83 console.log(` After merge: ${mergedChunks.length} chunks`); 84 console.log(' Success: ✅'); 85 86 // Test 8: Code chunking (if ChonkieJS available) 87 if (chonkieAvailable) { 88 console.log('\n8. Testing code chunking (ChonkieJS):'); 89 const codeAdapter = createChonkieAdapter({ strategy: 'code', language: 'typescript' }); 90 const codeText = ` 91 function hello() { 92 console.log('Hello'); 93 } 94 95 class MyClass { 96 constructor() { 97 this.value = 42; 98 } 99 100 getValue() { 101 return this.value; 102 } 103 } 104 `.trim(); 105 106 const codeChunks = await codeAdapter.chunk(codeText); 107 console.log(` Code chunks: ${codeChunks.length}`); 108 console.log(' Success: ✅'); 109 } else { 110 console.log('\n8. Code chunking: Skipped (ChonkieJS not installed)'); 111 } 112 113 // Test 9: Verify adapter info 114 console.log('\n9. Verifying adapter state:'); 115 const info = adapter.getInfo(); 116 console.log(` Strategy: ${info.strategy}`); 117 console.log(` Using ChonkieJS: ${info.usingChonkie}`); 118 console.log(` Chunk size: ${info.config.chunkSize}`); 119 console.log(' Success: ✅'); 120 121 console.log('\n=== ChonkieAdapter Tests Complete ==='); 122 } 123 124 main().catch(console.error);