Skip to main content

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

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