Skip to main content

gproxy_transform/transform/embeddings/single/
gemini_to_openai.rs

1//! Gemini -> OpenAI single embedding transforms.
2
3use crate::protocol::{gemini, openai};
4use crate::transform::{TransformContext, TransformError};
5
6use super::super::common;
7
8pub fn request(
9    input: gemini::EmbedContentRequest,
10    _: &TransformContext,
11) -> Result<openai::EmbeddingRequest, TransformError> {
12    let converted = common::gemini_request_parts(input);
13    Ok(crate::protocol::wire!(openai::EmbeddingRequest {
14        input: openai::EmbeddingInput::Text(converted.text),
15        model: converted
16            .model
17            .unwrap_or_else(|| common::DEFAULT_OPENAI_EMBEDDING_MODEL.to_owned())
18            .into(),
19        dimensions: converted.dimensions,
20        encoding_format: Some(openai::EmbeddingEncodingFormat::Float),
21        user: None,
22        extra: Default::default(),
23    }))
24}
25
26pub fn response(
27    input: gemini::EmbedContentResponse,
28    ctx: &TransformContext,
29) -> Result<openai::EmbeddingResponse, TransformError> {
30    super::super::batch::gemini_to_openai::response(
31        crate::protocol::wire!(gemini::BatchEmbedContentsResponse {
32            embeddings: input.embedding.into_iter().collect(),
33            usage_metadata: input.usage_metadata,
34            extra: Default::default(),
35        }),
36        ctx,
37    )
38}