Skip to main content

gproxy_protocol/protocol/openai/
images.rs

1mod 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}