use super::{
content::{Content, Modality},
generation::EmbeddedGenerateContentRequest,
};
use crate::Rest;
use crate::{WireRequest, WireResponse};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct CountTokensRequestBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub contents: Option<Vec<Content>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "generate_content_request")]
pub generate_content_request: Option<EmbeddedGenerateContentRequest>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ModalityTokenCount {
#[serde(skip_serializing_if = "Option::is_none")]
pub modality: Option<Modality>,
#[serde(alias = "token_count", skip_serializing_if = "Option::is_none")]
pub token_count: Option<i64>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "camelCase")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct CountTokensResponseBody {
#[serde(alias = "total_tokens", skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "cached_content_token_count")]
pub cached_content_token_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "prompt_tokens_details")]
pub prompt_tokens_details: Option<Vec<ModalityTokenCount>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(alias = "cache_tokens_details")]
pub cache_tokens_details: Option<Vec<ModalityTokenCount>>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
pub type CountTokensRequest = WireRequest<CountTokensRequestBody>;
pub type CountTokensResponse = WireResponse<CountTokensResponseBody>;