llama_cpp_bindings/model/params/
kv_overrides.rs1use 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(¶ms);
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}