803 lines
32 KiB
JavaScript
803 lines
32 KiB
JavaScript
#!/usr/bin/env node
|
||
|
||
/**
|
||
* Realistic Psycho-Symbolic Reasoning Scenarios Test
|
||
* Tests the system with complex, real-world psychological and symbolic reasoning scenarios
|
||
*/
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// Test scenarios based on real psychological research and applications
|
||
const REALISTIC_SCENARIOS = {
|
||
therapeuticCounseling: {
|
||
name: 'Therapeutic Counseling Session',
|
||
description: 'Simulate a therapy session with complex emotional states and psychological patterns',
|
||
clientProfile: {
|
||
demographics: { age: 32, occupation: 'software_engineer', relationship_status: 'married' },
|
||
psychologicalHistory: ['anxiety', 'perfectionism', 'work_stress'],
|
||
currentConcerns: ['burnout', 'work_life_balance', 'imposter_syndrome']
|
||
},
|
||
sessionTranscript: [
|
||
"I've been feeling completely overwhelmed at work lately. My manager keeps piling on more responsibilities, and I feel like I'm drowning.",
|
||
"I know I should say no, but I'm terrified that they'll think I'm not capable or that I'll lose my job. It's this constant fear that I'm not good enough.",
|
||
"My wife has been supportive, but I can see the stress is affecting our relationship too. I come home exhausted and irritable.",
|
||
"Sometimes I wonder if I even deserve this position. Everyone else seems so confident and competent, while I feel like I'm just pretending to know what I'm doing.",
|
||
"I used to love programming, but now even looking at code makes me anxious. I've been having trouble sleeping and I've lost my appetite."
|
||
],
|
||
expectedAnalysis: {
|
||
primaryEmotions: ['anxiety', 'fear', 'overwhelm', 'self_doubt'],
|
||
cognitivePatterns: ['catastrophizing', 'all_or_nothing_thinking', 'imposter_syndrome'],
|
||
behavioralIndicators: ['avoidance', 'perfectionism', 'people_pleasing'],
|
||
riskFactors: ['burnout', 'depression', 'relationship_strain'],
|
||
therapeuticGoals: ['stress_management', 'boundary_setting', 'self_compassion', 'cognitive_restructuring']
|
||
}
|
||
},
|
||
|
||
customerExperienceAnalysis: {
|
||
name: 'Customer Experience Journey Analysis',
|
||
description: 'Analyze customer feedback to identify emotional journey and experience patterns',
|
||
customerJourney: [
|
||
{
|
||
stage: 'discovery',
|
||
feedback: "I found this product through a friend's recommendation. I was excited to try something new that could help with my productivity.",
|
||
timestamp: '2024-01-15T10:00:00Z'
|
||
},
|
||
{
|
||
stage: 'purchase',
|
||
feedback: "The website was easy to navigate, but the checkout process took longer than expected. I had some concerns about the price.",
|
||
timestamp: '2024-01-15T10:30:00Z'
|
||
},
|
||
{
|
||
stage: 'onboarding',
|
||
feedback: "The setup instructions were confusing. I spent 2 hours trying to get it working and almost gave up. Very frustrating experience.",
|
||
timestamp: '2024-01-16T14:00:00Z'
|
||
},
|
||
{
|
||
stage: 'usage',
|
||
feedback: "Once I figured it out, the product actually works pretty well. It's helping me stay organized, though some features are still unclear.",
|
||
timestamp: '2024-01-20T09:15:00Z'
|
||
},
|
||
{
|
||
stage: 'support',
|
||
feedback: "I contacted customer support about a bug, and they were incredibly helpful and responsive. They fixed the issue within hours.",
|
||
timestamp: '2024-01-25T16:30:00Z'
|
||
},
|
||
{
|
||
stage: 'advocacy',
|
||
feedback: "Despite the initial setup challenges, I'm really happy with this product now. I've already recommended it to three colleagues.",
|
||
timestamp: '2024-02-01T11:00:00Z'
|
||
}
|
||
],
|
||
expectedAnalysis: {
|
||
emotionalJourney: {
|
||
discovery: { primary: 'excitement', secondary: 'optimism' },
|
||
purchase: { primary: 'mild_concern', secondary: 'anticipation' },
|
||
onboarding: { primary: 'frustration', secondary: 'disappointment' },
|
||
usage: { primary: 'satisfaction', secondary: 'mild_confusion' },
|
||
support: { primary: 'relief', secondary: 'appreciation' },
|
||
advocacy: { primary: 'loyalty', secondary: 'confidence' }
|
||
},
|
||
criticalMoments: ['onboarding_frustration', 'support_excellence'],
|
||
improvementAreas: ['onboarding_experience', 'documentation_clarity'],
|
||
strengthAreas: ['customer_support', 'product_functionality']
|
||
}
|
||
},
|
||
|
||
mentalHealthMonitoring: {
|
||
name: 'Mental Health Monitoring System',
|
||
description: 'Monitor mental health indicators through daily journal entries over time',
|
||
dailyEntries: [
|
||
{
|
||
date: '2024-09-01',
|
||
entry: "Started the new semester today. Feeling motivated and excited about my classes. Got to the gym this morning which always helps my mood.",
|
||
mood_self_report: 7,
|
||
sleep_hours: 8,
|
||
stress_level: 3
|
||
},
|
||
{
|
||
date: '2024-09-05',
|
||
entry: "Midterms are coming up and I'm starting to feel the pressure. Had trouble concentrating in class today. Coffee isn't helping as much.",
|
||
mood_self_report: 5,
|
||
sleep_hours: 6,
|
||
stress_level: 6
|
||
},
|
||
{
|
||
date: '2024-09-10',
|
||
entry: "Failed my calculus exam. I studied for weeks but my mind went blank during the test. Feeling like maybe I'm not cut out for this major.",
|
||
mood_self_report: 3,
|
||
sleep_hours: 4,
|
||
stress_level: 8
|
||
},
|
||
{
|
||
date: '2024-09-12',
|
||
entry: "Talked to my advisor about the failed exam. She was understanding and helped me make a study plan. Feeling a bit more hopeful.",
|
||
mood_self_report: 5,
|
||
sleep_hours: 6,
|
||
stress_level: 6
|
||
},
|
||
{
|
||
date: '2024-09-15',
|
||
entry: "Haven't been going to classes much this week. Keep telling myself I'll catch up but everything feels overwhelming. Friends have stopped texting.",
|
||
mood_self_report: 2,
|
||
sleep_hours: 10,
|
||
stress_level: 9
|
||
},
|
||
{
|
||
date: '2024-09-18',
|
||
entry: "Forced myself to go to campus counseling center today. The counselor was really nice and didn't judge me. Made another appointment for next week.",
|
||
mood_self_report: 4,
|
||
sleep_hours: 7,
|
||
stress_level: 7
|
||
}
|
||
],
|
||
expectedAnalysis: {
|
||
trendAnalysis: {
|
||
mood_trend: 'declining_with_intervention',
|
||
stress_trend: 'increasing_then_stabilizing',
|
||
sleep_pattern: 'irregular_with_extremes'
|
||
},
|
||
riskIndicators: ['academic_failure_reaction', 'social_withdrawal', 'avoidance_behaviors'],
|
||
protectiveFactors: ['seeking_help', 'advisor_support', 'counseling_engagement'],
|
||
interventionRecommendations: ['continued_counseling', 'academic_support', 'peer_connection', 'sleep_hygiene']
|
||
}
|
||
},
|
||
|
||
organizationalBehaviorAnalysis: {
|
||
name: 'Organizational Behavior and Team Dynamics',
|
||
description: 'Analyze team communication patterns and organizational culture',
|
||
teamCommunications: [
|
||
{
|
||
from: 'manager',
|
||
to: 'team',
|
||
message: "Great work on the Q3 deliverables everyone! We exceeded our targets by 15%. Let's keep this momentum going into Q4.",
|
||
sentiment_context: 'positive_reinforcement',
|
||
communication_style: 'encouraging'
|
||
},
|
||
{
|
||
from: 'employee_a',
|
||
to: 'manager',
|
||
message: "I've been struggling with the new software implementation. The training wasn't sufficient and I'm worried about missing deadlines.",
|
||
sentiment_context: 'concern_expression',
|
||
communication_style: 'direct_honest'
|
||
},
|
||
{
|
||
from: 'employee_b',
|
||
to: 'team',
|
||
message: "Does anyone else feel like we're being asked to do too much with too little time? I'm working 60+ hours a week and it's not sustainable.",
|
||
sentiment_context: 'frustration_sharing',
|
||
communication_style: 'vulnerable_questioning'
|
||
},
|
||
{
|
||
from: 'manager',
|
||
to: 'employee_a',
|
||
message: "I understand your concerns about the software. Let's schedule additional training sessions and adjust your project timeline accordingly.",
|
||
sentiment_context: 'supportive_response',
|
||
communication_style: 'problem_solving'
|
||
},
|
||
{
|
||
from: 'employee_c',
|
||
to: 'employee_b',
|
||
message: "I feel the same way about the workload. Maybe we should bring this up in the next team meeting? We need to advocate for ourselves.",
|
||
sentiment_context: 'solidarity_building',
|
||
communication_style: 'collaborative_supportive'
|
||
}
|
||
],
|
||
expectedAnalysis: {
|
||
communicationPatterns: {
|
||
managerStyle: 'supportive_but_may_miss_systemic_issues',
|
||
teamDynamics: 'peer_support_emerging',
|
||
conflictResolution: 'individual_focus_needed_systemic_view'
|
||
},
|
||
organizationalHealth: {
|
||
positiveIndicators: ['recognition_culture', 'open_communication', 'peer_support'],
|
||
concernAreas: ['workload_management', 'resource_allocation', 'burnout_risk'],
|
||
recommendations: ['workload_audit', 'team_meeting_discussions', 'resource_planning']
|
||
}
|
||
}
|
||
},
|
||
|
||
educationalPersonalization: {
|
||
name: 'Educational Personalization System',
|
||
description: 'Personalize learning experiences based on student psychological profiles and learning patterns',
|
||
studentProfile: {
|
||
id: 'student_12345',
|
||
demographics: { age: 16, grade: 11, subject_focus: 'stem' },
|
||
learningStyle: 'visual_kinesthetic',
|
||
psychologicalTraits: ['perfectionism', 'test_anxiety', 'high_achievement_motivation'],
|
||
academicHistory: {
|
||
strengths: ['mathematics', 'physics'],
|
||
challenges: ['public_speaking', 'timed_assessments'],
|
||
gpa: 3.7
|
||
}
|
||
},
|
||
learningInteractions: [
|
||
{
|
||
activity: 'calculus_problem_set',
|
||
performance: 0.95,
|
||
time_spent: 45,
|
||
help_requests: 0,
|
||
emotional_state: 'confident',
|
||
notes: 'Completed all problems correctly, worked methodically'
|
||
},
|
||
{
|
||
activity: 'chemistry_lab_report',
|
||
performance: 0.78,
|
||
time_spent: 120,
|
||
help_requests: 3,
|
||
emotional_state: 'uncertain',
|
||
notes: 'Struggled with analysis section, asked for clarification multiple times'
|
||
},
|
||
{
|
||
activity: 'physics_presentation',
|
||
performance: 0.65,
|
||
time_spent: 200,
|
||
help_requests: 5,
|
||
emotional_state: 'anxious',
|
||
notes: 'Excellent content but visible nervousness affected delivery'
|
||
},
|
||
{
|
||
activity: 'math_timed_quiz',
|
||
performance: 0.82,
|
||
time_spent: 30,
|
||
help_requests: 0,
|
||
emotional_state: 'stressed',
|
||
notes: 'Knew material but made careless errors due to time pressure'
|
||
}
|
||
],
|
||
expectedAnalysis: {
|
||
learningPatterns: {
|
||
optimal_conditions: ['untimed_assessments', 'written_over_oral', 'structured_problems'],
|
||
challenge_areas: ['performance_pressure', 'public_presentation', 'time_constraints'],
|
||
motivation_drivers: ['mastery_orientation', 'achievement_goals', 'self_improvement']
|
||
},
|
||
personalizedRecommendations: {
|
||
instructional_methods: ['visual_aids', 'step_by_step_guidance', 'practice_presentations'],
|
||
assessment_adaptations: ['extended_time', 'written_alternatives', 'portfolio_based'],
|
||
emotional_support: ['anxiety_management', 'confidence_building', 'growth_mindset']
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
class RealisticScenariosTest {
|
||
constructor() {
|
||
this.results = {
|
||
scenarios: [],
|
||
totalTests: 0,
|
||
passedTests: 0,
|
||
failedTests: 0,
|
||
errors: []
|
||
};
|
||
}
|
||
|
||
async runAllScenarios() {
|
||
console.log('🧠 Starting Realistic Psycho-Symbolic Reasoning Scenarios Test');
|
||
console.log('='.repeat(70));
|
||
|
||
for (const [scenarioKey, scenario] of Object.entries(REALISTIC_SCENARIOS)) {
|
||
console.log(`\n🎯 Testing Scenario: ${scenario.name}`);
|
||
console.log('-'.repeat(50));
|
||
|
||
try {
|
||
await this.testScenario(scenarioKey, scenario);
|
||
} catch (error) {
|
||
this.recordError(scenarioKey, error.message);
|
||
}
|
||
}
|
||
|
||
this.displayFinalResults();
|
||
}
|
||
|
||
async testScenario(scenarioKey, scenario) {
|
||
const scenarioResult = {
|
||
name: scenario.name,
|
||
key: scenarioKey,
|
||
tests: [],
|
||
passed: 0,
|
||
failed: 0
|
||
};
|
||
|
||
try {
|
||
switch (scenarioKey) {
|
||
case 'therapeuticCounseling':
|
||
await this.testTherapeuticCounseling(scenario, scenarioResult);
|
||
break;
|
||
case 'customerExperienceAnalysis':
|
||
await this.testCustomerExperienceAnalysis(scenario, scenarioResult);
|
||
break;
|
||
case 'mentalHealthMonitoring':
|
||
await this.testMentalHealthMonitoring(scenario, scenarioResult);
|
||
break;
|
||
case 'organizationalBehaviorAnalysis':
|
||
await this.testOrganizationalBehaviorAnalysis(scenario, scenarioResult);
|
||
break;
|
||
case 'educationalPersonalization':
|
||
await this.testEducationalPersonalization(scenario, scenarioResult);
|
||
break;
|
||
default:
|
||
throw new Error(`Unknown scenario: ${scenarioKey}`);
|
||
}
|
||
} catch (error) {
|
||
this.recordTestFailure(scenarioResult, 'Scenario Execution', error.message);
|
||
}
|
||
|
||
this.results.scenarios.push(scenarioResult);
|
||
this.results.totalTests += scenarioResult.tests.length;
|
||
this.results.passedTests += scenarioResult.passed;
|
||
this.results.failedTests += scenarioResult.failed;
|
||
}
|
||
|
||
async testTherapeuticCounseling(scenario, scenarioResult) {
|
||
// Test emotional state recognition across session
|
||
const emotionalAnalysis = await this.analyzeEmotionalProgression(scenario.sessionTranscript);
|
||
this.validateEmotionalAnalysis(emotionalAnalysis, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test cognitive pattern recognition
|
||
const cognitivePatterns = await this.identifyCognitivePatterns(scenario.sessionTranscript);
|
||
this.validateCognitivePatterns(cognitivePatterns, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test therapeutic intervention planning
|
||
const interventionPlan = await this.generateTherapeuticPlan(
|
||
emotionalAnalysis,
|
||
cognitivePatterns,
|
||
scenario.clientProfile
|
||
);
|
||
this.validateTherapeuticPlan(interventionPlan, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test risk assessment
|
||
const riskAssessment = await this.assessPsychologicalRisk(
|
||
emotionalAnalysis,
|
||
cognitivePatterns,
|
||
scenario.clientProfile
|
||
);
|
||
this.validateRiskAssessment(riskAssessment, scenario.expectedAnalysis, scenarioResult);
|
||
}
|
||
|
||
async testCustomerExperienceAnalysis(scenario, scenarioResult) {
|
||
// Test emotional journey mapping
|
||
const emotionalJourney = await this.mapEmotionalJourney(scenario.customerJourney);
|
||
this.validateEmotionalJourney(emotionalJourney, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test critical moment identification
|
||
const criticalMoments = await this.identifyCriticalMoments(scenario.customerJourney);
|
||
this.validateCriticalMoments(criticalMoments, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test experience optimization recommendations
|
||
const optimizationPlan = await this.generateOptimizationPlan(emotionalJourney, criticalMoments);
|
||
this.validateOptimizationPlan(optimizationPlan, scenario.expectedAnalysis, scenarioResult);
|
||
}
|
||
|
||
async testMentalHealthMonitoring(scenario, scenarioResult) {
|
||
// Test trend analysis
|
||
const trendAnalysis = await this.analyzeMentalHealthTrends(scenario.dailyEntries);
|
||
this.validateTrendAnalysis(trendAnalysis, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test risk indicator detection
|
||
const riskIndicators = await this.detectRiskIndicators(scenario.dailyEntries);
|
||
this.validateRiskIndicators(riskIndicators, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test intervention recommendations
|
||
const interventionRecs = await this.generateInterventionRecommendations(
|
||
trendAnalysis,
|
||
riskIndicators
|
||
);
|
||
this.validateInterventionRecommendations(interventionRecs, scenario.expectedAnalysis, scenarioResult);
|
||
}
|
||
|
||
async testOrganizationalBehaviorAnalysis(scenario, scenarioResult) {
|
||
// Test communication pattern analysis
|
||
const commPatterns = await this.analyzeCommunicationPatterns(scenario.teamCommunications);
|
||
this.validateCommunicationPatterns(commPatterns, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test organizational health assessment
|
||
const healthAssessment = await this.assessOrganizationalHealth(scenario.teamCommunications);
|
||
this.validateOrganizationalHealth(healthAssessment, scenario.expectedAnalysis, scenarioResult);
|
||
}
|
||
|
||
async testEducationalPersonalization(scenario, scenarioResult) {
|
||
// Test learning pattern recognition
|
||
const learningPatterns = await this.analyzeLearningPatterns(
|
||
scenario.studentProfile,
|
||
scenario.learningInteractions
|
||
);
|
||
this.validateLearningPatterns(learningPatterns, scenario.expectedAnalysis, scenarioResult);
|
||
|
||
// Test personalization recommendations
|
||
const personalizedRecs = await this.generatePersonalizedRecommendations(
|
||
scenario.studentProfile,
|
||
learningPatterns
|
||
);
|
||
this.validatePersonalizedRecommendations(personalizedRecs, scenario.expectedAnalysis, scenarioResult);
|
||
}
|
||
|
||
// Mock analysis functions (in real implementation, these would call the actual psycho-symbolic reasoner)
|
||
async analyzeEmotionalProgression(transcript) {
|
||
return {
|
||
primaryEmotions: ['anxiety', 'overwhelm', 'fear', 'self_doubt'],
|
||
emotionalIntensity: { anxiety: 0.8, overwhelm: 0.9, fear: 0.7, self_doubt: 0.8 },
|
||
emotionalProgression: 'escalating_with_insight',
|
||
therapeuticAlliance: 0.6
|
||
};
|
||
}
|
||
|
||
async identifyCognitivePatterns(transcript) {
|
||
return {
|
||
patterns: ['catastrophizing', 'all_or_nothing_thinking', 'imposter_syndrome'],
|
||
frequency: { catastrophizing: 3, all_or_nothing_thinking: 2, imposter_syndrome: 4 },
|
||
severity: { catastrophizing: 0.7, all_or_nothing_thinking: 0.6, imposter_syndrome: 0.9 }
|
||
};
|
||
}
|
||
|
||
async generateTherapeuticPlan(emotional, cognitive, profile) {
|
||
return {
|
||
primaryGoals: ['stress_management', 'cognitive_restructuring', 'self_compassion'],
|
||
interventions: [
|
||
{ type: 'CBT', priority: 'high', sessions: 8 },
|
||
{ type: 'mindfulness', priority: 'medium', sessions: 4 },
|
||
{ type: 'behavioral_activation', priority: 'medium', sessions: 6 }
|
||
],
|
||
expectedOutcomes: { anxiety_reduction: 0.4, coping_improvement: 0.6 }
|
||
};
|
||
}
|
||
|
||
async assessPsychologicalRisk(emotional, cognitive, profile) {
|
||
return {
|
||
riskLevel: 'moderate',
|
||
riskFactors: ['burnout', 'relationship_strain', 'perfectionism'],
|
||
protectiveFactors: ['social_support', 'insight', 'motivation_for_change'],
|
||
recommendedActions: ['regular_monitoring', 'stress_management', 'boundary_setting']
|
||
};
|
||
}
|
||
|
||
async mapEmotionalJourney(journey) {
|
||
return {
|
||
stageEmotions: {
|
||
discovery: { primary: 'excitement', intensity: 0.7 },
|
||
purchase: { primary: 'mild_concern', intensity: 0.4 },
|
||
onboarding: { primary: 'frustration', intensity: 0.8 },
|
||
usage: { primary: 'satisfaction', intensity: 0.6 },
|
||
support: { primary: 'relief', intensity: 0.7 },
|
||
advocacy: { primary: 'loyalty', intensity: 0.8 }
|
||
},
|
||
overallSentiment: 'positive_with_friction_points'
|
||
};
|
||
}
|
||
|
||
async identifyCriticalMoments(journey) {
|
||
return {
|
||
criticalPoints: ['onboarding_frustration', 'support_excellence'],
|
||
impactScores: { onboarding_frustration: -0.8, support_excellence: 0.9 },
|
||
recoveryFactors: ['excellent_support', 'product_value']
|
||
};
|
||
}
|
||
|
||
async generateOptimizationPlan(journey, moments) {
|
||
return {
|
||
improvements: [
|
||
{ area: 'onboarding', priority: 'high', expected_impact: 0.7 },
|
||
{ area: 'documentation', priority: 'medium', expected_impact: 0.5 }
|
||
],
|
||
strengths: ['customer_support', 'product_functionality'],
|
||
roi_estimate: 0.25
|
||
};
|
||
}
|
||
|
||
async analyzeMentalHealthTrends(entries) {
|
||
return {
|
||
moodTrend: 'declining_with_intervention',
|
||
stressTrend: 'increasing_then_stabilizing',
|
||
sleepPattern: 'irregular_with_extremes',
|
||
riskLevel: 'moderate_to_high'
|
||
};
|
||
}
|
||
|
||
async detectRiskIndicators(entries) {
|
||
return {
|
||
indicators: ['academic_failure_reaction', 'social_withdrawal', 'avoidance_behaviors'],
|
||
severity: { academic_failure_reaction: 0.8, social_withdrawal: 0.7, avoidance_behaviors: 0.6 },
|
||
timeline: 'escalating_over_2_weeks'
|
||
};
|
||
}
|
||
|
||
async generateInterventionRecommendations(trends, risks) {
|
||
return {
|
||
immediate: ['crisis_assessment', 'counseling_referral'],
|
||
shortTerm: ['academic_support', 'peer_connection'],
|
||
longTerm: ['skill_building', 'lifestyle_changes'],
|
||
monitoring: 'weekly_checkins'
|
||
};
|
||
}
|
||
|
||
async analyzeCommunicationPatterns(communications) {
|
||
return {
|
||
managerStyle: 'supportive_but_may_miss_systemic_issues',
|
||
teamDynamics: 'peer_support_emerging',
|
||
conflictResolution: 'individual_focus_needs_systemic_view',
|
||
communicationHealth: 0.7
|
||
};
|
||
}
|
||
|
||
async assessOrganizationalHealth(communications) {
|
||
return {
|
||
positiveIndicators: ['recognition_culture', 'open_communication', 'peer_support'],
|
||
concernAreas: ['workload_management', 'resource_allocation'],
|
||
overallHealth: 0.6,
|
||
recommendations: ['workload_audit', 'team_discussions']
|
||
};
|
||
}
|
||
|
||
async analyzeLearningPatterns(profile, interactions) {
|
||
return {
|
||
optimalConditions: ['untimed_assessments', 'written_over_oral', 'structured_problems'],
|
||
challengeAreas: ['performance_pressure', 'time_constraints'],
|
||
motivationDrivers: ['mastery_orientation', 'achievement_goals'],
|
||
learningEfficiency: 0.75
|
||
};
|
||
}
|
||
|
||
async generatePersonalizedRecommendations(profile, patterns) {
|
||
return {
|
||
instructionalMethods: ['visual_aids', 'step_by_step_guidance'],
|
||
assessmentAdaptations: ['extended_time', 'written_alternatives'],
|
||
emotionalSupport: ['anxiety_management', 'confidence_building'],
|
||
successProbability: 0.85
|
||
};
|
||
}
|
||
|
||
// Validation functions
|
||
validateEmotionalAnalysis(analysis, expected, scenarioResult) {
|
||
const expectedEmotions = expected.primaryEmotions;
|
||
const detectedEmotions = analysis.primaryEmotions;
|
||
|
||
const overlapRatio = this.calculateOverlap(expectedEmotions, detectedEmotions);
|
||
|
||
if (overlapRatio >= 0.7) {
|
||
this.recordTestSuccess(scenarioResult, 'Emotional Analysis', `Detected ${overlapRatio * 100}% of expected emotions`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Emotional Analysis', `Only detected ${overlapRatio * 100}% of expected emotions`);
|
||
}
|
||
}
|
||
|
||
validateCognitivePatterns(patterns, expected, scenarioResult) {
|
||
const expectedPatterns = expected.cognitivePatterns;
|
||
const detectedPatterns = patterns.patterns;
|
||
|
||
const overlapRatio = this.calculateOverlap(expectedPatterns, detectedPatterns);
|
||
|
||
if (overlapRatio >= 0.6) {
|
||
this.recordTestSuccess(scenarioResult, 'Cognitive Pattern Recognition', `Identified ${overlapRatio * 100}% of expected patterns`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Cognitive Pattern Recognition', `Only identified ${overlapRatio * 100}% of expected patterns`);
|
||
}
|
||
}
|
||
|
||
validateTherapeuticPlan(plan, expected, scenarioResult) {
|
||
const expectedGoals = expected.therapeuticGoals;
|
||
const plannedGoals = plan.primaryGoals;
|
||
|
||
const goalOverlap = this.calculateOverlap(expectedGoals, plannedGoals);
|
||
|
||
if (goalOverlap >= 0.5 && plan.interventions.length > 0) {
|
||
this.recordTestSuccess(scenarioResult, 'Therapeutic Planning', `Plan addresses ${goalOverlap * 100}% of expected goals`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Therapeutic Planning', 'Plan does not adequately address therapeutic needs');
|
||
}
|
||
}
|
||
|
||
validateRiskAssessment(assessment, expected, scenarioResult) {
|
||
const expectedRisks = expected.riskFactors;
|
||
const assessedRisks = assessment.riskFactors;
|
||
|
||
const riskOverlap = this.calculateOverlap(expectedRisks, assessedRisks);
|
||
|
||
if (riskOverlap >= 0.5 && assessment.riskLevel === 'moderate') {
|
||
this.recordTestSuccess(scenarioResult, 'Risk Assessment', `Identified ${riskOverlap * 100}% of risk factors`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Risk Assessment', 'Risk assessment not comprehensive enough');
|
||
}
|
||
}
|
||
|
||
validateEmotionalJourney(journey, expected, scenarioResult) {
|
||
const expectedStages = Object.keys(expected.emotionalJourney);
|
||
const mappedStages = Object.keys(journey.stageEmotions);
|
||
|
||
const stageOverlap = this.calculateOverlap(expectedStages, mappedStages);
|
||
|
||
if (stageOverlap >= 0.8) {
|
||
this.recordTestSuccess(scenarioResult, 'Emotional Journey Mapping', `Mapped ${stageOverlap * 100}% of journey stages`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Emotional Journey Mapping', 'Journey mapping incomplete');
|
||
}
|
||
}
|
||
|
||
validateCriticalMoments(moments, expected, scenarioResult) {
|
||
const expectedMoments = expected.criticalMoments;
|
||
const identifiedMoments = moments.criticalPoints;
|
||
|
||
const momentOverlap = this.calculateOverlap(expectedMoments, identifiedMoments);
|
||
|
||
if (momentOverlap >= 0.7) {
|
||
this.recordTestSuccess(scenarioResult, 'Critical Moment Identification', `Found ${momentOverlap * 100}% of critical moments`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Critical Moment Identification', 'Critical moments not adequately identified');
|
||
}
|
||
}
|
||
|
||
validateOptimizationPlan(plan, expected, scenarioResult) {
|
||
const expectedAreas = expected.improvementAreas;
|
||
const plannedAreas = plan.improvements.map(imp => imp.area);
|
||
|
||
const areaOverlap = this.calculateOverlap(expectedAreas.map(a => a.split('_')[0]), plannedAreas);
|
||
|
||
if (areaOverlap >= 0.5 && plan.roi_estimate > 0) {
|
||
this.recordTestSuccess(scenarioResult, 'Experience Optimization', `Plan addresses key improvement areas`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Experience Optimization', 'Optimization plan not comprehensive');
|
||
}
|
||
}
|
||
|
||
validateTrendAnalysis(analysis, expected, scenarioResult) {
|
||
const expectedTrends = expected.trendAnalysis;
|
||
|
||
const trendsMatch = analysis.moodTrend === expectedTrends.mood_trend &&
|
||
analysis.stressTrend === expectedTrends.stress_trend;
|
||
|
||
if (trendsMatch) {
|
||
this.recordTestSuccess(scenarioResult, 'Mental Health Trend Analysis', 'Trends correctly identified');
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Mental Health Trend Analysis', 'Trend analysis inaccurate');
|
||
}
|
||
}
|
||
|
||
validateRiskIndicators(indicators, expected, scenarioResult) {
|
||
const expectedIndicators = expected.riskIndicators;
|
||
const detectedIndicators = indicators.indicators;
|
||
|
||
const indicatorOverlap = this.calculateOverlap(expectedIndicators, detectedIndicators);
|
||
|
||
if (indicatorOverlap >= 0.6) {
|
||
this.recordTestSuccess(scenarioResult, 'Risk Indicator Detection', `Detected ${indicatorOverlap * 100}% of risk indicators`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Risk Indicator Detection', 'Risk indicators not adequately detected');
|
||
}
|
||
}
|
||
|
||
validateInterventionRecommendations(recs, expected, scenarioResult) {
|
||
const expectedInterventions = expected.interventionRecommendations;
|
||
const allRecommendations = [...recs.immediate, ...recs.shortTerm, ...recs.longTerm];
|
||
|
||
const interventionOverlap = this.calculateOverlap(expectedInterventions, allRecommendations);
|
||
|
||
if (interventionOverlap >= 0.5) {
|
||
this.recordTestSuccess(scenarioResult, 'Intervention Recommendations', 'Appropriate interventions recommended');
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Intervention Recommendations', 'Intervention recommendations inadequate');
|
||
}
|
||
}
|
||
|
||
validateCommunicationPatterns(patterns, expected, scenarioResult) {
|
||
const expectedPatterns = expected.communicationPatterns;
|
||
|
||
const patternsMatch = patterns.teamDynamics === expectedPatterns.teamDynamics &&
|
||
patterns.communicationHealth > 0.5;
|
||
|
||
if (patternsMatch) {
|
||
this.recordTestSuccess(scenarioResult, 'Communication Pattern Analysis', 'Patterns correctly identified');
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Communication Pattern Analysis', 'Pattern analysis incomplete');
|
||
}
|
||
}
|
||
|
||
validateOrganizationalHealth(health, expected, scenarioResult) {
|
||
const expectedPositive = expected.organizationalHealth.positiveIndicators;
|
||
const detectedPositive = health.positiveIndicators;
|
||
|
||
const positiveOverlap = this.calculateOverlap(expectedPositive, detectedPositive);
|
||
|
||
if (positiveOverlap >= 0.5 && health.overallHealth > 0.5) {
|
||
this.recordTestSuccess(scenarioResult, 'Organizational Health Assessment', 'Health indicators correctly identified');
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Organizational Health Assessment', 'Health assessment incomplete');
|
||
}
|
||
}
|
||
|
||
validateLearningPatterns(patterns, expected, scenarioResult) {
|
||
const expectedConditions = expected.learningPatterns.optimal_conditions;
|
||
const detectedConditions = patterns.optimalConditions;
|
||
|
||
const conditionOverlap = this.calculateOverlap(expectedConditions, detectedConditions);
|
||
|
||
if (conditionOverlap >= 0.6) {
|
||
this.recordTestSuccess(scenarioResult, 'Learning Pattern Analysis', `Identified ${conditionOverlap * 100}% of optimal conditions`);
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Learning Pattern Analysis', 'Learning patterns not adequately identified');
|
||
}
|
||
}
|
||
|
||
validatePersonalizedRecommendations(recs, expected, scenarioResult) {
|
||
const expectedMethods = expected.personalizedRecommendations.instructional_methods;
|
||
const recommendedMethods = recs.instructionalMethods;
|
||
|
||
const methodOverlap = this.calculateOverlap(expectedMethods, recommendedMethods);
|
||
|
||
if (methodOverlap >= 0.5 && recs.successProbability > 0.7) {
|
||
this.recordTestSuccess(scenarioResult, 'Personalized Recommendations', 'Appropriate recommendations generated');
|
||
} else {
|
||
this.recordTestFailure(scenarioResult, 'Personalized Recommendations', 'Recommendations not adequately personalized');
|
||
}
|
||
}
|
||
|
||
// Utility functions
|
||
calculateOverlap(expected, actual) {
|
||
if (!expected || !actual || expected.length === 0) return 0;
|
||
|
||
const intersection = expected.filter(item =>
|
||
actual.some(actualItem =>
|
||
actualItem.toLowerCase().includes(item.toLowerCase()) ||
|
||
item.toLowerCase().includes(actualItem.toLowerCase())
|
||
)
|
||
);
|
||
|
||
return intersection.length / expected.length;
|
||
}
|
||
|
||
recordTestSuccess(scenarioResult, testName, message) {
|
||
scenarioResult.tests.push({ name: testName, status: 'PASSED', message });
|
||
scenarioResult.passed++;
|
||
console.log(` ✅ ${testName}: ${message}`);
|
||
}
|
||
|
||
recordTestFailure(scenarioResult, testName, message) {
|
||
scenarioResult.tests.push({ name: testName, status: 'FAILED', message });
|
||
scenarioResult.failed++;
|
||
console.log(` ❌ ${testName}: ${message}`);
|
||
}
|
||
|
||
recordError(scenarioKey, error) {
|
||
this.results.errors.push({ scenario: scenarioKey, error });
|
||
console.log(` 💥 Scenario Error: ${error}`);
|
||
}
|
||
|
||
displayFinalResults() {
|
||
console.log('\n' + '='.repeat(70));
|
||
console.log('🏁 Realistic Scenarios Test Results');
|
||
console.log('='.repeat(70));
|
||
|
||
console.log(`Total Scenarios: ${this.results.scenarios.length}`);
|
||
console.log(`Total Tests: ${this.results.totalTests}`);
|
||
console.log(`Passed Tests: ${this.results.passedTests}`);
|
||
console.log(`Failed Tests: ${this.results.failedTests}`);
|
||
console.log(`Success Rate: ${((this.results.passedTests / this.results.totalTests) * 100).toFixed(1)}%`);
|
||
|
||
console.log('\n📊 Scenario Breakdown:');
|
||
for (const scenario of this.results.scenarios) {
|
||
const successRate = scenario.tests.length > 0 ? (scenario.passed / scenario.tests.length * 100).toFixed(1) : 0;
|
||
console.log(` ${scenario.name}: ${scenario.passed}/${scenario.tests.length} (${successRate}%)`);
|
||
}
|
||
|
||
if (this.results.errors.length > 0) {
|
||
console.log('\n❌ Errors:');
|
||
for (const error of this.results.errors) {
|
||
console.log(` - ${error.scenario}: ${error.error}`);
|
||
}
|
||
}
|
||
|
||
if (this.results.passedTests === this.results.totalTests) {
|
||
console.log('\n🎉 All realistic scenarios passed! System demonstrates sophisticated psycho-symbolic reasoning.');
|
||
} else {
|
||
console.log('\n⚠️ Some scenarios failed. System needs improvement in complex reasoning tasks.');
|
||
}
|
||
}
|
||
}
|
||
|
||
// Run tests if this script is executed directly
|
||
if (require.main === module) {
|
||
const tester = new RealisticScenariosTest();
|
||
tester.runAllScenarios().catch(error => {
|
||
console.error('Test execution failed:', error);
|
||
process.exit(1);
|
||
});
|
||
}
|
||
|
||
module.exports = { RealisticScenariosTest, REALISTIC_SCENARIOS }; |