1use crate::{Rest, WireRequest, WireResponse};
8use serde::{Deserialize, Serialize};
9use serde_json::{Map, Value};
10
11#[derive(
13 Debug,
14 Clone,
15 PartialEq,
16 Serialize,
17 Deserialize,
18 gproxy_protocol_macros::WireBuilder,
19 gproxy_protocol_macros::DeclaredFields,
20)]
21#[serde(rename_all = "camelCase")]
22#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
23#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
24pub struct VideoImage {
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub bytes_base64_encoded: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub mime_type: Option<String>,
29 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
30 pub rest: Rest,
31}
32
33#[derive(
35 Debug,
36 Clone,
37 PartialEq,
38 Serialize,
39 Deserialize,
40 gproxy_protocol_macros::WireBuilder,
41 gproxy_protocol_macros::DeclaredFields,
42)]
43#[serde(rename_all = "camelCase")]
44#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
45#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
46pub struct Video {
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub uri: Option<String>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub encoded_video: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub encoding: Option<String>,
54 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
55 pub rest: Rest,
56}
57
58#[derive(
59 Debug,
60 Clone,
61 PartialEq,
62 Serialize,
63 Deserialize,
64 gproxy_protocol_macros::WireBuilder,
65 gproxy_protocol_macros::DeclaredFields,
66)]
67#[serde(rename_all = "camelCase")]
68#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
69#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
70pub struct VideoReferenceImage {
71 #[serde(skip_serializing_if = "Option::is_none")]
72 pub image: Option<VideoImage>,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub reference_type: Option<VideoReferenceType>,
75 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
76 pub rest: Rest,
77}
78
79#[derive(
82 Debug,
83 Clone,
84 Copy,
85 PartialEq,
86 Eq,
87 Serialize,
88 Deserialize,
89 gproxy_protocol_macros::DeclaredFields,
90)]
91#[serde(rename_all = "UPPERCASE")]
92#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
93#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
94pub enum VideoReferenceType {
95 Asset,
96}
97
98#[derive(
99 Debug,
100 Clone,
101 PartialEq,
102 Serialize,
103 Deserialize,
104 gproxy_protocol_macros::WireBuilder,
105 gproxy_protocol_macros::DeclaredFields,
106)]
107#[serde(rename_all = "camelCase")]
108#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
109#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
110pub struct VideoGenerationInstance {
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub prompt: Option<String>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub image: Option<VideoImage>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub video: Option<Video>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub last_frame: Option<VideoImage>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub reference_images: Option<Vec<VideoReferenceImage>>,
121 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
122 pub rest: Rest,
123}
124
125#[derive(
126 Debug,
127 Clone,
128 PartialEq,
129 Serialize,
130 Deserialize,
131 gproxy_protocol_macros::WireBuilder,
132 gproxy_protocol_macros::DeclaredFields,
133)]
134#[serde(rename_all = "camelCase")]
135#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
136#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
137pub struct VideoGenerationParameters {
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub sample_count: Option<i32>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub duration_seconds: Option<i32>,
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub aspect_ratio: Option<String>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub resolution: Option<String>,
146 #[serde(skip_serializing_if = "Option::is_none")]
147 pub person_generation: Option<String>,
148 #[serde(skip_serializing_if = "Option::is_none")]
149 pub negative_prompt: Option<String>,
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub enhance_prompt: Option<bool>,
152 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
153 pub rest: Rest,
154}
155
156#[derive(
157 Debug,
158 Clone,
159 PartialEq,
160 Serialize,
161 Deserialize,
162 gproxy_protocol_macros::WireBuilder,
163 gproxy_protocol_macros::DeclaredFields,
164)]
165#[serde(rename_all = "camelCase")]
166#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
167#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
168pub struct VideoWebhookConfig {
169 #[serde(skip_serializing_if = "Option::is_none")]
170 pub uris: Option<Vec<String>>,
171 #[serde(skip_serializing_if = "Option::is_none")]
172 #[serde(alias = "user_metadata")]
174 pub user_metadata: Option<Map<String, Value>>,
175 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
176 pub rest: Rest,
177}
178
179#[derive(
180 Debug,
181 Clone,
182 PartialEq,
183 Serialize,
184 Deserialize,
185 gproxy_protocol_macros::WireBuilder,
186 gproxy_protocol_macros::DeclaredFields,
187)]
188#[serde(rename_all = "camelCase")]
189#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
190#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
191pub struct PredictLongRunningRequestBody {
192 pub instances: Vec<VideoGenerationInstance>,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub parameters: Option<VideoGenerationParameters>,
195 #[serde(skip_serializing_if = "Option::is_none")]
196 #[serde(alias = "webhook_config")]
197 pub webhook_config: Option<VideoWebhookConfig>,
198 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
199 pub rest: Rest,
200}
201
202pub type PredictLongRunningRequest = WireRequest<PredictLongRunningRequestBody>;
203pub type PredictLongRunningResponse = WireResponse<VideoOperation>;
204pub type FetchVideoOperationRequest = WireRequest<()>;
206pub type FetchVideoOperationResponse = WireResponse<VideoOperation>;
207
208#[derive(
209 Debug,
210 Clone,
211 PartialEq,
212 Serialize,
213 Deserialize,
214 gproxy_protocol_macros::WireBuilder,
215 gproxy_protocol_macros::DeclaredFields,
216)]
217#[serde(rename_all = "camelCase")]
218#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
219#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
220pub struct VideoOperation {
221 #[serde(skip_serializing_if = "Option::is_none")]
222 pub name: Option<String>,
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub metadata: Option<Map<String, Value>>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub done: Option<bool>,
228 #[serde(skip_serializing_if = "Option::is_none")]
229 pub error: Option<GoogleRpcStatus>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 pub response: Option<VideoOperationResponse>,
232 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
233 pub rest: Rest,
234}
235
236#[derive(
239 Debug,
240 Clone,
241 PartialEq,
242 Serialize,
243 Deserialize,
244 gproxy_protocol_macros::WireBuilder,
245 gproxy_protocol_macros::DeclaredFields,
246)]
247#[serde(rename_all = "camelCase")]
248#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
249#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
250pub struct VideoOperationResponse {
251 #[serde(skip_serializing_if = "Option::is_none")]
252 pub generate_video_response: Option<GenerateVideoResponse>,
253 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
254 pub rest: Rest,
255}
256
257#[derive(
258 Debug,
259 Clone,
260 PartialEq,
261 Serialize,
262 Deserialize,
263 gproxy_protocol_macros::WireBuilder,
264 gproxy_protocol_macros::DeclaredFields,
265)]
266#[serde(rename_all = "camelCase")]
267#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
268#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
269pub struct GoogleRpcStatus {
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub code: Option<i32>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 pub message: Option<String>,
274 #[serde(skip_serializing_if = "Option::is_none")]
275 pub details: Option<Vec<Map<String, Value>>>,
276 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
277 pub rest: Rest,
278}
279
280#[derive(
281 Debug,
282 Clone,
283 PartialEq,
284 Serialize,
285 Deserialize,
286 gproxy_protocol_macros::WireBuilder,
287 gproxy_protocol_macros::DeclaredFields,
288)]
289#[serde(rename_all = "camelCase")]
290#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
291#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
292pub struct GenerateVideoResponse {
293 #[serde(skip_serializing_if = "Option::is_none")]
294 pub generated_samples: Option<Vec<GeneratedVideoSample>>,
295 #[serde(skip_serializing_if = "Option::is_none")]
296 pub rai_media_filtered_count: Option<i32>,
297 #[serde(skip_serializing_if = "Option::is_none")]
298 pub rai_media_filtered_reasons: Option<Vec<String>>,
299 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
300 pub rest: Rest,
301}
302
303#[derive(
304 Debug,
305 Clone,
306 PartialEq,
307 Serialize,
308 Deserialize,
309 gproxy_protocol_macros::WireBuilder,
310 gproxy_protocol_macros::DeclaredFields,
311)]
312#[serde(rename_all = "camelCase")]
313#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
314#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
315pub struct GeneratedVideoSample {
316 #[serde(skip_serializing_if = "Option::is_none")]
317 pub video: Option<Video>,
318 #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
319 pub rest: Rest,
320}