#![allow(clippy::print_stdout)]
use std::time::Duration;
use honcho_ai::Honcho;
fn print_status(label: &str, total: u64, pending: u64, in_progress: u64, completed: u64) {
println!(
"{label}: total={total}, pending={pending}, in_progress={in_progress}, completed={completed}",
);
}
#[tokio::main]
async fn main() -> honcho_ai::error::Result<()> {
let honcho = Honcho::new("http://localhost:8000", "queue-demo")?;
let peer = honcho.peer("observer-1").build().await?;
let session = honcho.session("sess-1").build().await?;
session
.add_messages(vec![peer.message("Trigger some background work").build()?])
.await?;
for attempt in 0..10 {
let ws_status = honcho.queue_status(None, None, None).await?;
print_status(
&format!("Workspace queue (attempt {attempt})"),
ws_status.total_work_units,
ws_status.pending_work_units,
ws_status.in_progress_work_units,
ws_status.completed_work_units,
);
if ws_status.pending_work_units == 0 {
break;
}
tokio::time::sleep(Duration::from_millis(500)).await;
}
let sess_status = session.queue_status(None, None).await?;
print_status(
"Session queue",
sess_status.total_work_units,
sess_status.pending_work_units,
sess_status.in_progress_work_units,
sess_status.completed_work_units,
);
let ws_final = honcho.queue_status(None, None, None).await?;
if let Some(sessions) = &ws_final.sessions {
println!("Per-session breakdown ({} session(s)):", sessions.len());
for (id, status) in sessions {
print_status(
&format!(" session {id}"),
status.total_work_units,
status.pending_work_units,
status.in_progress_work_units,
status.completed_work_units,
);
}
} else {
println!("No per-session breakdown available");
}
honcho.schedule_dream(peer.id(), None, None).await?;
println!("Dream scheduled for {}", peer.id());
Ok(())
}