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