use paladin::MockLlmAdapter;
use paladin::application::services::paladin::paladin_builder::PaladinBuilder;
use paladin::application::services::paladin::paladin_execution_service::PaladinExecutionService;
use paladin::core::platform::container::herald::Herald;
use paladin::infrastructure::adapters::herald::MarkdownHerald;
use paladin::infrastructure::resilience::circuit_breaker::CircuitBreaker;
use paladin_ports::output::llm_port::LlmPort;
use std::sync::Arc;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🗡️ Basic Paladin Example\n");
println!("Creating a simple Paladin agent...\n");
let llm_port = Arc::new(
MockLlmAdapter::new()
.with_response(
"I am a helpful AI assistant. I can help you with various tasks like answering questions, providing explanations, and assisting with problem-solving. How can I help you today?".to_string()
)
);
let paladin = PaladinBuilder::new(llm_port.clone() as Arc<dyn LlmPort>)
.system_prompt("You are a helpful AI assistant")
.name("BasicAssistant")
.model("gpt-4")
.temperature(0.7)
.max_loops(1) .build()
.await?;
println!("✅ Paladin created successfully!");
println!(" Name: {}", paladin.node.name);
println!(" Model: {}", paladin.node.model);
println!(" Temperature: {}", paladin.node.temperature);
println!();
let circuit_breaker = Arc::new(CircuitBreaker::new(
3, 2, Duration::from_secs(30), ));
let herald: Arc<dyn Herald> = Arc::new(MarkdownHerald::new());
let service =
PaladinExecutionService::new(llm_port, circuit_breaker, None, None).with_herald(herald);
println!("🚀 Executing Paladin...\n");
let input = "What can you help me with?";
println!("Input: {}", input);
println!();
let result = service.execute(&paladin, input).await?;
println!("📊 Execution Results:");
println!(" Output: {}", result.output);
println!(" Loops: {}", result.loop_count);
println!(" Tokens: {}", result.token_count);
println!(" Time: {}ms", result.execution_time_ms);
println!(" Stop Reason: {:?}", result.stop_reason);
println!();
println!("📝 Formatted Output (Markdown Herald):");
println!("{}", "─".repeat(60));
if let Some(formatted) = service.format_result(&result, &paladin)? {
println!("{}", formatted);
}
println!("{}", "─".repeat(60));
println!();
println!("✨ Example completed successfully!");
println!("\n💡 Try other Herald formatters:");
println!(" - JsonHerald for structured JSON output");
println!(" - TableHerald for compact table format");
println!(" - Or create your own custom formatter!");
Ok(())
}