Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """ | |
| Comprehensive test suite for AIM-Env Platform | |
| Tests all critical functionality to ensure 10/10 quality | |
| """ | |
| import sys | |
| import os | |
| sys.path.append('.') | |
| def test_imports(): | |
| """Test all critical imports""" | |
| try: | |
| from env.env import AIMEnv | |
| from env.models import TaskConfig, Action, Observation | |
| from env.grader import Grader | |
| from tasks.task_easy import EASY_TASK_CONFIG | |
| from inference import HeuristicAgent, LLMAgent | |
| from backend.app.services.env_service import EnvService | |
| print("✅ All imports successful") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Import failed: {e}") | |
| return False | |
| def test_environment(): | |
| """Test AIMEnv functionality""" | |
| try: | |
| from env.env import AIMEnv | |
| from tasks.task_easy import EASY_TASK_CONFIG | |
| env = AIMEnv(EASY_TASK_CONFIG) | |
| obs = env.reset() | |
| # Test basic properties | |
| assert len(obs.inbox) == EASY_TASK_CONFIG.num_emails | |
| assert obs.time_left == EASY_TASK_CONFIG.time_budget | |
| assert isinstance(obs.inbox[0].subject, str) | |
| # Test step | |
| from env.models import Action | |
| action = Action(type="open", email_id=obs.inbox[0].id) | |
| next_obs, reward, done = env.step(action) | |
| assert next_obs.time_left < obs.time_left | |
| # Test scoring | |
| score = env.get_score() | |
| assert 0.0 <= score <= 1.0 | |
| print("✅ Environment tests passed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Environment test failed: {e}") | |
| return False | |
| def test_agents(): | |
| """Test agent functionality""" | |
| try: | |
| from env.env import AIMEnv | |
| from tasks.task_easy import EASY_TASK_CONFIG | |
| from inference import HeuristicAgent, LLMAgent | |
| env = AIMEnv(EASY_TASK_CONFIG) | |
| obs = env.reset() | |
| # Test heuristic agent | |
| heuristic = HeuristicAgent() | |
| action = heuristic.decide(obs) | |
| assert action.type in ["open", "classify", "submit"] | |
| # Test LLM agent (should fallback gracefully) | |
| llm = LLMAgent() | |
| action = llm.decide(obs) | |
| assert action.type in ["open", "classify", "submit"] | |
| print("✅ Agent tests passed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Agent test failed: {e}") | |
| return False | |
| def test_service(): | |
| """Test backend service""" | |
| try: | |
| from backend.app.services.env_service import EnvService | |
| from backend.app.schemas.request import RunTaskRequest | |
| service = EnvService() | |
| request = RunTaskRequest(difficulty="easy", agent_type="heuristic") | |
| result = service.run_task(request) | |
| assert result.final_score >= 0.0 | |
| assert len(result.steps) > 0 | |
| assert len(result.emails) >= 0 | |
| print("✅ Service tests passed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Service test failed: {e}") | |
| return False | |
| def test_grader(): | |
| """Test grading system""" | |
| try: | |
| from env.grader import Grader | |
| from env.models import EpisodeResult | |
| grader = Grader() | |
| result = EpisodeResult( | |
| score=0.0, | |
| steps=10, | |
| correct_classifications=2, | |
| phishing_detected=1, | |
| efficiency=0.8, | |
| classification_acc=0.67, | |
| priority_acc=0.67, | |
| routing_acc=0.67, | |
| risk_score=1.0, | |
| efficiency_score=0.8 | |
| ) | |
| score = grader.grade_episode(result) | |
| expected = (0.30 * 0.67) + (0.20 * 0.67) + (0.20 * 0.67) + (0.20 * 1.0) + (0.10 * 0.8) | |
| assert abs(score - expected) < 0.01 | |
| print("✅ Grader tests passed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Grader test failed: {e}") | |
| return False | |
| def main(): | |
| """Run all tests""" | |
| print("🚀 Running AIM-Env Platform Test Suite") | |
| print("=" * 50) | |
| tests = [ | |
| ("Imports", test_imports), | |
| ("Environment", test_environment), | |
| ("Agents", test_agents), | |
| ("Service", test_service), | |
| ("Grader", test_grader) | |
| ] | |
| passed = 0 | |
| total = len(tests) | |
| for name, test_func in tests: | |
| print(f"\n🧪 Testing {name}...") | |
| if test_func(): | |
| passed += 1 | |
| else: | |
| print(f"❌ {name} test failed") | |
| print("\n" + "=" * 50) | |
| print(f"📊 Test Results: {passed}/{total} passed") | |
| if passed == total: | |
| print("🎉 ALL TESTS PASSED! Platform is 10/10 ready!") | |
| return 0 | |
| else: | |
| print("⚠️ Some tests failed. Please fix before deployment.") | |
| return 1 | |
| if __name__ == "__main__": | |
| sys.exit(main()) |