mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-28 12:24:35 +00:00
llama : minor API updates
This commit is contained in:
parent
2d6c2c757c
commit
035d511457
64
llama.cpp
64
llama.cpp
@ -3002,7 +3002,7 @@ void llama_grammar_free(struct llama_grammar * grammar) {
|
|||||||
//
|
//
|
||||||
|
|
||||||
void llama_sample_softmax(struct llama_context * ctx, llama_token_data_array * candidates) {
|
void llama_sample_softmax(struct llama_context * ctx, llama_token_data_array * candidates) {
|
||||||
assert(candidates->size > 0);
|
GGML_ASSERT(candidates->size > 0);
|
||||||
|
|
||||||
const int64_t t_start_sample_us = ggml_time_us();
|
const int64_t t_start_sample_us = ggml_time_us();
|
||||||
|
|
||||||
@ -3282,7 +3282,7 @@ void llama_sample_frequency_and_presence_penalties(struct llama_context * ctx, l
|
|||||||
}
|
}
|
||||||
|
|
||||||
void llama_sample_grammar(struct llama_context * ctx, llama_token_data_array * candidates, const struct llama_grammar * grammar) {
|
void llama_sample_grammar(struct llama_context * ctx, llama_token_data_array * candidates, const struct llama_grammar * grammar) {
|
||||||
assert(ctx);
|
GGML_ASSERT(ctx);
|
||||||
const int64_t t_start_sample_us = ggml_time_us();
|
const int64_t t_start_sample_us = ggml_time_us();
|
||||||
|
|
||||||
bool allow_eos = false;
|
bool allow_eos = false;
|
||||||
@ -3342,10 +3342,12 @@ void llama_sample_classifier_free_guidance(
|
|||||||
float scale) {
|
float scale) {
|
||||||
int64_t t_start_sample_us = ggml_time_us();
|
int64_t t_start_sample_us = ggml_time_us();
|
||||||
|
|
||||||
assert(ctx);
|
GGML_ASSERT(ctx);
|
||||||
|
|
||||||
auto n_vocab = llama_n_vocab(ctx);
|
auto n_vocab = llama_n_vocab(ctx);
|
||||||
assert(n_vocab == (int)candidates->size);
|
|
||||||
assert(!candidates->sorted);
|
GGML_ASSERT(n_vocab == (int)candidates->size);
|
||||||
|
GGML_ASSERT(!candidates->sorted);
|
||||||
|
|
||||||
std::vector<float> logits_base;
|
std::vector<float> logits_base;
|
||||||
logits_base.reserve(candidates->size);
|
logits_base.reserve(candidates->size);
|
||||||
@ -3369,7 +3371,8 @@ void llama_sample_classifier_free_guidance(
|
|||||||
}
|
}
|
||||||
|
|
||||||
llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int m, float * mu) {
|
llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int m, float * mu) {
|
||||||
assert(ctx);
|
GGML_ASSERT(ctx);
|
||||||
|
|
||||||
auto N = float(llama_n_vocab(ctx));
|
auto N = float(llama_n_vocab(ctx));
|
||||||
int64_t t_start_sample_us;
|
int64_t t_start_sample_us;
|
||||||
t_start_sample_us = ggml_time_us();
|
t_start_sample_us = ggml_time_us();
|
||||||
@ -3475,7 +3478,8 @@ llama_token llama_sample_token_greedy(struct llama_context * ctx, llama_token_da
|
|||||||
}
|
}
|
||||||
|
|
||||||
llama_token llama_sample_token(struct llama_context * ctx, llama_token_data_array * candidates) {
|
llama_token llama_sample_token(struct llama_context * ctx, llama_token_data_array * candidates) {
|
||||||
assert(ctx);
|
GGML_ASSERT(ctx);
|
||||||
|
|
||||||
const int64_t t_start_sample_us = ggml_time_us();
|
const int64_t t_start_sample_us = ggml_time_us();
|
||||||
llama_sample_softmax(nullptr, candidates);
|
llama_sample_softmax(nullptr, candidates);
|
||||||
|
|
||||||
@ -4463,18 +4467,22 @@ int llama_n_embd(const struct llama_context * ctx) {
|
|||||||
return ctx->model.hparams.n_embd;
|
return ctx->model.hparams.n_embd;
|
||||||
}
|
}
|
||||||
|
|
||||||
int llama_n_vocab_from_model(const struct llama_model * model) {
|
int llama_model_n_vocab(const struct llama_model * model) {
|
||||||
return model->vocab.id_to_token.size();
|
return model->vocab.id_to_token.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int llama_n_ctx_from_model(const struct llama_model * model) {
|
int llama_model_n_ctx(const struct llama_model * model) {
|
||||||
return model->hparams.n_ctx;
|
return model->hparams.n_ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
int llama_n_embd_from_model(const struct llama_model * model) {
|
int llama_model_n_embd(const struct llama_model * model) {
|
||||||
return model->hparams.n_embd;
|
return model->hparams.n_embd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int llama_model_type(const struct llama_model * model, char * buf, size_t buf_size) {
|
||||||
|
return snprintf(buf, buf_size, "LLaMA %s %s", llama_model_type_name(model->type), llama_model_ftype_name(model->ftype));
|
||||||
|
}
|
||||||
|
|
||||||
int llama_model_quantize(
|
int llama_model_quantize(
|
||||||
const char * fname_inp,
|
const char * fname_inp,
|
||||||
const char * fname_out,
|
const char * fname_out,
|
||||||
@ -4965,14 +4973,10 @@ int llama_get_vocab(
|
|||||||
const char * * strings,
|
const char * * strings,
|
||||||
float * scores,
|
float * scores,
|
||||||
int capacity) {
|
int capacity) {
|
||||||
return llama_get_vocab_from_model(&ctx->model, strings, scores, capacity);
|
return llama_model_get_vocab(&ctx->model, strings, scores, capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
int llama_model_type(const struct llama_model * model, char * buf, size_t buf_size) {
|
int llama_model_get_vocab(
|
||||||
return snprintf(buf, buf_size, "LLaMA %s %s", llama_model_type_name(model->type), llama_model_ftype_name(model->ftype));
|
|
||||||
}
|
|
||||||
|
|
||||||
int llama_get_vocab_from_model(
|
|
||||||
const struct llama_model * model,
|
const struct llama_model * model,
|
||||||
const char * * strings,
|
const char * * strings,
|
||||||
float * scores,
|
float * scores,
|
||||||
@ -4985,6 +4989,18 @@ int llama_get_vocab_from_model(
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
llama_token llama_token_bos(void) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
llama_token llama_token_eos(void) {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
llama_token llama_token_nl(void) {
|
||||||
|
return 13;
|
||||||
|
}
|
||||||
|
|
||||||
int llama_tokenize(
|
int llama_tokenize(
|
||||||
struct llama_context * ctx,
|
struct llama_context * ctx,
|
||||||
const char * text,
|
const char * text,
|
||||||
@ -5040,7 +5056,7 @@ int llama_token_to_str(const struct llama_context * ctx, llama_token token, char
|
|||||||
}
|
}
|
||||||
|
|
||||||
int llama_token_to_str_bpe(const struct llama_context * ctx, llama_token token, char * buf, int length) {
|
int llama_token_to_str_bpe(const struct llama_context * ctx, llama_token token, char * buf, int length) {
|
||||||
if (0 <= token && token < llama_n_vocab_from_model(&ctx->model)) {
|
if (0 <= token && token < llama_model_n_vocab(&ctx->model)) {
|
||||||
std::string result = ctx->model.vocab.id_to_token[token].tok;
|
std::string result = ctx->model.vocab.id_to_token[token].tok;
|
||||||
if (length < (int) result.length()) {
|
if (length < (int) result.length()) {
|
||||||
return -result.length();
|
return -result.length();
|
||||||
@ -5053,7 +5069,7 @@ int llama_token_to_str_bpe(const struct llama_context * ctx, llama_token token,
|
|||||||
|
|
||||||
// does not write null-terminator to str
|
// does not write null-terminator to str
|
||||||
int llama_token_to_str_with_model(const struct llama_model * model, llama_token token, char * buf, int length) {
|
int llama_token_to_str_with_model(const struct llama_model * model, llama_token token, char * buf, int length) {
|
||||||
if (0 <= token && token < llama_n_vocab_from_model(model)) {
|
if (0 <= token && token < llama_model_n_vocab(model)) {
|
||||||
if (llama_is_normal_token(model->vocab, token)) {
|
if (llama_is_normal_token(model->vocab, token)) {
|
||||||
std::string result = model->vocab.id_to_token[token].tok;
|
std::string result = model->vocab.id_to_token[token].tok;
|
||||||
if (llama_vocab_type(model->vocab) == "spm") {
|
if (llama_vocab_type(model->vocab) == "spm") {
|
||||||
@ -5085,18 +5101,6 @@ int llama_token_to_str_with_model(const struct llama_model * model, llama_token
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
llama_token llama_token_bos(void) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
llama_token llama_token_eos(void) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
llama_token llama_token_nl(void) {
|
|
||||||
return 13;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct llama_timings llama_get_timings(struct llama_context * ctx) {
|
struct llama_timings llama_get_timings(struct llama_context * ctx) {
|
||||||
struct llama_timings result = {
|
struct llama_timings result = {
|
||||||
/*.t_start_ms =*/ 1e-3 * ctx->t_start_us,
|
/*.t_start_ms =*/ 1e-3 * ctx->t_start_us,
|
||||||
|
31
llama.h
31
llama.h
@ -199,7 +199,6 @@ extern "C" {
|
|||||||
LLAMA_API struct llama_context_params llama_context_default_params(void);
|
LLAMA_API struct llama_context_params llama_context_default_params(void);
|
||||||
LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void);
|
LLAMA_API struct llama_model_quantize_params llama_model_quantize_default_params(void);
|
||||||
|
|
||||||
// TODO: not great API - very likely to change
|
|
||||||
// Initialize the llama + ggml backend
|
// Initialize the llama + ggml backend
|
||||||
// If numa is true, use NUMA optimizations
|
// If numa is true, use NUMA optimizations
|
||||||
// Call once at the start of the program
|
// Call once at the start of the program
|
||||||
@ -231,9 +230,9 @@ extern "C" {
|
|||||||
LLAMA_API int llama_n_ctx (const struct llama_context * ctx);
|
LLAMA_API int llama_n_ctx (const struct llama_context * ctx);
|
||||||
LLAMA_API int llama_n_embd (const struct llama_context * ctx);
|
LLAMA_API int llama_n_embd (const struct llama_context * ctx);
|
||||||
|
|
||||||
LLAMA_API int llama_n_vocab_from_model(const struct llama_model * model);
|
LLAMA_API int llama_model_n_vocab(const struct llama_model * model);
|
||||||
LLAMA_API int llama_n_ctx_from_model (const struct llama_model * model);
|
LLAMA_API int llama_model_n_ctx (const struct llama_model * model);
|
||||||
LLAMA_API int llama_n_embd_from_model (const struct llama_model * model);
|
LLAMA_API int llama_model_n_embd (const struct llama_model * model);
|
||||||
|
|
||||||
// Get a string describing the model type
|
// Get a string describing the model type
|
||||||
LLAMA_API int llama_model_type(const struct llama_model * model, char * buf, size_t buf_size);
|
LLAMA_API int llama_model_type(const struct llama_model * model, char * buf, size_t buf_size);
|
||||||
@ -322,6 +321,10 @@ extern "C" {
|
|||||||
// 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);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vocab
|
||||||
|
//
|
||||||
|
|
||||||
// Get the vocabulary as output parameters.
|
// Get the vocabulary as output parameters.
|
||||||
// Returns number of results.
|
// Returns number of results.
|
||||||
LLAMA_API int llama_get_vocab(
|
LLAMA_API int llama_get_vocab(
|
||||||
@ -330,17 +333,25 @@ extern "C" {
|
|||||||
float * scores,
|
float * scores,
|
||||||
int capacity);
|
int capacity);
|
||||||
|
|
||||||
LLAMA_API int llama_get_vocab_from_model(
|
LLAMA_API int llama_model_get_vocab(
|
||||||
const struct llama_model * model,
|
const struct llama_model * model,
|
||||||
const char * * strings,
|
const char * * strings,
|
||||||
float * scores,
|
float * scores,
|
||||||
int capacity);
|
int capacity);
|
||||||
|
|
||||||
|
// Special tokens
|
||||||
|
LLAMA_API llama_token llama_token_bos(/*struct llama_model * model*/ void); // beginning-of-sentence
|
||||||
|
LLAMA_API llama_token llama_token_eos(/*struct llama_model * model*/ void); // end-of-sentence
|
||||||
|
LLAMA_API llama_token llama_token_nl (/*struct llama_model * model*/ void); // next-line
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tokenization
|
||||||
|
//
|
||||||
|
|
||||||
// Convert the provided text into tokens.
|
// Convert the provided text into tokens.
|
||||||
// The tokens pointer must be large enough to hold the resulting tokens.
|
// The tokens pointer must be large enough to hold the resulting tokens.
|
||||||
// Returns the number of tokens on success, no more than n_max_tokens
|
// Returns the number of tokens on success, no more than n_max_tokens
|
||||||
// Returns a negative number on failure - the number of tokens that would have been returned
|
// Returns a negative number on failure - the number of tokens that would have been returned
|
||||||
// TODO: not sure if correct
|
|
||||||
LLAMA_API int llama_tokenize(
|
LLAMA_API int llama_tokenize(
|
||||||
struct llama_context * ctx,
|
struct llama_context * ctx,
|
||||||
const char * text,
|
const char * text,
|
||||||
@ -381,13 +392,11 @@ extern "C" {
|
|||||||
llama_token token,
|
llama_token token,
|
||||||
char * buf,
|
char * buf,
|
||||||
int length);
|
int length);
|
||||||
// Special tokens
|
|
||||||
LLAMA_API llama_token llama_token_bos(/*struct llama_model * model*/ void); // beginning-of-sentence
|
|
||||||
LLAMA_API llama_token llama_token_eos(/*struct llama_model * model*/ void); // end-of-sentence
|
|
||||||
LLAMA_API llama_token llama_token_nl (/*struct llama_model * model*/ void); // next-line
|
|
||||||
|
|
||||||
|
//
|
||||||
// Grammar
|
// Grammar
|
||||||
//
|
//
|
||||||
|
|
||||||
LLAMA_API struct llama_grammar * llama_grammar_init(
|
LLAMA_API struct llama_grammar * llama_grammar_init(
|
||||||
const llama_grammar_element ** rules,
|
const llama_grammar_element ** rules,
|
||||||
size_t n_rules,
|
size_t n_rules,
|
||||||
@ -395,7 +404,9 @@ extern "C" {
|
|||||||
|
|
||||||
LLAMA_API void llama_grammar_free(struct llama_grammar * grammar);
|
LLAMA_API void llama_grammar_free(struct llama_grammar * grammar);
|
||||||
|
|
||||||
|
//
|
||||||
// Sampling functions
|
// Sampling functions
|
||||||
|
//
|
||||||
|
|
||||||
/// @details Repetition penalty described in CTRL academic paper https://arxiv.org/abs/1909.05858, with negative logit fix.
|
/// @details Repetition penalty described in CTRL academic paper https://arxiv.org/abs/1909.05858, with negative logit fix.
|
||||||
LLAMA_API void llama_sample_repetition_penalty(struct llama_context * ctx, llama_token_data_array * candidates, const llama_token * last_tokens, size_t last_tokens_size, float penalty);
|
LLAMA_API void llama_sample_repetition_penalty(struct llama_context * ctx, llama_token_data_array * candidates, const llama_token * last_tokens, size_t last_tokens_size, float penalty);
|
||||||
|
Loading…
Reference in New Issue
Block a user