#!/usr/bin/env python3 """ Test script for the Universal Model Toggle System This script demonstrates how the new universal model toggle system works with any model, not just hardcoded ones. """ import sys import os import logging from datetime import datetime # Add the project root to the path sys.path.append(os.path.dirname(os.path.abspath(__file__))) # Setup logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def test_universal_model_toggles(): """Test the universal model toggle system""" try: from core.orchestrator import TradingOrchestrator from core.data_provider import DataProvider from models import ModelInterface, get_model_registry logger.info("๐Ÿงช Testing Universal Model Toggle System") # Initialize components data_provider = DataProvider() orchestrator = TradingOrchestrator(data_provider=data_provider) # Test 1: Check existing models logger.info("\n๐Ÿ“‹ Test 1: Checking existing models") existing_models = orchestrator.get_all_registered_models() logger.info(f"Found {len(existing_models)} existing models: {list(existing_models.keys())}") # Test 2: Add a new model dynamically logger.info("\nโž• Test 2: Adding new model dynamically") class TestModel(ModelInterface): def __init__(self): super().__init__("test_model") def predict(self, data): return {"action": "TEST", "confidence": 0.85} test_model = TestModel() success = orchestrator.register_model_dynamically("test_model", test_model) logger.info(f"Dynamic model registration: {'โœ… SUCCESS' if success else 'โŒ FAILED'}") # Test 3: Check toggle states logger.info("\n๐Ÿ”„ Test 3: Testing toggle states") # Test with existing model dqn_state = orchestrator.get_model_toggle_state("dqn") logger.info(f"DQN toggle state: {dqn_state}") # Test with new model test_model_state = orchestrator.get_model_toggle_state("test_model") logger.info(f"Test model toggle state: {test_model_state}") # Test 4: Update toggle states logger.info("\nโš™๏ธ Test 4: Updating toggle states") # Disable inference for test model orchestrator.set_model_toggle_state("test_model", inference_enabled=False) updated_state = orchestrator.get_model_toggle_state("test_model") logger.info(f"Updated test model state: {updated_state}") # Test 5: Add another model without interface logger.info("\nโž• Test 5: Adding model without interface") orchestrator.set_model_toggle_state("custom_transformer", inference_enabled=True, training_enabled=True) transformer_state = orchestrator.get_model_toggle_state("custom_transformer") logger.info(f"Custom transformer state: {transformer_state}") # Test 6: Check all models after additions logger.info("\n๐Ÿ“‹ Test 6: Final model count") final_models = orchestrator.get_all_registered_models() logger.info(f"Final model count: {len(final_models)}") for model_name, model_info in final_models.items(): toggle_state = orchestrator.get_model_toggle_state(model_name) logger.info(f" - {model_name}: inf={toggle_state['inference_enabled']}, train={toggle_state['training_enabled']}") logger.info("\nโœ… Universal Model Toggle System test completed successfully!") return True except Exception as e: logger.error(f"โŒ Test failed: {e}") return False def test_dashboard_integration(): """Test dashboard integration with universal toggles""" try: logger.info("\n๐Ÿ–ฅ๏ธ Testing Dashboard Integration") from web.clean_dashboard import CleanTradingDashboard from core.orchestrator import TradingOrchestrator from core.data_provider import DataProvider # Initialize components data_provider = DataProvider() orchestrator = TradingOrchestrator(data_provider=data_provider) # Add some test models orchestrator.set_model_toggle_state("test_model_1", inference_enabled=True, training_enabled=False) orchestrator.set_model_toggle_state("test_model_2", inference_enabled=False, training_enabled=True) # Initialize dashboard (this will test the universal callback setup) dashboard = CleanTradingDashboard( data_provider=data_provider, orchestrator=orchestrator ) # Test adding model dynamically through dashboard success = dashboard.add_model_dynamically("dynamic_test_model") logger.info(f"Dashboard dynamic model addition: {'โœ… SUCCESS' if success else 'โŒ FAILED'}") # Check available models available_models = dashboard._get_available_models() logger.info(f"Dashboard sees {len(available_models)} models: {list(available_models.keys())}") logger.info("โœ… Dashboard integration test completed!") return True except Exception as e: logger.error(f"โŒ Dashboard integration test failed: {e}") return False if __name__ == "__main__": logger.info("๐Ÿš€ Starting Universal Model Toggle System Tests") logger.info("=" * 60) # Run tests test1_success = test_universal_model_toggles() test2_success = test_dashboard_integration() # Summary logger.info("\n" + "=" * 60) logger.info("๐Ÿ“Š TEST SUMMARY") logger.info(f"Universal Toggle System: {'โœ… PASS' if test1_success else 'โŒ FAIL'}") logger.info(f"Dashboard Integration: {'โœ… PASS' if test2_success else 'โŒ FAIL'}") if test1_success and test2_success: logger.info("๐ŸŽ‰ ALL TESTS PASSED! Universal model toggle system is working correctly.") sys.exit(0) else: logger.error("โŒ Some tests failed. Check the logs above for details.") sys.exit(1)