Skip to content

Commit 59b14fb

Browse files
committed
Rework the imports to be more versatile
1 parent 1036929 commit 59b14fb

23 files changed

Lines changed: 112 additions & 245 deletions

docs/source/using-the-python-api.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import lighteval
1212
from lighteval.logging.evaluation_tracker import EvaluationTracker
1313
from lighteval.models.vllm.vllm_model import VLLMModelConfig
1414
from lighteval.pipeline import ParallelismManager, Pipeline, PipelineParameters
15-
from lighteval.utils.imports import is_accelerate_available
15+
from lighteval.utils.imports import is_package_available
1616

17-
if is_accelerate_available():
17+
if is_package_available("accelerate"):
1818
from datetime import timedelta
1919
from accelerate import Accelerator, InitProcessGroupKwargs
2020
accelerator = Accelerator(kwargs_handlers=[InitProcessGroupKwargs(timeout=timedelta(seconds=3000))])

src/lighteval/logging/evaluation_tracker.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@
4343
TaskConfigLogger,
4444
VersionsLogger,
4545
)
46-
from lighteval.utils.imports import NO_TENSORBOARDX_WARN_MSG, is_nanotron_available, is_tensorboardX_available
46+
from lighteval.utils.imports import is_package_available, not_installed_error_message
4747
from lighteval.utils.utils import obj_to_markdown
4848

4949

5050
logger = logging.getLogger(__name__)
5151

52-
if is_nanotron_available():
52+
if is_package_available("nanotron"):
5353
from nanotron.config import GeneralArgs # type: ignore
5454

5555
try:
@@ -645,11 +645,11 @@ def recreate_metadata_card(self, repo_id: str) -> None: # noqa: C901
645645
def push_to_tensorboard( # noqa: C901
646646
self, results: dict[str, dict[str, float]], details: dict[str, DetailsLogger.CompiledDetail]
647647
):
648-
if not is_tensorboardX_available:
649-
logger.warning(NO_TENSORBOARDX_WARN_MSG)
648+
if not is_package_available("tensorboardX"):
649+
logger.warning(not_installed_error_message("tensorboardX"))
650650
return
651651

652-
if not is_nanotron_available():
652+
if not is_package_available("nanotron"):
653653
logger.warning("You cannot push results to tensorboard without having nanotron installed. Skipping")
654654
return
655655

src/lighteval/logging/info_loggers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@
3535
from lighteval.models.model_output import ModelResponse
3636
from lighteval.tasks.lighteval_task import LightevalTask, LightevalTaskConfig
3737
from lighteval.tasks.requests import Doc
38-
from lighteval.utils.imports import is_nanotron_available
38+
from lighteval.utils.imports import is_package_available
3939

4040

4141
logger = logging.getLogger(__name__)
4242

4343

44-
if is_nanotron_available():
44+
if is_package_available("nanotron"):
4545
pass
4646

4747

src/lighteval/main_nanotron.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ def nanotron(
4848
"""
4949
Evaluate models using nanotron as backend.
5050
"""
51-
from lighteval.utils.imports import NO_NANOTRON_ERROR_MSG, is_nanotron_available
51+
from lighteval.utils.imports import NO_NANOTRON_ERROR_MSG, is_package_available
5252

53-
if not is_nanotron_available():
53+
if not is_package_available("nanotron"):
5454
raise ImportError(NO_NANOTRON_ERROR_MSG)
5555

5656
from nanotron.config import GeneralArgs, ModelArgs, TokenizerArgs, get_config_from_dict, get_config_from_file

src/lighteval/metrics/utils/linguistic_tokenizers.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@
1919

2020
from lighteval.utils.imports import (
2121
NO_SPACY_TOKENIZER_ERROR_MSG,
22-
NO_STANZA_TOKENIZER_ERROR_MSG,
2322
can_load_spacy_tokenizer,
24-
can_load_stanza_tokenizer,
23+
raise_if_package_not_available,
2524
)
2625
from lighteval.utils.language import Language
2726

@@ -140,8 +139,7 @@ def span_tokenize(self, text: str) -> list[tuple[int, int]]:
140139
class StanzaTokenizer(WordTokenizer):
141140
def __init__(self, stanza_language: str, **stanza_kwargs):
142141
super().__init__()
143-
if not can_load_stanza_tokenizer():
144-
raise ImportError(NO_STANZA_TOKENIZER_ERROR_MSG)
142+
raise_if_package_not_available("stanza")
145143
self.stanza_language = stanza_language
146144
self.stanza_kwargs = stanza_kwargs
147145
self._tokenizer = None

src/lighteval/metrics/utils/llm_as_judge.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from tqdm import tqdm
3434
from tqdm.asyncio import tqdm_asyncio
3535

36-
from lighteval.utils.imports import is_litellm_available, is_openai_available, is_vllm_available
36+
from lighteval.utils.imports import raise_if_package_not_available
3737
from lighteval.utils.utils import as_list
3838

3939

@@ -132,8 +132,7 @@ def __lazy_load_client(self): # noqa: C901
132132
# Both "openai" and "tgi" backends use the OpenAI-compatible API
133133
# They are handled separately to allow for backend-specific validation and setup
134134
case "openai" | "tgi":
135-
if not is_openai_available():
136-
raise RuntimeError("OpenAI backend is not available.")
135+
raise_if_package_not_available("openai")
137136
if self.client is None:
138137
from openai import OpenAI
139138

@@ -143,13 +142,11 @@ def __lazy_load_client(self): # noqa: C901
143142
return self.__call_api_parallel
144143

145144
case "litellm":
146-
if not is_litellm_available():
147-
raise RuntimeError("litellm is not available.")
145+
raise_if_package_not_available("litellm")
148146
return self.__call_litellm
149147

150148
case "vllm":
151-
if not is_vllm_available():
152-
raise RuntimeError("vllm is not available.")
149+
raise_if_package_not_available("vllm")
153150
if self.pipe is None:
154151
from vllm import LLM, SamplingParams
155152
from vllm.transformers_utils.tokenizer import get_tokenizer

src/lighteval/models/endpoints/tgi_model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@
3232
from lighteval.models.endpoints.endpoint_model import InferenceEndpointModel
3333
from lighteval.tasks.prompt_manager import PromptManager
3434
from lighteval.utils.cache_management import SampleCache
35-
from lighteval.utils.imports import NO_TGI_ERROR_MSG, is_tgi_available
35+
from lighteval.utils.imports import NO_TGI_ERROR_MSG, is_package_available
3636

3737

38-
if is_tgi_available():
38+
if is_package_available("tgi"):
3939
from text_generation import AsyncClient
4040
else:
4141
from unittest.mock import Mock
@@ -98,7 +98,7 @@ class ModelClient(InferenceEndpointModel):
9898
_DEFAULT_MAX_LENGTH: int = 4096
9999

100100
def __init__(self, config: TGIModelConfig) -> None:
101-
if not is_tgi_available():
101+
if not is_package_available("tgi"):
102102
raise ImportError(NO_TGI_ERROR_MSG)
103103
headers = (
104104
{} if config.inference_server_auth is None else {"Authorization": f"Bearer {config.inference_server_auth}"}

src/lighteval/models/model_loader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
NO_TGI_ERROR_MSG,
5050
NO_VLLM_ERROR_MSG,
5151
is_litellm_available,
52+
is_package_available,
5253
is_sglang_available,
53-
is_tgi_available,
5454
is_vllm_available,
5555
)
5656

@@ -105,7 +105,7 @@ def load_model( # noqa: C901
105105

106106

107107
def load_model_with_tgi(config: TGIModelConfig):
108-
if not is_tgi_available():
108+
if not is_package_available("tgi"):
109109
raise ImportError(NO_TGI_ERROR_MSG)
110110

111111
logger.info(f"Load model from inference server: {config.inference_server_address}")

src/lighteval/models/nanotron/nanotron_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
Doc,
5151
)
5252
from lighteval.utils.cache_management import SampleCache, cached
53-
from lighteval.utils.imports import is_nanotron_available
53+
from lighteval.utils.imports import is_package_available
5454
from lighteval.utils.parallelism import find_executable_batch_size
5555
from lighteval.utils.utils import as_list
5656

@@ -62,7 +62,7 @@
6262

6363
TokenSequence = Union[List[int], torch.LongTensor, torch.Tensor, BatchEncoding]
6464

65-
if is_nanotron_available():
65+
if is_package_available("nanotron"):
6666
from nanotron import distributed as dist
6767
from nanotron import logging
6868
from nanotron.config import GeneralArgs, ModelArgs, TokenizerArgs

src/lighteval/models/transformers/adapter_model.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@
3030

3131
from lighteval.models.transformers.transformers_model import TransformersModel, TransformersModelConfig
3232
from lighteval.models.utils import _get_dtype
33-
from lighteval.utils.imports import NO_PEFT_ERROR_MSG, is_peft_available
33+
from lighteval.utils.imports import is_package_available, raise_if_package_not_available
3434

3535

3636
logger = logging.getLogger(__name__)
3737

38-
if is_peft_available():
38+
if is_package_available("peft"):
3939
from peft import PeftModel
4040

4141

@@ -60,8 +60,7 @@ class AdapterModelConfig(TransformersModelConfig):
6060
base_model: str
6161

6262
def model_post_init(self, __context):
63-
if not is_peft_available():
64-
raise ImportError(NO_PEFT_ERROR_MSG)
63+
raise_if_package_not_available("peft")
6564

6665

6766
class AdapterModel(TransformersModel):

0 commit comments

Comments
 (0)