Skip to main content

gproxy_protocol/protocol/claude/common/blocks/
misc.rs

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