gpt-tokenizer 4.0.0 → 4.0.1
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.
- package/cjs/BytePairEncodingCore.js +70 -30
- package/cjs/BytePairEncodingCore.js.map +1 -1
- package/cjs/GptEncoding.d.ts +2 -2
- package/cjs/encoding/cl100k_base.d.ts +1 -1
- package/cjs/encoding/o200k_base.d.ts +1 -1
- package/cjs/encoding/o200k_harmony.d.ts +1 -1
- package/cjs/encoding/p50k_edit.d.ts +1 -1
- package/cjs/model/chat-latest.d.ts +1 -1
- package/cjs/model/chatgpt-4o-latest.d.ts +1 -1
- package/cjs/model/codex-mini-latest.d.ts +1 -1
- package/cjs/model/computer-use-preview-2025-03-11.d.ts +1 -1
- package/cjs/model/computer-use-preview.d.ts +1 -1
- package/cjs/model/daybreak-blue-latest.d.ts +1 -1
- package/cjs/model/daybreak-red-latest.d.ts +1 -1
- package/cjs/model/gpt-3.5-0301.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo-0125.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo-0613.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo-1106.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo-16k-0613.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo-instruct.d.ts +1 -1
- package/cjs/model/gpt-3.5-turbo.d.ts +1 -1
- package/cjs/model/gpt-3.5.d.ts +1 -1
- package/cjs/model/gpt-4-0125-preview.d.ts +1 -1
- package/cjs/model/gpt-4-0314.d.ts +1 -1
- package/cjs/model/gpt-4-0613.d.ts +1 -1
- package/cjs/model/gpt-4-1106-preview.d.ts +1 -1
- package/cjs/model/gpt-4-1106-vision-preview.d.ts +1 -1
- package/cjs/model/gpt-4-32k.d.ts +1 -1
- package/cjs/model/gpt-4-turbo-2024-04-09.d.ts +1 -1
- package/cjs/model/gpt-4-turbo-preview.d.ts +1 -1
- package/cjs/model/gpt-4-turbo.d.ts +1 -1
- package/cjs/model/gpt-4.1-2025-04-14.d.ts +1 -1
- package/cjs/model/gpt-4.1-mini-2025-04-14.d.ts +1 -1
- package/cjs/model/gpt-4.1-mini.d.ts +1 -1
- package/cjs/model/gpt-4.1-nano-2025-04-14.d.ts +1 -1
- package/cjs/model/gpt-4.1-nano.d.ts +1 -1
- package/cjs/model/gpt-4.1.d.ts +1 -1
- package/cjs/model/gpt-4.5-preview-2025-02-27.d.ts +1 -1
- package/cjs/model/gpt-4.5-preview.d.ts +1 -1
- package/cjs/model/gpt-4.d.ts +1 -1
- package/cjs/model/gpt-4o-2024-05-13.d.ts +1 -1
- package/cjs/model/gpt-4o-2024-08-06.d.ts +1 -1
- package/cjs/model/gpt-4o-2024-11-20.d.ts +1 -1
- package/cjs/model/gpt-4o-audio-preview-2024-10-01.d.ts +1 -1
- package/cjs/model/gpt-4o-audio-preview-2024-12-17.d.ts +1 -1
- package/cjs/model/gpt-4o-audio-preview-2025-06-03.d.ts +1 -1
- package/cjs/model/gpt-4o-audio-preview.d.ts +1 -1
- package/cjs/model/gpt-4o-mini-2024-07-18.d.ts +1 -1
- package/cjs/model/gpt-4o-mini-audio-preview-2024-12-17.d.ts +1 -1
- package/cjs/model/gpt-4o-mini-audio-preview.d.ts +1 -1
- package/cjs/model/gpt-4o-mini-search-preview-2025-03-11.d.ts +1 -1
- package/cjs/model/gpt-4o-mini-search-preview.d.ts +1 -1
- package/cjs/model/gpt-4o-mini.d.ts +1 -1
- package/cjs/model/gpt-4o-search-preview-2025-03-11.d.ts +1 -1
- package/cjs/model/gpt-4o-search-preview.d.ts +1 -1
- package/cjs/model/gpt-4o.d.ts +1 -1
- package/cjs/model/gpt-5-2025-08-07.d.ts +1 -1
- package/cjs/model/gpt-5-chat-latest.d.ts +1 -1
- package/cjs/model/gpt-5-codex.d.ts +1 -1
- package/cjs/model/gpt-5-mini-2025-08-07.d.ts +1 -1
- package/cjs/model/gpt-5-mini.d.ts +1 -1
- package/cjs/model/gpt-5-nano-2025-08-07.d.ts +1 -1
- package/cjs/model/gpt-5-nano.d.ts +1 -1
- package/cjs/model/gpt-5-pro-2025-10-06.d.ts +1 -1
- package/cjs/model/gpt-5-pro.d.ts +1 -1
- package/cjs/model/gpt-5.1-2025-11-13.d.ts +1 -1
- package/cjs/model/gpt-5.1-chat-latest.d.ts +1 -1
- package/cjs/model/gpt-5.1-codex-max.d.ts +1 -1
- package/cjs/model/gpt-5.1-codex-mini.d.ts +1 -1
- package/cjs/model/gpt-5.1-codex.d.ts +1 -1
- package/cjs/model/gpt-5.1.d.ts +1 -1
- package/cjs/model/gpt-5.2-2025-12-11.d.ts +1 -1
- package/cjs/model/gpt-5.2-chat-latest.d.ts +1 -1
- package/cjs/model/gpt-5.2-codex.d.ts +1 -1
- package/cjs/model/gpt-5.2-pro-2025-12-11.d.ts +1 -1
- package/cjs/model/gpt-5.2-pro.d.ts +1 -1
- package/cjs/model/gpt-5.2.d.ts +1 -1
- package/cjs/model/gpt-5.3-chat-latest.d.ts +1 -1
- package/cjs/model/gpt-5.3-codex.d.ts +1 -1
- package/cjs/model/gpt-5.4-2026-03-05.d.ts +1 -1
- package/cjs/model/gpt-5.4-mini-2026-03-17.d.ts +1 -1
- package/cjs/model/gpt-5.4-mini.d.ts +1 -1
- package/cjs/model/gpt-5.4-nano-2026-03-17.d.ts +1 -1
- package/cjs/model/gpt-5.4-nano.d.ts +1 -1
- package/cjs/model/gpt-5.4-pro-2026-03-05.d.ts +1 -1
- package/cjs/model/gpt-5.4-pro.d.ts +1 -1
- package/cjs/model/gpt-5.4.d.ts +1 -1
- package/cjs/model/gpt-5.5-2026-04-23.d.ts +1 -1
- package/cjs/model/gpt-5.5-pro-2026-04-23.d.ts +1 -1
- package/cjs/model/gpt-5.5-pro.d.ts +1 -1
- package/cjs/model/gpt-5.5.d.ts +1 -1
- package/cjs/model/gpt-5.6-cyber.d.ts +1 -1
- package/cjs/model/gpt-5.6-luna.d.ts +1 -1
- package/cjs/model/gpt-5.6-sol.d.ts +1 -1
- package/cjs/model/gpt-5.6-terra.d.ts +1 -1
- package/cjs/model/gpt-5.d.ts +1 -1
- package/cjs/model/gpt-audio-1.5.d.ts +1 -1
- package/cjs/model/gpt-audio-2025-08-28.d.ts +1 -1
- package/cjs/model/gpt-audio-mini-2025-10-06.d.ts +1 -1
- package/cjs/model/gpt-audio-mini-2025-12-15.d.ts +1 -1
- package/cjs/model/gpt-audio-mini.d.ts +1 -1
- package/cjs/model/gpt-audio.d.ts +1 -1
- package/cjs/model/gpt-image-1.d.ts +1 -1
- package/cjs/model/gpt-oss-120b.d.ts +1 -1
- package/cjs/model/gpt-oss-20b.d.ts +1 -1
- package/cjs/model/o1-2024-12-17.d.ts +1 -1
- package/cjs/model/o1-mini-2024-09-12.d.ts +1 -1
- package/cjs/model/o1-mini.d.ts +1 -1
- package/cjs/model/o1-preview-2024-09-12.d.ts +1 -1
- package/cjs/model/o1-preview.d.ts +1 -1
- package/cjs/model/o1-pro-2025-03-19.d.ts +1 -1
- package/cjs/model/o1-pro.d.ts +1 -1
- package/cjs/model/o1.d.ts +1 -1
- package/cjs/model/o3-2025-04-16.d.ts +1 -1
- package/cjs/model/o3-deep-research-2025-06-26.d.ts +1 -1
- package/cjs/model/o3-deep-research.d.ts +1 -1
- package/cjs/model/o3-mini-2025-01-31.d.ts +1 -1
- package/cjs/model/o3-mini.d.ts +1 -1
- package/cjs/model/o3-pro-2025-06-10.d.ts +1 -1
- package/cjs/model/o3-pro.d.ts +1 -1
- package/cjs/model/o3.d.ts +1 -1
- package/cjs/model/o4-mini-2025-04-16.d.ts +1 -1
- package/cjs/model/o4-mini-deep-research-2025-06-26.d.ts +1 -1
- package/cjs/model/o4-mini-deep-research.d.ts +1 -1
- package/cjs/model/o4-mini.d.ts +1 -1
- package/esm/BytePairEncodingCore.js +70 -30
- package/esm/BytePairEncodingCore.js.map +1 -1
- package/esm/GptEncoding.d.ts +2 -2
- package/esm/encoding/cl100k_base.d.ts +1 -1
- package/esm/encoding/o200k_base.d.ts +1 -1
- package/esm/encoding/o200k_harmony.d.ts +1 -1
- package/esm/encoding/p50k_edit.d.ts +1 -1
- package/esm/model/chat-latest.d.ts +1 -1
- package/esm/model/chatgpt-4o-latest.d.ts +1 -1
- package/esm/model/codex-mini-latest.d.ts +1 -1
- package/esm/model/computer-use-preview-2025-03-11.d.ts +1 -1
- package/esm/model/computer-use-preview.d.ts +1 -1
- package/esm/model/daybreak-blue-latest.d.ts +1 -1
- package/esm/model/daybreak-red-latest.d.ts +1 -1
- package/esm/model/gpt-3.5-0301.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo-0125.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo-0613.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo-1106.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo-16k-0613.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo-instruct.d.ts +1 -1
- package/esm/model/gpt-3.5-turbo.d.ts +1 -1
- package/esm/model/gpt-3.5.d.ts +1 -1
- package/esm/model/gpt-4-0125-preview.d.ts +1 -1
- package/esm/model/gpt-4-0314.d.ts +1 -1
- package/esm/model/gpt-4-0613.d.ts +1 -1
- package/esm/model/gpt-4-1106-preview.d.ts +1 -1
- package/esm/model/gpt-4-1106-vision-preview.d.ts +1 -1
- package/esm/model/gpt-4-32k.d.ts +1 -1
- package/esm/model/gpt-4-turbo-2024-04-09.d.ts +1 -1
- package/esm/model/gpt-4-turbo-preview.d.ts +1 -1
- package/esm/model/gpt-4-turbo.d.ts +1 -1
- package/esm/model/gpt-4.1-2025-04-14.d.ts +1 -1
- package/esm/model/gpt-4.1-mini-2025-04-14.d.ts +1 -1
- package/esm/model/gpt-4.1-mini.d.ts +1 -1
- package/esm/model/gpt-4.1-nano-2025-04-14.d.ts +1 -1
- package/esm/model/gpt-4.1-nano.d.ts +1 -1
- package/esm/model/gpt-4.1.d.ts +1 -1
- package/esm/model/gpt-4.5-preview-2025-02-27.d.ts +1 -1
- package/esm/model/gpt-4.5-preview.d.ts +1 -1
- package/esm/model/gpt-4.d.ts +1 -1
- package/esm/model/gpt-4o-2024-05-13.d.ts +1 -1
- package/esm/model/gpt-4o-2024-08-06.d.ts +1 -1
- package/esm/model/gpt-4o-2024-11-20.d.ts +1 -1
- package/esm/model/gpt-4o-audio-preview-2024-10-01.d.ts +1 -1
- package/esm/model/gpt-4o-audio-preview-2024-12-17.d.ts +1 -1
- package/esm/model/gpt-4o-audio-preview-2025-06-03.d.ts +1 -1
- package/esm/model/gpt-4o-audio-preview.d.ts +1 -1
- package/esm/model/gpt-4o-mini-2024-07-18.d.ts +1 -1
- package/esm/model/gpt-4o-mini-audio-preview-2024-12-17.d.ts +1 -1
- package/esm/model/gpt-4o-mini-audio-preview.d.ts +1 -1
- package/esm/model/gpt-4o-mini-search-preview-2025-03-11.d.ts +1 -1
- package/esm/model/gpt-4o-mini-search-preview.d.ts +1 -1
- package/esm/model/gpt-4o-mini.d.ts +1 -1
- package/esm/model/gpt-4o-search-preview-2025-03-11.d.ts +1 -1
- package/esm/model/gpt-4o-search-preview.d.ts +1 -1
- package/esm/model/gpt-4o.d.ts +1 -1
- package/esm/model/gpt-5-2025-08-07.d.ts +1 -1
- package/esm/model/gpt-5-chat-latest.d.ts +1 -1
- package/esm/model/gpt-5-codex.d.ts +1 -1
- package/esm/model/gpt-5-mini-2025-08-07.d.ts +1 -1
- package/esm/model/gpt-5-mini.d.ts +1 -1
- package/esm/model/gpt-5-nano-2025-08-07.d.ts +1 -1
- package/esm/model/gpt-5-nano.d.ts +1 -1
- package/esm/model/gpt-5-pro-2025-10-06.d.ts +1 -1
- package/esm/model/gpt-5-pro.d.ts +1 -1
- package/esm/model/gpt-5.1-2025-11-13.d.ts +1 -1
- package/esm/model/gpt-5.1-chat-latest.d.ts +1 -1
- package/esm/model/gpt-5.1-codex-max.d.ts +1 -1
- package/esm/model/gpt-5.1-codex-mini.d.ts +1 -1
- package/esm/model/gpt-5.1-codex.d.ts +1 -1
- package/esm/model/gpt-5.1.d.ts +1 -1
- package/esm/model/gpt-5.2-2025-12-11.d.ts +1 -1
- package/esm/model/gpt-5.2-chat-latest.d.ts +1 -1
- package/esm/model/gpt-5.2-codex.d.ts +1 -1
- package/esm/model/gpt-5.2-pro-2025-12-11.d.ts +1 -1
- package/esm/model/gpt-5.2-pro.d.ts +1 -1
- package/esm/model/gpt-5.2.d.ts +1 -1
- package/esm/model/gpt-5.3-chat-latest.d.ts +1 -1
- package/esm/model/gpt-5.3-codex.d.ts +1 -1
- package/esm/model/gpt-5.4-2026-03-05.d.ts +1 -1
- package/esm/model/gpt-5.4-mini-2026-03-17.d.ts +1 -1
- package/esm/model/gpt-5.4-mini.d.ts +1 -1
- package/esm/model/gpt-5.4-nano-2026-03-17.d.ts +1 -1
- package/esm/model/gpt-5.4-nano.d.ts +1 -1
- package/esm/model/gpt-5.4-pro-2026-03-05.d.ts +1 -1
- package/esm/model/gpt-5.4-pro.d.ts +1 -1
- package/esm/model/gpt-5.4.d.ts +1 -1
- package/esm/model/gpt-5.5-2026-04-23.d.ts +1 -1
- package/esm/model/gpt-5.5-pro-2026-04-23.d.ts +1 -1
- package/esm/model/gpt-5.5-pro.d.ts +1 -1
- package/esm/model/gpt-5.5.d.ts +1 -1
- package/esm/model/gpt-5.6-cyber.d.ts +1 -1
- package/esm/model/gpt-5.6-luna.d.ts +1 -1
- package/esm/model/gpt-5.6-sol.d.ts +1 -1
- package/esm/model/gpt-5.6-terra.d.ts +1 -1
- package/esm/model/gpt-5.d.ts +1 -1
- package/esm/model/gpt-audio-1.5.d.ts +1 -1
- package/esm/model/gpt-audio-2025-08-28.d.ts +1 -1
- package/esm/model/gpt-audio-mini-2025-10-06.d.ts +1 -1
- package/esm/model/gpt-audio-mini-2025-12-15.d.ts +1 -1
- package/esm/model/gpt-audio-mini.d.ts +1 -1
- package/esm/model/gpt-audio.d.ts +1 -1
- package/esm/model/gpt-image-1.d.ts +1 -1
- package/esm/model/gpt-oss-120b.d.ts +1 -1
- package/esm/model/gpt-oss-20b.d.ts +1 -1
- package/esm/model/o1-2024-12-17.d.ts +1 -1
- package/esm/model/o1-mini-2024-09-12.d.ts +1 -1
- package/esm/model/o1-mini.d.ts +1 -1
- package/esm/model/o1-preview-2024-09-12.d.ts +1 -1
- package/esm/model/o1-preview.d.ts +1 -1
- package/esm/model/o1-pro-2025-03-19.d.ts +1 -1
- package/esm/model/o1-pro.d.ts +1 -1
- package/esm/model/o1.d.ts +1 -1
- package/esm/model/o3-2025-04-16.d.ts +1 -1
- package/esm/model/o3-deep-research-2025-06-26.d.ts +1 -1
- package/esm/model/o3-deep-research.d.ts +1 -1
- package/esm/model/o3-mini-2025-01-31.d.ts +1 -1
- package/esm/model/o3-mini.d.ts +1 -1
- package/esm/model/o3-pro-2025-06-10.d.ts +1 -1
- package/esm/model/o3-pro.d.ts +1 -1
- package/esm/model/o3.d.ts +1 -1
- package/esm/model/o4-mini-2025-04-16.d.ts +1 -1
- package/esm/model/o4-mini-deep-research-2025-06-26.d.ts +1 -1
- package/esm/model/o4-mini-deep-research.d.ts +1 -1
- package/esm/model/o4-mini.d.ts +1 -1
- package/package.json +1 -1
- package/src/BytePairEncodingCore.test.ts +13 -0
- package/src/BytePairEncodingCore.ts +89 -67
|
@@ -453,87 +453,109 @@ export class BytePairEncodingCore {
|
|
|
453
453
|
// Input array of bytes to process
|
|
454
454
|
piece: Uint8Array,
|
|
455
455
|
): number[] {
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
// '
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
//
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
const key = piece.subarray(pairStart, pairEnd)
|
|
474
|
-
|
|
475
|
-
// Retrieve the BPE rank of this byte pair (if it exists)
|
|
476
|
-
const rank = this.getBpeRankFromBytes(key)
|
|
456
|
+
const { length } = piece
|
|
457
|
+
// Partitions form a linked list over byte offsets: a live partition starting at
|
|
458
|
+
// offset 'i' spans [i, next[i]). 'pairRanks[i]' is the rank of merging it with
|
|
459
|
+
// the partition after it. Merges come off a min-heap ordered by (rank, offset),
|
|
460
|
+
// which picks the same pair as scanning for the lowest rank, leftmost first,
|
|
461
|
+
// without rescanning the piece after every merge.
|
|
462
|
+
const next = new Int32Array(length + 1)
|
|
463
|
+
const previous = new Int32Array(length + 1)
|
|
464
|
+
const pairRanks = new Float64Array(length + 1)
|
|
465
|
+
const live = new Uint8Array(length + 1)
|
|
466
|
+
|
|
467
|
+
const getPairRank = (startIndex: number): number => {
|
|
468
|
+
const middle = next[startIndex]!
|
|
469
|
+
if (middle >= length) return Number.POSITIVE_INFINITY
|
|
470
|
+
const rank = this.getBpeRankFromBytes(
|
|
471
|
+
piece.subarray(startIndex, next[middle]!),
|
|
472
|
+
)
|
|
477
473
|
return rank ?? Number.POSITIVE_INFINITY
|
|
478
474
|
}
|
|
479
475
|
|
|
480
|
-
//
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
476
|
+
// Heap entries are packed as [rank, startIndex] pairs in a flat array
|
|
477
|
+
const heap: number[] = []
|
|
478
|
+
const isLower = (a: number, b: number) =>
|
|
479
|
+
heap[a]! < heap[b]! ||
|
|
480
|
+
(heap[a] === heap[b] && heap[a + 1]! < heap[b + 1]!)
|
|
481
|
+
const swap = (a: number, b: number) => {
|
|
482
|
+
const rank = heap[a]!
|
|
483
|
+
const startIndex = heap[a + 1]!
|
|
484
|
+
heap[a] = heap[b]!
|
|
485
|
+
heap[a + 1] = heap[b + 1]!
|
|
486
|
+
heap[b] = rank
|
|
487
|
+
heap[b + 1] = startIndex
|
|
490
488
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
const rank = ranks[i]!
|
|
500
|
-
if (rank < lowestRank) {
|
|
501
|
-
lowestRank = rank
|
|
502
|
-
lowestPartitionIndex = i
|
|
503
|
-
}
|
|
489
|
+
const push = (rank: number, startIndex: number) => {
|
|
490
|
+
heap.push(rank, startIndex)
|
|
491
|
+
let index = heap.length - 2
|
|
492
|
+
while (index > 0) {
|
|
493
|
+
const parent = (((index >> 1) - 1) >> 1) << 1
|
|
494
|
+
if (!isLower(index, parent)) break
|
|
495
|
+
swap(index, parent)
|
|
496
|
+
index = parent
|
|
504
497
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
498
|
+
}
|
|
499
|
+
const pop = () => {
|
|
500
|
+
const last = heap.length - 2
|
|
501
|
+
swap(0, last)
|
|
502
|
+
const rank = heap[last]!
|
|
503
|
+
const startIndex = heap[last + 1]!
|
|
504
|
+
heap.length = last
|
|
505
|
+
let index = 0
|
|
506
|
+
while (true) {
|
|
507
|
+
const left = index * 2 + 2
|
|
508
|
+
const right = left + 2
|
|
509
|
+
let lowest = index
|
|
510
|
+
if (left < heap.length && isLower(left, lowest)) lowest = left
|
|
511
|
+
if (right < heap.length && isLower(right, lowest)) lowest = right
|
|
512
|
+
if (lowest === index) break
|
|
513
|
+
swap(index, lowest)
|
|
514
|
+
index = lowest
|
|
512
515
|
}
|
|
516
|
+
return [rank, startIndex] as const
|
|
517
|
+
}
|
|
513
518
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
519
|
+
for (let i = 0; i <= length; i++) {
|
|
520
|
+
next[i] = i + 1
|
|
521
|
+
previous[i] = i - 1
|
|
522
|
+
live[i] = 1
|
|
523
|
+
}
|
|
524
|
+
for (let i = 0; i < length - 1; i++) {
|
|
525
|
+
pairRanks[i] = getPairRank(i)
|
|
526
|
+
if (pairRanks[i] !== Number.POSITIVE_INFINITY) push(pairRanks[i]!, i)
|
|
527
|
+
}
|
|
518
528
|
|
|
519
|
-
|
|
520
|
-
|
|
529
|
+
// Iteratively merge byte pairs until no more useful merges can be done
|
|
530
|
+
while (heap.length > 0) {
|
|
531
|
+
const [rank, startIndex] = pop()
|
|
532
|
+
// Skip entries made stale by an earlier merge
|
|
533
|
+
if (!live[startIndex] || pairRanks[startIndex] !== rank) continue
|
|
534
|
+
|
|
535
|
+
// Merge the partition at 'startIndex' with the one after it
|
|
536
|
+
const merged = next[startIndex]!
|
|
537
|
+
live[merged] = 0
|
|
538
|
+
next[startIndex] = next[merged]!
|
|
539
|
+
previous[next[merged]!] = startIndex
|
|
540
|
+
|
|
541
|
+
pairRanks[startIndex] = getPairRank(startIndex)
|
|
542
|
+
if (pairRanks[startIndex] !== Number.POSITIVE_INFINITY) {
|
|
543
|
+
push(pairRanks[startIndex]!, startIndex)
|
|
544
|
+
}
|
|
521
545
|
|
|
522
|
-
|
|
523
|
-
if (
|
|
524
|
-
|
|
546
|
+
const before = previous[startIndex]!
|
|
547
|
+
if (before >= 0) {
|
|
548
|
+
pairRanks[before] = getPairRank(before)
|
|
549
|
+
if (pairRanks[before] !== Number.POSITIVE_INFINITY) {
|
|
550
|
+
push(pairRanks[before]!, before)
|
|
551
|
+
}
|
|
525
552
|
}
|
|
526
553
|
}
|
|
527
554
|
|
|
528
555
|
// Create the final output by applying the transform function to each partitioned range
|
|
529
556
|
const output: number[] = []
|
|
530
|
-
for (let i = 0; i <
|
|
531
|
-
|
|
532
|
-
const pairEnd = starts[i + 1]
|
|
533
|
-
const bpeValue = this.getBpeRankFromBytesOrThrow(
|
|
534
|
-
piece.subarray(pairStart, pairEnd),
|
|
535
|
-
)
|
|
536
|
-
output.push(bpeValue)
|
|
557
|
+
for (let i = 0; i < length; i = next[i]!) {
|
|
558
|
+
output.push(this.getBpeRankFromBytesOrThrow(piece.subarray(i, next[i]!)))
|
|
537
559
|
}
|
|
538
560
|
return output
|
|
539
561
|
}
|