from pathlib import Path from typing import Any from optimum.intel.openvino import OVDiffusionPipeline from optimum.intel.openvino.modeling_diffusion import ( OVModelVae, OVModelVaeDecoder, OVModelVaeEncoder, ) from backend.device import is_openvino_device from backend.tiny_autoencoder import get_tiny_autoencoder_repo_id from constants import DEVICE, LCM_DEFAULT_MODEL_OPENVINO from paths import get_base_folder_name if is_openvino_device(): from huggingface_hub import snapshot_download from optimum.intel.openvino.modeling_diffusion import ( OVBaseModel, OVStableDiffusionImg2ImgPipeline, OVStableDiffusionPipeline, OVStableDiffusionXLImg2ImgPipeline, OVStableDiffusionXLPipeline, ) def ov_load_tiny_autoencoder( pipeline: Any, use_local_model: bool = False, ): taesd_dir = snapshot_download( repo_id=get_tiny_autoencoder_repo_id(pipeline.__class__.__name__), local_files_only=use_local_model, ) vae_decoder = OVModelVaeDecoder( model=OVBaseModel.load_model(f"{taesd_dir}/vae_decoder/openvino_model.xml"), parent_pipeline=pipeline, model_name="vae_decoder", ) vae_encoder = OVModelVaeEncoder( model=OVBaseModel.load_model(f"{taesd_dir}/vae_encoder/openvino_model.xml"), parent_pipeline=pipeline, model_name="vae_encoder", ) pipeline.vae = OVModelVae( decoder=vae_decoder, encoder=vae_encoder, ) pipeline.vae.config.scaling_factor = 1.0 def get_ov_text_to_image_pipeline( model_id: str = LCM_DEFAULT_MODEL_OPENVINO, use_local_model: bool = False, ) -> Any: if "xl" in get_base_folder_name(model_id).lower(): pipeline = OVStableDiffusionXLPipeline.from_pretrained( model_id, local_files_only=use_local_model, ov_config={"CACHE_DIR": ""}, device=DEVICE.upper(), ) else: pipeline = OVStableDiffusionPipeline.from_pretrained( model_id, local_files_only=use_local_model, ov_config={"CACHE_DIR": ""}, device=DEVICE.upper(), ) return pipeline def get_ov_image_to_image_pipeline( model_id: str = LCM_DEFAULT_MODEL_OPENVINO, use_local_model: bool = False, ) -> Any: if "xl" in get_base_folder_name(model_id).lower(): pipeline = OVStableDiffusionXLImg2ImgPipeline.from_pretrained( model_id, local_files_only=use_local_model, ov_config={"CACHE_DIR": ""}, device=DEVICE.upper(), ) else: pipeline = OVStableDiffusionImg2ImgPipeline.from_pretrained( model_id, local_files_only=use_local_model, ov_config={"CACHE_DIR": ""}, device=DEVICE.upper(), ) return pipeline def get_ov_diffusion_pipeline( model_id: str, use_local_model: bool = False, ) -> Any: pipeline = OVDiffusionPipeline.from_pretrained( model_id, local_files_only=use_local_model, ov_config={"CACHE_DIR": ""}, device=DEVICE.upper(), ) return pipeline