use ipfrs::{Node, NodeConfig};
use ipfrs_tensorlogic::{Constant, Predicate, Term};
#[tokio::main]
async fn main() -> ipfrs::Result<()> {
println!("=== IPFRS Lazy Loading Demo ===\n");
let mut node = Node::new(NodeConfig::default())?;
println!("1. Created node (components not yet initialized)");
node.start().await?;
println!("2. Started node (still no semantic/tensorlogic initialization)");
println!("\n--- Initial Status ---");
println!("Semantic enabled: {}", node.is_semantic_enabled());
println!("Semantic initialized: {}", node.is_semantic_initialized());
println!("TensorLogic enabled: {}", node.is_tensorlogic_enabled());
println!(
"TensorLogic initialized: {}",
node.is_tensorlogic_initialized()
);
println!("\n3. Performing first semantic operation...");
let data = b"Hello, lazy loading!";
let cid = node.add_bytes(data.as_ref()).await?;
let embedding = vec![0.5; 768]; node.index_content(&cid, &embedding).await?;
println!(" Semantic router was initialized on first use!");
println!("\n--- After First Semantic Use ---");
println!("Semantic initialized: {}", node.is_semantic_initialized());
println!(
"TensorLogic initialized: {}",
node.is_tensorlogic_initialized()
);
println!("\n4. Performing first logic operation...");
let alice = Term::Const(Constant::String("Alice".to_string()));
let fact = Predicate::new("person".to_string(), vec![alice]);
node.add_fact(fact)?;
println!(" TensorLogic store was initialized on first use!");
println!("\n--- Final Status ---");
println!("Semantic initialized: {}", node.is_semantic_initialized());
println!(
"TensorLogic initialized: {}",
node.is_tensorlogic_initialized()
);
node.stop().await?;
println!("\n=== Warmup Demo ===");
let mut node2 = Node::new(NodeConfig::default())?;
node2.start().await?;
println!("Created second node");
println!("Pre-warming all components...");
node2.warmup()?;
println!("All components pre-initialized!");
println!("\n--- After Warmup ---");
println!("Semantic initialized: {}", node2.is_semantic_initialized());
println!(
"TensorLogic initialized: {}",
node2.is_tensorlogic_initialized()
);
node2.stop().await?;
println!("\n=== Benefits of Lazy Loading ===");
println!("✓ Faster startup time (only initialize what you use)");
println!("✓ Lower memory usage (components not loaded until needed)");
println!("✓ Flexible deployment (configure features, pay only for what you use)");
println!("✓ Optional warmup for predictable latency in production");
Ok(())
}