TinyChatEngine
Loading...
Searching...
No Matches
LLaMATokenizer.h
1/*
2
3Adapted from llama.cpp:
4https://github.com/ggerganov/llama.cpp
5
6*/
7
8#ifndef LLaMA_TOKENIZER_H
9#define LLaMA_TOKENIZER_H
10
11#include <cstdint>
12#include <cstdio>
13#include <iostream>
14#include <map>
15#include <queue>
16#include <string>
17#include <unordered_map>
18#include <vector>
19
20static int llama_token_bos() { return 1; }
21
22static int llama_token_eos() { return 2; }
23
24static int llama_token_nl() { return 13; }
25
27 struct token_score {
28 std::string tok;
29 float score;
30 };
31
32 std::unordered_map<std::string, int32_t> token_to_id;
33 std::vector<token_score> id_to_token;
34};
35
36/*
37 * Tokenizer
38 */
39static size_t utf8_len(char src) {
40 const size_t lookup[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4};
41 uint8_t highbits = static_cast<uint8_t>(src) >> 4;
42
43 return lookup[highbits];
44}
45
47 using index = int;
48 index prev;
49 index next;
50 const char* text;
51 size_t n;
52};
53
55 struct comparator {
56 bool operator()(llama_sp_bigram& l, llama_sp_bigram& r) {
57 return (l.score < r.score) || (l.score == r.score && l.left > r.left);
58 }
59 };
60 using queue_storage = std::vector<llama_sp_bigram>;
61 using queue = std::priority_queue<llama_sp_bigram, queue_storage, comparator>;
62 llama_sp_symbol::index left;
63 llama_sp_symbol::index right;
64 float score;
65 size_t size;
66};
67
68llama_vocab llama_init_vocab(const char* vocab_file);
69
70const char* llama_id_to_token(const llama_vocab& vocab, int id);
71
72int llama_tokenize(const llama_vocab& vocab, const char* text, int* tokens, int n_max_tokens, bool add_bos);
73
74#endif
Definition LLaMATokenizer.h:55
Definition LLaMATokenizer.h:54
Definition LLaMATokenizer.h:46
Definition LLaMATokenizer.h:27
Definition LLaMATokenizer.h:26