1use serde::{Deserialize, Serialize};
4
5#[allow(unused_imports)]
6use crate::prelude::*;
7
8#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
10pub struct Usage {
11 pub prompt_tokens: i32,
13
14 pub completion_tokens: i32,
16
17 pub total_tokens: i32,
19
20 pub prompt_tokens_details: PromptUsageDetail,
22
23 pub completion_tokens_details: CompletionUsageDetail,
25
26 pub num_sources_used: i32,
28}
29
30#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
32pub struct PromptUsageDetail {
33 pub text_tokens: i32,
35
36 pub audio_tokens: i32,
38
39 pub image_tokens: i32,
41
42 pub cached_tokens: i32,
44}
45
46#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
48pub struct CompletionUsageDetail {
49 pub reasoning_tokens: i32,
51
52 pub audio_tokens: i32,
54
55 pub accepted_prediction_tokens: i32,
57
58 pub rejected_prediction_tokens: i32,
60}
61
62#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
64pub struct ModelUsage {
65 pub input_tokens: i32,
67
68 pub input_tokens_details: InputTokensDetails,
70
71 pub output_tokens: i32,
73
74 pub output_tokens_details: OutputTokensDetails,
76
77 pub total_tokens: i32,
79
80 pub num_sources_used: i32,
82
83 pub num_server_side_tools_used: i32,
85
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub cost_in_nano_usd: Option<i64>,
89
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub server_side_tool_usage_details: Option<ServerSideToolUsageDetails>,
93}
94
95#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
97pub struct InputTokensDetails {
98 pub cached_tokens: i32,
100}
101
102#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
104pub struct OutputTokensDetails {
105 pub reasoning_tokens: i32,
107}
108
109#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
111pub struct ServerSideToolUsageDetails {
112 pub web_search_calls: i32,
114
115 pub x_search_calls: i32,
117
118 pub code_interpreter_calls: i32,
120
121 pub file_search_calls: i32,
123
124 pub mcp_calls: i32,
126
127 pub document_search_calls: i32,
129}
130
131#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
133pub struct EmbeddingUsage {
134 pub prompt_tokens: i32,
136
137 pub total_tokens: i32,
139}
140
141#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
143pub struct MessageUsage {
144 pub input_tokens: i32,
146
147 pub cache_creation_input_tokens: i32,
149
150 pub cache_read_input_tokens: i32,
152
153 pub output_tokens: i32,
155}