multi_provider/
multi_provider.rs1use genviz::{GenerationRequest, ImageProvider};
9
10#[tokio::main]
11async fn main() -> genviz::Result<()> {
12 let provider: Box<dyn ImageProvider> = if std::env::var("GOOGLE_API_KEY").is_ok() {
14 println!("Using Gemini provider");
15 Box::new(genviz::GeminiProvider::builder().build()?)
16 } else if std::env::var("BFL_API_KEY").is_ok() {
17 println!("Using Flux provider");
18 Box::new(genviz::FluxProvider::builder().build()?)
19 } else if std::env::var("XAI_API_KEY").is_ok() {
20 println!("Using Grok provider");
21 Box::new(genviz::GrokProvider::builder().build()?)
22 } else if std::env::var("OPENAI_API_KEY").is_ok() {
23 println!("Using OpenAI provider");
24 Box::new(genviz::OpenAiImageProvider::builder().build()?)
25 } else {
26 eprintln!("Set at least one API key environment variable.");
27 std::process::exit(1);
28 };
29
30 println!("Provider: {} ({:?})", provider.name(), provider.kind());
31
32 let request = GenerationRequest::new("A serene mountain lake at dawn");
33 let image = provider.generate(&request).await?;
34
35 let filename = format!("{:?}_output.png", provider.kind());
36 image.save(&filename)?;
37 println!("Saved to {} ({} bytes)", filename, image.size());
38
39 Ok(())
40}