#pragma once #include #include #include #include namespace kimodo::detail { struct diffusion_schedule { std::vector use_timesteps; std::vector alpha_cumprod; std::vector alpha_cumprod_prev; }; std::expected make_cosine_schedule( std::uint32_t base_steps, std::uint32_t sample_steps); // In-place DDIM eta=0 update for a contiguous [B,T,D] F32 tensor. std::expected ddim_step( const diffusion_schedule &schedule, std::uint32_t index, const float *x_t, const float *pred_xstart, float *output, std::size_t values); // Exact separated CFG chunk order from upstream: text, constraint, uncond. std::expected separated_cfg( const float *text, const float *constraint, const float *uncond, float text_weight, float constraint_weight, float *output, std::size_t values); } // namespace kimodo::detail