gproxy_protocol/protocol/gemini/common/tools/
support.rs1use 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}