Skip to main content

gproxy_protocol/openai/create_image/
request.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::create_image::types::{
6    HttpMethod, OpenAiImageBackground, OpenAiImageModel, OpenAiImageModeration,
7    OpenAiImageOutputFormat, OpenAiImageQuality, OpenAiImageResponseFormat, OpenAiImageSize,
8    OpenAiImageStyle,
9};
10
11/// Request descriptor for OpenAI `images.generate` endpoint.
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13pub struct OpenAiCreateImageRequest {
14    /// HTTP method.
15    pub method: HttpMethod,
16    /// Path parameters.
17    pub path: PathParameters,
18    /// Query parameters.
19    pub query: QueryParameters,
20    /// Request headers.
21    pub headers: RequestHeaders,
22    /// Request body.
23    pub body: RequestBody,
24}
25
26impl Default for OpenAiCreateImageRequest {
27    fn default() -> Self {
28        Self {
29            method: HttpMethod::Post,
30            path: PathParameters::default(),
31            query: QueryParameters::default(),
32            headers: RequestHeaders::default(),
33            body: RequestBody::default(),
34        }
35    }
36}
37
38/// OpenAI `/images/generations` does not define path params.
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
40pub struct PathParameters {}
41
42/// OpenAI `/images/generations` does not define query params.
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
44pub struct QueryParameters {}
45
46/// Proxy-side request model does not carry auth headers.
47#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
48pub struct RequestHeaders {
49    #[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
50    pub extra: BTreeMap<String, String>,
51}
52
53/// Request body for OpenAI `/images/generations`.
54#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
55pub struct RequestBody {
56    /// Text description of the desired image output.
57    pub prompt: String,
58    /// Background behavior for supported GPT image models.
59    #[serde(default, skip_serializing_if = "Option::is_none")]
60    pub background: Option<OpenAiImageBackground>,
61    /// Model identifier.
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub model: Option<OpenAiImageModel>,
64    /// Moderation level for GPT image models.
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub moderation: Option<OpenAiImageModeration>,
67    /// Number of images to generate.
68    #[serde(default, skip_serializing_if = "Option::is_none")]
69    pub n: Option<u32>,
70    /// Compression percentage for `jpeg` or `webp` output.
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub output_compression: Option<u8>,
73    /// Output encoding format for GPT image models.
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub output_format: Option<OpenAiImageOutputFormat>,
76    /// Number of partial images requested in streaming mode.
77    #[serde(default, skip_serializing_if = "Option::is_none")]
78    pub partial_images: Option<u32>,
79    /// Quality selection.
80    #[serde(default, skip_serializing_if = "Option::is_none")]
81    pub quality: Option<OpenAiImageQuality>,
82    /// Legacy DALL·E image return format.
83    #[serde(default, skip_serializing_if = "Option::is_none")]
84    pub response_format: Option<OpenAiImageResponseFormat>,
85    /// Requested output dimensions.
86    #[serde(default, skip_serializing_if = "Option::is_none")]
87    pub size: Option<OpenAiImageSize>,
88    /// Whether to stream partial image events.
89    #[serde(default, skip_serializing_if = "Option::is_none")]
90    pub stream: Option<bool>,
91    /// DALL·E 3 style control.
92    #[serde(default, skip_serializing_if = "Option::is_none")]
93    pub style: Option<OpenAiImageStyle>,
94    /// Stable end-user identifier.
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub user: Option<String>,
97}