use helios_engine::{Agent, Config, RAGTool};
async fn demonstrate_in_memory() -> helios_engine::Result<()> {
println!("=== IN-MEMORY RAG DEMONSTRATION ===\n");
let api_key = std::env::var("OPENAI_API_KEY").unwrap_or_else(|_| {
println!("⚠ Warning: OPENAI_API_KEY not set. Using placeholder.");
"your-api-key-here".to_string()
});
let config = Config::from_file("config.toml").unwrap_or_else(|_| Config::new_default());
let rag_tool = RAGTool::new_in_memory("https://api.openai.com/v1/embeddings", &api_key);
let mut agent = Agent::builder("InMemoryAgent")
.config(config)
.system_prompt("You are a helpful assistant with in-memory RAG capabilities.")
.tool(Box::new(rag_tool))
.max_iterations(8)
.build()
.await?;
println!("✓ In-memory agent created\n");
println!("Adding documents...");
agent.chat("Store: The capital of France is Paris.").await?;
agent
.chat("Store: The capital of Germany is Berlin.")
.await?;
agent.chat("Store: The capital of Italy is Rome.").await?;
println!("✓ Documents added\n");
println!("Searching...");
let response = agent.chat("What is the capital of Germany?").await?;
println!("Agent: {}\n", response);
println!("Advantages of in-memory:");
println!(" ✓ No external dependencies");
println!(" ✓ Fast and simple");
println!(" ✓ Perfect for development");
println!(" ✗ No persistence (data lost on restart)");
println!(" ✗ Limited scalability\n");
Ok(())
}
async fn demonstrate_qdrant() -> helios_engine::Result<()> {
println!("=== QDRANT RAG DEMONSTRATION ===\n");
let api_key = std::env::var("OPENAI_API_KEY").unwrap_or_else(|_| {
println!("⚠ Warning: OPENAI_API_KEY not set. Using placeholder.");
"your-api-key-here".to_string()
});
let config = Config::from_file("config.toml").unwrap_or_else(|_| Config::new_default());
let rag_tool = RAGTool::new_qdrant(
"http://localhost:6333",
"comparison_demo",
"https://api.openai.com/v1/embeddings",
&api_key,
);
let mut agent = Agent::builder("QdrantAgent")
.config(config)
.system_prompt("You are a helpful assistant with Qdrant RAG capabilities.")
.tool(Box::new(rag_tool))
.max_iterations(8)
.build()
.await?;
println!("✓ Qdrant agent created\n");
println!("Clearing existing data...");
agent.chat("Clear all documents").await?;
println!("✓ Cleared\n");
println!("Adding documents...");
agent
.chat("Store: The Eiffel Tower is located in Paris, France.")
.await?;
agent
.chat("Store: The Colosseum is located in Rome, Italy.")
.await?;
agent
.chat("Store: The Brandenburg Gate is located in Berlin, Germany.")
.await?;
println!("✓ Documents added\n");
println!("Searching...");
let response = agent.chat("What famous landmark is in Berlin?").await?;
println!("Agent: {}\n", response);
println!("Advantages of Qdrant:");
println!(" ✓ Persistent storage");
println!(" ✓ Highly scalable");
println!(" ✓ Production-ready");
println!(" ✓ Advanced features (filtering, etc.)");
println!(" ✗ Requires external service");
println!(" ✗ More complex setup\n");
Ok(())
}
#[tokio::main]
async fn main() -> helios_engine::Result<()> {
println!("🚀 Helios Engine - RAG Backend Comparison");
println!("=========================================\n");
match demonstrate_in_memory().await {
Ok(_) => println!(" In-memory demonstration completed\n"),
Err(e) => println!("❌ In-memory demonstration failed: {}\n", e),
}
println!("---\n");
match demonstrate_qdrant().await {
Ok(_) => println!(" Qdrant demonstration completed\n"),
Err(e) => {
println!("❌ Qdrant demonstration failed: {}", e);
println!(" (Make sure Qdrant is running: docker run -p 6333:6333 qdrant/qdrant)\n");
}
}
println!("\n📊 Comparison Summary:");
println!("┌──────────────────┬────────────────┬──────────────┐");
println!("│ Feature │ In-Memory │ Qdrant │");
println!("├──────────────────┼────────────────┼──────────────┤");
println!("│ Setup │ Easy │ Moderate │");
println!("│ Dependencies │ None │ Qdrant │");
println!("│ Persistence │ No │ Yes │");
println!("│ Scalability │ Limited │ High │");
println!("│ Performance │ Fast (in-mem) │ Fast │");
println!("│ Best for │ Dev/Testing │ Production │");
println!("└──────────────────┴────────────────┴──────────────┘");
println!("\n💡 Recommendations:");
println!(" • Use in-memory for: development, testing, demos");
println!(" • Use Qdrant for: production, large datasets, persistence");
Ok(())
}