import sys import importlib import subprocess import platform import os from pathlib import Path def print_status(message, success): if success: print(f"\033[92m[✓]\033[0m {message}") else: print(f"\033[91m[✗]\033[0m {message}") def main(): os_name = platform.system() # Enable ANSI colors for Windows terminal if os_name == 'Windows': os.system('color') print("\n--- MedSight AI Environment Verification ---\n") all_passed = True issues = [] # 1. Check Python Version py_version = f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" if py_version == "3.10.13": print_status(f"Python Version: {py_version}", True) else: print_status(f"Python Version: {py_version} (Expected 3.10.13)", False) all_passed = False issues.append("Install exact Python 3.10.13 via Conda.") # 2. Check PyTorch & CUDA try: import torch if torch.__version__.startswith("2.2.0"): print_status(f"PyTorch Version: {torch.__version__}", True) else: print_status(f"PyTorch Version: {torch.__version__} (Expected 2.2.0)", False) all_passed = False issues.append("Reinstall PyTorch 2.2.0 for CUDA 11.8.") if torch.cuda.is_available(): vram_gb = torch.cuda.get_device_properties(0).total_memory / (1024**3) print_status(f"CUDA Available: YES ({torch.cuda.get_device_name(0)} - {vram_gb:.1f}GB VRAM)", True) else: print_status("CUDA Available: NO", False) all_passed = False issues.append("CUDA is not accessible. Check NVIDIA drivers and PyTorch CUDA build.") except ImportError: print_status("PyTorch not installed", False) all_passed = False issues.append("Install PyTorch.") # 3. Check Transformers try: import transformers if transformers.__version__ == "4.38.2": print_status(f"Transformers Version: {transformers.__version__}", True) else: print_status(f"Transformers Version: {transformers.__version__} (Expected 4.38.2)", False) all_passed = False issues.append("Install exact transformers version from requirements.txt.") except ImportError: print_status("Transformers not installed", False) all_passed = False # 4. Check Packages importable packages_to_test = ["fastapi", "sqlalchemy", "chromadb", "cv2", "PIL", "jose"] for pkg in packages_to_test: try: importlib.import_module(pkg) except ImportError: print_status(f"Package missing: {pkg}", False) all_passed = False issues.append(f"Install missing package: {pkg}") print_status("All key packages imported", len(issues) == 0 or all_passed) # 5. Check HF_HOME hf_home = os.getenv("HF_HOME") if hf_home: path = Path(hf_home) try: path.mkdir(parents=True, exist_ok=True) print_status(f"HF_HOME is set and writable ({hf_home})", True) except Exception: print_status(f"HF_HOME is set but NOT writable ({hf_home})", False) all_passed = False issues.append("Fix permissions for HF_HOME directory.") else: print_status("HF_HOME is NOT set", False) all_passed = False issues.append("Set HF_HOME environment variable permanently via PowerShell.") # 6. Test HuggingFace Download try: from huggingface_hub import hf_hub_download hf_hub_download(repo_id="lysandre/helloworld", filename="config.json") print_status("HuggingFace Hub download successful", True) except Exception as e: print_status("HuggingFace Hub download failed", False) all_passed = False issues.append(f"HuggingFace connection/download error: {e}") # 7. Check ffmpeg try: subprocess.run(["ffmpeg", "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True) print_status("ffmpeg accessible in PATH", True) except (subprocess.CalledProcessError, FileNotFoundError): print_status("ffmpeg NOT accessible in PATH", False) all_passed = False issues.append("Install ffmpeg and add to Windows PATH.") print("\n--------------------------------------------") if all_passed: print("\033[92m🟢 ALL SYSTEMS GO\033[0m\n") else: print("\033[91m🔴 FIX THESE ISSUES:\033[0m") for idx, issue in enumerate(issues, 1): print(f" {idx}. {issue}") print() if __name__ == "__main__": main()