use gemini_rust::prelude::*;
use gemini_rust::{LatLng, RetrievalConfig, Tool, ToolConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let gemini = Gemini::pro(std::env::var("GEMINI_API_KEY")?)?;
println!("🗺️ Simple Google Maps Grounding Example\n");
let prompt = "What are the best coffee shops near me?";
println!("Query: {prompt}");
println!("Location: San Francisco (37.7749, -122.4194)\n");
let response = gemini
.generate_content()
.with_user_message(prompt)
.with_tool(Tool::google_maps(None)) .with_tool_config(ToolConfig {
retrieval_config: Some(RetrievalConfig {
lat_lng: Some(LatLng::new(37.7749, -122.4194)), }),
function_calling_config: None,
})
.execute()
.await?;
println!("🤖 Response:");
println!("{}", response.text());
if let Some(candidate) = response.candidates.first() {
if let Some(grounding_metadata) = &candidate.grounding_metadata {
if let Some(chunks) = &grounding_metadata.grounding_chunks {
println!("\n📍 Grounding Sources:");
for chunk in chunks {
if let Some(maps) = &chunk.maps {
println!(" • {} - {}", maps.title, maps.uri);
}
}
} else {
println!("\nℹ️ No grounding sources available for this response.");
}
} else {
println!("\nℹ️ No grounding metadata available for this response.");
}
}
Ok(())
}