embeddenator_cli/commands/
bundle_hier.rs

1//! Bundle hierarchical artifacts command implementation
2
3use 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    // Always write the sub-engrams directory for store-backed retrieval.
42    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}