embeddenator_cli/commands/
bundle_hier.rs1use anyhow::Result;
4use embeddenator_fs::embrfs::{save_hierarchical_manifest, save_sub_engrams_dir, EmbrFS};
5use embeddenator_vsa::ReversibleVSAConfig;
6use std::path::PathBuf;
7
8#[allow(clippy::too_many_arguments)]
9pub fn handle_bundle_hier(
10 engram: PathBuf,
11 manifest: PathBuf,
12 out_hierarchical_manifest: PathBuf,
13 out_sub_engrams_dir: PathBuf,
14 max_level_sparsity: usize,
15 max_chunks_per_node: Option<usize>,
16 embed_sub_engrams: bool,
17 verbose: bool,
18) -> Result<()> {
19 if verbose {
20 println!(
21 "Embeddenator v{} - Build Hierarchical Artifacts",
22 env!("CARGO_PKG_VERSION")
23 );
24 println!("=============================================");
25 }
26
27 let fs = EmbrFS::load(&engram, &manifest)?;
29
30 let config = ReversibleVSAConfig::default();
31 let mut hierarchical = fs.bundle_hierarchically_with_options(
32 max_level_sparsity,
33 max_chunks_per_node,
34 verbose,
35 &config,
36 )?;
37
38 save_sub_engrams_dir(&hierarchical.sub_engrams, &out_sub_engrams_dir)?;
40
41 if !embed_sub_engrams {
42 hierarchical.sub_engrams.clear();
43 }
44
45 save_hierarchical_manifest(&hierarchical, &out_hierarchical_manifest)?;
46
47 if verbose {
48 println!(
49 "Wrote hierarchical manifest: {}",
50 out_hierarchical_manifest.display()
51 );
52 println!("Wrote sub-engrams dir: {}", out_sub_engrams_dir.display());
53 }
54
55 Ok(())
56}