test-semantic-content-analyzer.js•14.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);