rusty_gemini/
grounding.rs

1use serde::{Deserialize, Serialize};
2
3use crate::content::Content;
4
5#[derive(Debug, Deserialize)]
6#[serde(rename_all = "camelCase")]
7pub struct GroundingAtrribution {
8    pub source_id: AtrributionSourceId,
9    pub content: Content,
10}
11
12#[derive(Debug, Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct GroundingMetadata {
15    pub grounding_chunk: GroundingChunk,
16    pub grounding_supports: Vec<GroundingSupport>,
17    pub web_search_queries: Vec<String>,
18    pub search_entry_point: Option<SearchEntryPoint>,
19    pub retrieval_metadata: RetrievalMetadata,
20}
21
22#[derive(Debug, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub enum AtrributionSourceId {
25    #[serde(rename_all = "camelCase")]
26    GroundingPassageId {
27        passage_id: String,
28        part_index: String,
29    },
30    SemanticRetrieverChunk {
31        source: String,
32        chunk: String,
33    },
34}
35
36#[derive(Debug, Deserialize)]
37pub struct SemanticRetrieverChunk {
38    pub source: String,
39    pub chunk: String,
40}
41
42#[derive(Debug, Deserialize)]
43pub enum GroundingChunk {
44    /// A chunk from the web
45    #[serde(rename = "web")]
46    Web {
47        /// URI reference of the chunk
48        uri: String,
49        /// The title of the chunk
50        title: String,
51    },
52}
53
54#[derive(Debug, Deserialize)]
55#[serde(rename_all = "camelCase")]
56pub struct GroundingSupport {
57    pub grounding_chunk_indices: Vec<i32>,
58    pub confidence_scores: Vec<f64>,
59    pub segment: Segment,
60}
61
62#[derive(Debug, Deserialize)]
63#[serde(rename_all = "camelCase")]
64pub struct SearchEntryPoint {
65    pub rendered_content: String,
66    pub sdk_blob: Option<String>,
67}
68
69#[derive(Debug, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct RetrievalMetadata {
72    pub google_search_dynamic_retrieval_score: Option<f64>,
73}
74
75#[derive(Debug, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct Segment {
78    pub part_index: i32,
79    pub start_index: i32,
80    pub end_index: i32,
81    pub text: String,
82}
83
84#[derive(Debug, Serialize, Clone)]
85#[serde(rename_all = "camelCase")]
86pub struct GoogleSearchRetrieval {
87    pub dynamic_retrieval_config: DynamicRetrievalConfig,
88}
89
90#[derive(Debug, Serialize, Clone)]
91#[serde(rename_all = "camelCase")]
92pub struct DynamicRetrievalConfig {
93    pub mode: Mode,
94    pub dynamic_threshold: Option<f32>,
95}
96
97#[derive(Debug, Serialize, Clone)]
98pub enum Mode {
99    ModeUnspecified,
100    ModeDynamic,
101}