| """ |
| MINDI 1.5 Vision-Coder β Installation Verification Script |
| |
| Checks that every required package is importable and reports |
| versions + GPU status. Run after Phase 3 setup. |
| """ |
|
|
| from __future__ import annotations |
|
|
| import sys |
| from importlib.metadata import version as pkg_version |
|
|
|
|
| def check(package_name: str, import_name: str | None = None) -> bool: |
| """Try to import a package and report status.""" |
| mod = import_name or package_name |
| try: |
| __import__(mod) |
| v = pkg_version(package_name) |
| print(f" \u2705 {package_name} {v}") |
| return True |
| except Exception as e: |
| print(f" \u274c {package_name} β FAILED β {e}") |
| return False |
|
|
|
|
| def check_cuda() -> bool: |
| """Verify PyTorch CUDA availability.""" |
| try: |
| import torch |
| v = torch.__version__ |
| if torch.cuda.is_available(): |
| gpu = torch.cuda.get_device_name(0) |
| vram = round(torch.cuda.get_device_properties(0).total_memory / 1e9, 2) |
| print(f" \u2705 torch {v} β CUDA available β {gpu} ({vram} GB)") |
| return True |
| else: |
| print(f" \u26a0\ufe0f torch {v} β NO CUDA (CPU only)") |
| return False |
| except Exception as e: |
| print(f" \u274c torch β FAILED β {e}") |
| return False |
|
|
|
|
| def main() -> None: |
| print("=" * 60) |
| print(" MINDI 1.5 Vision-Coder β Package Verification") |
| print("=" * 60) |
| print(f"\n Python: {sys.version}") |
| print(f" Executable: {sys.executable}\n") |
|
|
| results: list[bool] = [] |
|
|
| print("[PyTorch + CUDA]") |
| results.append(check_cuda()) |
| check("torchvision") |
| check("torchaudio") |
|
|
| print("\n[Group A β Core Transformers]") |
| for pkg in ["transformers", "datasets", "tokenizers", "accelerate", "peft", "huggingface-hub"]: |
| imp = pkg.replace("-", "_") |
| results.append(check(pkg, imp)) |
|
|
| print("\n[Group B β Vision]") |
| results.append(check("pillow", "PIL")) |
| results.append(check("opencv-python", "cv2")) |
| results.append(check("open-clip-torch", "open_clip")) |
|
|
| print("\n[Group C β Search]") |
| for pkg, imp in [("tavily-python", "tavily"), ("duckduckgo-search", "duckduckgo_search"), |
| ("beautifulsoup4", "bs4"), ("playwright", "playwright"), |
| ("requests", "requests"), ("httpx", "httpx"), ("lxml", "lxml")]: |
| results.append(check(pkg, imp)) |
|
|
| print("\n[Group D β Sandbox]") |
| results.append(check("e2b")) |
| results.append(check("docker")) |
|
|
| print("\n[Group E β Web Framework]") |
| for pkg, imp in [("fastapi", "fastapi"), ("uvicorn", "uvicorn"), ("websockets", "websockets"), |
| ("python-multipart", "multipart"), ("python-jose", "jose"), ("passlib", "passlib")]: |
| results.append(check(pkg, imp)) |
|
|
| print("\n[Group F β Training Utilities]") |
| for pkg, imp in [("wandb", "wandb"), ("bitsandbytes", "bitsandbytes"), ("scipy", "scipy"), |
| ("scikit-learn", "sklearn"), ("einops", "einops")]: |
| results.append(check(pkg, imp)) |
|
|
| print("\n[Group G β Vector Store / RAG]") |
| results.append(check("faiss-cpu", "faiss")) |
| results.append(check("sentence-transformers", "sentence_transformers")) |
|
|
| print("\n[Group H β Utilities]") |
| for pkg, imp in [("rich", "rich"), ("tqdm", "tqdm"), ("python-dotenv", "dotenv"), |
| ("pyyaml", "yaml"), ("numpy", "numpy"), ("pandas", "pandas"), |
| ("matplotlib", "matplotlib")]: |
| results.append(check(pkg, imp)) |
|
|
| print("\n[Group I β Code Quality]") |
| for pkg in ["black", "isort", "mypy"]: |
| results.append(check(pkg)) |
|
|
| |
| passed = sum(results) |
| total = len(results) |
| print("\n" + "=" * 60) |
| if passed == total: |
| print(f" \u2705 ALL {total} PACKAGES VERIFIED β READY TO BUILD!") |
| else: |
| print(f" \u26a0\ufe0f {passed}/{total} passed β {total - passed} need fixing") |
| print("=" * 60) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|