structured_output/
structured_output.rs1use gemini_client_api::gemini::ask::Gemini;
2use gemini_client_api::gemini::types::sessions::Session;
3use gemini_client_api::gemini::utils::{gemini_schema, GeminiSchema};
4use serde::Deserialize;
5use std::env;
6
7#[derive(Debug, Deserialize)]
10#[gemini_schema]
11struct MovieReview {
12 title: String,
14 rating: u8,
16 cast: Vec<String>,
18 summary: String,
20}
21
22#[tokio::main]
23async fn main() {
24 let mut session = Session::new(2).set_remember_reply(false);
25 let api_key = env::var("GEMINI_API_KEY").expect("GEMINI_API_KEY must be set");
26 let ai = Gemini::new(api_key, "gemini-2.5-flash", None);
27
28 println!("--- Structured Output (JSON Mode) Example ---");
29
30 let ai = ai.set_json_mode(MovieReview::gemini_schema());
32
33 let prompt = "Give me a review for the movie Interstellar.";
34 println!("User: {}", prompt);
35
36 let response = ai.ask(session.ask_string(prompt)).await.unwrap();
37
38 if let Ok(review) = response.get_json::<MovieReview>() {
40 println!("\nGemini (Structured):");
41 println!("{:#?}", review);
42 } else {
43 println!("\nFailed to parse JSON response: {}", response.get_chat().get_text_no_think(""));
44 }
45}