microsoft/VibeVoice · error · NotImplementedError

{algorithm_type} is not implemented for {self.__class__}

Error message

{algorithm_type} is not implemented for {self.__class__}

What it means

The scheduler accepts algorithm_type in {`dpmsolver`, `dpmsolver++`, `sde-dpmsolver`, `sde-dpmsolver++`}; the legacy value `deis` is silently remapped to `dpmsolver++`. Every other string raises NotImplementedError at construction time. The algorithm choice decides whether the model output is converted to x0-prediction (++) or epsilon-prediction, so it must be one of the implemented solvers.

Source

Thrown at vibevoice/schedule/dpm_solver.py:274

            # Close to 0 without being 0 so first sigma is not inf
            # FP16 smallest positive subnormal works well here
            self.alphas_cumprod[-1] = 2**-24

        # Currently we only support VP-type noise schedule
        self.alpha_t = torch.sqrt(self.alphas_cumprod)
        self.sigma_t = torch.sqrt(1 - self.alphas_cumprod)
        self.lambda_t = torch.log(self.alpha_t) - torch.log(self.sigma_t)
        self.sigmas = ((1 - self.alphas_cumprod) / self.alphas_cumprod) ** 0.5

        # standard deviation of the initial noise distribution
        self.init_noise_sigma = 1.0

        # settings for DPM-Solver
        if algorithm_type not in ["dpmsolver", "dpmsolver++", "sde-dpmsolver", "sde-dpmsolver++"]:
            if algorithm_type == "deis":
                self.register_to_config(algorithm_type="dpmsolver++")
            else:
                raise NotImplementedError(f"{algorithm_type} is not implemented for {self.__class__}")

        if solver_type not in ["midpoint", "heun"]:
            if solver_type in ["logrho", "bh1", "bh2"]:
                self.register_to_config(solver_type="midpoint")
            else:
                raise NotImplementedError(f"{solver_type} is not implemented for {self.__class__}")

        if algorithm_type not in ["dpmsolver++", "sde-dpmsolver++"] and final_sigmas_type == "zero":
            raise ValueError(
                f"`final_sigmas_type` {final_sigmas_type} is not supported for `algorithm_type` {algorithm_type}. Please choose `sigma_min` instead."
            )

        # settable values
        self.num_inference_steps = None
        timesteps = np.linspace(0, num_train_timesteps - 1, num_train_timesteps, dtype=np.float32)[::-1].copy()
        self.timesteps = torch.from_numpy(timesteps)
        self.model_outputs = [None] * solver_order
        self.lower_order_nums = 0

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Use one of: "dpmsolver", "dpmsolver++", "sde-dpmsolver", "sde-dpmsolver++" (use the sde- variants only if your step function passes noise for the SDE).
  2. If you typed "deis", that works (remapped); if you typed "deis++", change it to "dpmsolver++".
  3. Sanity-check config strings loaded from files before scheduler construction.

Example fix

# before
sched = DPMSolverMultistepScheduler(..., algorithm_type="deis++")

# after
sched = DPMSolverMultistepScheduler(..., algorithm_type="dpmsolver++")
Defensive patterns

Strategy: validation

Validate before calling

ALGOS = {"dpmsolver", "dpmsolver++", "sde-dpmsolver", "sde-dpmsolver++", "deis"}
assert algorithm_type in ALGOS, f"algorithm_type must be one of {sorted(ALGOS)}"
sched = DPMSolverMultistepScheduler(..., algorithm_type=algorithm_type)

Type guard

def is_supported_algorithm_type(v) -> bool:
    return isinstance(v, str) and v in {
        "dpmsolver", "dpmsolver++", "sde-dpmsolver", "sde-dpmsolver++", "deis"
    }

Prevention

When it happens

Trigger: Constructing the scheduler with `algorithm_type="deis++"`, `"dpmsolver+++"`, or any typo — `deis` alone is accepted and remapped, but `deis++` and everything else are not.

Common situations: Hand-editing scheduler configs, copying `deis++` from DEIS papers/other repos, or case/spacing typos in YAML pipeline configs.

Related errors


AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15). Data as JSON: /api/errors/f021c0c2bf3621f5. Report an issue: GitHub.