batch_mode_batch_schema/
batch_usage.rs1crate::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 });
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}