gproxy_transform/transform/embeddings/single/
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::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}