1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::client::Client;
5use crate::errors::GigaChatError;
6use crate::result::Result;
7
8#[derive(Debug, Serialize, Builder)]
9#[builder(setter(into, strip_option))]
10pub struct TokenCountRequest {
11 pub model: String,
12 pub input: Vec<String>,
13}
14
15#[derive(Debug, Deserialize)]
16pub struct TokenCountResponse {
17 pub object: String,
18 pub tokens: usize,
19 pub characters: usize,
20}
21
22impl From<TokenCountRequestBuilderError> for GigaChatError {
23 fn from(error: TokenCountRequestBuilderError) -> Self {
24 GigaChatError::SystemError(error.to_string())
25 }
26}
27
28pub struct Tokens {
29 client: Client,
30}
31
32impl Tokens {
33 pub fn new(client: Client) -> Self {
34 Tokens { client }
35 }
36
37 pub async fn get_token_count(
38 self,
39 request: TokenCountRequest,
40 ) -> Result<Vec<TokenCountResponse>> {
41 let response = self.client.post("/tokens/count", request).await?;
42
43 Ok(response)
44 }
45}