ai-simple-engine-runtime-diffusers 0.0.1__tar.gz → 0.0.3__tar.gz
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.
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/PKG-INFO +5 -5
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/pyproject.toml +5 -5
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/diffusers_latent_diffusion_model_executor.py +14 -5
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/loader/latent_diffusion_model_loader.py +24 -5
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/scheduler/registry/diffusers_scheduler_registry.py +4 -2
- ai_simple_engine_runtime_diffusers-0.0.3/src/ai_simple_engine_runtime_diffusers/models/scheduler/utils.py +22 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/plugin.py +21 -29
- ai_simple_engine_runtime_diffusers-0.0.1/src/ai_simple_engine_runtime_diffusers/models/scheduler/utils.py +0 -44
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/LICENSE +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/README.md +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/noise/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/noise/pytorch_noise_generator.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/prompt_embeddings/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/prompt_embeddings/prompt_embeddings.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/text_encoder_model_executor_abstract.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/unet_model_executor_abstract.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/executor/vae_model_executor_abstract.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/loader/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/runtime/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/runtime/diffusers_latent_diffusion_model.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/runtime/utils.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/scheduler/__init__.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/scheduler/diffusers_scheduler.py +0 -0
- {ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/src/ai_simple_engine_runtime_diffusers/models/scheduler/registry/__init__.py +0 -0
{ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ai-simple-engine-runtime-diffusers
|
|
3
|
-
Version: 0.0.
|
|
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.
|
|
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.
|
|
15
|
-
Requires-Dist: diffusers (>=0.38.0,<
|
|
16
|
-
Requires-Dist: transformers (>=
|
|
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
|
{ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/pyproject.toml
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "ai-simple-engine-runtime-diffusers"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.3"
|
|
4
4
|
description = "AI Simple Engine Runtime Diffusers Module"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "danialcala94", email = "danielalcalavalera@gmail.com"}
|
|
@@ -10,11 +10,11 @@ requires-python = ">=3.10,<3.12"
|
|
|
10
10
|
|
|
11
11
|
[tool.poetry.dependencies]
|
|
12
12
|
# Mandatory
|
|
13
|
-
ai-simple-engine = { version = ">=0.2.
|
|
13
|
+
ai-simple-engine = { version = ">=0.2.8,<1.0.0", optional = false }
|
|
14
14
|
ai-simple-engine-common = { version = ">=0.0.3,<1.0.0", optional = false }
|
|
15
|
-
ai-simple-engine-diffusion = { version = ">=0.0.
|
|
16
|
-
transformers = { version = ">=
|
|
17
|
-
diffusers = { version = ">=0.38.0,<
|
|
15
|
+
ai-simple-engine-diffusion = { version = ">=0.0.3,<1.0.0", optional = false }
|
|
16
|
+
transformers = { version = ">=5.13.0,<9999.0.0", optional = false }
|
|
17
|
+
diffusers = { version = ">=0.38.0,<9999.0.0", optional = false }
|
|
18
18
|
# Optional
|
|
19
19
|
|
|
20
20
|
[tool.poetry]
|
|
@@ -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.
|
|
30
|
+
scheduler_registry = context.services.get(DiffusersSchedulerRegistry)
|
|
30
31
|
|
|
31
|
-
scheduler_class = scheduler_registry.resolve(model.info.scheduler.
|
|
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.
|
|
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
|
-
)
|
|
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
|
-
)
|
|
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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO: Maybe rename and move this module.
|
|
3
|
+
"""
|
|
4
|
+
from diffusers.schedulers import (
|
|
5
|
+
DDIMScheduler,
|
|
6
|
+
EulerDiscreteScheduler,
|
|
7
|
+
EulerAncestralDiscreteScheduler,
|
|
8
|
+
DPMSolverMultistepScheduler,
|
|
9
|
+
FlowMatchEulerDiscreteScheduler
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
SCHEDULERS = {
|
|
13
|
+
'ddim': DDIMScheduler,
|
|
14
|
+
'euler': EulerDiscreteScheduler,
|
|
15
|
+
'euler_a': EulerAncestralDiscreteScheduler,
|
|
16
|
+
'dpmpp_2m': DPMSolverMultistepScheduler,
|
|
17
|
+
'flow_match_euler': FlowMatchEulerDiscreteScheduler
|
|
18
|
+
}
|
|
19
|
+
"""
|
|
20
|
+
The list including all the schedulers we are
|
|
21
|
+
accepting.
|
|
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.
|
|
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
|
|
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.
|
|
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,44 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
TODO: Maybe rename and move this module.
|
|
3
|
-
"""
|
|
4
|
-
from diffusers.schedulers import (
|
|
5
|
-
DDIMScheduler,
|
|
6
|
-
EulerDiscreteScheduler,
|
|
7
|
-
EulerAncestralDiscreteScheduler,
|
|
8
|
-
DPMSolverMultistepScheduler,
|
|
9
|
-
FlowMatchEulerDiscreteScheduler
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
SCHEDULERS = {
|
|
13
|
-
'ddim': DDIMScheduler,
|
|
14
|
-
'euler': EulerDiscreteScheduler,
|
|
15
|
-
'euler_a': EulerAncestralDiscreteScheduler,
|
|
16
|
-
'dpmpp_2m': DPMSolverMultistepScheduler,
|
|
17
|
-
'flow_match_euler': FlowMatchEulerDiscreteScheduler
|
|
18
|
-
}
|
|
19
|
-
"""
|
|
20
|
-
The list including all the schedulers we are
|
|
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
|
-
)
|
{ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/LICENSE
RENAMED
|
File without changes
|
{ai_simple_engine_runtime_diffusers-0.0.1 → ai_simple_engine_runtime_diffusers-0.0.3}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|