Add version check for transformers package when trying to import bettertransformers#600
Add version check for transformers package when trying to import bettertransformers#600wirthual wants to merge 4 commits intomichaelfeil:mainfrom
Conversation
There was a problem hiding this comment.
PR Summary
Added version compatibility checking for transformers package in BetterTransformer integration to prevent runtime crashes with newer versions.
- Added version check in
libs/infinity_emb/infinity_emb/transformer/acceleration.pyto disable BetterTransformer when transformers package ≥ 4.49.0 - Implements graceful fallback behavior instead of crashing when incompatible versions are detected
1 file reviewed, 1 comment
Edit PR Review Bot Settings | Greptile
| if CHECK_OPTIMUM.is_available: | ||
| from optimum.bettertransformer import ( # type: ignore[import-untyped] | ||
| BetterTransformer, | ||
| BetterTransformerManager, | ||
| ) | ||
| transformers_version_string = version('transformers') | ||
| transformers_version = tuple([int(number) for number in transformers_version_string.split(".")]) | ||
| if transformers_version < (4,49,0): | ||
| bettertransformer_available = True | ||
| from optimum.bettertransformer import ( # type: ignore[import-untyped] | ||
| BetterTransformer, | ||
| BetterTransformerManager, | ||
| ) | ||
| else: | ||
| bettertransformer_available = False |
There was a problem hiding this comment.
logic: Make bettertransformer_available global before usage. If CHECK_OPTIMUM.is_available is False, this variable will be undefined when used later.
| if CHECK_OPTIMUM.is_available: | |
| from optimum.bettertransformer import ( # type: ignore[import-untyped] | |
| BetterTransformer, | |
| BetterTransformerManager, | |
| ) | |
| transformers_version_string = version('transformers') | |
| transformers_version = tuple([int(number) for number in transformers_version_string.split(".")]) | |
| if transformers_version < (4,49,0): | |
| bettertransformer_available = True | |
| from optimum.bettertransformer import ( # type: ignore[import-untyped] | |
| BetterTransformer, | |
| BetterTransformerManager, | |
| ) | |
| else: | |
| bettertransformer_available = False | |
| bettertransformer_available = False | |
| if CHECK_OPTIMUM.is_available: | |
| transformers_version_string = version('transformers') | |
| transformers_version = tuple([int(number) for number in transformers_version_string.split(".")]) | |
| if transformers_version < (4,49,0): | |
| bettertransformer_available = True | |
| from optimum.bettertransformer import ( # type: ignore[import-untyped] | |
| BetterTransformer, | |
| BetterTransformerManager, | |
| ) | |
| else: | |
| bettertransformer_available = False |
There was a problem hiding this comment.
Pull Request Overview
Adds a runtime check for the installed Transformers version to disable BetterTransformer when the version is 4.49.0 or higher.
- Import and parse
transformersversion - Conditionally set
bettertransformer_availableand import BetterTransformer - Early-return in relevant functions if BetterTransformer is unavailable
Comments suppressed due to low confidence (3)
libs/infinity_emb/infinity_emb/transformer/acceleration.py:65
- [nitpick] The warning could be more informative by including the detected transformers version in the message to aid debugging.
logger.warning(
libs/infinity_emb/infinity_emb/transformer/acceleration.py:13
- The new version-checking logic isn't covered by existing tests. Consider adding unit tests for scenarios below, at, and above the 4.49.0 threshold.
transformers_version = tuple([int(number) for number in transformers_version_string.split(".")])
libs/infinity_emb/infinity_emb/transformer/acceleration.py:9
- If
CHECK_OPTIMUM.is_availableis false,bettertransformer_availablewill never be defined, causing a NameError. Initializebettertransformer_available = Falsebefore this block.
from importlib.metadata import version
| BetterTransformer, | ||
| BetterTransformerManager, | ||
| ) | ||
| transformers_version_string = version('transformers') |
There was a problem hiding this comment.
Parsing the version string by splitting and int-casting can fail on pre-release or metadata tags. Consider using packaging.version.parse for robust comparisons.
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #600 +/- ##
==========================================
- Coverage 79.85% 79.34% -0.51%
==========================================
Files 43 43
Lines 3489 3500 +11
==========================================
- Hits 2786 2777 -9
- Misses 703 723 +20 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Related Issue
#590
Additional Notes
Check if transformers package is < 4.49 and if not, set flag to disable bettertransformers.