Skip to main content

gproxy_protocol/aws/converse/
stream_content.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use crate::aws::{EmptyObject, ImageFormat, Rest, ToolResultStatus, ToolUseType};
5
6use super::ImageSource;
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(untagged)]
10#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
11pub enum ContentBlockStart {
12    ToolUse {
13        #[serde(rename = "toolUse")]
14        tool_use: ToolUseBlockStart,
15        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
16        rest: Rest,
17    },
18    ToolResult {
19        #[serde(rename = "toolResult")]
20        tool_result: ToolResultBlockStart,
21        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
22        rest: Rest,
23    },
24    ReasoningContent {
25        #[serde(rename = "reasoningContent")]
26        reasoning_content: EmptyObject,
27        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
28        rest: Rest,
29    },
30    Image {
31        image: ImageBlockStart,
32        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
33        rest: Rest,
34    },
35    Raw(Value),
36}
37
38#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
39#[serde(rename_all = "camelCase")]
40#[derive(gproxy_protocol_macros::WireBuilder)]
41#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
42pub struct ToolUseBlockStart {
43    pub tool_use_id: String,
44    pub name: String,
45    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
46    pub type_: Option<ToolUseType>,
47    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
48    pub rest: Rest,
49}
50
51#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53#[derive(gproxy_protocol_macros::WireBuilder)]
54#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
55pub struct ToolResultBlockStart {
56    pub tool_use_id: String,
57    #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
58    pub type_: Option<String>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub status: Option<ToolResultStatus>,
61    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
62    pub rest: Rest,
63}
64
65#[derive(
66    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
67)]
68#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
69pub struct ImageBlockStart {
70    pub format: ImageFormat,
71    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
72    pub rest: Rest,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76#[serde(untagged)]
77#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
78pub enum ContentBlockDelta {
79    Text {
80        text: String,
81        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
82        rest: Rest,
83    },
84    ToolUse {
85        #[serde(rename = "toolUse")]
86        tool_use: ToolUseBlockDelta,
87        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
88        rest: Rest,
89    },
90    ToolResult {
91        #[serde(rename = "toolResult")]
92        tool_result: Vec<ToolResultBlockDelta>,
93        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
94        rest: Rest,
95    },
96    ReasoningContent {
97        #[serde(rename = "reasoningContent")]
98        reasoning_content: ReasoningContentBlockDelta,
99        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
100        rest: Rest,
101    },
102    Image {
103        image: ImageBlockDelta,
104        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
105        rest: Rest,
106    },
107    Raw(Value),
108}
109
110#[derive(
111    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
112)]
113#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
114pub struct ToolUseBlockDelta {
115    pub input: String,
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)]
121#[serde(untagged)]
122#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
123pub enum ToolResultBlockDelta {
124    Text {
125        text: String,
126        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
127        rest: Rest,
128    },
129    Json {
130        json: Value,
131        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
132        rest: Rest,
133    },
134    Raw(Value),
135}
136
137#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
138#[serde(untagged)]
139#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
140pub enum ReasoningContentBlockDelta {
141    Text {
142        text: String,
143        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
144        rest: Rest,
145    },
146    RedactedContent {
147        #[serde(rename = "redactedContent")]
148        redacted_content: String,
149        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
150        rest: Rest,
151    },
152    Signature {
153        signature: String,
154        #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
155        rest: Rest,
156    },
157    Raw(Value),
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
161#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
162pub struct ImageBlockDelta {
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub source: Option<ImageSource>,
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub error: Option<ErrorBlock>,
167    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
168    pub rest: Rest,
169}
170
171/// AWS `ConverseStream.ImageBlockDelta.error` (`ErrorBlock` object).
172#[derive(
173    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
174)]
175#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
176pub struct ErrorBlock {
177    #[serde(skip_serializing_if = "Option::is_none")]
178    pub message: Option<String>,
179    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
180    pub rest: Rest,
181}