#!/usr/bin/env python3 import os import sys import subprocess import time from pathlib import Path def run_command(cmd): print(f"Running command: {' '.join(cmd)}") process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) for line in process.stdout: sys.stdout.write(line) sys.stdout.flush() process.wait() return process.returncode def check_required_files(): required_files = [ "pyscout_api.py", "deepinfra_client.py", "proxy_finder.py", "db_helper.py", "hf_utils.py", ] for file in required_files: if not Path(file).exists(): print(f"ERROR: Required file '{file}' not found!") return False return True def wait_for_mongodb(): import time import pymongo mongo_uri = os.environ.get("MONGODB_URI") if not mongo_uri: print("MongoDB URI not found in environment variables, skipping connection check") return True max_attempts = 30 for attempt in range(max_attempts): try: client = pymongo.MongoClient(mongo_uri, serverSelectionTimeoutMS=5000) client.admin.command('ping') print(f"MongoDB connection successful after {attempt+1} attempts") return True except Exception as e: print(f"Attempt {attempt+1}/{max_attempts}: MongoDB not yet available. Waiting... ({str(e)})") time.sleep(2) print("ERROR: Failed to connect to MongoDB after multiple attempts") return False def main(): if not check_required_files(): sys.exit(1) # Always run in API mode with fixed host and port print("Starting PyScoutAI API server") wait_for_mongodb() host = os.environ.get("HOST", "0.0.0.0") port = int(os.environ.get("PORT", "7860")) cmd = [ "uvicorn", "pyscout_api:app", "--host", host, "--port", str(port) ] return run_command(cmd) if __name__ == "__main__": sys.exit(main())