Skip to main content
Glama
jit-workflow-photosynthesis.js12.8 kB
#!/usr/bin/env node /** * JIT Workflow Test with Photosynthesis Example * Tests the complete Just-In-Time workflow for token efficiency and correctness */ import { createSmartGuidanceTool } from '../src/tools/get-smart-guidance.js'; import { createContentWidgetAnalyzer } from '../src/tools/analyze-content-for-widgets.js'; import { createWidgetRequirementsTool } from '../src/tools/get-widget-requirements.js'; import { createLessonDataValidator } from '../src/tools/validate-lesson-data.js'; import { createComposerFormatter } from '../src/tools/format-for-composer.js'; // Simulate Claude's natural content creation response (Step 2) const claudeNaturalContent = ` Fotossíntese: O Processo Fundamental da Vida A fotossíntese é um dos processos biológicos mais importantes do planeta Terra. Durante este processo, as plantas capturam energia solar e a transformam em energia química, produzindo açúcares e liberando oxigênio para a atmosfera. O que é fotossíntese? A fotossíntese é o processo pelo qual organismos autotróficos, como plantas, algas e algumas bactérias, produzem seu próprio alimento utilizando luz solar, água e dióxido de carbono. Estruturas envolvidas: - Cloroplastos: organelas responsáveis pela fotossíntese - Clorofila: pigmento verde que captura a luz solar - Estômatos: estruturas que permitem troca gasosa Processo da fotossíntese: 1. Absorção da luz solar pelas folhas 2. Captação de CO2 do ar através dos estômatos 3. Absorção de água pelas raízes 4. Produção de glicose e liberação de oxigênio Qual é a importância da fotossíntese para os seres vivos? A fotossíntese é fundamental porque produz o oxigênio que respiramos e serve como base da cadeia alimentar de todos os ecossistemas. Termos importantes: Clorofila: Pigmento verde responsável por capturar a luz solar Estômatos: Estruturas nas folhas que permitem troca gasosa Glucose: Principal produto energético da fotossíntese ATP: Molécula que armazena energia nas células Em resumo, a fotossíntese é essencial para a manutenção da vida na Terra, fornecendo energia e oxigênio para todos os seres vivos. `; async function testJITWorkflow() { console.error('🧪 Testing JIT Workflow with Photosynthesis Example\n'); const startTime = Date.now(); let tokenCount = 0; // STEP 1: Smart Guidance (Lightweight) console.error('📋 STEP 1: Smart Guidance (Lightweight)'); const smartGuidance = createSmartGuidanceTool(); const guidanceResult = await smartGuidance.getSmartGuidance( "Crie uma aula de biologia sobre fotossíntese, incluindo introdução, descrição geral, função, estruturas envolvidas, requisitos, resultados, curiosidades, etc.", "Ciências", "6º ano" ); const guidanceTokens = estimateTokens(JSON.stringify(guidanceResult)); tokenCount += guidanceTokens; if (guidanceResult.success) { console.error(`✅ Smart guidance successful (${guidanceTokens} tokens)`); console.error(` Predicted widgets: ${guidanceResult.data.suggestedWidgets.length}`); console.error(` High confidence predictions: ${guidanceResult.data.suggestedWidgets.filter(w => w.confidence > 0.8).length}`); } else { console.error('❌ Smart guidance failed'); return; } // STEP 2: Content Analysis for Widget Mapping console.error('\n📋 STEP 2: Content Analysis for Widget Mapping'); const contentAnalyzer = createContentWidgetAnalyzer(); const analysisResult = await contentAnalyzer.analyzeContentForWidgets(claudeNaturalContent); const analysisTokens = estimateTokens(JSON.stringify(analysisResult)); tokenCount += analysisTokens; if (analysisResult.success) { console.error(`✅ Content analysis successful (${analysisTokens} tokens)`); console.error(` Content segments identified: ${analysisResult.data.contentStructure.segmentCount}`); console.error(` Widget mappings suggested: ${analysisResult.data.suggestedMapping.length}`); console.error(` Widget types selected: ${analysisResult.data.selectedWidgetTypes.map(w => w.type).join(', ')}`); console.error(` Overall confidence: ${analysisResult.debug.confidence}`); } else { console.error('❌ Content analysis failed'); return; } // STEP 3: Get Widget Requirements (Just-In-Time) console.error('\n📋 STEP 3: Get Widget Requirements (Just-In-Time)'); const widgetRequirements = createWidgetRequirementsTool(); const requirementsResult = await widgetRequirements.getWidgetRequirements(analysisResult.data.selectedWidgetTypes); const requirementsTokens = estimateTokens(JSON.stringify(requirementsResult)); tokenCount += requirementsTokens; if (requirementsResult.success) { console.error(`✅ Widget requirements successful (${requirementsTokens} tokens)`); console.error(` Specific requirements for: ${requirementsResult.data.selectedWidgetTypes.join(', ')}`); console.error(` Focused reminders: ${requirementsResult.data.focusedReminders.length}`); console.error(` Token efficiency: Only ${requirementsResult.data.selectedWidgetTypes.length}/9 widget types loaded`); } else { console.error('❌ Widget requirements failed'); return; } // STEP 4: Create Structured Lesson Data (Simulating Claude's structured response) console.error('\n📋 STEP 4: Create Structured Lesson Data'); const structuredLessonData = createStructuredLessonFromAnalysis(analysisResult.data, requirementsResult.data); const structuredTokens = estimateTokens(JSON.stringify(structuredLessonData)); tokenCount += structuredTokens; console.error(`✅ Structured lesson data created (${structuredTokens} tokens)`); console.error(` Widgets created: ${structuredLessonData.widgets.length}`); // STEP 5: Enhanced Validation console.error('\n📋 STEP 5: Enhanced Validation'); const validator = createLessonDataValidator(); const validationResult = await validator.validateLessonData(structuredLessonData); const validationTokens = estimateTokens(JSON.stringify(validationResult)); tokenCount += validationTokens; if (validationResult.success) { console.error(`✅ Validation successful (${validationTokens} tokens)`); console.error(` Validation summary: ${validationResult.data.validationSummary}`); console.error(` Auto-fixes applied: ${validationResult.debug.autoFixesApplied?.length || 0}`); } else { console.error('❌ Validation failed'); console.error(` Error: ${validationResult.error.message}`); return; } // STEP 6: Enhanced Composer Formatting console.error('\n📋 STEP 6: Enhanced Composer Formatting'); const formatter = createComposerFormatter(); const formatResult = await formatter.formatForComposer(validationResult.data.validatedLessonData); const formatTokens = estimateTokens(JSON.stringify(formatResult)); tokenCount += formatTokens; if (formatResult.success) { console.error(`✅ Formatting successful (${formatTokens} tokens)`); console.error(` Composer widgets: ${formatResult.data.composerJSON.structure.length}`); // Verify critical field names const structure = formatResult.data.composerJSON.structure; const quizWidget = structure.find(w => w.type === 'quiz-1'); const flashcardsWidget = structure.find(w => w.type === 'flashcards-1'); if (quizWidget && quizWidget.questions?.[0]?.answers) { console.error('✅ Quiz uses correct "answers" field (API compatible)'); } else if (quizWidget) { console.error('❌ Quiz field name issue detected'); } if (flashcardsWidget && flashcardsWidget.flashcards_items) { console.error('✅ Flashcards uses correct "flashcards_items" field'); } else if (flashcardsWidget) { console.error('❌ Flashcards field name issue detected'); } } else { console.error('❌ Formatting failed'); console.error(` Error: ${formatResult.error.message}`); return; } const totalTime = Date.now() - startTime; // RESULTS SUMMARY console.error('\n🎯 JIT Workflow Test Results:'); console.error(` Total processing time: ${totalTime}ms`); console.error(` Total estimated tokens: ${tokenCount}`); console.error(` Average tokens per step: ${Math.round(tokenCount / 6)}`); console.error('\n📊 Token Efficiency Analysis:'); console.error(` Smart guidance: ${guidanceTokens} tokens (vs ~8,400 comprehensive)`); console.error(` Content analysis: ${analysisTokens} tokens (intelligent mapping)`); console.error(` Widget requirements: ${requirementsTokens} tokens (only ${requirementsResult.data.selectedWidgetTypes.length}/9 types)`); console.error(` Token savings: ~${8400 - (guidanceTokens + requirementsTokens)} tokens saved`); console.error('\n🚀 Workflow Quality Assessment:'); console.error(' ✅ Natural content creation (no format constraints upfront)'); console.error(' ✅ Intelligent widget mapping based on actual content'); console.error(' ✅ Just-in-time API requirements (only needed widgets)'); console.error(' ✅ Auto-fix validation prevents workflow abandonment'); console.error(' ✅ API field names correctly formatted'); console.error(' ✅ Complete end-to-end workflow success'); console.error('\n🎉 JIT Workflow Test: SUCCESSFUL'); console.error(` Token efficiency: ${Math.round(((8400 - tokenCount) / 8400) * 100)}% reduction from comprehensive approach`); console.error(` Maintains educational quality while optimizing token usage`); } function estimateTokens(text) { // Rough estimation: 4 characters per token return Math.ceil(text.length / 4); } function createStructuredLessonFromAnalysis(analysisData, requirementsData) { // Simulate Claude creating structured lesson data based on analysis and requirements return { metadata: { topic: "Fotossíntese", subject: "Ciências", gradeLevel: "6º ano", duration: 50, learningObjectives: [ "Compreender o conceito de fotossíntese", "Identificar as estruturas envolvidas no processo", "Reconhecer a importância da fotossíntese para os seres vivos" ], bnccAlignment: "EF06CI05, EF06CI06" }, widgets: [ { type: "head-1", content: { category: "CIÊNCIAS", author_name: "Professor(a) Virtual", author_office: "Especialista em Biologia" } }, { type: "text-1", content: { text: "<h2>O que é Fotossíntese?</h2><p>A fotossíntese é um processo fundamental realizado pelas plantas e outros organismos para produzir seu próprio alimento. Durante este processo, as plantas capturam energia solar e a transformam em energia química, produzindo açúcares e liberando oxigênio.</p>" } }, { type: "image-1", content: { image: "https://images.unsplash.com/photo-1416879595882-3373a0480b5b?w=800", caption: "Folhas verdes realizando fotossíntese sob a luz solar" } }, { type: "list-1", content: { items: [ "Absorção da luz solar pelas folhas", "Captação de CO2 do ar através dos estômatos", "Absorção de água pelas raízes", "Produção de glicose e liberação de oxigênio" ], list_type: "numbered" } }, { type: "quiz-1", content: { questions: [ { question: "Qual é a importância da fotossíntese para os seres vivos?", options: [ "Produz oxigênio e serve como base da cadeia alimentar", "Apenas produz oxigênio", "Apenas serve como alimento para plantas", "Não tem importância significativa" ], correct_option: 0 } ], max_attempts: 3 } }, { type: "flashcards-1", content: { flashcards_items: [ { question: "Clorofila", answer: "Pigmento verde responsável por capturar a luz solar" }, { question: "Estômatos", answer: "Estruturas nas folhas que permitem troca gasosa" }, { question: "Glucose", answer: "Principal produto energético da fotossíntese" } ] } } ], assessmentStrategy: "Quiz formativo e flashcards para reforçar conceitos principais", widgetSelectionSummary: "Combinação balanceada de texto explicativo, imagem ilustrativa, lista procedural, quiz avaliativo e flashcards para memorização" }; } testJITWorkflow().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