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 engram_data = EmbrFS::load_engram(&engram)?;
28 let manifest_data = EmbrFS::load_manifest(&manifest)?;
29
30 let mut fs = EmbrFS::new();
31 fs.engram = engram_data;
32 fs.manifest = manifest_data;
33
34 let config = ReversibleVSAConfig::default();
35 let mut hierarchical = fs.bundle_hierarchically_with_options(
36 max_level_sparsity,
37 max_chunks_per_node,
38 verbose,
39 &config,
40 )?;
41
42 save_sub_engrams_dir(&hierarchical.sub_engrams, &out_sub_engrams_dir)?;
44
45 if !embed_sub_engrams {
46 hierarchical.sub_engrams.clear();
47 }
48
49 save_hierarchical_manifest(&hierarchical, &out_hierarchical_manifest)?;
50
51 if verbose {
52 println!(
53 "Wrote hierarchical manifest: {}",
54 out_hierarchical_manifest.display()
55 );
56 println!("Wrote sub-engrams dir: {}", out_sub_engrams_dir.display());
57 }
58
59 Ok(())
60}