Update llama.cpp
This commit is contained in:
parent
755f9fa455
commit
80184a286c
2 changed files with 216 additions and 16 deletions
|
@ -67,6 +67,12 @@ _lib_base_name = "llama"
|
||||||
_lib = _load_shared_library(_lib_base_name)
|
_lib = _load_shared_library(_lib_base_name)
|
||||||
|
|
||||||
# C types
|
# C types
|
||||||
|
LLAMA_FILE_VERSION = ctypes.c_int(1)
|
||||||
|
LLAMA_FILE_MAGIC = b"ggjt"
|
||||||
|
LLAMA_FILE_MAGIC_UNVERSIONED = b"ggml"
|
||||||
|
LLAMA_SESSION_MAGIC = b"ggsn"
|
||||||
|
LLAMA_SESSION_VERSION = ctypes.c_int(0)
|
||||||
|
|
||||||
llama_context_p = c_void_p
|
llama_context_p = c_void_p
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,13 +83,24 @@ llama_token_p = POINTER(llama_token)
|
||||||
class llama_token_data(Structure):
|
class llama_token_data(Structure):
|
||||||
_fields_ = [
|
_fields_ = [
|
||||||
("id", llama_token), # token id
|
("id", llama_token), # token id
|
||||||
|
("logit", c_float), # log-odds of the token
|
||||||
("p", c_float), # probability of the token
|
("p", c_float), # probability of the token
|
||||||
("plog", c_float), # log probability of the token
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
llama_token_data_p = POINTER(llama_token_data)
|
llama_token_data_p = POINTER(llama_token_data)
|
||||||
|
|
||||||
|
|
||||||
|
class llama_token_data_array(Structure):
|
||||||
|
_fields_ = [
|
||||||
|
("data", llama_token_data_p),
|
||||||
|
("size", c_size_t),
|
||||||
|
("sorted", c_bool),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
llama_token_data_array_p = POINTER(llama_token_data_array)
|
||||||
|
|
||||||
llama_progress_callback = ctypes.CFUNCTYPE(None, c_float, c_void_p)
|
llama_progress_callback = ctypes.CFUNCTYPE(None, c_float, c_void_p)
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,7 +135,7 @@ LLAMA_FTYPE_MOSTLY_Q4_1_SOME_F16 = ctypes.c_int(
|
||||||
4
|
4
|
||||||
) # tok_embeddings.weight and output.weight are F16
|
) # tok_embeddings.weight and output.weight are F16
|
||||||
LLAMA_FTYPE_MOSTLY_Q4_2 = ctypes.c_int(5) # except 1d tensors
|
LLAMA_FTYPE_MOSTLY_Q4_2 = ctypes.c_int(5) # except 1d tensors
|
||||||
LLAMA_FTYPE_MOSTYL_Q4_3 = ctypes.c_int(6) # except 1d tensors
|
# LLAMA_FTYPE_MOSTYL_Q4_3 = ctypes.c_int(6) # except 1d tensors
|
||||||
LLAMA_FTYPE_MOSTYL_Q8_0 = ctypes.c_int(7) # except 1d tensors
|
LLAMA_FTYPE_MOSTYL_Q8_0 = ctypes.c_int(7) # except 1d tensors
|
||||||
LLAMA_FTYPE_MOSTYL_Q5_0 = ctypes.c_int(8) # except 1d tensors
|
LLAMA_FTYPE_MOSTYL_Q5_0 = ctypes.c_int(8) # except 1d tensors
|
||||||
LLAMA_FTYPE_MOSTYL_Q5_1 = ctypes.c_int(9) # except 1d tensors
|
LLAMA_FTYPE_MOSTYL_Q5_1 = ctypes.c_int(9) # except 1d tensors
|
||||||
|
@ -401,31 +418,214 @@ _lib.llama_token_eos.argtypes = []
|
||||||
_lib.llama_token_eos.restype = llama_token
|
_lib.llama_token_eos.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
# TODO: improve the last_n_tokens interface ?
|
def llama_token_nl() -> llama_token:
|
||||||
def llama_sample_top_p_top_k(
|
return _lib.llama_token_nl()
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_token_nl.argtypes = []
|
||||||
|
_lib.llama_token_nl.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# Sampling functions
|
||||||
|
def llama_sample_repetition_penalty(
|
||||||
ctx: llama_context_p,
|
ctx: llama_context_p,
|
||||||
last_n_tokens_data, # type: Array[llama_token]
|
candidates,
|
||||||
last_n_tokens_size: c_int,
|
last_tokens_data,
|
||||||
top_k: c_int,
|
last_tokens_size: c_int,
|
||||||
top_p: c_float,
|
penalty: c_float,
|
||||||
temp: c_float,
|
|
||||||
repeat_penalty: c_float,
|
|
||||||
) -> llama_token:
|
) -> llama_token:
|
||||||
return _lib.llama_sample_top_p_top_k(
|
return _lib.llama_sample_repetition_penalty(
|
||||||
ctx, last_n_tokens_data, last_n_tokens_size, top_k, top_p, temp, repeat_penalty
|
ctx, candidates, last_tokens_data, last_tokens_size, penalty
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
_lib.llama_sample_top_p_top_k.argtypes = [
|
_lib.llama_sample_repetition_penalty.argtypes = [
|
||||||
llama_context_p,
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
llama_token_p,
|
llama_token_p,
|
||||||
c_int,
|
c_int,
|
||||||
c_int,
|
|
||||||
c_float,
|
c_float,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_repetition_penalty.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_frequency_and_presence_penalties(struct llama_context * ctx, llama_token_data_array * candidates, llama_token * last_tokens, size_t last_tokens_size, float alpha_frequency, float alpha_presence);
|
||||||
|
def llama_sample_frequency_and_presence_penalties(
|
||||||
|
ctx: llama_context_p,
|
||||||
|
candidates,
|
||||||
|
last_tokens_data,
|
||||||
|
last_tokens_size: c_int,
|
||||||
|
alpha_frequency: c_float,
|
||||||
|
alpha_presence: c_float,
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_frequency_and_presence_penalties(
|
||||||
|
ctx,
|
||||||
|
candidates,
|
||||||
|
last_tokens_data,
|
||||||
|
last_tokens_size,
|
||||||
|
alpha_frequency,
|
||||||
|
alpha_presence,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_frequency_and_presence_penalties.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
llama_token_p,
|
||||||
|
c_int,
|
||||||
c_float,
|
c_float,
|
||||||
c_float,
|
c_float,
|
||||||
]
|
]
|
||||||
_lib.llama_sample_top_p_top_k.restype = llama_token
|
_lib.llama_sample_frequency_and_presence_penalties.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_softmax(struct llama_context * ctx, llama_token_data_array * candidates);
|
||||||
|
def llama_sample_softmax(ctx: llama_context_p, candidates) -> llama_token:
|
||||||
|
return _lib.llama_sample_softmax(ctx, candidates)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_softmax.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_softmax.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_top_k(struct llama_context * ctx, llama_token_data_array * candidates, int k, size_t min_keep = 1);
|
||||||
|
def llama_sample_top_k(
|
||||||
|
ctx: llama_context_p, candidates, k: c_int, min_keep: c_int
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_top_k(ctx, candidates, k, min_keep)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_top_k.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_int,
|
||||||
|
c_int,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_top_p(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep = 1);
|
||||||
|
def llama_sample_top_p(
|
||||||
|
ctx: llama_context_p, candidates, p: c_float, min_keep: c_int
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_top_p(ctx, candidates, p, min_keep)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_top_p.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
c_int,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_top_p.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_tail_free(struct llama_context * ctx, llama_token_data_array * candidates, float z, size_t min_keep = 1);
|
||||||
|
def llama_sample_tail_free(
|
||||||
|
ctx: llama_context_p, candidates, z: c_float, min_keep: c_int
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_tail_free(ctx, candidates, z, min_keep)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_tail_free.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
c_int,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_tail_free.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_typical(struct llama_context * ctx, llama_token_data_array * candidates, float p, size_t min_keep = 1);
|
||||||
|
def llama_sample_typical(
|
||||||
|
ctx: llama_context_p, candidates, p: c_float, min_keep: c_int
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_typical(ctx, candidates, p, min_keep)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_typical.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
c_int,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_typical.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API void llama_sample_temperature(struct llama_context * ctx, llama_token_data_array * candidates, float temp);
|
||||||
|
def llama_sample_temperature(
|
||||||
|
ctx: llama_context_p, candidates, temp: c_float
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_temperature(ctx, candidates, temp)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_temperature.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_temperature.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int m, float * mu);
|
||||||
|
def llama_sample_token_mirostat(
|
||||||
|
ctx: llama_context_p, candidates, tau: c_float, eta: c_float, m: c_int, mu
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_token_mirostat(ctx, candidates, tau, eta, m, mu)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_token_mirostat.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
c_float,
|
||||||
|
c_int,
|
||||||
|
POINTER(c_float),
|
||||||
|
]
|
||||||
|
_lib.llama_sample_token_mirostat.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API llama_token llama_sample_token_mirostat_v2(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, float * mu);
|
||||||
|
def llama_sample_token_mirostat_v2(
|
||||||
|
ctx: llama_context_p, candidates, tau: c_float, eta: c_float, mu
|
||||||
|
) -> llama_token:
|
||||||
|
return _lib.llama_sample_token_mirostat_v2(ctx, candidates, tau, eta, mu)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_token_mirostat_v2.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
c_float,
|
||||||
|
c_float,
|
||||||
|
POINTER(c_float),
|
||||||
|
]
|
||||||
|
_lib.llama_sample_token_mirostat_v2.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API llama_token llama_sample_token_greedy(struct llama_context * ctx, llama_token_data_array * candidates);
|
||||||
|
def llama_sample_token_greedy(ctx: llama_context_p, candidates) -> llama_token:
|
||||||
|
return _lib.llama_sample_token_greedy(ctx, candidates)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_token_greedy.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_token_greedy.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
|
# LLAMA_API llama_token llama_sample_token(struct llama_context * ctx, llama_token_data_array * candidates);
|
||||||
|
def llama_sample_token(ctx: llama_context_p, candidates) -> llama_token:
|
||||||
|
return _lib.llama_sample_token(ctx, candidates)
|
||||||
|
|
||||||
|
|
||||||
|
_lib.llama_sample_token.argtypes = [
|
||||||
|
llama_context_p,
|
||||||
|
llama_token_data_array_p,
|
||||||
|
]
|
||||||
|
_lib.llama_sample_token.restype = llama_token
|
||||||
|
|
||||||
|
|
||||||
# Performance information
|
# Performance information
|
||||||
|
|
2
vendor/llama.cpp
vendored
2
vendor/llama.cpp
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 7f15c5c477d9933689a9d1c40794483e350c2f19
|
Subproject commit ea3a0ad6b6b5ca4693b94acd4cb32e2803f66fae
|
Loading…
Reference in a new issue