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", "127.0.0.1") 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()