1use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum AiAgentAllowedEntity {
9 User(UserBase),
10 Group(GroupBase),
11 Unknown(serde_json::Value),
13}
14
15impl Default for AiAgentAllowedEntity {
16 fn default() -> Self {
17 Self::Unknown(Default::default())
18 }
19}
20
21impl serde::Serialize for AiAgentAllowedEntity {
22 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23 match self {
24 Self::User(inner) => inner.serialize(serializer),
25 Self::Group(inner) => inner.serialize(serializer),
26 Self::Unknown(inner) => inner.serialize(serializer),
27 }
28 }
29}
30
31impl<'de> serde::Deserialize<'de> for AiAgentAllowedEntity {
32 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
33 let value = serde_json::Value::deserialize(deserializer)?;
34 let tag = value
35 .get("type")
36 .and_then(serde_json::Value::as_str)
37 .map(str::to_owned);
38 match tag.as_deref() {
39 Some("user") => Ok(Self::User(
40 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
41 )),
42 Some("group") => Ok(Self::Group(
43 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
44 )),
45 _ => Ok(Self::Unknown(value)),
46 }
47 }
48}
49
50#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
51pub struct AiMultipleAgentResponse {
52 #[serde(default, skip_serializing_if = "Option::is_none")]
53 pub limit: Option<i64>,
54 #[serde(
55 default,
56 skip_serializing_if = "Option::is_none",
57 deserialize_with = "double_option"
58 )]
59 pub next_marker: Option<Option<String>>,
60 #[serde(
61 default,
62 skip_serializing_if = "Option::is_none",
63 deserialize_with = "double_option"
64 )]
65 pub prev_marker: Option<Option<String>>,
66 pub entries: Vec<AiSingleAgentResponseFull>,
67}
68
69#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
70pub struct AiSingleAgentResponseFull {
71 pub id: String,
72 #[serde(default, skip_serializing_if = "Option::is_none")]
73 pub r#type: Option<AiSingleAgentResponseType>,
74 pub origin: String,
75 pub name: String,
76 pub access_state: String,
77 #[serde(default, skip_serializing_if = "Option::is_none")]
78 pub created_by: Option<UserBase>,
79 #[serde(default, skip_serializing_if = "Option::is_none")]
80 pub created_at: Option<chrono::DateTime<chrono::Utc>>,
81 #[serde(default, skip_serializing_if = "Option::is_none")]
82 pub modified_by: Option<UserBase>,
83 #[serde(default, skip_serializing_if = "Option::is_none")]
84 pub modified_at: Option<chrono::DateTime<chrono::Utc>>,
85 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub icon_reference: Option<String>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
88 pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
89 #[serde(default, skip_serializing_if = "Option::is_none")]
90 pub ask: Option<AiStudioAgentAskResponse>,
91 #[serde(default, skip_serializing_if = "Option::is_none")]
92 pub text_gen: Option<AiStudioAgentTextGenResponse>,
93 #[serde(default, skip_serializing_if = "Option::is_none")]
94 pub extract: Option<AiStudioAgentExtractResponse>,
95}
96
97#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
98pub struct AiStudioAgentAsk {
99 pub r#type: AiAgentAskType,
100 pub access_state: String,
101 pub description: String,
102 #[serde(
103 default,
104 skip_serializing_if = "Option::is_none",
105 deserialize_with = "double_option"
106 )]
107 pub custom_instructions: Option<Option<String>>,
108 #[serde(default, skip_serializing_if = "Option::is_none")]
109 pub suggested_questions: Option<Vec<String>>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub long_text: Option<AiStudioAgentLongTextTool>,
112 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub basic_text: Option<AiStudioAgentBasicTextTool>,
114 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub basic_image: Option<AiStudioAgentBasicTextTool>,
116 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub spreadsheet: Option<AiStudioAgentSpreadsheetTool>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
119 pub long_text_multi: Option<AiStudioAgentLongTextTool>,
120 #[serde(default, skip_serializing_if = "Option::is_none")]
121 pub basic_text_multi: Option<AiStudioAgentBasicTextTool>,
122 #[serde(default, skip_serializing_if = "Option::is_none")]
123 pub basic_image_multi: Option<AiStudioAgentBasicTextTool>,
124}
125
126#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
127pub struct AiStudioAgentAskResponse {
128 pub r#type: AiAgentAskType,
129 pub access_state: String,
130 pub description: String,
131 #[serde(
132 default,
133 skip_serializing_if = "Option::is_none",
134 deserialize_with = "double_option"
135 )]
136 pub custom_instructions: Option<Option<String>>,
137 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub suggested_questions: Option<Vec<String>>,
139 #[serde(default, skip_serializing_if = "Option::is_none")]
140 pub long_text: Option<AiStudioAgentLongTextToolResponse>,
141 #[serde(default, skip_serializing_if = "Option::is_none")]
142 pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
143 #[serde(default, skip_serializing_if = "Option::is_none")]
144 pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
145 #[serde(default, skip_serializing_if = "Option::is_none")]
146 pub spreadsheet: Option<AiStudioAgentSpreadsheetToolResponse>,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub long_text_multi: Option<AiStudioAgentLongTextToolResponse>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
150 pub basic_text_multi: Option<AiStudioAgentBasicTextToolResponse>,
151 #[serde(default, skip_serializing_if = "Option::is_none")]
152 pub basic_image_multi: Option<AiStudioAgentBasicTextToolResponse>,
153}
154
155#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
156pub struct AiStudioAgentBasicGenTool {
157 #[serde(default, skip_serializing_if = "Option::is_none")]
158 pub model: Option<String>,
159 #[serde(default, skip_serializing_if = "Option::is_none")]
160 pub num_tokens_for_completion: Option<i64>,
161 #[serde(default, skip_serializing_if = "Option::is_none")]
162 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
163 #[serde(default, skip_serializing_if = "Option::is_none")]
164 pub system_message: Option<String>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
166 pub prompt_template: Option<String>,
167 #[serde(default, skip_serializing_if = "Option::is_none")]
168 pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
169 #[serde(default, skip_serializing_if = "Option::is_none")]
170 pub content_template: Option<String>,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub is_custom_instructions_included: Option<bool>,
173}
174
175#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
176pub struct AiStudioAgentBasicGenToolResponse {
177 #[serde(default, skip_serializing_if = "Option::is_none")]
178 pub model: Option<String>,
179 #[serde(default, skip_serializing_if = "Option::is_none")]
180 pub num_tokens_for_completion: Option<i64>,
181 #[serde(default, skip_serializing_if = "Option::is_none")]
182 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub system_message: Option<String>,
185 #[serde(default, skip_serializing_if = "Option::is_none")]
186 pub prompt_template: Option<String>,
187 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
189 #[serde(default, skip_serializing_if = "Option::is_none")]
190 pub content_template: Option<String>,
191 #[serde(default, skip_serializing_if = "Option::is_none")]
192 pub is_custom_instructions_included: Option<bool>,
193 #[serde(default, skip_serializing_if = "Option::is_none")]
194 pub warnings: Option<Vec<String>>,
195}
196
197#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
198pub struct AiStudioAgentBasicTextTool {
199 #[serde(default, skip_serializing_if = "Option::is_none")]
200 pub model: Option<String>,
201 #[serde(default, skip_serializing_if = "Option::is_none")]
202 pub num_tokens_for_completion: Option<i64>,
203 #[serde(default, skip_serializing_if = "Option::is_none")]
204 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
205 #[serde(default, skip_serializing_if = "Option::is_none")]
206 pub system_message: Option<String>,
207 #[serde(default, skip_serializing_if = "Option::is_none")]
208 pub prompt_template: Option<String>,
209 #[serde(default, skip_serializing_if = "Option::is_none")]
210 pub is_custom_instructions_included: Option<bool>,
211}
212
213#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
214pub struct AiStudioAgentBasicTextToolResponse {
215 #[serde(default, skip_serializing_if = "Option::is_none")]
216 pub model: Option<String>,
217 #[serde(default, skip_serializing_if = "Option::is_none")]
218 pub num_tokens_for_completion: Option<i64>,
219 #[serde(default, skip_serializing_if = "Option::is_none")]
220 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
221 #[serde(default, skip_serializing_if = "Option::is_none")]
222 pub system_message: Option<String>,
223 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub prompt_template: Option<String>,
225 #[serde(default, skip_serializing_if = "Option::is_none")]
226 pub is_custom_instructions_included: Option<bool>,
227 #[serde(default, skip_serializing_if = "Option::is_none")]
228 pub warnings: Option<Vec<String>>,
229}
230
231#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
232pub struct AiStudioAgentExtract {
233 pub r#type: AiAgentExtractType,
234 pub access_state: String,
235 pub description: String,
236 #[serde(
237 default,
238 skip_serializing_if = "Option::is_none",
239 deserialize_with = "double_option"
240 )]
241 pub custom_instructions: Option<Option<String>>,
242 #[serde(default, skip_serializing_if = "Option::is_none")]
243 pub long_text: Option<AiStudioAgentLongTextTool>,
244 #[serde(default, skip_serializing_if = "Option::is_none")]
245 pub basic_text: Option<AiStudioAgentBasicTextTool>,
246 #[serde(default, skip_serializing_if = "Option::is_none")]
247 pub basic_image: Option<AiStudioAgentBasicTextTool>,
248}
249
250#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
251pub struct AiStudioAgentExtractResponse {
252 pub r#type: AiAgentExtractType,
253 pub access_state: String,
254 pub description: String,
255 #[serde(
256 default,
257 skip_serializing_if = "Option::is_none",
258 deserialize_with = "double_option"
259 )]
260 pub custom_instructions: Option<Option<String>>,
261 #[serde(default, skip_serializing_if = "Option::is_none")]
262 pub long_text: Option<AiStudioAgentLongTextToolResponse>,
263 #[serde(default, skip_serializing_if = "Option::is_none")]
264 pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
265 #[serde(default, skip_serializing_if = "Option::is_none")]
266 pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
267}
268
269#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
270pub struct AiStudioAgentLongTextTool {
271 #[serde(default, skip_serializing_if = "Option::is_none")]
272 pub model: Option<String>,
273 #[serde(default, skip_serializing_if = "Option::is_none")]
274 pub num_tokens_for_completion: Option<i64>,
275 #[serde(default, skip_serializing_if = "Option::is_none")]
276 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
277 #[serde(default, skip_serializing_if = "Option::is_none")]
278 pub system_message: Option<String>,
279 #[serde(default, skip_serializing_if = "Option::is_none")]
280 pub prompt_template: Option<String>,
281 #[serde(default, skip_serializing_if = "Option::is_none")]
282 pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
283 #[serde(default, skip_serializing_if = "Option::is_none")]
284 pub is_custom_instructions_included: Option<bool>,
285}
286
287#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
288pub struct AiStudioAgentLongTextToolResponse {
289 #[serde(default, skip_serializing_if = "Option::is_none")]
290 pub model: Option<String>,
291 #[serde(default, skip_serializing_if = "Option::is_none")]
292 pub num_tokens_for_completion: Option<i64>,
293 #[serde(default, skip_serializing_if = "Option::is_none")]
294 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
295 #[serde(default, skip_serializing_if = "Option::is_none")]
296 pub system_message: Option<String>,
297 #[serde(default, skip_serializing_if = "Option::is_none")]
298 pub prompt_template: Option<String>,
299 #[serde(default, skip_serializing_if = "Option::is_none")]
300 pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
301 #[serde(default, skip_serializing_if = "Option::is_none")]
302 pub is_custom_instructions_included: Option<bool>,
303 #[serde(default, skip_serializing_if = "Option::is_none")]
304 pub warnings: Option<Vec<String>>,
305}
306
307pub type AiStudioAgentSpreadsheetTool = AiAgentSpreadsheetTool;
308
309#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
310pub struct AiStudioAgentSpreadsheetToolResponse {
311 #[serde(default, skip_serializing_if = "Option::is_none")]
312 pub model: Option<String>,
313 #[serde(default, skip_serializing_if = "Option::is_none")]
314 pub num_tokens_for_completion: Option<i64>,
315 #[serde(default, skip_serializing_if = "Option::is_none")]
316 pub llm_endpoint_params: Option<AiLlmEndpointParams>,
317 #[serde(default, skip_serializing_if = "Option::is_none")]
318 pub warnings: Option<Vec<String>>,
319}
320
321#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
322pub struct AiStudioAgentTextGen {
323 pub r#type: AiAgentTextGenType,
324 pub access_state: String,
325 pub description: String,
326 #[serde(
327 default,
328 skip_serializing_if = "Option::is_none",
329 deserialize_with = "double_option"
330 )]
331 pub custom_instructions: Option<Option<String>>,
332 #[serde(default, skip_serializing_if = "Option::is_none")]
333 pub suggested_questions: Option<Vec<String>>,
334 #[serde(default, skip_serializing_if = "Option::is_none")]
335 pub basic_gen: Option<AiStudioAgentBasicGenTool>,
336}
337
338#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
339pub struct AiStudioAgentTextGenResponse {
340 pub r#type: AiAgentTextGenType,
341 pub access_state: String,
342 pub description: String,
343 #[serde(
344 default,
345 skip_serializing_if = "Option::is_none",
346 deserialize_with = "double_option"
347 )]
348 pub custom_instructions: Option<Option<String>>,
349 #[serde(default, skip_serializing_if = "Option::is_none")]
350 pub suggested_questions: Option<Vec<String>>,
351 #[serde(default, skip_serializing_if = "Option::is_none")]
352 pub basic_gen: Option<AiStudioAgentBasicGenToolResponse>,
353}
354
355#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
356pub struct CreateAiAgent {
357 pub r#type: AiSingleAgentResponseType,
358 pub name: String,
359 pub access_state: String,
360 #[serde(default, skip_serializing_if = "Option::is_none")]
361 pub icon_reference: Option<String>,
362 #[serde(default, skip_serializing_if = "Option::is_none")]
363 pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
364 #[serde(default, skip_serializing_if = "Option::is_none")]
365 pub ask: Option<AiStudioAgentAsk>,
366 #[serde(default, skip_serializing_if = "Option::is_none")]
367 pub text_gen: Option<AiStudioAgentTextGen>,
368 #[serde(default, skip_serializing_if = "Option::is_none")]
369 pub extract: Option<AiStudioAgentExtract>,
370}
371
372#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
373pub struct GroupBase {
374 pub id: String,
375 pub r#type: GroupType,
376}
377
378#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
379#[serde(transparent)]
380pub struct AiSingleAgentResponseType(pub String);
381
382impl AiSingleAgentResponseType {
383 pub const AI_AGENT: &'static str = "ai_agent";
384}