async_gigachat/
token.rs

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}