ai-simple-engine-runtime-diffusers 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,7 @@ from ai_simple_engine.execution.execution_context import ExecutionContext
4
4
  from ai_simple_engine_runtime_diffusers.models.executor.prompt_embeddings.prompt_embeddings import PromptEmbeddings
5
5
  from ai_simple_engine_runtime_diffusers.models.scheduler.registry.diffusers_scheduler_registry import DiffusersSchedulerRegistry
6
6
  from ai_simple_engine.models.loaded_model import LoadedModel
7
+ from ai_simple_engine.types.image import Image
7
8
 
8
9
  import torch
9
10
 
@@ -26,9 +27,9 @@ class DiffusersLatentDiffusionModelExecutor (
26
27
  context: ExecutionContext,
27
28
  model: LoadedModel,
28
29
  ):
29
- scheduler_registry = context.services.resolve(DiffusersSchedulerRegistry)
30
+ scheduler_registry = context.services.get(DiffusersSchedulerRegistry)
30
31
 
31
- scheduler_class = scheduler_registry.resolve(model.info.scheduler.name)
32
+ scheduler_class = scheduler_registry.resolve(model.info.scheduler.identifier)
32
33
 
33
34
  scheduler = scheduler_class.from_config(
34
35
  model.instance.scheduler_config,
@@ -109,15 +110,23 @@ class DiffusersLatentDiffusionModelExecutor (
109
110
  async def decode_latents(
110
111
  self,
111
112
  *,
112
- model,
113
+ model: LoadedModel,
113
114
  latents
114
- ):
115
- runtime_model = model.model
115
+ ) -> Image:
116
+ runtime_model = model.instance
116
117
 
117
118
  vae = runtime_model.vae
118
119
 
119
120
  latents = latents / vae.config.scaling_factor
120
121
 
121
122
  image = vae.decode(latents).sample
123
+ """
124
+ TODO: I don't know if this must be done always
125
+ or depending or what, but I should pay attention
126
+ and refactor it.
127
+ """
128
+ image = (image / 2 + 0.5).clamp(0, 1)
129
+ image = image.cpu().permute(0, 2, 3, 1).float().detach().numpy()
130
+ image = Image(image)
122
131
 
123
132
  return image
@@ -9,12 +9,17 @@ from ai_simple_engine.models.loaded_model import LoadedModel
9
9
  from transformers import CLIPTokenizer, CLIPTextModel
10
10
  from diffusers import UNet2DConditionModel, AutoencoderKL
11
11
 
12
- import torch
13
-
14
12
 
15
13
  class LatentDiffusionModelLoader(
16
14
  ModelLoader
17
15
  ):
16
+
17
+ @property
18
+ def family(
19
+ self
20
+ ) -> str:
21
+ # TODO: Transform into const
22
+ return 'latent_diffusion'
18
23
 
19
24
  async def load(
20
25
  self,
@@ -27,7 +32,7 @@ class LatentDiffusionModelLoader(
27
32
  path,
28
33
  subfolder = 'tokenizer',
29
34
  torch_dtype = get_torch_dtype_for(device)
30
- ).to(str(device))
35
+ )#.to(str(device))
31
36
 
32
37
  text_encoder = CLIPTextModel.from_pretrained(
33
38
  path,
@@ -47,11 +52,25 @@ class LatentDiffusionModelLoader(
47
52
  torch_dtype = get_torch_dtype_for(device)
48
53
  ).to(str(device))
49
54
 
55
+ # TODO: This is if I want its own Scheduler
56
+ # DDIMScheduler.from_pretrained(
57
+ # path,
58
+ # subfolder = 'scheduler',
59
+ # torch_dtype = get_torch_dtype_for(device)
60
+ # )#.to(str(device))
61
+
62
+ # TODO: We had this before but was failing
50
63
  scheduler_config = AutoencoderKL.load_config(
51
- path,
64
+ path + '/scheduler/scheduler_config.json',
52
65
  subfolder = 'scheduler',
53
66
  torch_dtype = get_torch_dtype_for(device)
54
- ).to(str(device))
67
+ )#.to(str(device))
68
+
69
+ # Free memory
70
+ # TODO: Explain why (?)
71
+ unet.eval()
72
+ text_encoder.eval()
73
+ vae.eval()
55
74
 
56
75
  runtime_model = DiffusersLatentDiffusionModel(
57
76
  tokenizer = tokenizer,
@@ -5,8 +5,10 @@ from diffusers.schedulers.scheduling_utils import SchedulerMixin
5
5
  class DiffusersSchedulerRegistry(
6
6
  ResolverRegistry[
7
7
  str,
8
- type[SchedulerMixin]
9
- ]
8
+ type[SchedulerMixin],
9
+ str
10
+ ],
11
+ # Generic[TModel, TExecutor]
10
12
  ):
11
13
  """
12
14
  Class that will register the different
@@ -19,26 +19,4 @@ SCHEDULERS = {
19
19
  """
20
20
  The list including all the schedulers we are
21
21
  accepting.
22
- """
23
-
24
-
25
- def get_scheduler_class(
26
- scheduler: str,
27
- model: LoadedModel
28
- ) -> Union[SchedulerMixin, None]:
29
- scheduler_class = SCHEDULERS.get(scheduler, None)
30
-
31
- if scheduler_class is None:
32
- raise Exception(f'The scheduler "{scheduler}" is not accepted by our system.')
33
-
34
- return scheduler_class
35
-
36
- scheduler_cls = registry.resolve(model.info.scheduler.identifier)
37
-
38
- scheduler = scheduler_cls.from_config(...)
39
-
40
- return scheduler
41
-
42
- return scheduler_cls.from_config(
43
- model.model.scheduler.config
44
- )
22
+ """
@@ -1,11 +1,15 @@
1
1
  from ai_simple_engine_runtime_diffusers.models.loader.latent_diffusion_model_loader import LatentDiffusionModelLoader
2
- from ai_simple_engine_runtime_diffusers.models.scheduler.utils import SCHEDULERS
2
+ from ai_simple_engine_runtime_diffusers.models.executor.noise.pytorch_noise_generator import TorchNoiseGenerator
3
3
  from ai_simple_engine_runtime_diffusers.models.scheduler.registry.diffusers_scheduler_registry import DiffusersSchedulerRegistry
4
+ from ai_simple_engine.models.executor.registry.family_model_executor_registry import FamilyModelExecutorRegistry
5
+ from ai_simple_engine_runtime_diffusers.models.executor.diffusers_latent_diffusion_model_executor import DiffusersLatentDiffusionModelExecutor
6
+ from ai_simple_engine_runtime_diffusers.models.scheduler.utils import SCHEDULERS
7
+ from ai_simple_engine_diffusion.noise.noise_generator_abstract import NoiseGenerator
4
8
  from ai_simple_engine.engine_builder import EngineBuilder
5
9
  from ai_simple_engine.plugins.plugin import Plugin
6
10
 
7
11
 
8
- class DiffusersRuntimeMusicgenPlugin(
12
+ class DiffusersRuntimePlugin(
9
13
  Plugin
10
14
  ):
11
15
  """
@@ -19,10 +23,15 @@ class DiffusersRuntimeMusicgenPlugin(
19
23
  self,
20
24
  builder: EngineBuilder
21
25
  ):
22
-
26
+ (
27
+ builder.add_model_loader(LatentDiffusionModelLoader())
28
+ )
23
29
 
24
30
  (
25
- builder.add_model_loader(LatentDiffusionModelLoader)
31
+ builder.add_service(
32
+ NoiseGenerator,
33
+ TorchNoiseGenerator()
34
+ )
26
35
  )
27
36
 
28
37
  # TODO: Register the SchedulerRegistry
@@ -36,34 +45,17 @@ class DiffusersRuntimeMusicgenPlugin(
36
45
  scheduler_spec.identifier
37
46
  )
38
47
  """
48
+ model_executor_registry = builder.get_or_add_service(FamilyModelExecutorRegistry)
49
+
50
+ model_executor_registry.register(
51
+ 'latent_diffusion',
52
+ DiffusersLatentDiffusionModelExecutor()
53
+ )
54
+
39
55
  scheduler_registry = builder.get_or_add_service(DiffusersSchedulerRegistry)
40
56
 
41
57
  for identifier, cls in SCHEDULERS.items():
42
58
  scheduler_registry.register(
43
59
  identifier,
44
60
  cls
45
- )
46
-
47
- # scheduler_registry.register(
48
- # 'euler',
49
- # EulerDiscreteScheduler
50
- # )
51
-
52
- # TODO: This below was the 'musicgen'
53
- # (
54
- # builder
55
- # .add_model_loader(MusicgenModelLoader())
56
- # )
57
-
58
- # """
59
- # We obtain the registry that handles the
60
- # model executors by the model's family,
61
- # and we register our specific model
62
- # executor that uses transformers.
63
- # """
64
- # registry = builder.get_or_add_service(FamilyModelExecutorRegistry)
65
-
66
- # registry.register(
67
- # MUSICGEN_MODEL_FAMILY,
68
- # TransformersMusicgenModelExecutor()
69
- # )
61
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-simple-engine-runtime-diffusers
3
- Version: 0.0.1
3
+ Version: 0.0.3
4
4
  Summary: AI Simple Engine Runtime Diffusers Module
5
5
  License-File: LICENSE
6
6
  Author: danialcala94
@@ -9,11 +9,11 @@ Requires-Python: >=3.10,<3.12
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: Programming Language :: Python :: 3.10
11
11
  Classifier: Programming Language :: Python :: 3.11
12
- Requires-Dist: ai-simple-engine (>=0.2.6,<1.0.0)
12
+ Requires-Dist: ai-simple-engine (>=0.2.8,<1.0.0)
13
13
  Requires-Dist: ai-simple-engine-common (>=0.0.3,<1.0.0)
14
- Requires-Dist: ai-simple-engine-diffusion (>=0.0.2,<1.0.0)
15
- Requires-Dist: diffusers (>=0.38.0,<1.0.0)
16
- Requires-Dist: transformers (>=0.0.1,<1.0.0)
14
+ Requires-Dist: ai-simple-engine-diffusion (>=0.0.3,<1.0.0)
15
+ Requires-Dist: diffusers (>=0.38.0,<9999.0.0)
16
+ Requires-Dist: transformers (>=5.13.0,<9999.0.0)
17
17
  Description-Content-Type: text/markdown
18
18
 
19
19
  # AI Simple Engine Runtime Diffusers Module
@@ -1,7 +1,7 @@
1
1
  ai_simple_engine_runtime_diffusers/__init__.py,sha256=oeCwDniRRNaeu1i8oSoIGl24B_le57R-tjJfbQIcaTA,101
2
2
  ai_simple_engine_runtime_diffusers/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  ai_simple_engine_runtime_diffusers/models/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- ai_simple_engine_runtime_diffusers/models/executor/diffusers_latent_diffusion_model_executor.py,sha256=-kVvNpBZLbcWuHiXo6cj3-Y6mVXCn9YIN9S_7opKbj0,3701
4
+ ai_simple_engine_runtime_diffusers/models/executor/diffusers_latent_diffusion_model_executor.py,sha256=mBKcpDmnSo-AroNNaMlQq64aqpynbIm_ULY2aaXi8KE,4093
5
5
  ai_simple_engine_runtime_diffusers/models/executor/noise/__init__.py,sha256=gtBak1TwMesgIsuc56HdYmCwrTjdysO68FO6XzAs-ME,69
6
6
  ai_simple_engine_runtime_diffusers/models/executor/noise/pytorch_noise_generator.py,sha256=kFL42BiG2odZp7hAA-7FZakihakOzc8BpYorysDvWx0,508
7
7
  ai_simple_engine_runtime_diffusers/models/executor/prompt_embeddings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -10,17 +10,17 @@ ai_simple_engine_runtime_diffusers/models/executor/text_encoder_model_executor_a
10
10
  ai_simple_engine_runtime_diffusers/models/executor/unet_model_executor_abstract.py,sha256=xj5Fw8J1jAwJZRoE5dEnH4Ewf92jIyEh6BJEOHOY1n0,1004
11
11
  ai_simple_engine_runtime_diffusers/models/executor/vae_model_executor_abstract.py,sha256=t3j4jYHKbo7bSjMhLLOJYsY2IZm7uQGXXK-c7QDCTv8,1045
12
12
  ai_simple_engine_runtime_diffusers/models/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- ai_simple_engine_runtime_diffusers/models/loader/latent_diffusion_model_loader.py,sha256=fROYlfzuJCqmneCm7xr0OY2PRtKjVeL5JCVi1c-SWP0,3057
13
+ ai_simple_engine_runtime_diffusers/models/loader/latent_diffusion_model_loader.py,sha256=C-vENcRTMk9__Es_TdP38j3avsqK2olIFtXXmC_Tcao,3645
14
14
  ai_simple_engine_runtime_diffusers/models/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  ai_simple_engine_runtime_diffusers/models/runtime/diffusers_latent_diffusion_model.py,sha256=UTgR2mWW3rDtJXyRATpR_lfcWS6wMugeKHlvKneXTbw,478
16
16
  ai_simple_engine_runtime_diffusers/models/runtime/utils.py,sha256=niSrKW6RdZwtRPQVEFCArTyYdGgWWk-rlFSd2ledSPo,347
17
17
  ai_simple_engine_runtime_diffusers/models/scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  ai_simple_engine_runtime_diffusers/models/scheduler/diffusers_scheduler.py,sha256=TiirOtBVX9Op8VeYEjmh3F-rxCiJoEkM6ezyKFjQ_74,896
19
19
  ai_simple_engine_runtime_diffusers/models/scheduler/registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- ai_simple_engine_runtime_diffusers/models/scheduler/registry/diffusers_scheduler_registry.py,sha256=i9nAd_T30oFFT65awnIw_Z6cDtctmN1NWxkQArXDugY,516
21
- ai_simple_engine_runtime_diffusers/models/scheduler/utils.py,sha256=VSVeypJkrwaCTRZyYrmscE8g9_pufQ-AlZAhUD_3OKE,1111
22
- ai_simple_engine_runtime_diffusers/plugin.py,sha256=rPl2BEW9ow6R0KouaFvvBpetG5Opz92E-Rq-6xH5iLc,2101
23
- ai_simple_engine_runtime_diffusers-0.0.1.dist-info/licenses/LICENSE,sha256=6kbiFSfobTZ7beWiKnHpN902HgBx-Jzgcme0SvKqhKY,1091
24
- ai_simple_engine_runtime_diffusers-0.0.1.dist-info/METADATA,sha256=p_wUk1JdE8bWcJGNq3m2tDWCbvaN_N2IptU7HbU3vX8,834
25
- ai_simple_engine_runtime_diffusers-0.0.1.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
26
- ai_simple_engine_runtime_diffusers-0.0.1.dist-info/RECORD,,
20
+ ai_simple_engine_runtime_diffusers/models/scheduler/registry/diffusers_scheduler_registry.py,sha256=FOuIAAwNmi3_jB25ICOlCPbD7U1WlOcGFZT3rhql5cY,565
21
+ ai_simple_engine_runtime_diffusers/models/scheduler/utils.py,sha256=tIzwp7fy0Y1pE7XcLJU0dEp4XH2TMxBzY7SnvyfwITM,554
22
+ ai_simple_engine_runtime_diffusers/plugin.py,sha256=o_5OJSwHj_4Qy1LW-Y_JRIP3-LotSOEUVgB3LdnK3mU,2205
23
+ ai_simple_engine_runtime_diffusers-0.0.3.dist-info/licenses/LICENSE,sha256=6kbiFSfobTZ7beWiKnHpN902HgBx-Jzgcme0SvKqhKY,1091
24
+ ai_simple_engine_runtime_diffusers-0.0.3.dist-info/METADATA,sha256=z3ZSTCX1eOifkl4AIZP32MO2YyYgaRTeZSqbiQjLSEY,841
25
+ ai_simple_engine_runtime_diffusers-0.0.3.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
26
+ ai_simple_engine_runtime_diffusers-0.0.3.dist-info/RECORD,,