import uvicorn import os import sys import subprocess from dotenv import load_dotenv def setup_environment(): """Ensure dependencies are installed and .env exists.""" print("šŸš€ Initializing Storyline AI Gateway...") # 1. Check for .env file if not os.path.exists(".env"): print("āš ļø Warning: .env file not found!") print("Please create a .env file based on the documentation.") # 2. Check for virtual environment and install dependencies if requested if len(sys.argv) > 1 and sys.argv[1] == "--install": print("šŸ“¦ Installing dependencies from requirements.txt...") try: subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"]) print("āœ… Dependencies installed successfully.") except Exception as e: print(f"āŒ Error installing dependencies: {e}") sys.exit(1) def run_server(): """Start the FastAPI server.""" load_dotenv() # Configuration host = os.getenv("HOST", "0.0.0.0") port = int(os.getenv("PORT", 8000)) # On a server, we usually don't want reload=True by default for performance # But for a 'test server', it might be useful. reload = os.getenv("DEBUG", "false").lower() == "true" print(f"\n🌐 Gateway starting at http://{host}:{port}") print(f"šŸ› ļø Admin Dashboard: http://{host}:{port}/admin") print(f"šŸ“š API Docs: http://{host}:{port}/docs") print(f"šŸ”„ Mode: {'Development (Reload On)' if reload else 'Production (Reload Off)'}\n") uvicorn.run( "app.main:app", host=host, port=port, reload=reload, workers=1 if reload else 4 # Multi-worker for production ) if __name__ == "__main__": setup_environment() run_server()