dynamo_async_openai/types/
image.rs1use derive_builder::Builder;
12use serde::{Deserialize, Serialize};
13
14use crate::error::OpenAIError;
15
16use super::InputSource;
17
18#[derive(Default, Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
19pub enum ImageSize {
20 #[serde(rename = "256x256")]
21 S256x256,
22 #[serde(rename = "512x512")]
23 S512x512,
24 #[default]
25 #[serde(rename = "1024x1024")]
26 S1024x1024,
27 #[serde(rename = "1792x1024")]
28 S1792x1024,
29 #[serde(rename = "1024x1792")]
30 S1024x1792,
31}
32
33#[derive(Default, Debug, Serialize, Deserialize, Clone, Copy, PartialEq)]
34pub enum DallE2ImageSize {
35 #[serde(rename = "256x256")]
36 S256x256,
37 #[serde(rename = "512x512")]
38 S512x512,
39 #[default]
40 #[serde(rename = "1024x1024")]
41 S1024x1024,
42}
43
44#[derive(Debug, Serialize, Deserialize, Default, Clone, Copy, PartialEq)]
45#[serde(rename_all = "lowercase")]
46pub enum ImageResponseFormat {
47 #[default]
48 Url,
49 #[serde(rename = "b64_json")]
50 B64Json,
51}
52
53#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)]
54pub enum ImageModel {
55 #[default]
56 #[serde(rename = "dall-e-2")]
57 DallE2,
58 #[serde(rename = "dall-e-3")]
59 DallE3,
60 #[serde(untagged)]
61 Other(String),
62}
63
64#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)]
65#[serde(rename_all = "lowercase")]
66pub enum ImageQuality {
67 #[default]
68 Standard,
69 HD,
70 High,
71 Medium,
72 Low,
73 Auto,
74}
75
76#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)]
77#[serde(rename_all = "lowercase")]
78pub enum ImageStyle {
79 #[default]
80 Vivid,
81 Natural,
82}
83
84#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)]
85#[serde(rename_all = "lowercase")]
86pub enum ImageModeration {
87 #[default]
88 Auto,
89 Low,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, Default, Builder, PartialEq)]
93#[builder(name = "CreateImageRequestArgs")]
94#[builder(pattern = "mutable")]
95#[builder(setter(into, strip_option), default)]
96#[builder(derive(Debug))]
97#[builder(build_fn(error = "OpenAIError"))]
98pub struct CreateImageRequest {
99 pub prompt: String,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub model: Option<ImageModel>,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub n: Option<u8>, #[serde(skip_serializing_if = "Option::is_none")]
114 pub quality: Option<ImageQuality>,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub response_format: Option<ImageResponseFormat>,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
123 pub size: Option<ImageSize>,
124
125 #[serde(skip_serializing_if = "Option::is_none")]
130 pub style: Option<ImageStyle>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub user: Option<String>,
135
136 #[serde(skip_serializing_if = "Option::is_none")]
139 pub moderation: Option<ImageModeration>,
140}
141
142#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
143#[serde(untagged)]
144pub enum Image {
145 Url {
147 url: String,
148 revised_prompt: Option<String>,
149 },
150 B64Json {
152 b64_json: std::sync::Arc<String>,
153 revised_prompt: Option<String>,
154 },
155}
156
157#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
158pub struct ImagesResponse {
159 pub created: u32,
160 pub data: Vec<std::sync::Arc<Image>>,
161}
162
163#[derive(Debug, Default, Clone, PartialEq)]
164pub struct ImageInput {
165 pub source: InputSource,
166}
167
168#[derive(Debug, Clone, Default, Builder, PartialEq)]
169#[builder(name = "CreateImageEditRequestArgs")]
170#[builder(pattern = "mutable")]
171#[builder(setter(into, strip_option), default)]
172#[builder(derive(Debug))]
173#[builder(build_fn(error = "OpenAIError"))]
174pub struct CreateImageEditRequest {
175 pub image: ImageInput,
177
178 pub prompt: String,
180
181 pub mask: Option<ImageInput>,
183
184 pub model: Option<ImageModel>,
186
187 pub n: Option<u8>, pub size: Option<DallE2ImageSize>,
192
193 pub response_format: Option<ImageResponseFormat>,
195
196 pub user: Option<String>,
198}
199
200#[derive(Debug, Default, Clone, Builder, PartialEq)]
201#[builder(name = "CreateImageVariationRequestArgs")]
202#[builder(pattern = "mutable")]
203#[builder(setter(into, strip_option), default)]
204#[builder(derive(Debug))]
205#[builder(build_fn(error = "OpenAIError"))]
206pub struct CreateImageVariationRequest {
207 pub image: ImageInput,
209
210 pub model: Option<ImageModel>,
212
213 pub n: Option<u8>, pub size: Option<DallE2ImageSize>,
218
219 pub response_format: Option<ImageResponseFormat>,
221
222 pub user: Option<String>,
224}