#!/usr/bin/env python3 """ Universal Model Trainer - Entry Point Run the FastAPI application with Uvicorn server. """ import os import sys import uvicorn import argparse from pathlib import Path # Add the project root to Python path sys.path.insert(0, str(Path(__file__).parent)) def parse_args(): """Parse command line arguments.""" parser = argparse.ArgumentParser( description="Universal Model Trainer - HuggingFace Spaces" ) parser.add_argument( "--host", type=str, default=os.getenv("HOST", "0.0.0.0"), help="Host to bind the server to" ) parser.add_argument( "--port", type=int, default=int(os.getenv("PORT", 7860)), help="Port to bind the server to" ) parser.add_argument( "--workers", type=int, default=int(os.getenv("WORKERS", 1)), help="Number of worker processes" ) parser.add_argument( "--reload", action="store_true", default=os.getenv("RELOAD", "false").lower() == "true", help="Enable auto-reload for development" ) parser.add_argument( "--log-level", type=str, default=os.getenv("LOG_LEVEL", "info"), choices=["critical", "error", "warning", "info", "debug", "trace"], help="Log level" ) return parser.parse_args() def main(): """Main entry point.""" args = parse_args() print(f""" ╔══════════════════════════════════════════════════════════════╗ ║ UNIVERSAL MODEL TRAINER - STARTING... ║ ╠══════════════════════════════════════════════════════════════╣ ║ Host: {args.host:<54} ║ ║ Port: {args.port:<54} ║ ║ Workers: {args.workers:<52} ║ ║ Log Level: {args.log_level:<49} ║ ║ Reload: {str(args.reload):<53} ║ ╚══════════════════════════════════════════════════════════════╝ """) # Create necessary directories directories = [ "uploads", "models", "logs", "cache", "outputs", "checkpoints", "app/static/css", "app/static/js", "app/templates" ] for directory in directories: Path(directory).mkdir(parents=True, exist_ok=True) # Run the server uvicorn.run( "app.main:app", host=args.host, port=args.port, workers=args.workers, reload=args.reload, log_level=args.log_level, access_log=True, use_colors=True ) if __name__ == "__main__": main()