Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -777,15 +777,10 @@ def check_inputs(
"Provide either `ip_adapter_image` or `ip_adapter_image_embeds`. Cannot leave both `ip_adapter_image` and `ip_adapter_image_embeds` defined."
)

if ip_adapter_image_embeds is not None:
if not isinstance(ip_adapter_image_embeds, list):
raise ValueError(
f"`ip_adapter_image_embeds` has to be of type `list` but is {type(ip_adapter_image_embeds)}"
)
elif ip_adapter_image_embeds[0].ndim not in [3, 4]:
raise ValueError(
f"`ip_adapter_image_embeds` has to be a list of 3D or 4D tensors but is {ip_adapter_image_embeds[0].ndim}D"
)
if ip_adapter_image_embeds is not None and ip_adapter_image_embeds.ndim not in [3, 4]:
raise ValueError(
f"`ip_adapter_image_embeds` has to be a 3D or 4D tensor but is {ip_adapter_image_embeds.ndim}D"
)

# Copied from diffusers.pipelines.stable_diffusion_3.pipeline_stable_diffusion_3.StableDiffusion3Pipeline.prepare_latents
def prepare_latents(
Expand Down
30 changes: 30 additions & 0 deletions tests/pipelines/controlnet_sd3/test_controlnet_inpaint_sd3.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import pytest
import torch
from transformers import (
AutoConfig,
Expand Down Expand Up @@ -195,6 +196,35 @@ def test_controlnet_inpaint_sd3(self):

assert_tensors_close(image_slice.flatten().cpu(), expected_slice, atol=1e-2)

def _check_inputs_with_ip_adapter_embeds(self, pipe, ip_adapter_image_embeds):
pipe.check_inputs(
height=32,
width=32,
image=torch.zeros(1, 3, 32, 32),
prompt=None,
prompt_2=None,
prompt_3=None,
prompt_embeds=torch.zeros(1, 2, 32),
pooled_prompt_embeds=torch.zeros(1, 64),
ip_adapter_image_embeds=ip_adapter_image_embeds,
control_guidance_start=[0.0],
control_guidance_end=[1.0],
)

def test_check_inputs_accepts_ip_adapter_image_embeds_tensor(self):
# Regression: `check_inputs` required a `list`, but the `__call__` docstring and
# `prepare_ip_adapter_image_embeds` (which calls `.chunk(2)` on it) both document and use a
# tensor, so the documented argument could never be passed.
pipe = self.get_pipeline()

self._check_inputs_with_ip_adapter_embeds(pipe, torch.zeros(1, 2, 32))

def test_check_inputs_rejects_ip_adapter_image_embeds_with_bad_ndim(self):
pipe = self.get_pipeline()

with pytest.raises(ValueError, match="has to be a 3D or 4D tensor"):
self._check_inputs_with_ip_adapter_embeds(pipe, torch.zeros(1, 32))


class TestStableDiffusion3ControlNetInpaintingPipelineMemory(
StableDiffusion3ControlNetInpaintingPipelineTesterConfig, MemoryTesterMixin
Expand Down
Loading