File size: 6,509 Bytes
cd8c2bb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
#!/usr/bin/env python3
"""
Test script for RAG-enhanced Cognitive Tutor system.
Demonstrates adaptive questioning, knowledge tracing, and research metrics.
"""

from cog_tutor.adaptive_tutor import AdaptiveTutor
import json
import time

def test_rag_enhanced_tutor():
    """Test the complete RAG-enhanced tutoring system."""
    
    print("=== RAG-Enhanced Cognitive Tutor Test ===\n")
    
    # Initialize tutor
    tutor = AdaptiveTutor(user_id="sunny_test")
    
    # Test 1: Generate adaptive question
    print("1. Testing Adaptive Question Generation")
    print("-" * 40)
    
    question = tutor.generate_adaptive_question("algebra_simplification")
    print(f"Generated Question: {question['question']}")
    print(f"Expected Difficulty: {question['difficulty']:.2f}")
    print(f"Knowledge Sources: {question['knowledge_sources']}")
    print()
    
    # Test 2: Process student response
    print("2. Testing Student Response Processing")
    print("-" * 40)
    
    # Simulate student response
    start_time = time.time()
    time.sleep(2)  # Simulate thinking time
    response_time = time.time() - start_time
    
    result = tutor.process_student_response(
        item_id="test_001",
        skill="algebra_simplification", 
        question=question['question'],
        user_answer="5x",  # Incorrect answer
        correct_answer="x",
        response_time=response_time,
        hints_used=1
    )
    
    print(f"Response Correct: {result['correct']}")
    print(f"Mastery Theta: {result['mastery_theta']:.3f}")
    print(f"Mastery Probability: {result['mastery_probability']:.3f}")
    print(f"Explanation Hint: {result['explanation']['hint']}")
    print()
    
    # Test 3: Generate contextual hints
    print("3. Testing Contextual Hint Generation")
    print("-" * 40)
    
    hints = tutor.generate_adaptive_hints(question['question'], hint_level=2)
    for i, hint in enumerate(hints, 1):
        print(f"Hint {i}: {hint}")
    print()
    
    # Test 4: Get next item recommendations
    print("4. Testing Next Item Recommendations")
    print("-" * 40)
    
    recommendations = tutor.get_next_items("algebra_simplification", max_items=3)
    for i, rec in enumerate(recommendations, 1):
        print(f"Recommendation {i}:")
        print(f"  Item: {rec['item_id']}")
        print(f"  Skill: {rec['skill']}")
        print(f"  Score: {rec['score']:.3f}")
        print(f"  Information Gain: {rec['information_gain']:.3f}")
        print(f"  Current Mastery: {rec['current_mastery']:.3f}")
        print()
    
    # Test 5: Evaluate mastery with IRT
    print("5. Testing IRT Mastery Evaluation")
    print("-" * 40)
    
    irt_evaluation = tutor.evaluate_mastery_with_irt("algebra_simplification")
    print(f"Theta (Ability): {irt_evaluation['theta']:.3f}")
    print(f"Standard Error: {irt_evaluation['sem']:.3f}")
    print(f"Mastery Probability: {irt_evaluation['mastery']:.3f}")
    print(f"95% CI: [{irt_evaluation['confidence_interval'][0]:.2f}, {irt_evaluation['confidence_interval'][1]:.2f}]")
    print()
    
    # Test 6: Simulate multiple responses for learning metrics
    print("6. Testing Learning Progress Simulation")
    print("-" * 40)
    
    # Simulate 5 more responses
    for i in range(5):
        # Generate question
        q = tutor.generate_adaptive_question("algebra_simplification")
        
        # Simulate improving performance
        correct = i >= 2  # Get correct after 3 attempts
        
        result = tutor.process_student_response(
            item_id=f"test_{i+2:03d}",
            skill="algebra_simplification",
            question=q['question'],
            user_answer="x" if correct else "5x",
            correct_answer="x",
            response_time=3.0 - i * 0.3,  # Get faster
            hints_used=max(0, 2 - i)  # Use fewer hints
        )
        
        print(f"Response {i+1}: Correct={result['correct']}, Mastery={result['mastery_probability']:.3f}")
    
    print()
    
    # Test 7: Get comprehensive research metrics
    print("7. Testing Research Metrics")
    print("-" * 40)
    
    metrics = tutor.get_research_metrics()
    
    print("Session Metrics:")
    session = metrics['session_metrics']
    print(f"  Duration: {session['duration_seconds']:.1f}s")
    print(f"  Total Responses: {session['total_responses']}")
    print(f"  Accuracy: {session['accuracy']:.3f}")
    print(f"  Learning Gain: {session['learning_gain']:.3f}")
    
    print("\nCumulative Metrics:")
    cumulative = metrics['cumulative_metrics']
    if cumulative:
        print(f"  Total Responses: {cumulative.get('total_responses', 0)}")
        print(f"  Accuracy: {cumulative.get('accuracy', 0):.3f}")
        print(f"  Retention Rate: {cumulative.get('retention_rate', 'N/A')}")
    
    print("\nKnowledge Tracing:")
    kt = metrics['knowledge_tracing']
    print(f"  Tracked Skills: {kt['tracked_skills']}")
    for skill, data in kt['skill_masteries'].items():
        print(f"  {skill}: θ={data['theta']:.2f}, mastery={data['mastery_prob']:.3f}")
    
    print()
    
    # Test 8: Test RAG knowledge retrieval
    print("8. Testing Knowledge Retrieval")
    print("-" * 40)
    
    # Test fact retrieval
    facts = tutor.retriever.get_facts_for_explanation(
        "Simplify (3x + 2x) / 5",
        "5x", 
        "x"
    )
    
    print("Retrieved Facts for Explanation:")
    for i, fact in enumerate(facts, 1):
        print(f"  {i}. {fact}")
    
    print()
    
    # Test 9: Save metrics to file for research analysis
    print("9. Saving Research Data")
    print("-" * 40)
    
    research_data = {
        "user_id": tutor.user_id,
        "session_start": tutor.session_start.isoformat(),
        "metrics": metrics,
        "session_responses": [
            {
                "item_id": r.item_id,
                "skill": r.skill,
                "correct": r.correct,
                "response_time": r.response_time,
                "hints_used": r.hints_used,
                "difficulty": r.difficulty,
                "timestamp": r.timestamp.isoformat()
            }
            for r in tutor.session_responses
        ]
    }
    
    with open("research_output.json", "w") as f:
        json.dump(research_data, f, indent=2)
    
    print("Research data saved to 'research_output.json'")
    print()
    
    print("=== Test Complete ===")
    print("RAG-enhanced Cognitive Tutor is ready for deployment!")

if __name__ == "__main__":
    test_rag_enhanced_tutor()