File size: 1,232 Bytes
dc229d4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
from __future__ import annotations

import importlib.util
import json


PACKAGE_MAP = {
    "mamba_ssm": "mamba-ssm",
    "transformers": "transformers",
}


def detect_missing_modules(required: list[str] | None = None) -> list[str]:
    names = required or list(PACKAGE_MAP)
    return [name for name in names if importlib.util.find_spec(name) is None]


def build_install_command(*, missing_modules: list[str]) -> list[str]:
    packages = [PACKAGE_MAP[name] for name in missing_modules if name in PACKAGE_MAP]
    if not packages:
        return []
    return ["python", "-m", "pip", "install", *packages]


def build_runtime_report(*, missing_modules: list[str]) -> dict[str, object]:
    return {
        "ready": len(missing_modules) == 0,
        "missing_modules": list(missing_modules),
        "packages": {name: PACKAGE_MAP[name] for name in missing_modules if name in PACKAGE_MAP},
        "install_command": build_install_command(missing_modules=missing_modules),
    }


def main() -> int:
    missing = detect_missing_modules()
    print(json.dumps(build_runtime_report(missing_modules=missing), indent=2, sort_keys=True))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())