Skip to main content

llama_cpp_bindings/error/
encode_error.rs

1use std::num::NonZeroI32;
2use std::os::raw::c_int;
3
4#[derive(Debug, Eq, PartialEq, thiserror::Error)]
5pub enum EncodeError {
6    #[error("model has no encoder")]
7    ModelHasNoEncoder,
8    #[error("no KV cache slot was available")]
9    NoKvCacheSlot,
10    #[error("encode batch is invalid (empty or initialization failure)")]
11    BatchInvalid,
12    #[error("encode ran out of memory")]
13    EncodeOutOfMemory,
14    #[error("backend compute failed during encode")]
15    ComputeFailed,
16    #[error("encode returned an unknown status code: {code}")]
17    UnknownStatus { code: c_int },
18    #[error("not enough memory")]
19    NotEnoughMemory,
20    #[error("{message}")]
21    Reported { message: String },
22}
23
24impl From<NonZeroI32> for EncodeError {
25    fn from(value: NonZeroI32) -> Self {
26        match value.get() {
27            1 => Self::NoKvCacheSlot,
28            -1 => Self::BatchInvalid,
29            error_code => Self::UnknownStatus { code: error_code },
30        }
31    }
32}
33
34#[cfg(test)]
35mod tests {
36    use std::num::NonZeroI32;
37
38    use super::EncodeError;
39
40    #[test]
41    fn no_kv_cache_slot_maps_from_code_one() {
42        let error = EncodeError::from(NonZeroI32::new(1).expect("1 is non-zero"));
43
44        assert_eq!(error, EncodeError::NoKvCacheSlot);
45    }
46
47    #[test]
48    fn batch_invalid_maps_from_code_negative_one() {
49        let error = EncodeError::from(NonZeroI32::new(-1).expect("-1 is non-zero"));
50
51        assert_eq!(error, EncodeError::BatchInvalid);
52    }
53
54    #[test]
55    fn unrecognized_code_falls_through_to_unknown_status() {
56        let error = EncodeError::from(NonZeroI32::new(99).expect("99 is non-zero"));
57
58        assert_eq!(error, EncodeError::UnknownStatus { code: 99 });
59    }
60}