Spaces:
Sleeping
Sleeping
File size: 3,911 Bytes
6510698 |
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 |
"""
Main application file for Phi-3.5-MoE Hugging Face Space.
This is the entry point that orchestrates all components:
- Environment detection and validation
- Model loading with proper configuration
- Gradio interface creation and launch
"""
import os
import sys
import logging
from pathlib import Path
# Add the project root to Python path
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from app.model_loader import ModelLoader
from app.interface import GradioInterface
from app.config.model_config import EnvironmentDetector, DependencyValidator
# Setup logging
logging.basicConfig(
level=logging.INFO,
format='[%(asctime)s] %(name)s - %(levelname)s: %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)
def setup_environment():
"""Setup and validate the environment."""
logger.info("π§ Setting up environment...")
# Load environment variables from .env if it exists
env_file = Path(".env")
if env_file.exists():
logger.info("π Loading environment variables from .env")
from dotenv import load_dotenv
load_dotenv()
# Log environment info
env_info = EnvironmentDetector.detect_environment()
logger.info("π Environment Information:")
for key, value in env_info.items():
logger.info(f" {key}: {value}")
# Validate dependencies
missing_deps = DependencyValidator.get_missing_required_packages()
if missing_deps:
logger.error(f"β Missing required dependencies: {missing_deps}")
logger.error("Please run the prestart.sh script to install dependencies")
return False
logger.info("β
Environment setup completed")
return True
def create_application():
"""Create and configure the application."""
logger.info("π Creating Phi-3.5-MoE application...")
try:
# Setup environment
if not setup_environment():
logger.error("β Environment setup failed")
return None, None
# Create model loader
logger.info("π€ Initializing model loader...")
model_loader = ModelLoader()
# Attempt to load the model
logger.info("π₯ Loading model (this may take several minutes)...")
model_loaded = model_loader.load_complete_model()
if model_loaded:
logger.info("β
Model loaded successfully!")
else:
logger.warning("β οΈ Model loading failed - running in fallback mode")
# Create Gradio interface
logger.info("π¨ Creating Gradio interface...")
interface = GradioInterface(model_loader)
logger.info("π Application created successfully!")
return model_loader, interface
except Exception as e:
logger.error(f"β Failed to create application: {e}")
return None, None
def main():
"""Main application entry point."""
logger.info("=" * 60)
logger.info("π Starting Phi-3.5-MoE Expert Assistant")
logger.info("=" * 60)
try:
# Create application
model_loader, interface = create_application()
if interface is None:
logger.error("β Failed to create application")
sys.exit(1)
# Launch interface
logger.info("π Launching web interface...")
interface.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
show_error=True
)
except KeyboardInterrupt:
logger.info("π Application stopped by user")
except Exception as e:
logger.error(f"β Application failed: {e}")
sys.exit(1)
finally:
logger.info("π Application shutdown complete")
if __name__ == "__main__":
main()
|