gemini_tokenizer/
types.rs1use serde::{Deserialize, Serialize};
13use std::collections::HashMap;
14
15#[derive(Debug, Clone, Serialize, Deserialize, Default)]
17pub struct Content {
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub role: Option<String>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub parts: Option<Vec<Part>>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize, Default)]
32pub struct Part {
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub text: Option<String>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub function_call: Option<FunctionCall>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub function_response: Option<FunctionResponse>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, Default)]
48pub struct FunctionCall {
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub name: Option<String>,
52
53 #[serde(skip_serializing_if = "Option::is_none")]
55 pub args: Option<HashMap<String, serde_json::Value>>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, Default)]
60pub struct FunctionResponse {
61 #[serde(skip_serializing_if = "Option::is_none")]
63 pub name: Option<String>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub response: Option<HashMap<String, serde_json::Value>>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, Default)]
72pub struct Tool {
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub function_declarations: Option<Vec<FunctionDeclaration>>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, Default)]
80pub struct FunctionDeclaration {
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub name: Option<String>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub description: Option<String>,
88
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub parameters: Option<Schema>,
92
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub response: Option<Schema>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, Default)]
102pub struct Schema {
103 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
105 pub schema_type: Option<String>,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub format: Option<String>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub description: Option<String>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub title: Option<String>,
118
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub default: Option<serde_json::Value>,
122
123 #[serde(rename = "enum", skip_serializing_if = "Option::is_none")]
125 pub enum_values: Option<Vec<String>>,
126
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub required: Option<Vec<String>>,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub property_ordering: Option<Vec<String>>,
134
135 #[serde(skip_serializing_if = "Option::is_none")]
137 pub items: Option<Box<Schema>>,
138
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub properties: Option<HashMap<String, Schema>>,
142
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub example: Option<serde_json::Value>,
146}
147
148pub enum Contents<'a> {
159 Text(&'a str),
161 Structured(&'a [Content]),
163}
164
165impl<'a> From<&'a str> for Contents<'a> {
166 fn from(s: &'a str) -> Self {
167 Contents::Text(s)
168 }
169}
170
171impl<'a> From<&'a [Content]> for Contents<'a> {
172 fn from(c: &'a [Content]) -> Self {
173 Contents::Structured(c)
174 }
175}
176
177impl<'a> From<&'a Vec<Content>> for Contents<'a> {
178 fn from(c: &'a Vec<Content>) -> Self {
179 Contents::Structured(c.as_slice())
180 }
181}
182
183#[derive(Debug, Clone)]
185pub struct CountTokensResult {
186 pub total_tokens: usize,
188}
189
190impl std::fmt::Display for CountTokensResult {
191 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
192 write!(f, "total_tokens={}", self.total_tokens)
193 }
194}
195
196#[derive(Debug, Clone)]
199pub struct TokensInfo {
200 pub token_ids: Vec<u32>,
202 pub tokens: Vec<Vec<u8>>,
205 pub role: Option<String>,
207}
208
209#[derive(Debug, Clone)]
211pub struct ComputeTokensResult {
212 pub tokens_info: Vec<TokensInfo>,
214}
215
216#[derive(Debug, Clone, Default)]
221pub struct CountTokensConfig {
222 pub tools: Option<Vec<Tool>>,
224 pub system_instruction: Option<Content>,
226 pub response_schema: Option<Schema>,
228}
229
230