gproxy_protocol/wire/gemini/
count_tokens.rs1use super::{
2 content::{Content, Modality},
3 generation::EmbeddedGenerateContentRequest,
4};
5use crate::Rest;
6use crate::{WireRequest, WireResponse};
7use serde::{Deserialize, Serialize};
8
9#[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>;