File size: 4,012 Bytes
553fbf7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"""
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))

    # Summary
    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()