feat: Update llama.cpp

This commit is contained in:
Andrei Betlen 2024-02-25 20:52:14 -05:00
parent 19234aa0db
commit cbbcd888af
4 changed files with 55 additions and 145 deletions

View file

@ -291,7 +291,7 @@ class _LlamaContext:
def kv_cache_seq_shift(self, seq_id: int, p0: int, p1: int, shift: int): def kv_cache_seq_shift(self, seq_id: int, p0: int, p1: int, shift: int):
assert self.ctx is not None assert self.ctx is not None
llama_cpp.llama_kv_cache_seq_shift(self.ctx, seq_id, p0, p1, shift) llama_cpp.llama_kv_cache_seq_add(self.ctx, seq_id, p0, p1, shift)
def get_state_size(self) -> int: def get_state_size(self) -> int:
assert self.ctx is not None assert self.ctx is not None

View file

@ -200,6 +200,20 @@ LLAMA_VOCAB_TYPE_BPE = 1
LLAMA_VOCAB_TYPE_WPM = 2 LLAMA_VOCAB_TYPE_WPM = 2
# // note: these values should be synchronized with ggml_rope
# // TODO: maybe move this enum to ggml.h (ggml_rope_type)
# enum llama_rope_type {
# LLAMA_ROPE_TYPE_NONE = -1,
# LLAMA_ROPE_TYPE_NORM = 0,
# LLAMA_ROPE_TYPE_NEOX = 2,
# LLAMA_ROPE_TYPE_GLM = 4,
# };
LLAMA_ROPE_TYPE_NONE = -1
LLAMA_ROPE_TYPE_NORM = 0
LLAMA_ROPE_TYPE_NEOX = 2
LLAMA_ROPE_TYPE_GLM = 4
# enum llama_token_type { # enum llama_token_type {
# LLAMA_TOKEN_TYPE_UNDEFINED = 0, # LLAMA_TOKEN_TYPE_UNDEFINED = 0,
# LLAMA_TOKEN_TYPE_NORMAL = 1, # LLAMA_TOKEN_TYPE_NORMAL = 1,
@ -892,104 +906,84 @@ def llama_time_us() -> int:
# LLAMA_API size_t llama_max_devices(void); # LLAMA_API size_t llama_max_devices(void);
@ctypes_function("llama_max_devices", [], ctypes.c_size_t) @ctypes_function("llama_max_devices", [], ctypes.c_size_t)
def llama_max_devices() -> int: def llama_max_devices() -> int:
... ...
# LLAMA_API bool llama_supports_mmap (void); # LLAMA_API bool llama_supports_mmap (void);
@ctypes_function("llama_supports_mmap", [], ctypes.c_bool) @ctypes_function("llama_supports_mmap", [], ctypes.c_bool)
def llama_supports_mmap() -> bool: def llama_supports_mmap() -> bool:
... ...
# LLAMA_API bool llama_supports_mlock (void); # LLAMA_API bool llama_supports_mlock (void);
@ctypes_function("llama_supports_mlock", [], ctypes.c_bool) @ctypes_function("llama_supports_mlock", [], ctypes.c_bool)
def llama_supports_mlock() -> bool: def llama_supports_mlock() -> bool:
... ...
# LLAMA_API bool llama_supports_gpu_offload(void); # LLAMA_API bool llama_supports_gpu_offload(void);
@ctypes_function("llama_supports_gpu_offload", [], ctypes.c_bool) @ctypes_function("llama_supports_gpu_offload", [], ctypes.c_bool)
def llama_supports_gpu_offload() -> bool: def llama_supports_gpu_offload() -> bool:
... ...
# LLAMA_API DEPRECATED(bool llama_mmap_supported (void), "use llama_supports_mmap() instead"); # LLAMA_API DEPRECATED(bool llama_mmap_supported (void), "use llama_supports_mmap() instead");
@ctypes_function("llama_mmap_supported", [], ctypes.c_bool) @ctypes_function("llama_mmap_supported", [], ctypes.c_bool)
def llama_mmap_supported() -> bool: def llama_mmap_supported() -> bool:
... ...
# LLAMA_API DEPRECATED(bool llama_mlock_supported(void), "use llama_supports_mlock() instead"); # LLAMA_API DEPRECATED(bool llama_mlock_supported(void), "use llama_supports_mlock() instead");
@ctypes_function("llama_mlock_supported", [], ctypes.c_bool) @ctypes_function("llama_mlock_supported", [], ctypes.c_bool)
def llama_mlock_supported() -> bool: def llama_mlock_supported() -> bool:
... ...
# LLAMA_API const struct llama_model * llama_get_model(const struct llama_context * ctx); # LLAMA_API const struct llama_model * llama_get_model(const struct llama_context * ctx);
@ctypes_function("llama_get_model", [llama_context_p_ctypes], llama_model_p_ctypes) @ctypes_function("llama_get_model", [llama_context_p_ctypes], llama_model_p_ctypes)
def llama_get_model(ctx: llama_context_p, /) -> Optional[llama_model_p]: def llama_get_model(ctx: llama_context_p, /) -> Optional[llama_model_p]:
... ...
# LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); # LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx);
@ctypes_function("llama_n_ctx", [llama_context_p_ctypes], ctypes.c_uint32) @ctypes_function("llama_n_ctx", [llama_context_p_ctypes], ctypes.c_uint32)
def llama_n_ctx(ctx: llama_context_p, /) -> int: def llama_n_ctx(ctx: llama_context_p, /) -> int:
... ...
# LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); # LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx);
@ctypes_function("llama_n_batch", [llama_context_p_ctypes], ctypes.c_uint32) @ctypes_function("llama_n_batch", [llama_context_p_ctypes], ctypes.c_uint32)
def llama_n_batch(ctx: llama_context_p, /) -> int: def llama_n_batch(ctx: llama_context_p, /) -> int:
... ...
# LLAMA_API enum llama_vocab_type llama_vocab_type(const struct llama_model * model); # LLAMA_API enum llama_vocab_type llama_vocab_type(const struct llama_model * model);
@ctypes_function("llama_vocab_type", [llama_model_p_ctypes], ctypes.c_int) @ctypes_function("llama_vocab_type", [llama_model_p_ctypes], ctypes.c_int)
def llama_vocab_type(model: llama_model_p, /) -> int: def llama_vocab_type(model: llama_model_p, /) -> int:
... ...
# LLAMA_API enum llama_rope_type llama_rope_type (const struct llama_model * model);
@ctypes_function("llama_rope_type", [llama_model_p_ctypes], ctypes.c_int)
def llama_rope_type(model: llama_model_p, /) -> int:
...
# LLAMA_API int32_t llama_n_vocab (const struct llama_model * model); # LLAMA_API int32_t llama_n_vocab (const struct llama_model * model);
@ctypes_function("llama_n_vocab", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_n_vocab", [llama_model_p_ctypes], ctypes.c_int32)
def llama_n_vocab(model: llama_model_p, /) -> int: def llama_n_vocab(model: llama_model_p, /) -> int:
... ...
# LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model); # LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model);
@ctypes_function("llama_n_ctx_train", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_n_ctx_train", [llama_model_p_ctypes], ctypes.c_int32)
def llama_n_ctx_train(model: llama_model_p, /) -> int: def llama_n_ctx_train(model: llama_model_p, /) -> int:
... ...
# LLAMA_API int32_t llama_n_embd (const struct llama_model * model); # LLAMA_API int32_t llama_n_embd (const struct llama_model * model);
@ctypes_function("llama_n_embd", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_n_embd", [llama_model_p_ctypes], ctypes.c_int32)
def llama_n_embd(model: llama_model_p, /) -> int: def llama_n_embd(model: llama_model_p, /) -> int:
... ...
@ -997,8 +991,6 @@ def llama_n_embd(model: llama_model_p, /) -> int:
# // Get the model's RoPE frequency scaling factor # // Get the model's RoPE frequency scaling factor
# LLAMA_API float llama_rope_freq_scale_train(const struct llama_model * model); # LLAMA_API float llama_rope_freq_scale_train(const struct llama_model * model);
@ctypes_function("llama_rope_freq_scale_train", [llama_model_p_ctypes], ctypes.c_float) @ctypes_function("llama_rope_freq_scale_train", [llama_model_p_ctypes], ctypes.c_float)
def llama_rope_freq_scale_train(model: llama_model_p, /) -> float: def llama_rope_freq_scale_train(model: llama_model_p, /) -> float:
"""Get the model's RoPE frequency scaling factor""" """Get the model's RoPE frequency scaling factor"""
@ -1013,8 +1005,6 @@ def llama_rope_freq_scale_train(model: llama_model_p, /) -> float:
# // Get metadata value as a string by key name # // Get metadata value as a string by key name
# LLAMA_API int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size); # LLAMA_API int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size);
@ctypes_function( @ctypes_function(
"llama_model_meta_val_str", "llama_model_meta_val_str",
[ [
@ -1038,8 +1028,6 @@ def llama_model_meta_val_str(
# // Get the number of metadata key/value pairs # // Get the number of metadata key/value pairs
# LLAMA_API int32_t llama_model_meta_count(const struct llama_model * model); # LLAMA_API int32_t llama_model_meta_count(const struct llama_model * model);
@ctypes_function("llama_model_meta_count", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_model_meta_count", [llama_model_p_ctypes], ctypes.c_int32)
def llama_model_meta_count(model: llama_model_p, /) -> int: def llama_model_meta_count(model: llama_model_p, /) -> int:
"""Get the number of metadata key/value pairs""" """Get the number of metadata key/value pairs"""
@ -1048,8 +1036,6 @@ def llama_model_meta_count(model: llama_model_p, /) -> int:
# // Get metadata key name by index # // Get metadata key name by index
# LLAMA_API int32_t llama_model_meta_key_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size); # LLAMA_API int32_t llama_model_meta_key_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size);
@ctypes_function( @ctypes_function(
"llama_model_meta_key_by_index", "llama_model_meta_key_by_index",
[ [
@ -1073,8 +1059,6 @@ def llama_model_meta_key_by_index(
# // Get metadata value as a string by index # // Get metadata value as a string by index
# LLAMA_API int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size); # LLAMA_API int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size);
@ctypes_function( @ctypes_function(
"llama_model_meta_val_str_by_index", "llama_model_meta_val_str_by_index",
[ [
@ -1098,8 +1082,6 @@ def llama_model_meta_val_str_by_index(
# // Get a string describing the model type # // Get a string describing the model type
# LLAMA_API int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size); # LLAMA_API int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size);
@ctypes_function( @ctypes_function(
"llama_model_desc", "llama_model_desc",
[llama_model_p_ctypes, ctypes.c_char_p, ctypes.c_size_t], [llama_model_p_ctypes, ctypes.c_char_p, ctypes.c_size_t],
@ -1117,8 +1099,6 @@ def llama_model_desc(
# // Returns the total size of all the tensors in the model in bytes # // Returns the total size of all the tensors in the model in bytes
# LLAMA_API uint64_t llama_model_size(const struct llama_model * model); # LLAMA_API uint64_t llama_model_size(const struct llama_model * model);
@ctypes_function("llama_model_size", [llama_model_p_ctypes], ctypes.c_uint64) @ctypes_function("llama_model_size", [llama_model_p_ctypes], ctypes.c_uint64)
def llama_model_size(model: llama_model_p, /) -> int: def llama_model_size(model: llama_model_p, /) -> int:
"""Returns the total size of all the tensors in the model in bytes""" """Returns the total size of all the tensors in the model in bytes"""
@ -1127,8 +1107,6 @@ def llama_model_size(model: llama_model_p, /) -> int:
# // Returns the total number of parameters in the model # // Returns the total number of parameters in the model
# LLAMA_API uint64_t llama_model_n_params(const struct llama_model * model); # LLAMA_API uint64_t llama_model_n_params(const struct llama_model * model);
@ctypes_function("llama_model_n_params", [llama_model_p_ctypes], ctypes.c_uint64) @ctypes_function("llama_model_n_params", [llama_model_p_ctypes], ctypes.c_uint64)
def llama_model_n_params(model: llama_model_p, /) -> int: def llama_model_n_params(model: llama_model_p, /) -> int:
"""Returns the total number of parameters in the model""" """Returns the total number of parameters in the model"""
@ -1137,8 +1115,6 @@ def llama_model_n_params(model: llama_model_p, /) -> int:
# // Get a llama model tensor # // Get a llama model tensor
# LLAMA_API struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name); # LLAMA_API struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name);
@ctypes_function( @ctypes_function(
"llama_get_model_tensor", [llama_model_p_ctypes, ctypes.c_char_p], ctypes.c_void_p "llama_get_model_tensor", [llama_model_p_ctypes, ctypes.c_char_p], ctypes.c_void_p
) )
@ -1154,8 +1130,6 @@ def llama_get_model_tensor(
# const char * fname_inp, # const char * fname_inp,
# const char * fname_out, # const char * fname_out,
# const llama_model_quantize_params * params); # const llama_model_quantize_params * params);
@ctypes_function( @ctypes_function(
"llama_model_quantize", "llama_model_quantize",
[ [
@ -1188,8 +1162,6 @@ def llama_model_quantize(
# const char * path_base_model, # const char * path_base_model,
# int32_t n_threads), # int32_t n_threads),
# "use llama_model_apply_lora_from_file instead"); # "use llama_model_apply_lora_from_file instead");
@ctypes_function( @ctypes_function(
"llama_apply_lora_from_file", "llama_apply_lora_from_file",
[ [
@ -1224,8 +1196,6 @@ def llama_apply_lora_from_file(
# float scale, # float scale,
# const char * path_base_model, # const char * path_base_model,
# int32_t n_threads); # int32_t n_threads);
@ctypes_function( @ctypes_function(
"llama_model_apply_lora_from_file", "llama_model_apply_lora_from_file",
[ [
@ -1313,8 +1283,6 @@ llama_kv_cache_view_p = ctypes.POINTER(llama_kv_cache_view)
# // Create an empty KV cache view. (use only for debugging purposes) # // Create an empty KV cache view. (use only for debugging purposes)
# LLAMA_API struct llama_kv_cache_view llama_kv_cache_view_init(const struct llama_context * ctx, int32_t n_max_seq); # LLAMA_API struct llama_kv_cache_view llama_kv_cache_view_init(const struct llama_context * ctx, int32_t n_max_seq);
@ctypes_function( @ctypes_function(
"llama_kv_cache_view_init", "llama_kv_cache_view_init",
[llama_context_p_ctypes, ctypes.c_int32], [llama_context_p_ctypes, ctypes.c_int32],
@ -1329,8 +1297,6 @@ def llama_kv_cache_view_init(
# // Free a KV cache view. (use only for debugging purposes) # // Free a KV cache view. (use only for debugging purposes)
# LLAMA_API void llama_kv_cache_view_free(struct llama_kv_cache_view * view); # LLAMA_API void llama_kv_cache_view_free(struct llama_kv_cache_view * view);
@ctypes_function("llama_kv_cache_view_free", [llama_kv_cache_view_p], None) @ctypes_function("llama_kv_cache_view_free", [llama_kv_cache_view_p], None)
def llama_kv_cache_view_free(view: "ctypes.pointer[llama_kv_cache_view]", /): # type: ignore def llama_kv_cache_view_free(view: "ctypes.pointer[llama_kv_cache_view]", /): # type: ignore
"""Free a KV cache view. (use only for debugging purposes)""" """Free a KV cache view. (use only for debugging purposes)"""
@ -1339,8 +1305,6 @@ def llama_kv_cache_view_free(view: "ctypes.pointer[llama_kv_cache_view]", /): #
# // Update the KV cache view structure with the current state of the KV cache. (use only for debugging purposes) # // Update the KV cache view structure with the current state of the KV cache. (use only for debugging purposes)
# LLAMA_API void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_kv_cache_view * view); # LLAMA_API void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_kv_cache_view * view);
@ctypes_function( @ctypes_function(
"llama_kv_cache_view_update", [llama_context_p_ctypes, llama_kv_cache_view_p], None "llama_kv_cache_view_update", [llama_context_p_ctypes, llama_kv_cache_view_p], None
) )
@ -1352,8 +1316,6 @@ def llama_kv_cache_view_update(ctx: llama_context_p, view: CtypesPointerOrRef[ll
# // Returns the number of tokens in the KV cache (slow, use only for debug) # // Returns the number of tokens in the KV cache (slow, use only for debug)
# // If a KV cell has multiple sequences assigned to it, it will be counted multiple times # // If a KV cell has multiple sequences assigned to it, it will be counted multiple times
# LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx); # LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx);
@ctypes_function( @ctypes_function(
"llama_get_kv_cache_token_count", [llama_context_p_ctypes], ctypes.c_int32 "llama_get_kv_cache_token_count", [llama_context_p_ctypes], ctypes.c_int32
) )
@ -1366,8 +1328,6 @@ def llama_get_kv_cache_token_count(ctx: llama_context_p, /) -> int:
# // Returns the number of used KV cells (i.e. have at least one sequence assigned to them) # // Returns the number of used KV cells (i.e. have at least one sequence assigned to them)
# LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx); # LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx);
@ctypes_function( @ctypes_function(
"llama_get_kv_cache_used_cells", [llama_context_p_ctypes], ctypes.c_int32 "llama_get_kv_cache_used_cells", [llama_context_p_ctypes], ctypes.c_int32
) )
@ -1379,8 +1339,6 @@ def llama_get_kv_cache_used_cells(ctx: llama_context_p, /) -> int:
# // Clear the KV cache # // Clear the KV cache
# LLAMA_API void llama_kv_cache_clear( # LLAMA_API void llama_kv_cache_clear(
# struct llama_context * ctx); # struct llama_context * ctx);
@ctypes_function("llama_kv_cache_clear", [llama_context_p_ctypes], None) @ctypes_function("llama_kv_cache_clear", [llama_context_p_ctypes], None)
def llama_kv_cache_clear(ctx: llama_context_p, /): def llama_kv_cache_clear(ctx: llama_context_p, /):
"""Clear the KV cache""" """Clear the KV cache"""
@ -1396,8 +1354,6 @@ def llama_kv_cache_clear(ctx: llama_context_p, /):
# llama_seq_id seq_id, # llama_seq_id seq_id,
# llama_pos p0, # llama_pos p0,
# llama_pos p1); # llama_pos p1);
@ctypes_function( @ctypes_function(
"llama_kv_cache_seq_rm", "llama_kv_cache_seq_rm",
[ [
@ -1432,8 +1388,6 @@ def llama_kv_cache_seq_rm(
# llama_seq_id seq_id_dst, # llama_seq_id seq_id_dst,
# llama_pos p0, # llama_pos p0,
# llama_pos p1); # llama_pos p1);
@ctypes_function( @ctypes_function(
"llama_kv_cache_seq_cp", "llama_kv_cache_seq_cp",
[ [
@ -1464,8 +1418,6 @@ def llama_kv_cache_seq_cp(
# LLAMA_API void llama_kv_cache_seq_keep( # LLAMA_API void llama_kv_cache_seq_keep(
# struct llama_context * ctx, # struct llama_context * ctx,
# llama_seq_id seq_id); # llama_seq_id seq_id);
@ctypes_function( @ctypes_function(
"llama_kv_cache_seq_keep", [llama_context_p_ctypes, llama_seq_id], None "llama_kv_cache_seq_keep", [llama_context_p_ctypes, llama_seq_id], None
) )
@ -1475,19 +1427,19 @@ def llama_kv_cache_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, in
# // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) # // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1)
# // If the KV cache is RoPEd, the KV data is updated accordingly # // If the KV cache is RoPEd, the KV data is updated accordingly:
# // - lazily on next llama_decode()
# // - explicitly with llama_kv_cache_update()
# // p0 < 0 : [0, p1] # // p0 < 0 : [0, p1]
# // p1 < 0 : [p0, inf) # // p1 < 0 : [p0, inf)
# LLAMA_API void llama_kv_cache_seq_shift( # LLAMA_API void llama_kv_cache_seq_add(
# struct llama_context * ctx, # struct llama_context * ctx,
# llama_seq_id seq_id, # llama_seq_id seq_id,
# llama_pos p0, # llama_pos p0,
# llama_pos p1, # llama_pos p1,
# llama_pos delta); # llama_pos delta);
@ctypes_function( @ctypes_function(
"llama_kv_cache_seq_shift", "llama_kv_cache_seq_add",
[ [
llama_context_p_ctypes, llama_context_p_ctypes,
llama_seq_id, llama_seq_id,
@ -1497,7 +1449,7 @@ def llama_kv_cache_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, in
], ],
None, None,
) )
def llama_kv_cache_seq_shift( def llama_kv_cache_seq_add(
ctx: llama_context_p, ctx: llama_context_p,
seq_id: Union[llama_seq_id, int], seq_id: Union[llama_seq_id, int],
p0: Union[llama_pos, int], p0: Union[llama_pos, int],
@ -1506,7 +1458,9 @@ def llama_kv_cache_seq_shift(
/, /,
): ):
"""Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) """Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1)
If the KV cache is RoPEd, the KV data is updated accordingly If the KV cache is RoPEd, the KV data is updated accordingly:
- lazily on next llama_decode()
- explicitly with llama_kv_cache_update()
p0 < 0 : [0, p1] p0 < 0 : [0, p1]
p1 < 0 : [p0, inf)""" p1 < 0 : [p0, inf)"""
... ...
@ -1522,8 +1476,6 @@ def llama_kv_cache_seq_shift(
# llama_pos p0, # llama_pos p0,
# llama_pos p1, # llama_pos p1,
# int d); # int d);
@ctypes_function( @ctypes_function(
"llama_kv_cache_seq_div", "llama_kv_cache_seq_div",
[ [
@ -1550,6 +1502,28 @@ def llama_kv_cache_seq_div(
... ...
# // Defragment the KV cache
# // This will be applied:
# // - lazily on next llama_decode()
# // - explicitly with llama_kv_cache_update()
# LLAMA_API void llama_kv_cache_defrag(struct llama_context * ctx);
@ctypes_function("llama_kv_cache_defrag", [llama_context_p_ctypes], None)
def llama_kv_cache_defrag(ctx: llama_context_p, /):
"""Defragment the KV cache
This will be applied:
- lazily on next llama_decode()
- explicitly with llama_kv_cache_update()"""
...
# // Apply the KV cache updates (such as K-shifts, defragmentation, etc.)
# LLAMA_API void llama_kv_cache_update(struct llama_context * ctx);
@ctypes_function("llama_kv_cache_update", [llama_context_p_ctypes], None)
def llama_kv_cache_update(ctx: llama_context_p, /):
"""Apply the KV cache updates (such as K-shifts, defragmentation, etc.)"""
...
# // # //
# // State / sessions # // State / sessions
# // # //
@ -1558,8 +1532,6 @@ def llama_kv_cache_seq_div(
# Returns the maximum size in bytes of the state (rng, logits, embedding # Returns the maximum size in bytes of the state (rng, logits, embedding
# and kv_cache) - will often be smaller after compacting tokens # and kv_cache) - will often be smaller after compacting tokens
# LLAMA_API size_t llama_get_state_size(const struct llama_context * ctx); # LLAMA_API size_t llama_get_state_size(const struct llama_context * ctx);
@ctypes_function("llama_get_state_size", [llama_context_p_ctypes], ctypes.c_size_t) @ctypes_function("llama_get_state_size", [llama_context_p_ctypes], ctypes.c_size_t)
def llama_get_state_size(ctx: llama_context_p, /) -> int: def llama_get_state_size(ctx: llama_context_p, /) -> int:
"""Returns the maximum size in bytes of the state (rng, logits, embedding """Returns the maximum size in bytes of the state (rng, logits, embedding
@ -1573,8 +1545,6 @@ def llama_get_state_size(ctx: llama_context_p, /) -> int:
# LLAMA_API size_t llama_copy_state_data( # LLAMA_API size_t llama_copy_state_data(
# struct llama_context * ctx, # struct llama_context * ctx,
# uint8_t * dst); # uint8_t * dst);
@ctypes_function( @ctypes_function(
"llama_copy_state_data", "llama_copy_state_data",
[ [
@ -1597,8 +1567,6 @@ def llama_copy_state_data(
# LLAMA_API size_t llama_set_state_data( # LLAMA_API size_t llama_set_state_data(
# struct llama_context * ctx, # struct llama_context * ctx,
# uint8_t * src); # uint8_t * src);
@ctypes_function( @ctypes_function(
"llama_set_state_data", "llama_set_state_data",
[llama_context_p_ctypes, ctypes.POINTER(ctypes.c_uint8)], [llama_context_p_ctypes, ctypes.POINTER(ctypes.c_uint8)],
@ -1618,8 +1586,6 @@ def llama_set_state_data(
# llama_token * tokens_out, # llama_token * tokens_out,
# size_t n_token_capacity, # size_t n_token_capacity,
# size_t * n_token_count_out); # size_t * n_token_count_out);
@ctypes_function( @ctypes_function(
"llama_load_session_file", "llama_load_session_file",
[ [
@ -1647,8 +1613,6 @@ def llama_load_session_file(
# const char * path_session, # const char * path_session,
# const llama_token * tokens, # const llama_token * tokens,
# size_t n_token_count); # size_t n_token_count);
@ctypes_function( @ctypes_function(
"llama_save_session_file", "llama_save_session_file",
[ [
@ -1685,8 +1649,6 @@ def llama_save_session_file(
# int32_t n_tokens, # int32_t n_tokens,
# int32_t n_past), # int32_t n_past),
# "use llama_decode() instead"); # "use llama_decode() instead");
@ctypes_function( @ctypes_function(
"llama_eval", "llama_eval",
[ [
@ -1720,8 +1682,6 @@ def llama_eval(
# int32_t n_tokens, # int32_t n_tokens,
# int32_t n_past), # int32_t n_past),
# "use llama_decode() instead"); # "use llama_decode() instead");
@ctypes_function( @ctypes_function(
"llama_eval_embd", "llama_eval_embd",
[ [
@ -1753,8 +1713,6 @@ def llama_eval_embd(
# int32_t n_tokens, # int32_t n_tokens,
# llama_pos pos_0, # llama_pos pos_0,
# llama_seq_id seq_id); # llama_seq_id seq_id);
@ctypes_function( @ctypes_function(
"llama_batch_get_one", "llama_batch_get_one",
[ [
@ -1790,8 +1748,6 @@ def llama_batch_get_one(
# int32_t n_tokens, # int32_t n_tokens,
# int32_t embd, # int32_t embd,
# int32_t n_seq_max); # int32_t n_seq_max);
@ctypes_function( @ctypes_function(
"llama_batch_init", [ctypes.c_int32, ctypes.c_int32, ctypes.c_int32], llama_batch "llama_batch_init", [ctypes.c_int32, ctypes.c_int32, ctypes.c_int32], llama_batch
) )
@ -1813,8 +1769,6 @@ def llama_batch_init(
# // Frees a batch of tokens allocated with llama_batch_init() # // Frees a batch of tokens allocated with llama_batch_init()
# LLAMA_API void llama_batch_free(struct llama_batch batch); # LLAMA_API void llama_batch_free(struct llama_batch batch);
@ctypes_function("llama_batch_free", [llama_batch], None) @ctypes_function("llama_batch_free", [llama_batch], None)
def llama_batch_free(batch: llama_batch, /): def llama_batch_free(batch: llama_batch, /):
"""Frees a batch of tokens allocated with llama_batch_init()""" """Frees a batch of tokens allocated with llama_batch_init()"""
@ -1828,8 +1782,6 @@ def llama_batch_free(batch: llama_batch, /):
# LLAMA_API int32_t llama_decode( # LLAMA_API int32_t llama_decode(
# struct llama_context * ctx, # struct llama_context * ctx,
# struct llama_batch batch); # struct llama_batch batch);
@ctypes_function("llama_decode", [llama_context_p_ctypes, llama_batch], ctypes.c_int32) @ctypes_function("llama_decode", [llama_context_p_ctypes, llama_batch], ctypes.c_int32)
def llama_decode(ctx: llama_context_p, batch: llama_batch, /) -> int: def llama_decode(ctx: llama_context_p, batch: llama_batch, /) -> int:
"""Positive return values does not mean a fatal error, but rather a warning. """Positive return values does not mean a fatal error, but rather a warning.
@ -1843,8 +1795,6 @@ def llama_decode(ctx: llama_context_p, batch: llama_batch, /) -> int:
# // n_threads is the number of threads used for generation (single token) # // n_threads is the number of threads used for generation (single token)
# // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens) # // n_threads_batch is the number of threads used for prompt and batch processing (multiple tokens)
# LLAMA_API void llama_set_n_threads(struct llama_context * ctx, uint32_t n_threads, uint32_t n_threads_batch); # LLAMA_API void llama_set_n_threads(struct llama_context * ctx, uint32_t n_threads, uint32_t n_threads_batch);
@ctypes_function( @ctypes_function(
"llama_set_n_threads", "llama_set_n_threads",
[ [
@ -1873,8 +1823,6 @@ def llama_set_n_threads(
# // Rows: n_tokens provided with llama_batch # // Rows: n_tokens provided with llama_batch
# // Cols: n_vocab # // Cols: n_vocab
# LLAMA_API float * llama_get_logits(struct llama_context * ctx); # LLAMA_API float * llama_get_logits(struct llama_context * ctx);
@ctypes_function( @ctypes_function(
"llama_get_logits", [llama_context_p_ctypes], ctypes.POINTER(ctypes.c_float) "llama_get_logits", [llama_context_p_ctypes], ctypes.POINTER(ctypes.c_float)
) )
@ -1890,8 +1838,6 @@ def llama_get_logits(ctx: llama_context_p, /) -> CtypesArray[ctypes.c_float]:
# // Logits for the ith token. Equivalent to: # // Logits for the ith token. Equivalent to:
# // llama_get_logits(ctx) + i*n_vocab # // llama_get_logits(ctx) + i*n_vocab
# LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i); # LLAMA_API float * llama_get_logits_ith(struct llama_context * ctx, int32_t i);
@ctypes_function( @ctypes_function(
"llama_get_logits_ith", "llama_get_logits_ith",
[llama_context_p_ctypes, ctypes.c_int32], [llama_context_p_ctypes, ctypes.c_int32],
@ -1908,8 +1854,6 @@ def llama_get_logits_ith(
# Get the embeddings for the input # Get the embeddings for the input
# shape: [n_embd] (1-dimensional) # shape: [n_embd] (1-dimensional)
# LLAMA_API float * llama_get_embeddings(struct llama_context * ctx); # LLAMA_API float * llama_get_embeddings(struct llama_context * ctx);
@ctypes_function( @ctypes_function(
"llama_get_embeddings", [llama_context_p_ctypes], ctypes.POINTER(ctypes.c_float) "llama_get_embeddings", [llama_context_p_ctypes], ctypes.POINTER(ctypes.c_float)
) )
@ -1922,8 +1866,6 @@ def llama_get_embeddings(ctx: llama_context_p, /) -> CtypesArray[ctypes.c_float]
# // Get the embeddings for the ith sequence # // Get the embeddings for the ith sequence
# // llama_get_embeddings(ctx) + i*n_embd # // llama_get_embeddings(ctx) + i*n_embd
# LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i); # LLAMA_API float * llama_get_embeddings_ith(struct llama_context * ctx, int32_t i);
@ctypes_function( @ctypes_function(
"llama_get_embeddings_ith", "llama_get_embeddings_ith",
[llama_context_p_ctypes, ctypes.c_int32], [llama_context_p_ctypes, ctypes.c_int32],
@ -1943,8 +1885,6 @@ def llama_get_embeddings_ith(
# LLAMA_API const char * llama_token_get_text(const struct llama_model * model, llama_token token); # LLAMA_API const char * llama_token_get_text(const struct llama_model * model, llama_token token);
@ctypes_function( @ctypes_function(
"llama_token_get_text", [llama_model_p_ctypes, llama_token], ctypes.c_char_p "llama_token_get_text", [llama_model_p_ctypes, llama_token], ctypes.c_char_p
) )
@ -1955,8 +1895,6 @@ def llama_token_get_text(
# LLAMA_API float llama_token_get_score(const struct llama_model * model, llama_token token); # LLAMA_API float llama_token_get_score(const struct llama_model * model, llama_token token);
@ctypes_function( @ctypes_function(
"llama_token_get_score", [llama_model_p_ctypes, llama_token], ctypes.c_float "llama_token_get_score", [llama_model_p_ctypes, llama_token], ctypes.c_float
) )
@ -1967,8 +1905,6 @@ def llama_token_get_score(
# LLAMA_API enum llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token); # LLAMA_API enum llama_token_type llama_token_get_type(const struct llama_model * model, llama_token token);
@ctypes_function( @ctypes_function(
"llama_token_get_type", [llama_model_p_ctypes, llama_token], ctypes.c_int "llama_token_get_type", [llama_model_p_ctypes, llama_token], ctypes.c_int
) )
@ -1982,8 +1918,6 @@ def llama_token_get_type(
# LLAMA_API llama_token llama_token_bos(const struct llama_model * model); // beginning-of-sentence # LLAMA_API llama_token llama_token_bos(const struct llama_model * model); // beginning-of-sentence
@ctypes_function("llama_token_bos", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_bos", [llama_model_p_ctypes], llama_token)
def llama_token_bos(model: llama_model_p, /) -> int: def llama_token_bos(model: llama_model_p, /) -> int:
"""beginning-of-sentence""" """beginning-of-sentence"""
@ -1991,8 +1925,6 @@ def llama_token_bos(model: llama_model_p, /) -> int:
# LLAMA_API llama_token llama_token_eos(const struct llama_model * model); // end-of-sentence # LLAMA_API llama_token llama_token_eos(const struct llama_model * model); // end-of-sentence
@ctypes_function("llama_token_eos", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_eos", [llama_model_p_ctypes], llama_token)
def llama_token_eos(model: llama_model_p, /) -> int: def llama_token_eos(model: llama_model_p, /) -> int:
"""end-of-sentence""" """end-of-sentence"""
@ -2000,8 +1932,6 @@ def llama_token_eos(model: llama_model_p, /) -> int:
# LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line # LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line
@ctypes_function("llama_token_nl", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_nl", [llama_model_p_ctypes], llama_token)
def llama_token_nl(model: llama_model_p, /) -> int: def llama_token_nl(model: llama_model_p, /) -> int:
"""next-line""" """next-line"""
@ -2010,8 +1940,6 @@ def llama_token_nl(model: llama_model_p, /) -> int:
# // Returns -1 if unknown, 1 for true or 0 for false. # // Returns -1 if unknown, 1 for true or 0 for false.
# LLAMA_API int32_t llama_add_bos_token(const struct llama_model * model); # LLAMA_API int32_t llama_add_bos_token(const struct llama_model * model);
@ctypes_function("llama_add_bos_token", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_add_bos_token", [llama_model_p_ctypes], ctypes.c_int32)
def llama_add_bos_token(model: llama_model_p, /) -> int: def llama_add_bos_token(model: llama_model_p, /) -> int:
"""Returns -1 if unknown, 1 for true or 0 for false.""" """Returns -1 if unknown, 1 for true or 0 for false."""
@ -2020,8 +1948,6 @@ def llama_add_bos_token(model: llama_model_p, /) -> int:
# // Returns -1 if unknown, 1 for true or 0 for false. # // Returns -1 if unknown, 1 for true or 0 for false.
# LLAMA_API int32_t llama_add_eos_token(const struct llama_model * model); # LLAMA_API int32_t llama_add_eos_token(const struct llama_model * model);
@ctypes_function("llama_add_eos_token", [llama_model_p_ctypes], ctypes.c_int32) @ctypes_function("llama_add_eos_token", [llama_model_p_ctypes], ctypes.c_int32)
def llama_add_eos_token(model: llama_model_p, /) -> int: def llama_add_eos_token(model: llama_model_p, /) -> int:
"""Returns -1 if unknown, 1 for true or 0 for false.""" """Returns -1 if unknown, 1 for true or 0 for false."""
@ -2030,8 +1956,6 @@ def llama_add_eos_token(model: llama_model_p, /) -> int:
# // codellama infill tokens # // codellama infill tokens
# LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix # LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix
@ctypes_function("llama_token_prefix", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_prefix", [llama_model_p_ctypes], llama_token)
def llama_token_prefix(model: llama_model_p) -> int: def llama_token_prefix(model: llama_model_p) -> int:
"""codellama infill tokens""" """codellama infill tokens"""
@ -2039,24 +1963,18 @@ def llama_token_prefix(model: llama_model_p) -> int:
# LLAMA_API llama_token llama_token_middle(const struct llama_model * model); // Beginning of infill middle # LLAMA_API llama_token llama_token_middle(const struct llama_model * model); // Beginning of infill middle
@ctypes_function("llama_token_middle", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_middle", [llama_model_p_ctypes], llama_token)
def llama_token_middle(model: llama_model_p, /) -> int: def llama_token_middle(model: llama_model_p, /) -> int:
... ...
# LLAMA_API llama_token llama_token_suffix(const struct llama_model * model); // Beginning of infill suffix # LLAMA_API llama_token llama_token_suffix(const struct llama_model * model); // Beginning of infill suffix
@ctypes_function("llama_token_suffix", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_suffix", [llama_model_p_ctypes], llama_token)
def llama_token_suffix(model: llama_model_p, /) -> int: def llama_token_suffix(model: llama_model_p, /) -> int:
... ...
# LLAMA_API llama_token llama_token_eot (const struct llama_model * model); // End of infill middle # LLAMA_API llama_token llama_token_eot (const struct llama_model * model); // End of infill middle
@ctypes_function("llama_token_eot", [llama_model_p_ctypes], llama_token) @ctypes_function("llama_token_eot", [llama_model_p_ctypes], llama_token)
def llama_token_eot(model: llama_model_p, /) -> int: def llama_token_eot(model: llama_model_p, /) -> int:
... ...
@ -2081,8 +1999,6 @@ def llama_token_eot(model: llama_model_p, /) -> int:
# int32_t n_max_tokens, # int32_t n_max_tokens,
# bool add_bos, # bool add_bos,
# bool special); # bool special);
@ctypes_function( @ctypes_function(
"llama_tokenize", "llama_tokenize",
[ [
@ -2119,8 +2035,6 @@ def llama_tokenize(
# llama_token token, # llama_token token,
# char * buf, # char * buf,
# int32_t length); # int32_t length);
@ctypes_function( @ctypes_function(
"llama_token_to_piece", "llama_token_to_piece",
[ [
@ -2164,8 +2078,6 @@ def llama_token_to_piece(
# bool add_ass, # bool add_ass,
# char * buf, # char * buf,
# int32_t length); # int32_t length);
@ctypes_function( @ctypes_function(
"llama_chat_apply_template", "llama_chat_apply_template",
[ [
@ -2195,8 +2107,6 @@ def llama_chat_apply_template(
# const llama_grammar_element ** rules, # const llama_grammar_element ** rules,
# size_t n_rules, # size_t n_rules,
# size_t start_rule_index); # size_t start_rule_index);
@ctypes_function( @ctypes_function(
"llama_grammar_init", "llama_grammar_init",
[ [

View file

@ -132,7 +132,7 @@ def mock_llama(monkeypatch):
assert ctx == llama._ctx.ctx, "context does not match mock_llama" assert ctx == llama._ctx.ctx, "context does not match mock_llama"
return return
def mock_kv_cache_seq_shift( def mock_kv_cache_seq_add(
ctx: llama_cpp.llama_context_p, ctx: llama_cpp.llama_context_p,
seq_id: llama_cpp.llama_seq_id, seq_id: llama_cpp.llama_seq_id,
pos0: llama_cpp.llama_pos, pos0: llama_cpp.llama_pos,
@ -146,7 +146,7 @@ def mock_llama(monkeypatch):
monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_rm", mock_kv_cache_seq_rm) monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_rm", mock_kv_cache_seq_rm)
monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_cp", mock_kv_cache_seq_cp) monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_cp", mock_kv_cache_seq_cp)
monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_keep", mock_kv_cache_seq_keep) monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_keep", mock_kv_cache_seq_keep)
monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_shift", mock_kv_cache_seq_shift) monkeypatch.setattr("llama_cpp.llama_cpp.llama_kv_cache_seq_add", mock_kv_cache_seq_add)
return setup_mock return setup_mock

2
vendor/llama.cpp vendored

@ -1 +1 @@
Subproject commit f7625019c51ca437a5840576d92362cfa710e4a2 Subproject commit c39373398803c669056304090050fe3f44b41bf9