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