diffusion: Fix silent override of explicit guidance_scale=0 (#4999)
Signed-off-by: Harenome Ranaivoarivony-Razanajato <harenome.razanajato1@huawei.com>
This commit is contained in:
1 parent
0a03359224
commit
8cb79308c6
6 files changed
+48
-9
No files matched your search
@@ -72,3 +72,40 @@ def test_tp_seed_same_across_ranks_and_varies_across_requests():
|
||||
|
||||
# Seeds must vary across requests (non-determinism preserved).
|
||||
assert len(set(seeds)) == n_requests, f"Expected {n_requests} unique seeds but got {len(set(seeds))}: {seeds}"
|
||||
|
||||
|
||||
def _request_with_guidance(**sampling_kwargs) -> OmniDiffusionRequest:
|
||||
return OmniDiffusionRequest(
|
||||
prompt={"prompt": "a cup of coffee on a table"},
|
||||
sampling_params=OmniDiffusionSamplingParams(num_inference_steps=1, **sampling_kwargs),
|
||||
request_id="request-test",
|
||||
)
|
||||
|
||||
|
||||
def test_omitted_guidance_scale_is_unset_and_resolved_to_one():
|
||||
# No guidance_scale passed: the caller did not set it, so it must NOT count as
|
||||
# "provided" (each pipeline applies its own default), and __post_init__ resolves the
|
||||
# None "unset" sentinel to a concrete float so no consumer ever observes None.
|
||||
req = _request_with_guidance()
|
||||
|
||||
assert req.sampling_params.guidance_scale_provided is False
|
||||
assert req.sampling_params.guidance_scale == 1.0
|
||||
|
||||
|
||||
def test_explicit_zero_guidance_scale_is_honored():
|
||||
# Regression (#4998): an explicit guidance_scale=0 (disable CFG) must be honored,
|
||||
# not mistaken for "unset" and overridden by the pipeline's model default. This is
|
||||
# the sentinel collision that the None default + ``is not None`` check fixes.
|
||||
req = _request_with_guidance(guidance_scale=0.0)
|
||||
|
||||
assert req.sampling_params.guidance_scale_provided is True
|
||||
assert req.sampling_params.guidance_scale == 0.0
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", [0.999, 1.0, 5.0])
|
||||
def test_explicit_nonzero_guidance_scale_is_honored(value):
|
||||
# Any explicitly-set value (truthy or not) is honored as provided and preserved.
|
||||
req = _request_with_guidance(guidance_scale=value)
|
||||
|
||||
assert req.sampling_params.guidance_scale_provided is True
|
||||
assert req.sampling_params.guidance_scale == value
|
||||
Reference in new issue
Block a user