#![allow(deprecated)]
use llm_toolkit::Agent;
use llm_toolkit::agent::Agent as AgentTrait;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, llm_toolkit::ToPrompt)]
#[prompt(mode = "full")]
struct ReviewResult {
quality_score: u8,
issues: Vec<String>,
recommendations: Vec<String>,
}
#[derive(Agent)]
#[agent(
expertise = "Review code quality and provide structured feedback",
output = "ReviewResult"
)]
struct CodeReviewAgent;
#[derive(Agent)]
#[agent(expertise = "Explain code concepts in simple terms", output = "String")]
struct ExplainerAgent;
#[tokio::main(flavor = "current_thread")]
async fn main() {
println!("๐งช Auto-JSON Enforcement Test\n");
println!("{}", "=".repeat(70));
let reviewer = CodeReviewAgent;
println!("\n๐ Agent with STRUCTURED output (ReviewResult):");
println!("---");
println!("{}", AgentTrait::expertise(&reviewer));
println!("---");
assert!(
AgentTrait::expertise(&reviewer).contains("IMPORTANT"),
"Structured output should have JSON enforcement"
);
assert!(
AgentTrait::expertise(&reviewer).contains("ReviewResult"),
"Should mention the output type name"
);
println!("\nโ
PASS: JSON enforcement added for structured output\n");
println!("{}", "=".repeat(70));
println!("\n๐ Agent with STRING output:");
println!("---");
let explainer = ExplainerAgent;
println!("{}", AgentTrait::expertise(&explainer));
println!("---");
assert!(
!AgentTrait::expertise(&explainer).contains("IMPORTANT"),
"String output should NOT have JSON enforcement"
);
assert!(
!AgentTrait::expertise(&explainer).contains("JSON"),
"String output should not mention JSON"
);
println!("\nโ
PASS: No JSON enforcement for String output\n");
println!("{}", "=".repeat(70));
println!("\n๐ All tests passed! Auto-JSON enforcement working correctly.");
}