1use serde::{Deserialize, Serialize};
2
3use super::super::CacheControl;
4use super::TextBlock;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
7#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
8pub struct ContainerUploadBlock {
9 pub file_id: String,
10 #[serde(rename = "type")]
11 pub type_: ContainerUploadBlockType,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub cache_control: Option<CacheControl>,
14 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
15 pub rest: serde_json::Map<String, serde_json::Value>,
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19#[non_exhaustive]
20pub enum ContainerUploadBlockType {
21 #[serde(rename = "container_upload")]
22 ContainerUpload,
23}
24
25#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
26#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
27pub struct CompactionBlock {
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub content: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub encrypted_content: Option<String>,
32 #[serde(rename = "type")]
33 pub type_: CompactionBlockType,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub cache_control: Option<CacheControl>,
36 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
37 pub rest: serde_json::Map<String, serde_json::Value>,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41#[non_exhaustive]
42pub enum CompactionBlockType {
43 #[serde(rename = "compaction")]
44 Compaction,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
48#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
49pub struct MidConversationSystemBlock {
50 pub content: Vec<MidConversationSystemContentBlock>,
51 #[serde(rename = "type")]
52 pub type_: MidConversationSystemBlockType,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub cache_control: Option<CacheControl>,
55 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
56 pub rest: serde_json::Map<String, serde_json::Value>,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60#[serde(untagged)]
61#[non_exhaustive]
62pub enum MidConversationSystemContentBlock {
63 Text(TextBlock),
64 ToolAddition(ToolAdditionBlock),
65 ToolRemoval(ToolRemovalBlock),
66 Raw(serde_json::Value),
67}
68
69#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
70#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
71pub struct ToolAdditionBlock {
72 pub tool: ToolChangeReference,
73 #[serde(rename = "type")]
74 pub type_: ToolAdditionBlockType,
75 #[serde(skip_serializing_if = "Option::is_none")]
76 pub cache_control: Option<CacheControl>,
77 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
78 pub rest: serde_json::Map<String, serde_json::Value>,
79}
80
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
82#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
83pub struct ToolRemovalBlock {
84 pub tool: ToolChangeReference,
85 #[serde(rename = "type")]
86 pub type_: ToolRemovalBlockType,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub cache_control: Option<CacheControl>,
89 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
90 pub rest: serde_json::Map<String, serde_json::Value>,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
94#[serde(untagged)]
95#[non_exhaustive]
96pub enum ToolChangeReference {
97 McpTool(McpToolChangeReference),
98 McpToolset(McpToolsetChangeReference),
99 Tool(ToolChangeToolReference),
100 Raw(serde_json::Value),
101}
102
103#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
104#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
105pub struct ToolChangeToolReference {
106 pub name: String,
107 #[serde(rename = "type")]
108 pub type_: ToolChangeToolReferenceType,
109 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
110 pub rest: serde_json::Map<String, serde_json::Value>,
111}
112
113#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
114#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
115pub struct McpToolChangeReference {
116 pub name: String,
117 pub server_name: String,
118 #[serde(rename = "type")]
119 pub type_: McpToolChangeReferenceType,
120 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
121 pub rest: serde_json::Map<String, serde_json::Value>,
122}
123
124#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
125#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
126pub struct McpToolsetChangeReference {
127 pub server_name: String,
128 #[serde(rename = "type")]
129 pub type_: McpToolsetChangeReferenceType,
130 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
131 pub rest: serde_json::Map<String, serde_json::Value>,
132}
133
134#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
135#[non_exhaustive]
136pub enum ToolAdditionBlockType {
137 #[serde(rename = "tool_addition")]
138 ToolAddition,
139}
140
141#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
142#[non_exhaustive]
143pub enum ToolRemovalBlockType {
144 #[serde(rename = "tool_removal")]
145 ToolRemoval,
146}
147
148#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149#[non_exhaustive]
150pub enum ToolChangeToolReferenceType {
151 #[serde(rename = "tool_reference")]
152 ToolReference,
153}
154
155#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
156#[non_exhaustive]
157pub enum McpToolChangeReferenceType {
158 #[serde(rename = "mcp_tool_reference")]
159 McpToolReference,
160}
161
162#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
163#[non_exhaustive]
164pub enum McpToolsetChangeReferenceType {
165 #[serde(rename = "mcp_toolset_reference")]
166 McpToolsetReference,
167}
168
169#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
170#[non_exhaustive]
171pub enum MidConversationSystemBlockType {
172 #[serde(rename = "mid_conv_system")]
173 MidConversationSystem,
174}