microsoft/VibeVoice · error · ValueError
`final_sigmas_type` must be one of 'zero', or 'sigma_min', b
Error message
`final_sigmas_type` must be one of 'zero', or 'sigma_min', but got {self.config.final_sigmas_type} What it means
While building the sigma array, `set_timesteps` reads `config.final_sigmas_type` to decide the last sigma: `"sigma_min"` uses the smallest trained sigma, `"zero"` appends 0. Any other string reaches this ValueError. Note the constructor only cross-checks `zero` against algorithm_type (error 46); an arbitrary invalid value slips through construction and only fails here, at set_timesteps time.
Source
Thrown at vibevoice/schedule/dpm_solver.py:404
if self.config.use_karras_sigmas:
sigmas = np.flip(sigmas).copy()
sigmas = self._convert_to_karras(in_sigmas=sigmas, num_inference_steps=num_inference_steps)
timesteps = np.array([self._sigma_to_t(sigma, log_sigmas) for sigma in sigmas]).round()
elif self.config.use_lu_lambdas:
lambdas = np.flip(log_sigmas.copy())
lambdas = self._convert_to_lu(in_lambdas=lambdas, num_inference_steps=num_inference_steps)
sigmas = np.exp(lambdas)
timesteps = np.array([self._sigma_to_t(sigma, log_sigmas) for sigma in sigmas]).round()
else:
sigmas = np.interp(timesteps, np.arange(0, len(sigmas)), sigmas)
if self.config.final_sigmas_type == "sigma_min":
sigma_last = ((1 - self.alphas_cumprod[0]) / self.alphas_cumprod[0]) ** 0.5
elif self.config.final_sigmas_type == "zero":
sigma_last = 0
else:
raise ValueError(
f"`final_sigmas_type` must be one of 'zero', or 'sigma_min', but got {self.config.final_sigmas_type}"
)
sigmas = np.concatenate([sigmas, [sigma_last]]).astype(np.float32)
self.sigmas = torch.from_numpy(sigmas)
self.timesteps = torch.from_numpy(timesteps).to(device=device, dtype=torch.int64)
self.num_inference_steps = len(timesteps)
self.model_outputs = [
None,
] * self.config.solver_order
self.lower_order_nums = 0
# add an index counter for schedulers that allow duplicated timesteps
self._step_index = None
self._begin_index = NoneView on GitHub (pinned to 94da20d98b)
Solutions
- Set final_sigmas_type to "sigma_min" (default) or "zero" (only with dpmsolver++/sde-dpmsolver++).
- If the config value is missing/empty, delete the key so the scheduler default applies.
- Validate config right after loading because construction does not catch this value.
Example fix
# before DPMSolverMultistepScheduler(..., final_sigmas_type="sigma") # after DPMSolverMultistepScheduler(..., final_sigmas_type="sigma_min")
Defensive patterns
Strategy: validation
Validate before calling
FINAL = {"zero", "sigma_min"}
cfg = scheduler.config.final_sigmas_type
if cfg not in FINAL:
raise ValueError(f"final_sigmas_type {cfg!r} invalid; choose from {sorted(FINAL)}")
scheduler.set_timesteps(30) Type guard
def is_supported_final_sigmas_type(v) -> bool:
return isinstance(v, str) and v in {"zero", "sigma_min"} Prevention
- The invalid value survives construction and only fails in set_timesteps — validate configs eagerly.
- Use 'zero' only with dpmsolver++/sde-dpmsolver++.
- Delete empty/missing keys rather than storing '' when normalising configs.
When it happens
Trigger: Constructing with `final_sigmas_type="sigma"`, `"zeromin"`, or a case variant like `"Zero"`, then calling `set_timesteps(N)`.
Common situations: Hand-written configs with typos; values copied from other scheduler families (some use `sigma_last` or different names); serialised configs that lost the field default and stored an empty string.
Related errors
- `final_sigmas_type` {final_sigmas_type} is not supported for
- Unsupported alpha_transform_type: {alpha_transform_type}
- {beta_schedule} is not implemented for {self.__class__}
- {algorithm_type} is not implemented for {self.__class__}
- {solver_type} is not implemented for {self.__class__}
AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15).
Data as JSON: /api/errors/a6d846f8a1b2aa0b.
Report an issue: GitHub.