strm/
strm.rs

1use futures_util::StreamExt;
2use google_genai::datatypes::{Content, GenerateContentParameters, Part};
3use std::env;
4
5#[tokio::main]
6async fn main() -> google_genai::error::Result<()> {
7    let api_key = env::var("GOOGLEAI_API_KEY").expect("GOOGLE_API_KEY must be set");
8
9    let params =
10        GenerateContentParameters::default().contents(vec![Content::default().parts(vec![
11            Part::default().text("Write a story about a magic backpack."),
12        ])]);
13
14    let request = google_genai::datatypes::GenerateContentReq::default()
15        .contents(params.contents.unwrap())
16        .model(params.model.unwrap());
17
18    let mut stream = google_genai::generate_content_stream(&api_key, request).await?;
19
20    while let Some(response) = stream.next().await {
21        match response {
22            Ok(content) => {
23                if content.candidates.is_none() {
24                    // This is our [DONE] marker
25                    break;
26                }
27                if let Some(candidates) = content.candidates {
28                    for candidate in candidates {
29                        if let Some(content) = candidate.content {
30                            if let Some(parts) = content.parts {
31                                for part in parts {
32                                    if let Some(text) = part.text {
33                                        print!("{}", text);
34                                    }
35                                }
36                            }
37                        }
38                    }
39                }
40            }
41            Err(e) => eprintln!("Error: {}", e),
42        }
43    }
44
45    Ok(())
46}