DarainHyder
Initial clean deploy commit: removing binary files and venv
25732fb
"""
Test script for agents
"""
from app import app, db
from agents.coordinator_agent import CoordinatorAgent
from models import User, Topic
import json
def test_lesson_generation():
"""Test Teaching Agent via Coordinator"""
print("\n" + "="*60)
print("TEST 1: Lesson Generation")
print("="*60)
with app.app_context():
# Ensure test user exists
user = User.query.filter_by(username='test_user').first()
if not user:
user = User(username='test_user', email='test@example.com')
db.session.add(user)
db.session.commit()
print(f"[OK] Created test user: {user.username}")
else:
print(f"[OK] Using existing user: {user.username}")
# Get first topic
topic = Topic.query.first()
print(f"[OK] Testing with topic: {topic.name}")
# Test coordinator
coordinator = CoordinatorAgent()
result = coordinator.perceive({
'task': 'generate_lesson',
'user_id': user.id,
'context': {
'topic_id': topic.id,
'learning_history': []
}
}).decide().act()
print(f"\nResult:")
print(f" Success: {result['success']}")
print(f" Agents Used: {result.get('agents_used', [])}")
print(f" Workflow: {result.get('workflow', 'N/A')}")
if result['success']:
teaching_result = result['results'].get('TeachingAgent', {})
content = teaching_result.get('content', '')
content_preview = content[:200] if content else 'No content'
print(f"\nContent Preview:")
print(f" {content_preview}...")
print(f"\n[PASS] Test PASSED")
return True
else:
print(f"\n[FAIL] Test FAILED: {result.get('error', 'Unknown error')}")
return False
def test_quiz_generation():
"""Test Assessment Agent via Coordinator"""
print("\n" + "="*60)
print("TEST 2: Quiz Generation")
print("="*60)
with app.app_context():
user = User.query.filter_by(username='test_user').first()
topic = Topic.query.first()
coordinator = CoordinatorAgent()
result = coordinator.perceive({
'task': 'generate_quiz',
'user_id': user.id,
'context': {
'topic_id': topic.id,
'recent_performance': []
}
}).decide().act()
print(f"\nResult:")
print(f" Success: {result['success']}")
print(f" Agents Used: {result.get('agents_used', [])}")
if result['success']:
assessment_result = result['results'].get('AssessmentAgent', {})
questions = assessment_result.get('questions', [])
print(f"\nQuestions Generated: {len(questions)}")
if questions:
print(f" Sample Question: {questions[0].get('question', '')}")
print(f"\n[PASS] Test PASSED")
return True
else:
print(f"\n[FAIL] Test FAILED: {result.get('error', 'Unknown error')}")
return False
def test_hint_generation():
"""Test Tutor Agent via Coordinator"""
print("\n" + "="*60)
print("TEST 3: Hint Generation")
print("="*60)
with app.app_context():
coordinator = CoordinatorAgent()
result = coordinator.perceive({
'task': 'provide_hint',
'user_id': 1,
'context': {
'question': 'How do I use a for loop?',
'challenge': 'Write a program to print numbers 1 to 10',
'attempt_count': 1
}
}).decide().act()
print(f"\nResult:")
print(f" Success: {result['success']}")
if result['success']:
hint = result['results'].get('hint', '')
print(f"\nHint Generated:")
print(f" {hint}\n")
print(f"[PASS] Test PASSED")
return True
else:
print(f"\n[FAIL] Test FAILED: {result.get('error', 'Unknown error')}")
return False
def test_recommendation():
"""Test Recommendation Agent via Coordinator"""
print("\n" + "="*60)
print("TEST 4: Topic Recommendation")
print("="*60)
with app.app_context():
user = User.query.filter_by(username='test_user').first()
coordinator = CoordinatorAgent()
result = coordinator.perceive({
'task': 'recommend_topic',
'user_id': user.id,
'context': {
'current_topic_id': None
}
}).decide().act()
print(f"\nResult:")
print(f" Success: {result['success']}")
if result['success']:
rec_result = result['results'].get('RecommendationAgent', {})
next_best = rec_result.get('next_best')
if next_best:
print(f"\nRecommendation:")
print(f" Topic: {next_best['name']}")
print(f" Reason: {next_best['reason']}")
print(f"\n[PASS] Test PASSED")
return True
else:
print(f"\n[FAIL] Test FAILED")
return False
def test_agent_status():
"""Test Agent Status Retrieval"""
print("\n" + "="*60)
print("TEST 5: Agent Status")
print("="*60)
with app.app_context():
coordinator = CoordinatorAgent()
# Run a task first
coordinator.perceive({
'task': 'provide_hint',
'user_id': 1,
'context': {'question': 'Test', 'challenge': 'Test'}
}).decide().act()
status = coordinator.get_agent_status()
print(f"\nAgent Status:")
print(f" Coordinator Tasks: {status['coordinator']['tasks_coordinated']}")
print(f" Total Memory: {status['total_memory']}")
print(f"\nSub-Agents:")
for agent_name, stats in status['sub_agents'].items():
print(f" {agent_name.capitalize()}: State={stats['state']}")
print(f"\n[PASS] Test PASSED")
return True
def run_all_tests():
"""Run all agent tests"""
print("\n" + "*"*60)
print("MULTI-AGENT SYSTEM TEST SUITE")
print("*"*60)
# Store test results
test_results = {}
try:
test_results['lesson'] = test_lesson_generation()
except Exception as e:
print(f"[FAIL] Lesson test failed: {e}")
test_results['lesson'] = False
try:
test_results['quiz'] = test_quiz_generation()
except Exception as e:
print(f"[FAIL] Quiz test failed: {e}")
test_results['quiz'] = False
try:
test_results['hint'] = test_hint_generation()
except Exception as e:
print(f"[FAIL] Hint test failed: {e}")
test_results['hint'] = False
try:
test_results['recommendation'] = test_recommendation()
except Exception as e:
print(f"[FAIL] Recommendation test failed: {e}")
test_results['recommendation'] = False
try:
test_results['status'] = test_agent_status()
except Exception as e:
print(f"[FAIL] Status test failed: {e}")
test_results['status'] = False
# Calculate summary
print("\n" + "="*60)
print("TEST SUMMARY")
print("="*60)
passed = sum(1 for result in test_results.values() if result is True)
total = len(test_results)
failed = total - passed
print(f" Total Tests: {total}")
print(f" Passed: {passed}")
print(f" Failed: {failed}")
# Show details
print(f"\n Details:")
for test_name, result in test_results.items():
status = "[PASS]" if result else "[FAIL]"
print(f" {test_name.capitalize()}: {status}")
if passed == total:
print("\n" + "="*60)
print("ALL TESTS PASSED!")
print("="*60 + "\n")
else:
print(f"\n{failed} test(s) failed. Check logs above.\n")
print("="*60 + "\n")
return passed == total
if __name__ == '__main__':
all_passed = run_all_tests()
exit(0 if all_passed else 1)