Skip to main content
Glama
test-semantic-content-analyzer.js14.9 kB
#!/usr/bin/env node /** * Test Semantic Content Analyzer v1.0.0 * Validates semantic analysis and LLM-based content understanding * Tests with Animal Kingdoms failure case and various content types */ import { SemanticContentAnalyzer } from '../../src/tools/semantic-content-analyzer.js'; // Test data: Animal Kingdoms failure case (structured object) const animalKingdomsStructuredContent = { 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" }; // Test data: Plain text content const plainTextContent = ` Introdução aos Reinos Animais Você já parou para pensar em quantas espécies de animais existem no nosso planeta? Os cientistas estimam que existam mais de 8 milhões de espécies diferentes de seres vivos na Terra! Características Gerais do Reino Animal: - São multicelulares: formados por muitas células - São heterotróficos: não produzem seu próprio alimento - Possuem capacidade de movimento - Respiram oxigênio Vocabulário Importante: - Reino: Grande grupo de classificação - Vertebrados: Animais com coluna vertebral - Invertebrados: Animais sem coluna vertebral Questão 1: Qual a principal diferença entre vertebrados e invertebrados? a) O tamanho b) A presença de coluna vertebral c) O tipo de alimentação d) O ambiente onde vivem Resposta: b) A presença de coluna vertebral `; async function testSemanticContentAnalyzer() { console.log('🧪 Testing Semantic Content Analyzer v1.0.0'); console.log('🔍 Validates semantic analysis and LLM-based content understanding'); console.log(''); const analyzer = new SemanticContentAnalyzer(); let testsPassed = 0; let totalTests = 0; // Test 1: Structured Object Content Extraction console.log('📊 Test 1: Structured Object Content Extraction'); totalTests++; try { const result = await analyzer.analyzeContentSemantics({ content: animalKingdomsStructuredContent, subject: "Ciências", gradeLevel: "7º ano" }); const contentLength = result.data?.contentAnalysis?.contentLength || 0; const extractedContent = result.data?.contentAnalysis?.extractedContent || ''; console.log(` Extracted content length: ${contentLength} characters`); console.log(` Contains [object Object]: ${extractedContent.includes('[object Object]') ? '❌ YES' : '✅ NO'}`); console.log(` Contains educational content: ${extractedContent.includes('reino') ? '✅ YES' : '❌ NO'}`); console.log(` Analysis success: ${result.success ? '✅' : '❌'}`); if (result.success && contentLength > 1000 && !extractedContent.includes('[object Object]')) { console.log(' ✅ Structured object extraction successful'); testsPassed++; } else { console.log(' ❌ Structured object extraction failed'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 2: Plain Text Content Analysis console.log('📝 Test 2: Plain Text Content Analysis'); totalTests++; try { const result = await analyzer.analyzeContentSemantics({ content: plainTextContent, subject: "Ciências", gradeLevel: "7º ano" }); const contentTypes = result.data?.contentAnalysis?.semanticAnalysis?.contentTypes || []; const widgetRecommendations = result.data?.widgetRecommendations || []; console.log(` Content types detected: ${contentTypes.join(', ')}`); console.log(` Widget recommendations: ${widgetRecommendations.length}`); console.log(` Analysis success: ${result.success ? '✅' : '❌'}`); const hasExpectedTypes = contentTypes.includes('introduction') && contentTypes.includes('explanation') && contentTypes.includes('vocabulary') && contentTypes.includes('assessment'); if (result.success && hasExpectedTypes && widgetRecommendations.length > 0) { console.log(' ✅ Plain text analysis successful'); testsPassed++; } else { console.log(' ❌ Plain text analysis incomplete'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 3: Semantic Content Type Detection console.log('🔍 Test 3: Semantic Content Type Detection'); totalTests++; try { const testContents = [ { content: "Introdução aos reinos animais. Hoje vamos aprender sobre classificação.", expectedTypes: ['introduction'] }, { content: "O processo de fotossíntese ocorre nas folhas. Vamos explicar como funciona.", expectedTypes: ['explanation'] }, { content: "Vocabulário: Reino significa grande grupo. Vertebrados são animais com coluna.", expectedTypes: ['vocabulary'] }, { content: "Questão 1: Qual a diferença entre vertebrados e invertebrados?", expectedTypes: ['assessment'] }, { content: "Primeiro passo: observe. Segundo passo: classifique. Terceiro passo: compare.", expectedTypes: ['procedure'] } ]; let detectionSuccess = 0; for (const test of testContents) { const result = await analyzer.analyzeContentSemantics({ content: test.content, subject: "Ciências", gradeLevel: "7º ano" }); const detectedTypes = result.data?.contentAnalysis?.semanticAnalysis?.contentTypes || []; const hasExpectedType = test.expectedTypes.some(type => detectedTypes.includes(type)); if (hasExpectedType) { detectionSuccess++; } } console.log(` Content type detection: ${detectionSuccess}/${testContents.length} (${Math.round(detectionSuccess/testContents.length * 100)}%)`); if (detectionSuccess >= testContents.length * 0.8) { console.log(' ✅ Semantic content type detection successful'); testsPassed++; } else { console.log(' ❌ Semantic content type detection needs improvement'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 4: Pedagogical Context Integration console.log('🎓 Test 4: Pedagogical Context Integration'); totalTests++; try { const result = await analyzer.analyzeContentSemantics({ content: animalKingdomsStructuredContent, subject: "Ciências", gradeLevel: "7º ano" }); const educationalContext = result.data?.contentAnalysis?.educationalContext; const pedagogicalGuidance = result.data?.pedagogicalGuidance; const widgetRecommendations = result.data?.widgetRecommendations || []; console.log(` Educational context: ${educationalContext ? '✅' : '❌'}`); console.log(` Pedagogical guidance: ${pedagogicalGuidance ? '✅' : '❌'}`); console.log(` Widget recommendations with pedagogy: ${widgetRecommendations.length}`); console.log(` Grade level consideration: ${pedagogicalGuidance?.gradeLevel === '7º ano' ? '✅' : '❌'}`); console.log(` Subject consideration: ${pedagogicalGuidance?.subject === 'Ciências' ? '✅' : '❌'}`); const hasPedagogicalContext = educationalContext && pedagogicalGuidance && pedagogicalGuidance.gradeLevel === '7º ano' && pedagogicalGuidance.subject === 'Ciências'; if (hasPedagogicalContext && widgetRecommendations.length > 0) { console.log(' ✅ Pedagogical context integration successful'); testsPassed++; } else { console.log(' ❌ Pedagogical context integration incomplete'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 5: Widget Recommendation Quality console.log('🎯 Test 5: Widget Recommendation Quality'); totalTests++; try { const result = await analyzer.analyzeContentSemantics({ content: animalKingdomsStructuredContent, subject: "Ciências", gradeLevel: "7º ano" }); const widgetRecommendations = result.data?.widgetRecommendations || []; const hasHeader = widgetRecommendations.some(w => w.widgetType === 'head-1'); const hasText = widgetRecommendations.some(w => w.widgetType === 'text-1'); const hasAssessment = widgetRecommendations.some(w => w.widgetType === 'quiz-1'); const hasVocabulary = widgetRecommendations.some(w => w.widgetType === 'flashcards-1'); console.log(` Widget recommendations: ${widgetRecommendations.length}`); console.log(` Has header widget: ${hasHeader ? '✅' : '❌'}`); console.log(` Has text widget: ${hasText ? '✅' : '❌'}`); console.log(` Has assessment widget: ${hasAssessment ? '✅' : '❌'}`); console.log(` Has vocabulary widget: ${hasVocabulary ? '✅' : '❌'}`); const qualityScore = [hasHeader, hasText, hasAssessment, hasVocabulary].filter(Boolean).length; if (qualityScore >= 3) { console.log(' ✅ Widget recommendation quality good'); testsPassed++; } else { console.log(' ❌ Widget recommendation quality needs improvement'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 6: Cognitive Load Assessment console.log('🧠 Test 6: Cognitive Load Assessment'); totalTests++; try { const testCases = [ { content: "Lista: 1. Vertebrados 2. Invertebrados", gradeLevel: "6º ano", expectedLoad: "low" }, { content: "Análise comparativa dos processos metabólicos em diferentes grupos animais, considerando múltiplos fatores ambientais e evolutivos", gradeLevel: "1º médio", expectedLoad: "high" }, { content: "Explique as características principais dos mamíferos com exemplos práticos", gradeLevel: "7º ano", expectedLoad: "medium" } ]; let cognitiveAssessmentSuccess = 0; for (const test of testCases) { const result = await analyzer.analyzeContentSemantics({ content: test.content, subject: "Ciências", gradeLevel: test.gradeLevel }); const cognitiveLoad = result.data?.contentAnalysis?.semanticAnalysis?.cognitiveLoad; if (cognitiveLoad === test.expectedLoad) { cognitiveAssessmentSuccess++; } } console.log(` Cognitive load assessment: ${cognitiveAssessmentSuccess}/${testCases.length} (${Math.round(cognitiveAssessmentSuccess/testCases.length * 100)}%)`); if (cognitiveAssessmentSuccess >= testCases.length * 0.7) { console.log(' ✅ Cognitive load assessment successful'); testsPassed++; } else { console.log(' ❌ Cognitive load assessment needs improvement'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Test 7: Error Handling and Fallback console.log('⚠️ Test 7: Error Handling and Fallback'); totalTests++; try { const invalidInputs = [ { content: null }, { content: undefined }, { content: "" }, { content: 123 } ]; let errorHandlingSuccess = 0; for (const input of invalidInputs) { const result = await analyzer.analyzeContentSemantics(input); if (!result.success && result.error) { errorHandlingSuccess++; } } console.log(` Error handling: ${errorHandlingSuccess}/${invalidInputs.length} (${Math.round(errorHandlingSuccess/invalidInputs.length * 100)}%)`); if (errorHandlingSuccess >= invalidInputs.length * 0.75) { console.log(' ✅ Error handling and fallback successful'); testsPassed++; } else { console.log(' ❌ Error handling needs improvement'); } } catch (error) { console.log(` ❌ Error: ${error.message}`); } console.log(''); // Final Results console.log('📊 Final Test Results'); console.log(` Tests passed: ${testsPassed}/${totalTests} (${Math.round(testsPassed/totalTests * 100)}%)`); console.log(''); if (testsPassed >= totalTests * 0.85) { console.log('🎉 SUCCESS: Semantic Content Analyzer is excellent!'); console.log(' ✅ Structured object content extraction works perfectly'); console.log(' ✅ Semantic content type detection is accurate'); console.log(' ✅ Pedagogical context integration is complete'); console.log(' ✅ Widget recommendations are high quality'); console.log(' ✅ Cognitive load assessment is working'); console.log(' ✅ Error handling is robust'); console.log(' ✅ Ready for JIT workflow integration'); } else { console.log('⚠️ PARTIAL SUCCESS: Some improvements needed'); console.log(` ${testsPassed} tests passed, ${totalTests - testsPassed} tests failed`); console.log(' Review failed tests for improvement opportunities'); } return { testsPassed, totalTests, success: testsPassed >= totalTests * 0.85 }; } // Run the test testSemanticContentAnalyzer().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