Update llama.cpp

This commit is contained in:
Andrei Betlen 2023-05-01 10:44:28 -04:00
parent 755f9fa455
commit 80184a286c
2 changed files with 216 additions and 16 deletions

View file

@ -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

@ -1 +1 @@
Subproject commit 7f15c5c477d9933689a9d1c40794483e350c2f19 Subproject commit ea3a0ad6b6b5ca4693b94acd4cb32e2803f66fae