Skip to content

Commit bc3c73a

Browse files
yiyixuxusayakpaul
andauthored
add sentencepiece as a soft dependency (huggingface#9065)
* add sentencepiece as soft dependency for kolors * up --------- Co-authored-by: Sayak Paul <[email protected]>
1 parent 5934873 commit bc3c73a

File tree

9 files changed

+114
-88
lines changed

9 files changed

+114
-88
lines changed

src/diffusers/__init__.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
is_note_seq_available,
1313
is_onnx_available,
1414
is_scipy_available,
15+
is_sentencepiece_available,
1516
is_torch_available,
1617
is_torchsde_available,
1718
is_transformers_available,
@@ -246,8 +247,6 @@
246247
"AuraFlowPipeline",
247248
"BlipDiffusionControlNetPipeline",
248249
"BlipDiffusionPipeline",
249-
"ChatGLMModel",
250-
"ChatGLMTokenizer",
251250
"CLIPImageProjection",
252251
"CycleDiffusionPipeline",
253252
"FluxPipeline",
@@ -386,6 +385,19 @@
386385
else:
387386
_import_structure["pipelines"].extend(["StableDiffusionKDiffusionPipeline", "StableDiffusionXLKDiffusionPipeline"])
388387

388+
try:
389+
if not (is_torch_available() and is_transformers_available() and is_sentencepiece_available()):
390+
raise OptionalDependencyNotAvailable()
391+
except OptionalDependencyNotAvailable:
392+
from .utils import dummy_torch_and_transformers_and_sentencepiece_objects # noqa F403
393+
394+
_import_structure["utils.dummy_torch_and_transformers_and_sentencepiece_objects"] = [
395+
name for name in dir(dummy_torch_and_transformers_and_sentencepiece_objects) if not name.startswith("_")
396+
]
397+
398+
else:
399+
_import_structure["pipelines"].extend(["KolorsImg2ImgPipeline", "KolorsPipeline"])
400+
389401
try:
390402
if not (is_torch_available() and is_transformers_available() and is_onnx_available()):
391403
raise OptionalDependencyNotAvailable()
@@ -670,8 +682,6 @@
670682
AudioLDM2UNet2DConditionModel,
671683
AudioLDMPipeline,
672684
AuraFlowPipeline,
673-
ChatGLMModel,
674-
ChatGLMTokenizer,
675685
CLIPImageProjection,
676686
CycleDiffusionPipeline,
677687
FluxPipeline,
@@ -705,8 +715,6 @@
705715
KandinskyV22Pipeline,
706716
KandinskyV22PriorEmb2EmbPipeline,
707717
KandinskyV22PriorPipeline,
708-
KolorsImg2ImgPipeline,
709-
KolorsPipeline,
710718
LatentConsistencyModelImg2ImgPipeline,
711719
LatentConsistencyModelPipeline,
712720
LattePipeline,
@@ -804,6 +812,13 @@
804812
else:
805813
from .pipelines import StableDiffusionKDiffusionPipeline, StableDiffusionXLKDiffusionPipeline
806814

815+
try:
816+
if not (is_torch_available() and is_transformers_available() and is_sentencepiece_available()):
817+
raise OptionalDependencyNotAvailable()
818+
except OptionalDependencyNotAvailable:
819+
from .utils.dummy_torch_and_transformers_and_sentencepiece_objects import * # noqa F403
820+
else:
821+
from .pipelines import KolorsImg2ImgPipeline, KolorsPipeline
807822
try:
808823
if not (is_torch_available() and is_transformers_available() and is_onnx_available()):
809824
raise OptionalDependencyNotAvailable()

src/diffusers/pipelines/__init__.py

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
is_librosa_available,
1111
is_note_seq_available,
1212
is_onnx_available,
13+
is_sentencepiece_available,
1314
is_torch_available,
1415
is_torch_npu_available,
1516
is_transformers_available,
@@ -205,12 +206,6 @@
205206
"Kandinsky3Img2ImgPipeline",
206207
"Kandinsky3Pipeline",
207208
]
208-
_import_structure["kolors"] = [
209-
"KolorsPipeline",
210-
"KolorsImg2ImgPipeline",
211-
"ChatGLMModel",
212-
"ChatGLMTokenizer",
213-
]
214209
_import_structure["latent_consistency_models"] = [
215210
"LatentConsistencyModelImg2ImgPipeline",
216211
"LatentConsistencyModelPipeline",
@@ -350,6 +345,22 @@
350345
"StableDiffusionKDiffusionPipeline",
351346
"StableDiffusionXLKDiffusionPipeline",
352347
]
348+
349+
try:
350+
if not (is_torch_available() and is_transformers_available() and is_sentencepiece_available()):
351+
raise OptionalDependencyNotAvailable()
352+
except OptionalDependencyNotAvailable:
353+
from ..utils import (
354+
dummy_torch_and_transformers_and_sentencepiece_objects,
355+
)
356+
357+
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_and_sentencepiece_objects))
358+
else:
359+
_import_structure["kolors"] = [
360+
"KolorsPipeline",
361+
"KolorsImg2ImgPipeline",
362+
]
363+
353364
try:
354365
if not is_flax_available():
355366
raise OptionalDependencyNotAvailable()
@@ -507,12 +518,6 @@
507518
Kandinsky3Img2ImgPipeline,
508519
Kandinsky3Pipeline,
509520
)
510-
from .kolors import (
511-
ChatGLMModel,
512-
ChatGLMTokenizer,
513-
KolorsImg2ImgPipeline,
514-
KolorsPipeline,
515-
)
516521
from .latent_consistency_models import (
517522
LatentConsistencyModelImg2ImgPipeline,
518523
LatentConsistencyModelPipeline,
@@ -642,6 +647,17 @@
642647
StableDiffusionXLKDiffusionPipeline,
643648
)
644649

650+
try:
651+
if not (is_torch_available() and is_transformers_available() and is_sentencepiece_available()):
652+
raise OptionalDependencyNotAvailable()
653+
except OptionalDependencyNotAvailable:
654+
from ..utils.dummy_torch_and_transformers_and_sentencepiece_objects import *
655+
else:
656+
from .kolors import (
657+
KolorsImg2ImgPipeline,
658+
KolorsPipeline,
659+
)
660+
645661
try:
646662
if not is_flax_available():
647663
raise OptionalDependencyNotAvailable()

src/diffusers/pipelines/auto_pipeline.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from huggingface_hub.utils import validate_hf_hub_args
1919

2020
from ..configuration_utils import ConfigMixin
21+
from ..utils import is_sentencepiece_available
2122
from .aura_flow import AuraFlowPipeline
2223
from .controlnet import (
2324
StableDiffusionControlNetImg2ImgPipeline,
@@ -47,7 +48,6 @@
4748
KandinskyV22Pipeline,
4849
)
4950
from .kandinsky3 import Kandinsky3Img2ImgPipeline, Kandinsky3Pipeline
50-
from .kolors import KolorsImg2ImgPipeline, KolorsPipeline
5151
from .latent_consistency_models import LatentConsistencyModelImg2ImgPipeline, LatentConsistencyModelPipeline
5252
from .pag import (
5353
HunyuanDiTPAGPipeline,
@@ -103,7 +103,6 @@
103103
("stable-diffusion-xl-controlnet-pag", StableDiffusionXLControlNetPAGPipeline),
104104
("pixart-sigma-pag", PixArtSigmaPAGPipeline),
105105
("auraflow", AuraFlowPipeline),
106-
("kolors", KolorsPipeline),
107106
("flux", FluxPipeline),
108107
]
109108
)
@@ -121,7 +120,6 @@
121120
("stable-diffusion-xl-controlnet", StableDiffusionXLControlNetImg2ImgPipeline),
122121
("stable-diffusion-xl-pag", StableDiffusionXLPAGImg2ImgPipeline),
123122
("lcm", LatentConsistencyModelImg2ImgPipeline),
124-
("kolors", KolorsImg2ImgPipeline),
125123
]
126124
)
127125

@@ -160,6 +158,12 @@
160158
]
161159
)
162160

161+
if is_sentencepiece_available():
162+
from .kolors import KolorsPipeline
163+
164+
AUTO_TEXT2IMAGE_PIPELINES_MAPPING["kolors"] = KolorsPipeline
165+
AUTO_IMAGE2IMAGE_PIPELINES_MAPPING["kolors"] = KolorsPipeline
166+
163167
SUPPORTED_TASKS_MAPPINGS = [
164168
AUTO_TEXT2IMAGE_PIPELINES_MAPPING,
165169
AUTO_IMAGE2IMAGE_PIPELINES_MAPPING,

src/diffusers/pipelines/kolors/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
OptionalDependencyNotAvailable,
66
_LazyModule,
77
get_objects_from_module,
8+
is_sentencepiece_available,
89
is_torch_available,
910
is_transformers_available,
1011
)
@@ -14,12 +15,12 @@
1415
_import_structure = {}
1516

1617
try:
17-
if not (is_transformers_available() and is_torch_available()):
18+
if not (is_transformers_available() and is_torch_available()) and is_sentencepiece_available():
1819
raise OptionalDependencyNotAvailable()
1920
except OptionalDependencyNotAvailable:
20-
from ...utils import dummy_torch_and_transformers_objects # noqa F403
21+
from ...utils import dummy_torch_and_transformers_and_sentencepiece_objects # noqa F403
2122

22-
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_objects))
23+
_dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_and_sentencepiece_objects))
2324
else:
2425
_import_structure["pipeline_kolors"] = ["KolorsPipeline"]
2526
_import_structure["pipeline_kolors_img2img"] = ["KolorsImg2ImgPipeline"]
@@ -28,10 +29,10 @@
2829

2930
if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT:
3031
try:
31-
if not (is_transformers_available() and is_torch_available()):
32+
if not (is_transformers_available() and is_torch_available()) and is_sentencepiece_available():
3233
raise OptionalDependencyNotAvailable()
3334
except OptionalDependencyNotAvailable:
34-
from ...utils.dummy_torch_and_transformers_objects import *
35+
from ...utils.dummy_torch_and_transformers_and_sentencepiece_objects import *
3536

3637
else:
3738
from .pipeline_kolors import KolorsPipeline

src/diffusers/utils/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
is_peft_version,
7979
is_safetensors_available,
8080
is_scipy_available,
81+
is_sentencepiece_available,
8182
is_tensorboard_available,
8283
is_timm_available,
8384
is_torch_available,
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# This file is autogenerated by the command `make fix-copies`, do not edit.
2+
from ..utils import DummyObject, requires_backends
3+
4+
5+
class KolorsImg2ImgPipeline(metaclass=DummyObject):
6+
_backends = ["torch", "transformers", "sentencepiece"]
7+
8+
def __init__(self, *args, **kwargs):
9+
requires_backends(self, ["torch", "transformers", "sentencepiece"])
10+
11+
@classmethod
12+
def from_config(cls, *args, **kwargs):
13+
requires_backends(cls, ["torch", "transformers", "sentencepiece"])
14+
15+
@classmethod
16+
def from_pretrained(cls, *args, **kwargs):
17+
requires_backends(cls, ["torch", "transformers", "sentencepiece"])
18+
19+
20+
class KolorsPipeline(metaclass=DummyObject):
21+
_backends = ["torch", "transformers", "sentencepiece"]
22+
23+
def __init__(self, *args, **kwargs):
24+
requires_backends(self, ["torch", "transformers", "sentencepiece"])
25+
26+
@classmethod
27+
def from_config(cls, *args, **kwargs):
28+
requires_backends(cls, ["torch", "transformers", "sentencepiece"])
29+
30+
@classmethod
31+
def from_pretrained(cls, *args, **kwargs):
32+
requires_backends(cls, ["torch", "transformers", "sentencepiece"])

src/diffusers/utils/dummy_torch_and_transformers_objects.py

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -242,36 +242,6 @@ def from_pretrained(cls, *args, **kwargs):
242242
requires_backends(cls, ["torch", "transformers"])
243243

244244

245-
class ChatGLMModel(metaclass=DummyObject):
246-
_backends = ["torch", "transformers"]
247-
248-
def __init__(self, *args, **kwargs):
249-
requires_backends(self, ["torch", "transformers"])
250-
251-
@classmethod
252-
def from_config(cls, *args, **kwargs):
253-
requires_backends(cls, ["torch", "transformers"])
254-
255-
@classmethod
256-
def from_pretrained(cls, *args, **kwargs):
257-
requires_backends(cls, ["torch", "transformers"])
258-
259-
260-
class ChatGLMTokenizer(metaclass=DummyObject):
261-
_backends = ["torch", "transformers"]
262-
263-
def __init__(self, *args, **kwargs):
264-
requires_backends(self, ["torch", "transformers"])
265-
266-
@classmethod
267-
def from_config(cls, *args, **kwargs):
268-
requires_backends(cls, ["torch", "transformers"])
269-
270-
@classmethod
271-
def from_pretrained(cls, *args, **kwargs):
272-
requires_backends(cls, ["torch", "transformers"])
273-
274-
275245
class CLIPImageProjection(metaclass=DummyObject):
276246
_backends = ["torch", "transformers"]
277247

@@ -767,36 +737,6 @@ def from_pretrained(cls, *args, **kwargs):
767737
requires_backends(cls, ["torch", "transformers"])
768738

769739

770-
class KolorsImg2ImgPipeline(metaclass=DummyObject):
771-
_backends = ["torch", "transformers"]
772-
773-
def __init__(self, *args, **kwargs):
774-
requires_backends(self, ["torch", "transformers"])
775-
776-
@classmethod
777-
def from_config(cls, *args, **kwargs):
778-
requires_backends(cls, ["torch", "transformers"])
779-
780-
@classmethod
781-
def from_pretrained(cls, *args, **kwargs):
782-
requires_backends(cls, ["torch", "transformers"])
783-
784-
785-
class KolorsPipeline(metaclass=DummyObject):
786-
_backends = ["torch", "transformers"]
787-
788-
def __init__(self, *args, **kwargs):
789-
requires_backends(self, ["torch", "transformers"])
790-
791-
@classmethod
792-
def from_config(cls, *args, **kwargs):
793-
requires_backends(cls, ["torch", "transformers"])
794-
795-
@classmethod
796-
def from_pretrained(cls, *args, **kwargs):
797-
requires_backends(cls, ["torch", "transformers"])
798-
799-
800740
class LatentConsistencyModelImg2ImgPipeline(metaclass=DummyObject):
801741
_backends = ["torch", "transformers"]
802742

src/diffusers/utils/import_utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,13 @@
294294
except importlib_metadata.PackageNotFoundError:
295295
_torchvision_available = False
296296

297+
_sentencepiece_available = importlib.util.find_spec("sentencepiece") is not None
298+
try:
299+
_sentencepiece_version = importlib_metadata.version("sentencepiece")
300+
logger.info(f"Successfully imported sentencepiece version {_sentencepiece_version}")
301+
except importlib_metadata.PackageNotFoundError:
302+
_sentencepiece_available = False
303+
297304
_matplotlib_available = importlib.util.find_spec("matplotlib") is not None
298305
try:
299306
_matplotlib_version = importlib_metadata.version("matplotlib")
@@ -436,6 +443,10 @@ def is_google_colab():
436443
return _is_google_colab
437444

438445

446+
def is_sentencepiece_available():
447+
return _sentencepiece_available
448+
449+
439450
# docstyle-ignore
440451
FLAX_IMPORT_ERROR = """
441452
{0} requires the FLAX library but it was not found in your environment. Checkout the instructions on the
@@ -553,6 +564,12 @@ def is_google_colab():
553564
{0} requires the safetensors library but it was not found in your environment. You can install it with pip: `pip install safetensors`
554565
"""
555566

567+
# docstyle-ignore
568+
SENTENCEPIECE_IMPORT_ERROR = """
569+
{0} requires the sentencepiece library but it was not found in your environment. You can install it with pip: `pip install sentencepiece`
570+
"""
571+
572+
556573
# docstyle-ignore
557574
BITSANDBYTES_IMPORT_ERROR = """
558575
{0} requires the bitsandbytes library but it was not found in your environment. You can install it with pip: `pip install bitsandbytes`
@@ -581,6 +598,7 @@ def is_google_colab():
581598
("peft", (is_peft_available, PEFT_IMPORT_ERROR)),
582599
("safetensors", (is_safetensors_available, SAFETENSORS_IMPORT_ERROR)),
583600
("bitsandbytes", (is_bitsandbytes_available, BITSANDBYTES_IMPORT_ERROR)),
601+
("sentencepiece", (is_sentencepiece_available, SENTENCEPIECE_IMPORT_ERROR)),
584602
]
585603
)
586604

0 commit comments

Comments
 (0)