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")]
9pub struct GoogleSearchRetrieval {
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub dynamic_retrieval_config: Option<DynamicRetrievalConfig>,
12    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
13    pub extra: ExtraFields,
14}
15
16#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
17#[serde(rename_all = "camelCase")]
18pub struct DynamicRetrievalConfig {
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub mode: Option<DynamicRetrievalMode>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub dynamic_threshold: Option<f64>,
23    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
24    pub extra: ExtraFields,
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
28#[serde(rename_all = "camelCase")]
29pub struct GoogleSearch {
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub time_range_filter: Option<Interval>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub search_types: Option<SearchTypes>,
34    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
35    pub extra: ExtraFields,
36}
37
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
39pub struct CodeExecution {}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
42pub struct UrlContext {}
43
44#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
45pub struct WebSearch {}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
48pub struct ImageSearch {}
49
50#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
51#[serde(rename_all = "camelCase")]
52pub struct Interval {
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub start_time: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub end_time: Option<String>,
57    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
58    pub extra: ExtraFields,
59}
60
61#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
62#[serde(rename_all = "camelCase")]
63pub struct SearchTypes {
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub web_search: Option<WebSearch>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub image_search: Option<ImageSearch>,
68    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
69    pub extra: ExtraFields,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
73#[serde(rename_all = "camelCase")]
74pub struct ComputerUse {
75    #[serde(skip_serializing_if = "Option::is_none")]
76    pub environment: Option<ComputerUseEnvironment>,
77    #[serde(default, skip_serializing_if = "Vec::is_empty")]
78    pub excluded_predefined_functions: Vec<String>,
79    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
80    pub extra: ExtraFields,
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
84#[serde(rename_all = "camelCase")]
85pub struct FileSearch {
86    #[serde(default, skip_serializing_if = "Vec::is_empty")]
87    pub file_search_store_names: Vec<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub metadata_filter: Option<String>,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    pub top_k: Option<i32>,
92    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
93    pub extra: ExtraFields,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
97#[serde(rename_all = "camelCase")]
98pub struct McpServer {
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub name: Option<String>,
101    #[serde(skip_serializing_if = "Option::is_none")]
102    pub streamable_http_transport: Option<StreamableHttpTransport>,
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")]
109pub struct StreamableHttpTransport {
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub url: Option<String>,
112    #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
113    pub headers: BTreeMap<String, String>,
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub timeout: Option<String>,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub sse_read_timeout: Option<String>,
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub terminate_on_close: Option<bool>,
120    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
121    pub extra: ExtraFields,
122}
123
124#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
125#[serde(rename_all = "camelCase")]
126pub struct GoogleMaps {
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub enable_widget: Option<bool>,
129    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
130    pub extra: ExtraFields,
131}
132
133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
134#[serde(rename_all = "camelCase")]
135pub struct RetrievalConfig {
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub lat_lng: Option<LatLng>,
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub language_code: Option<String>,
140    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
141    pub extra: ExtraFields,
142}
143
144#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
145#[serde(rename_all = "camelCase")]
146pub struct LatLng {
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub latitude: Option<f64>,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub longitude: Option<f64>,
151    #[serde(default, skip_serializing_if = "BTreeMap::is_empty", flatten)]
152    pub extra: ExtraFields,
153}