|
|
@@ -1931,20 +1931,18 @@ static void llm_load_vocab(
|
|
|
throw std::runtime_error("cannot find tokenizer vocab in model file\n");
|
|
|
}
|
|
|
|
|
|
+ const float * scores = nullptr;
|
|
|
const int score_idx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_SCORES).c_str());
|
|
|
- if (score_idx == -1) {
|
|
|
- throw std::runtime_error("cannot find tokenizer scores in model file\n");
|
|
|
+ if (score_idx != -1) {
|
|
|
+ scores = (const float * ) gguf_get_arr_data(ctx, score_idx);
|
|
|
}
|
|
|
|
|
|
- const float * scores = (const float * ) gguf_get_arr_data(ctx, score_idx);
|
|
|
-
|
|
|
+ const int * toktypes = nullptr;
|
|
|
const int toktype_idx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_TOKEN_TYPE).c_str());
|
|
|
- if (toktype_idx == -1) {
|
|
|
- throw std::runtime_error("cannot find token type list in GGUF file\n");
|
|
|
+ if (toktype_idx != -1) {
|
|
|
+ toktypes = (const int * ) gguf_get_arr_data(ctx, toktype_idx);
|
|
|
}
|
|
|
|
|
|
- const int * toktypes = (const int * ) gguf_get_arr_data(ctx, toktype_idx);
|
|
|
-
|
|
|
// determine vocab type
|
|
|
{
|
|
|
std::string tokenizer_name;
|
|
|
@@ -2012,8 +2010,8 @@ static void llm_load_vocab(
|
|
|
|
|
|
auto & token_data = vocab.id_to_token[i];
|
|
|
token_data.text = std::move(word);
|
|
|
- token_data.score = scores[i];
|
|
|
- token_data.type = (llama_token_type) toktypes[i];
|
|
|
+ token_data.score = scores ? scores[i] : 0.0f;
|
|
|
+ token_data.type = toktypes ? (llama_token_type) toktypes[i] : LLAMA_TOKEN_TYPE_NORMAL;
|
|
|
}
|
|
|
|
|
|
// determine the newline token: LLaMA "<0x0A>" == 10 == '\n', Falcon 193 == '\n'
|