File size: 2,187 Bytes
3cd1076 | 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 | import importlib
import sys
import logging
from typing import Tuple, List, Union
from importlib.metadata import version, PackageNotFoundError
import pkg_resources
logger = logging.getLogger(__name__)
def get_python_version():
return sys.version_info
def _is_package_available(package_name: str, skippable: bool = False):
assert isinstance(package_name, str), f"Invalid type of package_name: {type(package_name)}"
try:
importlib.import_module(package_name)
return True
except Exception as e:
if e.__class__ == ModuleNotFoundError:
return False
else:
if skippable:
logger.warning(f'An error occurred when importing {package_name}:\n{e}\n{package_name} is disabled.')
return False
else:
raise e
def _is_packages_available(packages: Union[List[str], List[Tuple[str, bool]]]):
if isinstance(packages[0], str):
return all([_is_package_available(package) for package in packages])
elif isinstance(packages[0], tuple):
return all([_is_package_available(package, skippable) for package, skippable in packages])
else:
raise ValueError(f"Invalid type of packages: {type(packages[0])}")
def is_package_version_at_least(package_name, min_version):
try:
package_version = pkg_resources.get_distribution(package_name).version
if (pkg_resources.parse_version(package_version)
< pkg_resources.parse_version(min_version)):
return False
except pkg_resources.DistributionNotFound:
return False
return True
def is_gradio_available():
return _is_package_available("gradio")
def is_ray_available():
return _is_package_available("ray")
def is_vllm_available():
return _is_package_available("vllm")
def is_flash_attn_available():
return _is_package_available("flash_attn", skippable=True)
def is_flask_available():
return _is_packages_available(["flask", "flask_cors"])
def is_trl_available():
return _is_package_available("trl")
def is_multimodal_available():
return _is_packages_available(["PIL"]) |