Skip to main content

gproxy_protocol/transform/claude/count_tokens/gemini/
response.rs

1use crate::claude::count_tokens::response::ClaudeCountTokensResponse;
2use crate::claude::count_tokens::types::BetaMessageTokensCount;
3use crate::claude::types::ClaudeResponseHeaders;
4use crate::gemini::count_tokens::response::GeminiCountTokensResponse;
5use crate::transform::claude::utils::beta_error_response_from_status_message;
6use crate::transform::utils::TransformError;
7
8impl TryFrom<GeminiCountTokensResponse> for ClaudeCountTokensResponse {
9    type Error = TransformError;
10
11    fn try_from(value: GeminiCountTokensResponse) -> Result<Self, TransformError> {
12        Ok(match value {
13            GeminiCountTokensResponse::Success {
14                stats_code,
15                headers,
16                body,
17            } => {
18                let input_tokens = body.total_tokens;
19
20                ClaudeCountTokensResponse::Success {
21                    stats_code,
22                    headers: ClaudeResponseHeaders {
23                        extra: headers.extra,
24                    },
25                    body: BetaMessageTokensCount {
26                        context_management: None,
27                        input_tokens,
28                    },
29                }
30            }
31            GeminiCountTokensResponse::Error {
32                stats_code,
33                headers,
34                body,
35            } => ClaudeCountTokensResponse::Error {
36                stats_code,
37                headers: ClaudeResponseHeaders {
38                    extra: headers.extra,
39                },
40                body: beta_error_response_from_status_message(stats_code, body.error.message),
41            },
42        })
43    }
44}