Skip to main content

llama_cpp_bindings/model/params/
kv_overrides.rs

1use std::fmt::Debug;
2
3use crate::model::params::LlamaModelParams;
4use crate::model::params::kv_override_value_iterator::KvOverrideValueIterator;
5
6#[derive(Debug)]
7pub struct KvOverrides<'model_params> {
8    model_params: &'model_params LlamaModelParams,
9}
10
11impl KvOverrides<'_> {
12    #[must_use]
13    pub const fn new(model_params: &LlamaModelParams) -> KvOverrides<'_> {
14        KvOverrides { model_params }
15    }
16}
17
18impl<'model_params> IntoIterator for KvOverrides<'model_params> {
19    type Item = <KvOverrideValueIterator<'model_params> as Iterator>::Item;
20    type IntoIter = KvOverrideValueIterator<'model_params>;
21
22    fn into_iter(self) -> Self::IntoIter {
23        KvOverrideValueIterator::new(self.model_params)
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use std::ffi::CString;
30    use std::pin::pin;
31
32    use crate::model::params::LlamaModelParams;
33    use crate::model::params::param_override_value::ParamOverrideValue;
34
35    #[test]
36    fn kv_overrides_empty_by_default() {
37        let params = LlamaModelParams::default();
38        let overrides = params.kv_overrides();
39        let count = overrides.into_iter().count();
40
41        assert_eq!(count, 0);
42    }
43
44    #[test]
45    fn kv_overrides_iterates_single_entry() {
46        let mut params = pin!(LlamaModelParams::default());
47        let key = CString::new("test_key").unwrap();
48
49        params
50            .as_mut()
51            .append_kv_override(&key, ParamOverrideValue::Int(42))
52            .unwrap();
53
54        let entries: Vec<_> = params.kv_overrides().into_iter().collect();
55
56        assert_eq!(entries.len(), 1);
57        let (entry_key, entry_value) = &entries[0];
58        assert_eq!(entry_key.to_bytes(), b"test_key");
59        assert_eq!(*entry_value, ParamOverrideValue::Int(42));
60    }
61
62    #[test]
63    fn kv_overrides_new_creates_view() {
64        let params = LlamaModelParams::default();
65        let overrides = super::KvOverrides::new(&params);
66        let count = overrides.into_iter().count();
67
68        assert_eq!(count, 0);
69    }
70
71    #[test]
72    fn kv_overrides_skips_entry_with_unknown_tag() {
73        let mut params = pin!(LlamaModelParams::default());
74        let key = CString::new("valid_key").unwrap();
75
76        params
77            .as_mut()
78            .append_kv_override(&key, ParamOverrideValue::Int(99))
79            .unwrap();
80
81        params.kv_overrides[0].tag = 9999;
82
83        assert_eq!(params.kv_overrides().into_iter().count(), 0);
84    }
85}