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)]
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>;