Skip to main content

embeddenator_cli/commands/
bundle_hier.rs

1//! Bundle hierarchical artifacts command implementation
2
3use 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    // Load existing engram and manifest (auto-detects holographic mode)
28    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    // Always write the sub-engrams directory for store-backed retrieval.
39    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}