use ahash::AHashMap;
use terraphim_config::{ConfigBuilder, Haystack, Role, ServiceType};
use terraphim_multi_agent::{
CommandInput, CommandType, MultiAgentError, MultiAgentResult, TerraphimAgent,
};
use terraphim_persistence::DeviceStorage;
use terraphim_types::RelevanceFunction;
fn create_atomic_server_agent_role() -> Role {
Role {
terraphim_it: true,
shortname: Some("AtomicAgent".to_string()),
name: "AtomicServerAgent".into(),
relevance_function: RelevanceFunction::TitleScorer,
theme: "spacelab".to_string(),
kg: None,
llm_enabled: false,
llm_api_key: None,
llm_model: None,
llm_auto_summarize: false,
llm_chat_enabled: false,
llm_chat_system_prompt: None,
llm_chat_model: None,
llm_context_window: Some(16000),
llm_router_enabled: false,
llm_router_config: None,
haystacks: vec![Haystack::new(
"http://localhost:9883".to_string(), ServiceType::Atomic,
true, )
.with_atomic_secret(Some("your-base64-secret-here".to_string()))],
extra: {
let mut extra = AHashMap::new();
extra.insert(
"agent_type".to_string(),
serde_json::json!("atomic_server_specialist"),
);
extra.insert(
"capabilities".to_string(),
serde_json::json!([
"atomic_data_search",
"knowledge_retrieval",
"semantic_analysis"
]),
);
extra.insert(
"goals".to_string(),
serde_json::json!([
"Access atomic data efficiently",
"Provide semantic search",
"Maintain data consistency"
]),
);
extra.insert("llm_provider".to_string(), serde_json::json!("ollama"));
extra.insert("ollama_model".to_string(), serde_json::json!("gemma3:270m"));
extra.insert("llm_temperature".to_string(), serde_json::json!(0.4));
extra.insert("context_enrichment".to_string(), serde_json::json!(true));
extra.insert("max_context_tokens".to_string(), serde_json::json!(16000));
extra
},
}
}
async fn demonstrate_config_evolution() -> MultiAgentResult<()> {
println!("๐ Configuration Evolution: From Role to Intelligent Agent");
println!("=========================================================");
println!("\n1๏ธโฃ Step 1: Traditional Role Configuration");
let _config = ConfigBuilder::new()
.global_shortcut("Ctrl+T")
.add_role("AtomicUser", create_atomic_server_agent_role())
.build()
.expect("Failed to build config");
println!("โ
Traditional config created:");
println!(" - Role: AtomicServerAgent");
println!(" - Haystack: Atomic server (http://localhost:9883)");
println!(" - Authentication: Base64 secret");
println!(" - Read-only: true");
println!("\n2๏ธโฃ Step 2: Multi-Agent System Evolution");
let persistence = DeviceStorage::arc_memory_only()
.await
.map_err(|e| MultiAgentError::PersistenceError(e.to_string()))?;
let role = create_atomic_server_agent_role();
let agent = TerraphimAgent::new(role, persistence, None).await?;
agent.initialize().await?;
println!("โ
Role evolved into intelligent agent:");
println!(" - Agent ID: {}", agent.agent_id);
println!(" - Status: {:?}", agent.status);
println!(" - Capabilities: {:?}", agent.get_capabilities());
println!(" - Goals: {:?}", agent.goals.individual_goals);
Ok(())
}
async fn demonstrate_intelligent_queries() -> MultiAgentResult<()> {
println!("\n๐ง Intelligent Atomic Data Queries");
println!("==================================");
let persistence = DeviceStorage::arc_memory_only()
.await
.map_err(|e| MultiAgentError::PersistenceError(e.to_string()))?;
let role = create_atomic_server_agent_role();
let agent = TerraphimAgent::new(role, persistence, None).await?;
agent.initialize().await?;
let queries = vec![
(
CommandType::Answer,
"Find all resources related to data modeling in the atomic server",
),
(
CommandType::Analyze,
"Analyze the relationships between atomic data properties",
),
(
CommandType::Generate,
"Generate a summary of atomic server best practices",
),
(
CommandType::Review,
"Review the data consistency in our atomic server",
),
];
for (command_type, query_text) in queries {
println!("\n๐ Query Type: {:?}", command_type);
println!(" Query: {}", query_text);
let input = CommandInput::new(query_text.to_string(), command_type);
let output = agent.process_command(input).await?;
println!(" ๐ค AI Response: {}", output.text);
let token_tracker = agent.token_tracker.read().await;
let cost_tracker = agent.cost_tracker.read().await;
println!(
" ๐ Tokens: {} in / {} out",
token_tracker.total_input_tokens, token_tracker.total_output_tokens
);
println!(" ๐ฐ Cost: ${:.6}", cost_tracker.current_month_spending);
}
Ok(())
}
async fn demonstrate_context_integration() -> MultiAgentResult<()> {
println!("\n๐๏ธ Multi-layered Context Integration");
println!("===================================");
let persistence = DeviceStorage::arc_memory_only()
.await
.map_err(|e| MultiAgentError::PersistenceError(e.to_string()))?;
let role = create_atomic_server_agent_role();
let agent = TerraphimAgent::new(role, persistence, None).await?;
agent.initialize().await?;
let complex_query = "How can I optimize atomic data queries for better performance while maintaining consistency?";
println!("๐ฏ Complex Query: {}", complex_query);
println!("\n๐ Context Sources Being Integrated:");
println!(" 1. ๐ Atomic Server Data (via haystack)");
println!(" 2. ๐ง Knowledge Graph (semantic relationships)");
println!(" 3. ๐ญ Agent Memory (previous interactions)");
println!(" 4. ๐ฏ Role Goals (optimization & consistency)");
println!(" 5. โ๏ธ Agent Capabilities (atomic_data_search, semantic_analysis)");
let input = CommandInput::new(complex_query.to_string(), CommandType::Analyze);
let output = agent.process_command(input).await?;
println!("\n๐ Comprehensive Analysis:");
println!("{}", output.text);
let context = agent.context.read().await;
println!("\n๐ Context Utilization:");
println!(" Context Items: {}", context.items.len());
println!(" Context Tokens: {}", context.current_tokens);
println!(
" Token Efficiency: {:.1}%",
(context.current_tokens as f32 / context.max_tokens as f32) * 100.0
);
Ok(())
}
async fn demonstrate_evolution_comparison() -> MultiAgentResult<()> {
println!("\nโ๏ธ Evolution Comparison: Traditional vs Intelligent");
println!("=================================================");
println!("๐ด Traditional Approach:");
println!(" โข Static role configuration");
println!(" โข Manual query construction");
println!(" โข Basic haystack search");
println!(" โข No learning or adaptation");
println!(" โข Limited context awareness");
println!("\n๐ข Multi-Agent Intelligence:");
println!(" โข Dynamic agent evolution");
println!(" โข AI-powered query understanding");
println!(" โข Context-enriched search");
println!(" โข Continuous learning from interactions");
println!(" โข Semantic relationship discovery");
println!(" โข Goal-aligned responses");
println!(" โข Cost and performance tracking");
let persistence = DeviceStorage::arc_memory_only()
.await
.map_err(|e| MultiAgentError::PersistenceError(e.to_string()))?;
let role = create_atomic_server_agent_role();
let agent = TerraphimAgent::new(role, persistence, None).await?;
agent.initialize().await?;
let test_query = "atomic data consistency";
let input = CommandInput::new(test_query.to_string(), CommandType::Generate);
let output = agent.process_command(input).await?;
println!("\n๐งช Example: '{}'", test_query);
println!("๐ค Intelligent Response: {}", output.text);
let command_history = agent.command_history.read().await;
println!("\n๐ Intelligence Metrics:");
println!(" Commands Processed: {}", command_history.records.len());
println!(" Agent Learning: Active");
println!(" Context Enrichment: Enabled");
println!(" Performance Tracking: Real-time");
Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("๐ Enhanced Atomic Server Configuration with Multi-Agent System");
println!("==============================================================\n");
demonstrate_config_evolution().await?;
demonstrate_intelligent_queries().await?;
demonstrate_context_integration().await?;
demonstrate_evolution_comparison().await?;
println!("\n๐ All demonstrations completed successfully!");
println!("\nโ
Key Achievements:");
println!(" โข Traditional Role configurations seamlessly evolve into intelligent agents");
println!(" โข Atomic server data becomes accessible through AI-powered interfaces");
println!(" โข Context enrichment provides comprehensive understanding");
println!(" โข Multi-layered intelligence enhances every query");
println!(" โข Performance tracking enables continuous optimization");
println!(
"\n๐ The Multi-Agent System transforms static configurations into intelligent, adaptive agents!"
);
Ok(())
}