tabbyAPI-ollama/common/optional_dependencies.py
kingbri e0ffa90865 Dependencies: Change handling of exllamav2 checks
ExllamaV2 should check for solely exllamav2, otherwise errors don't
make sense. Migrate the combined "exl2" computed property to "inference"
since those are the required dependencies for minimal inference.

Signed-off-by: kingbri <bdashore3@proton.me>
2024-09-22 12:57:28 -04:00

52 lines
1.3 KiB
Python

"""Construct a model of all optional dependencies"""
import importlib.util
from pydantic import BaseModel, computed_field
# Declare the exported parts of this module
__all__ = ["dependencies"]
class DependenciesModel(BaseModel):
"""Model of which optional dependencies are installed."""
torch: bool
exllamav2: bool
flash_attn: bool
outlines: bool
infinity_emb: bool
sentence_transformers: bool
@computed_field
@property
def extras(self) -> bool:
return self.outlines and self.infinity_emb and self.sentence_transformers
@computed_field
@property
def inference(self) -> bool:
return self.torch and self.exllamav2 and self.flash_attn
def is_installed(package_name: str) -> bool:
"""Utility function to check if a package is installed."""
spec = importlib.util.find_spec(package_name)
return spec is not None
def get_installed_deps() -> DependenciesModel:
"""Check if optional dependencies are installed by looping over the fields."""
fields = DependenciesModel.model_fields
installed_deps = {}
for field_name in fields.keys():
installed_deps[field_name] = is_installed(field_name)
return DependenciesModel(**installed_deps)
dependencies = get_installed_deps()