Spaces:
Sleeping
Sleeping
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()
|