diff --git a/src/llama-grammar.cpp b/src/llama-grammar.cpp index 804e59643..6f43a5f2d 100644 --- a/src/llama-grammar.cpp +++ b/src/llama-grammar.cpp @@ -1094,7 +1094,7 @@ void llama_grammar_apply_impl(const struct llama_grammar & grammar, llama_token_ const llama_token id = cur_p->data[i].id; const std::string & piece = grammar.vocab->cache_token_to_piece.at(id); - if (grammar.vocab->token_is_eog(id)) { + if (grammar.vocab->is_eog(id)) { if (!allow_eog) { cur_p->data[i].logit = -INFINITY; } @@ -1115,7 +1115,7 @@ void llama_grammar_apply_impl(const struct llama_grammar & grammar, llama_token_ void llama_grammar_accept_impl(struct llama_grammar & grammar, llama_token token) { GGML_ASSERT(grammar.vocab != nullptr); - if (grammar.vocab->token_is_eog(token)) { + if (grammar.vocab->is_eog(token)) { for (const auto & stack : grammar.stacks) { if (stack.empty()) { return; diff --git a/src/llama-sampling.cpp b/src/llama-sampling.cpp index 024fe9d8e..f5f9127cf 100644 --- a/src/llama-sampling.cpp +++ b/src/llama-sampling.cpp @@ -2153,7 +2153,7 @@ static void llama_sampler_infill_apply(struct llama_sampler * smpl, llama_token_ float p_eog_sum = 0.0f; for (size_t i = 0; i < cur_p->size; ++i) { - if (ctx->vocab->token_is_eog(cur_p->data[i].id)) { + if (ctx->vocab->is_eog(cur_p->data[i].id)) { p_eog_sum += cur_p->data[i].p; } else { p_txt_sum += cur_p->data[i].p; @@ -2175,7 +2175,7 @@ static void llama_sampler_infill_apply(struct llama_sampler * smpl, llama_token_ float p_sum = 0.0f; for (size_t i = 0; i < size_org; ++i) { - if (ctx->vocab->token_is_eog(cur_p->data[i].id)) { + if (ctx->vocab->is_eog(cur_p->data[i].id)) { p_sum += cur_p->data[i].p; cur_p->data[cur_p->size++] = cur_p->data[i]; @@ -2248,7 +2248,7 @@ static void llama_sampler_infill_apply(struct llama_sampler * smpl, llama_token_ LOG_DBG_CUR("%s: n_combined = %zu, applying thold = %.3f\n", __func__, n_combined, thold); for (size_t i = 0; i < size_org; ++i) { - const bool is_eog = ctx->vocab->token_is_eog(cur_p->data[i].id); + const bool is_eog = ctx->vocab->is_eog(cur_p->data[i].id); if (cur_p->data[i].p < thold && !is_eog) { continue; @@ -2291,7 +2291,7 @@ static void llama_sampler_infill_apply(struct llama_sampler * smpl, llama_token_ LOG_DBG_CUR("%s: applying thold = %.3f\n", __func__, thold); for (size_t i = 0; i < size_org; ++i) { - const bool is_eog = ctx->vocab->token_is_eog(cur_p->data[i].id); + const bool is_eog = ctx->vocab->is_eog(cur_p->data[i].id); if (cur_p->data[i].p < thold && !is_eog) { continue; diff --git a/src/llama-vocab.cpp b/src/llama-vocab.cpp index 4e921c452..5b975a3e7 100644 --- a/src/llama-vocab.cpp +++ b/src/llama-vocab.cpp @@ -110,39 +110,43 @@ std::string llama_vocab::type_name() const{ } } -bool llama_vocab::is_normal_token(llama_token id) const { +bool llama_vocab::is_normal(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_NORMAL; } -bool llama_vocab::is_unknown_token(llama_token id) const { +bool llama_vocab::is_unknown(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_UNKNOWN; } -bool llama_vocab::is_control_token(llama_token id) const { +bool llama_vocab::is_control(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_CONTROL; } -bool llama_vocab::is_byte_token(llama_token id) const { +bool llama_vocab::is_byte(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_BYTE; } -bool llama_vocab::is_user_defined_token(llama_token id) const { +bool llama_vocab::is_user_defined(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_USER_DEFINED; } -bool llama_vocab::is_unused_token(llama_token id) const { +bool llama_vocab::is_unused(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); return id_to_token[id].attr & LLAMA_TOKEN_ATTR_UNUSED; } +bool llama_vocab::is_eog(llama_token id) const { + return id != LLAMA_TOKEN_NULL && special_eog_ids.count(id) > 0; +} + uint8_t llama_vocab::token_to_byte(llama_token id) const { GGML_ASSERT(get_type() != LLAMA_VOCAB_TYPE_NONE); - GGML_ASSERT(is_byte_token(id)); + GGML_ASSERT(is_byte(id)); const auto & token_data = id_to_token.at(id); switch (get_type()) { case LLAMA_VOCAB_TYPE_SPM: @@ -832,18 +836,18 @@ struct llm_tokenizer_ugm : llm_tokenizer { for (unsigned int id = 0; id < vocab.id_to_token.size(); ++id) { const auto &token_data = vocab.id_to_token[id]; - if (vocab.is_normal_token(id)) { + if (vocab.is_normal(id)) { min_score = std::min(min_score, token_data.score); max_score = std::max(max_score, token_data.score); } - if (vocab.is_normal_token(id) || - vocab.is_user_defined_token(id) || - vocab.is_unused_token(id)) { + if (vocab.is_normal(id) || + vocab.is_user_defined(id) || + vocab.is_unused(id)) { token_matcher.insert(token_data.text.data(), token_data.text.size(), id); } - if (vocab.is_user_defined_token(id)) { + if (vocab.is_user_defined(id)) { user_defined_token_matcher.insert(token_data.text.data(), token_data.text.size()); } } @@ -928,7 +932,7 @@ struct llm_tokenizer_ugm_session { // (normal token scores are log probabilities, so they are negative) // score type is double here to make tokenization results exactly // the same as in the HF tokenizer using SentencePiece - const double token_score = vocab.is_user_defined_token(token_id) ? 0.0 : token_data.score; + const double token_score = vocab.is_user_defined(token_id) ? 0.0 : token_data.score; const double challenger_score = current_best.score_sum + token_score; struct best_tokenization & current_champ = tokenization_results[prefix_offset]; if (challenger_score > current_champ.score_sum) { @@ -1466,27 +1470,19 @@ llama_token llama_vocab::byte_to_token(uint8_t ch) const { } } -const char * llama_vocab::token_get_text(llama_token token) const { +const char * llama_vocab::token_get_text(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); - return id_to_token[token].text.c_str(); + return id_to_token[id].text.c_str(); } -float llama_vocab::token_get_score(llama_token token) const { +float llama_vocab::token_get_score(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); - return id_to_token[token].score; + return id_to_token[id].score; } -llama_token_attr llama_vocab::token_get_attr(llama_token token) const { +llama_token_attr llama_vocab::token_get_attr(llama_token id) const { GGML_ASSERT(type != LLAMA_VOCAB_TYPE_NONE); - return id_to_token[token].attr; -} - -bool llama_vocab::token_is_eog(llama_token token) const { - return token != LLAMA_TOKEN_NULL && special_eog_ids.count(token) > 0; -} - -bool llama_vocab::token_is_control(llama_token token) const { - return is_control_token(token); + return id_to_token[id].attr; } llama_token llama_vocab::token_bos() const { diff --git a/src/llama-vocab.h b/src/llama-vocab.h index 654d965fc..3a79cf5b4 100644 --- a/src/llama-vocab.h +++ b/src/llama-vocab.h @@ -83,26 +83,20 @@ struct llama_vocab { std::string type_name() const; - // TODO: fix names - bool is_normal_token (llama_token id) const; - bool is_unknown_token (llama_token id) const; - bool is_control_token (llama_token id) const; - bool is_byte_token (llama_token id) const; - bool is_user_defined_token(llama_token id) const; - bool is_unused_token (llama_token id) const; + bool is_normal (llama_token id) const; + bool is_unknown (llama_token id) const; + bool is_control (llama_token id) const; + bool is_byte (llama_token id) const; + bool is_user_defined(llama_token id) const; + bool is_unused (llama_token id) const; + bool is_eog (llama_token id) const; uint8_t token_to_byte(llama_token id) const; llama_token byte_to_token(uint8_t ch) const; - const char * token_get_text(llama_token token) const; - - float token_get_score(llama_token token) const; - - llama_token_attr token_get_attr(llama_token token) const; - - bool token_is_eog(llama_token token) const; - - bool token_is_control(llama_token token) const; + const char * token_get_text (llama_token id) const; + float token_get_score(llama_token id) const; + llama_token_attr token_get_attr (llama_token id) const; llama_token token_bos() const; llama_token token_eos() const; diff --git a/src/llama.cpp b/src/llama.cpp index ee9b4bb50..40b99e6b5 100644 --- a/src/llama.cpp +++ b/src/llama.cpp @@ -9973,11 +9973,11 @@ enum llama_token_attr llama_token_get_attr(const struct llama_model * model, lla } bool llama_token_is_eog(const struct llama_model * model, llama_token token) { - return model->vocab.token_is_eog(token); + return model->vocab.is_eog(token); } bool llama_token_is_control(const struct llama_model * model, llama_token token) { - return model->vocab.token_is_control(token); + return model->vocab.is_control(token); } llama_token llama_token_bos(const struct llama_model * model) {