sinapsis-huggingface 0.2.11__tar.gz → 0.2.12__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.
Files changed (48) hide show
  1. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/PKG-INFO +1 -1
  2. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface.egg-info/PKG-INFO +1 -1
  3. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/base_diffusers.py +40 -8
  4. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/image_to_image_diffusers.py +12 -11
  5. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/image_to_video_gen_xl_diffusers.py +10 -5
  6. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/inpainting_diffusers.py +7 -3
  7. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/text_to_image_diffusers.py +1 -1
  8. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/templates/grounding_dino.py +31 -11
  9. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/pyproject.toml +1 -1
  10. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/LICENSE +0 -0
  11. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/README.md +0 -0
  12. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface.egg-info/SOURCES.txt +0 -0
  13. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface.egg-info/dependency_links.txt +0 -0
  14. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface.egg-info/requires.txt +0 -0
  15. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface.egg-info/top_level.txt +0 -0
  16. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/__init__.py +0 -0
  17. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/helpers/__init__.py +0 -0
  18. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/helpers/tags.py +0 -0
  19. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_diffusers/src/sinapsis_huggingface_diffusers/templates/__init__.py +0 -0
  20. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/__init__.py +0 -0
  21. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/helpers/__init__.py +0 -0
  22. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/helpers/tags.py +0 -0
  23. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/templates/__init__.py +0 -0
  24. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/templates/hugging_face_embedding_extractor.py +0 -0
  25. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_embeddings/src/sinapsis_huggingface_embeddings/templates/speaker_embedding_from_audio.py +0 -0
  26. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/__init__.py +0 -0
  27. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/helpers/__init__.py +0 -0
  28. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/helpers/grounding_dino_keys.py +0 -0
  29. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/helpers/tags.py +0 -0
  30. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/templates/__init__.py +0 -0
  31. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_grounding_dino/src/sinapsis_huggingface_grounding_dino/templates/grounding_dino_classification.py +0 -0
  32. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/__init__.py +0 -0
  33. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/helpers/__init__.py +0 -0
  34. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/helpers/tags.py +0 -0
  35. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/helpers/text_to_sentences.py +0 -0
  36. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/__init__.py +0 -0
  37. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/base_transformers.py +0 -0
  38. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/image_to_text_transformers.py +0 -0
  39. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/pali_gemma/pali_gemma_base.py +0 -0
  40. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/pali_gemma/pali_gemma_detection.py +0 -0
  41. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/pali_gemma/pali_gemma_inference.py +0 -0
  42. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/speech_to_text_transformers.py +0 -0
  43. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/summarization_transformers.py +0 -0
  44. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/text_to_speech_transformers.py +0 -0
  45. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/templates/translation_transformers.py +0 -0
  46. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/thirdparty/__init__.py +0 -0
  47. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/packages/sinapsis_huggingface_transformers/src/sinapsis_huggingface_transformers/thirdparty/helpers.py +0 -0
  48. {sinapsis_huggingface-0.2.11 → sinapsis_huggingface-0.2.12}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sinapsis-huggingface
3
- Version: 0.2.11
3
+ Version: 0.2.12
4
4
  Summary: Package for HuggingFace-based templates
5
5
  Author-email: SinapsisAI <dev@sinapsis.tech>
6
6
  Project-URL: Homepage, https://sinapsis.tech
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sinapsis-huggingface
3
- Version: 0.2.11
3
+ Version: 0.2.12
4
4
  Summary: Package for HuggingFace-based templates
5
5
  Author-email: SinapsisAI <dev@sinapsis.tech>
6
6
  Project-URL: Homepage, https://sinapsis.tech
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ import gc
3
4
  from abc import ABC, abstractmethod
4
5
  from typing import Literal
5
6
 
@@ -107,7 +108,14 @@ class BaseDiffusers(Template, ABC):
107
108
 
108
109
  def __init__(self, attributes: TemplateAttributeType) -> None:
109
110
  super().__init__(attributes)
111
+ self.initialize()
110
112
 
113
+ def initialize(self) -> None:
114
+ """Initializes the template's common state for creation or reset.
115
+
116
+ This method is called by both `__init__` and `reset_state` to ensure
117
+ a consistent state. Can be overriden by subclasses for specific behaviour.
118
+ """
111
119
  self.pipeline = self._make_pipeline()
112
120
  self.pipeline.set_progress_bar_config(disable=True)
113
121
  self.num_images_per_prompt = self.attributes.generation_params.num_images_per_prompt
@@ -155,7 +163,7 @@ class BaseDiffusers(Template, ABC):
155
163
  pipeline_class = self._pipeline_class()
156
164
  return pipeline_class.from_pretrained(
157
165
  self.attributes.model_path,
158
- torch_dtype=self.TORCH_DTYPE.get(self.attributes.torch_dtype),
166
+ dtype=self.TORCH_DTYPE.get(self.attributes.torch_dtype),
159
167
  cache_dir=self.attributes.model_cache_dir,
160
168
  ).to(self.attributes.device)
161
169
 
@@ -199,8 +207,10 @@ class BaseDiffusers(Template, ABC):
199
207
  output_type="np",
200
208
  )
201
209
  generated_images = output.images if output_attribute == "images" else output.frames[0]
210
+ images_as_uint8 = [(image * 255).clip(0, 255).astype(np.uint8) for image in generated_images]
211
+ del output
202
212
 
203
- return [(image * 255).clip(0, 255).astype(np.uint8) for image in generated_images]
213
+ return images_as_uint8
204
214
 
205
215
  def _update_images_in_container(self, container: DataContainer, new_packets: list[ImagePacket]) -> None:
206
216
  """Updates the container with new image packets based on the `overwrite_images` attribute.
@@ -218,17 +228,39 @@ class BaseDiffusers(Template, ABC):
218
228
  else:
219
229
  container.images.extend(new_packets)
220
230
 
221
- def _clear_memory(self) -> None:
231
+ @staticmethod
232
+ def clear_memory() -> None:
222
233
  """Clears memory to free up resources.
223
234
 
224
235
  This method performs garbage collection and clears GPU memory (if applicable) to prevent memory leaks
225
236
  and ensure efficient resource usage.
226
237
  """
227
- del self.generator
228
- if self.attributes.device == "cuda":
238
+ gc.collect()
239
+ if torch.cuda.is_available():
229
240
  torch.cuda.empty_cache()
230
- torch.cuda.ipc_collect()
231
241
 
232
242
  def reset_state(self, template_name: str | None = None) -> None:
233
- self._clear_memory()
234
- super().reset_state(template_name)
243
+ """Releases the pipeline and processor from memory and re-instantiates the template.
244
+
245
+ Args:
246
+ template_name (str | None, optional): The name of the template instance being reset. Defaults to None.
247
+ """
248
+ _ = template_name
249
+
250
+ if hasattr(self, "pipeline") and self.pipeline is not None:
251
+ components = self.pipeline.components
252
+ for component in components.values():
253
+ if isinstance(component, torch.nn.Module):
254
+ component.to("cpu")
255
+
256
+ del self.pipeline
257
+
258
+ if hasattr(self, "processor"):
259
+ del self.processor
260
+
261
+ if hasattr(self, "generator"):
262
+ del self.generator
263
+
264
+ self.clear_memory()
265
+ self.initialize()
266
+ self.logger.info(f"Reset template instance `{self.instance_name}`")
@@ -8,7 +8,6 @@ import numpy as np
8
8
  from diffusers import AutoPipelineForImage2Image
9
9
  from PIL import Image
10
10
  from sinapsis_core.data_containers.data_packet import DataContainer, ImagePacket
11
- from sinapsis_core.template_base.base_models import TemplateAttributeType
12
11
 
13
12
  from sinapsis_huggingface_diffusers.helpers.tags import Tags
14
13
  from sinapsis_huggingface_diffusers.templates.base_diffusers import BaseDiffusers
@@ -52,9 +51,13 @@ class ImageToImageDiffusers(BaseDiffusers):
52
51
 
53
52
  UIProperties = ImageToImageDiffusersUIProperties
54
53
 
55
- def __init__(self, attributes: TemplateAttributeType) -> None:
56
- super().__init__(attributes)
57
- self.requires_pil = False
54
+ def initialize(self) -> None:
55
+ """Initializes the template's common state for creation or reset.
56
+
57
+ This method is called by both `__init__` and `reset_state` to ensure
58
+ a consistent state. Can be overriden by subclasses for specific behaviour.
59
+ """
60
+ super().initialize()
58
61
  self.output_attribute: Literal["images", "frames"] = "images"
59
62
  self.num_duplicates = self.num_images_per_prompt
60
63
 
@@ -67,7 +70,8 @@ class ImageToImageDiffusers(BaseDiffusers):
67
70
  """
68
71
  return AutoPipelineForImage2Image
69
72
 
70
- def _convert_image_format(self, image_packet: ImagePacket) -> np.ndarray | Image.Image:
73
+ @staticmethod
74
+ def _convert_image_format(image_packet: ImagePacket) -> Image.Image:
71
75
  """Converts the input image into the appropriate format for the pipeline.
72
76
 
73
77
  The format depends on the `requires_pil` attribute:
@@ -78,12 +82,9 @@ class ImageToImageDiffusers(BaseDiffusers):
78
82
  image_packet (ImagePacket): The input image packet.
79
83
 
80
84
  Returns:
81
- np.ndarray | Image.Image: The converted image, either as a normalized NumPy array or a
82
- PIL Image.
85
+ Image.Image: The converted image as a PIL Image.
83
86
  """
84
- if self.requires_pil:
85
- return Image.fromarray(image_packet.content)
86
- return image_packet.content / 255.0
87
+ return Image.fromarray(image_packet.content)
87
88
 
88
89
  def preprocess_inputs(self, image_packet: ImagePacket) -> dict[str, np.ndarray | list[np.ndarray]]:
89
90
  """Prepares the input image for the image-to-image pipeline.
@@ -157,6 +158,6 @@ class ImageToImageDiffusers(BaseDiffusers):
157
158
  new_packets = [ImagePacket(content=image) for image in all_generated_images]
158
159
  processed_packets, _ = self.post_processing_packets(new_packets, old_packets)
159
160
  self._update_images_in_container(container, processed_packets)
160
- self._clear_memory()
161
+ self.clear_memory()
161
162
 
162
163
  return container
@@ -1,7 +1,8 @@
1
1
  # -*- coding: utf-8 -*-
2
+ from typing import Literal
3
+
2
4
  from diffusers import I2VGenXLPipeline
3
5
  from pydantic import Field
4
- from sinapsis_core.template_base.base_models import TemplateAttributeType
5
6
 
6
7
  from sinapsis_huggingface_diffusers.helpers.tags import Tags
7
8
  from sinapsis_huggingface_diffusers.templates.base_diffusers import BaseDiffusersAttributes, BaseGenerationParams
@@ -72,11 +73,15 @@ class ImageToVideoGenXLDiffusers(ImageToImageDiffusers):
72
73
  AttributesBaseModel = ImageToVideoGenXLDiffusersAttributes
73
74
  UIProperties = ImageToVideoGenXLDiffusersUIProperties
74
75
 
75
- def __init__(self, attributes: TemplateAttributeType) -> None:
76
- super().__init__(attributes)
76
+ def initialize(self) -> None:
77
+ """Initializes the template's common state for creation or reset.
78
+
79
+ This method is called by both `__init__` and `reset_state` to ensure
80
+ a consistent state. Can be overriden by subclasses for specific behaviour.
81
+ """
82
+ super().initialize()
83
+ self.output_attribute: Literal["images", "frames"] = "frames"
77
84
  self.num_duplicates = self.attributes.generation_params.num_frames
78
- self.requires_pil = True
79
- self.output_attribute = "frames"
80
85
 
81
86
  @staticmethod
82
87
  def _pipeline_class() -> I2VGenXLPipeline:
@@ -7,7 +7,6 @@ import cv2
7
7
  import numpy as np
8
8
  from diffusers import AutoPipelineForInpainting
9
9
  from sinapsis_core.data_containers.data_packet import ImageAnnotations, ImagePacket
10
- from sinapsis_core.template_base.base_models import TemplateAttributeType
11
10
 
12
11
  from sinapsis_huggingface_diffusers.helpers.tags import Tags
13
12
  from sinapsis_huggingface_diffusers.templates.base_diffusers import (
@@ -75,8 +74,13 @@ class InpaintingDiffusers(ImageToImageDiffusers):
75
74
  UIProperties = InpaintingDiffusersUIProperties
76
75
  AttributesBaseModel = InpaintingDiffusersAttributes
77
76
 
78
- def __init__(self, attributes: TemplateAttributeType) -> None:
79
- super().__init__(attributes)
77
+ def initialize(self) -> None:
78
+ """Initializes the template's common state for creation or reset.
79
+
80
+ This method is called by both `__init__` and `reset_state` to ensure
81
+ a consistent state. Can be overriden by subclasses for specific behaviour.
82
+ """
83
+ super().initialize()
80
84
  if self.attributes.preserve_outside_content and self.attributes.dilation_radius is None:
81
85
  raise ValueError("Need to specify a dilation_radius if preserve_outside_content=True")
82
86
 
@@ -80,6 +80,6 @@ class TextToImageDiffusers(BaseDiffusers):
80
80
  image_packets = [ImagePacket(content=image) for image in generated_images]
81
81
  self._set_packet_sources(image_packets)
82
82
  self._update_images_in_container(container, image_packets)
83
- self._clear_memory()
83
+ self.clear_memory()
84
84
 
85
85
  return container
@@ -111,11 +111,18 @@ class GroundingDINO(Template):
111
111
  attributes (dict[str, Any]): Dictionary containing configuration parameters.
112
112
  """
113
113
  super().__init__(attributes)
114
- self.device = self.attributes.device
114
+ self.initialize()
115
+
116
+ def initialize(self) -> None:
117
+ """Initializes the template's common state for creation or reset.
118
+
119
+ This method is called by both `__init__` and `reset_state` to ensure
120
+ a consistent state. Can be overriden by subclasses for specific behaviour.
121
+ """
115
122
  self.processor = AutoProcessor.from_pretrained(
116
123
  self.attributes.model_path, cache_dir=self.attributes.model_cache_dir
117
124
  )
118
- self.model = self._set_model().to(self.device)
125
+ self.model = self._set_model().to(self.attributes.device)
119
126
  self.max_tokens = self.processor.tokenizer.model_max_length
120
127
  self.text_input = self.validate_and_format_text_input(self.attributes.text_input)
121
128
 
@@ -171,7 +178,7 @@ class GroundingDINO(Template):
171
178
  images=image_packet.content,
172
179
  text=self.text_input,
173
180
  return_tensors="pt",
174
- ).to(self.device)
181
+ ).to(self.attributes.device)
175
182
 
176
183
  with torch.no_grad():
177
184
  outputs = self.model(**inputs)
@@ -350,19 +357,32 @@ class GroundingDINO(Template):
350
357
 
351
358
  return container
352
359
 
353
- def _clear_memory(self) -> None:
360
+ @staticmethod
361
+ def clear_memory() -> None:
354
362
  """Clears memory to free up resources.
355
363
 
356
364
  This method performs garbage collection and clears GPU memory (if applicable) to prevent memory leaks
357
365
  and ensure efficient resource usage.
358
366
  """
359
- for child in self.model.children():
360
- child.cpu()
361
- gc.collect()
362
- if self.attributes.device == "cuda":
367
+ gc.collect()
368
+ if torch.cuda.is_available():
363
369
  torch.cuda.empty_cache()
364
- torch.cuda.ipc_collect()
365
370
 
366
371
  def reset_state(self, template_name: str | None = None) -> None:
367
- self._clear_memory()
368
- super().reset_state(template_name)
372
+ """Releases the pipeline and processor from memory and re-instantiates the template.
373
+
374
+ Args:
375
+ template_name (str | None, optional): The name of the template instance being reset. Defaults to None.
376
+ """
377
+ _ = template_name
378
+
379
+ if hasattr(self, "model") and self.model is not None:
380
+ self.model.to("cpu")
381
+ del self.model
382
+
383
+ if hasattr(self, "processor"):
384
+ del self.processor
385
+
386
+ self.clear_memory()
387
+ self.initialize()
388
+ self.logger.info(f"Reset template instance `{self.instance_name}`")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sinapsis-huggingface"
3
- version = "0.2.11"
3
+ version = "0.2.12"
4
4
  description = "Package for HuggingFace-based templates"
5
5
  authors = [
6
6
  {name = "SinapsisAI", email = "dev@sinapsis.tech"},