batch_mode_batch_schema/
batch_input_data.rs

1// ---------------- [ File: batch-mode-batch-schema/src/batch_input_data.rs ]
2crate::ix!();
3
4#[derive(Serialize,Deserialize,Builder,Getters,Clone,Debug)]
5#[builder(setter(into))]
6#[getset(get="pub")]
7pub struct BatchInputData {
8    requests: Vec<LanguageModelBatchAPIRequest>,
9}
10
11impl BatchInputData {
12
13    pub fn new(requests: Vec<LanguageModelBatchAPIRequest>) -> Self {
14        Self { requests }
15    }
16
17    pub fn request_ids(&self) -> Vec<CustomRequestId> {
18        self.requests.iter().map(|r| r.custom_id().clone()).collect()
19    }
20}
21
22#[cfg(test)]
23mod batch_input_data_tests {
24    use super::*;
25
26    #[traced_test]
27    fn should_create_new_batch_input_data() {
28        info!("Testing creation of BatchInputData with 'new' function.");
29
30        let requests = vec![
31            LanguageModelBatchAPIRequest::mock("id-A"),
32            LanguageModelBatchAPIRequest::mock("id-B"),
33        ];
34        let input_data = BatchInputData::new(requests.clone());
35
36        pretty_assert_eq!(input_data.requests().len(), 2, "Expected two requests in BatchInputData.");
37        debug!("Successfully created BatchInputData with {} requests.", input_data.requests().len());
38    }
39
40    #[traced_test]
41    fn should_return_request_ids_correctly() {
42        info!("Testing retrieval of request IDs from BatchInputData.");
43
44        let requests = vec![
45            LanguageModelBatchAPIRequest::mock("custom-1"),
46            LanguageModelBatchAPIRequest::mock("custom-2"),
47        ];
48        let input_data = BatchInputData::new(requests);
49
50        let ids = input_data.request_ids();
51        trace!("Extracted request IDs: {:?}", ids);
52
53        pretty_assert_eq!(ids.len(), 2, "Should have exactly 2 request IDs.");
54        assert!(ids.contains(&CustomRequestId::new("custom-1")));
55        assert!(ids.contains(&CustomRequestId::new("custom-2")));
56    }
57
58    #[traced_test]
59    fn should_handle_empty_requests() {
60        info!("Testing BatchInputData with an empty requests vector.");
61
62        let input_data = BatchInputData::new(vec![]);
63        pretty_assert_eq!(input_data.requests().len(), 0, "Expected no requests in empty BatchInputData.");
64
65        let ids = input_data.request_ids();
66        assert!(ids.is_empty(), "No request IDs should be returned for empty data.");
67        warn!("Confirmed empty request IDs for empty BatchInputData.");
68    }
69
70    #[traced_test]
71    fn should_consistently_reference_internal_requests_slice() {
72        info!("Testing that requests() returns the same slice reference each time.");
73
74        let requests = vec![LanguageModelBatchAPIRequest::mock("stable-1")];
75        let input_data = BatchInputData::new(requests);
76
77        let first_ref = input_data.requests() as *const _;
78        let second_ref = input_data.requests() as *const _;
79        pretty_assert_eq!(first_ref, second_ref, "Should return the same slice reference on subsequent calls.");
80        trace!("Both calls returned the same reference pointer: {:?}", first_ref);
81    }
82}