Skip to main content
Glama
test-enhanced-object-extraction.js7.04 kB
#!/usr/bin/env node /** * Test Enhanced Object Content Extraction v2.0.0 * Validates fix for [object Object] serialization issues * Tests with exact data structure from Animal Kingdoms failure case */ import { ContentWidgetAnalyzer } from '../../src/tools/analyze-content-for-widgets.js'; // Exact structure from Animal Kingdoms test failure const animalKingdomsFailureCase = { subject: "Ciências", duration: "35 minutos", homework: { type: "project", content: "Projeto investigativo sobre animal brasileiro ameaçado com roteiro detalhado de apresentação" }, activities: { practicalActivities: [ "Classificação no cotidiano - observar e classificar 10 animais", "Detetive da natureza - pesquisa sobre animal específico", "Comparação de características - tabela comparativa" ] }, gradeLevel: "7º ano", vocabulary: { type: "terminology", terms: 10, definitions: "Definições completas de termos técnicos essenciais como reino, vertebrados, invertebrados, heterotrófico, multicelular, etc." }, introduction: "Introdução completa aos reinos animais explicando sistema de classificação, objetivos da aula e contextualização sobre diversidade de espécies", mainSections: [ { type: "explanatory", title: "Introdução à Classificação dos Seres Vivos", content: "Explicação detalhada sobre como e por que classificamos seres vivos, analogia com biblioteca, apresentação dos 5 reinos principais" }, { type: "explanatory", title: "Características Gerais do Reino Animal", content: "5 características fundamentais dos animais com explicações detalhadas e exemplo prático comparando cachorro e árvore" }, { type: "explanatory", title: "Grandes Grupos do Reino Animal", content: "Divisão detalhada entre vertebrados e invertebrados, características de cada grupo de vertebrados (peixes, anfíbios, répteis, aves, mamíferos) e principais grupos de invertebrados com exemplos específicos" } ], contentLength: "extensive", complexityLevel: "medium", engagementLevel: "high" }; async function testEnhancedObjectExtraction() { console.log('🧪 Testing Enhanced Object Content Extraction v2.0.0'); console.log('📋 Validates fix for [object Object] serialization issues'); console.log(''); const analyzer = new ContentWidgetAnalyzer(); try { console.log('📊 Input structure analysis:'); console.log(` Root keys: ${Object.keys(animalKingdomsFailureCase).join(', ')}`); console.log(` Main sections: ${animalKingdomsFailureCase.mainSections.length}`); console.log(` Nested objects: homework, activities, vocabulary`); console.log(` Complex content: ${JSON.stringify(animalKingdomsFailureCase).length} chars`); console.log(''); // Test the enhanced extraction method directly console.log('🔍 Testing enhanced extractTextFromObject method:'); const extractedText = analyzer.extractTextFromObject(animalKingdomsFailureCase, 0, 'test'); console.log(` Extracted text length: ${extractedText.length} characters`); console.log(` Contains [object Object]: ${extractedText.includes('[object Object]') ? '❌ YES' : '✅ NO'}`); console.log(''); // Check for educational content preservation const hasIntroduction = extractedText.includes('Introdução completa aos reinos animais'); const hasMainContent = extractedText.includes('Explicação detalhada sobre como e por que classificamos'); const hasHomework = extractedText.includes('Projeto investigativo sobre animal brasileiro'); const hasActivities = extractedText.includes('Classificação no cotidiano'); const hasVocabulary = extractedText.includes('reino, vertebrados, invertebrados'); console.log('📚 Educational content preservation:'); console.log(` Introduction: ${hasIntroduction ? '✅' : '❌'}`); console.log(` Main content: ${hasMainContent ? '✅' : '❌'}`); console.log(` Homework: ${hasHomework ? '✅' : '❌'}`); console.log(` Activities: ${hasActivities ? '✅' : '❌'}`); console.log(` Vocabulary: ${hasVocabulary ? '✅' : '❌'}`); console.log(''); // Test full content analysis console.log('🔬 Testing full content analysis:'); const result = await analyzer.analyzeContent({ claudeContent: animalKingdomsFailureCase }); console.log(` Analysis success: ${result.success ? '✅' : '❌'}`); console.log(` Content length: ${result.debug?.contentLength || 0} characters`); console.log(` Segments analyzed: ${result.debug?.segmentsAnalyzed || 0}`); console.log(` Widget types: ${result.data?.selectedWidgetTypes?.length || 0}`); // Check for the specific failure pattern const originalContent = result.data?.contentStructure?.originalContent || ''; const hasObjectSerialization = originalContent.includes('[object Object]'); console.log(''); console.log('🎯 Failure pattern analysis:'); console.log(` Original content length: ${originalContent.length} characters`); console.log(` Contains [object Object]: ${hasObjectSerialization ? '❌ FAILED' : '✅ FIXED'}`); console.log(` Content preservation: ${Math.round((originalContent.length / extractedText.length) * 100)}%`); // Success criteria const noObjectSerialization = !hasObjectSerialization; const goodContentLength = originalContent.length > 1000; const educationalContentPreserved = hasIntroduction && hasMainContent && hasHomework; console.log(''); console.log('✅ Success Criteria:'); console.log(` No [object Object] serialization: ${noObjectSerialization ? '✅' : '❌'}`); console.log(` Good content length (>1000 chars): ${goodContentLength ? '✅' : '❌'}`); console.log(` Educational content preserved: ${educationalContentPreserved ? '✅' : '❌'}`); if (noObjectSerialization && goodContentLength && educationalContentPreserved) { console.log(''); console.log('🎉 SUCCESS: Enhanced object extraction fixes [object Object] serialization issues!'); console.log(' ✅ Object serialization issues resolved'); console.log(' ✅ Educational content properly preserved'); console.log(' ✅ Complex nested structures handled correctly'); } else { console.log(''); console.log('⚠️ PARTIAL SUCCESS: Some issues remain'); if (hasObjectSerialization) console.log(' ❌ Object serialization still occurring'); if (!goodContentLength) console.log(' ❌ Content length still too low'); if (!educationalContentPreserved) console.log(' ❌ Educational content not fully preserved'); } } catch (error) { console.error(''); console.error('❌ Test failed with error:', error.message); console.error('Stack:', error.stack); } } // Run the test testEnhancedObjectExtraction().catch(console.error);

Latest Blog Posts

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/rkm097git/euconquisto-composer-mcp-poc'

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