Eidolon-CognitiveTutor / test_rag_tutor.py
BonelliLab's picture
Push existing cognitive tutor project
cd8c2bb
#!/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()