gpt-tokenizer 2.3.0 → 2.4.0

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 (88) hide show
  1. package/README.md +13 -1
  2. package/cjs/BytePairEncodingCore.d.ts +30 -17
  3. package/cjs/BytePairEncodingCore.js +202 -134
  4. package/cjs/BytePairEncodingCore.js.map +1 -1
  5. package/cjs/GptEncoding.d.ts +6 -4
  6. package/cjs/GptEncoding.js +48 -14
  7. package/cjs/GptEncoding.js.map +1 -1
  8. package/cjs/encoding/cl100k_base.d.ts +1 -1
  9. package/cjs/encoding/o200k_base.d.ts +1 -1
  10. package/cjs/encoding/p50k_base.d.ts +1 -1
  11. package/cjs/encoding/p50k_edit.d.ts +1 -1
  12. package/cjs/encoding/r50k_base.d.ts +1 -1
  13. package/cjs/model/gpt-3.5-turbo-0125.d.ts +1 -1
  14. package/cjs/model/gpt-3.5-turbo-0301.d.ts +1 -1
  15. package/cjs/model/gpt-3.5-turbo-0613.d.ts +1 -1
  16. package/cjs/model/gpt-3.5-turbo-1106.d.ts +1 -1
  17. package/cjs/model/gpt-3.5-turbo-16k-0613.d.ts +1 -1
  18. package/cjs/model/gpt-3.5-turbo-16k.d.ts +1 -1
  19. package/cjs/model/gpt-3.5-turbo-instruct-0914.d.ts +1 -1
  20. package/cjs/model/gpt-3.5-turbo-instruct.d.ts +1 -1
  21. package/cjs/model/gpt-3.5-turbo.d.ts +1 -1
  22. package/cjs/model/gpt-4-0125-preview.d.ts +1 -1
  23. package/cjs/model/gpt-4-0314.d.ts +1 -1
  24. package/cjs/model/gpt-4-0613.d.ts +1 -1
  25. package/cjs/model/gpt-4-1106-preview.d.ts +1 -1
  26. package/cjs/model/gpt-4-32k-0314.d.ts +1 -1
  27. package/cjs/model/gpt-4-32k-0613.d.ts +1 -1
  28. package/cjs/model/gpt-4-32k.d.ts +1 -1
  29. package/cjs/model/gpt-4-turbo-2024-04-09.d.ts +1 -1
  30. package/cjs/model/gpt-4-turbo-preview.d.ts +1 -1
  31. package/cjs/model/gpt-4-turbo.d.ts +1 -1
  32. package/cjs/model/gpt-4-vision-preview.d.ts +1 -1
  33. package/cjs/model/gpt-4.d.ts +1 -1
  34. package/cjs/model/gpt-4o-2024-05-13.d.ts +1 -1
  35. package/cjs/model/gpt-4o-2024-08-06.d.ts +1 -1
  36. package/cjs/model/gpt-4o-mini-2024-07-18.d.ts +1 -1
  37. package/cjs/model/gpt-4o-mini.d.ts +1 -1
  38. package/cjs/model/gpt-4o.d.ts +1 -1
  39. package/dist/cl100k_base.js +1 -1
  40. package/dist/cl100k_base.js.map +1 -1
  41. package/dist/o200k_base.js +1 -1
  42. package/dist/o200k_base.js.map +1 -1
  43. package/dist/p50k_base.js +1 -1
  44. package/dist/p50k_base.js.map +1 -1
  45. package/dist/p50k_edit.js +1 -1
  46. package/dist/p50k_edit.js.map +1 -1
  47. package/dist/r50k_base.js +1 -1
  48. package/dist/r50k_base.js.map +1 -1
  49. package/esm/BytePairEncodingCore.d.ts +30 -17
  50. package/esm/BytePairEncodingCore.js +201 -133
  51. package/esm/BytePairEncodingCore.js.map +1 -1
  52. package/esm/GptEncoding.d.ts +6 -4
  53. package/esm/GptEncoding.js +49 -15
  54. package/esm/GptEncoding.js.map +1 -1
  55. package/esm/encoding/cl100k_base.d.ts +1 -1
  56. package/esm/encoding/o200k_base.d.ts +1 -1
  57. package/esm/encoding/p50k_base.d.ts +1 -1
  58. package/esm/encoding/p50k_edit.d.ts +1 -1
  59. package/esm/encoding/r50k_base.d.ts +1 -1
  60. package/esm/model/gpt-3.5-turbo-0125.d.ts +1 -1
  61. package/esm/model/gpt-3.5-turbo-0301.d.ts +1 -1
  62. package/esm/model/gpt-3.5-turbo-0613.d.ts +1 -1
  63. package/esm/model/gpt-3.5-turbo-1106.d.ts +1 -1
  64. package/esm/model/gpt-3.5-turbo-16k-0613.d.ts +1 -1
  65. package/esm/model/gpt-3.5-turbo-16k.d.ts +1 -1
  66. package/esm/model/gpt-3.5-turbo-instruct-0914.d.ts +1 -1
  67. package/esm/model/gpt-3.5-turbo-instruct.d.ts +1 -1
  68. package/esm/model/gpt-3.5-turbo.d.ts +1 -1
  69. package/esm/model/gpt-4-0125-preview.d.ts +1 -1
  70. package/esm/model/gpt-4-0314.d.ts +1 -1
  71. package/esm/model/gpt-4-0613.d.ts +1 -1
  72. package/esm/model/gpt-4-1106-preview.d.ts +1 -1
  73. package/esm/model/gpt-4-32k-0314.d.ts +1 -1
  74. package/esm/model/gpt-4-32k-0613.d.ts +1 -1
  75. package/esm/model/gpt-4-32k.d.ts +1 -1
  76. package/esm/model/gpt-4-turbo-2024-04-09.d.ts +1 -1
  77. package/esm/model/gpt-4-turbo-preview.d.ts +1 -1
  78. package/esm/model/gpt-4-turbo.d.ts +1 -1
  79. package/esm/model/gpt-4-vision-preview.d.ts +1 -1
  80. package/esm/model/gpt-4.d.ts +1 -1
  81. package/esm/model/gpt-4o-2024-05-13.d.ts +1 -1
  82. package/esm/model/gpt-4o-2024-08-06.d.ts +1 -1
  83. package/esm/model/gpt-4o-mini-2024-07-18.d.ts +1 -1
  84. package/esm/model/gpt-4o-mini.d.ts +1 -1
  85. package/esm/model/gpt-4o.d.ts +1 -1
  86. package/package.json +1 -1
  87. package/src/BytePairEncodingCore.ts +260 -173
  88. package/src/GptEncoding.ts +82 -20
package/README.md CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  [![Play with gpt-tokenizer](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/gpt-tokenizer-tjcjoz?fontsize=14&hidenavigation=1&theme=dark)
4
4
 
5
- `gpt-tokenizer` is a highly optimized Token Byte Pair Encoder/Decoder for all OpenAI's models (including those used by GPT-2, GPT-3, GPT-3.5, GPT-4 and GPT-4o). It's written in TypeScript, and is fully compatible with all modern JavaScript environments.
5
+ `gpt-tokenizer` is a Token Byte Pair Encoder/Decoder supporting all OpenAI's models (including those used by GPT-2, GPT-3, GPT-3.5, GPT-4 and GPT-4o).
6
+ It's the [_fastest, smallest and lowest footprint_](#benchmarks) GPT tokenizer available for all JavaScript environments. It's written in TypeScript.
6
7
 
7
8
  This package is a port of OpenAI's [tiktoken](https://github.com/openai/tiktoken), with some additional features sprinkled on top.
8
9
 
@@ -355,6 +356,17 @@ In this example, an Error is thrown, because the input text contains a disallowe
355
356
 
356
357
  Running the unit tests and verifying the test cases helps maintain consistency between the library and the original Python implementation.
357
358
 
359
+ ## [Benchmarks](https://l8j6fv.csb.app/)
360
+
361
+ Since version 2.4.0, `gpt-tokenizer` is the fastest tokenizer implementation available on NPM. It's even faster than the available WASM/node binding implementations.
362
+ It has the fastest encoding, decoding time and a tiny memory footprint. It also initializes faster than all other implementations.
363
+
364
+ The encodings themselves are also the smallest in size, due to the compact format they are stored in.
365
+
366
+ ![fastest benchmark](./docs/fastest.png)
367
+
368
+ ![lowest footprint benchmark](./docs/lowest-footprint.png)
369
+
358
370
  ## License
359
371
 
360
372
  MIT
@@ -4,28 +4,41 @@ export interface BytePairEncodingConfig {
4
4
  specialTokenMapping?: Map<string, number>;
5
5
  tokenSplitRegex: RegExp;
6
6
  }
7
+ export declare const decoder: TextDecoder;
7
8
  export declare class BytePairEncodingCore {
8
- readonly bytePairEncoderSize: number;
9
- private bytePairEncoder;
10
- private bytePairEncoderSortedLookup;
11
- private bytePairRanksDecoder;
9
+ readonly mergeableBytePairRankCount: number;
10
+ /**
11
+ * an array where the index is the BPE rank,
12
+ * and the value is the string or the array of bytes that it decodes to
13
+ * it may contain holes if token is unused
14
+ */
15
+ private bytePairRankDecoder;
16
+ private bytePairNonUtfRankDecoder;
17
+ private bytePairNonUtfSortedEncoder;
18
+ /**
19
+ * a reverse map of the bytePairRankDecoder,
20
+ * where the key is the string and the value is the rank
21
+ * values that cannot be represented as a string are present in `bytePairNonUtfSortedEncoder`
22
+ */
23
+ private bytePairStringRankEncoder;
12
24
  private tokenSplitRegex;
13
25
  private specialTokensEncoder;
14
26
  private specialTokensDecoder;
15
27
  private specialTokenPatternRegex;
16
- private stringDecoder;
17
28
  private textEncoder;
18
29
  constructor({ mergeableBytePairRanks: bytePairEncoder, specialTokenMapping: specialTokenEncoder, tokenSplitRegex, }: BytePairEncodingConfig);
19
- getBpeRankFromString(key: string): number | undefined;
20
- getBpeRankFromStringOrThrow(key: string): number;
21
- getBpeRankFromBytes(key: Uint8Array): number | undefined;
22
- getBpeRankFromBytesOrThrow(key: Uint8Array): number;
23
- binarySearch(key: Uint8Array): number;
24
- encodeNative(text: string, allowedSpecial?: Set<string>): Generator<number[], number, undefined>;
25
- findNextSpecialStartIndex(text: string, allowedSpecial: Set<string> | undefined, startIndex: number, specialRegex: RegExp): number | undefined;
26
- decodeNative(tokens: Iterable<number>): Generator<Uint8Array | string, void, void>;
27
- decodeNativeAsync(tokens: AsyncIterable<number>): AsyncGenerator<Uint8Array | string>;
28
- tryDecodeToken(tokenRank: number): Uint8Array | string | undefined;
29
- bytePairEncode(input: string): number[];
30
- bytePairMerge(piece: Uint8Array, getByteForRange: (start: number, end: number) => number): number[];
30
+ encodeNativeGenerator(text: string, allowedSpecial?: Set<string>): Generator<number[], number, undefined>;
31
+ encodeNative(text: string, allowedSpecial?: Set<string>): number[];
32
+ decodeNativeGenerator(tokens: Iterable<number>): Generator<Uint8Array | string, void, void>;
33
+ decodeNative(tokens: Iterable<number>): string;
34
+ decodeNativeAsyncIterable(tokens: AsyncIterable<number>): AsyncGenerator<Uint8Array | string>;
35
+ private getBpeRankFromString;
36
+ private getBpeRankFromStringOrThrow;
37
+ private getBpeRankFromBytes;
38
+ private getBpeRankFromBytesOrThrow;
39
+ private binarySearch;
40
+ private findNextSpecialStartIndex;
41
+ private tryDecodeToken;
42
+ private bytePairEncode;
43
+ private bytePairMerge;
31
44
  }
@@ -1,53 +1,178 @@
1
1
  "use strict";
2
2
  /* eslint-disable no-continue */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.BytePairEncodingCore = void 0;
4
+ exports.BytePairEncodingCore = exports.decoder = void 0;
5
5
  const utfUtil_js_1 = require("./utfUtil.js");
6
6
  const util_js_1 = require("./util.js");
7
+ const emptyBuffer = new Uint8Array(0);
8
+ exports.decoder = new TextDecoder('utf8');
7
9
  class BytePairEncodingCore {
8
- bytePairEncoderSize;
9
- bytePairEncoder;
10
- bytePairEncoderSortedLookup;
11
- bytePairRanksDecoder = new Map();
10
+ mergeableBytePairRankCount;
11
+ /**
12
+ * an array where the index is the BPE rank,
13
+ * and the value is the string or the array of bytes that it decodes to
14
+ * it may contain holes if token is unused
15
+ */
16
+ bytePairRankDecoder;
17
+ bytePairNonUtfRankDecoder = new Map();
18
+ bytePairNonUtfSortedEncoder;
19
+ /**
20
+ * a reverse map of the bytePairRankDecoder,
21
+ * where the key is the string and the value is the rank
22
+ * values that cannot be represented as a string are present in `bytePairNonUtfSortedEncoder`
23
+ */
24
+ bytePairStringRankEncoder;
12
25
  tokenSplitRegex;
13
26
  specialTokensEncoder;
14
27
  specialTokensDecoder;
15
28
  specialTokenPatternRegex;
16
- stringDecoder;
17
29
  textEncoder = new TextEncoder();
18
30
  constructor({ mergeableBytePairRanks: bytePairEncoder, specialTokenMapping: specialTokenEncoder, tokenSplitRegex, }) {
19
- this.bytePairEncoder = bytePairEncoder;
20
- this.stringDecoder = new Map();
31
+ this.bytePairRankDecoder = bytePairEncoder;
32
+ this.bytePairStringRankEncoder = new Map();
21
33
  // size without array holes (which may be present in the encoder)
22
- this.bytePairEncoderSize = Object.keys(bytePairEncoder).length;
34
+ this.mergeableBytePairRankCount = Object.keys(bytePairEncoder).length;
23
35
  const binaryLookup = [];
24
36
  // forEach skips array holes:
25
37
  bytePairEncoder.forEach((value, rank) => {
26
38
  if (typeof value === 'string') {
27
- this.stringDecoder.set(value, rank);
39
+ this.bytePairStringRankEncoder.set(value, rank);
28
40
  return;
29
41
  }
30
42
  const byteArray = new Uint8Array(value);
31
43
  binaryLookup.push([byteArray, rank]);
32
- this.bytePairRanksDecoder.set(rank, byteArray);
44
+ this.bytePairNonUtfRankDecoder.set(rank, byteArray);
33
45
  });
34
- this.bytePairEncoderSortedLookup = binaryLookup.sort((a, b) => (0, utfUtil_js_1.compareUint8Arrays)(a[0], b[0]));
46
+ this.bytePairNonUtfSortedEncoder = binaryLookup.sort((a, b) => (0, utfUtil_js_1.compareUint8Arrays)(a[0], b[0]));
35
47
  this.specialTokensEncoder = specialTokenEncoder ?? new Map();
36
48
  this.specialTokensDecoder = specialTokenEncoder
37
49
  ? new Map([...specialTokenEncoder].map(([key, value]) => [value, key]))
38
50
  : new Map();
39
51
  this.tokenSplitRegex = tokenSplitRegex;
40
- const parts = [...this.specialTokensEncoder.keys()].map(util_js_1.escapeRegExp);
41
- const joinedParts = parts.join('|');
52
+ const escapedSpecialTokens = [...this.specialTokensEncoder.keys()].map(util_js_1.escapeRegExp);
53
+ const allSpecialTokensRegex = escapedSpecialTokens.join('|');
42
54
  try {
43
- this.specialTokenPatternRegex = new RegExp(joinedParts);
55
+ this.specialTokenPatternRegex = new RegExp(allSpecialTokensRegex);
44
56
  }
45
57
  catch {
46
58
  throw new Error('Invalid regular expression pattern.');
47
59
  }
48
60
  }
61
+ *encodeNativeGenerator(text, allowedSpecial) {
62
+ let startIndex = 0;
63
+ let lastTokenLength = 0;
64
+ while (true) {
65
+ const nextSpecialStartIndex = this.findNextSpecialStartIndex(text, allowedSpecial, startIndex);
66
+ const endIndex = nextSpecialStartIndex !== undefined
67
+ ? nextSpecialStartIndex
68
+ : text.length;
69
+ const textSegment = text.slice(startIndex, endIndex - startIndex);
70
+ for (const [match] of textSegment.matchAll(this.tokenSplitRegex)) {
71
+ const token = this.getBpeRankFromString(match);
72
+ if (token !== undefined) {
73
+ lastTokenLength = 1;
74
+ yield [token];
75
+ continue;
76
+ }
77
+ const tokens = this.bytePairEncode(match);
78
+ lastTokenLength = tokens.length;
79
+ yield tokens;
80
+ }
81
+ if (nextSpecialStartIndex !== undefined) {
82
+ const specialToken = text.slice(Math.max(0, nextSpecialStartIndex));
83
+ const specialTokenValue = this.specialTokensEncoder.get(specialToken);
84
+ if (specialTokenValue === undefined) {
85
+ throw new Error(`Special token "${specialToken}" is not in the special token encoder.`);
86
+ }
87
+ yield [specialTokenValue];
88
+ startIndex = nextSpecialStartIndex + specialToken.length;
89
+ lastTokenLength = 0;
90
+ }
91
+ else {
92
+ break;
93
+ }
94
+ }
95
+ return lastTokenLength;
96
+ }
97
+ encodeNative(text, allowedSpecial) {
98
+ let startIndex = 0;
99
+ const tokensArray = []; // Flat list to collect the tokens
100
+ // eslint-disable-next-line no-constant-condition
101
+ while (true) {
102
+ const nextSpecialStartIndex = this.findNextSpecialStartIndex(text, allowedSpecial, startIndex);
103
+ const endIndex = nextSpecialStartIndex !== undefined
104
+ ? nextSpecialStartIndex
105
+ : text.length;
106
+ const textSegment = text.slice(startIndex, endIndex - startIndex);
107
+ for (const [match] of textSegment.matchAll(this.tokenSplitRegex)) {
108
+ const token = this.getBpeRankFromString(match);
109
+ if (token !== undefined) {
110
+ tokensArray.push(token);
111
+ continue;
112
+ }
113
+ const tokens = this.bytePairEncode(match);
114
+ tokensArray.push(...tokens);
115
+ }
116
+ if (nextSpecialStartIndex !== undefined) {
117
+ const specialToken = text.slice(Math.max(0, nextSpecialStartIndex));
118
+ const specialTokenValue = this.specialTokensEncoder.get(specialToken);
119
+ if (specialTokenValue === undefined) {
120
+ throw new Error(`Special token "${specialToken}" is not in the special token encoder.`);
121
+ }
122
+ tokensArray.push(specialTokenValue);
123
+ startIndex = nextSpecialStartIndex + specialToken.length;
124
+ }
125
+ else {
126
+ break;
127
+ }
128
+ }
129
+ return tokensArray;
130
+ }
131
+ *decodeNativeGenerator(tokens) {
132
+ for (const token of tokens) {
133
+ const tokenBytes = this.tryDecodeToken(token);
134
+ if (tokenBytes) {
135
+ yield tokenBytes;
136
+ }
137
+ }
138
+ }
139
+ decodeNative(tokens) {
140
+ let decoded = '';
141
+ let intBuffer = emptyBuffer;
142
+ for (const token of tokens) {
143
+ const tokenBytes = this.tryDecodeToken(token);
144
+ if (tokenBytes === undefined) {
145
+ throw new Error(`Token ${token} is not in the byte pair encoder.`);
146
+ }
147
+ if (typeof tokenBytes === 'string') {
148
+ if (intBuffer !== emptyBuffer) {
149
+ decoded += exports.decoder.decode(intBuffer, { stream: true });
150
+ intBuffer = emptyBuffer;
151
+ }
152
+ decoded += tokenBytes;
153
+ }
154
+ else {
155
+ const newBuffer = new Uint8Array(intBuffer.length + tokenBytes.length);
156
+ newBuffer.set(intBuffer);
157
+ newBuffer.set(tokenBytes, intBuffer.length);
158
+ intBuffer = newBuffer;
159
+ }
160
+ }
161
+ if (intBuffer !== emptyBuffer) {
162
+ decoded += exports.decoder.decode(intBuffer, { stream: true });
163
+ }
164
+ return decoded;
165
+ }
166
+ async *decodeNativeAsyncIterable(tokens) {
167
+ for await (const token of tokens) {
168
+ const tokenBytesOrString = this.tryDecodeToken(token);
169
+ if (tokenBytesOrString) {
170
+ yield tokenBytesOrString;
171
+ }
172
+ }
173
+ }
49
174
  getBpeRankFromString(key) {
50
- return this.stringDecoder.get(key);
175
+ return this.bytePairStringRankEncoder.get(key);
51
176
  }
52
177
  getBpeRankFromStringOrThrow(key) {
53
178
  const value = this.getBpeRankFromString(key);
@@ -64,7 +189,7 @@ class BytePairEncodingCore {
64
189
  // Perform binary search on the binary keys
65
190
  const index = this.binarySearch(key);
66
191
  if (index !== -1) {
67
- return this.bytePairEncoderSortedLookup[index][1];
192
+ return this.bytePairNonUtfSortedEncoder[index][1];
68
193
  }
69
194
  return undefined;
70
195
  }
@@ -78,13 +203,14 @@ class BytePairEncodingCore {
78
203
  // Binary search on the binary keys
79
204
  binarySearch(key) {
80
205
  let low = 0;
81
- let high = this.bytePairEncoderSortedLookup.length - 1;
206
+ let high = this.bytePairNonUtfSortedEncoder.length - 1;
82
207
  while (low <= high) {
83
208
  // eslint-disable-next-line no-bitwise
84
209
  const mid = (low + high) >>> 1;
85
- const midKey = this.bytePairEncoderSortedLookup[mid][0];
210
+ const midKey = this.bytePairNonUtfSortedEncoder[mid][0];
86
211
  let cmp = 0;
87
- for (let i = 0; i < Math.min(midKey.length, key.length); i++) {
212
+ const maxLength = Math.min(midKey.length, key.length);
213
+ for (let i = 0; i < maxLength; i++) {
88
214
  cmp = midKey[i] - key[i];
89
215
  if (cmp !== 0)
90
216
  break;
@@ -104,80 +230,28 @@ class BytePairEncodingCore {
104
230
  }
105
231
  return -1;
106
232
  }
107
- *encodeNative(text, allowedSpecial) {
108
- let startIndex = 0;
109
- let lastTokenLength = 0;
110
- while (true) {
111
- const nextSpecialStartIndex = this.findNextSpecialStartIndex(text, allowedSpecial, startIndex, this.specialTokenPatternRegex);
112
- const endIndex = nextSpecialStartIndex !== undefined
113
- ? nextSpecialStartIndex
114
- : text.length;
115
- const textSegment = text.slice(startIndex, endIndex - startIndex);
116
- for (const [match] of textSegment.matchAll(this.tokenSplitRegex)) {
117
- const token = this.getBpeRankFromString(match);
118
- if (token !== undefined) {
119
- lastTokenLength = 1;
120
- yield [token];
121
- continue;
122
- }
123
- const tokens = this.bytePairEncode(match);
124
- lastTokenLength = tokens.length;
125
- yield tokens;
126
- }
127
- if (nextSpecialStartIndex !== undefined) {
128
- const specialToken = text.slice(Math.max(0, nextSpecialStartIndex));
129
- const specialTokenValue = this.specialTokensEncoder.get(specialToken);
130
- if (specialTokenValue === undefined) {
131
- throw new Error(`Special token "${specialToken}" is not in the special token encoder.`);
132
- }
133
- yield [specialTokenValue];
134
- startIndex = nextSpecialStartIndex + specialToken.length;
135
- lastTokenLength = 0;
136
- }
137
- else {
138
- break;
139
- }
140
- }
141
- return lastTokenLength;
142
- }
143
- findNextSpecialStartIndex(text, allowedSpecial, startIndex, specialRegex) {
233
+ findNextSpecialStartIndex(text, allowedSpecial, startIndex) {
144
234
  let searchIndex = startIndex;
145
235
  // eslint-disable-next-line no-constant-condition
146
236
  while (true) {
147
- const nextSpecialMatch = specialRegex.exec(text.slice(Math.max(0, searchIndex)));
237
+ const nextSpecialMatch = this.specialTokenPatternRegex.exec(text.slice(Math.max(0, searchIndex)));
148
238
  if (!nextSpecialMatch) {
149
239
  return undefined;
150
240
  }
151
- const [specialToken] = nextSpecialMatch;
241
+ const specialToken = nextSpecialMatch[0];
152
242
  if (allowedSpecial?.has(specialToken)) {
153
243
  return nextSpecialMatch.index + searchIndex;
154
244
  }
155
245
  searchIndex = nextSpecialMatch.index + searchIndex + 1;
156
246
  }
157
247
  }
158
- *decodeNative(tokens) {
159
- for (const token of tokens) {
160
- const tokenBytes = this.tryDecodeToken(token);
161
- if (tokenBytes) {
162
- yield tokenBytes;
163
- }
164
- }
165
- }
166
- async *decodeNativeAsync(tokens) {
167
- for await (const token of tokens) {
168
- const tokenBytesOrString = this.tryDecodeToken(token);
169
- if (tokenBytesOrString) {
170
- yield tokenBytesOrString;
171
- }
172
- }
173
- }
174
248
  tryDecodeToken(tokenRank) {
175
- const value = this.bytePairEncoder[tokenRank];
249
+ const value = this.bytePairRankDecoder[tokenRank];
176
250
  if (typeof value === 'string') {
177
251
  return value;
178
252
  }
179
253
  if (typeof value === 'object') {
180
- const fromBinary = this.bytePairRanksDecoder.get(tokenRank);
254
+ const fromBinary = this.bytePairNonUtfRankDecoder.get(tokenRank);
181
255
  if (fromBinary) {
182
256
  return fromBinary;
183
257
  }
@@ -189,80 +263,74 @@ class BytePairEncodingCore {
189
263
  return [this.getBpeRankFromStringOrThrow(input)];
190
264
  }
191
265
  const inputBytes = this.textEncoder.encode(input);
192
- return this.bytePairMerge(inputBytes, (start, end) => {
193
- const key = inputBytes.subarray(start, end);
194
- return this.getBpeRankFromBytesOrThrow(key);
195
- });
266
+ return this.bytePairMerge(inputBytes);
196
267
  }
197
268
  bytePairMerge(
198
269
  // Input array of bytes to process
199
- piece,
200
- // Function to apply to each final segment after merging
201
- getByteForRange) {
202
- // Create an array of partition objects. Each partition tracks the start index in 'piece'
203
- // and a rank value for adjacent pairs (initially set to positive infinity).
204
- const partitions = Array.from({ length: piece.length + 1 }, (_, i) => ({
205
- start: i,
206
- rank: Number.POSITIVE_INFINITY, // Rank starts at infinity (unmerged)
207
- }));
208
- // Helper function to get the rank of a byte pair starting at 'startIndex'.
209
- // 'skip' determines how far we look ahead (usually 0, for consecutive pairs).
210
- const getRank = (startIndex, skip) => {
211
- if (startIndex + skip + 2 >= partitions.length) {
212
- // Avoid out-of-bounds errors, return undefined when no valid pair exists
213
- return undefined;
270
+ piece) {
271
+ // 'starts' holds the start indices of each partition
272
+ const starts = [];
273
+ // 'ranks' holds the BPE ranks of each partition pair
274
+ const ranks = [];
275
+ // Helper function to get the rank of a byte pair starting at 'startIndex'
276
+ const getRank = (startIndex, pairStart = starts[startIndex], pairEnd = starts[startIndex + 2]) => {
277
+ if (pairEnd === undefined) {
278
+ // No valid pair exists
279
+ return Number.POSITIVE_INFINITY;
214
280
  }
215
- // Get the byte pair by extracting a subarray starting at 'startIndex' and ending at
216
- // the start of the partition after 'skip + 2'.
217
- const key = piece.subarray(partitions[startIndex].start, partitions[startIndex + skip + 2].start);
218
- // Retrieve the rank of this byte pair from the BPE rank function
219
- return this.getBpeRankFromBytes(key);
281
+ // Extract the byte pair
282
+ const key = piece.subarray(pairStart, pairEnd);
283
+ // Retrieve the BPE rank of this byte pair (if it exists)
284
+ const rank = this.getBpeRankFromBytes(key);
285
+ return rank ?? Number.POSITIVE_INFINITY;
220
286
  };
221
- // Initialize the ranks for all adjacent pairs in the array
222
- for (let i = 0; i < partitions.length - 2; i++) {
223
- // Get the rank for the pair starting at index 'i'
224
- const rank = getRank(i, 0);
225
- if (rank !== undefined) {
226
- // Assign the rank to the partition at index 'i'
227
- partitions[i].rank = rank;
287
+ // Initialize the 'starts' array with all possible start indices
288
+ for (let i = 0; i <= piece.length; i++) {
289
+ starts.push(i);
290
+ if (i < piece.length - 1) {
291
+ // Initialize the BPE values for all adjacent pairs
292
+ ranks.push(getRank(i, i, i + 2));
293
+ }
294
+ else {
295
+ // Initialize BPE values to infinity for the last pair
296
+ ranks.push(Number.POSITIVE_INFINITY);
228
297
  }
229
298
  }
230
299
  // Iteratively merge byte pairs until no more useful merges can be done
231
- while (partitions.length > 1) {
232
- let minRank = Number.POSITIVE_INFINITY;
233
- let minRankIdx = 0;
234
- // Find the partition with the minimum rank, i.e., the most important pair to merge next
235
- let i = 0;
236
- for (const partition of partitions) {
237
- if (partition.rank < minRank) {
238
- minRank = partition.rank;
239
- minRankIdx = i;
300
+ while (starts.length > 1) {
301
+ let lowestRank = Number.POSITIVE_INFINITY;
302
+ let lowestPartitionIndex = -1;
303
+ // Find the partition with the minimum rank
304
+ for (let i = 0; i < ranks.length - 1; i++) {
305
+ const rank = ranks[i];
306
+ if (rank < lowestRank) {
307
+ lowestRank = rank;
308
+ lowestPartitionIndex = i;
240
309
  }
241
- i++;
242
310
  }
243
311
  // If no valid pair is left to merge, exit the loop
244
- if (minRank === Number.POSITIVE_INFINITY) {
312
+ if (lowestRank === Number.POSITIVE_INFINITY ||
313
+ lowestPartitionIndex === -1) {
245
314
  break;
246
315
  }
247
- // Update the rank of the partition after the merged one
248
- partitions[minRankIdx].rank =
249
- getRank(minRankIdx, 1) ?? Number.POSITIVE_INFINITY;
250
- // Update the rank of the partition before the merged one (if exists)
251
- if (minRankIdx > 0) {
252
- partitions[minRankIdx - 1].rank =
253
- getRank(minRankIdx - 1, 1) ?? Number.POSITIVE_INFINITY;
316
+ // Merge the pair at 'lowestPartitionIndex' by removing the next start index
317
+ starts.splice(lowestPartitionIndex + 1, 1);
318
+ // Remove the BPE value of the merged pair
319
+ ranks.splice(lowestPartitionIndex, 1);
320
+ // Update the current merged pair's rank
321
+ ranks[lowestPartitionIndex] = getRank(lowestPartitionIndex);
322
+ // Update the rank of the previous pair, if it exists
323
+ if (lowestPartitionIndex > 0) {
324
+ ranks[lowestPartitionIndex - 1] = getRank(lowestPartitionIndex - 1);
254
325
  }
255
- // Merge by removing the partition after the one we just merged
256
- partitions.splice(minRankIdx + 1, 1);
257
326
  }
258
327
  // Create the final output by applying the transform function to each partitioned range
259
328
  const output = [];
260
- for (let i = 0; i < partitions.length - 1; i++) {
261
- output.push(getByteForRange(
262
- // start index
263
- partitions[i].start,
264
- // end index
265
- partitions[i + 1].start));
329
+ for (let i = 0; i < starts.length - 1; i++) {
330
+ const pairStart = starts[i];
331
+ const pairEnd = starts[i + 1];
332
+ const bpeValue = this.getBpeRankFromBytesOrThrow(piece.subarray(pairStart, pairEnd));
333
+ output.push(bpeValue);
266
334
  }
267
335
  return output;
268
336
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BytePairEncodingCore.js","sourceRoot":"","sources":["../src/BytePairEncodingCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BytePairEncodingCore.js","sourceRoot":"","sources":["../src/BytePairEncodingCore.ts"],"names":[],"mappings":";AAAA,gCAAgC;;;AAEhC,6CAA8E;AAC9E,uCAAwC;AAUxC,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;AAExB,QAAA,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;AAE9C,MAAa,oBAAoB;IACtB,0BAA0B,CAAQ;IAC3C;;;;OAIG;IACK,mBAAmB,CAAkB;IACrC,yBAAyB,GAAG,IAAI,GAAG,EAAsB,CAAA;IACzD,2BAA2B,CAAiC;IACpE;;;;OAIG;IACK,yBAAyB,CAAqB;IAC9C,eAAe,CAAQ;IACvB,oBAAoB,CAAqB;IACzC,oBAAoB,CAAqB;IACzC,wBAAwB,CAAQ;IAChC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IAEvC,YAAY,EACV,sBAAsB,EAAE,eAAe,EACvC,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,GACQ;QACvB,IAAI,CAAC,mBAAmB,GAAG,eAAe,CAAA;QAC1C,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,EAAkB,CAAA;QAE1D,iEAAiE;QACjE,IAAI,CAAC,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAA;QACrE,MAAM,YAAY,GAA2B,EAAE,CAAA;QAC/C,6BAA6B;QAC7B,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC/C,OAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;YACvC,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;YACpC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACrD,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,2BAA2B,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5D,IAAA,+BAAkB,EAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAA;QACD,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,IAAI,IAAI,GAAG,EAAkB,CAAA;QAC5E,IAAI,CAAC,oBAAoB,GAAG,mBAAmB;YAC7C,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,IAAI,GAAG,EAAkB,CAAA;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QAEtC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CACpE,sBAAY,CACb,CAAA;QACD,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5D,IAAI,CAAC;YACH,IAAI,CAAC,wBAAwB,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAA;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,CAAC,qBAAqB,CACpB,IAAY,EACZ,cAA4B;QAE5B,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,eAAe,GAAG,CAAC,CAAA;QAEvB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,CAC1D,IAAI,EACJ,cAAc,EACd,UAAU,CACX,CAAA;YAED,MAAM,QAAQ,GACZ,qBAAqB,KAAK,SAAS;gBACjC,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;YAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAA;YAEjE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,eAAe,GAAG,CAAC,CAAA;oBACnB,MAAM,CAAC,KAAK,CAAC,CAAA;oBAEb,SAAQ;gBACV,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBACzC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAA;gBAC/B,MAAM,MAAM,CAAA;YACd,CAAC;YAED,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAA;gBACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACrE,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CACb,kBAAkB,YAAY,wCAAwC,CACvE,CAAA;gBACH,CAAC;gBACD,MAAM,CAAC,iBAAiB,CAAC,CAAA;gBACzB,UAAU,GAAG,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAAA;gBACxD,eAAe,GAAG,CAAC,CAAA;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,cAA4B;QACrD,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,MAAM,WAAW,GAAa,EAAE,CAAA,CAAC,kCAAkC;QAEnE,iDAAiD;QACjD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,CAC1D,IAAI,EACJ,cAAc,EACd,UAAU,CACX,CAAA;YAED,MAAM,QAAQ,GACZ,qBAAqB,KAAK,SAAS;gBACjC,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;YAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAA;YAEjE,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAC9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAEvB,SAAQ;gBACV,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBACzC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;YAC7B,CAAC;YAED,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAA;gBACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;gBACrE,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CACb,kBAAkB,YAAY,wCAAwC,CACvE,CAAA;gBACH,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBACnC,UAAU,GAAG,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAAA;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAK;YACP,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,CAAC,qBAAqB,CACpB,MAAwB;QAExB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YAC7C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,UAAU,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,CAAC,MAAwB;QACnC,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,IAAI,SAAS,GAAG,WAAW,CAAA;QAE3B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YAC7C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,mCAAmC,CAAC,CAAA;YACpE,CAAC;YACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACnC,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;oBAC9B,OAAO,IAAI,eAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;oBACtD,SAAS,GAAG,WAAW,CAAA;gBACzB,CAAC;gBACD,OAAO,IAAI,UAAU,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;gBACtE,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBACxB,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;gBAC3C,SAAS,GAAG,SAAS,CAAA;YACvB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,eAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,CAAC,yBAAyB,CAC9B,MAA6B;QAE7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YACrD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,kBAAkB,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChD,CAAC;IAEO,2BAA2B,CAAC,GAAW;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,wDAAwD,GAAG,EAAE,CAC9D,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,mBAAmB,CAAC,GAAe;QACzC,MAAM,WAAW,GAAG,IAAA,+BAAkB,EAAC,GAAG,CAAC,CAAA;QAE3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;QAC/C,CAAC;QAED,2CAA2C;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,CAAA;QACpD,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,0BAA0B,CAAC,GAAe;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,wDAAwD,GAAG,CAAC,QAAQ,EAAE,EAAE,CACzE,CAAA;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,mCAAmC;IAC3B,YAAY,CAAC,GAAe;QAClC,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,IAAI,IAAI,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtD,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YACnB,sCAAsC;YACtC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC,CAAA;YACxD,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAA;gBAC1B,IAAI,GAAG,KAAK,CAAC;oBAAE,MAAK;YACtB,CAAC;YACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;YAClC,CAAC;YACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,OAAO,GAAG,CAAA;YACZ,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;YACf,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,GAAG,GAAG,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,CAAA;IACX,CAAC;IAEO,yBAAyB,CAC/B,IAAY,EACZ,cAAuC,EACvC,UAAkB;QAElB,IAAI,WAAW,GAAG,UAAU,CAAA;QAE5B,iDAAiD;QACjD,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CACzD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CACrC,CAAA;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,SAAS,CAAA;YAClB,CAAC;YAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;YAExC,IAAI,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,OAAO,gBAAgB,CAAC,KAAK,GAAG,WAAW,CAAA;YAC7C,CAAC;YAED,WAAW,GAAG,gBAAgB,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,SAAiB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAA;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAChE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAA;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACjD,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAA,oBAAO,EAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEjD,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAEO,aAAa;IACnB,kCAAkC;IAClC,KAAiB;QAEjB,qDAAqD;QACrD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,qDAAqD;QACrD,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,0EAA0E;QAC1E,MAAM,OAAO,GAAG,CACd,UAAkB,EAClB,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,EAC9B,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,EACxB,EAAE;YACV,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,uBAAuB;gBACvB,OAAO,MAAM,CAAC,iBAAiB,CAAA;YACjC,CAAC;YAED,wBAAwB;YACxB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAE9C,yDAAyD;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAA;YAC1C,OAAO,IAAI,IAAI,MAAM,CAAC,iBAAiB,CAAA;QACzC,CAAC,CAAA;QAED,gEAAgE;QAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,mDAAmD;gBACnD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACN,sDAAsD;gBACtD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAA;YACzC,IAAI,oBAAoB,GAAG,CAAC,CAAC,CAAA;YAE7B,2CAA2C;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;gBACtB,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC;oBACtB,UAAU,GAAG,IAAI,CAAA;oBACjB,oBAAoB,GAAG,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;YAED,mDAAmD;YACnD,IACE,UAAU,KAAK,MAAM,CAAC,iBAAiB;gBACvC,oBAAoB,KAAK,CAAC,CAAC,EAC3B,CAAC;gBACD,MAAK;YACP,CAAC;YAED,4EAA4E;YAC5E,MAAM,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1C,0CAA0C;YAC1C,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAA;YAErC,wCAAwC;YACxC,KAAK,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;YAE3D,qDAAqD;YACrD,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAA;YACrE,CAAC;QACH,CAAC;QAED,uFAAuF;QACvF,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAC9C,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CACnC,CAAA;YACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA1aD,oDA0aC"}
@@ -20,17 +20,18 @@ export declare class GptEncoding {
20
20
  static FimPrefix: string;
21
21
  static FimSuffix: string;
22
22
  modelName?: ModelName;
23
- private decoder;
24
23
  private bytePairEncodingCoreProcessor;
25
24
  private specialTokenMapping;
26
25
  private specialTokensSet;
27
26
  private allSpecialTokenRegex;
27
+ private defaultSpecialTokenConfig;
28
28
  private constructor();
29
29
  static getEncodingApi(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksFn): GptEncoding;
30
30
  static getEncodingApiForModel(modelName: ModelName, getMergeableRanks: GetMergeableRanksFn): GptEncoding;
31
31
  static getEncodingApiAsync(encodingName: EncodingName, getMergeableRanks: GetMergeableRanksAsyncFn): Promise<GptEncoding>;
32
32
  static getEncodingApiForModelAsync(modelName: ModelName, getMergeableRanks: GetMergeableRanksAsyncFn): Promise<GptEncoding>;
33
- encodeGenerator(lineToEncode: string, { allowedSpecial, disallowedSpecial }?: EncodeOptions): Generator<number[], number, undefined>;
33
+ private processSpecialTokens;
34
+ encodeGenerator(lineToEncode: string, encodeOptions?: EncodeOptions): Generator<number[], number, undefined>;
34
35
  encode(lineToEncode: string, encodeOptions?: EncodeOptions): number[];
35
36
  /**
36
37
  * Progressively tokenizes an OpenAI chat.
@@ -52,7 +53,8 @@ export declare class GptEncoding {
52
53
  * @returns {false | number} false if token limit is exceeded, otherwise the number of tokens
53
54
  */
54
55
  isWithinTokenLimit(input: string | Iterable<ChatMessage>, tokenLimit: number): false | number;
55
- decodeGenerator(inputTokensToDecode: Iterable<number>): Generator<string, void>;
56
- decodeAsyncGenerator(inputTokensToDecode: AsyncIterable<number>): AsyncGenerator<string, void>;
57
56
  decode(inputTokensToDecode: Iterable<number>): string;
57
+ decodeGenerator(inputTokensToDecode: Iterable<number>): Generator<string, void, void>;
58
+ decodeAsyncGenerator(inputTokensToDecode: AsyncIterable<number>): AsyncGenerator<string, void>;
59
+ decodeAsync(inputTokensToDecode: AsyncIterable<number>): Promise<string>;
58
60
  }