From a50d4a8b4bd820ca1e439b9bd74d5cc9e64c10b7 Mon Sep 17 00:00:00 2001 From: kustaaya Date: Wed, 26 Jun 2024 15:12:55 +0300 Subject: [PATCH] Added support for Viking pre-tokenizer --- convert-hf-to-gguf-update.py | 1 + convert-hf-to-gguf.py | 3 +++ include/llama.h | 1 + src/llama.cpp | 9 +++++++++ 4 files changed, 14 insertions(+) diff --git a/convert-hf-to-gguf-update.py b/convert-hf-to-gguf-update.py index 67598b561e6cb..2758214fa8730 100755 --- a/convert-hf-to-gguf-update.py +++ b/convert-hf-to-gguf-update.py @@ -85,6 +85,7 @@ class TOKENIZER_TYPE(IntEnum): {"name": "smaug-bpe", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/abacusai/Smaug-Llama-3-70B-Instruct", }, {"name": "poro-chat", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/LumiOpen/Poro-34B-chat", }, {"name": "jina-v2-code", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/jinaai/jina-embeddings-v2-base-code", }, + {"name": "viking", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/LumiOpen/Viking-7B", }, # Also used for Viking 13B and 33B ] diff --git a/convert-hf-to-gguf.py b/convert-hf-to-gguf.py index c26fad9307f15..5bf69ef9fa060 100755 --- a/convert-hf-to-gguf.py +++ b/convert-hf-to-gguf.py @@ -487,6 +487,9 @@ def get_vocab_base_pre(self, tokenizer) -> str: if chkhsh == "7967bfa498ade6b757b064f31e964dddbb80f8f9a4d68d4ba7998fcf281c531a": # ref: https://huggingface.co/jinaai/jina-embeddings-v2-base-code res = "jina-v2-code" + if chkhsh == "7fc505bd3104ca1083b150b17d088b59534ede9bde81f0dd2090967d7fe52cee": + # ref: https://huggingface.co/LumiOpen/Viking-7B + res = "viking" if res is None: logger.warning("\n") diff --git a/include/llama.h b/include/llama.h index 88eecb0edb17e..cafeafb85dbc7 100644 --- a/include/llama.h +++ b/include/llama.h @@ -88,6 +88,7 @@ extern "C" { LLAMA_VOCAB_PRE_TYPE_DBRX = 13, LLAMA_VOCAB_PRE_TYPE_SMAUG = 14, LLAMA_VOCAB_PRE_TYPE_PORO = 15, + LLAMA_VOCAB_PRE_TYPE_VIKING = 16, }; // note: these values should be synchronized with ggml_rope diff --git a/src/llama.cpp b/src/llama.cpp index f78594a6f7c49..69a5e4c4f37e8 100644 --- a/src/llama.cpp +++ b/src/llama.cpp @@ -5067,6 +5067,9 @@ static void llm_load_vocab( } else if ( tokenizer_pre == "poro-chat") { vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_PORO; + } else if ( + tokenizer_pre == "viking") { + vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_VIKING; } else { throw std::runtime_error(format("unknown pre-tokenizer type: '%s'", tokenizer_pre.c_str())); } @@ -13703,6 +13706,12 @@ struct llm_tokenizer_bpe { " ?[^(\\s|.,!?…。,、।۔،)]+", }; break; + case LLAMA_VOCAB_PRE_TYPE_VIKING: + regex_exprs = { + "\\p{N}", + " ?[^(\\s|.,!?…。,、।۔،)]+", + }; + break; default: // default regex for BPE tokenization pre-processing regex_exprs = {