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)]
14#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
15pub struct CountTokensRequestBody {
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub contents: Option<Vec<Content>>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    #[serde(alias = "generate_content_request")]
20    pub generate_content_request: Option<EmbeddedGenerateContentRequest>,
21    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
22    pub rest: Rest,
23}
24
25#[derive(
26    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
27)]
28#[serde(rename_all = "camelCase")]
29#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
30#[derive(gproxy_protocol_macros::DeclaredFields)]
31#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
32pub struct ModalityTokenCount {
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub modality: Option<Modality>,
35    #[serde(alias = "token_count", skip_serializing_if = "Option::is_none")]
36    pub token_count: Option<i64>,
37    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
38    pub rest: Rest,
39}
40
41#[derive(
42    Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
43)]
44#[serde(rename_all = "camelCase")]
45#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
46#[derive(gproxy_protocol_macros::DeclaredFields)]
47#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
48pub struct CountTokensResponseBody {
49    #[serde(alias = "total_tokens", skip_serializing_if = "Option::is_none")]
50    pub total_tokens: Option<i64>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    #[serde(alias = "cached_content_token_count")]
53    pub cached_content_token_count: Option<i64>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    #[serde(alias = "prompt_tokens_details")]
56    pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    #[serde(alias = "cache_tokens_details")]
59    pub cache_tokens_details: Option<Vec<ModalityTokenCount>>,
60    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
61    pub rest: Rest,
62}
63
64pub type CountTokensRequest = WireRequest<CountTokensRequestBody>;
65pub type CountTokensResponse = WireResponse<CountTokensResponseBody>;