import multiprocessing as mp from fastapi import APIRouter router = APIRouter() @router.get("/info") async def get_system_info(): """Return system info: CPU cores, GPU availability, parallel backend.""" cpu_cores = mp.cpu_count() or 1 # Check Ray ray_available = False ray_initialized = False try: from app.services.parallel_coverage_service import RAY_AVAILABLE ray_available = RAY_AVAILABLE if ray_available: import ray ray_initialized = ray.is_initialized() except Exception: pass # Check GPU gpu_info = None try: import cupy as cp if cp.cuda.runtime.getDeviceCount() > 0: props = cp.cuda.runtime.getDeviceProperties(0) gpu_info = { "name": props["name"].decode(), "memory_mb": props["totalGlobalMem"] // (1024 * 1024), } except Exception: pass return { "cpu_cores": cpu_cores, "parallel_workers": min(cpu_cores, 14), "parallel_backend": "ray" if ray_available else "sequential", "ray_available": ray_available, "ray_initialized": ray_initialized, "gpu": gpu_info, "gpu_enabled": gpu_info is not None, }