import math from diffusers.configuration_utils import ConfigMixin, register_to_config class YuE2SemanticGuider(ConfigMixin): config_name = "guider_config.json" @register_to_config def __init__(self, scale=None): if scale is not None and (not math.isfinite(scale) or not 0 <= scale <= 20): raise ValueError("Semantic guidance must be finite and in [0,20]") def scale_for(self, cot): return (1.01 if cot == "off" else 1.0) if self.config.scale is None else self.config.scale def combine(self, conditional, unconditional, cot): scale = self.scale_for(cot) return conditional if scale == 1.0 else unconditional + scale * (conditional - unconditional)