token-vocabs 0.0.1 → 0.3.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.
- package/README.md +170 -0
- package/all.d.ts +3 -0
- package/all.js +1 -0
- package/chunks/chunk.js +1 -0
- package/chunks/decompress.js +3 -0
- package/chunks/main.js +2 -0
- package/deepseek.msgpack.br +0 -0
- package/gemma.msgpack.br +0 -0
- package/glm.msgpack.br +0 -0
- package/gpt.msgpack.br +0 -0
- package/hy.msgpack.br +0 -0
- package/kimi.msgpack.br +0 -0
- package/lib/api.d.ts +29 -0
- package/lib/data.d.ts +8 -0
- package/lib/decompressBrotli.d.ts +2 -0
- package/lib/modelAssets/base/ModelAssetBundleLoader.d.ts +6 -0
- package/lib/modelSelection.d.ts +4 -0
- package/lib/models.d.ts +144 -0
- package/lib/structuredData.d.ts +2 -0
- package/lib/tiktoken.d.ts +4 -0
- package/lib/tokenization.d.ts +38 -0
- package/lib/tokenizers/ClipTokenizer.d.ts +25 -0
- package/lib/tokenizers/HuggingFaceTokenizer.d.ts +29 -0
- package/lib/tokenizers/TiktokenTokenizer.d.ts +20 -0
- package/lib/tokenizers/base/BaseTokenizer.d.ts +13 -0
- package/lib/tokenizers/index.d.ts +11 -0
- package/main.d.ts +3 -0
- package/main.js +1 -0
- package/mimo.msgpack.br +0 -0
- package/minimax.msgpack.br +0 -0
- package/package.json +47 -1
- package/qwen.msgpack.br +0 -0
- package/sdxl.msgpack.br +0 -0
- package/step.msgpack.br +0 -0
- package/tiktoken_bg.wasm +0 -0
- package/index.d.ts +0 -6
- package/index.js +0 -1
- package/readme.md +0 -1
- /package/{license.txt → LICENSE} +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# token-vocabs
|
|
2
|
+
|
|
3
|
+
Count tokens or inspect token IDs across several modern tokenizer families from one local, offline-friendly package.
|
|
4
|
+
|
|
5
|
+
## Supported models
|
|
6
|
+
|
|
7
|
+
- GPT → `o200k_base`
|
|
8
|
+
- Gemma 4 31B it
|
|
9
|
+
- Qwen 3.6 27B
|
|
10
|
+
- Kimi K2.6
|
|
11
|
+
- DeepSeek V4 Pro
|
|
12
|
+
- MiMo V2.5 Pro
|
|
13
|
+
- Stable Diffusion XL
|
|
14
|
+
- GLM 5.1
|
|
15
|
+
- MiniMax M2.7
|
|
16
|
+
- Hy3 Preview
|
|
17
|
+
- Step 3.7 Flash
|
|
18
|
+
|
|
19
|
+
## Highlights
|
|
20
|
+
|
|
21
|
+
- offline at runtime once the vendored assets are present
|
|
22
|
+
- browser-friendly once bundled
|
|
23
|
+
- exact golden outputs for the core sample fixture
|
|
24
|
+
- one Brotli-compressed MessagePack asset bundle per model
|
|
25
|
+
- browser Brotli decompression with a bundled JS fallback where native stream support is missing
|
|
26
|
+
- Rolldown browser builds that emit binary `.msgpack.br` vocabulary bundles, shared chunks and the required WASM asset
|
|
27
|
+
- async auto-loading API plus loaded-only sync helpers
|
|
28
|
+
- one small single-model API for counts, token IDs and byte offsets
|
|
29
|
+
- generated tokenizer assets via `bun run fetch`
|
|
30
|
+
- publish-ready browser `dist/` builds that keep vocabularies outside the JavaScript entry, emit the required WASM files and include package metadata plus declarations
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import tokenize from 'token-vocabs'
|
|
36
|
+
|
|
37
|
+
console.dir(await tokenize('mind goblin', 'gpt'))
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
import {count} from 'token-vocabs'
|
|
42
|
+
|
|
43
|
+
console.dir(await count(new TextEncoder().encode('mind goblin'), {model: 'gpt'}))
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import {load, tokenizeLoaded} from 'token-vocabs'
|
|
48
|
+
|
|
49
|
+
await load(['gpt', 'deepseek'])
|
|
50
|
+
console.dir(tokenizeLoaded('mind goblin', 'gpt'))
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Example output
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
await count('mind goblin', 'gpt')
|
|
57
|
+
// 3
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
await tokenize('mind goblin', 'gpt')
|
|
62
|
+
// {
|
|
63
|
+
// offsets: [4, 8],
|
|
64
|
+
// tokens: [77021, 18778, 4724],
|
|
65
|
+
// }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## API
|
|
69
|
+
|
|
70
|
+
### `async count(textOrBytes, optionsOrModel)`
|
|
71
|
+
|
|
72
|
+
Returns the token count for exactly one model and loads the required vocabulary bundle on demand.
|
|
73
|
+
|
|
74
|
+
`Uint8Array` input is decoded as UTF-8.
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
await count('mind goblin', 'sdxl')
|
|
78
|
+
await count('mind goblin', {model: 'gpt'})
|
|
79
|
+
await count(new TextEncoder().encode('mind goblin'), 'gpt')
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### `countLoaded(textOrBytes, optionsOrModel)`
|
|
83
|
+
|
|
84
|
+
Synchronous count helper that uses the existing in-memory tokenizer state and throws if the requested vocabulary is not loaded yet.
|
|
85
|
+
|
|
86
|
+
This is useful after `await load()` or after a previous `await count()` / `await tokenize()` call has already loaded the model.
|
|
87
|
+
|
|
88
|
+
### `async tokenize(textOrBytes, optionsOrModel)`
|
|
89
|
+
|
|
90
|
+
Returns a `RawTokenizeResult` for exactly one model and loads the required vocabulary bundle on demand.
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
await tokenize('mind goblin', 'gpt')
|
|
94
|
+
await tokenize('mind goblin', {model: 'gpt'})
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### `tokenizeLoaded(textOrBytes, optionsOrModel)`
|
|
98
|
+
|
|
99
|
+
Synchronous tokenization helper that reuses already loaded vocabularies and throws if the requested model is not in memory yet.
|
|
100
|
+
|
|
101
|
+
The result shape is:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
type RawTokenizeResult = {
|
|
105
|
+
offsets: number[]
|
|
106
|
+
tokens: number[]
|
|
107
|
+
processedInput?: string | Uint8Array
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`offsets` omits the first token’s implicit `0` byte start to save one array slot.
|
|
112
|
+
|
|
113
|
+
If a tokenizer normalizes or otherwise preprocesses the input, `processedInput` contains the effective tokenizer input. Its type matches the input kind – string in, string out; `Uint8Array` in, `Uint8Array` out.
|
|
114
|
+
|
|
115
|
+
If you need results for several models, call `count()` or `tokenize()` once per model and combine the results yourself.
|
|
116
|
+
|
|
117
|
+
### `async load(modelSelection?)`
|
|
118
|
+
|
|
119
|
+
Preloads one or more model vocabularies into memory.
|
|
120
|
+
|
|
121
|
+
- `await load('gpt')` → resolves to `'gpt'`
|
|
122
|
+
- `await load(['gpt', 'deepseek'])` → resolves to `['gpt', 'deepseek']`
|
|
123
|
+
- `await load()` → loads every supported model and resolves to `modelIds`
|
|
124
|
+
|
|
125
|
+
### `free(modelId?)`
|
|
126
|
+
|
|
127
|
+
Releases a loaded model from memory, or every loaded model if no argument is provided.
|
|
128
|
+
|
|
129
|
+
### `modelIds`
|
|
130
|
+
|
|
131
|
+
Exports the supported model IDs in stable default order.
|
|
132
|
+
|
|
133
|
+
### `models`
|
|
134
|
+
|
|
135
|
+
Exports model metadata, including the original upstream source URLs used by `bun run fetch`.
|
|
136
|
+
|
|
137
|
+
### `token-vocabs/browser`
|
|
138
|
+
|
|
139
|
+
Browser entry with the same `count()`, `countLoaded()`, `tokenize()`, `tokenizeLoaded()`, `load()` and `free()` API as the desktop entry.
|
|
140
|
+
|
|
141
|
+
It loads the `.msgpack.br` asset bundles via `fetch()`.
|
|
142
|
+
|
|
143
|
+
### `token-vocabs/browser/all`
|
|
144
|
+
|
|
145
|
+
Eager browser entry that runs `await load()` at module initialization time so `countLoaded()` and `tokenizeLoaded()` work immediately after import.
|
|
146
|
+
|
|
147
|
+
## Distribution layout
|
|
148
|
+
|
|
149
|
+
The published browser package exposes `token-vocabs` and `token-vocabs/browser` as the lazy entry backed by `main.js`, plus `token-vocabs/browser/all` as the eager entry backed by `all.js`.
|
|
150
|
+
|
|
151
|
+
It also contains:
|
|
152
|
+
|
|
153
|
+
- one Brotli-compressed MessagePack asset bundle per model at the package root, shared chunks and the required WASM asset
|
|
154
|
+
- `package.json`, `README.md`, `LICENSE` and declaration files so the folder can be published on its own
|
|
155
|
+
|
|
156
|
+
Example lazy browser usage from the published package:
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
import {countLoaded, load} from 'token-vocabs/browser'
|
|
160
|
+
|
|
161
|
+
await load(['gpt', 'deepseek'])
|
|
162
|
+
console.dir(countLoaded('mind goblin', 'deepseek'))
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Notes
|
|
166
|
+
|
|
167
|
+
- `sdxl` intentionally implements the shared CLIP BPE core used by SDXL without auto-adding BOS/EOS tokens.
|
|
168
|
+
- GPT uses `tiktoken`’s built-in `o200k_base` implementation, but the upstream encoder payload is still fetched and converted to MessagePack for completeness.
|
|
169
|
+
- Structured tokenizer payloads are stored inside per-model `.msgpack.br` bundles and decompressed after loading.
|
|
170
|
+
- Tokenizer assets are large. That is inherent to exact offline tokenization.
|
package/all.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {count, countLoaded, free, load, modelIds, models, tokenize, tokenizeLoaded} from './main.js'
|
|
2
|
+
export {default} from './main.js'
|
|
3
|
+
export type {CountOptions, CountResult, CountTokensOptions, CountTokensResult, ModelId, ModelSelection, RawTokenizeResult, TokenizeInput, TokenizeOptions, TokenizeResult} from './main.js'
|
package/all.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./chunks/main.js";await n();export{s as count,r as countLoaded,e as default,e as tokenize,a as free,n as load,o as modelIds,t as models,i as tokenizeLoaded};
|
package/chunks/chunk.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{s as n,l as r,o as t};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{t as e}from"./chunk.js";var t=e((e=>{function t(e){this.buffer=e,this.pos=0}t.prototype.read=function(e,t,n){this.pos+n>this.buffer.length&&(n=this.buffer.length-this.pos);for(var r=0;r<n;r++)e[t+r]=this.buffer[this.pos+r];return this.pos+=n,n},e.BrotliInput=t;function n(e){this.buffer=e,this.pos=0}n.prototype.write=function(e,t){if(this.pos+t>this.buffer.length)throw Error(`Output buffer is not large enough`);return this.buffer.set(e.subarray(0,t),this.pos),this.pos+=t,t},e.BrotliOutput=n})),n=e(((e,t)=>{var n=4096,r=2*n+32,i=2*n-1,a=new Uint32Array([0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215]);function o(e){this.buf_=new Uint8Array(r),this.input_=e,this.reset()}o.READ_SIZE=n,o.IBUF_MASK=i,o.prototype.reset=function(){this.buf_ptr_=0,this.val_=0,this.pos_=0,this.bit_pos_=0,this.bit_end_pos_=0,this.eos_=0,this.readMoreInput();for(var e=0;e<4;e++)this.val_|=this.buf_[this.pos_]<<8*e,++this.pos_;return this.bit_end_pos_>0},o.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw Error(`Unexpected end of input `+this.bit_pos_+` `+this.bit_end_pos_)}else{var e=this.buf_ptr_,t=this.input_.read(this.buf_,e,n);if(t<0)throw Error(`Unexpected end of input`);if(t<n){this.eos_=1;for(var r=0;r<32;r++)this.buf_[e+t+r]=0}if(e===0){for(var r=0;r<32;r++)this.buf_[(n<<1)+r]=this.buf_[r];this.buf_ptr_=n}else this.buf_ptr_=0;this.bit_end_pos_+=t<<3}},o.prototype.fillBitWindow=function(){for(;this.bit_pos_>=8;)this.val_>>>=8,this.val_|=this.buf_[this.pos_&i]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0},o.prototype.readBits=function(e){32-this.bit_pos_<e&&this.fillBitWindow();var t=this.val_>>>this.bit_pos_&a[e];return this.bit_pos_+=e,t},t.exports=o})),r=e((e=>{e.byteLength=c,e.toByteArray=u,e.fromByteArray=p;for(var t=[],n=[],r=typeof Uint8Array<`u`?Uint8Array:Array,i=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,a=0,o=i.length;a<o;++a)t[a]=i[a],n[i.charCodeAt(a)]=a;n[45]=62,n[95]=63;function s(e){var t=e.length;if(t%4>0)throw Error(`Invalid string. Length must be a multiple of 4`);var n=e.indexOf(`=`);n===-1&&(n=t);var r=n===t?0:4-n%4;return[n,r]}function c(e){var t=s(e),n=t[0],r=t[1];return(n+r)*3/4-r}function l(e,t,n){return(t+n)*3/4-n}function u(e){var t,i=s(e),a=i[0],o=i[1],c=new r(l(e,a,o)),u=0,d=o>0?a-4:a,f;for(f=0;f<d;f+=4)t=n[e.charCodeAt(f)]<<18|n[e.charCodeAt(f+1)]<<12|n[e.charCodeAt(f+2)]<<6|n[e.charCodeAt(f+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=t&255;return o===2&&(t=n[e.charCodeAt(f)]<<2|n[e.charCodeAt(f+1)]>>4,c[u++]=t&255),o===1&&(t=n[e.charCodeAt(f)]<<10|n[e.charCodeAt(f+1)]<<4|n[e.charCodeAt(f+2)]>>2,c[u++]=t>>8&255,c[u++]=t&255),c}function d(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function f(e,t,n){for(var r,i=[],a=t;a<n;a+=3)r=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(e[a+2]&255),i.push(d(r));return i.join(``)}function p(e){for(var n,r=e.length,i=r%3,a=[],o=16383,s=0,c=r-i;s<c;s+=o)a.push(f(e,s,s+o>c?c:s+o));return i===1?(n=e[r-1],a.push(t[n>>2]+t[n<<4&63]+`==`)):i===2&&(n=(e[r-2]<<8)+e[r-1],a.push(t[n>>10]+t[n>>4&63]+t[n<<2&63]+`=`)),a.join(``)}})),i=e(((e,t)=>{t.exports=`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`})),a=e((e=>{var t=r();e.init=function(){var e=d().BrotliDecompressBuffer;return e(t.toByteArray(i()))}})),o=e((e=>{var t=a();e.init=function(){e.dictionary=t.init()},e.offsetsByLength=new Uint32Array([0,0,0,0,0,4096,9216,21504,35840,44032,53248,63488,74752,87040,93696,100864,104704,106752,108928,113536,115968,118528,119872,121280,122016]),e.sizeBitsByLength=new Uint8Array([0,0,0,0,10,10,11,11,10,10,10,10,10,9,9,8,7,7,8,7,7,6,6,5,5]),e.minDictionaryWordLength=4,e.maxDictionaryWordLength=24})),s=e((e=>{function t(e,t){this.bits=e,this.value=t}e.HuffmanCode=t;var n=15;function r(e,t){for(var n=1<<t-1;e&n;)n>>=1;return(e&n-1)+n}function i(e,n,r,i,a){do i-=r,e[n+i]=new t(a.bits,a.value);while(i>0)}function a(e,t,r){for(var i=1<<t-r;t<n&&(i-=e[t],!(i<=0));)++t,i<<=1;return t-r}e.BrotliBuildHuffmanTable=function(e,o,s,c,l){var u=o,d,f,p,m,h,g,_,v,y,b,x,S=new Int32Array(n+1),C=new Int32Array(n+1);for(x=new Int32Array(l),p=0;p<l;p++)S[c[p]]++;for(C[1]=0,f=1;f<n;f++)C[f+1]=C[f]+S[f];for(p=0;p<l;p++)c[p]!==0&&(x[C[c[p]]++]=p);if(v=s,y=1<<v,b=y,C[n]===1){for(m=0;m<b;++m)e[o+m]=new t(0,x[0]&65535);return b}for(m=0,p=0,f=1,h=2;f<=s;++f,h<<=1)for(;S[f]>0;--S[f])d=new t(f&255,x[p++]&65535),i(e,o+m,h,y,d),m=r(m,f);for(_=b-1,g=-1,f=s+1,h=2;f<=n;++f,h<<=1)for(;S[f]>0;--S[f])(m&_)!==g&&(o+=y,v=a(S,f,s),y=1<<v,b+=y,g=m&_,e[u+g]=new t(v+s&255,o-u-g&65535)),d=new t(f-s&255,x[p++]&65535),i(e,o+(m>>s),h,y,d),m=r(m,f);return b}})),c=e((e=>{e.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),e.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])})),l=e((e=>{function t(e,t){this.offset=e,this.nbits=t}e.kBlockLengthPrefixCode=[new t(1,2),new t(5,2),new t(9,2),new t(13,2),new t(17,3),new t(25,3),new t(33,3),new t(41,3),new t(49,4),new t(65,4),new t(81,4),new t(97,4),new t(113,5),new t(145,5),new t(177,5),new t(209,5),new t(241,6),new t(305,6),new t(369,7),new t(497,8),new t(753,9),new t(1265,10),new t(2289,11),new t(4337,12),new t(8433,13),new t(16625,24)],e.kInsertLengthPrefixCode=[new t(0,0),new t(1,0),new t(2,0),new t(3,0),new t(4,0),new t(5,0),new t(6,1),new t(8,1),new t(10,2),new t(14,2),new t(18,3),new t(26,3),new t(34,4),new t(50,4),new t(66,5),new t(98,5),new t(130,6),new t(194,7),new t(322,8),new t(578,9),new t(1090,10),new t(2114,12),new t(6210,14),new t(22594,24)],e.kCopyLengthPrefixCode=[new t(2,0),new t(3,0),new t(4,0),new t(5,0),new t(6,0),new t(7,0),new t(8,0),new t(9,0),new t(10,1),new t(12,1),new t(14,2),new t(18,2),new t(22,3),new t(30,3),new t(38,4),new t(54,4),new t(70,5),new t(102,5),new t(134,6),new t(198,7),new t(326,8),new t(582,9),new t(1094,10),new t(2118,24)],e.kInsertRangeLut=[0,0,8,8,0,16,8,16,16],e.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]})),u=e((e=>{var t=o(),n=0,r=1,i=2,a=3,s=4,c=5,l=6,u=7,d=8,f=9,p=10,m=11,h=12,g=13,_=14,v=15,y=16,b=17,x=18,S=20;function C(e,t,n){this.prefix=new Uint8Array(e.length),this.transform=t,this.suffix=new Uint8Array(n.length);for(var r=0;r<e.length;r++)this.prefix[r]=e.charCodeAt(r);for(var r=0;r<n.length;r++)this.suffix[r]=n.charCodeAt(r)}var w=[new C(``,n,``),new C(``,n,` `),new C(` `,n,` `),new C(``,h,``),new C(``,p,` `),new C(``,n,` the `),new C(` `,n,``),new C(`s `,n,` `),new C(``,n,` of `),new C(``,p,``),new C(``,n,` and `),new C(``,g,``),new C(``,r,``),new C(`, `,n,` `),new C(``,n,`, `),new C(` `,p,` `),new C(``,n,` in `),new C(``,n,` to `),new C(`e `,n,` `),new C(``,n,`"`),new C(``,n,`.`),new C(``,n,`">`),new C(``,n,`
|
|
2
|
+
`),new C(``,a,``),new C(``,n,`]`),new C(``,n,` for `),new C(``,_,``),new C(``,i,``),new C(``,n,` a `),new C(``,n,` that `),new C(` `,p,``),new C(``,n,`. `),new C(`.`,n,``),new C(` `,n,`, `),new C(``,v,``),new C(``,n,` with `),new C(``,n,`'`),new C(``,n,` from `),new C(``,n,` by `),new C(``,y,``),new C(``,b,``),new C(` the `,n,``),new C(``,s,``),new C(``,n,`. The `),new C(``,m,``),new C(``,n,` on `),new C(``,n,` as `),new C(``,n,` is `),new C(``,u,``),new C(``,r,`ing `),new C(``,n,`
|
|
3
|
+
`),new C(``,n,`:`),new C(` `,n,`. `),new C(``,n,`ed `),new C(``,S,``),new C(``,x,``),new C(``,l,``),new C(``,n,`(`),new C(``,p,`, `),new C(``,d,``),new C(``,n,` at `),new C(``,n,`ly `),new C(` the `,n,` of `),new C(``,c,``),new C(``,f,``),new C(` `,p,`, `),new C(``,p,`"`),new C(`.`,n,`(`),new C(``,m,` `),new C(``,p,`">`),new C(``,n,`="`),new C(` `,n,`.`),new C(`.com/`,n,``),new C(` the `,n,` of the `),new C(``,p,`'`),new C(``,n,`. This `),new C(``,n,`,`),new C(`.`,n,` `),new C(``,p,`(`),new C(``,p,`.`),new C(``,n,` not `),new C(` `,n,`="`),new C(``,n,`er `),new C(` `,m,` `),new C(``,n,`al `),new C(` `,m,``),new C(``,n,`='`),new C(``,m,`"`),new C(``,p,`. `),new C(` `,n,`(`),new C(``,n,`ful `),new C(` `,p,`. `),new C(``,n,`ive `),new C(``,n,`less `),new C(``,m,`'`),new C(``,n,`est `),new C(` `,p,`.`),new C(``,m,`">`),new C(` `,n,`='`),new C(``,p,`,`),new C(``,n,`ize `),new C(``,m,`.`),new C(`Â\xA0`,n,``),new C(` `,n,`,`),new C(``,p,`="`),new C(``,m,`="`),new C(``,n,`ous `),new C(``,m,`, `),new C(``,p,`='`),new C(` `,p,`,`),new C(` `,m,`="`),new C(` `,m,`, `),new C(``,m,`,`),new C(``,m,`(`),new C(``,m,`. `),new C(` `,m,`.`),new C(``,m,`='`),new C(` `,m,`. `),new C(` `,p,`="`),new C(` `,m,`='`),new C(` `,p,`='`)];e.kTransforms=w,e.kNumTransforms=w.length;function T(e,t){return e[t]<192?(e[t]>=97&&e[t]<=122&&(e[t]^=32),1):e[t]<224?(e[t+1]^=32,2):(e[t+2]^=5,3)}e.transformDictionaryWord=function(e,n,r,i,a){var o=w[a].prefix,s=w[a].suffix,c=w[a].transform,l=c<h?0:c-(h-1),u=0,d=n,g;l>i&&(l=i);for(var _=0;_<o.length;)e[n++]=o[_++];for(r+=l,i-=l,c<=f&&(i-=c),u=0;u<i;u++)e[n++]=t.dictionary[r+u];if(g=n-i,c===p)T(e,g);else if(c===m)for(;i>0;){var v=T(e,g);g+=v,i-=v}for(var y=0;y<s.length;)e[n++]=s[y++];return n-d}})),d=e((e=>{var r=t().BrotliInput,i=t().BrotliOutput,a=n(),d=o(),f=s().HuffmanCode,p=s().BrotliBuildHuffmanTable,m=c(),h=l(),g=u(),_=8,v=16,y=256,b=704,x=26,S=6,C=2,w=8,T=255,E=1080,D=18,O=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),ee=16,k=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),A=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),j=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function te(e){var t;return e.readBits(1)===0?16:(t=e.readBits(3),t>0?17+t:(t=e.readBits(3),t>0?8+t:17))}function ne(e){if(e.readBits(1)){var t=e.readBits(3);return t===0?1:e.readBits(t)+(1<<t)}return 0}function re(){this.meta_block_length=0,this.input_end=0,this.is_uncompressed=0,this.is_metadata=!1}function ie(e){var t=new re,n,r,i;if(t.input_end=e.readBits(1),t.input_end&&e.readBits(1))return t;if(n=e.readBits(2)+4,n===7){if(t.is_metadata=!0,e.readBits(1)!==0)throw Error(`Invalid reserved bit`);if(r=e.readBits(2),r===0)return t;for(i=0;i<r;i++){var a=e.readBits(8);if(i+1===r&&r>1&&a===0)throw Error(`Invalid size byte`);t.meta_block_length|=a<<i*8}}else for(i=0;i<n;++i){var o=e.readBits(4);if(i+1===n&&n>4&&o===0)throw Error(`Invalid size nibble`);t.meta_block_length|=o<<i*4}return++t.meta_block_length,!t.input_end&&!t.is_metadata&&(t.is_uncompressed=e.readBits(1)),t}function M(e,t,n){var r;return n.fillBitWindow(),t+=n.val_>>>n.bit_pos_&T,r=e[t].bits-w,r>0&&(n.bit_pos_+=w,t+=e[t].value,t+=n.val_>>>n.bit_pos_&(1<<r)-1),n.bit_pos_+=e[t].bits,e[t].value}function N(e,t,n,r){for(var i=0,a=_,o=0,s=0,c=32768,l=[],u=0;u<32;u++)l.push(new f(0,0));for(p(l,0,5,e,D);i<t&&c>0;){var d=0,m;if(r.readMoreInput(),r.fillBitWindow(),d+=r.val_>>>r.bit_pos_&31,r.bit_pos_+=l[d].bits,m=l[d].value&255,m<v)o=0,n[i++]=m,m!==0&&(a=m,c-=32768>>m);else{var h=m-14,g,y,b=0;if(m===v&&(b=a),s!==b&&(o=0,s=b),g=o,o>0&&(o-=2,o<<=h),o+=r.readBits(h)+3,y=o-g,i+y>t)throw Error(`[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols`);for(var x=0;x<y;x++)n[i+x]=s;i+=y,s!==0&&(c-=y<<15-s)}}if(c!==0)throw Error(`[ReadHuffmanCodeLengths] space = `+c);for(;i<t;i++)n[i]=0}function P(e,t,n,r){var i=0,a,o=new Uint8Array(e);if(r.readMoreInput(),a=r.readBits(2),a===1){for(var s,c=e-1,l=0,u=new Int32Array(4),d=r.readBits(2)+1;c;)c>>=1,++l;for(s=0;s<d;++s)u[s]=r.readBits(l)%e,o[u[s]]=2;switch(o[u[0]]=1,d){case 1:break;case 3:if(u[0]===u[1]||u[0]===u[2]||u[1]===u[2])throw Error(`[ReadHuffmanCode] invalid symbols`);break;case 2:if(u[0]===u[1])throw Error(`[ReadHuffmanCode] invalid symbols`);o[u[1]]=1;break;case 4:if(u[0]===u[1]||u[0]===u[2]||u[0]===u[3]||u[1]===u[2]||u[1]===u[3]||u[2]===u[3])throw Error(`[ReadHuffmanCode] invalid symbols`);r.readBits(1)?(o[u[2]]=3,o[u[3]]=3):o[u[0]]=2;break}}else{var s,m=new Uint8Array(D),h=32,g=0,_=[new f(2,0),new f(2,4),new f(2,3),new f(3,2),new f(2,0),new f(2,4),new f(2,3),new f(4,1),new f(2,0),new f(2,4),new f(2,3),new f(3,2),new f(2,0),new f(2,4),new f(2,3),new f(4,5)];for(s=a;s<D&&h>0;++s){var v=O[s],y=0,b;r.fillBitWindow(),y+=r.val_>>>r.bit_pos_&15,r.bit_pos_+=_[y].bits,b=_[y].value,m[v]=b,b!==0&&(h-=32>>b,++g)}if(!(g===1||h===0))throw Error(`[ReadHuffmanCode] invalid num_codes or space`);N(m,e,o,r)}if(i=p(t,n,w,o,e),i===0)throw Error(`[ReadHuffmanCode] BuildHuffmanTable failed: `);return i}function F(e,t,n){var r=M(e,t,n),i=h.kBlockLengthPrefixCode[r].nbits;return h.kBlockLengthPrefixCode[r].offset+n.readBits(i)}function ae(e,t,n){var r;return e<ee?(n+=k[e],n&=3,r=t[n]+A[e]):r=e-ee+1,r}function I(e,t){for(var n=e[t],r=t;r;--r)e[r]=e[r-1];e[0]=n}function oe(e,t){var n=new Uint8Array(256),r;for(r=0;r<256;++r)n[r]=r;for(r=0;r<t;++r){var i=e[r];e[r]=n[i],i&&I(n,i)}}function L(e,t){this.alphabet_size=e,this.num_htrees=t,this.codes=Array(t+t*j[e+31>>>5]),this.htrees=new Uint32Array(t)}L.prototype.decode=function(e){var t,n,r=0;for(t=0;t<this.num_htrees;++t)this.htrees[t]=r,n=P(this.alphabet_size,this.codes,r,e),r+=n};function se(e,t){var n={num_htrees:null,context_map:null},r,i=0,a,o;t.readMoreInput();var s=n.num_htrees=ne(t)+1,c=n.context_map=new Uint8Array(e);if(s<=1)return n;for(r=t.readBits(1),r&&(i=t.readBits(4)+1),a=[],o=0;o<E;o++)a[o]=new f(0,0);for(P(s+i,a,0,t),o=0;o<e;){var l;if(t.readMoreInput(),l=M(a,0,t),l===0)c[o]=0,++o;else if(l<=i)for(var u=1+(1<<l)+t.readBits(l);--u;){if(o>=e)throw Error(`[DecodeContextMap] i >= context_map_size`);c[o]=0,++o}else c[o]=l-i,++o}return t.readBits(1)&&oe(c,e),n}function ce(e,t,n,r,i,a,o){var s=n*2,c=n,l=M(t,n*E,o),u=l===0?i[s+(a[c]&1)]:l===1?i[s+(a[c]-1&1)]+1:l-2;u>=e&&(u-=e),r[n]=u,i[s+(a[c]&1)]=u,++a[c]}function le(e,t,n,r,i,o){var s=i+1,c=n&i,l=o.pos_&a.IBUF_MASK,u;if(t<8||o.bit_pos_+(t<<3)<o.bit_end_pos_){for(;t-- >0;)o.readMoreInput(),r[c++]=o.readBits(8),c===s&&(e.write(r,s),c=0);return}if(o.bit_end_pos_<32)throw Error(`[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32`);for(;o.bit_pos_<32;)r[c]=o.val_>>>o.bit_pos_,o.bit_pos_+=8,++c,--t;if(u=o.bit_end_pos_-o.bit_pos_>>3,l+u>a.IBUF_MASK){for(var d=a.IBUF_MASK+1-l,f=0;f<d;f++)r[c+f]=o.buf_[l+f];u-=d,c+=d,t-=d,l=0}for(var f=0;f<u;f++)r[c+f]=o.buf_[l+f];if(c+=u,t-=u,c>=s){e.write(r,s),c-=s;for(var f=0;f<c;f++)r[f]=r[s+f]}for(;c+t>=s;){if(u=s-c,o.input_.read(r,c,u)<u)throw Error(`[CopyUncompressedBlockToOutput] not enough bytes`);e.write(r,s),t-=u,c=0}if(o.input_.read(r,c,t)<t)throw Error(`[CopyUncompressedBlockToOutput] not enough bytes`);o.reset()}function ue(e){var t=e.bit_pos_+7&-8;return e.readBits(t-e.bit_pos_)==0}function R(e){var t=new a(new r(e));return te(t),ie(t).meta_block_length}e.BrotliDecompressedSize=R;function z(e,t){var n=new r(e);t??=R(e);var a=new i(new Uint8Array(t));return B(n,a),a.pos<a.buffer.length&&(a.buffer=a.buffer.subarray(0,a.pos)),a.buffer}e.BrotliDecompressBuffer=z;function B(e,t){var n,r=0,i=0,o=0,s,c=0,l,u,p,_,v=[16,15,11,4],w=0,T=0,D=0,O=[new L(0,0),new L(0,0),new L(0,0)],k,A,j,re=128+a.READ_SIZE;j=new a(e),o=te(j),s=(1<<o)-16,l=1<<o,u=l-1,p=new Uint8Array(l+re+d.maxDictionaryWordLength),_=l,k=[],A=[];for(var N=0;N<3*E;N++)k[N]=new f(0,0),A[N]=new f(0,0);for(;!i;){var I=0,oe,R=[1<<28,1<<28,1<<28],z=[0],B=[1,1,1],de=[0,1,0,1,0,1],V=[0],H,U,fe,pe,me=null,W=null,he,ge=null,_e,ve=0,ye=null,be=0,xe=0,Se=null,Ce=0,we=0,Te=0,G,Ee;for(n=0;n<3;++n)O[n].codes=null,O[n].htrees=null;j.readMoreInput();var K=ie(j);if(I=K.meta_block_length,r+I>t.buffer.length){var De=new Uint8Array(r+I);De.set(t.buffer),t.buffer=De}if(i=K.input_end,oe=K.is_uncompressed,K.is_metadata){for(ue(j);I>0;--I)j.readMoreInput(),j.readBits(8);continue}if(I!==0){if(oe){j.bit_pos_=j.bit_pos_+7&-8,le(t,I,r,p,u,j),r+=I;continue}for(n=0;n<3;++n)B[n]=ne(j)+1,B[n]>=2&&(P(B[n]+2,k,n*E,j),P(x,A,n*E,j),R[n]=F(A,n*E,j),V[n]=1);for(j.readMoreInput(),H=j.readBits(2),U=ee+(j.readBits(4)<<H),fe=(1<<H)-1,pe=U+(48<<H),W=new Uint8Array(B[0]),n=0;n<B[0];++n)j.readMoreInput(),W[n]=j.readBits(2)<<1;var Oe=se(B[0]<<S,j);he=Oe.num_htrees,me=Oe.context_map;var ke=se(B[2]<<C,j);for(_e=ke.num_htrees,ge=ke.context_map,O[0]=new L(y,he),O[1]=new L(b,B[1]),O[2]=new L(pe,_e),n=0;n<3;++n)O[n].decode(j);for(ye=0,Se=0,G=W[z[0]],we=m.lookupOffsets[G],Te=m.lookupOffsets[G+1],Ee=O[1].htrees[0];I>0;){var q,J,Ae,je,Me,Y,X,Z,Ne,Q,$;for(j.readMoreInput(),R[1]===0&&(ce(B[1],k,1,z,de,V,j),R[1]=F(A,E,j),Ee=O[1].htrees[z[1]]),--R[1],q=M(O[1].codes,Ee,j),J=q>>6,J>=2?(J-=2,X=-1):X=0,Ae=h.kInsertRangeLut[J]+(q>>3&7),je=h.kCopyRangeLut[J]+(q&7),Me=h.kInsertLengthPrefixCode[Ae].offset+j.readBits(h.kInsertLengthPrefixCode[Ae].nbits),Y=h.kCopyLengthPrefixCode[je].offset+j.readBits(h.kCopyLengthPrefixCode[je].nbits),T=p[r-1&u],D=p[r-2&u],Q=0;Q<Me;++Q)j.readMoreInput(),R[0]===0&&(ce(B[0],k,0,z,de,V,j),R[0]=F(A,0,j),ve=z[0]<<S,ye=ve,G=W[z[0]],we=m.lookupOffsets[G],Te=m.lookupOffsets[G+1]),Ne=m.lookup[we+T]|m.lookup[Te+D],be=me[ye+Ne],--R[0],D=T,T=M(O[0].codes,O[0].htrees[be],j),p[r&u]=T,(r&u)===u&&t.write(p,l),++r;if(I-=Me,I<=0)break;if(X<0){var Ne;if(j.readMoreInput(),R[2]===0&&(ce(B[2],k,2,z,de,V,j),R[2]=F(A,2*E,j),xe=z[2]<<C,Se=xe),--R[2],Ne=(Y>4?3:Y-2)&255,Ce=ge[Se+Ne],X=M(O[2].codes,O[2].htrees[Ce],j),X>=U){var Pe,Fe,Ie;X-=U,Fe=X&fe,X>>=H,Pe=(X>>1)+1,Ie=(2+(X&1)<<Pe)-4,X=U+(Ie+j.readBits(Pe)<<H)+Fe}}if(Z=ae(X,v,w),Z<0)throw Error(`[BrotliDecompress] invalid distance`);if(c=r<s&&c!==s?r:s,$=r&u,Z>c)if(Y>=d.minDictionaryWordLength&&Y<=d.maxDictionaryWordLength){var Ie=d.offsetsByLength[Y],Le=Z-c-1,Re=d.sizeBitsByLength[Y],ze=Le&(1<<Re)-1,Be=Le>>Re;if(Ie+=ze*Y,Be<g.kNumTransforms){var Ve=g.transformDictionaryWord(p,$,Ie,Y,Be);if($+=Ve,r+=Ve,I-=Ve,$>=_){t.write(p,l);for(var He=0;He<$-_;He++)p[He]=p[_+He]}}else throw Error(`Invalid backward reference. pos: `+r+` distance: `+Z+` len: `+Y+` bytes left: `+I)}else throw Error(`Invalid backward reference. pos: `+r+` distance: `+Z+` len: `+Y+` bytes left: `+I);else{if(X>0&&(v[w&3]=Z,++w),Y>I)throw Error(`Invalid backward reference. pos: `+r+` distance: `+Z+` len: `+Y+` bytes left: `+I);for(Q=0;Q<Y;++Q)p[r&u]=p[r-Z&u],(r&u)===u&&t.write(p,l),++r,--I}T=p[r-1&u],D=p[r-2&u]}r&=1073741823}}t.write(p,r&u)}e.BrotliDecompress=B,d.init()})),f=e(((e,t)=>{t.exports=d().BrotliDecompressBuffer}));export default f();
|
package/chunks/main.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{n as e,r as t}from"./chunk.js";var n;try{n=new TextDecoder}catch{}var r,i,a=0;const o=[];var s=o,c=0,l={},u,d,f=0,p=0,m,h,g=[],_,ee={useRecords:!1,mapsAsObjects:!0};const te=new class{};te.name=`MessagePack 0xC1`;var v=!1,ne=2,y=class e{constructor(e){e&&(e.useRecords===!1&&e.mapsAsObjects===void 0&&(e.mapsAsObjects=!0),e.sequential&&e.trusted!==!1&&(e.trusted=!0,!e.structures&&e.useRecords!=0&&(e.structures=[],e.maxSharedStructures||=0)),e.structures?e.structures.sharedLength=e.structures.length:e.getStructures&&((e.structures=[]).uninitialized=!0,e.structures.sharedLength=0),e.int64AsNumber&&(e.int64AsType=`number`)),Object.assign(this,e)}unpack(t,n){if(r)return Ee(()=>(De(),this?this.unpack(t,n):e.prototype.unpack.call(ee,t,n)));!t.buffer&&t.constructor===ArrayBuffer&&(t=typeof Buffer<`u`?Buffer.from(t):new Uint8Array(t)),typeof n==`object`?(i=n.end||t.length,a=n.start||0):(a=0,i=n>-1?n:t.length),c=0,p=0,d=null,s=o,m=null,r=t;try{_=t.dataView||=new DataView(t.buffer,t.byteOffset,t.byteLength)}catch(e){throw r=null,t instanceof Uint8Array?e:Error(`Source must be a Uint8Array or Buffer but was a `+(t&&typeof t==`object`?t.constructor.name:typeof t))}if(this instanceof e){if(l=this,this.structures)return u=this.structures,b(n);(!u||u.length>0)&&(u=[])}else l=ee,(!u||u.length>0)&&(u=[]);return b(n)}unpackMultiple(e,t){let n,r=0;try{v=!0;let i=e.length,o=this?this.unpack(e,i):T.unpack(e,i);if(t){if(t(o,r,a)===!1)return;for(;a<i;)if(r=a,t(b(),r,a)===!1)return}else{for(n=[o];a<i;)r=a,n.push(b());return n}}catch(e){throw e.lastPosition=r,e.values=n,e}finally{v=!1,De()}}_mergeStructures(e,t){this._onLoadedStructures&&(e=this._onLoadedStructures(e)),e||=[],Object.isFrozen(e)&&(e=e.map(e=>e.slice(0)));for(let t=0,n=e.length;t<n;t++){let n=e[t];n&&(n.isShared=!0,t>=32&&(n.highByte=t-32>>5))}e.sharedLength=e.length;for(let n in t||[])if(n>=0){let r=e[n],i=t[n];i&&(r&&((e.restoreStructures||=[])[n]=r),e[n]=i)}return this.structures=e}decode(e,t){return this.unpack(e,t)}};function b(e){try{if(!l.trusted&&!v){let e=u.sharedLength||0;e<u.length&&(u.length=e)}let t;if(l._readStruct&&r[a]<64&&r[a]>=32?(t=l._readStruct(r,a,i),r=null,!(e&&e.lazy)&&t&&(t=t.toJSON()),a=i):t=x(),m&&=(a=m.postBundlePosition,null),v&&(u.restoreStructures=null),a==i)u&&u.restoreStructures&&re(),u=null,r=null,h&&=null;else if(a>i)throw Error(`Unexpected end of MessagePack data`);else if(!v){let e;try{e=JSON.stringify(t,(e,t)=>typeof t==`bigint`?`${t}n`:t).slice(0,100)}catch(t){e=`(JSON view not available `+t+`)`}throw Error(`Data read, but end of buffer not reached `+e)}return t}catch(e){throw u&&u.restoreStructures&&re(),De(),(e instanceof RangeError||e.message.startsWith(`Unexpected end of buffer`)||a>i)&&(e.incomplete=!0),e}}function re(){for(let e in u.restoreStructures)u[e]=u.restoreStructures[e];u.restoreStructures=null}function x(){let e=r[a++];if(e<160)if(e<128){if(e<64)return e;{let t=u[e&63]||l.getStructures&&se()[e&63];return t?(t.read||=ae(t,e&63),t.read()):e}}else if(e<144)if(e-=128,l.mapsAsObjects){let t={};for(let n=0;n<e;n++){let e=ye();e===`__proto__`&&(e=`__proto_`),t[e]=x()}return t}else{let t=new Map;for(let n=0;n<e;n++)t.set(x(),x());return t}else{e-=144;let t=Array(e);for(let n=0;n<e;n++)t[n]=x();return l.freezeData?Object.freeze(t):t}else if(e<192){let t=e-160;if(p>=a)return d.slice(a-f,(a+=t)-f);if(p==0&&i<140){let e=t<16?he(t):me(t);if(e!=null)return e}return ce(t)}else{let t;switch(e){case 192:return null;case 193:return m?(t=x(),t>0?m[1].slice(m.position1,m.position1+=t):m[0].slice(m.position0,m.position0-=t)):te;case 194:return!1;case 195:return!0;case 196:if(t=r[a++],t===void 0)throw Error(`Unexpected end of buffer`);return _e(t);case 197:return t=_.getUint16(a),a+=2,_e(t);case 198:return t=_.getUint32(a),a+=4,_e(t);case 199:return w(r[a++]);case 200:return t=_.getUint16(a),a+=2,w(t);case 201:return t=_.getUint32(a),a+=4,w(t);case 202:if(t=_.getFloat32(a),l.useFloat32>2){let e=Oe[(r[a]&127)<<1|r[a+1]>>7];return a+=4,(e*t+(t>0?.5:-.5)>>0)/e}return a+=4,t;case 203:return t=_.getFloat64(a),a+=8,t;case 204:return r[a++];case 205:return t=_.getUint16(a),a+=2,t;case 206:return t=_.getUint32(a),a+=4,t;case 207:return l.int64AsType===`number`?(t=_.getUint32(a)*4294967296,t+=_.getUint32(a+4)):l.int64AsType===`string`?t=_.getBigUint64(a).toString():l.int64AsType===`auto`?(t=_.getBigUint64(a),t<=BigInt(2)<<BigInt(52)&&(t=Number(t))):t=_.getBigUint64(a),a+=8,t;case 208:return _.getInt8(a++);case 209:return t=_.getInt16(a),a+=2,t;case 210:return t=_.getInt32(a),a+=4,t;case 211:return l.int64AsType===`number`?(t=_.getInt32(a)*4294967296,t+=_.getUint32(a+4)):l.int64AsType===`string`?t=_.getBigInt64(a).toString():l.int64AsType===`auto`?(t=_.getBigInt64(a),t>=BigInt(-2)<<BigInt(52)&&t<=BigInt(2)<<BigInt(52)&&(t=Number(t))):t=_.getBigInt64(a),a+=8,t;case 212:if(t=r[a++],t==114)return xe(r[a++]&63);{let e=g[t];if(e)return e.read?(a++,e.read(x())):e.noBuffer?(a++,e()):e(r.subarray(a,++a));throw Error(`Unknown extension `+t)}case 213:return t=r[a],t==114?(a++,xe(r[a++]&63,r[a++])):w(2);case 214:return w(4);case 215:return w(8);case 216:return w(16);case 217:return t=r[a++],p>=a?d.slice(a-f,(a+=t)-f):le(t);case 218:return t=_.getUint16(a),a+=2,p>=a?d.slice(a-f,(a+=t)-f):ue(t);case 219:return t=_.getUint32(a),a+=4,p>=a?d.slice(a-f,(a+=t)-f):de(t);case 220:return t=_.getUint16(a),a+=2,fe(t);case 221:return t=_.getUint32(a),a+=4,fe(t);case 222:return t=_.getUint16(a),a+=2,pe(t);case 223:return t=_.getUint32(a),a+=4,pe(t);default:if(e>=224)return e-256;if(e===void 0){let e=Error(`Unexpected end of MessagePack data`);throw e.incomplete=!0,e}throw Error(`Unknown MessagePack token `+e)}}}const ie=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function ae(e,t){function n(){if(n.count++>ne){let r;try{r=e.read=Function(`r`,`return function(){return `+(l.freezeData?`Object.freeze`:``)+`({`+e.map(e=>e===`__proto__`?`__proto_:r()`:ie.test(e)?e+`:r()`:`[`+JSON.stringify(e)+`]:r()`).join(`,`)+`})}`)(x)}catch{return ne=1/0,n()}return e.highByte===0&&(e.read=oe(t,e.read)),r()}let r={};for(let t=0,n=e.length;t<n;t++){let n=e[t];n===`__proto__`&&(n=`__proto_`),r[n]=x()}return l.freezeData?Object.freeze(r):r}return n.count=0,e.highByte===0?oe(t,n):n}const oe=(e,t)=>function(){let n=r[a++];if(n===0)return t();let i=e<32?-(e+(n<<5)):e+(n<<5),o=u[i]||se()[i];if(!o)throw Error(`Record id is not defined for `+i);return o.read||=ae(o,e),o.read()};function se(){let e=Ee(()=>(r=null,l.getStructures()));return u=l._mergeStructures(e,u)}var ce=S,le=S,ue=S,de=S;function S(e){let t;if(e<16&&(t=he(e)))return t;if(e>64&&n)return n.decode(r.subarray(a,a+=e));let i=a+e,o=[];for(t=``;a<i;){let e=r[a++];if(!(e&128))o.push(e);else if((e&224)==192){let t=r[a++]&63,n=(e&31)<<6|t;n<128?o.push(65533):o.push(n)}else if((e&240)==224){let t=r[a++]&63,n=r[a++]&63,i=(e&31)<<12|t<<6|n;i<2048||i>=55296&&i<=57343?o.push(65533):o.push(i)}else if((e&248)==240){let t=r[a++]&63,n=r[a++]&63,i=r[a++]&63,s=(e&7)<<18|t<<12|n<<6|i;s<65536||s>1114111?o.push(65533):s>65535?(s-=65536,o.push(s>>>10&1023|55296),s=56320|s&1023,o.push(s)):o.push(s)}else o.push(65533);o.length>=4096&&(t+=C.apply(String,o),o.length=0)}return o.length>0&&(t+=C.apply(String,o)),t}function fe(e){let t=Array(e);for(let n=0;n<e;n++)t[n]=x();return l.freezeData?Object.freeze(t):t}function pe(e){if(l.mapsAsObjects){let t={};for(let n=0;n<e;n++){let e=ye();e===`__proto__`&&(e=`__proto_`),t[e]=x()}return t}else{let t=new Map;for(let n=0;n<e;n++)t.set(x(),x());return t}}var C=String.fromCharCode;function me(e){let t=a,n=Array(e);for(let i=0;i<e;i++){let e=r[a++];if((e&128)>0){a=t;return}n[i]=e}return C.apply(String,n)}function he(e){if(e<4)if(e<2){if(e===0)return``;{let e=r[a++];if((e&128)>1){--a;return}return C(e)}}else{let t=r[a++],n=r[a++];if((t&128)>0||(n&128)>0){a-=2;return}if(e<3)return C(t,n);let i=r[a++];if((i&128)>0){a-=3;return}return C(t,n,i)}else{let t=r[a++],n=r[a++],i=r[a++],o=r[a++];if((t&128)>0||(n&128)>0||(i&128)>0||(o&128)>0){a-=4;return}if(e<6){if(e===4)return C(t,n,i,o);{let e=r[a++];if((e&128)>0){a-=5;return}return C(t,n,i,o,e)}}else if(e<8){let s=r[a++],c=r[a++];if((s&128)>0||(c&128)>0){a-=6;return}if(e<7)return C(t,n,i,o,s,c);let l=r[a++];if((l&128)>0){a-=7;return}return C(t,n,i,o,s,c,l)}else{let s=r[a++],c=r[a++],l=r[a++],u=r[a++];if((s&128)>0||(c&128)>0||(l&128)>0||(u&128)>0){a-=8;return}if(e<10){if(e===8)return C(t,n,i,o,s,c,l,u);{let e=r[a++];if((e&128)>0){a-=9;return}return C(t,n,i,o,s,c,l,u,e)}}else if(e<12){let d=r[a++],f=r[a++];if((d&128)>0||(f&128)>0){a-=10;return}if(e<11)return C(t,n,i,o,s,c,l,u,d,f);let p=r[a++];if((p&128)>0){a-=11;return}return C(t,n,i,o,s,c,l,u,d,f,p)}else{let d=r[a++],f=r[a++],p=r[a++],m=r[a++];if((d&128)>0||(f&128)>0||(p&128)>0||(m&128)>0){a-=12;return}if(e<14){if(e===12)return C(t,n,i,o,s,c,l,u,d,f,p,m);{let e=r[a++];if((e&128)>0){a-=13;return}return C(t,n,i,o,s,c,l,u,d,f,p,m,e)}}else{let h=r[a++],g=r[a++];if((h&128)>0||(g&128)>0){a-=14;return}if(e<15)return C(t,n,i,o,s,c,l,u,d,f,p,m,h,g);let _=r[a++];if((_&128)>0){a-=15;return}return C(t,n,i,o,s,c,l,u,d,f,p,m,h,g,_)}}}}}function ge(){let e=r[a++],t;if(e<192)t=e-160;else switch(e){case 217:t=r[a++];break;case 218:t=_.getUint16(a),a+=2;break;case 219:t=_.getUint32(a),a+=4;break;default:throw Error(`Expected string`)}return S(t)}function _e(e){return l.copyBuffers?Uint8Array.prototype.slice.call(r,a,a+=e):r.subarray(a,a+=e)}function w(e){let t=r[a++];if(g[t]){let n;return g[t](r.subarray(a,n=a+=e),e=>{a=e;try{return x()}finally{a=n}})}else throw Error(`Unknown extension type `+t)}var ve=Array(4096);function ye(){let e=r[a++];if(e>=160&&e<192){if(e-=160,p>=a)return d.slice(a-f,(a+=e)-f);if(!(p==0&&i<180))return ce(e)}else return a--,be(x());let t=(e<<5^(e>1?_.getUint16(a):e>0?r[a]:0))&4095,n=ve[t],o=a,s=a+e-3,c,l=0;if(n&&n.bytes==e){for(;o<s;){if(c=_.getUint32(o),c!=n[l++]){o=1879048192;break}o+=4}for(s+=3;o<s;)if(c=r[o++],c!=n[l++]){o=1879048192;break}if(o===s)return a=o,n.string;s-=3,o=a}for(n=[],ve[t]=n,n.bytes=e;o<s;)c=_.getUint32(o),n.push(c),o+=4;for(s+=3;o<s;)c=r[o++],n.push(c);let u=e<16?he(e):me(e);return u==null?n.string=ce(e):n.string=u}function be(e){if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return e.toString();if(e==null)return e+``;if(l.allowArraysInMapKeys&&Array.isArray(e)&&e.flat().every(e=>[`string`,`number`,`boolean`,`bigint`].includes(typeof e)))return e.flat().toString();throw Error(`Invalid property type for record: ${typeof e}`)}const xe=(e,t)=>{let n=x().map(be),r=e;t!==void 0&&(e=e<32?-((t<<5)+e):(t<<5)+e,n.highByte=t);let i=u[e];return i&&(i.isShared||v)&&((u.restoreStructures||=[])[e]=i),u[e]=n,n.read=ae(n,r),n.read()};g[0]=()=>{},g[0].noBuffer=!0,g[66]=e=>{let t=e.byteLength%8||8,n=BigInt(e[0]&128?e[0]-256:e[0]);for(let r=1;r<t;r++)n<<=BigInt(8),n+=BigInt(e[r]);if(e.byteLength!==t){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=(e,t)=>{let n=t-e;if(n<=40){let n=r.getBigUint64(e);for(let i=e+8;i<t;i+=8)n<<=BigInt(64),n|=r.getBigUint64(i);return n}let a=e+(n>>4<<3),o=i(e,a),s=i(a,t);return o<<BigInt((t-a)*8)|s};n=n<<BigInt((r.byteLength-t)*8)|i(t,r.byteLength)}return n};let Se={Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError,AggregateError:typeof AggregateError==`function`?AggregateError:null};g[101]=()=>{let e=x();if(!Se[e[0]]){let t=Error(e[1],{cause:e[2]});return t.name=e[0],t}return Se[e[0]](e[1],{cause:e[2]})},g[105]=e=>{if(l.structuredClone===!1)throw Error(`Structured clone extension is disabled`);let t=_.getUint32(a-4);h||=new Map;let n=r[a],i;i=n>=144&&n<160||n==220||n==221?[]:n>=128&&n<144||n==222||n==223?new Map:(n>=199&&n<=201||n>=212&&n<=216)&&r[a+1]===115?new Set:{};let o={target:i};h.set(t,o);let s=x();if(o.used)Object.assign(i,s);else return o.target=s;if(i instanceof Map)for(let[e,t]of s.entries())i.set(e,t);if(i instanceof Set)for(let e of Array.from(s))i.add(e);return i},g[112]=e=>{if(l.structuredClone===!1)throw Error(`Structured clone extension is disabled`);let t=_.getUint32(a-4),n=h.get(t);return n.used=!0,n.target},g[115]=()=>new Set(x());const Ce=[`Int8`,`Uint8`,`Uint8Clamped`,`Int16`,`Uint16`,`Int32`,`Uint32`,`Float32`,`Float64`,`BigInt64`,`BigUint64`].map(e=>e+`Array`);let we=typeof globalThis==`object`?globalThis:window;g[116]=e=>{let t=e[0],n=Uint8Array.prototype.slice.call(e,1).buffer,r=Ce[t];if(!r){if(t===16)return n;if(t===17)return new DataView(n);throw Error(`Could not find typed array for code `+t)}return new we[r](n)},g[120]=()=>{let e=x();return new RegExp(e[0],e[1])};const Te=[];g[98]=e=>{let t=(e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3],n=a;return a+=t-e.length,m=Te,m=[ge(),ge()],m.position0=0,m.position1=0,m.postBundlePosition=a,a=n,x()},g[255]=e=>e.length==4?new Date((e[0]*16777216+(e[1]<<16)+(e[2]<<8)+e[3])*1e3):e.length==8?new Date(((e[0]<<22)+(e[1]<<14)+(e[2]<<6)+(e[3]>>2))/1e6+((e[3]&3)*4294967296+e[4]*16777216+(e[5]<<16)+(e[6]<<8)+e[7])*1e3):e.length==12?new Date(((e[0]<<24)+(e[1]<<16)+(e[2]<<8)+e[3])/1e6+((e[4]&128?-281474976710656:0)+e[6]*1099511627776+e[7]*4294967296+e[8]*16777216+(e[9]<<16)+(e[10]<<8)+e[11])*1e3):new Date(`invalid`);function Ee(e){l&&l._onSaveState&&l._onSaveState();let t=i,n=a,o=c,g=f,ee=p,te=d,ne=s,y=h,b=m,re=new Uint8Array(r.slice(0,i)),x=u,ie=u.slice(0,u.length),ae=l,oe=v,se=e();return i=t,a=n,c=o,f=g,p=ee,d=te,s=ne,h=y,m=b,r=re,v=oe,u=x,u.splice(0,u.length,...ie),l=ae,_=new DataView(r.buffer,r.byteOffset,r.byteLength),se}function De(){r=null,h=null,u=null}const Oe=Array(147);for(let e=0;e<256;e++)Oe[e]=+(`1e`+Math.floor(45.15-e*.30103));var T=new y({useRecords:!1});T.unpack,T.unpackMultiple,T.unpack,new Uint8Array(new Float32Array(1).buffer,0,4),y.SUPPORTS_STRUCT_HOOKS=!0;const ke={gpt:{encoding:`o200k_base`,kind:`tiktoken-builtin`,openrouter:`openai/gpt-5.5`,source:{encodingJsonUrl:`https://tiktoken.pages.dev/js/o200k_base.json`},title:`GPT-5.5`},gemma:{kind:`huggingface`,openrouter:`google/gemma-4-31b-it`,source:{tokenizerConfigUrl:`https://huggingface.co/google/gemma-4-31B-it/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/google/gemma-4-31B-it/resolve/main/tokenizer.json`},title:`Gemma 4 31B it`},qwen:{kind:`huggingface`,openrouter:`qwen/qwen3.6-27b`,source:{tokenizerConfigUrl:`https://huggingface.co/Qwen/Qwen3.6-27B/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/Qwen/Qwen3.6-27B/resolve/main/tokenizer.json`},title:`Qwen 3.6 27B`},kimi:{kind:`tiktoken-custom`,openrouter:`moonshotai/kimi-k2.6`,source:{modelUrl:`https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tiktoken.model`,tokenizerConfigUrl:`https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tokenizer_config.json`,tokenizerImplementationUrl:`https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tokenization_kimi.py`},title:`Kimi K2.6`},deepseek:{kind:`huggingface`,openrouter:`deepseek/deepseek-v4-pro`,source:{tokenizerConfigUrl:`https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/resolve/main/tokenizer.json`},title:`DeepSeek V4 Pro`},mimo:{kind:`huggingface`,openrouter:`xiaomi/mimo-v2.5-pro`,source:{tokenizerConfigUrl:`https://huggingface.co/XiaomiMiMo/MiMo-V2.5-Pro/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/XiaomiMiMo/MiMo-V2.5-Pro/resolve/main/tokenizer.json`},title:`MiMo V2.5 Pro`},sdxl:{kind:`clip-bpe`,source:{mergesUrl:`https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/merges.txt`,specialTokensMapUrl:`https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/special_tokens_map.json`,tokenizerConfigUrl:`https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/tokenizer_config.json`,vocabUrl:`https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/vocab.json`},title:`Stable Diffusion XL`},glm:{kind:`huggingface`,openrouter:`zai-org/glm-5.1`,source:{tokenizerConfigUrl:`https://huggingface.co/zai-org/GLM-5.1/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/zai-org/GLM-5.1/resolve/main/tokenizer.json`},title:`GLM 5.1`},minimax:{kind:`huggingface`,openrouter:`minimax/minimax-m2.7`,source:{tokenizerConfigUrl:`https://huggingface.co/MiniMaxAI/MiniMax-M2.7/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/MiniMaxAI/MiniMax-M2.7/resolve/main/tokenizer.json`},title:`MiniMax M2.7`},hy:{kind:`huggingface`,openrouter:`tencent/hy3-preview`,title:`Hy3 Preview`,source:{tokenizerConfigUrl:`https://huggingface.co/tencent/Hy3-preview/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/tencent/Hy3-preview/resolve/main/tokenizer.json`}},step:{kind:`huggingface`,openrouter:`stepfun/step-3.7-flash`,source:{specialTokensMapUrl:`https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/special_tokens_map.json`,tokenizerConfigUrl:`https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/tokenizer_config.json`,tokenizerJsonUrl:`https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/tokenizer.json`},title:`Step 3.7 Flash`}},E=Object.keys(ke),Ae=new y({mapsAsObjects:!1}),je=new TextDecoder,D=Object.create(null),O=new Map,Me=Object.create(null),k=new Map,A=new Map;let Ne;const Pe=(e,t)=>`${e}/${t}`,Fe=e=>Me[e]??0,Ie=e=>{let t=Fe(e)+1;return Me[e]=t,t},Le=e=>{let t=`${e}/`;for(let e of A.keys())e.startsWith(t)&&A.delete(e);for(let e of k.keys())e.startsWith(t)&&k.delete(e)},Re=e=>{let t=D[e];if(!t)throw Error(`Missing tokenizer assets for model ${JSON.stringify(e)}. Call load() first or use tokenize()/count() to auto-load it.`);return t},ze=()=>{if(!Ne)throw Error(`No tokenizer asset loader is registered for the current entry.`);return Ne},Be=(e,t)=>{let n=Re(e);if(!Object.hasOwn(n,t))throw Error(`Missing tokenizer asset ${JSON.stringify(t)} for model ${JSON.stringify(e)}. Run “bun run fetch” first.`);return n[t]},Ve=(e,t)=>Be(e,t),He=e=>{if(e.endsWith(`.msgpack`))return e;if(e.endsWith(`.json`))return`${e.slice(0,-5)}.msgpack`;throw TypeError(`Expected a MessagePack or JSON file name, got ${JSON.stringify(e)}.`)},Ue=e=>Object.hasOwn(D,e),We=e=>{Ne=e},Ge=(e,t)=>{D[e]=t,Le(e)},Ke=async e=>{await Promise.all(e.map(async e=>{if(Ue(e))return;let t=O.get(e);if(t){await t;return}let n=Fe(e),r=(async()=>{let t=await ze().load(e);Fe(e)===n&&Ge(e,t)})().finally(()=>{O.get(e)===r&&O.delete(e)});O.set(e,r),await r}))},qe=e=>{Ie(e),delete D[e],O.delete(e),Le(e)},Je=e=>{if(e){qe(e);return}for(let e of E)qe(e)},Ye=(e,t)=>{if(t.endsWith(`.json`)||t.endsWith(`.msgpack`))throw TypeError(`Cannot read structured tokenizer asset ${JSON.stringify(t)} as text.`);let n=Pe(e,t),r=A.get(n);if(r!==void 0)return r;let i=je.decode(Ve(e,t));return A.set(n,i),i},j=(e,t)=>{let n=He(t),r=Pe(e,n),i=k.get(r);if(i!==void 0)return i;let a=Ae.unpack(Ve(e,n));return k.set(r,a),a},Xe={gpt:new URL(`../gpt.msgpack.br`,import.meta.url),gemma:new URL(`../gemma.msgpack.br`,import.meta.url),qwen:new URL(`../qwen.msgpack.br`,import.meta.url),kimi:new URL(`../kimi.msgpack.br`,import.meta.url),deepseek:new URL(`../deepseek.msgpack.br`,import.meta.url),mimo:new URL(`../mimo.msgpack.br`,import.meta.url),sdxl:new URL(`../sdxl.msgpack.br`,import.meta.url),glm:new URL(`../glm.msgpack.br`,import.meta.url),minimax:new URL(`../minimax.msgpack.br`,import.meta.url),hy:new URL(`../hy.msgpack.br`,import.meta.url),step:new URL(`../step.msgpack.br`,import.meta.url)};let Ze;const Qe=()=>(Ze??=(async()=>(await import(`./decompress.js`).then(e=>t(e.default,1))).default)(),Ze),$e=async e=>{if(typeof DecompressionStream==`function`)try{let t=new Blob([e]).stream().pipeThrough(new DecompressionStream(`brotli`));return new Uint8Array(await new Response(t).arrayBuffer())}catch{}return(await Qe())(e)},et=new y({mapsAsObjects:!1}),tt=e=>{if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);throw TypeError(`Expected bundled tokenizer asset contents to be binary, got ${typeof e}.`)},nt=e=>{if(!(e instanceof Map))throw TypeError(`Expected a tokenizer asset bundle to unpack into a Map.`);let t=Object.create(null);for(let[n,r]of e.entries()){if(typeof n!=`string`)throw TypeError(`Expected tokenizer asset file names to be strings, got ${typeof n}.`);t[n]=tt(r)}return t};var rt=class{async load(e){let t=await $e(await this.readCompressedBundle(e));return nt(et.unpack(t))}};We(new class extends rt{bundleUrls;constructor(e){super(),this.bundleUrls=e}async readCompressedBundle(e){let t=this.bundleUrls[e],n=await fetch(t);if(!n.ok)throw Error(`Failed to fetch tokenizer assets for model ${JSON.stringify(e)} from ${JSON.stringify(t.href)}: ${n.status} ${n.statusText}`);return new Uint8Array(await n.arrayBuffer())}}(Xe));const it=e=>{let t=[...E];e!==void 0&&(t.length=0,typeof e==`string`?t.push(e):t.push(...e));for(let e of t)if(!E.includes(e))throw Error(`Unknown model ${JSON.stringify(e)}. Supported models: ${E.join(`, `)}`);return t},at=new TextDecoder(`utf-8`,{fatal:!0}),ot=new TextEncoder,st=e=>{let t=[],n=0;for(let r of e)t.push(n),n+=r;return t},ct=e=>{if(typeof e==`string`)return e;try{return at.decode(e)}catch{throw TypeError(`Tokenizer input bytes must be valid UTF-8.`)}},lt=e=>ot.encode(e).byteLength,ut=(e,t,n)=>{if(e.length!==t.length)throw TypeError(`Expected ${e.length} token start offsets, got ${t.length}.`);let r={offsets:t.slice(1),tokens:[...e]};return n===void 0?r:{...r,processedInput:n}},dt=(e,t,n)=>{if(e.length!==t.length)throw TypeError(`Expected ${e.length} token byte lengths, got ${t.length}.`);return ut(e,st(t),n)},ft=new TextEncoder;var pt=class{#e=!1;#t;disposeState(e){}encode(e){return this.encodeWithState(ct(e),this.getState())}free(){this.#e&&=(this.disposeState(this.#t),this.#t=void 0,!1)}getState(){return this.#e||=(this.#t=this.createState(),!0),this.#t}getTokenCount(e){return this.encode(e).length}tokenize(e){let t=this.tokenizeWithState(ct(e),this.getState());return typeof e==`string`||t.processedInput===void 0?t:{...t,processedInput:ft.encode(t.processedInput)}}};const mt=/<\|startoftext\|>|<\|endoftext\|>|'d|'ll|'m|'re|'s|'t|'ve|\p{L}+|\p{N}|[^\s\p{L}\p{N}]+/gu,ht=/<\/w>$/u,gt=/\s+/gu,_t=new TextEncoder,vt=e=>{if(typeof e==`string`)return e;if(e instanceof Map){let t=e.get(`content`);if(typeof t==`string`)return t}if(e&&typeof e==`object`&&`content`in e&&typeof e.content==`string`)return e.content},yt=()=>{let e=Array.from({length:256},()=>``),t=[...Array.from({length:94},(e,t)=>t+33),...Array.from({length:12},(e,t)=>t+161),...Array.from({length:82},(e,t)=>t+174)],n=[...t],r=256;for(let e=0;e<256;e++)t.includes(e)||(t.push(e),n.push(r),r++);for(let[r,i]of t.entries())e[i]=String.fromCodePoint(n[r]);return e},bt=e=>{let t=new Map;for(let[n,r]of e.split(/\r?\n/u).filter(Boolean).filter(e=>!e.startsWith(`#`)).entries())t.set(r,n);return t},xt=e=>e.normalize(`NFC`).replaceAll(gt,` `).trim().toLowerCase(),St=e=>[...e.replace(ht,``)].length,Ct=(e,t,n)=>n===t?e:{...e,processedInput:n};var wt=class extends pt{modelId;#e=new Map;constructor(e){super(),this.modelId=e}createState(){let e=j(this.modelId,`vocab.msgpack`),t=j(this.modelId,`tokenizer_config.msgpack`),n=new Map,r=vt(t.get(`unk_token`))??`<|endoftext|>`,i=e.get(r);if(i===void 0)throw Error(`Could not find CLIP unknown token ${JSON.stringify(r)} in ${JSON.stringify(this.modelId)} vocabulary.`);for(let r of[t.get(`bos_token`),t.get(`eos_token`),t.get(`unk_token`)]){let t=vt(r);if(!t)continue;let i=e.get(t);i!==void 0&&n.set(t,i)}return{byteEncoder:yt(),mergeRanks:bt(Ye(this.modelId,`merges.txt`)),specialTokenIds:n,unknownTokenId:i,vocabulary:e}}encodeWithState(e,t){return this.tokenizeWithState(e,t).tokens}tokenizeWithState(e,t){let n=xt(e);if(!n)return Ct({offsets:[],tokens:[]},e,n);let r=[],i=[],a=0,o=0;for(let e of n.matchAll(mt)){let s=e[0],c=e.index;a+=lt(n.slice(o,c));let l=a,u=t.specialTokenIds.get(s);if(u!==void 0){r.push(u),i.push(l),a+=lt(s),o=c+s.length;continue}let d=Array.from(_t.encode(s),e=>t.byteEncoder[e]).join(``),f=0;for(let e of this.#t(d,t.mergeRanks))r.push(t.vocabulary.get(e)??t.unknownTokenId),i.push(l+f),f+=St(e);a+=lt(s),o=c+s.length}return Ct(ut(r,i),e,n)}#t(e,t){let n=this.#e.get(e);if(n)return n;let r=[...e];if(!r.length){let t=[];return this.#e.set(e,t),t}let i=[...r.slice(0,-1),`${r.at(-1)}</w>`];for(;i.length>1;){let e=-1,n=1/0;for(let r=0;r<i.length-1;r++){let a=t.get(`${i[r]} ${i[r+1]}`);a!==void 0&&a<n&&(n=a,e=r)}if(e<0)break;let r=[];for(let t=0;t<i.length;t++){if(t===e){r.push(`${i[t]}${i[t+1]}`),t++;continue}r.push(i[t])}i=r}return this.#e.set(e,i),i}},Tt=class{constructor(e){this.trie=this._build_trie(e)}_build_trie(e){let t=Object.create(null);for(let n of e){let e=t;for(let t=0;t<n.length;++t){let r=n[t];e=e[r]??=Object.create(null)}e.end=n}return t}split(e){let t=[],n=e.length,r=0,i=0;for(;i<n;){let a=this.trie,o=null,s=i;for(;s<n&&(a=a[e[s]]);)a.end&&(o=a.end),++s;o?(i>r&&t.push(e.slice(r,i)),t.push(o),i+=o.length,r=i):++i}return r<n&&t.push(e.slice(r)),t}},Et=class{constructor(e){this.content=e.content,this.id=e.id,this.single_word=e.single_word??!1,this.lstrip=e.lstrip??!1,this.rstrip=e.rstrip??!1,this.special=e.special??!1,this.normalized=e.normalized??!this.special}},Dt=(()=>{let e=[...Array.from({length:94},(e,t)=>t+33),...Array.from({length:12},(e,t)=>t+161),...Array.from({length:82},(e,t)=>t+174)],t=e.slice(),n=0;for(let r=0;r<256;++r)e.includes(r)||(e.push(r),t.push(256+n),n+=1);let r=t.map(e=>String.fromCharCode(e));return Object.fromEntries(e.map((e,t)=>[e,r[t]]))})(),Ot=(e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])))(Dt),kt=`.,!?…。,、।۔،`,At=new Map([[`(?i:'s|'t|'re|'ve|'m|'ll|'d)`,`(?:'([sS]|[tT]|[rR][eE]|[vV][eE]|[mM]|[lL][lL]|[dD]))`],[`(?i:[sdmt]|ll|ve|re)`,`(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])`],[`[^\\r\\n\\p{L}\\p{N}]?+`,`[^\\r\\n\\p{L}\\p{N}]?`],[`[^\\s\\p{L}\\p{N}]++`,`[^\\s\\p{L}\\p{N}]+`],[`(?>\\p{Nd}{510})`,`(?:\\p{Nd}{510})`],[`\\p{Nd}{3}+`,`(?:\\p{Nd}{3})+`],[`\\G`,``],[` ?[^(\\s|[${kt}])]+`,` ?[^\\s${kt}]+`]]),jt=`\\p{P}\\u0021-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u007E`,Mt=e=>e.replace(/ \./g,`.`).replace(/ \?/g,`?`).replace(/ \!/g,`!`).replace(/ ,/g,`,`).replace(/ \' /g,`'`).replace(/ n't/g,`n't`).replace(/ 'm/g,`'m`).replace(/ 's/g,`'s`).replace(/ 've/g,`'ve`).replace(/ 're/g,`'re`),Nt=(e,t=!0)=>{if(e.Regex!==void 0){let t=e.Regex.replace(/\\([#&~])/g,`$1`);t=t.replace(/\\A/g,`^`).replace(/\\z/g,`$`).replace(/\\Z/g,`(?=\\r?\\n?$)`);for(let[e,n]of At)t=t.replaceAll(e,n);try{return new RegExp(t,`gu`)}catch(e){if(!(e instanceof SyntaxError)||!e.message.toLowerCase().includes(`invalid property name`))throw e;let n=!1,r=t.replace(/(\\[pP])\{([^}=]+)\}/g,(e,t,r)=>{try{return RegExp(`\\p{${r}}`,`u`),`${t}{${r}}`}catch{return n=!0,`${t}{Script=${r}}`}});if(!n)throw e;try{return new RegExp(r,`gu`)}catch{throw e}}}else if(e.String!==void 0){let n=Pt(e.String);return new RegExp(t?n:`(${n})`,`gu`)}else return console.warn(`Unknown pattern type:`,e),null},Pt=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),Ft=(e,t,n)=>{let r=[],i=0;for(;i<e.length;){if(r.push(e[i]),(t.get(e[i])??n)!==n){++i;continue}for(;++i<e.length&&(t.get(e[i])??n)===n;)t.get(r.at(-1))!==n&&(r[r.length-1]+=e[i])}return r},It=e=>e>=19968&&e<=40959||e>=13312&&e<=19903||e>=131072&&e<=173791||e>=173824&&e<=177983||e>=177984&&e<=178207||e>=178208&&e<=183983||e>=63744&&e<=64255||e>=194560&&e<=195103,Lt=e=>Number.isInteger(e)||typeof e==`bigint`,Rt=e=>{let t=0;for(let n of e)++t;return t},zt=e=>Ht(e.toLowerCase()),M=(...e)=>Array.prototype.concat.apply([],e),Bt=e=>new Map(Object.entries(e)),Vt=(e,t)=>{let n=[],r=0;for(let i of e.matchAll(t)){let t=i[0];r<i.index&&n.push(e.slice(r,i.index)),t.length>0&&n.push(t),r=i.index+t.length}return r<e.length&&n.push(e.slice(r)),n},Ht=e=>e.replace(/\p{M}/gu,``),Ut=(e,t,n=[])=>{if(!e||Array.isArray(e)||typeof e!=`object`)return`${t} must be a valid object`;for(let r of n)if(!(r in e))return`${t} must contain a "${r}" property`;return null},Wt=e=>e.match(/\S+/g)||[],N=class{constructor(){let e=function(...t){return e._call(...t)};return Object.setPrototypeOf(e,new.target.prototype)}},P=class extends N{constructor(e){super(),this.config=e}_call(e){return this.normalize(e)}},Gt=class extends P{tokenize_chinese_chars(e){let t=[];for(let n=0;n<e.length;++n){let r=e[n];It(r.charCodeAt(0))?(t.push(` `),t.push(r),t.push(` `)):t.push(r)}return t.join(``)}strip_accents(e){return e.normalize(`NFD`).replace(/\p{Mn}/gu,``)}is_control(e){switch(e){case` `:case`
|
|
2
|
+
`:case`\r`:return!1;default:return/^\p{Cc}|\p{Cf}|\p{Co}|\p{Cs}$/u.test(e)}}clean_text(e){let t=[];for(let n of e){let e=n.charCodeAt(0);e===0||e===65533||this.is_control(n)||(/^\s$/.test(n)?t.push(` `):t.push(n))}return t.join(``)}normalize(e){return this.config.clean_text&&(e=this.clean_text(e)),this.config.handle_chinese_chars&&(e=this.tokenize_chinese_chars(e)),this.config.lowercase?(e=e.toLowerCase(),this.config.strip_accents!==!1&&(e=this.strip_accents(e))):this.config.strip_accents&&(e=this.strip_accents(e)),e}},Kt=class extends P{constructor(e){super(e),this.charsmap=e.precompiled_charsmap??null}normalize(e){return e=e.replace(/[\u0001-\u0008\u000B\u000E-\u001F\u007F\u008F\u009F]/gm,``),e=e.replace(/[\u0009\u000A\u000C\u000D\u00A0\u1680\u2000-\u200F\u2028\u2029\u202F\u205F\u2581\u3000\uFEFF\uFFFD]/gm,` `),e=e.includes(`~`)?e.split(`~`).map(e=>e.normalize(`NFKC`)).join(`~`):e.normalize(`NFKC`),e}},qt=class extends P{constructor(e){super(e),this.normalizers=(e.normalizers??[]).map(e=>an(e))}normalize(e){return this.normalizers.reduce((e,t)=>t?t.normalize(e):e,e)}},Jt=class extends P{normalize(e){let t=Nt(this.config.pattern??{});return t===null?e:e.replaceAll(t,this.config.content??``)}},F=class extends P{constructor(){super(...arguments),this.form=`NFC`}normalize(e){return e=e.normalize(this.form),e}},Yt=class extends F{constructor(){super(...arguments),this.form=`NFC`}},Xt=class extends F{constructor(){super(...arguments),this.form=`NFD`}},Zt=class extends F{constructor(){super(...arguments),this.form=`NFKC`}},Qt=class extends F{constructor(){super(...arguments),this.form=`NFKD`}},$t=class extends P{normalize(e){return this.config.strip_left&&this.config.strip_right?e=e.trim():(this.config.strip_left&&(e=e.trimStart()),this.config.strip_right&&(e=e.trimEnd())),e}},en=class extends P{normalize(e){return Ht(e)}},tn=class extends P{normalize(e){return e.toLowerCase()}},nn=class extends P{normalize(e){return e=this.config.prepend+e,e}};function rn(e){if(e===null)return null;switch(e.type){case`BertNormalizer`:return new Gt(e);case`Precompiled`:return new Kt(e);case`Sequence`:return new qt(e);case`Replace`:return new Jt(e);case`NFC`:return new Yt(e);case`NFD`:return new Xt(e);case`NFKC`:return new Zt(e);case`NFKD`:return new Qt(e);case`Strip`:return new $t(e);case`StripAccents`:return new en(e);case`Lowercase`:return new tn(e);case`Prepend`:return new nn(e);default:throw Error(`Unknown Normalizer type: ${e.type}`)}}var an=rn,I=class extends N{pre_tokenize(e,t){return(Array.isArray(e)?e.map(e=>this.pre_tokenize_text(e,t)):this.pre_tokenize_text(e,t)).flat()}_call(e,t){return this.pre_tokenize(e,t)}},on=class extends I{constructor(e){super(),this.config=e,this.add_prefix_space=this.config.add_prefix_space??!1,this.trim_offsets=this.config.trim_offsets??!1,this.use_regex=this.config.use_regex??!0,this.pattern=/'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu,this.byte_encoder=Dt,this.text_encoder=new TextEncoder}pre_tokenize_text(e,t){return this.add_prefix_space&&!e.startsWith(` `)&&(e=` `+e),(this.use_regex?e.match(this.pattern)||[]:[e]).map(e=>Array.from(this.text_encoder.encode(e),e=>this.byte_encoder[e]).join(``))}},sn=class extends I{pre_tokenize_text(e,t){return e.match(/\w+|[^\w\s]+/g)||[]}},cn=class extends I{constructor(e){super(),this.replacement=e.replacement??`▁`,this.str_rep=e.str_rep||this.replacement,this.prepend_scheme=e.prepend_scheme??`always`}pre_tokenize_text(e,t){let{section_index:n=void 0}=t??{},r=e.replaceAll(` `,this.str_rep);return!r.startsWith(this.replacement)&&(this.prepend_scheme===`always`||this.prepend_scheme===`first`&&n===0)&&(r=this.str_rep+r),[r]}},ln=class extends I{constructor(e){super(),this.config=e,this.pattern=Nt(this.config.pattern??{},this.config.invert??!0)}pre_tokenize_text(e){return this.pattern===null?[]:this.config.invert?e.match(this.pattern)||[]:this.config.behavior?.toLowerCase()===`removed`?e.split(this.pattern).filter(e=>e):Vt(e,this.pattern)}},un=class extends I{constructor(e){super(),this.config=e,this.pattern=RegExp(`[^${jt}]+|[${jt}]+`,`gu`)}pre_tokenize_text(e){return e.match(this.pattern)||[]}},dn=class extends I{constructor(e){super(),this.config=e;let t=`[^\\d]+|\\d${this.config.individual_digits?``:`+`}`;this.pattern=new RegExp(t,`gu`)}pre_tokenize_text(e){return e.match(this.pattern)||[]}},fn=class extends I{constructor(){super(),this.pattern=RegExp(`[^\\s${jt}]+|[${jt}]`,`gu`)}pre_tokenize_text(e,t){return e.trim().match(this.pattern)||[]}},pn=class extends I{constructor(e){super(),this.config=e,this.pattern=Nt(this.config.pattern??{}),this.content=this.config.content??``}pre_tokenize_text(e){return this.pattern===null?[e]:[e.replaceAll(this.pattern,this.config.content??``)]}},mn=class extends I{constructor(e){super(),this.tokenizers=(e.pretokenizers??[]).map(e=>vn(e))}pre_tokenize_text(e,t){return this.tokenizers.reduce((e,n)=>n?n.pre_tokenize(e,t):e,[e])}},hn=class extends I{pre_tokenize_text(e){return Wt(e)}},gn=class extends I{constructor(e){super(),this.config=e,this._length=e.length}pre_tokenize_text(e){let t=[];for(let n=0;n<e.length;n+=this._length)t.push(e.slice(n,n+this._length));return t}};function _n(e){if(e===null)return null;switch(e.type){case`BertPreTokenizer`:return new fn;case`Sequence`:return new mn(e);case`Whitespace`:return new sn;case`WhitespaceSplit`:return new hn;case`Metaspace`:return new cn(e);case`ByteLevel`:return new on(e);case`Split`:return new ln(e);case`Punctuation`:return new un(e);case`Digits`:return new dn(e);case`Replace`:return new pn(e);case`FixedLength`:return new gn(e);default:throw Error(`Unknown PreTokenizer type: ${e.type}`)}}var vn=_n,L=class extends N{constructor(e){super(),this.config=e,this.vocab=[],this.tokens_to_ids=new Map,this.unk_token_id=void 0,this.unk_token=void 0,this.end_of_word_suffix=void 0,this.fuse_unk=this.config.fuse_unk??!1}_call(e){let t=this.encode(e);return this.fuse_unk&&(t=Ft(t,this.tokens_to_ids,this.unk_token_id)),t}},yn=class extends L{constructor(e){super(e),this.max_input_chars_per_word=100,this.tokens_to_ids=Bt(e.vocab),this.unk_token_id=this.tokens_to_ids.get(e.unk_token),this.unk_token=e.unk_token,this.max_input_chars_per_word=e.max_input_chars_per_word??100,this.vocab=Array(this.tokens_to_ids.size);for(let[e,t]of this.tokens_to_ids)this.vocab[t]=e}encode(e){let t=[];for(let n of e){let e=[...n];if(e.length>this.max_input_chars_per_word){t.push(this.unk_token);continue}let r=!1,i=0,a=[];for(;i<e.length;){let t=e.length,n=null;for(;i<t;){let r=e.slice(i,t).join(``);if(i>0&&(r=this.config.continuing_subword_prefix+r),this.tokens_to_ids.has(r)){n=r;break}--t}if(n===null){r=!0;break}a.push(n),i=t}r?t.push(this.unk_token):t.push(...a)}return t}},bn=class e{constructor(e,t){this.is_leaf=e,this.children=t}static default(){return new e(!1,new Map)}},xn=class{constructor(){this.root=bn.default()}extend(e){for(let t of e)this.push(t)}push(e){let t=this.root;for(let n of e){let e=t.children.get(n);e===void 0&&(e=bn.default(),t.children.set(n,e)),t=e}t.is_leaf=!0}*common_prefix_search(e){let t=this.root;if(t===void 0)return;let n=``;for(let r of e){if(n+=r,t=t.children.get(r),t===void 0)return;t.is_leaf&&(yield n)}}},Sn=class e{constructor(e,t,n,r,i){this.token_id=e,this.node_id=t,this.pos=n,this.length=r,this.score=i,this.prev=null,this.backtrace_score=0}clone(){let t=new e(this.token_id,this.node_id,this.pos,this.length,this.score);return t.prev=this.prev,t.backtrace_score=this.backtrace_score,t}},Cn=class{constructor(e,t,n){this.chars=Array.from(e),this.len=this.chars.length,this.bos_token_id=t,this.eos_token_id=n,this.nodes=[],this.begin_nodes=Array.from({length:this.len+1},()=>[]),this.end_nodes=Array.from({length:this.len+1},()=>[]);let r=new Sn(this.bos_token_id??0,0,0,0,0),i=new Sn(this.eos_token_id??0,1,this.len,0,0);this.nodes.push(r.clone()),this.nodes.push(i.clone()),this.begin_nodes[this.len].push(i),this.end_nodes[0].push(r)}insert(e,t,n,r){let i=this.nodes.length,a=new Sn(r,i,e,t,n);this.begin_nodes[e].push(a),this.end_nodes[e+t].push(a),this.nodes.push(a)}viterbi(){let e=this.len,t=0;for(;t<=e;){if(this.begin_nodes[t].length==0)return[];for(let e of this.begin_nodes[t]){e.prev=null;let n=0,r=null;for(let i of this.end_nodes[t]){let t=i.backtrace_score+e.score;(r===null||t>n)&&(r=i.clone(),n=t)}if(r!==null)e.prev=r,e.backtrace_score=n;else return[]}++t}let n=[],r=this.begin_nodes[e][0].prev;if(r===null)return[];let i=r.clone();for(;i.prev!==null;)n.push(i.clone()),i=i.clone().prev.clone();return n.reverse(),n}piece(e){return this.chars.slice(e.pos,e.pos+e.length).join(``)}tokens(){return this.viterbi().map(e=>this.piece(e))}token_ids(){return this.viterbi().map(e=>e.token_id)}};function wn(e){if(e.length===0)throw Error(`Array must not be empty`);let t=e[0],n=0;for(let r=1;r<e.length;++r)e[r]<t&&(t=e[r],n=r);return[t,n]}var Tn=class extends L{constructor(e,t){super(e);let n=e.vocab.length;this.vocab=Array(n),this.scores=Array(n);for(let t=0;t<n;++t)[this.vocab[t],this.scores[t]]=e.vocab[t];this.unk_token_id=e.unk_id,this.unk_token=this.vocab[e.unk_id],this.tokens_to_ids=new Map(this.vocab.map((e,t)=>[e,t])),this.bos_token=` `,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=t,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.unk_token=this.vocab[this.unk_token_id],this.min_score=wn(this.scores)[0],this.unk_score=this.min_score-10,this.scores[this.unk_token_id]=this.unk_score,this.trie=new xn,this.trie.extend(this.vocab),this.fuse_unk=!0}populate_nodes(e){let t=e.chars,n=0;for(;n<t.length;){let r=!1,i=[],a=t.slice(n).join(``),o=this.trie.common_prefix_search(a);for(let t of o){i.push(t);let a=this.tokens_to_ids.get(t),o=this.scores[a],s=Rt(t);e.insert(n,s,o,a),!r&&s===1&&(r=!0)}r||e.insert(n,1,this.unk_score,this.unk_token_id),n+=1}}tokenize(e){let t=new Cn(e,this.bos_token_id,this.eos_token_id);return this.populate_nodes(t),t.tokens()}encode(e){let t=[];for(let n of e){let e=this.tokenize(n);t.push(...e)}return t}},En=class{constructor(e=(e,t)=>e>t,t=1/0){this._heap=[],this._comparator=e,this._max_size=t}get size(){return this._heap.length}is_empty(){return this.size===0}peek(){return this._heap[0]}push(...e){return this.extend(e)}extend(e){for(let t of e)if(this.size<this._max_size)this._heap.push(t),this._sift_up();else{let e=this._smallest();this._comparator(t,this._heap[e])&&(this._heap[e]=t,this._sift_up_from(e))}return this.size}pop(){let e=this.peek(),t=this.size-1;return t>0&&this._swap(0,t),this._heap.pop(),this._sift_down(),e}replace(e){let t=this.peek();return this._heap[0]=e,this._sift_down(),t}_parent(e){return(e+1>>>1)-1}_left(e){return(e<<1)+1}_right(e){return e+1<<1}_greater(e,t){return this._comparator(this._heap[e],this._heap[t])}_swap(e,t){let n=this._heap[e];this._heap[e]=this._heap[t],this._heap[t]=n}_sift_up(){this._sift_up_from(this.size-1)}_sift_up_from(e){for(;e>0&&this._greater(e,this._parent(e));)this._swap(e,this._parent(e)),e=this._parent(e)}_sift_down(){let e=0;for(;this._left(e)<this.size&&this._greater(this._left(e),e)||this._right(e)<this.size&&this._greater(this._right(e),e);){let t=this._right(e)<this.size&&this._greater(this._right(e),this._left(e))?this._right(e):this._left(e);this._swap(e,t),e=t}}_smallest(){return 2**Math.floor(Math.log2(this.size))-1}},Dn=class{constructor(e){this.capacity=e,this.cache=new Map}get(e){if(!this.cache.has(e))return;let t=this.cache.get(e);return this.cache.delete(e),this.cache.set(e,t),t}put(e,t){this.cache.has(e)&&this.cache.delete(e),this.cache.set(e,t),this.cache.size>this.capacity&&this.cache.delete(this.cache.keys().next().value)}clear(){this.cache.clear()}},On=class extends L{constructor(e){super(e),this.tokens_to_ids=Bt(e.vocab),this.unk_token_id=this.tokens_to_ids.get(e.unk_token),this.unk_token=e.unk_token,this.vocab=Array(this.tokens_to_ids.size);for(let[e,t]of this.tokens_to_ids)this.vocab[t]=e;let t=Array.isArray(e.merges[0]);this.merges=t?e.merges:e.merges.map(e=>e.split(` `,2)),this.bpe_ranks=new Map(this.merges.map((e,t)=>[JSON.stringify(e),t])),this.end_of_word_suffix=e.end_of_word_suffix,this.continuing_subword_suffix=e.continuing_subword_suffix??null,this.byte_fallback=this.config.byte_fallback??!1,this.byte_fallback&&(this.text_encoder=new TextEncoder),this.ignore_merges=this.config.ignore_merges??!1,this.max_length_to_cache=256,this.cache_capacity=1e4,this.cache=new Dn(this.cache_capacity)}clear_cache(){this.cache.clear()}bpe(e){if(e.length===0)return[];let t=this.cache.get(e);if(t!==void 0)return t;let n=Array.from(e);this.end_of_word_suffix&&(n[n.length-1]+=this.end_of_word_suffix);let r=[];if(n.length>1){let e=new En((e,t)=>e.score<t.score),t={token:n[0],bias:0,prev:null,next:null},i=t;for(let t=1;t<n.length;++t){let r={bias:t/n.length,token:n[t],prev:i,next:null};i.next=r,this.add_node(e,i),i=r}for(;!e.is_empty();){let n=e.pop();if(n.deleted||!n.next||n.next.deleted)continue;if(n.deleted=!0,n.next.deleted=!0,n.prev){let e={...n.prev};n.prev.deleted=!0,n.prev=e,e.prev?e.prev.next=e:t=e}let r={token:n.token+n.next.token,bias:n.bias,prev:n.prev,next:n.next.next};r.prev?(r.prev.next=r,this.add_node(e,r.prev)):t=r,r.next&&(r.next.prev=r,this.add_node(e,r))}for(let e=t;e!==null;e=e.next)r.push(e.token)}else r=n;if(this.continuing_subword_suffix)for(let e=0;e<r.length-1;++e)r[e]+=this.continuing_subword_suffix;return e.length<this.max_length_to_cache&&this.cache.put(e,r),r}add_node(e,t){let n=this.bpe_ranks.get(JSON.stringify([t.token,t.next.token]));n!==void 0&&(t.score=n+t.bias,e.push(t))}encode(e){let t=[];for(let n of e){if(this.ignore_merges&&this.tokens_to_ids.has(n)){t.push(n);continue}let e=this.bpe(n);for(let n of e)if(this.tokens_to_ids.has(n))t.push(n);else if(this.byte_fallback){let e=Array.from(this.text_encoder.encode(n)).map(e=>`<0x${e.toString(16).toUpperCase().padStart(2,`0`)}>`);e.every(e=>this.tokens_to_ids.has(e))?t.push(...e):this.unk_token!=null&&t.push(this.unk_token)}else this.unk_token!=null&&t.push(this.unk_token)}return t}},kn=class extends L{constructor(e,t){super(e);let n=e.vocab;this.tokens_to_ids=Bt(t.target_lang?n[t.target_lang]:n),this.bos_token=t.bos_token,this.bos_token_id=this.tokens_to_ids.get(this.bos_token),this.eos_token=t.eos_token,this.eos_token_id=this.tokens_to_ids.get(this.eos_token),this.pad_token=t.pad_token,this.pad_token_id=this.tokens_to_ids.get(this.pad_token),this.unk_token=t.unk_token,this.unk_token_id=this.tokens_to_ids.get(this.unk_token),this.vocab=Array(this.tokens_to_ids.size);for(let[e,t]of this.tokens_to_ids)this.vocab[t]=e}encode(e){return e}};function An(e,t){switch(e.type){case`WordPiece`:return new yn(e);case`Unigram`:return new Tn(e,t.eos_token);case`BPE`:return new On(e);default:if(e.vocab)return Array.isArray(e.vocab)?new Tn(e,t.eos_token):Object.hasOwn(e,`continuing_subword_prefix`)&&Object.hasOwn(e,`unk_token`)?Object.hasOwn(e,`merges`)?new On(e):new yn(e):new kn(e,{target_lang:t.target_lang,bos_token:t.bos_token,eos_token:t.eos_token,pad_token:t.pad_token,unk_token:t.unk_token});throw Error(`Unknown TokenizerModel type: ${e?.type}`)}}var jn=An,R=class extends N{constructor(e){super(),this.config=e}_call(e,...t){return this.post_process(e,...t)}},Mn=class extends R{post_process(e,t=null,n=!0){let r=t===null?this.config.single:this.config.pair,i=[],a=[];for(let o of r)`SpecialToken`in o?n&&(i.push(o.SpecialToken.id),a.push(o.SpecialToken.type_id)):`Sequence`in o&&(o.Sequence.id===`A`?(i=M(i,e),a=M(a,Array(e.length).fill(o.Sequence.type_id))):o.Sequence.id===`B`&&(i=M(i,t),a=M(a,Array(t.length).fill(o.Sequence.type_id))));return{tokens:i,token_type_ids:a}}},Nn=class extends R{post_process(e,t=null){return{tokens:e,tokens_pair:t}}},Pn=class extends R{constructor(e){super(e),this.sep=e.sep,this.cls=e.cls}post_process(e,t=null,n=!0){n&&(e=M([this.cls[0]],e,[this.sep[0]]));let r=Array(e.length).fill(0);if(t){let i=[],a=n?[this.sep[0]]:[];e=M(e,i,t,a),r=M(r,Array(t.length+i.length+a.length).fill(1))}return{tokens:e,token_type_ids:r}}},Fn=class extends R{constructor(e){super(e),this.sep=e.sep,this.cls=e.cls}post_process(e,t,n=!0){n&&(e=M([this.cls[0]],e,[this.sep[0]]));let r=Array(e.length).fill(0);if(t){let i=n?[this.sep[0]]:[],a=n?[this.sep[0]]:[];e=M(e,i,t,a),r=M(r,Array(t.length+i.length+a.length).fill(1))}return{tokens:e,token_type_ids:r}}},In=class extends R{constructor(e){super(e),this.processors=(e.processors??[]).map(e=>Rn(e))}post_process(e,t=null,n=!0){let r={tokens:e,tokens_pair:t};for(let e of this.processors)r=e.post_process(r.tokens,r.tokens_pair,n);return r}};function Ln(e){if(e===null)return null;switch(e.type){case`TemplateProcessing`:return new Mn(e);case`ByteLevel`:return new Nn(e);case`BertProcessing`:return new Pn(e);case`RobertaProcessing`:return new Fn(e);case`Sequence`:return new In(e);default:throw Error(`Unknown PostProcessor type: ${e.type}`)}}var Rn=Ln,z=class extends N{constructor(e){super(),this.config=e,this.added_tokens=[],this.end_of_word_suffix=null,this.trim_offsets=`trim_offsets`in e?e.trim_offsets:!1}_call(e){return this.decode(e)}decode(e){return this.decode_chain(e).join(``)}},zn=class extends z{constructor(e){super(e),this.byte_decoder=Ot,this.text_decoder=new TextDecoder(`utf-8`,{fatal:!1,ignoreBOM:!0}),this.end_of_word_suffix=null}convert_tokens_to_string(e){let t=e.join(``),n=new Uint8Array([...t].map(e=>this.byte_decoder[e]));return this.text_decoder.decode(n)}decode_chain(e){let t=[],n=[];for(let r of e)this.added_tokens.find(e=>e.content===r)===void 0?n.push(r):(n.length>0&&(t.push(this.convert_tokens_to_string(n)),n=[]),t.push(r));return n.length>0&&t.push(this.convert_tokens_to_string(n)),t}},Bn=class extends z{constructor(e){super(e),this.cleanup=e.cleanup}decode_chain(e){return e.map((e,t)=>{if(t!==0){let t=this.config.prefix;e=t&&e.startsWith(t)?e.replace(t,``):` `+e}return this.cleanup&&(e=Mt(e)),e})}},Vn=class extends z{constructor(e){super(e),this.replacement=e.replacement??`▁`}decode_chain(e){let t=[];for(let n=0;n<e.length;++n){let r=e[n].replaceAll(this.replacement,` `);n==0&&r.startsWith(` `)&&(r=r.substring(1)),t.push(r)}return t}},Hn=class extends z{constructor(e){super(e),this.suffix=e.suffix??``}decode_chain(e){return e.map((t,n)=>t.replaceAll(this.suffix,n===e.length-1?``:` `))}},Un=class extends z{constructor(e){super(e),this.pad_token=e.pad_token??``,this.word_delimiter_token=e.word_delimiter_token??``,this.cleanup=e.cleanup}convert_tokens_to_string(e){if(e.length===0)return``;let t=[e[0]];for(let n=1;n<e.length;++n)e[n]!==t.at(-1)&&t.push(e[n]);let n=t.filter(e=>e!==this.pad_token).join(``);return this.cleanup&&(n=Mt(n).replaceAll(this.word_delimiter_token,` `).trim()),n}decode_chain(e){return[this.convert_tokens_to_string(e)]}},Wn=class extends z{constructor(e){super(e),this.decoders=(e.decoders??[]).map(e=>Xn(e))}decode_chain(e){return this.decoders.reduce((e,t)=>t.decode_chain(e),e)}},Gn=class extends z{decode_chain(e){let t=Nt(this.config.pattern),n=this.config.content??``;return t===null?e:e.map(e=>e.replaceAll(t,n))}},Kn=class extends z{decode_chain(e){return[e.join(``)]}},qn=class extends z{constructor(e){super(e),this.content=e.content??``,this.start=e.start??0,this.stop=e.stop??0}decode_chain(e){return e.map(e=>{let t=0;for(let n=0;n<this.start&&e[n]===this.content;++n)t=n+1;let n=e.length;for(let t=0;t<this.stop;++t){let r=e.length-t-1;if(e[r]===this.content){n=r;continue}else break}return e.slice(t,n)})}},Jn=class extends z{constructor(e){super(e),this.text_decoder=new TextDecoder}decode_chain(e){let t=[],n=[];for(let r of e){let e=null;if(r.length===6&&r.startsWith(`<0x`)&&r.endsWith(`>`)){let t=parseInt(r.slice(3,5),16);isNaN(t)||(e=t)}if(e!==null)n.push(e);else{if(n.length>0){let e=this.text_decoder.decode(Uint8Array.from(n));t.push(e),n=[]}t.push(r)}}if(n.length>0){let e=this.text_decoder.decode(Uint8Array.from(n));t.push(e),n=[]}return t}};function Yn(e){if(e===null)return null;switch(e.type){case`ByteLevel`:return new zn(e);case`WordPiece`:return new Bn(e);case`Metaspace`:return new Vn(e);case`BPEDecoder`:return new Hn(e);case`CTC`:return new Un(e);case`Sequence`:return new Wn(e);case`Replace`:return new Gn(e);case`Fuse`:return new Kn(e);case`Strip`:return new qn(e);case`ByteFallback`:return new Jn(e);default:throw Error(`Unknown Decoder type: ${e.type}`)}}var Xn=Yn,Zn=class{constructor(e,t){let n=Ut(e,`Tokenizer`,[`model`,`decoder`,`post_processor`,`pre_tokenizer`,`normalizer`]);if(n)throw Error(n);let r=Ut(t,`Config`);if(r)throw Error(r);this.tokenizer=e,this.config=t,this.normalizer=an(this.tokenizer.normalizer),this.pre_tokenizer=vn(this.tokenizer.pre_tokenizer),this.model=jn(this.tokenizer.model,this.config),this.post_processor=Rn(this.tokenizer.post_processor),this.decoder=Xn(this.tokenizer.decoder),this.special_tokens=[],this.all_special_ids=[],this.added_tokens=[];let i=[],a=[];this.added_tokens_map=new Map;for(let e of this.tokenizer.added_tokens){let t=new Et(e);if(this.added_tokens.push(t),this.model.tokens_to_ids.set(t.content,t.id),this.model.vocab[t.id]=t.content,t.special&&(this.special_tokens.push(t.content),this.all_special_ids.push(t.id)),this.added_tokens_map.set(t.content,t),t.normalized&&this.normalizer!==null){let e=this.normalizer(t.content);a.push(e),this.added_tokens_map.set(e,t)}else i.push(t.content)}(this.config.additional_special_tokens??[]).forEach(e=>{this.special_tokens.includes(e)||this.special_tokens.push(e)}),this.decoder&&(this.decoder.added_tokens=this.added_tokens,this.decoder.end_of_word_suffix=this.model.end_of_word_suffix),this.splitter_unnormalized=new Tt(i),this.splitter_normalized=new Tt(a),this.remove_space=this.config.remove_space,this.clean_up_tokenization_spaces=this.config.clean_up_tokenization_spaces??!0,this.do_lowercase_and_remove_accent=this.config.do_lowercase_and_remove_accent??!1}encode(e,{text_pair:t=null,add_special_tokens:n=!0,return_token_type_ids:r=null}={}){let{tokens:i,token_type_ids:a}=this.tokenize_helper(e,{text_pair:t,add_special_tokens:n}),o=i.map(e=>this.added_tokens_map.get(e)?.id??this.model.tokens_to_ids.get(e)??this.model.unk_token_id),s={ids:o,tokens:i,attention_mask:Array(o.length).fill(1)};return r&&a&&(s.token_type_ids=a),s}decode(e,t={}){if(!Array.isArray(e)||e.length===0||!Lt(e[0]))throw Error(`token_ids must be a non-empty array of integers.`);let n=e.map(e=>this.model.vocab[Number(e)]??this.model.unk_token);t.skip_special_tokens&&(n=n.filter(e=>!this.special_tokens.includes(e)));let r=this.decoder?this.decoder(n):n.join(` `);return this.decoder&&this.decoder.end_of_word_suffix&&(r=r.replaceAll(this.decoder.end_of_word_suffix,` `),t.skip_special_tokens&&(r=r.trim())),(t.clean_up_tokenization_spaces??this.clean_up_tokenization_spaces)&&(r=Mt(r)),r}tokenize(e,{text_pair:t=null,add_special_tokens:n=!1}={}){return this.tokenize_helper(e,{text_pair:t,add_special_tokens:n}).tokens}encode_text(e){if(e===null)return null;let t=this.splitter_unnormalized.split(e);return t.forEach((e,n)=>{let r=this.added_tokens_map.get(e);r&&(r.lstrip&&n>0&&(t[n-1]=t[n-1].trimEnd()),r.rstrip&&n<t.length-1&&(t[n+1]=t[n+1].trimStart()))}),t.flatMap((e,t)=>{if(e.length===0)return[];if(this.added_tokens_map.has(e))return[e];if(this.remove_space===!0&&(e=e.trim().split(/\s+/).join(` `)),this.do_lowercase_and_remove_accent&&(e=zt(e)),this.normalizer!==null&&(e=this.normalizer(e)),e.length===0)return[];let n=this.splitter_normalized.split(e);return n.forEach((e,t)=>{let r=this.added_tokens_map.get(e);r&&(r.lstrip&&t>0&&(n[t-1]=n[t-1].trimEnd()),r.rstrip&&t<n.length-1&&(n[t+1]=n[t+1].trimStart()))}),n.flatMap(e=>{if(e.length===0)return[];if(this.added_tokens_map.has(e))return[e];let n=this.pre_tokenizer===null?[e]:this.pre_tokenizer(e,{section_index:t});return this.model(n)})})}tokenize_helper(e,{text_pair:t=null,add_special_tokens:n=!0}){let r=this.encode_text(e),i=this.encode_text(t||null);return this.post_processor?this.post_processor(r,i,n):{tokens:M(r??[],i??[])}}token_to_id(e){return this.model.tokens_to_ids.get(e)}id_to_token(e){return this.model.vocab[e]}get_added_tokens_decoder(){let e=new Map;for(let t of this.added_tokens)e.set(t.id,t);return e}get_vocab(e=!0){let t=new Map;for(let n=0;n<this.model.vocab.length;++n){let r=this.model.vocab[n];(e||!this.added_tokens_map.has(r))&&t.set(r,n)}return t}};const Qn=(e,t)=>{if(!e.has(t))throw Error(`Missing required key ${JSON.stringify(t)} in structured data.`);return e.get(t)},B=e=>{if(Array.isArray(e))return e.map(e=>B(e));if(e instanceof Map){let t=Object.create(null);for(let[n,r]of e.entries()){if(typeof n!=`string`)throw TypeError(`Expected string structured-data key, got ${typeof n}.`);t[n]=B(r)}return t}return e},$n=Zn,er={add_special_tokens:!1},tr={clean_up_tokenization_spaces:!1,skip_special_tokens:!1};var nr=class extends pt{modelId;constructor(e){super(),this.modelId=e}createState(){return{tokenizer:new $n(B(j(this.modelId,`tokenizer.msgpack`)),B(j(this.modelId,`tokenizer_config.msgpack`)))}}encodeWithState(e,t){return[...t.tokenizer.encode(e,er).ids]}tokenizeWithState(e,t){let n=this.encodeWithState(e,t);return dt(n,n.map(e=>lt(t.tokenizer.decode([e],tr))))}},rr=e({Tiktoken:()=>Sr,__wbg_parse_def2e24ef1252aff:()=>Cr,__wbg_set_wasm:()=>ir,__wbg_stringify_f7ed6987935b4a24:()=>wr,__wbindgen_error_new:()=>Tr,__wbindgen_is_undefined:()=>Er,__wbindgen_object_drop_ref:()=>Dr,__wbindgen_string_get:()=>Or,__wbindgen_throw:()=>kr,encoding_for_model:()=>yr,get_encoding:()=>vr,get_encoding_name_for_model:()=>br});let V;function ir(e){V=e}let ar=new(typeof TextDecoder>`u`?(0,module.require)(`util`).TextDecoder:TextDecoder)(`utf-8`,{ignoreBOM:!0,fatal:!0});ar.decode();let H=null;function U(){return(H===null||H.byteLength===0)&&(H=new Uint8Array(V.memory.buffer)),H}function W(e,t){return e>>>=0,ar.decode(U().subarray(e,e+t))}const G=Array(128).fill(void 0);G.push(void 0,null,!0,!1);let K=G.length;function q(e){K===G.length&&G.push(G.length+1);let t=K;return K=G[t],G[t]=e,t}function or(e,t){try{return e.apply(this,t)}catch(e){V.__wbindgen_export_0(q(e))}}function sr(e){return G[e]}function cr(e){e<132||(G[e]=K,K=e)}function J(e){let t=sr(e);return cr(e),t}let Y=0,lr=new(typeof TextEncoder>`u`?(0,module.require)(`util`).TextEncoder:TextEncoder)(`utf-8`);const ur=typeof lr.encodeInto==`function`?function(e,t){return lr.encodeInto(e,t)}:function(e,t){let n=lr.encode(e);return t.set(n),{read:e.length,written:n.length}};function X(e,t,n){if(n===void 0){let n=lr.encode(e),r=t(n.length,1)>>>0;return U().subarray(r,r+n.length).set(n),Y=n.length,r}let r=e.length,i=t(r,1)>>>0,a=U(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=U().subarray(i+o,i+r),a=ur(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return Y=o,i}function dr(e){return e==null}let Z=null;function Q(){return(Z===null||Z.buffer.detached===!0||Z.buffer.detached===void 0&&Z.buffer!==V.memory.buffer)&&(Z=new DataView(V.memory.buffer)),Z}let fr=null;function pr(){return(fr===null||fr.byteLength===0)&&(fr=new Uint32Array(V.memory.buffer)),fr}function mr(e,t){return e>>>=0,pr().subarray(e/4,e/4+t)}function hr(e,t){let n=t(e.length*1,1)>>>0;return U().set(e,n/1),Y=e.length,n}function gr(e,t){let n=t(e.length*4,4)>>>0;return pr().set(e,n/4),Y=e.length,n}function _r(e,t){return e>>>=0,U().subarray(e/1,e/1+t)}function vr(e,t){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let i=V.__wbindgen_add_to_stack_pointer(-16),a=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),o=Y;V.get_encoding(i,a,o,q(t));var n=Q().getInt32(i+0,!0),r=Q().getInt32(i+4,!0);if(Q().getInt32(i+8,!0))throw J(r);return Sr.__wrap(n)}finally{V.__wbindgen_add_to_stack_pointer(16)}}function yr(e,t){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let i=V.__wbindgen_add_to_stack_pointer(-16),a=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),o=Y;V.encoding_for_model(i,a,o,q(t));var n=Q().getInt32(i+0,!0),r=Q().getInt32(i+4,!0);if(Q().getInt32(i+8,!0))throw J(r);return Sr.__wrap(n)}finally{V.__wbindgen_add_to_stack_pointer(16)}}function br(e){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);let t,n;try{let l=V.__wbindgen_add_to_stack_pointer(-16),u=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),d=Y;V.get_encoding_name_for_model(l,u,d);var r=Q().getInt32(l+0,!0),i=Q().getInt32(l+4,!0),a=Q().getInt32(l+8,!0),o=Q().getInt32(l+12,!0),s=r,c=i;if(o)throw s=0,c=0,J(a);return t=s,n=c,W(s,c)}finally{V.__wbindgen_add_to_stack_pointer(16),V.__wbindgen_export_3(t,n,1)}}const xr=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>V.__wbg_tiktoken_free(e>>>0,1));var Sr=class e{static __wrap(t){t>>>=0;let n=Object.create(e.prototype);return n.__wbg_ptr=t,xr.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,xr.unregister(this),e}free(){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);let e=this.__destroy_into_raw();V.__wbg_tiktoken_free(e,0)}constructor(e,t,n){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);let r=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),i=Y,a=X(n,V.__wbindgen_export_1,V.__wbindgen_export_2),o=Y,s=V.tiktoken_new(r,i,q(t),a,o);return this.__wbg_ptr=s>>>0,xr.register(this,this.__wbg_ptr,this),this}get name(){try{let n=V.__wbindgen_add_to_stack_pointer(-16);V.tiktoken_name(n,this.__wbg_ptr);var e=Q().getInt32(n+0,!0),t=Q().getInt32(n+4,!0);let r;return e!==0&&(r=W(e,t).slice(),V.__wbindgen_export_3(e,t*1,1)),r}finally{V.__wbindgen_add_to_stack_pointer(16)}}encode(e,t,n){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let s=V.__wbindgen_add_to_stack_pointer(-16),c=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),l=Y;V.tiktoken_encode(s,this.__wbg_ptr,c,l,q(t),q(n));var r=Q().getInt32(s+0,!0),i=Q().getInt32(s+4,!0),a=Q().getInt32(s+8,!0);if(Q().getInt32(s+12,!0))throw J(a);var o=mr(r,i).slice();return V.__wbindgen_export_3(r,i*4,4),o}finally{V.__wbindgen_add_to_stack_pointer(16)}}encode_ordinary(e){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let i=V.__wbindgen_add_to_stack_pointer(-16),a=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),o=Y;V.tiktoken_encode_ordinary(i,this.__wbg_ptr,a,o);var t=Q().getInt32(i+0,!0),n=Q().getInt32(i+4,!0),r=mr(t,n).slice();return V.__wbindgen_export_3(t,n*4,4),r}finally{V.__wbindgen_add_to_stack_pointer(16)}}encode_with_unstable(e,t,n){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let a=V.__wbindgen_add_to_stack_pointer(-16),o=X(e,V.__wbindgen_export_1,V.__wbindgen_export_2),s=Y;V.tiktoken_encode_with_unstable(a,this.__wbg_ptr,o,s,q(t),q(n));var r=Q().getInt32(a+0,!0),i=Q().getInt32(a+4,!0);if(Q().getInt32(a+8,!0))throw J(i);return J(r)}finally{V.__wbindgen_add_to_stack_pointer(16)}}encode_single_token(e){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);let t=hr(e,V.__wbindgen_export_1),n=Y;return V.tiktoken_encode_single_token(this.__wbg_ptr,t,n)>>>0}decode(e){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let i=V.__wbindgen_add_to_stack_pointer(-16),a=gr(e,V.__wbindgen_export_1),o=Y;V.tiktoken_decode(i,this.__wbg_ptr,a,o);var t=Q().getInt32(i+0,!0),n=Q().getInt32(i+4,!0),r=_r(t,n).slice();return V.__wbindgen_export_3(t,n*1,1),r}finally{V.__wbindgen_add_to_stack_pointer(16)}}decode_single_token_bytes(e){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);try{let i=V.__wbindgen_add_to_stack_pointer(-16);V.tiktoken_decode_single_token_bytes(i,this.__wbg_ptr,e);var t=Q().getInt32(i+0,!0),n=Q().getInt32(i+4,!0),r=_r(t,n).slice();return V.__wbindgen_export_3(t,n*1,1),r}finally{V.__wbindgen_add_to_stack_pointer(16)}}token_byte_values(){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);return J(V.tiktoken_token_byte_values(this.__wbg_ptr))}};function Cr(){return or(function(e,t){return q(JSON.parse(W(e,t)))},arguments)}function wr(){return or(function(e){return q(JSON.stringify(sr(e)))},arguments)}function Tr(e,t){return q(Error(W(e,t)))}function Er(e){return sr(e)===void 0}function Dr(e){J(e)}function Or(e,t){if(V==null)throw Error(`tiktoken: WASM binary has not been propery initialized.`);let n=sr(t),r=typeof n==`string`?n:void 0;var i=dr(r)?0:X(r,V.__wbindgen_export_1,V.__wbindgen_export_2),a=Y;Q().setInt32(e+4,a,!0),Q().setInt32(e+0,i,!0)}function kr(e,t){throw Error(W(e,t))}let Ar=!1;async function jr(e){if(Ar)return rr;let t=await e({"./tiktoken_bg.js":rr}),n=`instance`in t&&t.instance instanceof WebAssembly.Instance?t.instance:t instanceof WebAssembly.Instance?t:null;if(n==null)throw Error(`Missing instance`);return ir(n.exports),Ar=!0,rr}const Mr=new URL(`../tiktoken_bg.wasm`,import.meta.url).href;await(async()=>{await jr(async e=>{let t=e,n=await fetch(Mr);if(!n.ok)throw Error(`Failed to load tiktoken WASM from ${JSON.stringify(Mr)}: ${n.status} ${n.statusText}`);if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(n.clone(),t)}catch{}return WebAssembly.instantiate(await n.arrayBuffer(),t)})})();var Nr=class extends pt{disposeState(e){e.free()}tokenizeWithState(e,t){let n=this.encodeWithState(e,t);return dt(n,n.map(e=>t.decode_single_token_bytes(e).length))}},Pr=class extends Nr{modelId;constructor(e){super(),this.modelId=e}createState(){return vr(Qn(j(this.modelId,`config.msgpack`),`encoding`))}encodeWithState(e,t){return[...t.encode(e)]}},Fr=class extends Nr{modelId;constructor(e){super(),this.modelId=e}createState(){let e=j(this.modelId,`config.msgpack`);return new Sr(Ye(this.modelId,`tiktoken.model`),B(Qn(e,`special_tokens`)),Qn(e,`pat_str`))}encodeWithState(e,t){return[...t.encode(e)]}};const $=new Map,Ir=e=>{let t=$.get(e);if(t)return t;let n=ke[e],r;switch(n.kind){case`tiktoken-builtin`:r=new Pr(e);break;case`tiktoken-custom`:r=new Fr(e);break;case`huggingface`:r=new nr(e);break;case`clip-bpe`:r=new wt(e);break}return $.set(e,r),r},Lr=e=>{if(e){$.get(e)?.free(),$.delete(e);return}for(let e of $.values())e.free();$.clear()},Rr=(e,t)=>{if(typeof t==`string`){let[e]=it(t);return e}let n=t?.model;if(typeof n!=`string`)throw TypeError(`${e}() requires a single model ID as the second argument.`);let[r]=it(n);return r};function zr(e,t){return Ir(Rr(`tokenizeLoaded`,t)).tokenize(e)}function Br(e,t){return Ir(Rr(`countLoaded`,t)).getTokenCount(e)}async function Vr(e){let t=it(e);return await Ke(t),typeof e==`string`?t[0]:t}async function Hr(e,t){let n=Rr(`tokenize`,t);return await Vr(n),zr(e,n)}async function Ur(e,t){let n=Rr(`count`,t);return await Vr(n),Br(e,n)}const Wr=e=>{Je(e),Lr(e)};export{Hr as a,ke as c,Vr as i,Br as n,zr as o,Wr as r,E as s,Ur as t};
|
|
Binary file
|
package/gemma.msgpack.br
ADDED
|
Binary file
|
package/glm.msgpack.br
ADDED
|
Binary file
|
package/gpt.msgpack.br
ADDED
|
Binary file
|
package/hy.msgpack.br
ADDED
|
Binary file
|
package/kimi.msgpack.br
ADDED
|
Binary file
|
package/lib/api.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ModelId } from './models.js';
|
|
2
|
+
import type { ModelSelection } from './modelSelection.js';
|
|
3
|
+
import type { RawTokenizeResult, TokenizeInput } from './tokenization.js';
|
|
4
|
+
import { modelIds, models } from './models.js';
|
|
5
|
+
export type { ModelSelection } from './modelSelection.js';
|
|
6
|
+
export type CountResult = number;
|
|
7
|
+
export type CountTokensResult = CountResult;
|
|
8
|
+
export type TokenizeResult<InputGeneric extends TokenizeInput = TokenizeInput> = RawTokenizeResult<InputGeneric>;
|
|
9
|
+
export type TokenizeOptions<TModel extends ModelId = ModelId> = SingleModelOptions<TModel>;
|
|
10
|
+
export type CountOptions<TModel extends ModelId = ModelId> = SingleModelOptions<TModel>;
|
|
11
|
+
export type CountTokensOptions<TModel extends ModelId = ModelId> = CountOptions<TModel>;
|
|
12
|
+
type SingleModelOptions<TModel extends ModelId = ModelId> = {
|
|
13
|
+
model: TModel;
|
|
14
|
+
};
|
|
15
|
+
export declare function tokenizeLoaded<InputGeneric extends TokenizeInput, TModel extends ModelId>(input: InputGeneric, model: TModel): RawTokenizeResult<InputGeneric>;
|
|
16
|
+
export declare function tokenizeLoaded<InputGeneric extends TokenizeInput, TModel extends ModelId>(input: InputGeneric, options: TokenizeOptions<TModel>): RawTokenizeResult<InputGeneric>;
|
|
17
|
+
export declare function countLoaded<TModel extends ModelId>(input: TokenizeInput, model: TModel): CountResult;
|
|
18
|
+
export declare function countLoaded<TModel extends ModelId>(input: TokenizeInput, options: CountOptions<TModel>): CountResult;
|
|
19
|
+
export declare function load<TModel extends ModelId>(model: TModel): Promise<TModel>;
|
|
20
|
+
export declare function load(model?: ModelSelection): Promise<Array<ModelId>>;
|
|
21
|
+
export declare function tokenize<InputGeneric extends TokenizeInput, TModel extends ModelId>(input: InputGeneric, model: TModel): Promise<RawTokenizeResult<InputGeneric>>;
|
|
22
|
+
export declare function tokenize<InputGeneric extends TokenizeInput, TModel extends ModelId>(input: InputGeneric, options: TokenizeOptions<TModel>): Promise<RawTokenizeResult<InputGeneric>>;
|
|
23
|
+
export declare function count<TModel extends ModelId>(input: TokenizeInput, model: TModel): Promise<CountResult>;
|
|
24
|
+
export declare function count<TModel extends ModelId>(input: TokenizeInput, options: CountOptions<TModel>): Promise<CountResult>;
|
|
25
|
+
export declare const free: (modelId?: ModelId) => void;
|
|
26
|
+
export { modelIds, models };
|
|
27
|
+
export default tokenize;
|
|
28
|
+
export type { ModelId };
|
|
29
|
+
export type { RawTokenizeResult, TokenizeInput } from './tokenization.js';
|
package/lib/data.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ModelAssetBundleLoader, ModelAssetFiles } from './modelAssets/base/ModelAssetBundleLoader.js';
|
|
2
|
+
import type { ModelId } from './models.js';
|
|
3
|
+
export type ModelAssetMap = Partial<Record<ModelId, ModelAssetFiles>>;
|
|
4
|
+
export declare const registerModelAssetBundleLoader: (loader: ModelAssetBundleLoader) => void;
|
|
5
|
+
export declare const loadModelAssets: (selectedModels: ReadonlyArray<ModelId>) => Promise<void>;
|
|
6
|
+
export declare const freeModelAssets: (modelId?: ModelId) => void;
|
|
7
|
+
export declare const readModelTextFile: (modelId: ModelId, fileName: string) => string;
|
|
8
|
+
export declare const readModelMsgpackFile: <T>(modelId: ModelId, fileName: string) => T;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ModelId } from '../../models.js';
|
|
2
|
+
export type ModelAssetFiles = Record<string, Uint8Array>;
|
|
3
|
+
export declare abstract class ModelAssetBundleLoader {
|
|
4
|
+
load(modelId: ModelId): Promise<ModelAssetFiles>;
|
|
5
|
+
protected abstract readCompressedBundle(modelId: ModelId): Promise<Uint8Array>;
|
|
6
|
+
}
|
package/lib/models.d.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
export type ModelId = 'deepseek' | 'gemma' | 'glm' | 'gpt' | 'hy' | 'kimi' | 'mimo' | 'minimax' | 'qwen' | 'sdxl' | 'step';
|
|
2
|
+
export type ModelDefinition = BuiltinTiktokenModelDefinition | ClipBpeModelDefinition | CustomTiktokenModelDefinition | HuggingFaceModelDefinition;
|
|
3
|
+
type BaseModelDefinition = {
|
|
4
|
+
openrouter?: string;
|
|
5
|
+
title: string;
|
|
6
|
+
};
|
|
7
|
+
type BuiltinTiktokenModelDefinition = BaseModelDefinition & {
|
|
8
|
+
encoding: 'o200k_base';
|
|
9
|
+
kind: 'tiktoken-builtin';
|
|
10
|
+
source: {
|
|
11
|
+
encodingJsonUrl: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
type CustomTiktokenModelDefinition = BaseModelDefinition & {
|
|
15
|
+
kind: 'tiktoken-custom';
|
|
16
|
+
source: {
|
|
17
|
+
modelUrl: string;
|
|
18
|
+
tokenizerConfigUrl: string;
|
|
19
|
+
tokenizerImplementationUrl: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
type HuggingFaceModelDefinition = BaseModelDefinition & {
|
|
23
|
+
kind: 'huggingface';
|
|
24
|
+
source: {
|
|
25
|
+
specialTokensMapUrl?: string;
|
|
26
|
+
tokenizerConfigUrl: string;
|
|
27
|
+
tokenizerJsonUrl: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
type ClipBpeModelDefinition = BaseModelDefinition & {
|
|
31
|
+
kind: 'clip-bpe';
|
|
32
|
+
source: {
|
|
33
|
+
mergesUrl: string;
|
|
34
|
+
specialTokensMapUrl?: string;
|
|
35
|
+
tokenizerConfigUrl: string;
|
|
36
|
+
vocabUrl: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare const models: {
|
|
40
|
+
readonly gpt: {
|
|
41
|
+
readonly encoding: "o200k_base";
|
|
42
|
+
readonly kind: "tiktoken-builtin";
|
|
43
|
+
readonly openrouter: "openai/gpt-5.5";
|
|
44
|
+
readonly source: {
|
|
45
|
+
readonly encodingJsonUrl: "https://tiktoken.pages.dev/js/o200k_base.json";
|
|
46
|
+
};
|
|
47
|
+
readonly title: "GPT-5.5";
|
|
48
|
+
};
|
|
49
|
+
readonly gemma: {
|
|
50
|
+
readonly kind: "huggingface";
|
|
51
|
+
readonly openrouter: "google/gemma-4-31b-it";
|
|
52
|
+
readonly source: {
|
|
53
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/google/gemma-4-31B-it/resolve/main/tokenizer_config.json";
|
|
54
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/google/gemma-4-31B-it/resolve/main/tokenizer.json";
|
|
55
|
+
};
|
|
56
|
+
readonly title: "Gemma 4 31B it";
|
|
57
|
+
};
|
|
58
|
+
readonly qwen: {
|
|
59
|
+
readonly kind: "huggingface";
|
|
60
|
+
readonly openrouter: "qwen/qwen3.6-27b";
|
|
61
|
+
readonly source: {
|
|
62
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/Qwen/Qwen3.6-27B/resolve/main/tokenizer_config.json";
|
|
63
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/Qwen/Qwen3.6-27B/resolve/main/tokenizer.json";
|
|
64
|
+
};
|
|
65
|
+
readonly title: "Qwen 3.6 27B";
|
|
66
|
+
};
|
|
67
|
+
readonly kimi: {
|
|
68
|
+
readonly kind: "tiktoken-custom";
|
|
69
|
+
readonly openrouter: "moonshotai/kimi-k2.6";
|
|
70
|
+
readonly source: {
|
|
71
|
+
readonly modelUrl: "https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tiktoken.model";
|
|
72
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tokenizer_config.json";
|
|
73
|
+
readonly tokenizerImplementationUrl: "https://huggingface.co/moonshotai/Kimi-K2.6/resolve/main/tokenization_kimi.py";
|
|
74
|
+
};
|
|
75
|
+
readonly title: "Kimi K2.6";
|
|
76
|
+
};
|
|
77
|
+
readonly deepseek: {
|
|
78
|
+
readonly kind: "huggingface";
|
|
79
|
+
readonly openrouter: "deepseek/deepseek-v4-pro";
|
|
80
|
+
readonly source: {
|
|
81
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/resolve/main/tokenizer_config.json";
|
|
82
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro/resolve/main/tokenizer.json";
|
|
83
|
+
};
|
|
84
|
+
readonly title: "DeepSeek V4 Pro";
|
|
85
|
+
};
|
|
86
|
+
readonly mimo: {
|
|
87
|
+
readonly kind: "huggingface";
|
|
88
|
+
readonly openrouter: "xiaomi/mimo-v2.5-pro";
|
|
89
|
+
readonly source: {
|
|
90
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/XiaomiMiMo/MiMo-V2.5-Pro/resolve/main/tokenizer_config.json";
|
|
91
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/XiaomiMiMo/MiMo-V2.5-Pro/resolve/main/tokenizer.json";
|
|
92
|
+
};
|
|
93
|
+
readonly title: "MiMo V2.5 Pro";
|
|
94
|
+
};
|
|
95
|
+
readonly sdxl: {
|
|
96
|
+
readonly kind: "clip-bpe";
|
|
97
|
+
readonly source: {
|
|
98
|
+
readonly mergesUrl: "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/merges.txt";
|
|
99
|
+
readonly specialTokensMapUrl: "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/special_tokens_map.json";
|
|
100
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/tokenizer_config.json";
|
|
101
|
+
readonly vocabUrl: "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/tokenizer_2/vocab.json";
|
|
102
|
+
};
|
|
103
|
+
readonly title: "Stable Diffusion XL";
|
|
104
|
+
};
|
|
105
|
+
readonly glm: {
|
|
106
|
+
readonly kind: "huggingface";
|
|
107
|
+
readonly openrouter: "zai-org/glm-5.1";
|
|
108
|
+
readonly source: {
|
|
109
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/zai-org/GLM-5.1/resolve/main/tokenizer_config.json";
|
|
110
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/zai-org/GLM-5.1/resolve/main/tokenizer.json";
|
|
111
|
+
};
|
|
112
|
+
readonly title: "GLM 5.1";
|
|
113
|
+
};
|
|
114
|
+
readonly minimax: {
|
|
115
|
+
readonly kind: "huggingface";
|
|
116
|
+
readonly openrouter: "minimax/minimax-m2.7";
|
|
117
|
+
readonly source: {
|
|
118
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/MiniMaxAI/MiniMax-M2.7/resolve/main/tokenizer_config.json";
|
|
119
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/MiniMaxAI/MiniMax-M2.7/resolve/main/tokenizer.json";
|
|
120
|
+
};
|
|
121
|
+
readonly title: "MiniMax M2.7";
|
|
122
|
+
};
|
|
123
|
+
readonly hy: {
|
|
124
|
+
readonly kind: "huggingface";
|
|
125
|
+
readonly openrouter: "tencent/hy3-preview";
|
|
126
|
+
readonly title: "Hy3 Preview";
|
|
127
|
+
readonly source: {
|
|
128
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/tencent/Hy3-preview/resolve/main/tokenizer_config.json";
|
|
129
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/tencent/Hy3-preview/resolve/main/tokenizer.json";
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
readonly step: {
|
|
133
|
+
readonly kind: "huggingface";
|
|
134
|
+
readonly openrouter: "stepfun/step-3.7-flash";
|
|
135
|
+
readonly source: {
|
|
136
|
+
readonly specialTokensMapUrl: "https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/special_tokens_map.json";
|
|
137
|
+
readonly tokenizerConfigUrl: "https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/tokenizer_config.json";
|
|
138
|
+
readonly tokenizerJsonUrl: "https://huggingface.co/stepfun-ai/Step-3.7-Flash/resolve/main/tokenizer.json";
|
|
139
|
+
};
|
|
140
|
+
readonly title: "Step 3.7 Flash";
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
export declare const modelIds: Array<ModelId>;
|
|
144
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type TokenizeInput = Uint8Array | string;
|
|
2
|
+
export type RawTokenizeResultBase = {
|
|
3
|
+
/**
|
|
4
|
+
* array of byte starting offsets for every token after the first one
|
|
5
|
+
*
|
|
6
|
+
* Offsets are measured against the tokenizer’s effective UTF-8 text representation after its built-in normalization and preprocessing. That usually matches the provided input, but tokenizers that normalize or discard characters can shift the reported positions.
|
|
7
|
+
*
|
|
8
|
+
* The array length is equal to the number of tokens minus one, since the first token always starts at byte offset `0` within that effective tokenizer input.
|
|
9
|
+
*/
|
|
10
|
+
offsets: Array<number>;
|
|
11
|
+
/**
|
|
12
|
+
* array of token IDs in token order
|
|
13
|
+
*/
|
|
14
|
+
tokens: Array<number>;
|
|
15
|
+
};
|
|
16
|
+
export type RawTextTokenizeResultExtension = {
|
|
17
|
+
/**
|
|
18
|
+
* the actual input passed to the tokenizer after applying all preprocessing/normalization steps
|
|
19
|
+
*
|
|
20
|
+
* If no such steps are defined by the corresponding tokenizer or they didn’t modify the input, this property is absent.
|
|
21
|
+
*/
|
|
22
|
+
processedInput?: string;
|
|
23
|
+
};
|
|
24
|
+
export type RawBinaryTokenizeResultExtension = {
|
|
25
|
+
/**
|
|
26
|
+
* the actual input passed to the tokenizer after applying all preprocessing/normalization steps
|
|
27
|
+
*
|
|
28
|
+
* If no such steps are defined by the corresponding tokenizer or they didn’t modify the input, this property is absent.
|
|
29
|
+
*/
|
|
30
|
+
processedInput?: Uint8Array;
|
|
31
|
+
};
|
|
32
|
+
export type RawTokenizeResult<InputGeneric extends TokenizeInput = TokenizeInput> = RawTokenizeResultBase & (InputGeneric extends Uint8Array ? RawBinaryTokenizeResultExtension : RawTextTokenizeResultExtension);
|
|
33
|
+
export type RawBinaryTokenizeResult = RawTokenizeResult<Uint8Array>;
|
|
34
|
+
export type RawTextTokenizeResult = RawTokenizeResult<string>;
|
|
35
|
+
export declare const toTokenizeText: (input: TokenizeInput) => string;
|
|
36
|
+
export declare const getUtf8ByteLength: (text: string) => number;
|
|
37
|
+
export declare const toRawTokenizeResult: <InputGeneric extends TokenizeInput = string>(tokens: ReadonlyArray<number>, tokenStartOffsets: ReadonlyArray<number>, processedInput?: InputGeneric) => RawTokenizeResult<InputGeneric>;
|
|
38
|
+
export declare const toRawTokenizeResultFromTokenByteLengths: <InputGeneric extends TokenizeInput = string>(tokens: ReadonlyArray<number>, tokenByteLengths: ReadonlyArray<number>, processedInput?: InputGeneric) => RawTokenizeResult<InputGeneric>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ModelId } from '../models.js';
|
|
2
|
+
import type { RawTextTokenizeResult } from '../tokenization.js';
|
|
3
|
+
import { BaseTokenizer } from './base/BaseTokenizer.js';
|
|
4
|
+
type ClipTokenizerState = {
|
|
5
|
+
byteEncoder: Array<string>;
|
|
6
|
+
mergeRanks: Map<string, number>;
|
|
7
|
+
specialTokenIds: Map<string, number>;
|
|
8
|
+
unknownTokenId: number;
|
|
9
|
+
vocabulary: Map<string, number>;
|
|
10
|
+
};
|
|
11
|
+
export declare class ClipTokenizer extends BaseTokenizer<ClipTokenizerState> {
|
|
12
|
+
#private;
|
|
13
|
+
readonly modelId: ModelId;
|
|
14
|
+
constructor(modelId: ModelId);
|
|
15
|
+
protected createState(): {
|
|
16
|
+
byteEncoder: string[];
|
|
17
|
+
mergeRanks: Map<string, number>;
|
|
18
|
+
specialTokenIds: Map<string, number>;
|
|
19
|
+
unknownTokenId: number;
|
|
20
|
+
vocabulary: Map<string, number>;
|
|
21
|
+
};
|
|
22
|
+
protected encodeWithState(text: string, state: ClipTokenizerState): number[];
|
|
23
|
+
protected tokenizeWithState(text: string, state: ClipTokenizerState): RawTextTokenizeResult;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ModelId } from '../models.js';
|
|
2
|
+
import { BaseTokenizer } from './base/BaseTokenizer.js';
|
|
3
|
+
type HfEncodeResult = {
|
|
4
|
+
ids: Array<number>;
|
|
5
|
+
};
|
|
6
|
+
type HfEncodeOptions = {
|
|
7
|
+
add_special_tokens?: boolean;
|
|
8
|
+
};
|
|
9
|
+
type HfDecodeOptions = {
|
|
10
|
+
clean_up_tokenization_spaces?: boolean;
|
|
11
|
+
skip_special_tokens?: boolean;
|
|
12
|
+
};
|
|
13
|
+
type HfTokenizer = {
|
|
14
|
+
decode: (tokenIds: Array<number>, options?: HfDecodeOptions) => string;
|
|
15
|
+
encode: (text: string, options?: HfEncodeOptions) => HfEncodeResult;
|
|
16
|
+
};
|
|
17
|
+
type TokenizerState = {
|
|
18
|
+
tokenizer: HfTokenizer;
|
|
19
|
+
};
|
|
20
|
+
export declare class HuggingFaceTokenizer extends BaseTokenizer<TokenizerState> {
|
|
21
|
+
readonly modelId: ModelId;
|
|
22
|
+
constructor(modelId: ModelId);
|
|
23
|
+
protected createState(): {
|
|
24
|
+
tokenizer: HfTokenizer;
|
|
25
|
+
};
|
|
26
|
+
protected encodeWithState(text: string, state: TokenizerState): number[];
|
|
27
|
+
protected tokenizeWithState(text: string, state: TokenizerState): import("../tokenization.js").RawTokenizeResult<string>;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ModelId } from '../models.js';
|
|
2
|
+
import { Tiktoken } from '#tiktoken';
|
|
3
|
+
import { BaseTokenizer } from './base/BaseTokenizer.js';
|
|
4
|
+
declare abstract class BaseTiktokenTokenizer extends BaseTokenizer<Tiktoken> {
|
|
5
|
+
protected disposeState(state: Tiktoken): void;
|
|
6
|
+
protected tokenizeWithState(text: string, state: Tiktoken): import("../tokenization.js").RawTokenizeResult<string>;
|
|
7
|
+
}
|
|
8
|
+
export declare class BuiltinTiktokenTokenizer extends BaseTiktokenTokenizer {
|
|
9
|
+
readonly modelId: ModelId;
|
|
10
|
+
constructor(modelId: ModelId);
|
|
11
|
+
protected createState(): Tiktoken;
|
|
12
|
+
protected encodeWithState(text: string, state: Tiktoken): number[];
|
|
13
|
+
}
|
|
14
|
+
export declare class CustomTiktokenTokenizer extends BaseTiktokenTokenizer {
|
|
15
|
+
readonly modelId: ModelId;
|
|
16
|
+
constructor(modelId: ModelId);
|
|
17
|
+
protected createState(): Tiktoken;
|
|
18
|
+
protected encodeWithState(text: string, state: Tiktoken): number[];
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RawTextTokenizeResult, RawTokenizeResult, TokenizeInput } from '../../tokenization.js';
|
|
2
|
+
export declare abstract class BaseTokenizer<TState> {
|
|
3
|
+
#private;
|
|
4
|
+
protected abstract createState(): TState;
|
|
5
|
+
protected disposeState(_state: TState): void;
|
|
6
|
+
encode(input: TokenizeInput): number[];
|
|
7
|
+
protected abstract encodeWithState(text: string, state: TState): Array<number>;
|
|
8
|
+
free(): void;
|
|
9
|
+
protected getState(): TState;
|
|
10
|
+
getTokenCount(input: TokenizeInput): number;
|
|
11
|
+
tokenize<InputGeneric extends TokenizeInput>(input: InputGeneric): RawTokenizeResult<InputGeneric>;
|
|
12
|
+
protected abstract tokenizeWithState(text: string, state: TState): RawTextTokenizeResult;
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ModelId } from '../models.js';
|
|
2
|
+
import type { RawTokenizeResult, TokenizeInput } from '../tokenization.js';
|
|
3
|
+
type TokenizerLike = {
|
|
4
|
+
encode: (input: TokenizeInput) => Array<number>;
|
|
5
|
+
free: () => void;
|
|
6
|
+
getTokenCount: (input: TokenizeInput) => number;
|
|
7
|
+
tokenize: (input: TokenizeInput) => RawTokenizeResult;
|
|
8
|
+
};
|
|
9
|
+
export declare const getTokenizer: (modelId: ModelId) => TokenizerLike;
|
|
10
|
+
export declare const freeTokenizers: (modelId?: ModelId) => void;
|
|
11
|
+
export {};
|
package/main.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export {count, countLoaded, free, load, modelIds, models, tokenize, tokenizeLoaded} from './lib/api.js'
|
|
2
|
+
export {default} from './lib/api.js'
|
|
3
|
+
export type {CountOptions, CountResult, CountTokensOptions, CountTokensResult, ModelId, ModelSelection, RawTokenizeResult, TokenizeInput, TokenizeOptions, TokenizeResult} from './lib/api.js'
|
package/main.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./chunks/main.js";export{s as count,r as countLoaded,e as default,e as tokenize,a as free,n as load,o as modelIds,t as models,i as tokenizeLoaded};
|
package/mimo.msgpack.br
ADDED
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1 +1,47 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"name": "token-vocabs",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Count and inspect token IDs across several modern tokenizer families offline.",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"bpe",
|
|
8
|
+
"count-tokens",
|
|
9
|
+
"deepseek",
|
|
10
|
+
"gemma",
|
|
11
|
+
"gpt",
|
|
12
|
+
"kimi",
|
|
13
|
+
"llm",
|
|
14
|
+
"minimax",
|
|
15
|
+
"qwen",
|
|
16
|
+
"sdxl",
|
|
17
|
+
"tokenizer"
|
|
18
|
+
],
|
|
19
|
+
"funding": "https://github.com/sponsors/Jaid",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/Jaid/token-vocabs.git"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/Jaid/token-vocabs#readme",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/Jaid/token-vocabs/issues"
|
|
27
|
+
},
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./main.d.ts",
|
|
32
|
+
"import": "./main.js",
|
|
33
|
+
"default": "./main.js"
|
|
34
|
+
},
|
|
35
|
+
"./browser": {
|
|
36
|
+
"types": "./main.d.ts",
|
|
37
|
+
"import": "./main.js",
|
|
38
|
+
"default": "./main.js"
|
|
39
|
+
},
|
|
40
|
+
"./browser/all": {
|
|
41
|
+
"types": "./all.d.ts",
|
|
42
|
+
"import": "./all.js",
|
|
43
|
+
"default": "./all.js"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"types": "./main.d.ts"
|
|
47
|
+
}
|
package/qwen.msgpack.br
ADDED
|
Binary file
|
package/sdxl.msgpack.br
ADDED
|
Binary file
|
package/step.msgpack.br
ADDED
|
Binary file
|
package/tiktoken_bg.wasm
ADDED
|
Binary file
|
package/index.d.ts
DELETED
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default () => 'token-vocabs'
|
package/readme.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# token-vocabs
|
/package/{license.txt → LICENSE}
RENAMED
|
File without changes
|