use anyhow::Result;
use embeddenator_fs::embrfs::{save_hierarchical_manifest, save_sub_engrams_dir, EmbrFS};
use embeddenator_vsa::ReversibleVSAConfig;
use std::path::PathBuf;
#[allow(clippy::too_many_arguments)]
pub fn handle_bundle_hier(
engram: PathBuf,
manifest: PathBuf,
out_hierarchical_manifest: PathBuf,
out_sub_engrams_dir: PathBuf,
max_level_sparsity: usize,
max_chunks_per_node: Option<usize>,
embed_sub_engrams: bool,
verbose: bool,
) -> Result<()> {
if verbose {
println!(
"Embeddenator v{} - Build Hierarchical Artifacts",
env!("CARGO_PKG_VERSION")
);
println!("=============================================");
}
let fs = EmbrFS::load(&engram, &manifest)?;
let config = ReversibleVSAConfig::default();
let mut hierarchical = fs.bundle_hierarchically_with_options(
max_level_sparsity,
max_chunks_per_node,
verbose,
&config,
)?;
save_sub_engrams_dir(&hierarchical.sub_engrams, &out_sub_engrams_dir)?;
if !embed_sub_engrams {
hierarchical.sub_engrams.clear();
}
save_hierarchical_manifest(&hierarchical, &out_hierarchical_manifest)?;
if verbose {
println!(
"Wrote hierarchical manifest: {}",
out_hierarchical_manifest.display()
);
println!("Wrote sub-engrams dir: {}", out_sub_engrams_dir.display());
}
Ok(())
}