ensemble-tts-annotation / test_local.py
marcosremar
Add comprehensive testing infrastructure
98938e3
"""
Local test - Verifica se o sistema funciona antes de provisionar mΓ‘quina.
"""
import sys
import logging
logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger(__name__)
def test_imports():
"""Test if all imports work"""
logger.info("=" * 60)
logger.info("TEST: Imports")
logger.info("=" * 60)
try:
logger.info("Importing ensemble_tts...")
from ensemble_tts import EnsembleAnnotator
logger.info("βœ… Import successful")
return True
except Exception as e:
logger.error(f"❌ Import failed: {e}")
import traceback
traceback.print_exc()
return False
def test_create_annotator():
"""Test creating annotator without loading models"""
logger.info("\n" + "=" * 60)
logger.info("TEST: Create Annotator (no model loading)")
logger.info("=" * 60)
try:
from ensemble_tts import EnsembleAnnotator
logger.info("Creating annotator in quick mode...")
annotator = EnsembleAnnotator(
mode='quick',
device='cpu',
enable_events=False
)
logger.info(f" Mode: {annotator.mode}")
logger.info(f" Device: {annotator.device}")
logger.info(f" Voting: {annotator.voting_strategy}")
logger.info("βœ… Annotator created successfully")
return annotator, True
except Exception as e:
logger.error(f"❌ Annotator creation failed: {e}")
import traceback
traceback.print_exc()
return None, False
def test_model_structure():
"""Test model structure without loading weights"""
logger.info("\n" + "=" * 60)
logger.info("TEST: Model Structure")
logger.info("=" * 60)
try:
from ensemble_tts.models.emotion import EmotionEnsemble
logger.info("Creating emotion ensemble...")
ensemble = EmotionEnsemble(mode='quick', device='cpu')
logger.info(f" Number of models: {len(ensemble.models)}")
for model in ensemble.models:
logger.info(f" - {model.name} (weight: {model.weight})")
logger.info("βœ… Model structure correct")
return True
except Exception as e:
logger.error(f"❌ Model structure test failed: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Run local tests"""
logger.info("\n" + "=" * 60)
logger.info("ENSEMBLE TTS ANNOTATION - LOCAL TEST")
logger.info("Testing without loading model weights")
logger.info("=" * 60 + "\n")
results = {}
# Test 1: Imports
results['imports'] = test_imports()
if not results['imports']:
logger.error("\n❌ Import test failed. Please install requirements:")
logger.error(" pip install -r requirements.txt")
return False
# Test 2: Create annotator
annotator, success = test_create_annotator()
results['create_annotator'] = success
# Test 3: Model structure
results['model_structure'] = test_model_structure()
# Summary
logger.info("\n" + "=" * 60)
logger.info("TEST SUMMARY")
logger.info("=" * 60)
for test_name, success in results.items():
status = "βœ… PASS" if success else "❌ FAIL"
logger.info(f" {test_name}: {status}")
all_passed = all(results.values())
if all_passed:
logger.info("\n" + "=" * 60)
logger.info("βœ… ALL LOCAL TESTS PASSED!")
logger.info("=" * 60)
logger.info("\nNext steps:")
logger.info("1. Run full test (downloads models):")
logger.info(" python scripts/test/test_quick.py")
logger.info("\n2. Or test on spot instance:")
logger.info(" bash scripts/test/launch_spot_test.sh")
logger.info("")
else:
logger.error("\n" + "=" * 60)
logger.error("❌ SOME TESTS FAILED")
logger.error("=" * 60)
logger.error("\nPlease check errors above and fix before proceeding.")
logger.error("")
return all_passed
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)