Skip to main content

multimodal/
multimodal.rs

1use gemini_client_api::gemini::ask::Gemini;
2use gemini_client_api::gemini::types::request::InlineData;
3use gemini_client_api::gemini::types::sessions::Session;
4use gemini_client_api::gemini::utils::MarkdownToParts;
5use std::env;
6
7async fn raw_multimodal() {
8    let mut session = Session::new(6);
9    let api_key = std::env::var("GEMINI_API_KEY").expect("GEMINI_API_KEY must be set");
10    let ai = Gemini::new(api_key, "gemini-2.5-flash", None);
11
12    session.ask(vec!["Where is there in this pdf".into(), InlineData::from_url("https://bitmesra.ac.in/UploadedDocuments/admingo/files/221225_List%20of%20Holiday_2026_26.pdf").await.unwrap().into()]);
13
14    let response = ai.ask(&mut session).await.unwrap();
15    println!("\nGemini: {}", response.get_chat().get_text_no_think(""));
16}
17#[tokio::main]
18async fn main() {
19    let mut session = Session::new(6);
20    let api_key = env::var("GEMINI_API_KEY").expect("GEMINI_API_KEY must be set");
21    let ai = Gemini::new(api_key, "gemini-2.5-flash", None);
22
23    println!("--- Multimodal (Images/Files) Example ---");
24
25    // Use MarkdownToParts to easily parse a string with image/file markers
26    // It supports both URLs and local file paths!
27    let content = "Describe this image: ![image](https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png)";
28    println!("Processing: {}", content);
29
30    let parts = MarkdownToParts::new(content, |_| mime::IMAGE_PNG)
31        .await
32        .process();
33
34    let response = ai.ask(session.ask(parts)).await.unwrap();
35
36    println!("\nGemini: {}", response.get_chat().get_text_no_think(""));
37}