Skip to main content

gproxy_protocol/gemini/common/tools/
support.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::{ComputerUseEnvironment, DynamicRetrievalMode};
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
8#[serde(rename_all = "camelCase")]
9#[derive(gproxy_protocol_macros::WireBuilder)]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11pub struct GoogleSearchRetrieval {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
14    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
15    pub rest: serde_json::Map<String, serde_json::Value>,
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
19#[serde(rename_all = "camelCase")]
20#[derive(gproxy_protocol_macros::WireBuilder)]
21#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
22pub struct DynamicRetrievalConfig {
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub mode: Option<DynamicRetrievalMode>,
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub dynamic_threshold: Option<f64>,
27    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
28    pub rest: serde_json::Map<String, serde_json::Value>,
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
32#[serde(rename_all = "camelCase")]
33#[derive(gproxy_protocol_macros::WireBuilder)]
34#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
35pub struct GoogleSearch {
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub time_range_filter: Option<Interval>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub search_types: Option<SearchTypes>,
40    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
41    pub rest: serde_json::Map<String, serde_json::Value>,
42}
43
44#[derive(
45    Debug, Clone, PartialEq, Serialize, Deserialize, Default, gproxy_protocol_macros::WireBuilder,
46)]
47#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
48pub struct CodeExecution {
49    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
50    pub rest: serde_json::Map<String, serde_json::Value>,
51}
52
53#[derive(
54    Debug, Clone, PartialEq, Serialize, Deserialize, Default, gproxy_protocol_macros::WireBuilder,
55)]
56#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
57pub struct UrlContext {
58    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
59    pub rest: serde_json::Map<String, serde_json::Value>,
60}
61
62#[derive(
63    Debug, Clone, PartialEq, Serialize, Deserialize, Default, gproxy_protocol_macros::WireBuilder,
64)]
65#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
66pub struct WebSearch {
67    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
68    pub rest: serde_json::Map<String, serde_json::Value>,
69}
70
71#[derive(
72    Debug, Clone, PartialEq, Serialize, Deserialize, Default, gproxy_protocol_macros::WireBuilder,
73)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct ImageSearch {
76    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
77    pub rest: serde_json::Map<String, serde_json::Value>,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
81#[serde(rename_all = "camelCase")]
82#[derive(gproxy_protocol_macros::WireBuilder)]
83#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
84pub struct Interval {
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub start_time: Option<String>,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub end_time: Option<String>,
89    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
90    pub rest: serde_json::Map<String, serde_json::Value>,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
94#[serde(rename_all = "camelCase")]
95#[derive(gproxy_protocol_macros::WireBuilder)]
96#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
97pub struct SearchTypes {
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub web_search: Option<WebSearch>,
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub image_search: Option<ImageSearch>,
102    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
103    pub rest: serde_json::Map<String, serde_json::Value>,
104}
105
106#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
107#[serde(rename_all = "camelCase")]
108#[derive(gproxy_protocol_macros::WireBuilder)]
109#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
110pub struct ComputerUse {
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub environment: Option<ComputerUseEnvironment>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub excluded_predefined_functions: Option<Vec<String>>,
115    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
116    pub rest: serde_json::Map<String, serde_json::Value>,
117}
118
119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
120#[serde(rename_all = "camelCase")]
121#[derive(gproxy_protocol_macros::WireBuilder)]
122#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
123pub struct FileSearch {
124    pub file_search_store_names: Vec<String>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    pub metadata_filter: Option<String>,
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub top_k: Option<i32>,
129    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
130    pub rest: serde_json::Map<String, serde_json::Value>,
131}
132
133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
134#[serde(rename_all = "camelCase")]
135#[derive(gproxy_protocol_macros::WireBuilder)]
136#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
137pub struct McpServer {
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub name: Option<String>,
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub streamable_http_transport: Option<StreamableHttpTransport>,
142    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
143    pub rest: serde_json::Map<String, serde_json::Value>,
144}
145
146#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
147#[serde(rename_all = "camelCase")]
148#[derive(gproxy_protocol_macros::WireBuilder)]
149#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
150pub struct StreamableHttpTransport {
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub url: Option<String>,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub headers: Option<BTreeMap<String, String>>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub timeout: Option<String>,
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub sse_read_timeout: Option<String>,
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub terminate_on_close: Option<bool>,
161    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
162    pub rest: serde_json::Map<String, serde_json::Value>,
163}
164
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
166#[serde(rename_all = "camelCase")]
167#[derive(gproxy_protocol_macros::WireBuilder)]
168#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
169pub struct GoogleMaps {
170    #[serde(skip_serializing_if = "Option::is_none")]
171    pub enable_widget: Option<bool>,
172    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
173    pub rest: serde_json::Map<String, serde_json::Value>,
174}
175
176#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
177#[serde(rename_all = "camelCase")]
178#[derive(gproxy_protocol_macros::WireBuilder)]
179#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
180pub struct RetrievalConfig {
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub lat_lng: Option<LatLng>,
183    #[serde(skip_serializing_if = "Option::is_none")]
184    pub language_code: Option<String>,
185    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
186    pub rest: serde_json::Map<String, serde_json::Value>,
187}
188
189#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
190#[serde(rename_all = "camelCase")]
191#[derive(gproxy_protocol_macros::WireBuilder)]
192#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
193pub struct LatLng {
194    #[serde(skip_serializing_if = "Option::is_none")]
195    pub latitude: Option<f64>,
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub longitude: Option<f64>,
198    #[serde(default, skip_serializing_if = "serde_json::Map::is_empty", flatten)]
199    pub rest: serde_json::Map<String, serde_json::Value>,
200}