use runcycles::models::*;
use runcycles::CyclesClient;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = CyclesClient::builder("my-api-key", "http://localhost:7878")
.tenant("acme")
.build();
let guard = client
.reserve(
ReservationCreateRequest::builder()
.subject(Subject {
tenant: Some("acme".into()),
..Default::default()
})
.action(Action::new("llm.completion", "gpt-4o"))
.estimate(Amount::tokens(1000))
.ttl_ms(30_000_u64)
.build(),
)
.await?;
let mut total_input_tokens = 0i64;
let mut total_output_tokens = 0i64;
for _chunk in 0..10 {
total_input_tokens += 50;
total_output_tokens += 100;
}
guard
.commit(
CommitRequest::builder()
.actual(Amount::tokens(total_input_tokens + total_output_tokens))
.metrics(CyclesMetrics {
tokens_input: Some(total_input_tokens),
tokens_output: Some(total_output_tokens),
..Default::default()
})
.build(),
)
.await?;
println!(
"Streamed: {} input + {} output tokens",
total_input_tokens, total_output_tokens
);
Ok(())
}