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]
11#[allow(dead_code)]
12struct MovieReview {
13 title: String,
15 rating: u8,
17 cast: Vec<String>,
19 summary: String,
21}
22
23#[tokio::main]
24async fn main() {
25 let mut session = Session::new(2).set_remember_reply(false);
26 let api_key = env::var("GEMINI_API_KEY").expect("GEMINI_API_KEY must be set");
27 let ai = Gemini::new(api_key, "gemini-2.5-flash", None);
28
29 println!("--- Structured Output (JSON Mode) Example ---");
30
31 let ai = ai.set_json_mode(MovieReview::gemini_schema());
33
34 let prompt = "Give me a review for the movie Interstellar.";
35 println!("User: {}", prompt);
36
37 let response = ai.ask(session.ask(prompt)).await.unwrap();
38
39 if let Ok(review) = response.get_json::<MovieReview>() {
41 println!("\nGemini (Structured):");
42 println!("{:#?}", review);
43 } else {
44 println!("\nFailed to parse JSON response: {}", response.get_chat().get_text_no_think(""));
45 }
46}