Skip to main content

gproxy_protocol/transform/openai/model_list/gemini/
response.rs

1use crate::gemini::model_list::response::GeminiModelListResponse;
2use crate::openai::model_list::response::OpenAiModelListResponse;
3use crate::openai::types::{OpenAiListObject, OpenAiModelList, OpenAiResponseHeaders};
4use crate::transform::openai::model_list::gemini::utils::{
5    openai_error_response_from_gemini, openai_model_from_gemini_model,
6};
7use crate::transform::utils::TransformError;
8
9impl TryFrom<GeminiModelListResponse> for OpenAiModelListResponse {
10    type Error = TransformError;
11
12    fn try_from(value: GeminiModelListResponse) -> Result<Self, TransformError> {
13        Ok(match value {
14            GeminiModelListResponse::Success {
15                stats_code,
16                headers,
17                body,
18            } => OpenAiModelListResponse::Success {
19                stats_code,
20                headers: OpenAiResponseHeaders {
21                    extra: headers.extra,
22                },
23                body: OpenAiModelList {
24                    data: body
25                        .models
26                        .into_iter()
27                        .map(openai_model_from_gemini_model)
28                        .collect::<Vec<_>>(),
29                    object: OpenAiListObject::List,
30                },
31            },
32            GeminiModelListResponse::Error {
33                stats_code,
34                headers,
35                body,
36            } => OpenAiModelListResponse::Error {
37                stats_code,
38                headers: OpenAiResponseHeaders {
39                    extra: headers.extra,
40                },
41                body: openai_error_response_from_gemini(stats_code, body),
42            },
43        })
44    }
45}