use kizzasi_inference::{BatchConfig, BatchScheduler, EngineConfig, Priority};
use scirs2_core::ndarray::Array1;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Continuous Batching Example ===\n");
let batch_config = BatchConfig::new()
.max_batch_size(8)
.max_wait_ms(5)
.min_batch_size(2)
.with_priority();
let engine_config = EngineConfig::new(3, 3);
let mut scheduler = BatchScheduler::new(batch_config, engine_config)?;
println!("Submitting requests...\n");
let input1 = Array1::from_vec(vec![0.1, 0.2, 0.3]);
let input2 = Array1::from_vec(vec![0.4, 0.5, 0.6]);
let input3 = Array1::from_vec(vec![0.7, 0.8, 0.9]);
let id1 = scheduler.submit(input1.clone(), 3);
println!("Submitted request {} (Normal priority)", id1);
let id2 = scheduler.submit_with_priority(input2.clone(), 5, Priority::High);
println!("Submitted request {} (High priority)", id2);
let id3 = scheduler.submit_with_priority(input3.clone(), 2, Priority::Low);
println!("Submitted request {} (Low priority)", id3);
for i in 0..5 {
let input = Array1::from_vec(vec![i as f32, i as f32 + 0.1, i as f32 + 0.2]);
let id = scheduler.submit(input, 4);
println!("Submitted request {} (Normal priority)", id);
}
println!("\nScheduler stats: {:?}\n", scheduler.stats());
println!("Processing all requests...\n");
let responses = scheduler.process_all()?;
println!("=== Results ===");
for response in responses {
println!(
"Request {}: {} steps completed in {} µs",
response.request_id, response.steps_completed, response.inference_time_us
);
}
println!("\nFinal stats: {:?}", scheduler.stats());
println!("\n=== Done ===");
Ok(())
}