#[cfg(feature = "orchestrator")]
fn main() {
use llm_agent_runtime::orchestrator::{
BackpressureGuard, CircuitBreaker, Deduplicator, DeduplicationResult, RetryPolicy,
};
use std::time::Duration;
let guard = BackpressureGuard::new(4).expect("valid capacity");
let dedup = Deduplicator::new(Duration::from_secs(5));
let cb = CircuitBreaker::new("llm-api", 3, Duration::from_secs(10))
.expect("valid threshold");
let retry = RetryPolicy::exponential(3, 50).expect("valid retry policy");
let request_key = "summarise:doc-42";
let request_body = "Summarise this document…";
if let Err(e) = guard.try_acquire() {
eprintln!("Request shed — too many in-flight: {e}");
return;
}
match dedup.check_and_register(request_key).expect("dedup check") {
DeduplicationResult::Cached(result) => {
println!("Dedup cache hit: {result}");
guard.release().ok();
return;
}
DeduplicationResult::InProgress => {
println!("Duplicate request already in-flight, dropping");
guard.release().ok();
return;
}
DeduplicationResult::New => {}
}
let mut attempt = 0u32;
let result = loop {
attempt += 1;
let outcome = cb.call(|| {
if attempt < 3 {
Err(format!("API error on attempt {attempt}"))
} else {
Ok(format!("Summary of: {request_body}"))
}
});
match outcome {
Ok(val) => break Ok(val),
Err(e) if attempt < retry.max_attempts => {
let delay = retry.delay_for(attempt);
println!("Attempt {attempt} failed ({e}), retrying in {delay:?}");
std::thread::sleep(delay);
}
Err(e) => break Err(e),
}
};
match &result {
Ok(val) => {
dedup.complete(request_key, val.clone()).ok();
}
Err(_) => {
}
}
guard.release().ok();
match result {
Ok(summary) => println!("Success: {summary}"),
Err(e) => eprintln!("All attempts failed: {e}"),
}
}
#[cfg(not(feature = "orchestrator"))]
fn main() {
eprintln!("This example requires --features orchestrator");
}