Skip to main content

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

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