gproxy_transform/transform/images/create/
gemini_to_openai.rs1use crate::protocol::{gemini, openai};
4use crate::transform::{TransformContext, TransformError};
5
6use super::super::common;
7
8pub fn request(
9 input: gemini::GenerateContentRequest,
10 _: &TransformContext,
11) -> Result<openai::ImageGenerationRequest, TransformError> {
12 Ok(crate::protocol::wire!(openai::ImageGenerationRequest {
13 prompt: common::gemini_request_prompt(&input),
14 background: None,
15 model: input.model.map(Into::into),
16 moderation: None,
17 n: input
18 .generation_config
19 .as_ref()
20 .and_then(|config| config.candidate_count)
21 .and_then(common::positive_i32_to_u32),
22 output_compression: None,
23 output_format: common::gemini_output_format(input.generation_config.as_ref()),
24 partial_images: None,
25 quality: None,
26 response_format: common::gemini_response_format(input.generation_config.as_ref()),
27 size: common::gemini_to_openai_create_size(input.generation_config.as_ref()),
28 stream: None,
29 style: None,
30 user: None,
31 extra: Default::default(),
32 }))
33}
34
35pub fn response(
36 input: gemini::GenerateContentResponse,
37 _: &TransformContext,
38) -> Result<openai::ImagesResponse, TransformError> {
39 Ok(common::gemini_response_to_openai_images(input))
40}
41
42pub fn stream_event(
43 input: gemini::GenerateContentResponse,
44 _: &TransformContext,
45) -> Result<openai::ImageGenerationStreamEvent, TransformError> {
46 common::gemini_to_openai_generation_stream(input).ok_or_else(|| TransformError::InvalidInput {
47 reason: "Gemini image stream chunk did not contain an inline image".to_owned(),
48 })
49}