Skip to main content

gproxy_protocol/wire/gemini/
count_tokens.rs

1use super::{
2    content::{Content, Modality},
3    generation::EmbeddedGenerateContentRequest,
4};
5use crate::Rest;
6use crate::{WireRequest, WireResponse};
7use serde::{Deserialize, Serialize};
8
9/// Body for `POST .../{model=models/*}:countTokens`; `model` is the path resource.
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
11#[serde(rename_all = "camelCase")]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14pub struct CountTokensRequestBody {
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub contents: Option<Vec<Content>>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    #[serde(alias = "generate_content_request")]
19    pub generate_content_request: Option<EmbeddedGenerateContentRequest>,
20    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
21    pub rest: Rest,
22}
23
24#[derive(
25    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
26)]
27#[serde(rename_all = "camelCase")]
28#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
29#[derive(gproxy_protocol_macros::DeclaredFields)]
30pub struct ModalityTokenCount {
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub modality: Option<Modality>,
33    #[serde(alias = "token_count", skip_serializing_if = "Option::is_none")]
34    pub token_count: Option<i64>,
35    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
36    pub rest: Rest,
37}
38
39#[derive(
40    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
41)]
42#[serde(rename_all = "camelCase")]
43#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
44#[derive(gproxy_protocol_macros::DeclaredFields)]
45pub struct CountTokensResponseBody {
46    #[serde(alias = "total_tokens", skip_serializing_if = "Option::is_none")]
47    pub total_tokens: Option<i64>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    #[serde(alias = "cached_content_token_count")]
50    pub cached_content_token_count: Option<i64>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    #[serde(alias = "prompt_tokens_details")]
53    pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    #[serde(alias = "cache_tokens_details")]
56    pub cache_tokens_details: Option<Vec<ModalityTokenCount>>,
57    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
58    pub rest: Rest,
59}
60
61pub type CountTokensRequest = WireRequest<CountTokensRequestBody>;
62pub type CountTokensResponse = WireResponse<CountTokensResponseBody>;