1use crate::Rest;
7use serde::{Deserialize, Serialize};
8use std::collections::BTreeMap;
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
11#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
12#[derive(gproxy_protocol_macros::DeclaredFields)]
13pub struct ClientAdditionalTools {
14 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub id: Option<String>,
16 pub role: String,
17 pub tools: Vec<serde_json::Value>,
18
19 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
20 pub rest: Rest,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
24#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
25#[derive(gproxy_protocol_macros::DeclaredFields)]
26pub struct ClientMessage {
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub id: Option<String>,
29 pub role: String,
30 pub content: Vec<ContentItem>,
31
32 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub phase: Option<MessagePhase>,
34 #[serde(default, skip_serializing_if = "Option::is_none")]
35 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
36
37 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
38 pub rest: Rest,
39}
40
41#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
42#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
43#[derive(gproxy_protocol_macros::DeclaredFields)]
44pub struct ClientAgentMessage {
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub id: Option<String>,
47 pub author: String,
48 pub recipient: String,
49 pub content: Vec<AgentMessageInputContent>,
50 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
52
53 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
54 pub rest: Rest,
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
58#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
59#[derive(gproxy_protocol_macros::DeclaredFields)]
60pub struct ClientReasoning {
61 #[serde(default, skip_serializing_if = "Option::is_none")]
62 pub id: Option<String>,
63 pub summary: Vec<ReasoningItemReasoningSummary>,
64 #[serde(
65 default,
66 deserialize_with = "super::responses::input::present_nullable",
67 skip_serializing_if = "Option::is_none"
68 )]
69 pub content: Option<Option<Vec<ReasoningItemContent>>>,
70 #[wire(required)]
71 #[serde(deserialize_with = "super::responses::input::required_nullable")]
72 pub encrypted_content: Option<String>,
73 #[serde(default, skip_serializing_if = "Option::is_none")]
74 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
75
76 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
77 pub rest: Rest,
78}
79
80#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82#[derive(gproxy_protocol_macros::DeclaredFields)]
83pub struct ClientLocalShellCall {
84 #[serde(default, skip_serializing_if = "Option::is_none")]
85 pub id: Option<String>,
86
87 #[wire(required)]
88 #[serde(deserialize_with = "super::responses::input::required_nullable")]
89 pub call_id: Option<String>,
90 pub status: LocalShellStatus,
91 pub action: LocalShellAction,
92 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
94
95 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
96 pub rest: Rest,
97}
98
99#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
100#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
101#[derive(gproxy_protocol_macros::DeclaredFields)]
102pub struct ClientFunctionCall {
103 #[serde(default, skip_serializing_if = "Option::is_none")]
104 pub id: Option<String>,
105 pub name: String,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub namespace: Option<String>,
108
109 pub arguments: String,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub encrypted_function_args: Option<Vec<String>>,
112 pub call_id: String,
113 #[serde(default, skip_serializing_if = "Option::is_none")]
114 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
115
116 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
117 pub rest: Rest,
118}
119
120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
121#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
122#[derive(gproxy_protocol_macros::DeclaredFields)]
123pub struct ClientToolSearchCall {
124 #[serde(default, skip_serializing_if = "Option::is_none")]
125 pub id: Option<String>,
126 #[wire(required)]
127 #[serde(deserialize_with = "super::responses::input::required_nullable")]
128 pub call_id: Option<String>,
129 #[serde(default, skip_serializing_if = "Option::is_none")]
130 pub status: Option<String>,
131 pub execution: String,
132 pub arguments: serde_json::Value,
133 #[serde(default, skip_serializing_if = "Option::is_none")]
134 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
135
136 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
137 pub rest: Rest,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
141#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
142#[derive(gproxy_protocol_macros::DeclaredFields)]
143pub struct ClientFunctionCallOutput {
144 #[serde(default, skip_serializing_if = "Option::is_none")]
145 pub id: Option<String>,
146 #[serde(default, skip_serializing_if = "Option::is_none")]
147 pub call_id: Option<String>,
148 #[serde(default, skip_serializing_if = "Option::is_none")]
149 pub name: Option<String>,
150 #[serde(default, skip_serializing_if = "Option::is_none")]
151 pub namespace: Option<String>,
152 pub output: FunctionCallOutputBody,
153 #[serde(default, skip_serializing_if = "Option::is_none")]
154 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
155
156 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
157 pub rest: Rest,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
162#[derive(gproxy_protocol_macros::DeclaredFields)]
163pub struct ClientCustomToolCall {
164 #[serde(default, skip_serializing_if = "Option::is_none")]
165 pub id: Option<String>,
166 #[serde(default, skip_serializing_if = "Option::is_none")]
167 pub status: Option<String>,
168
169 pub call_id: String,
170 pub name: String,
171 #[serde(default, skip_serializing_if = "Option::is_none")]
172 pub namespace: Option<String>,
173 pub input: String,
174 #[serde(default, skip_serializing_if = "Option::is_none")]
175 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
176
177 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
178 pub rest: Rest,
179}
180
181#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
182#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
183#[derive(gproxy_protocol_macros::DeclaredFields)]
184pub struct ClientCustomToolCallOutput {
185 #[serde(default, skip_serializing_if = "Option::is_none")]
186 pub id: Option<String>,
187 pub call_id: String,
188 #[serde(default, skip_serializing_if = "Option::is_none")]
189 pub name: Option<String>,
190 pub output: FunctionCallOutputBody,
191 #[serde(default, skip_serializing_if = "Option::is_none")]
192 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
193
194 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
195 pub rest: Rest,
196}
197
198#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
199#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
200#[derive(gproxy_protocol_macros::DeclaredFields)]
201pub struct ClientToolSearchOutput {
202 #[serde(default, skip_serializing_if = "Option::is_none")]
203 pub id: Option<String>,
204 #[wire(required)]
205 #[serde(deserialize_with = "super::responses::input::required_nullable")]
206 pub call_id: Option<String>,
207 pub status: String,
208 pub execution: String,
209 pub tools: Vec<serde_json::Value>,
210 #[serde(default, skip_serializing_if = "Option::is_none")]
211 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
212
213 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
214 pub rest: Rest,
215}
216
217#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
218#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
219#[derive(gproxy_protocol_macros::DeclaredFields)]
220pub struct ClientWebSearchCall {
221 #[serde(default, skip_serializing_if = "Option::is_none")]
222 pub id: Option<String>,
223 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub status: Option<String>,
225 #[serde(default, skip_serializing_if = "Option::is_none")]
226 pub action: Option<WebSearchAction>,
227 #[serde(default, skip_serializing_if = "Option::is_none")]
228 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
229
230 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
231 pub rest: Rest,
232}
233
234#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
235#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
236#[derive(gproxy_protocol_macros::DeclaredFields)]
237pub struct ClientImageGenerationCall {
238 #[serde(default, skip_serializing_if = "Option::is_none")]
239 pub id: Option<String>,
240 pub status: String,
241 #[serde(default, skip_serializing_if = "Option::is_none")]
242 pub revised_prompt: Option<String>,
243 pub result: String,
244 #[serde(default, skip_serializing_if = "Option::is_none")]
245 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
246
247 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
248 pub rest: Rest,
249}
250
251#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
252#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
253#[derive(gproxy_protocol_macros::DeclaredFields)]
254pub struct ClientCompaction {
255 #[serde(default, skip_serializing_if = "Option::is_none")]
256 pub id: Option<String>,
257 pub encrypted_content: String,
258 #[serde(default, skip_serializing_if = "Option::is_none")]
259 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
260
261 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
262 pub rest: Rest,
263}
264
265#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
266#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
267#[derive(gproxy_protocol_macros::DeclaredFields)]
268pub struct ClientConfigurationUpdate {
269 pub reasoning: ConfigurationReasoning,
270
271 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
272 pub rest: Rest,
273}
274
275#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
276#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
277#[derive(gproxy_protocol_macros::DeclaredFields)]
278pub struct ClientCompactionTrigger {
279 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
280 pub rest: Rest,
281}
282
283#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
284#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
285#[derive(gproxy_protocol_macros::DeclaredFields)]
286pub struct ClientContextCompaction {
287 #[serde(default, skip_serializing_if = "Option::is_none")]
288 pub id: Option<String>,
289 #[serde(default, skip_serializing_if = "Option::is_none")]
290 pub encrypted_content: Option<String>,
291 #[serde(default, skip_serializing_if = "Option::is_none")]
292 pub internal_chat_message_metadata_passthrough: Option<InternalChatMessageMetadataPassthrough>,
293
294 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
295 pub rest: Rest,
296}
297
298#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
299#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
300#[derive(gproxy_protocol_macros::DeclaredFields)]
301pub struct ResponseItemOther {
302 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
303 pub rest: Rest,
304}
305
306#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
307#[serde(tag = "type", rename_all = "snake_case")]
308#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
309#[derive(gproxy_protocol_macros::DeclaredFields)]
310pub enum ClientResponseItem {
311 AdditionalTools(ClientAdditionalTools),
312 Message(ClientMessage),
313 AgentMessage(ClientAgentMessage),
314 Reasoning(ClientReasoning),
315 LocalShellCall(ClientLocalShellCall),
316 FunctionCall(ClientFunctionCall),
317 ToolSearchCall(ClientToolSearchCall),
318 FunctionCallOutput(ClientFunctionCallOutput),
319 CustomToolCall(ClientCustomToolCall),
320 CustomToolCallOutput(ClientCustomToolCallOutput),
321 ToolSearchOutput(ClientToolSearchOutput),
322 WebSearchCall(ClientWebSearchCall),
323 ImageGenerationCall(ClientImageGenerationCall),
324 #[serde(alias = "compaction_summary")]
325 Compaction(ClientCompaction),
326 ConfigurationUpdate(ClientConfigurationUpdate),
327 CompactionTrigger(ClientCompactionTrigger),
328 ContextCompaction(ClientContextCompaction),
329 Other(ResponseItemOther),
330}
331
332#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
333#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
334#[derive(gproxy_protocol_macros::DeclaredFields)]
335pub struct ContentItemInputText {
336 pub text: String,
337
338 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
339 pub rest: Rest,
340}
341
342#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
343#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
344#[derive(gproxy_protocol_macros::DeclaredFields)]
345pub struct ContentItemInputImage {
346 pub image_url: String,
347 #[serde(default, skip_serializing_if = "Option::is_none")]
348 pub detail: Option<ImageDetail>,
349
350 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
351 pub rest: Rest,
352}
353
354#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
355#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
356#[derive(gproxy_protocol_macros::DeclaredFields)]
357pub struct ContentItemInputAudio {
358 pub audio_url: String,
359
360 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
361 pub rest: Rest,
362}
363
364#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
365#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
366#[derive(gproxy_protocol_macros::DeclaredFields)]
367pub struct ContentItemOutputText {
368 pub text: String,
369
370 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
371 pub rest: Rest,
372}
373
374#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
375#[serde(tag = "type", rename_all = "snake_case")]
376#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
377#[derive(gproxy_protocol_macros::DeclaredFields)]
378pub enum ContentItem {
379 InputText(ContentItemInputText),
380 InputImage(ContentItemInputImage),
381 InputAudio(ContentItemInputAudio),
382 OutputText(ContentItemOutputText),
383}
384
385#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
386#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
387#[derive(gproxy_protocol_macros::DeclaredFields)]
388pub struct AgentMessageInputContentInputText {
389 pub text: String,
390 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
391 pub rest: Rest,
392}
393
394#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
395#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
396#[derive(gproxy_protocol_macros::DeclaredFields)]
397pub struct AgentMessageInputContentEncryptedContent {
398 pub encrypted_content: String,
399 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
400 pub rest: Rest,
401}
402
403#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
404#[serde(tag = "type", rename_all = "snake_case")]
405#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
406#[derive(gproxy_protocol_macros::DeclaredFields)]
407pub enum AgentMessageInputContent {
408 InputText(AgentMessageInputContentInputText),
409 EncryptedContent(AgentMessageInputContentEncryptedContent),
410}
411
412#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
413#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
414#[derive(gproxy_protocol_macros::DeclaredFields)]
415pub struct WebSearchActionSearch {
416 #[serde(default, skip_serializing_if = "Option::is_none")]
417 pub query: Option<String>,
418 #[serde(default, skip_serializing_if = "Option::is_none")]
419 pub queries: Option<Vec<String>>,
420
421 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
422 pub rest: Rest,
423}
424
425#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
426#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
427#[derive(gproxy_protocol_macros::DeclaredFields)]
428pub struct WebSearchActionOpenPage {
429 #[serde(default, skip_serializing_if = "Option::is_none")]
430 pub url: Option<String>,
431
432 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
433 pub rest: Rest,
434}
435
436#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
437#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
438#[derive(gproxy_protocol_macros::DeclaredFields)]
439pub struct WebSearchActionFindInPage {
440 #[serde(default, skip_serializing_if = "Option::is_none")]
441 pub url: Option<String>,
442 #[serde(default, skip_serializing_if = "Option::is_none")]
443 pub pattern: Option<String>,
444
445 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
446 pub rest: Rest,
447}
448
449#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
450#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
451#[derive(gproxy_protocol_macros::DeclaredFields)]
452pub struct WebSearchActionOther {
453 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
454 pub rest: Rest,
455}
456
457#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
458#[serde(tag = "type", rename_all = "snake_case")]
459#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
460#[derive(gproxy_protocol_macros::DeclaredFields)]
461pub enum WebSearchAction {
462 Search(WebSearchActionSearch),
463 OpenPage(WebSearchActionOpenPage),
464 FindInPage(WebSearchActionFindInPage),
465 Other(WebSearchActionOther),
466}
467
468#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
469#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
470#[derive(gproxy_protocol_macros::DeclaredFields)]
471pub struct ReasoningItemReasoningSummarySummaryText {
472 pub text: String,
473 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
474 pub rest: Rest,
475}
476
477#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
478#[serde(tag = "type", rename_all = "snake_case")]
479#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
480#[derive(gproxy_protocol_macros::DeclaredFields)]
481pub enum ReasoningItemReasoningSummary {
482 SummaryText(ReasoningItemReasoningSummarySummaryText),
483}
484
485#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
486#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
487#[derive(gproxy_protocol_macros::DeclaredFields)]
488pub struct ReasoningItemContentReasoningText {
489 pub text: String,
490 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
491 pub rest: Rest,
492}
493
494#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
495#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
496#[derive(gproxy_protocol_macros::DeclaredFields)]
497pub struct ReasoningItemContentText {
498 pub text: String,
499 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
500 pub rest: Rest,
501}
502
503#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
504#[serde(tag = "type", rename_all = "snake_case")]
505#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
506#[derive(gproxy_protocol_macros::DeclaredFields)]
507pub enum ReasoningItemContent {
508 ReasoningText(ReasoningItemContentReasoningText),
509 Text(ReasoningItemContentText),
510}
511
512#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
513#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
514#[derive(gproxy_protocol_macros::DeclaredFields)]
515pub struct FunctionCallOutputContentItemInputText {
516 pub text: String,
517
518 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
519 pub rest: Rest,
520}
521
522#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
523#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
524#[derive(gproxy_protocol_macros::DeclaredFields)]
525pub struct FunctionCallOutputContentItemInputImage {
526 pub image_url: String,
527 #[serde(default, skip_serializing_if = "Option::is_none")]
528 pub detail: Option<ImageDetail>,
529
530 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
531 pub rest: Rest,
532}
533
534#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
535#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
536#[derive(gproxy_protocol_macros::DeclaredFields)]
537pub struct FunctionCallOutputContentItemInputAudio {
538 pub audio_url: String,
539
540 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
541 pub rest: Rest,
542}
543
544#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
545#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
546#[derive(gproxy_protocol_macros::DeclaredFields)]
547pub struct FunctionCallOutputContentItemEncryptedContent {
548 pub encrypted_content: String,
549
550 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
551 pub rest: Rest,
552}
553
554#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
555#[serde(tag = "type", rename_all = "snake_case")]
556#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
557#[derive(gproxy_protocol_macros::DeclaredFields)]
558pub enum FunctionCallOutputContentItem {
559 InputText(FunctionCallOutputContentItemInputText),
560 InputImage(FunctionCallOutputContentItemInputImage),
561 InputAudio(FunctionCallOutputContentItemInputAudio),
562 EncryptedContent(FunctionCallOutputContentItemEncryptedContent),
563}
564
565#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
566#[serde(rename_all = "snake_case")]
567#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
568#[derive(gproxy_protocol_macros::DeclaredFields)]
569pub enum ImageDetail {
570 Auto,
571 Low,
572 High,
573 Original,
574}
575
576#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
577#[serde(rename_all = "snake_case")]
578#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
579#[derive(gproxy_protocol_macros::DeclaredFields)]
580pub enum MessagePhase {
581 Commentary,
582
583 FinalAnswer,
584}
585
586#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
587#[serde(rename_all = "snake_case")]
588#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
589#[derive(gproxy_protocol_macros::DeclaredFields)]
590pub enum LocalShellStatus {
591 Completed,
592 InProgress,
593 Incomplete,
594}
595
596#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
597#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
598#[derive(gproxy_protocol_macros::DeclaredFields)]
599pub struct LocalShellExecAction {
600 pub command: Vec<String>,
601 #[wire(required)]
602 #[serde(deserialize_with = "super::responses::input::required_nullable")]
603 pub timeout_ms: Option<u64>,
604 #[wire(required)]
605 #[serde(deserialize_with = "super::responses::input::required_nullable")]
606 pub working_directory: Option<String>,
607 #[wire(required)]
608 #[serde(deserialize_with = "super::responses::input::required_nullable")]
609 pub env: Option<BTreeMap<String, String>>,
610 #[wire(required)]
611 #[serde(deserialize_with = "super::responses::input::required_nullable")]
612 pub user: Option<String>,
613
614 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
615 pub rest: Rest,
616}
617
618#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
619#[serde(tag = "type", rename_all = "snake_case")]
620#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
621#[derive(gproxy_protocol_macros::DeclaredFields)]
622pub enum LocalShellAction {
623 Exec(LocalShellExecAction),
624}
625
626#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
627#[serde(untagged)]
628#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
629#[derive(gproxy_protocol_macros::DeclaredFields)]
630pub enum FunctionCallOutputBody {
631 Text(String),
632 ContentItems(Vec<FunctionCallOutputContentItem>),
633}
634
635#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
636#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
637#[derive(gproxy_protocol_macros::DeclaredFields)]
638pub struct ConfigurationReasoning {
639 pub effort: String,
640 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
641 pub rest: Rest,
642}
643
644#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
645#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
646#[derive(gproxy_protocol_macros::DeclaredFields)]
647pub struct InternalChatMessageMetadataPassthrough {
648 #[serde(skip_serializing_if = "Option::is_none")]
649 pub turn_id: Option<String>,
650 #[serde(skip_serializing_if = "Option::is_none")]
651 pub create_time: Option<serde_json::Number>,
652 #[serde(skip_serializing_if = "Option::is_none")]
653 pub content_item_kinds: Option<Vec<String>>,
654 #[serde(skip_serializing_if = "Option::is_none")]
655 pub cell_id: Option<String>,
656 #[serde(skip_serializing_if = "Option::is_none")]
657 pub executed_tool_calls: Option<Vec<ExecutedToolCall>>,
658 #[serde(skip_serializing_if = "Option::is_none")]
659 pub tool_calls_complete: Option<bool>,
660 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
661 pub rest: Rest,
662}
663
664#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
665#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
666#[derive(gproxy_protocol_macros::DeclaredFields)]
667pub struct ExecutedToolCall {
668 pub name: String,
669 pub arguments: serde_json::Value,
670 #[serde(skip_serializing_if = "Option::is_none")]
671 pub tool_result_sources: Option<ToolResultSources>,
672 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
673 pub rest: Rest,
674}
675
676#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
677#[serde(untagged)]
678#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
679#[derive(gproxy_protocol_macros::DeclaredFields)]
680pub enum ToolResultSources {
681 Sources(Vec<ToolResultSource>),
682 ParseFailed(ParseFailed),
683}
684
685#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
686#[serde(rename_all = "snake_case")]
687#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
688#[derive(gproxy_protocol_macros::DeclaredFields)]
689pub enum ParseFailed {
690 ParseFailed,
691}
692
693#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
694#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
695#[derive(gproxy_protocol_macros::DeclaredFields)]
696pub struct ToolResultSource {
697 #[serde(rename = "type")]
698 pub type_: String,
699 pub id: String,
700 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
701 pub rest: Rest,
702}
703
704#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
705#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
706#[derive(gproxy_protocol_macros::DeclaredFields)]
707pub struct Reasoning {
708 #[serde(skip_serializing_if = "Option::is_none")]
709 pub effort: Option<String>,
710 #[serde(skip_serializing_if = "Option::is_none")]
711 pub summary: Option<ReasoningSummary>,
712 #[serde(skip_serializing_if = "Option::is_none")]
713 pub context: Option<ReasoningContext>,
714 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
715 pub rest: Rest,
716}
717
718#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
719#[serde(rename_all = "snake_case")]
720#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
721#[derive(gproxy_protocol_macros::DeclaredFields)]
722pub enum ReasoningSummary {
723 Auto,
724 Concise,
725 Detailed,
726 None,
727}
728
729#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
730#[serde(rename_all = "snake_case")]
731#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
732#[derive(gproxy_protocol_macros::DeclaredFields)]
733pub enum ReasoningContext {
734 Auto,
735 CurrentTurn,
736 AllTurns,
737}
738
739#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
740#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
741#[derive(gproxy_protocol_macros::DeclaredFields)]
742pub struct ClientTextControls {
743 #[serde(skip_serializing_if = "Option::is_none")]
744 pub verbosity: Option<ClientVerbosity>,
745 #[serde(skip_serializing_if = "Option::is_none")]
746 pub format: Option<ClientTextFormat>,
747 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
748 pub rest: Rest,
749}
750
751#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
752#[serde(rename_all = "snake_case")]
753#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
754#[derive(gproxy_protocol_macros::DeclaredFields)]
755pub enum ClientVerbosity {
756 Low,
757 Medium,
758 High,
759}
760
761#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
762#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
763#[derive(gproxy_protocol_macros::DeclaredFields)]
764pub struct ClientTextFormat {
765 #[serde(rename = "type")]
766 pub type_: ClientTextFormatType,
767 pub strict: bool,
768 pub schema: serde_json::Value,
769 pub name: String,
770 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
771 pub rest: Rest,
772}
773
774#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
775#[serde(rename_all = "snake_case")]
776#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
777#[derive(gproxy_protocol_macros::DeclaredFields)]
778pub enum ClientTextFormatType {
779 JsonSchema,
780}
781
782#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
783#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
784#[derive(gproxy_protocol_macros::DeclaredFields)]
785pub struct ClientStreamOptions {
786 pub reasoning_summary_delivery: ReasoningSummaryDelivery,
787 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
788 pub rest: Rest,
789}
790
791#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
792#[serde(rename_all = "snake_case")]
793#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
794#[derive(gproxy_protocol_macros::DeclaredFields)]
795pub enum ReasoningSummaryDelivery {
796 SequentialCutoff,
797}
798
799#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
800#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
801#[derive(gproxy_protocol_macros::DeclaredFields)]
802pub struct AccessPrograms {
803 pub cyber: CyberAccessProgram,
804 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
805 pub rest: Rest,
806}
807
808#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
809#[serde(rename_all = "snake_case")]
810#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
811#[derive(gproxy_protocol_macros::DeclaredFields)]
812pub enum CyberAccessProgram {
813 Standard,
814 DaybreakBlue,
815 DaybreakRed,
816}
817
818#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
819#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
820#[derive(gproxy_protocol_macros::DeclaredFields)]
821pub struct GuardianRequestBody {
822 pub model: String,
823 #[serde(default, skip_serializing_if = "String::is_empty")]
824 pub instructions: String,
825 pub input: Vec<ClientResponseItem>,
826 #[serde(
827 default,
828 deserialize_with = "super::responses::input::present_nullable",
829 skip_serializing_if = "Option::is_none"
830 )]
831 pub tools: Option<Option<serde_json::Value>>,
832 pub tool_choice: String,
833 pub parallel_tool_calls: bool,
834 #[wire(required)]
835 #[serde(deserialize_with = "super::responses::input::required_nullable")]
836 pub reasoning: Option<Reasoning>,
837 pub store: bool,
838 pub stream: bool,
839 #[serde(skip_serializing_if = "Option::is_none")]
840 pub stream_options: Option<ClientStreamOptions>,
841 pub include: Vec<String>,
842 #[serde(skip_serializing_if = "Option::is_none")]
843 pub service_tier: Option<String>,
844 #[serde(skip_serializing_if = "Option::is_none")]
845 pub prompt_cache_key: Option<String>,
846 #[serde(skip_serializing_if = "Option::is_none")]
847 pub text: Option<ClientTextControls>,
848 #[serde(skip_serializing_if = "Option::is_none")]
849 pub client_metadata: Option<BTreeMap<String, String>>,
850 #[serde(skip_serializing_if = "Option::is_none")]
851 pub access_programs: Option<AccessPrograms>,
852 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
853 pub rest: Rest,
854}
855
856pub type GuardianRequest = crate::WireRequest<GuardianRequestBody>;
857pub type GuardianClassifierRequest = GuardianRequest;
858pub type GuardianResponse = crate::WireResponse<crate::connection::ByteStream>;
859pub type GuardianClassifierResponse = GuardianResponse;
860pub type GuardianEvent = super::responses::stream::StreamEvent;