use std::io::stderr;
use std::time::Duration;
use embacle::types::{ChatMessage, ChatRequest, LlmProvider};
use embacle::CopilotHeadlessRunner;
use tokio::time::timeout;
use tracing::Level;
use tracing_subscriber::fmt;
#[tokio::main]
async fn main() {
fmt()
.with_max_level(Level::DEBUG)
.with_target(true)
.with_writer(stderr)
.init();
println!("=== ACP usage probe: what does Copilot actually report? ===");
let runner = CopilotHeadlessRunner::from_env();
let request = ChatRequest {
messages: vec![ChatMessage::user("Reply with the single word: pong.")],
model: None,
temperature: Some(0.0),
max_tokens: Some(16),
stream: false,
tools: None,
tool_choice: None,
top_p: None,
stop: None,
response_format: None,
turn_id: None,
mcp_servers: Vec::new(),
};
for turn in 1..=2 {
println!("\n=== turn {turn} ===");
match timeout(Duration::from_mins(2), runner.complete(&request)).await {
Ok(Ok(resp)) => {
println!("model: {:?}", resp.model);
println!("content: {}", resp.content.trim());
println!("usage: {:?} <- all embacle keeps", resp.usage);
}
Ok(Err(e)) => println!("complete() error: {e}"),
Err(_) => println!("timed out after 120s"),
}
}
println!(
"\nThe raw objects are on stderr above, logged as `ACP usage payload`.\n\
Compare cachedReadTokens across the two turns."
);
}