#![allow(deprecated)]
use llm_toolkit::{Agent, agent::Agent as AgentTrait};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, llm_toolkit::ToPrompt)]
#[prompt(mode = "full")]
struct TechExplanation {
topic: String,
key_points: Vec<String>,
complexity: String,
}
#[derive(Agent)]
#[agent(
expertise = "Explaining technical concepts in simple terms",
output = "TechExplanation"
)]
struct ClaudeExplainerAgent;
#[derive(Agent)]
#[agent(
expertise = "Explaining technical concepts in simple terms",
output = "TechExplanation",
backend = "gemini",
model = "flash"
)]
struct GeminiFlashExplainerAgent;
#[derive(Agent)]
#[agent(
expertise = "Explaining technical concepts in simple terms",
output = "TechExplanation",
backend = "gemini",
model = "pro"
)]
struct GeminiProExplainerAgent;
#[tokio::main(flavor = "current_thread")]
async fn main() {
println!("🔄 Agent Backend Switching Example\n");
let claude_agent = ClaudeExplainerAgent;
let gemini_flash_agent = GeminiFlashExplainerAgent;
let gemini_pro_agent = GeminiProExplainerAgent;
println!("📊 Available Agents:\n");
println!("1. Claude Agent (default)");
println!(" Backend: claude");
println!(" Expertise: {}\n", AgentTrait::expertise(&claude_agent));
println!("2. Gemini Flash Agent");
println!(" Backend: gemini");
println!(" Model: gemini-2.5-flash");
println!(
" Expertise: {}\n",
AgentTrait::expertise(&gemini_flash_agent)
);
println!("3. Gemini Pro Agent");
println!(" Backend: gemini");
println!(" Model: gemini-2.5-pro");
println!(
" Expertise: {}\n",
AgentTrait::expertise(&gemini_pro_agent)
);
println!("✨ Key Features:");
println!(" - Same Agent trait interface across all backends");
println!(" - Type-safe structured outputs");
println!(" - Compile-time backend selection");
println!(" - Easy model configuration\n");
println!("💡 Usage:");
println!(" To use these agents, call agent.execute(intent).await");
println!(" All agents return TechExplanation regardless of backend\n");
println!("🔧 Configuration:");
println!(" - Default backend: claude (ClaudeCodeAgent)");
println!(" - Gemini backend: requires `gemini` CLI in PATH");
println!(" - Models: flash (fast), pro (capable)");
}