cui-llama.rn 1.3.4 → 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/android/src/main/CMakeLists.txt +14 -8
  2. package/android/src/main/jni.cpp +38 -37
  3. package/cpp/common.cpp +50 -30
  4. package/cpp/common.h +32 -13
  5. package/cpp/ggml-alloc.c +0 -1
  6. package/cpp/ggml-backend-reg.cpp +79 -49
  7. package/cpp/ggml-backend.cpp +5 -2
  8. package/cpp/ggml-cpp.h +1 -0
  9. package/cpp/ggml-cpu-aarch64.cpp +57 -72
  10. package/cpp/ggml-cpu-quants.c +5 -1
  11. package/cpp/ggml-cpu.c +6 -6
  12. package/cpp/ggml-cpu.cpp +9 -0
  13. package/cpp/ggml-impl.h +11 -0
  14. package/cpp/ggml-metal.m +2 -2
  15. package/cpp/ggml.c +129 -1388
  16. package/cpp/ggml.h +29 -152
  17. package/cpp/gguf.cpp +1325 -0
  18. package/cpp/gguf.h +202 -0
  19. package/cpp/llama-adapter.cpp +346 -0
  20. package/cpp/llama-adapter.h +73 -0
  21. package/cpp/llama-arch.cpp +1434 -0
  22. package/cpp/llama-arch.h +395 -0
  23. package/cpp/llama-batch.cpp +368 -0
  24. package/cpp/llama-batch.h +88 -0
  25. package/cpp/llama-chat.cpp +567 -0
  26. package/cpp/llama-chat.h +51 -0
  27. package/cpp/llama-context.cpp +1771 -0
  28. package/cpp/llama-context.h +128 -0
  29. package/cpp/llama-cparams.cpp +1 -0
  30. package/cpp/llama-cparams.h +37 -0
  31. package/cpp/llama-cpp.h +30 -0
  32. package/cpp/llama-grammar.cpp +16 -15
  33. package/cpp/llama-grammar.h +5 -6
  34. package/cpp/llama-hparams.cpp +71 -0
  35. package/cpp/llama-hparams.h +140 -0
  36. package/cpp/llama-impl.cpp +167 -0
  37. package/cpp/llama-impl.h +16 -136
  38. package/cpp/llama-kv-cache.cpp +718 -0
  39. package/cpp/llama-kv-cache.h +218 -0
  40. package/cpp/llama-mmap.cpp +589 -0
  41. package/cpp/llama-mmap.h +67 -0
  42. package/cpp/llama-model-loader.cpp +1011 -0
  43. package/cpp/llama-model-loader.h +158 -0
  44. package/cpp/llama-model.cpp +2202 -0
  45. package/cpp/llama-model.h +391 -0
  46. package/cpp/llama-sampling.cpp +117 -4
  47. package/cpp/llama-vocab.cpp +26 -29
  48. package/cpp/llama-vocab.h +14 -2
  49. package/cpp/llama.cpp +8839 -19131
  50. package/cpp/llama.cpp.rej +23 -0
  51. package/cpp/llama.h +31 -9
  52. package/cpp/rn-llama.hpp +39 -37
  53. package/cpp/sgemm.cpp +1091 -378
  54. package/cpp/sgemm.h +2 -2
  55. package/cpp/unicode.cpp +6 -0
  56. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  #include "llama-vocab.h"
2
2
 
3
+ #include "llama-impl.h"
4
+
3
5
  #include "unicode.h"
4
6
 
5
7
  #include <algorithm>
@@ -16,22 +18,6 @@
16
18
  // helpers
17
19
  //
18
20
 
19
- LLAMA_ATTRIBUTE_FORMAT(1, 2)
20
- static std::string format(const char * fmt, ...) {
21
- va_list ap;
22
- va_list ap2;
23
- va_start(ap, fmt);
24
- va_copy(ap2, ap);
25
- int size = vsnprintf(NULL, 0, fmt, ap);
26
- LM_GGML_ASSERT(size >= 0 && size < INT_MAX); // NOLINT
27
- std::vector<char> buf(size + 1);
28
- int size2 = vsnprintf(buf.data(), size + 1, fmt, ap2);
29
- LM_GGML_ASSERT(size2 == size);
30
- va_end(ap2);
31
- va_end(ap);
32
- return std::string(buf.data(), size);
33
- }
34
-
35
21
  struct naive_trie {
36
22
  naive_trie() : has_value(false), value(0) {
37
23
  }
@@ -396,6 +382,13 @@ struct llm_tokenizer_bpe : llm_tokenizer {
396
382
  "\\p{N}+",
397
383
  };
398
384
  break;
385
+ case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK3_LLM:
386
+ regex_exprs = {
387
+ "\\p{N}{1,3}",
388
+ "[一-龥぀-ゟ゠-ヿ]+",
389
+ "[!\"#$%&'()*+,\\-./:;<=>?@\\[\\\\\\]^_`{|}~][A-Za-z]+|[^\r\n\\p{L}\\p{P}\\p{S}]?[\\p{L}\\p{M}]+| ?[\\p{P}\\p{S}]+[\r\n]*|\\s*[\r\n]+|\\s+(?!\\S)|\\s+",
390
+ };
391
+ break;
399
392
  case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_CODER:
400
393
  regex_exprs = {
401
394
  "[\r\n]",
@@ -504,7 +497,7 @@ struct llm_tokenizer_bpe_session {
504
497
 
505
498
  bool append_bos(std::vector<llama_vocab::id> & output) const {
506
499
  if (vocab.tokenizer_add_bos) {
507
- LM_GGML_ASSERT(vocab.special_bos_id != -1);
500
+ LM_GGML_ASSERT(vocab.special_bos_id != LLAMA_TOKEN_NULL);
508
501
  output.push_back(vocab.special_bos_id);
509
502
  return true;
510
503
  }
@@ -513,7 +506,7 @@ struct llm_tokenizer_bpe_session {
513
506
 
514
507
  bool append_eos(std::vector<llama_vocab::id> & output) const {
515
508
  if (vocab.tokenizer_add_eos) {
516
- LM_GGML_ASSERT(vocab.special_eos_id != -1);
509
+ LM_GGML_ASSERT(vocab.special_eos_id != LLAMA_TOKEN_NULL);
517
510
  output.push_back(vocab.special_eos_id);
518
511
  return true;
519
512
  }
@@ -1410,7 +1403,7 @@ static void tokenizer_st_partition(const llama_vocab & vocab, std::forward_list<
1410
1403
  if (source == 0) {
1411
1404
  buffer.erase_after(buffer.before_begin());
1412
1405
  } else {
1413
- buffer.erase_after(std::next(buffer.begin(), (source-1)));
1406
+ buffer.erase_after(std::next(buffer.begin(), (source - 1)));
1414
1407
  }
1415
1408
 
1416
1409
  // repeat for the right side
@@ -1424,7 +1417,7 @@ static void tokenizer_st_partition(const llama_vocab & vocab, std::forward_list<
1424
1417
  if (source == 0) {
1425
1418
  buffer.erase_after(buffer.before_begin());
1426
1419
  } else {
1427
- buffer.erase_after(std::next(buffer.begin(), (source-1)));
1420
+ buffer.erase_after(std::next(buffer.begin(), (source - 1)));
1428
1421
  }
1429
1422
  break;
1430
1423
  }
@@ -1461,7 +1454,7 @@ std::vector<llama_vocab::id> llama_tokenize_internal(
1461
1454
  bool is_prev_special = true; // prefix with space if first token
1462
1455
 
1463
1456
  if (add_special && vocab.tokenizer_add_bos) {
1464
- LM_GGML_ASSERT(vocab.special_bos_id != -1);
1457
+ LM_GGML_ASSERT(vocab.special_bos_id != LLAMA_TOKEN_NULL);
1465
1458
  output.push_back(vocab.special_bos_id);
1466
1459
  is_prev_special = true;
1467
1460
  }
@@ -1496,7 +1489,7 @@ std::vector<llama_vocab::id> llama_tokenize_internal(
1496
1489
  }
1497
1490
 
1498
1491
  if (add_special && vocab.tokenizer_add_eos) {
1499
- LM_GGML_ASSERT(vocab.special_eos_id != -1);
1492
+ LM_GGML_ASSERT(vocab.special_eos_id != LLAMA_TOKEN_NULL);
1500
1493
  output.push_back(vocab.special_eos_id);
1501
1494
  }
1502
1495
  } break;
@@ -1529,7 +1522,7 @@ std::vector<llama_vocab::id> llama_tokenize_internal(
1529
1522
  case LLAMA_VOCAB_TYPE_WPM:
1530
1523
  {
1531
1524
  if (add_special) {
1532
- LM_GGML_ASSERT(vocab.special_cls_id != -1);
1525
+ LM_GGML_ASSERT(vocab.special_cls_id != LLAMA_TOKEN_NULL);
1533
1526
  output.push_back(vocab.special_cls_id);
1534
1527
  }
1535
1528
 
@@ -1549,14 +1542,14 @@ std::vector<llama_vocab::id> llama_tokenize_internal(
1549
1542
  }
1550
1543
 
1551
1544
  if (add_special) {
1552
- LM_GGML_ASSERT(vocab.special_sep_id != -1);
1545
+ LM_GGML_ASSERT(vocab.special_sep_id != LLAMA_TOKEN_NULL);
1553
1546
  output.push_back(vocab.special_sep_id);
1554
1547
  }
1555
1548
  } break;
1556
1549
  case LLAMA_VOCAB_TYPE_UGM:
1557
1550
  {
1558
1551
  if (add_special && vocab.tokenizer_add_bos) {
1559
- LM_GGML_ASSERT(vocab.special_bos_id != -1);
1552
+ LM_GGML_ASSERT(vocab.special_bos_id != LLAMA_TOKEN_NULL);
1560
1553
  output.push_back(vocab.special_bos_id);
1561
1554
  }
1562
1555
  llm_tokenizer_ugm_session session(vocab);
@@ -1581,7 +1574,7 @@ std::vector<llama_vocab::id> llama_tokenize_internal(
1581
1574
  }
1582
1575
 
1583
1576
  if (add_special && vocab.tokenizer_add_eos) {
1584
- LM_GGML_ASSERT(vocab.special_eos_id != -1);
1577
+ LM_GGML_ASSERT(vocab.special_eos_id != LLAMA_TOKEN_NULL);
1585
1578
  output.push_back(vocab.special_eos_id);
1586
1579
  }
1587
1580
  } break;
@@ -1649,7 +1642,7 @@ llama_token_attr llama_token_get_attr_impl(const struct llama_vocab & vocab, lla
1649
1642
  }
1650
1643
 
1651
1644
  bool llama_token_is_eog_impl(const struct llama_vocab & vocab, llama_token token) {
1652
- return token != -1 && vocab.special_eog_ids.count(token) > 0;
1645
+ return token != LLAMA_TOKEN_NULL && vocab.special_eog_ids.count(token) > 0;
1653
1646
  }
1654
1647
 
1655
1648
  bool llama_token_is_control_impl(const struct llama_vocab & vocab, llama_token token) {
@@ -1657,7 +1650,7 @@ bool llama_token_is_control_impl(const struct llama_vocab & vocab, llama_token t
1657
1650
  }
1658
1651
 
1659
1652
  llama_token llama_token_bos_impl(const struct llama_vocab & vocab) {
1660
- return vocab.special_bos_id;
1653
+ return vocab.type != LLAMA_VOCAB_TYPE_WPM ? vocab.special_bos_id : vocab.special_cls_id;
1661
1654
  }
1662
1655
 
1663
1656
  llama_token llama_token_eos_impl(const struct llama_vocab & vocab) {
@@ -1867,6 +1860,10 @@ int32_t llama_detokenize_impl(
1867
1860
  int32_t text_len_max,
1868
1861
  bool remove_special,
1869
1862
  bool unparse_special) {
1863
+ if (vocab.type == LLAMA_VOCAB_TYPE_NONE) {
1864
+ return 0;
1865
+ }
1866
+
1870
1867
  LM_GGML_ASSERT(vocab.tokenizer && "Tokenizer not initialized. Call llama_vocab::init_tokenizer() first.");
1871
1868
 
1872
1869
  int32_t avail = text_len_max;
@@ -1884,7 +1881,7 @@ int32_t llama_detokenize_impl(
1884
1881
  }
1885
1882
 
1886
1883
  if (remove_special && vocab.tokenizer_add_eos) {
1887
- if (n_tokens > 0 && tokens[n_tokens-1] == vocab.special_eos_id) {
1884
+ if (n_tokens > 0 && tokens[n_tokens - 1] == vocab.special_eos_id) {
1888
1885
  n_tokens--;
1889
1886
  }
1890
1887
  }
package/cpp/llama-vocab.h CHANGED
@@ -1,6 +1,6 @@
1
1
  #pragma once
2
2
 
3
- #include "llama-impl.h"
3
+ #include "llama.h"
4
4
 
5
5
  #include <string>
6
6
  #include <vector>
@@ -8,6 +8,18 @@
8
8
  #include <map>
9
9
  #include <set>
10
10
 
11
+ static const char * llama_model_vocab_type_name(enum llama_vocab_type type){
12
+ switch (type) {
13
+ case LLAMA_VOCAB_TYPE_NONE: return "no vocab";
14
+ case LLAMA_VOCAB_TYPE_SPM: return "SPM";
15
+ case LLAMA_VOCAB_TYPE_BPE: return "BPE";
16
+ case LLAMA_VOCAB_TYPE_WPM: return "WPM";
17
+ case LLAMA_VOCAB_TYPE_UGM: return "UGM";
18
+ case LLAMA_VOCAB_TYPE_RWKV: return "RWKV";
19
+ default: return "unknown";
20
+ }
21
+ }
22
+
11
23
  struct llm_tokenizer;
12
24
 
13
25
  struct llama_vocab {
@@ -45,7 +57,7 @@ struct llama_vocab {
45
57
  id special_unk_id = 0;
46
58
  id special_sep_id = LLAMA_TOKEN_NULL;
47
59
  id special_pad_id = LLAMA_TOKEN_NULL;
48
- id special_cls_id = LLAMA_TOKEN_NULL;
60
+ id special_cls_id = LLAMA_TOKEN_NULL; // TODO: revisit if this is really needed https://github.com/ggerganov/llama.cpp/pull/10930
49
61
  id special_mask_id = LLAMA_TOKEN_NULL;
50
62
 
51
63
  id linefeed_id = 13;