Source code for langchain_huggingface.utils.import_utils

import importlib.metadata
import importlib.util
import operator as op
from typing import Union

from packaging import version

STR_OPERATION_TO_FUNC = {
    ">": op.gt,
    ">=": op.ge,
    "==": op.eq,
    "!=": op.ne,
    "<=": op.le,
    "<": op.lt,
}


_optimum_available = importlib.util.find_spec("optimum") is not None
_optimum_version = "N/A"
if _optimum_available:
    try:
        _optimum_version = importlib.metadata.version("optimum")
    except importlib.metadata.PackageNotFoundError:
        _optimum_available = False


_optimum_intel_available = (
    _optimum_available and importlib.util.find_spec("optimum.intel") is not None
)
_optimum_intel_version = "N/A"
if _optimum_intel_available:
    try:
        _optimum_intel_version = importlib.metadata.version("optimum-intel")
    except importlib.metadata.PackageNotFoundError:
        _optimum_intel_available = False


_ipex_available = importlib.util.find_spec("intel_extension_for_pytorch") is not None

_openvino_available = importlib.util.find_spec("openvino") is not None


# This function was copied from: https://github.com/huggingface/accelerate/blob/874c4967d94badd24f893064cc3bef45f57cadf7/src/accelerate/utils/versions.py#L319
[docs] def compare_versions( library_or_version: Union[str, version.Version], operation: str, requirement_version: str, ) -> bool: """ Compare a library version to some requirement using a given operation. Arguments: library_or_version (`str` or `packaging.version.Version`): A library name or a version to check. operation (`str`): A string representation of an operator, such as `">"` or `"<="`. requirement_version (`str`): The version to compare the library version against """ if operation not in STR_OPERATION_TO_FUNC.keys(): raise ValueError( f"`operation` must be one of {list(STR_OPERATION_TO_FUNC.keys())}" f", received {operation}" ) if isinstance(library_or_version, str): library_or_version = version.parse( importlib.metadata.version(library_or_version) ) return STR_OPERATION_TO_FUNC[operation]( library_or_version, version.parse(requirement_version) )
[docs] def is_optimum_available() -> bool: return _optimum_available
[docs] def is_optimum_intel_available() -> bool: return _optimum_intel_available
[docs] def is_ipex_available() -> bool: return _ipex_available
[docs] def is_openvino_available() -> bool: return _openvino_available
[docs] def is_optimum_version(operation: str, reference_version: str) -> bool: """ Compare the current Optimum version to a given reference with an operation. """ if not _optimum_version: return False return compare_versions( version.parse(_optimum_version), operation, reference_version )
[docs] def is_optimum_intel_version(operation: str, reference_version: str) -> bool: """ Compare the current Optimum Intel version to a given reference with an operation. """ if not _optimum_intel_version: return False return compare_versions( version.parse(_optimum_intel_version), operation, reference_version )
IMPORT_ERROR = """ requires the {0} library but it was not found in your environment. You can install it with pip: `pip install {0}`. Please note that you may need to restart your runtime after installation. """