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