use std::error::Error; use burn::tensor::ElementConversion; use burn::{ config::Config, module::{Module, Param}, nn, tensor::{ backend::Backend, Tensor, }, }; use super::*; use crate::model::{load::*, autoencoder::load::load_autoencoder, unet::load::load_unet, clip::load::load_clip}; pub fn load_stable_diffusion(path: &str, device: &B::Device) -> Result, Box> { let n_steps = load_usize::("n_steps", path, device)?; let alpha_cumulative_products = load_tensor::("alphas_cumprod", path, device)?.into(); let autoencoder = load_autoencoder(&format!("{}/{}", path, "autoencoder"), device)?; let diffusion = load_unet(&format!("{}/{}", path, "unet"), device)?; let clip = load_clip(&format!("{}/{}", path, "clip"), device)?; Ok(StableDiffusion { n_steps, alpha_cumulative_products, autoencoder, diffusion, clip, }) }