File size: 4,879 Bytes
3f792e8 896d872 3f792e8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
#!/usr/bin/env python3
"""
Startup script for the FastAPI-based Audio Intelligence System
This script handles dependency checking, model preloading, environment setup, and application launch.
"""
import sys
import subprocess
import importlib.util
import logging
from pathlib import Path
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def check_dependency(package_name, install_name=None):
"""Check if a package is installed."""
try:
importlib.util.find_spec(package_name)
return True
except ImportError:
return False
def install_dependencies():
"""Install dependencies from requirements file."""
logger.info("Installing dependencies from requirements.txt...")
try:
subprocess.check_call([
sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'
])
logger.info("Dependencies installed successfully!")
return True
except subprocess.CalledProcessError as e:
logger.error(f"Failed to install dependencies: {e}")
return False
def check_system():
"""Check system requirements."""
logger.info("Checking system requirements...")
# Check Python version
if sys.version_info < (3, 8):
logger.error("Python 3.8+ is required")
return False
logger.info(f"Python version: {sys.version}")
# Check core dependencies
required_packages = ['fastapi', 'uvicorn', 'jinja2', 'numpy', 'torch', 'transformers']
missing_packages = []
for package in required_packages:
if not check_dependency(package):
missing_packages.append(package)
if missing_packages:
logger.warning(f"Missing packages: {missing_packages}")
response = input("Install missing dependencies? (y/n): ")
if response.lower() == 'y':
return install_dependencies()
else:
logger.error("Cannot run without required dependencies")
return False
logger.info("All dependencies are available!")
return True
def create_directories():
"""Create necessary directories."""
directories = ['templates', 'static', 'uploads', 'outputs', 'model_cache']
for dir_name in directories:
Path(dir_name).mkdir(exist_ok=True)
logger.info("Created necessary directories")
def preload_models():
"""Preload AI models before starting the server."""
logger.info("Starting model preloading...")
try:
# Import and run model preloader
from model_preloader import ModelPreloader
preloader = ModelPreloader()
results = preloader.preload_all_models()
if results["success_count"] > 0:
logger.info(f"✓ Model preloading completed! Loaded {results['success_count']}/{results['total_count']} models")
return True
else:
logger.warning("⚠ No models loaded successfully, but continuing with application startup")
return True # Continue anyway for demo mode
except Exception as e:
logger.error(f"Model preloading failed: {e}")
logger.warning("Continuing with application startup (demo mode will still work)")
return True # Continue anyway
def main():
"""Main startup function."""
logger.info("Starting Audio Intelligence System (FastAPI)")
# Check system requirements
if not check_system():
logger.error("System requirements not met")
return 1
# Create directories
create_directories()
# Check if template exists
template_path = Path("templates/index.html")
if not template_path.exists():
logger.error("Template file not found: templates/index.html")
logger.info("Please ensure the HTML template is created")
return 1
# Preload models (this is the key addition)
preload_models()
# Import and run the FastAPI app
try:
logger.info("Starting FastAPI server...")
logger.info("Access the application at: http://127.0.0.1:8000")
logger.info("API documentation at: http://127.0.0.1:8000/api/docs")
# Import uvicorn here to avoid import errors during dependency check
import uvicorn
# Run the server
uvicorn.run(
"web_app:app",
host="127.0.0.1",
port=8000,
reload=True,
log_level="info"
)
except ImportError as e:
logger.error(f"Import error: {e}")
logger.error("Please run: pip install -r requirements.txt")
return 1
except Exception as e:
logger.error(f"Failed to start server: {e}")
return 1
return 0
if __name__ == "__main__":
sys.exit(main()) |