use langchainrust::core::batch::{BatchClient, BatchProvider, BatchRequest};
use langchainrust::Message;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("OPENAI_API_KEY")
.expect("please set the OPENAI_API_KEY environment variable");
let base_url = std::env::var("OPENAI_BASE_URL")
.unwrap_or_else(|_| "https://api.openai.com/v1".to_string());
let client = BatchClient::new(BatchProvider::OpenAI, &api_key).with_base_url(&base_url);
let requests = vec![
BatchRequest {
custom_id: "translate-1".into(),
messages: vec![Message::human(
"Translate the following English into Chinese: Hello, World!",
)],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
BatchRequest {
custom_id: "translate-2".into(),
messages: vec![Message::human(
"Translate the following English into Chinese: Rust is awesome!",
)],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
BatchRequest {
custom_id: "summarize-1".into(),
messages: vec![Message::human(
"Summarize in one sentence: Rust is a systems programming language focused on memory safety and concurrent performance.",
)],
model: "gpt-4o-mini".into(),
temperature: Some(0.3),
max_tokens: None,
},
];
println!("Submitting {} batch requests...", requests.len());
let results = client.submit_and_wait(requests, 5_000, 300_000).await?;
println!("\n=== Batch results ===");
for result in &results {
match &result.result {
Ok(llm_result) => {
println!("[{}] {}", result.custom_id, llm_result.content);
}
Err(e) => {
println!("[{}] error: {}", result.custom_id, e);
}
}
}
Ok(())
}