llmsdk_provider/language_model/
usage.rs1use serde::{Deserialize, Serialize};
8
9use crate::json::JsonObject;
10
11#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
13pub struct Usage {
14 #[serde(rename = "inputTokens")]
16 pub input_tokens: InputTokenUsage,
17 #[serde(rename = "outputTokens")]
19 pub output_tokens: OutputTokenUsage,
20 #[serde(default, skip_serializing_if = "Option::is_none")]
22 pub raw: Option<JsonObject>,
23}
24
25#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
27pub struct InputTokenUsage {
28 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub total: Option<u64>,
31 #[serde(default, rename = "noCache", skip_serializing_if = "Option::is_none")]
33 pub no_cache: Option<u64>,
34 #[serde(default, rename = "cacheRead", skip_serializing_if = "Option::is_none")]
36 pub cache_read: Option<u64>,
37 #[serde(
39 default,
40 rename = "cacheWrite",
41 skip_serializing_if = "Option::is_none"
42 )]
43 pub cache_write: Option<u64>,
44}
45
46#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, PartialEq, Eq)]
48pub struct OutputTokenUsage {
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub total: Option<u64>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub text: Option<u64>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub reasoning: Option<u64>,
58}