mirror of
https://github.com/ruvnet/RuView
synced 2026-08-02 19:11:46 +00:00
407b46b206
Add ruvnet/midstream (AIMDS real-time inference) and ruvnet/sublinear-time-solver (sublinear optimization algorithms) as vendored dependencies under vendor/.
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 }; |