Skip to main content

gproxy_protocol/protocol/gemini/common/tools/
support.rs

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