Skip to main content

gproxy_transform/transform/images/create/
openai_to_gemini.rs

1//! OpenAI -> Gemini create-image transforms.
2
3use crate::protocol::{gemini, openai};
4use crate::transform::{TransformContext, TransformError};
5
6use super::super::common;
7
8pub fn request(
9    input: openai::ImageGenerationRequest,
10    _: &TransformContext,
11) -> Result<gemini::GenerateContentRequest, TransformError> {
12    let model = common::openai_model_string(input.model);
13    let size = common::create_size_to_shape(input.size);
14
15    Ok(crate::protocol::wire!(gemini::GenerateContentRequest {
16        model,
17        contents: vec![common::prompt_content(input.prompt, Vec::new())],
18        tools: Vec::new(),
19        tool_config: None,
20        safety_settings: Vec::new(),
21        system_instruction: None,
22        generation_config: Some(common::generation_config(
23            input.n,
24            size,
25            input.output_format,
26            input.response_format,
27        )),
28        cached_content: None,
29        service_tier: None,
30        store: None,
31        extra: Default::default(),
32    }))
33}
34
35pub fn response(
36    input: openai::ImagesResponse,
37    _: &TransformContext,
38) -> Result<gemini::GenerateContentResponse, TransformError> {
39    Ok(common::openai_images_response_to_gemini(input))
40}
41
42pub fn stream_event(
43    input: openai::ImageGenerationStreamEvent,
44    _: &TransformContext,
45) -> Result<gemini::GenerateContentResponse, TransformError> {
46    common::openai_generation_stream_to_gemini(input).ok_or_else(|| TransformError::InvalidInput {
47        reason: "unknown OpenAI image generation stream event cannot be converted".to_owned(),
48    })
49}