From 4dd115c29517296db9a2a23a98750eb42d8acf55 Mon Sep 17 00:00:00 2001 From: Sai-Suraj-27 Date: Mon, 22 Apr 2024 21:13:39 +0530 Subject: [PATCH 1/4] Fixed requests.get function call by adding timeout parameter. --- examples/instruct_pix2pix/train_instruct_pix2pix.py | 6 +++++- .../instructpix2pix_lora/train_instruct_pix2pix_lora.py | 6 +++++- .../convert_original_promptdiffusion_to_diffusers.py | 7 ++++++- scripts/convert_dance_diffusion_to_diffusers.py | 5 ++++- scripts/convert_vae_pt_to_diffusers.py | 7 ++++++- src/diffusers/loaders/single_file_utils.py | 5 ++++- .../pipelines/stable_diffusion/convert_from_ckpt.py | 7 ++++++- src/diffusers/utils/loading_utils.py | 6 +++++- src/diffusers/utils/testing_utils.py | 9 ++++++--- utils/fetch_latest_release_branch.py | 8 +++++++- utils/notify_slack_about_release.py | 8 ++++++-- 11 files changed, 60 insertions(+), 14 deletions(-) diff --git a/examples/instruct_pix2pix/train_instruct_pix2pix.py b/examples/instruct_pix2pix/train_instruct_pix2pix.py index d1caf281a2c5..9ba85055b39f 100644 --- a/examples/instruct_pix2pix/train_instruct_pix2pix.py +++ b/examples/instruct_pix2pix/train_instruct_pix2pix.py @@ -67,6 +67,10 @@ WANDB_TABLE_COL_NAMES = ["original_image", "edited_image", "edit_prompt"] +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def log_validation( pipeline, args, @@ -418,7 +422,7 @@ def convert_to_np(image, resolution): def download_image(url): - image = PIL.Image.open(requests.get(url, stream=True).raw) + image = PIL.Image.open(requests.get(url, stream=True, timeout=request_timeout).raw) image = PIL.ImageOps.exif_transpose(image) image = image.convert("RGB") return image diff --git a/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py b/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py index 070cdad15564..c10a621b10d8 100644 --- a/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py +++ b/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py @@ -74,6 +74,10 @@ WANDB_TABLE_COL_NAMES = ["original_image", "edited_image", "edit_prompt"] +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def save_model_card( repo_id: str, images: list = None, @@ -475,7 +479,7 @@ def convert_to_np(image, resolution): def download_image(url): - image = PIL.Image.open(requests.get(url, stream=True).raw) + image = PIL.Image.open(requests.get(url, stream=True, timeout=request_timeout).raw) image = PIL.ImageOps.exif_transpose(image) image = image.convert("RGB") return image diff --git a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py index 26b56a21e865..8e3c1fbee88f 100644 --- a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py +++ b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py @@ -15,6 +15,7 @@ """Conversion script for stable diffusion checkpoints which _only_ contain a controlnet.""" import argparse +import os import re from contextlib import nullcontext from io import BytesIO @@ -68,6 +69,10 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def shave_segments(path, n_shave_prefix_segments=1): """ Removes segments. Positive values shave the first segments, negative shave the last segments. @@ -1435,7 +1440,7 @@ def download_from_original_stable_diffusion_ckpt( config_url = "https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/x4-upscaling.yaml" if config_url is not None: - original_config_file = BytesIO(requests.get(config_url).content) + original_config_file = BytesIO(requests.get(config_url, timeout=request_timeout).content) else: with open(original_config_file, "r") as f: original_config_file = f.read() diff --git a/scripts/convert_dance_diffusion_to_diffusers.py b/scripts/convert_dance_diffusion_to_diffusers.py index ce69bfe2bfc8..4e7c06b97725 100755 --- a/scripts/convert_dance_diffusion_to_diffusers.py +++ b/scripts/convert_dance_diffusion_to_diffusers.py @@ -46,6 +46,9 @@ }, } +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + def alpha_sigma_to_t(alpha, sigma): """Returns a timestep, given the scaling factors for the clean image and for @@ -74,7 +77,7 @@ def __init__(self, global_args): def download(model_name): url = MODELS_MAP[model_name]["url"] - r = requests.get(url, stream=True) + r = requests.get(url, stream=True, timeout=request_timeout) local_filename = f"./{model_name}.ckpt" with open(local_filename, "wb") as fp: diff --git a/scripts/convert_vae_pt_to_diffusers.py b/scripts/convert_vae_pt_to_diffusers.py index a4f967c94fa6..5df8f2e18133 100644 --- a/scripts/convert_vae_pt_to_diffusers.py +++ b/scripts/convert_vae_pt_to_diffusers.py @@ -1,5 +1,6 @@ import argparse import io +import os import requests import torch @@ -15,6 +16,10 @@ ) +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def custom_convert_ldm_vae_checkpoint(checkpoint, config): vae_state_dict = checkpoint @@ -122,7 +127,7 @@ def vae_pt_to_vae_diffuser( ): # Only support V1 r = requests.get( - " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml" + " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml", timeout=request_timeout ) io_obj = io.BytesIO(r.content) diff --git a/src/diffusers/loaders/single_file_utils.py b/src/diffusers/loaders/single_file_utils.py index 42aee4a84822..5ed853e14e95 100644 --- a/src/diffusers/loaders/single_file_utils.py +++ b/src/diffusers/loaders/single_file_utils.py @@ -57,6 +57,9 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + CHECKPOINT_KEY_NAMES = { "v2": "model.diffusion_model.input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight", "xl_base": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.bias", @@ -443,7 +446,7 @@ def fetch_original_config(original_config_file, local_files_only=False): "Please provide a valid local file path." ) - original_config_file = BytesIO(requests.get(original_config_file).content) + original_config_file = BytesIO(requests.get(original_config_file, timeout=request_timeout).content) else: raise ValueError("Invalid `original_config_file` provided. Please set it to a valid file path or URL.") diff --git a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py index 4cc4eabd4a40..ebb67ba4fb33 100644 --- a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +++ b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py @@ -14,6 +14,7 @@ # limitations under the License. """Conversion script for the Stable Diffusion checkpoints.""" +import os import re from contextlib import nullcontext from io import BytesIO @@ -66,6 +67,10 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def shave_segments(path, n_shave_prefix_segments=1): """ Removes segments. Positive values shave the first segments, negative shave the last segments. @@ -1324,7 +1329,7 @@ def download_from_original_stable_diffusion_ckpt( config_url = "https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/x4-upscaling.yaml" if config_url is not None: - original_config_file = BytesIO(requests.get(config_url).content) + original_config_file = BytesIO(requests.get(config_url, timeout=request_timeout).content) else: with open(original_config_file, "r") as f: original_config_file = f.read() diff --git a/src/diffusers/utils/loading_utils.py b/src/diffusers/utils/loading_utils.py index fd66aaa4da6e..564675e793bf 100644 --- a/src/diffusers/utils/loading_utils.py +++ b/src/diffusers/utils/loading_utils.py @@ -10,6 +10,10 @@ from .import_utils import BACKENDS_MAPPING, is_imageio_available +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def load_image( image: Union[str, PIL.Image.Image], convert_method: Optional[Callable[[PIL.Image.Image], PIL.Image.Image]] = None ) -> PIL.Image.Image: @@ -29,7 +33,7 @@ def load_image( """ if isinstance(image, str): if image.startswith("http://") or image.startswith("https://"): - image = PIL.Image.open(requests.get(image, stream=True).raw) + image = PIL.Image.open(requests.get(image, stream=True, timeout=request_timeout).raw) elif os.path.isfile(image): image = PIL.Image.open(image) else: diff --git a/src/diffusers/utils/testing_utils.py b/src/diffusers/utils/testing_utils.py index 137420945340..d27c09e402a6 100644 --- a/src/diffusers/utils/testing_utils.py +++ b/src/diffusers/utils/testing_utils.py @@ -47,6 +47,9 @@ from .logging import get_logger +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + global_rng = random.Random() logger = get_logger(__name__) @@ -594,7 +597,7 @@ def load_numpy(arry: Union[str, np.ndarray], local_path: Optional[str] = None) - # local_path can be passed to correct images of tests return Path(local_path, arry.split("/")[-5], arry.split("/")[-2], arry.split("/")[-1]).as_posix() elif arry.startswith("http://") or arry.startswith("https://"): - response = requests.get(arry) + response = requests.get(arry, timeout=request_timeout) response.raise_for_status() arry = np.load(BytesIO(response.content)) elif os.path.isfile(arry): @@ -615,7 +618,7 @@ def load_numpy(arry: Union[str, np.ndarray], local_path: Optional[str] = None) - def load_pt(url: str, map_location: str): - response = requests.get(url) + response = requests.get(url, timeout=request_timeout) response.raise_for_status() arry = torch.load(BytesIO(response.content), map_location=map_location) return arry @@ -634,7 +637,7 @@ def load_image(image: Union[str, PIL.Image.Image]) -> PIL.Image.Image: """ if isinstance(image, str): if image.startswith("http://") or image.startswith("https://"): - image = PIL.Image.open(requests.get(image, stream=True).raw) + image = PIL.Image.open(requests.get(image, stream=True, timeout=request_timeout).raw) elif os.path.isfile(image): image = PIL.Image.open(image) else: diff --git a/utils/fetch_latest_release_branch.py b/utils/fetch_latest_release_branch.py index 9bf578a5f58e..0070f964c022 100644 --- a/utils/fetch_latest_release_branch.py +++ b/utils/fetch_latest_release_branch.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os + import requests from packaging.version import parse @@ -22,12 +24,16 @@ REPO = "diffusers" +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def fetch_all_branches(user, repo): branches = [] # List to store all branches page = 1 # Start from first page while True: # Make a request to the GitHub API for the branches - response = requests.get(f"https://api.github.com/repos/{user}/{repo}/branches", params={"page": page}) + response = requests.get(f"https://api.github.com/repos/{user}/{repo}/branches", params={"page": page}, timeout=request_timeout) # Check if the request was successful if response.status_code == 200: diff --git a/utils/notify_slack_about_release.py b/utils/notify_slack_about_release.py index a67dd8bd0685..9ad7b0fa61c9 100644 --- a/utils/notify_slack_about_release.py +++ b/utils/notify_slack_about_release.py @@ -24,9 +24,13 @@ SLACK_WEBHOOK_URL = os.getenv("SLACK_WEBHOOK_URL") +# Set global timeout +request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) + + def check_pypi_for_latest_release(library_name): """Check PyPI for the latest release of the library.""" - response = requests.get(f"https://pypi.org/pypi/{library_name}/json") + response = requests.get(f"https://pypi.org/pypi/{library_name}/json", timeout=request_timeout) if response.status_code == 200: data = response.json() return data["info"]["version"] @@ -38,7 +42,7 @@ def check_pypi_for_latest_release(library_name): def get_github_release_info(github_repo): """Fetch the latest release info from GitHub.""" url = f"https://api.github.com/repos/{github_repo}/releases/latest" - response = requests.get(url) + response = requests.get(url, timeout=request_timeout) if response.status_code == 200: data = response.json() From 44b5c6091c4f11d9bf8f15bd805ea6d496b7cfe6 Mon Sep 17 00:00:00 2001 From: kghamilton89 <29099829+kghamilton89@users.noreply.github.com> Date: Sun, 30 Mar 2025 18:20:01 +0300 Subject: [PATCH 2/4] declare DIFFUSERS_REQUEST_TIMEOUT in constants and import when needed --- examples/instruct_pix2pix/train_instruct_pix2pix.py | 7 ++----- .../train_instruct_pix2pix_lora.py | 7 ++----- .../convert_original_promptdiffusion_to_diffusers.py | 7 ++----- scripts/convert_dance_diffusion_to_diffusers.py | 6 ++---- scripts/convert_vae_pt_to_diffusers.py | 8 ++------ src/diffusers/loaders/single_file_utils.py | 6 ++---- .../pipelines/stable_diffusion/convert_from_ckpt.py | 7 ++----- src/diffusers/utils/constants.py | 1 + src/diffusers/utils/loading_utils.py | 7 ++----- src/diffusers/utils/testing_utils.py | 10 ++++------ utils/fetch_latest_release_branch.py | 8 +++----- utils/notify_slack_about_release.py | 10 ++++------ 12 files changed, 28 insertions(+), 56 deletions(-) diff --git a/examples/instruct_pix2pix/train_instruct_pix2pix.py b/examples/instruct_pix2pix/train_instruct_pix2pix.py index 9ba85055b39f..028257c98857 100644 --- a/examples/instruct_pix2pix/train_instruct_pix2pix.py +++ b/examples/instruct_pix2pix/train_instruct_pix2pix.py @@ -49,6 +49,7 @@ from diffusers.optimization import get_scheduler from diffusers.training_utils import EMAModel from diffusers.utils import check_min_version, deprecate, is_wandb_available +from diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT from diffusers.utils.import_utils import is_xformers_available from diffusers.utils.torch_utils import is_compiled_module @@ -67,10 +68,6 @@ WANDB_TABLE_COL_NAMES = ["original_image", "edited_image", "edit_prompt"] -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def log_validation( pipeline, args, @@ -422,7 +419,7 @@ def convert_to_np(image, resolution): def download_image(url): - image = PIL.Image.open(requests.get(url, stream=True, timeout=request_timeout).raw) + image = PIL.Image.open(requests.get(url, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw) image = PIL.ImageOps.exif_transpose(image) image = image.convert("RGB") return image diff --git a/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py b/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py index c10a621b10d8..1d9203be7e01 100644 --- a/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py +++ b/examples/research_projects/instructpix2pix_lora/train_instruct_pix2pix_lora.py @@ -54,6 +54,7 @@ from diffusers.optimization import get_scheduler from diffusers.training_utils import EMAModel, cast_training_params from diffusers.utils import check_min_version, convert_state_dict_to_diffusers, deprecate, is_wandb_available +from diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT from diffusers.utils.hub_utils import load_or_create_model_card, populate_model_card from diffusers.utils.import_utils import is_xformers_available from diffusers.utils.torch_utils import is_compiled_module @@ -74,10 +75,6 @@ WANDB_TABLE_COL_NAMES = ["original_image", "edited_image", "edit_prompt"] -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def save_model_card( repo_id: str, images: list = None, @@ -479,7 +476,7 @@ def convert_to_np(image, resolution): def download_image(url): - image = PIL.Image.open(requests.get(url, stream=True, timeout=request_timeout).raw) + image = PIL.Image.open(requests.get(url, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw) image = PIL.ImageOps.exif_transpose(image) image = image.convert("RGB") return image diff --git a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py index 8e3c1fbee88f..6dd8368c0525 100644 --- a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py +++ b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py @@ -60,6 +60,7 @@ UnCLIPScheduler, ) from diffusers.utils import is_accelerate_available, logging +from diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT if is_accelerate_available(): @@ -69,10 +70,6 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def shave_segments(path, n_shave_prefix_segments=1): """ Removes segments. Positive values shave the first segments, negative shave the last segments. @@ -1440,7 +1437,7 @@ def download_from_original_stable_diffusion_ckpt( config_url = "https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/x4-upscaling.yaml" if config_url is not None: - original_config_file = BytesIO(requests.get(config_url, timeout=request_timeout).content) + original_config_file = BytesIO(requests.get(config_url, timeout=DIFFUSERS_REQUEST_TIMEOUT).content) else: with open(original_config_file, "r") as f: original_config_file = f.read() diff --git a/scripts/convert_dance_diffusion_to_diffusers.py b/scripts/convert_dance_diffusion_to_diffusers.py index 4e7c06b97725..f9caa50dfc9b 100755 --- a/scripts/convert_dance_diffusion_to_diffusers.py +++ b/scripts/convert_dance_diffusion_to_diffusers.py @@ -11,6 +11,7 @@ from torch import nn from diffusers import DanceDiffusionPipeline, IPNDMScheduler, UNet1DModel +from diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT MODELS_MAP = { @@ -46,9 +47,6 @@ }, } -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - def alpha_sigma_to_t(alpha, sigma): """Returns a timestep, given the scaling factors for the clean image and for @@ -77,7 +75,7 @@ def __init__(self, global_args): def download(model_name): url = MODELS_MAP[model_name]["url"] - r = requests.get(url, stream=True, timeout=request_timeout) + r = requests.get(url, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT) local_filename = f"./{model_name}.ckpt" with open(local_filename, "wb") as fp: diff --git a/scripts/convert_vae_pt_to_diffusers.py b/scripts/convert_vae_pt_to_diffusers.py index 5df8f2e18133..c32d855cfb27 100644 --- a/scripts/convert_vae_pt_to_diffusers.py +++ b/scripts/convert_vae_pt_to_diffusers.py @@ -1,6 +1,5 @@ import argparse import io -import os import requests import torch @@ -14,10 +13,7 @@ renew_vae_attention_paths, renew_vae_resnet_paths, ) - - -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) +from diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT def custom_convert_ldm_vae_checkpoint(checkpoint, config): @@ -127,7 +123,7 @@ def vae_pt_to_vae_diffuser( ): # Only support V1 r = requests.get( - " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml", timeout=request_timeout + " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml", timeout=DIFFUSERS_REQUEST_TIMEOUT ) io_obj = io.BytesIO(r.content) diff --git a/src/diffusers/loaders/single_file_utils.py b/src/diffusers/loaders/single_file_utils.py index 5ed853e14e95..a93f2307bbf3 100644 --- a/src/diffusers/loaders/single_file_utils.py +++ b/src/diffusers/loaders/single_file_utils.py @@ -44,6 +44,7 @@ is_transformers_available, logging, ) +from ..utils.constants import DIFFUSERS_REQUEST_TIMEOUT from ..utils.hub_utils import _get_model_file @@ -57,9 +58,6 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - CHECKPOINT_KEY_NAMES = { "v2": "model.diffusion_model.input_blocks.2.1.transformer_blocks.0.attn2.to_k.weight", "xl_base": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.bias", @@ -446,7 +444,7 @@ def fetch_original_config(original_config_file, local_files_only=False): "Please provide a valid local file path." ) - original_config_file = BytesIO(requests.get(original_config_file, timeout=request_timeout).content) + original_config_file = BytesIO(requests.get(original_config_file, timeout=DIFFUSERS_REQUEST_TIMEOUT).content) else: raise ValueError("Invalid `original_config_file` provided. Please set it to a valid file path or URL.") diff --git a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py index ebb67ba4fb33..c37025d862c6 100644 --- a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +++ b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py @@ -53,6 +53,7 @@ UnCLIPScheduler, ) from ...utils import is_accelerate_available, logging +from ...utils.constants import DIFFUSERS_REQUEST_TIMEOUT from ..latent_diffusion.pipeline_latent_diffusion import LDMBertConfig, LDMBertModel from ..paint_by_example import PaintByExampleImageEncoder from ..pipeline_utils import DiffusionPipeline @@ -67,10 +68,6 @@ logger = logging.get_logger(__name__) # pylint: disable=invalid-name -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def shave_segments(path, n_shave_prefix_segments=1): """ Removes segments. Positive values shave the first segments, negative shave the last segments. @@ -1329,7 +1326,7 @@ def download_from_original_stable_diffusion_ckpt( config_url = "https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/x4-upscaling.yaml" if config_url is not None: - original_config_file = BytesIO(requests.get(config_url, timeout=request_timeout).content) + original_config_file = BytesIO(requests.get(config_url, timeout=DIFFUSERS_REQUEST_TIMEOUT).content) else: with open(original_config_file, "r") as f: original_config_file = f.read() diff --git a/src/diffusers/utils/constants.py b/src/diffusers/utils/constants.py index fa12318f4714..7c04287d33ed 100644 --- a/src/diffusers/utils/constants.py +++ b/src/diffusers/utils/constants.py @@ -40,6 +40,7 @@ DIFFUSERS_DYNAMIC_MODULE_NAME = "diffusers_modules" HF_MODULES_CACHE = os.getenv("HF_MODULES_CACHE", os.path.join(HF_HOME, "modules")) DEPRECATED_REVISION_ARGS = ["fp16", "non-ema"] +DIFFUSERS_REQUEST_TIMEOUT = 60 # Below should be `True` if the current version of `peft` and `transformers` are compatible with # PEFT backend. Will automatically fall back to PEFT backend if the correct versions of the libraries are diff --git a/src/diffusers/utils/loading_utils.py b/src/diffusers/utils/loading_utils.py index 564675e793bf..dd23ae73c861 100644 --- a/src/diffusers/utils/loading_utils.py +++ b/src/diffusers/utils/loading_utils.py @@ -7,13 +7,10 @@ import PIL.ImageOps import requests +from .constants import DIFFUSERS_REQUEST_TIMEOUT from .import_utils import BACKENDS_MAPPING, is_imageio_available -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def load_image( image: Union[str, PIL.Image.Image], convert_method: Optional[Callable[[PIL.Image.Image], PIL.Image.Image]] = None ) -> PIL.Image.Image: @@ -33,7 +30,7 @@ def load_image( """ if isinstance(image, str): if image.startswith("http://") or image.startswith("https://"): - image = PIL.Image.open(requests.get(image, stream=True, timeout=request_timeout).raw) + image = PIL.Image.open(requests.get(image, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw) elif os.path.isfile(image): image = PIL.Image.open(image) else: diff --git a/src/diffusers/utils/testing_utils.py b/src/diffusers/utils/testing_utils.py index d27c09e402a6..6c16a08a4a99 100644 --- a/src/diffusers/utils/testing_utils.py +++ b/src/diffusers/utils/testing_utils.py @@ -26,6 +26,7 @@ from numpy.linalg import norm from packaging import version +from .constants import DIFFUSERS_REQUEST_TIMEOUT from .import_utils import ( BACKENDS_MAPPING, is_accelerate_available, @@ -47,9 +48,6 @@ from .logging import get_logger -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - global_rng = random.Random() logger = get_logger(__name__) @@ -597,7 +595,7 @@ def load_numpy(arry: Union[str, np.ndarray], local_path: Optional[str] = None) - # local_path can be passed to correct images of tests return Path(local_path, arry.split("/")[-5], arry.split("/")[-2], arry.split("/")[-1]).as_posix() elif arry.startswith("http://") or arry.startswith("https://"): - response = requests.get(arry, timeout=request_timeout) + response = requests.get(arry, timeout=DIFFUSERS_REQUEST_TIMEOUT) response.raise_for_status() arry = np.load(BytesIO(response.content)) elif os.path.isfile(arry): @@ -618,7 +616,7 @@ def load_numpy(arry: Union[str, np.ndarray], local_path: Optional[str] = None) - def load_pt(url: str, map_location: str): - response = requests.get(url, timeout=request_timeout) + response = requests.get(url, timeout=DIFFUSERS_REQUEST_TIMEOUT) response.raise_for_status() arry = torch.load(BytesIO(response.content), map_location=map_location) return arry @@ -637,7 +635,7 @@ def load_image(image: Union[str, PIL.Image.Image]) -> PIL.Image.Image: """ if isinstance(image, str): if image.startswith("http://") or image.startswith("https://"): - image = PIL.Image.open(requests.get(image, stream=True, timeout=request_timeout).raw) + image = PIL.Image.open(requests.get(image, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw) elif os.path.isfile(image): image = PIL.Image.open(image) else: diff --git a/utils/fetch_latest_release_branch.py b/utils/fetch_latest_release_branch.py index 0070f964c022..cc34cfb677cd 100644 --- a/utils/fetch_latest_release_branch.py +++ b/utils/fetch_latest_release_branch.py @@ -18,22 +18,20 @@ import requests from packaging.version import parse +from ..src.diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT + # GitHub repository details USER = "huggingface" REPO = "diffusers" -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def fetch_all_branches(user, repo): branches = [] # List to store all branches page = 1 # Start from first page while True: # Make a request to the GitHub API for the branches - response = requests.get(f"https://api.github.com/repos/{user}/{repo}/branches", params={"page": page}, timeout=request_timeout) + response = requests.get(f"https://api.github.com/repos/{user}/{repo}/branches", params={"page": page}, timeout=DIFFUSERS_REQUEST_TIMEOUT) # Check if the request was successful if response.status_code == 200: diff --git a/utils/notify_slack_about_release.py b/utils/notify_slack_about_release.py index 9ad7b0fa61c9..9d4d11f4508f 100644 --- a/utils/notify_slack_about_release.py +++ b/utils/notify_slack_about_release.py @@ -17,6 +17,8 @@ import requests +from ..src.diffusers.utils.constants import DIFFUSERS_REQUEST_TIMEOUT + # Configuration LIBRARY_NAME = "diffusers" @@ -24,13 +26,9 @@ SLACK_WEBHOOK_URL = os.getenv("SLACK_WEBHOOK_URL") -# Set global timeout -request_timeout = int(os.environ.get("DIFFUSERS_REQUEST_TIMEOUT", 60)) - - def check_pypi_for_latest_release(library_name): """Check PyPI for the latest release of the library.""" - response = requests.get(f"https://pypi.org/pypi/{library_name}/json", timeout=request_timeout) + response = requests.get(f"https://pypi.org/pypi/{library_name}/json", timeout=DIFFUSERS_REQUEST_TIMEOUT) if response.status_code == 200: data = response.json() return data["info"]["version"] @@ -42,7 +40,7 @@ def check_pypi_for_latest_release(library_name): def get_github_release_info(github_repo): """Fetch the latest release info from GitHub.""" url = f"https://api.github.com/repos/{github_repo}/releases/latest" - response = requests.get(url, timeout=request_timeout) + response = requests.get(url, timeout=DIFFUSERS_REQUEST_TIMEOUT) if response.status_code == 200: data = response.json() From 0996215000f775df7ca06775b3c6ef38d7a5abbb Mon Sep 17 00:00:00 2001 From: kghamilton89 <29099829+kghamilton89@users.noreply.github.com> Date: Sun, 30 Mar 2025 18:26:49 +0300 Subject: [PATCH 3/4] remove unneeded os import --- .../convert_original_promptdiffusion_to_diffusers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py index 6dd8368c0525..c9efcffa5bb8 100644 --- a/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py +++ b/examples/research_projects/promptdiffusion/convert_original_promptdiffusion_to_diffusers.py @@ -15,7 +15,6 @@ """Conversion script for stable diffusion checkpoints which _only_ contain a controlnet.""" import argparse -import os import re from contextlib import nullcontext from io import BytesIO From ae6ccb59a43492df1f61707007c3f02b7b140c51 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 31 Mar 2025 06:23:28 +0000 Subject: [PATCH 4/4] Apply style fixes --- scripts/convert_vae_pt_to_diffusers.py | 3 ++- .../pipelines/stable_diffusion/convert_from_ckpt.py | 1 - utils/fetch_latest_release_branch.py | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/scripts/convert_vae_pt_to_diffusers.py b/scripts/convert_vae_pt_to_diffusers.py index c32d855cfb27..13ceca40f34f 100644 --- a/scripts/convert_vae_pt_to_diffusers.py +++ b/scripts/convert_vae_pt_to_diffusers.py @@ -123,7 +123,8 @@ def vae_pt_to_vae_diffuser( ): # Only support V1 r = requests.get( - " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml", timeout=DIFFUSERS_REQUEST_TIMEOUT + " https://raw.githubusercontent.com/CompVis/stable-diffusion/main/configs/stable-diffusion/v1-inference.yaml", + timeout=DIFFUSERS_REQUEST_TIMEOUT, ) io_obj = io.BytesIO(r.content) diff --git a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py index c37025d862c6..d337aba8e9d5 100644 --- a/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +++ b/src/diffusers/pipelines/stable_diffusion/convert_from_ckpt.py @@ -14,7 +14,6 @@ # limitations under the License. """Conversion script for the Stable Diffusion checkpoints.""" -import os import re from contextlib import nullcontext from io import BytesIO diff --git a/utils/fetch_latest_release_branch.py b/utils/fetch_latest_release_branch.py index cc34cfb677cd..f0602d5b29a8 100644 --- a/utils/fetch_latest_release_branch.py +++ b/utils/fetch_latest_release_branch.py @@ -13,7 +13,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os import requests from packaging.version import parse @@ -31,7 +30,11 @@ def fetch_all_branches(user, repo): page = 1 # Start from first page while True: # Make a request to the GitHub API for the branches - response = requests.get(f"https://api.github.com/repos/{user}/{repo}/branches", params={"page": page}, timeout=DIFFUSERS_REQUEST_TIMEOUT) + response = requests.get( + f"https://api.github.com/repos/{user}/{repo}/branches", + params={"page": page}, + timeout=DIFFUSERS_REQUEST_TIMEOUT, + ) # Check if the request was successful if response.status_code == 200: