@@ -194,16 +194,16 @@ def __init__(
194
194
self .model_params .use_mmap = use_mmap if lora_path is None else False
195
195
self .model_params .use_mlock = use_mlock
196
196
197
+ # kv_overrides is the original python dict
197
198
self .kv_overrides = kv_overrides
198
199
if kv_overrides is not None :
199
- n_overrides = len (kv_overrides )
200
- self ._kv_overrides_array = llama_cpp .llama_model_kv_override * (n_overrides + 1 )
201
- self ._kv_overrides_array_keys = []
202
-
203
- for k , v in kv_overrides .items ():
204
- key_buf = ctypes .create_string_buffer (k .encode ("utf-8" ))
205
- self ._kv_overrides_array_keys .append (key_buf )
206
- self ._kv_overrides_array [i ].key = key_buf
200
+
201
+ # _kv_overrides_array is a ctypes.Array of llama_model_kv_override Structs
202
+ kvo_array_len = len (kv_overrides ) + 1 # for sentinel element
203
+ self ._kv_overrides_array = (llama_cpp .llama_model_kv_override * kvo_array_len )()
204
+
205
+ for i , (k , v ) in enumerate (kv_overrides .items ()):
206
+ self ._kv_overrides_array [i ].key = k .encode ('utf-8' );
207
207
if isinstance (v , int ):
208
208
self ._kv_overrides_array [i ].tag = llama_cpp .LLAMA_KV_OVERRIDE_INT
209
209
self ._kv_overrides_array [i ].value .int_value = v
@@ -216,10 +216,7 @@ def __init__(
216
216
else :
217
217
raise ValueError (f"Unknown value type for { k } : { v } " )
218
218
219
- self ._kv_overrides_array_sentinel_key = b'\0 '
220
-
221
- # null array sentinel
222
- self ._kv_overrides_array [n_overrides ].key = self ._kv_overrides_array_sentinel_key
219
+ self ._kv_overrides_array [- 1 ].key = b'\0 ' # ensure sentinel element is zeroed
223
220
self .model_params .kv_overrides = self ._kv_overrides_array
224
221
225
222
self .n_batch = min (n_ctx , n_batch ) # ???
0 commit comments