llama-vocab.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #pragma once
  2. #include "llama-impl.h"
  3. #include <string>
  4. #include <vector>
  5. #include <unordered_map>
  6. #include <map>
  7. struct llama_vocab {
  8. using id = llama_token;
  9. using token = std::string;
  10. using tattr = llama_token_attr;
  11. struct token_data {
  12. token text;
  13. float score;
  14. tattr attr;
  15. };
  16. enum llama_vocab_type type = LLAMA_VOCAB_TYPE_SPM;
  17. enum llama_vocab_pre_type type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT;
  18. int max_token_len = 0; // used for optimizing longest token search
  19. std::unordered_map<token, id> token_to_id;
  20. std::vector<token_data> id_to_token;
  21. std::vector<id> cache_special_tokens;
  22. std::vector<token> cache_token_to_piece; // llama_token_to_piece(special = true);
  23. std::map<std::pair<std::string, std::string>, int> bpe_ranks;
  24. // default LLaMA special tokens
  25. id special_bos_id = 1;
  26. id special_eos_id = 2;
  27. id special_unk_id = 0;
  28. id special_sep_id = -1;
  29. id special_pad_id = -1;
  30. id special_cls_id = -1;
  31. id special_mask_id = -1;
  32. id linefeed_id = 13;
  33. id special_prefix_id = -1;
  34. id special_suffix_id = -1;
  35. id special_middle_id = -1;
  36. id special_eot_id = -1; // TODO: move above after "eos_id", and here add "file separator" token
  37. id special_eom_id = -1;
  38. // tokenizer flags
  39. bool tokenizer_add_space_prefix = false;
  40. bool tokenizer_add_bos = false;
  41. bool tokenizer_add_eos = false;
  42. bool tokenizer_ignore_merges = false;
  43. bool tokenizer_clean_spaces = false; // clean_up_tokenization_spaces
  44. bool tokenizer_remove_extra_whitespaces = false;
  45. bool tokenizer_escape_whitespaces = true;
  46. bool tokenizer_treat_whitespace_as_suffix = false;
  47. std::vector<char> precompiled_charsmap;
  48. int find_bpe_rank(const std::string & token_left, const std::string & token_right) const;
  49. };
  50. const struct llama_vocab * llama_get_vocab(const struct llama_context * ctx);
  51. //
  52. // internal API
  53. //
  54. // TODO: rename to llama_tokenize_impl
  55. // TODO: This should probably be in llama.h
  56. std::vector<llama_vocab::id> llama_tokenize_internal(
  57. const llama_vocab & vocab,
  58. std::string raw_text,
  59. bool add_special,
  60. bool parse_special = false);
  61. llama_token llama_byte_to_token_impl(const llama_vocab & vocab, uint8_t ch);
  62. const char * llama_token_get_text_impl(const struct llama_vocab & vocab, llama_token token);
  63. float llama_token_get_score_impl(const struct llama_vocab & vocab, llama_token token);
  64. llama_token_attr llama_token_get_attr_impl(const struct llama_vocab & vocab, llama_token token);
  65. bool llama_token_is_eog_impl(const struct llama_vocab & vocab, llama_token token);
  66. bool llama_token_is_control_impl(const struct llama_vocab & vocab, llama_token token);
  67. llama_token llama_token_bos_impl(const struct llama_vocab & vocab);
  68. llama_token llama_token_eos_impl(const struct llama_vocab & vocab);
  69. llama_token llama_token_cls_impl(const struct llama_vocab & vocab);
  70. llama_token llama_token_sep_impl(const struct llama_vocab & vocab);
  71. llama_token llama_token_nl_impl (const struct llama_vocab & vocab);
  72. llama_token llama_token_pad_impl(const struct llama_vocab & vocab);
  73. int32_t llama_add_bos_token_impl(const struct llama_vocab & vocab);
  74. int32_t llama_add_eos_token_impl(const struct llama_vocab & vocab);
  75. llama_token llama_token_prefix_impl(const struct llama_vocab & vocab);
  76. llama_token llama_token_middle_impl(const struct llama_vocab & vocab);
  77. llama_token llama_token_suffix_impl(const struct llama_vocab & vocab);
  78. llama_token llama_token_eot_impl (const struct llama_vocab & vocab);
  79. llama_token llama_token_eom_impl (const struct llama_vocab & vocab);
  80. int32_t llama_tokenize_impl(
  81. const struct llama_vocab & vocab,
  82. const char * text,
  83. int32_t text_len,
  84. llama_token * tokens,
  85. int32_t n_tokens_max,
  86. bool add_special,
  87. bool parse_special);
  88. // does not write null-terminator to buf
  89. int32_t llama_token_to_piece_impl(
  90. const struct llama_vocab & vocab,
  91. llama_token token,
  92. char * buf,
  93. int32_t length,
  94. int32_t lstrip,
  95. bool special);
  96. int32_t llama_detokenize_impl(
  97. const struct llama_vocab & vocab,
  98. const llama_token * tokens,
  99. int32_t n_tokens,
  100. char * text,
  101. int32_t text_len_max,
  102. bool remove_special,
  103. bool unparse_special);