gproxy_protocol/transform/gemini/count_tokens/openai/
response.rs1use crate::gemini::count_tokens::response::{GeminiCountTokensResponse, ResponseBody};
2use crate::gemini::count_tokens::types::{GeminiModality, GeminiModalityTokenCount};
3use crate::gemini::types::GeminiResponseHeaders;
4use crate::openai::count_tokens::response::OpenAiCountTokensResponse;
5use crate::transform::gemini::count_tokens::openai::utils::gemini_error_response_from_openai;
6use crate::transform::utils::TransformError;
7
8impl TryFrom<OpenAiCountTokensResponse> for GeminiCountTokensResponse {
9 type Error = TransformError;
10
11 fn try_from(value: OpenAiCountTokensResponse) -> Result<Self, TransformError> {
12 Ok(match value {
13 OpenAiCountTokensResponse::Success {
14 stats_code,
15 headers,
16 body,
17 } => GeminiCountTokensResponse::Success {
18 stats_code,
19 headers: GeminiResponseHeaders {
20 extra: headers.extra,
21 },
22 body: ResponseBody {
23 total_tokens: body.input_tokens,
24 cached_content_token_count: None,
25 prompt_tokens_details: Some(vec![GeminiModalityTokenCount {
26 modality: GeminiModality::Text,
27 token_count: body.input_tokens,
28 }]),
29 cache_tokens_details: None,
30 },
31 },
32 OpenAiCountTokensResponse::Error {
33 stats_code,
34 headers,
35 body,
36 } => GeminiCountTokensResponse::Error {
37 stats_code,
38 headers: GeminiResponseHeaders {
39 extra: headers.extra,
40 },
41 body: gemini_error_response_from_openai(stats_code, body),
42 },
43 })
44 }
45}