use ai_agent::{
service::{AiAgentService, ServiceConfig, AiAgentClient, ApiClientBuilder},
config::AgentConfig,
};
use std::sync::Arc;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt::init();
println!("🏭 AI Agent In-Process Service Example");
println!("=====================================");
let service_config = ServiceConfig::default();
let agent_config = AgentConfig::load_with_fallback("config.toml")?;
println!("🔧 Creating AI Agent Service...");
let service = Arc::new(AiAgentService::new(service_config, agent_config).await?);
println!("✅ Service created successfully");
let client = AiAgentClient::new(ApiClientBuilder::in_process(service.clone()));
println!("\n📝 Example 1: Basic task execution");
println!("---------------------------------");
match client.execute_simple_task("Write a hello world program in Rust").await {
Ok(response) => {
println!("✅ Task completed");
println!("📋 Summary: {}", response.result.unwrap_or_default().summary);
}
Err(e) => {
println!("❌ Task failed: {}", e);
}
}
println!("\n🔄 Example 2: Multiple concurrent tasks");
println!("-------------------------------------");
let tasks = vec![
"List all .rs files in the src directory",
"Read the Cargo.toml file and show dependencies",
"Create a simple test file",
];
let futures = tasks.into_iter()
.map(|task| client.execute_simple_task(task))
.collect::<Vec<_>>();
let results = futures::future::join_all(futures).await;
println!("📊 Results:");
for (i, result) in results.iter().enumerate() {
match result {
Ok(response) => {
println!(" ✅ Task {}: {}", i + 1, response.result.as_ref().unwrap().summary);
}
Err(e) => {
println!(" ❌ Task {}: {}", i + 1, e);
}
}
}
println!("\n📊 Example 3: Service monitoring");
println!("-------------------------------");
let status = client.get_service_status().await?;
println!("🏥 Service Health: {:?}", status.status);
println!("⏱️ Uptime: {}s", status.uptime_seconds);
println!("📈 Active tasks: {}", status.active_tasks);
let metrics = client.get_metrics().await?;
println!("📊 Total tasks processed: {}", metrics.total_tasks);
println!("✅ Success rate: {:.1}%",
if metrics.total_tasks > 0 {
(metrics.completed_tasks as f64 / metrics.total_tasks as f64) * 100.0
} else {
0.0
}
);
println!("\n🎉 In-process service example completed!");
println!("======================================");
Ok(())
}