gproxy_transform/transform/count_tokens/
gemini_to_openai.rs1use crate::protocol::{gemini, openai};
4use crate::transform::{TransformContext, TransformError};
5
6use super::common;
7
8pub fn request(
9 input: gemini::CountTokensRequest,
10 _: &TransformContext,
11) -> Result<openai::ResponseInputTokensRequest, TransformError> {
12 let request = common::split_gemini_count_token_request(input);
13
14 Ok(openai::ResponseInputTokensRequest {
15 conversation: None,
16 input: common::text_to_openai_input(common::gemini_contents_to_text(request.contents)),
17 instructions: request.system_instruction.map(common::gemini_content_text),
18 model: Some(common::gemini_model_string(request.model).into()),
19 parallel_tool_calls: None,
20 personality: None,
21 previous_response_id: None,
22 prompt_cache_options: None,
23 reasoning: common::gemini_generation_to_openai_reasoning(
24 request.generation_config.as_ref(),
25 ),
26 service_tier: common::gemini_service_tier_to_openai(request.service_tier),
27 text: common::gemini_generation_to_openai_text(request.generation_config.as_ref()),
28 tool_choice: common::gemini_tool_config_to_openai(request.tool_config),
29 tools: common::gemini_tools_to_openai(request.tools),
30 truncation: None,
31 extra: Default::default(),
32 })
33}
34
35pub fn response(
36 input: gemini::CountTokensResponse,
37 _: &TransformContext,
38) -> openai::ResponseInputTokensResponse {
39 openai::ResponseInputTokensResponse {
40 input_tokens: input
41 .total_tokens
42 .map(common::i32_to_u32)
43 .unwrap_or_default(),
44 object: openai::ResponseInputTokensObjectType::ResponseInputTokens,
45 extra: Default::default(),
46 }
47}