batch_mode_batch_schema/
batch_usage.rs

1// ---------------- [ File: batch-mode-batch-schema/src/batch_usage.rs ]
2crate::ix!();
3
4#[derive(Builder,Getters,Clone,Debug,Serialize,Deserialize)]
5#[builder(setter(into))]
6#[getset(get="pub")]
7pub struct BatchUsage {
8    prompt_tokens:     u32,
9    completion_tokens: u32,
10    total_tokens:      u32,
11    
12    #[builder(default)] prompt_tokens_details:     Option<BatchTokenDetails>,
13    #[builder(default)] completion_tokens_details: Option<BatchTokenDetails>,
14}
15
16impl Default for BatchUsage {
17    fn default() -> Self {
18        Self {
19            prompt_tokens:             1024,
20            completion_tokens:         1024,
21            total_tokens:              2048,
22            prompt_tokens_details:     None,
23            completion_tokens_details: None,
24        }
25    }
26}
27
28impl BatchUsage {
29
30    pub fn mock() -> Self {
31        BatchUsage {
32            prompt_tokens:             0,
33            completion_tokens:         0,
34            total_tokens:              0,
35            prompt_tokens_details:     None,
36            completion_tokens_details: None,
37        }
38    }
39}
40
41#[cfg(test)]
42mod batch_usage_tests {
43    use super::*;
44    use serde_json::json;
45
46    #[test]
47    fn test_usage_deserialization() {
48        let json_data = json!({
49            "prompt_tokens": 100,
50            "completion_tokens": 50,
51            "total_tokens": 150
52        });
53
54        let usage: BatchUsage = serde_json::from_value(json_data).unwrap();
55        pretty_assert_eq!(*usage.prompt_tokens(), 100);
56        pretty_assert_eq!(*usage.completion_tokens(), 50);
57        pretty_assert_eq!(*usage.total_tokens(), 150);
58    }
59
60    #[test]
61    fn test_usage_missing_fields() {
62        let json_data = json!({
63            "prompt_tokens": 100,
64            "total_tokens": 150
65            // 'completion_tokens' is missing
66        });
67
68        let result: Result<BatchUsage, _> = serde_json::from_value(json_data);
69        assert!(result.is_err(), "Deserialization should fail if fields are missing");
70    }
71}