gproxy_protocol/protocol/openai/
images.rs1mod requests;
2mod responses;
3mod stream;
4
5pub use requests::*;
6pub use responses::*;
7pub use stream::*;
8
9use super::common::OpenAiWireModel;
10
11pub type ImageGenerationWireModel = OpenAiWireModel<ImageGenerationRequest, ImagesResponse>;
12pub type ImageGenerationStreamWireModel =
13 OpenAiWireModel<ImageGenerationRequest, ImageGenerationStreamEvent>;
14pub type ImageEditWireModel = OpenAiWireModel<ImageEditRequest, ImagesResponse>;
15pub type ImageEditStreamWireModel = OpenAiWireModel<ImageEditRequest, ImageEditStreamEvent>;
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn image_edit_accepts_generic_multipart_json_shape() {
23 let req: ImageEditRequest = serde_json::from_str(
24 r#"{
25 "image": [
26 "data:image/png;base64,AAAA",
27 "file_123"
28 ],
29 "mask": "data:image/png;base64,BBBB",
30 "prompt": "make it blue",
31 "model": "gpt-image-1.5",
32 "n": "2",
33 "stream": "true"
34 }"#,
35 )
36 .unwrap();
37
38 assert_eq!(req.images.len(), 2);
39 assert_eq!(
40 req.images[0].image_url.as_deref(),
41 Some("data:image/png;base64,AAAA")
42 );
43 assert_eq!(req.images[1].file_id.as_deref(), Some("file_123"));
44 assert_eq!(
45 req.mask.as_ref().and_then(|mask| mask.image_url.as_deref()),
46 Some("data:image/png;base64,BBBB")
47 );
48 assert_eq!(req.n, Some(2));
49 assert_eq!(req.stream, Some(true));
50 }
51}