@missionsquad/browserai 0.1.0 → 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.
Files changed (61) hide show
  1. package/README.md +12 -0
  2. package/dist/client.d.ts +11 -5
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +33 -12
  5. package/dist/client.js.map +1 -1
  6. package/dist/config.d.ts +10 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +1 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/hardware.d.ts +10 -0
  11. package/dist/hardware.d.ts.map +1 -1
  12. package/dist/hardware.js +15 -0
  13. package/dist/hardware.js.map +1 -1
  14. package/dist/history.d.ts +1 -1
  15. package/dist/history.d.ts.map +1 -1
  16. package/dist/history.js +1 -1
  17. package/dist/history.js.map +1 -1
  18. package/dist/index.d.ts +3 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/inference.d.ts.map +1 -1
  23. package/dist/inference.js +8 -6
  24. package/dist/inference.js.map +1 -1
  25. package/dist/metrics.js +2 -2
  26. package/dist/metrics.js.map +1 -1
  27. package/dist/models.d.ts +19 -2
  28. package/dist/models.d.ts.map +1 -1
  29. package/dist/models.js +172 -0
  30. package/dist/models.js.map +1 -1
  31. package/dist/multimodal.d.ts +21 -1
  32. package/dist/multimodal.d.ts.map +1 -1
  33. package/dist/multimodal.js +88 -14
  34. package/dist/multimodal.js.map +1 -1
  35. package/dist/tdt/frontend.d.ts +7 -0
  36. package/dist/tdt/frontend.d.ts.map +1 -0
  37. package/dist/tdt/frontend.js +73 -0
  38. package/dist/tdt/frontend.js.map +1 -0
  39. package/dist/tdt/index.d.ts +37 -0
  40. package/dist/tdt/index.d.ts.map +1 -0
  41. package/dist/tdt/index.js +318 -0
  42. package/dist/tdt/index.js.map +1 -0
  43. package/dist/tdt/nemo-frontend.d.ts +6 -0
  44. package/dist/tdt/nemo-frontend.d.ts.map +1 -0
  45. package/dist/tdt/nemo-frontend.js +53 -0
  46. package/dist/tdt/nemo-frontend.js.map +1 -0
  47. package/package.json +8 -5
  48. package/src/client.ts +35 -10
  49. package/src/config.ts +7 -0
  50. package/src/hardware.ts +15 -0
  51. package/src/history.ts +2 -2
  52. package/src/index.ts +3 -1
  53. package/src/inference.ts +12 -6
  54. package/src/metrics.ts +2 -2
  55. package/src/models.ts +183 -1
  56. package/src/multimodal.ts +79 -13
  57. package/src/tdt/frontend.ts +61 -0
  58. package/src/tdt/index.ts +230 -0
  59. package/src/tdt/nemo-frontend.ts +43 -0
  60. package/src/tdt/runtime-types.d.ts +5 -0
  61. package/worker-template/cloudflare-worker.ts +1 -1
@@ -0,0 +1,318 @@
1
+ /// <reference path="./runtime-types.d.ts" />
2
+ import * as ort from 'onnxruntime-tdt/webgpu';
3
+ import { phononFeatures } from './frontend.js';
4
+ import { nemoFeatures } from './nemo-frontend.js';
5
+ export function checkAbort(signal) { signal?.throwIfAborted(); }
6
+ /** Let queued input/cancellation events run even when WASM resolves only microtasks. */
7
+ async function yieldToBrowser(signal) {
8
+ checkAbort(signal);
9
+ await new Promise(resolve => setTimeout(resolve, 0));
10
+ checkAbort(signal);
11
+ }
12
+ export function parseVocabulary(text) {
13
+ const vocab = [];
14
+ for (const line of text.split(/\r?\n/)) {
15
+ if (!line)
16
+ continue;
17
+ const match = /^(.*) (\d+)$/.exec(line);
18
+ if (!match)
19
+ throw new Error('Invalid TDT vocabulary line.');
20
+ const id = Number(match[2]);
21
+ if (vocab[id] !== undefined)
22
+ throw new Error('Duplicate TDT vocabulary ID.');
23
+ vocab[id] = match[1];
24
+ }
25
+ if (!vocab.length || Array.from({ length: vocab.length }, (_, i) => vocab[i]).some(x => x === undefined))
26
+ throw new Error('Incomplete TDT vocabulary.');
27
+ return vocab;
28
+ }
29
+ export function decodePieces(ids, vocab) {
30
+ return ids.map(id => vocab[id] ?? '').filter(piece => piece !== '<unk>' && piece !== '<pad>' && piece !== '<blk>' && !/^<\|.*\|>$/.test(piece)).join('').replace(/▁/g, ' ').trim();
31
+ }
32
+ /** Split near the quietest 100 ms interval in the final five seconds, bounded at 30 seconds. */
33
+ export function splitAudio(audio) {
34
+ const chunks = [];
35
+ let start = 0;
36
+ while (audio.length - start > 480000) {
37
+ let end = start + 480000, lowest = Infinity;
38
+ for (let p = start + 400000; p <= start + 478400; p += 1600) {
39
+ let energy = 0;
40
+ for (let i = p; i < p + 1600; i++)
41
+ energy += audio[i] ** 2;
42
+ if (energy < lowest) {
43
+ lowest = energy;
44
+ end = p + 800;
45
+ }
46
+ }
47
+ chunks.push({ start, end });
48
+ start = end;
49
+ }
50
+ if (start < audio.length)
51
+ chunks.push({ start, end: audio.length });
52
+ return chunks;
53
+ }
54
+ async function artifact(url, options) {
55
+ checkAbort(options.signal);
56
+ const cacheWarning = () => options.onProgress?.({ status: 'cache-warning', file: url });
57
+ let cache;
58
+ let response;
59
+ try {
60
+ cache = typeof caches !== 'undefined' ? await caches.open('transformers-cache') : undefined;
61
+ }
62
+ catch {
63
+ cacheWarning();
64
+ }
65
+ try {
66
+ response = await cache?.match(url);
67
+ }
68
+ catch {
69
+ cacheWarning();
70
+ }
71
+ const cachePut = async (value) => {
72
+ if (!cache)
73
+ return;
74
+ try {
75
+ await cache.put(url, value);
76
+ }
77
+ catch {
78
+ cacheWarning();
79
+ }
80
+ };
81
+ if (!response) {
82
+ response = await fetch(url, { signal: options.signal });
83
+ if (!response.ok)
84
+ throw new Error(`TDT download failed (${response.status}): ${url}`);
85
+ // Consume incrementally for meaningful download progress, then cache only a complete artifact.
86
+ const total = Number(response.headers.get('content-length'));
87
+ const reader = response.body?.getReader();
88
+ if (reader) {
89
+ const chunks = [];
90
+ let received = 0;
91
+ try {
92
+ while (true) {
93
+ checkAbort(options.signal);
94
+ const next = await reader.read();
95
+ if (next.done)
96
+ break;
97
+ chunks.push(next.value);
98
+ received += next.value.length;
99
+ options.onProgress?.({ status: 'progress', file: url, ...(total > 0 ? { progress: Math.min(100, received / total * 100) } : {}) });
100
+ }
101
+ }
102
+ finally {
103
+ reader.releaseLock();
104
+ }
105
+ const bytes = new Uint8Array(received);
106
+ let offset = 0;
107
+ for (const chunk of chunks) {
108
+ bytes.set(chunk, offset);
109
+ offset += chunk.length;
110
+ }
111
+ checkAbort(options.signal);
112
+ await cachePut(new Response(bytes, { headers: response.headers }));
113
+ options.onProgress?.({ status: 'done', file: url, progress: 100 });
114
+ return bytes;
115
+ }
116
+ await cachePut(response.clone());
117
+ }
118
+ if (!response.ok)
119
+ throw new Error(`Invalid cached TDT artifact (${response.status}): ${url}`);
120
+ const bytes = new Uint8Array(await response.arrayBuffer());
121
+ checkAbort(options.signal);
122
+ options.onProgress?.({ status: 'done', file: url, progress: 100 });
123
+ return bytes;
124
+ }
125
+ function floats(tensor, name) {
126
+ if (!tensor || tensor.type !== 'float32' || !(tensor.data instanceof Float32Array))
127
+ throw new Error(`Invalid TDT ${name} tensor.`);
128
+ return tensor.data;
129
+ }
130
+ function releaseTensors(values) { for (const tensor of new Set(Object.values(values)))
131
+ tensor.dispose(); }
132
+ function argmax(values, start, end) {
133
+ let best = start;
134
+ for (let i = start + 1; i < end; i++)
135
+ if (values[i] > values[best])
136
+ best = i;
137
+ return best - start;
138
+ }
139
+ /** Load the two explicitly supported ONNX TDT exports. Sessions are released on any partial load failure. */
140
+ export async function loadTdtModel(modelId, options) {
141
+ const phonon = modelId === 'enriqueag/phonon-2.5-onnx';
142
+ if (!phonon && modelId !== 'istupakov/parakeet-tdt-0.6b-v3-onnx')
143
+ throw new Error(`Unsupported TDT model: ${modelId}`);
144
+ if (phonon && options.device !== 'webgpu')
145
+ throw new Error('Phonon exact2x2 requires WebGPU.');
146
+ const base = options.baseUrl ?? `https://huggingface.co/${modelId}/resolve/main/`;
147
+ const url = (file) => new URL(file, base.endsWith('/') ? base : `${base}/`).href;
148
+ ort.env.wasm.numThreads = 1;
149
+ ort.env.wasm.wasmPaths = options.wasmPaths ?? {
150
+ mjs: 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.31.1/dist/ort-wasm-simd-threaded.asyncify.mjs',
151
+ wasm: 'https://cdn.jsdelivr.net/npm/onnxruntime-web@1.31.1/dist/ort-wasm-simd-threaded.asyncify.wasm',
152
+ };
153
+ const sessions = [];
154
+ const create = async (file, device, decoder = false) => {
155
+ const bytes = await artifact(url(file), options);
156
+ checkAbort(options.signal);
157
+ const session = await ort.InferenceSession.create(bytes, { executionProviders: [device], ...(decoder && phonon ? { extra: { session: { disable_quant_qdq: '1' } } } : {}) });
158
+ sessions.push(session);
159
+ checkAbort(options.signal);
160
+ return session;
161
+ };
162
+ try {
163
+ const vocab = parseVocabulary(new TextDecoder().decode(await artifact(url('vocab.txt'), options)));
164
+ const blank = phonon ? 8192 : vocab.indexOf('<blk>');
165
+ if (blank < 0 || (phonon && vocab.length !== 8192 && vocab.length !== 8193))
166
+ throw new Error('Invalid TDT blank/vocabulary configuration.');
167
+ const encoder = await create(phonon ? 'encoder.exact2x2.onnx' : 'encoder-model.int8.onnx', phonon ? 'webgpu' : 'wasm');
168
+ const decoder = await create(phonon ? 'decoder_joint.int8.onnx' : 'decoder_joint-model.int8.onnx', 'wasm', true);
169
+ let disposed = false, busy = false;
170
+ const stateShape = [2, 1, 640];
171
+ return {
172
+ async dispose() {
173
+ if (busy)
174
+ throw new Error('Cannot dispose TDT model during transcription.');
175
+ if (!disposed) {
176
+ disposed = true;
177
+ await Promise.all(sessions.map(s => s.release()));
178
+ }
179
+ },
180
+ async transcribe(audio, onDelta, signal) {
181
+ if (disposed)
182
+ throw new Error('TDT model is disposed.');
183
+ if (busy)
184
+ throw new Error('TDT model is already transcribing.');
185
+ if (!(audio instanceof Float32Array) || audio.some(x => !Number.isFinite(x)))
186
+ throw new Error('TDT requires finite mono 16 kHz Float32 audio.');
187
+ checkAbort(signal);
188
+ busy = true;
189
+ const segments = [];
190
+ let runsSinceYield = 0, lastYield = performance.now();
191
+ try {
192
+ for (const chunk of splitAudio(audio)) {
193
+ checkAbort(signal);
194
+ const wave = audio.slice(chunk.start, chunk.end);
195
+ if (wave.length < 320)
196
+ continue;
197
+ const resources = new Set();
198
+ const own = (t) => { resources.add(t); return t; };
199
+ const run = async (session, feeds) => {
200
+ checkAbort(signal);
201
+ if (++runsSinceYield >= 32 || performance.now() - lastYield >= 20) {
202
+ await yieldToBrowser(signal);
203
+ runsSinceYield = 0;
204
+ lastYield = performance.now();
205
+ }
206
+ const outputs = await session.run(feeds);
207
+ for (const tensor of Object.values(outputs))
208
+ own(tensor);
209
+ checkAbort(signal);
210
+ return outputs;
211
+ };
212
+ try {
213
+ let encoded;
214
+ if (phonon) {
215
+ await yieldToBrowser(signal);
216
+ const features = phononFeatures(wave);
217
+ await yieldToBrowser(signal);
218
+ runsSinceYield = 0;
219
+ lastYield = performance.now();
220
+ encoded = await run(encoder, { features: own(new ort.Tensor('float32', features.data, [1, features.frames, 128])) });
221
+ }
222
+ else {
223
+ // The published nemo128 graph uses float64 STFT, unsupported by ORT Web.
224
+ // This front end reproduces that graph's reflect padding and statistics.
225
+ await yieldToBrowser(signal);
226
+ const features = nemoFeatures(wave);
227
+ await yieldToBrowser(signal);
228
+ runsSinceYield = 0;
229
+ lastYield = performance.now();
230
+ encoded = await run(encoder, {
231
+ audio_signal: own(new ort.Tensor('float32', features.data, [1, 128, features.frames])),
232
+ length: own(new ort.Tensor('int64', BigInt64Array.of(BigInt(features.frames)), [1])),
233
+ });
234
+ }
235
+ // Large encoder runs are synchronous on WASM. Give input handlers a turn
236
+ // before entering the otherwise microtask-only decoder loop.
237
+ await yieldToBrowser(signal);
238
+ runsSinceYield = 0;
239
+ lastYield = performance.now();
240
+ const output = encoded[phonon ? 'encoded' : 'outputs'];
241
+ const data = floats(output, 'encoder');
242
+ const width = output.dims[phonon ? 2 : 1], paddedSteps = output.dims[phonon ? 1 : 2];
243
+ const lengths = encoded.encoded_lengths;
244
+ const steps = phonon ? paddedSteps : Number(lengths?.data[0]);
245
+ if (!Number.isInteger(steps) || steps < 0 || steps > paddedSteps)
246
+ throw new Error('Invalid TDT encoder length.');
247
+ let h = own(new ort.Tensor('float32', new Float32Array(stateShape.reduce((a, b) => a * b, 1)), stateShape));
248
+ let c = own(new ort.Tensor('float32', new Float32Array(stateShape.reduce((a, b) => a * b, 1)), stateShape));
249
+ let token = blank, t = 0, emitted = 0;
250
+ const ids = [];
251
+ while (t < steps) {
252
+ const frame = new Float32Array(width);
253
+ for (let i = 0; i < width; i++)
254
+ frame[i] = data[phonon ? t * width + i : i * paddedSteps + t];
255
+ const ephemeral = phonon ? {
256
+ encoded: new ort.Tensor('float32', frame, [1, width]), token: new ort.Tensor('int32', Int32Array.of(token), [1]),
257
+ } : {
258
+ encoder_outputs: new ort.Tensor('float32', frame, [1, width, 1]), targets: new ort.Tensor('int32', Int32Array.of(token), [1, 1]), target_length: new ort.Tensor('int32', Int32Array.of(1), [1]),
259
+ };
260
+ let result;
261
+ try {
262
+ result = await run(decoder, { ...ephemeral, ...(phonon ? { h, c } : { input_states_1: h, input_states_2: c }) });
263
+ }
264
+ finally {
265
+ releaseTensors(ephemeral);
266
+ }
267
+ const logits = floats(result[phonon ? 'logits' : 'outputs'], 'decoder');
268
+ if (logits.length !== blank + 1 + 5)
269
+ throw new Error('Invalid TDT token/duration logits.');
270
+ const next = argmax(logits, 0, blank + 1);
271
+ let duration = argmax(logits, blank + 1, logits.length);
272
+ if (next !== blank) {
273
+ ids.push(next);
274
+ token = next;
275
+ emitted++;
276
+ resources.delete(h);
277
+ h.dispose();
278
+ resources.delete(c);
279
+ c.dispose();
280
+ h = result[phonon ? 'h_out' : 'output_states_1'];
281
+ c = result[phonon ? 'c_out' : 'output_states_2'];
282
+ }
283
+ for (const tensor of Object.values(result))
284
+ if (tensor !== h && tensor !== c) {
285
+ resources.delete(tensor);
286
+ tensor.dispose();
287
+ }
288
+ if ((next === blank || emitted >= 10) && duration === 0)
289
+ duration = 1;
290
+ if (duration > 0)
291
+ emitted = 0;
292
+ t += duration;
293
+ }
294
+ const text = decodePieces(ids, vocab);
295
+ if (text) {
296
+ segments.push({ start: chunk.start / 16000, end: chunk.end / 16000, text });
297
+ onDelta?.(segments.map(segment => segment.text).join(' '));
298
+ }
299
+ }
300
+ finally {
301
+ for (const tensor of resources)
302
+ tensor.dispose();
303
+ }
304
+ }
305
+ return { text: segments.map(s => s.text).join(' '), segments };
306
+ }
307
+ finally {
308
+ busy = false;
309
+ }
310
+ },
311
+ };
312
+ }
313
+ catch (error) {
314
+ await Promise.allSettled(sessions.map(s => s.release()));
315
+ throw error;
316
+ }
317
+ }
318
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tdt/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Matches nemo128.onnx: reflected centered STFT, includes its final frame. */
2
+ export declare function nemoFeatures(audio: Float32Array): {
3
+ data: Float32Array;
4
+ frames: number;
5
+ };
6
+ //# sourceMappingURL=nemo-frontend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemo-frontend.d.ts","sourceRoot":"","sources":["../../src/tdt/nemo-frontend.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAiCxF"}
@@ -0,0 +1,53 @@
1
+ import { fft } from './frontend.js';
2
+ // Exact sparse mel matrix from istupakov/parakeet-tdt-0.6b-v3-onnx/nemo128.onnx.
3
+ // Source graph SHA-256: a9fde1486ebfcc08f328d75ad4610c67835fea58c73ba57e3209a6f6cf019e9f.
4
+ // Keeping these small constants avoids rounding differences in the exported filter edges.
5
+ const MEL = [[1, 0, 0.02837754227221012], [1, 1, 0.014389011077582836], [2, 1, 0.01398853026330471], [2, 2, 0.028778022155165672], [3, 3, 0.04236607998609543], [3, 4, 0.0004004797956440598], [4, 4, 0.027977053076028824], [4, 5, 0.014789499342441559], [5, 5, 0.013588042929768562], [5, 6, 0.02917851135134697], [6, 7, 0.04196559265255928], [6, 8, 0.0008009598823264241], [7, 8, 0.027576573193073273], [7, 9, 0.01518999319523573], [8, 9, 0.013187538832426071], [8, 10, 0.029579007998108864], [9, 11, 0.041565097868442535], [9, 12, 0.0012014397652819753], [10, 12, 0.02717609517276287], [10, 13, 0.015590474009513855], [11, 13, 0.01278705894947052], [11, 14, 0.029979487881064415], [12, 15, 0.041164617985486984], [12, 16, 0.0016019197646528482], [13, 16, 0.02677561342716217], [13, 17, 0.015990953892469406], [14, 17, 0.012386579066514969], [14, 18, 0.03037998639047146], [15, 19, 0.040764085948467255], [15, 20, 0.002002452965825796], [16, 20, 0.026375113055109978], [16, 21, 0.016391444951295853], [17, 21, 0.011986115016043186], [17, 22, 0.030780402943491936], [18, 23, 0.04036368802189827], [18, 24, 0.0024028795305639505], [19, 24, 0.025974653661251068], [19, 25, 0.01679191365838051], [20, 25, 0.011585619300603867], [20, 26, 0.03118094801902771], [21, 27, 0.03996315225958824], [21, 28, 0.0028034152928739786], [22, 28, 0.02557411789894104], [22, 29, 0.017192449420690536], [23, 29, 0.011185083538293839], [23, 30, 0.031581442803144455], [24, 31, 0.03956267610192299], [24, 32, 0.0032038395293056965], [25, 32, 0.025173693895339966], [25, 33, 0.01759287342429161], [26, 33, 0.010784659534692764], [26, 34, 0.03198190778493881], [27, 35, 0.03916219249367714], [27, 36, 0.0036043752916157246], [28, 36, 0.024773158133029938], [28, 37, 0.01799340918660164], [29, 37, 0.010384122841060162], [29, 38, 0.03238244354724884], [30, 39, 0.03876161575317383], [30, 40, 0.004004895221441984], [31, 40, 0.024372702464461327], [31, 41, 0.018320715054869652], [32, 41, 0.010202586650848389], [32, 42, 0.03161151707172394], [33, 43, 0.03855384513735771], [33, 44, 0.001656117383390665], [34, 44, 0.028360538184642792], [34, 45, 0.010670339688658714], [35, 45, 0.01995559222996235], [35, 46, 0.01796126179397106], [36, 46, 0.013171199709177017], [36, 47, 0.023691896349191666], [37, 47, 0.007852383889257908], [37, 48, 0.0280131958425045], [38, 48, 0.0038550780154764652], [38, 49, 0.031065288931131363], [39, 49, 0.001046702265739441], [39, 50, 0.03297678381204605], [40, 51, 0.0325256809592247], [40, 52, 0.0006470278021879494], [41, 52, 0.03098229691386223], [41, 53, 0.0013818024890497327], [42, 53, 0.03026564046740532], [42, 54, 0.0013279326958581805], [43, 54, 0.03028314933180809], [44, 54, 0.000853460980579257], [43, 55, 0.0005752422730438411], [44, 55, 0.029303690418601036], [45, 55, 0.002906062640249729], [45, 56, 0.026582011952996254], [46, 56, 0.00546437269076705], [46, 57, 0.023383773863315582], [47, 57, 0.00845953170210123], [47, 58, 0.019775748252868652], [48, 58, 0.011828471906483173], [48, 59, 0.015819108113646507], [49, 59, 0.015513437800109386], [49, 60, 0.01156991720199585], [50, 60, 0.01946169137954712], [50, 61, 0.007079293020069599], [51, 61, 0.02362503670156002], [52, 61, 0.0026273371186107397], [51, 62, 0.002393868751823902], [52, 62, 0.022891240194439888], [53, 62, 0.007950658909976482], [53, 63, 0.017088213935494423], [54, 63, 0.013358916155993938], [54, 64, 0.011216753162443638], [55, 64, 0.01881822757422924], [56, 64, 0.0006491197855211794], [55, 65, 0.005309573374688625], [56, 65, 0.023045793175697327], [57, 65, 0.006984363775700331], [57, 66, 0.016297349706292152], [58, 66, 0.013272317126393318], [58, 67, 0.009608481079339981], [59, 67, 0.019490249454975128], [60, 67, 0.003768591908738017], [59, 68, 0.0030010610353201628], [60, 68, 0.018348077312111855], [61, 68, 0.010636676102876663], [61, 69, 0.011118832044303417], [62, 69, 0.01736198551952839], [63, 69, 0.00308591709472239], [62, 70, 0.004041498526930809], [63, 70, 0.017977513372898102], [64, 70, 0.010326532647013664], [64, 71, 0.010409270413219929], [65, 71, 0.017366580665111542], [66, 71, 0.00440334714949131], [65, 72, 0.0030487067997455597], [66, 72, 0.015703044831752777], [67, 72, 0.011844555847346783], [67, 73, 0.007962611503899097], [68, 73, 0.019040562212467194], [69, 73, 0.007269133348017931], [68, 74, 0.000472926622023806], [69, 74, 0.011963930912315845], [70, 74, 0.01476955134421587], [71, 74, 0.003552281530573964], [70, 75, 0.00418809661641717], [71, 75, 0.01513804029673338], [72, 75, 0.0113017363473773], [73, 75, 0.0006128569366410375], [72, 76, 0.007129882462322712], [73, 76, 0.01756405457854271], [74, 76, 0.00856065098196268], [74, 77, 0.009372946806252003], [75, 77, 0.01618116907775402], [76, 77, 0.00647500017657876], [75, 78, 0.0015116231516003609], [76, 78, 0.010986563749611378], [77, 78, 0.014228261075913906], [78, 78, 0.004979042336344719], [77, 79, 0.003005674807354808], [78, 79, 0.012034479528665543], [79, 79, 0.012825818732380867], [80, 79, 0.004012242890894413], [79, 80, 0.003972089849412441], [80, 80, 0.01257565151900053], [81, 80, 0.01191700343042612], [82, 80, 0.0035183706786483526], [81, 81, 0.00446630734950304], [82, 81, 0.012664892710745335], [83, 81, 0.011448914185166359], [84, 81, 0.0034456099383533], [83, 82, 0.004539744462817907], [84, 82, 0.012352367863059044], [85, 82, 0.011372808367013931], [86, 82, 0.003746368922293186], [85, 83, 0.004239588975906372], [86, 83, 0.011684300377964973], [87, 83, 0.011644029058516026], [88, 83, 0.004376695025712252], [87, 84, 0.0036092570517212152], [88, 84, 0.010703402571380138], [89, 84, 0.012221302837133408], [90, 84, 0.005296255461871624], [89, 85, 0.0026888747233897448], [90, 85, 0.009448954835534096], [91, 85, 0.013066906481981277], [92, 85, 0.006467771250754595], [91, 86, 0.0015151641564443707], [92, 86, 0.007957103662192822], [93, 86, 0.014145628549158573], [94, 86, 0.007857220247387886], [95, 86, 0.0015688107814639807], [93, 87, 0.0001221956918016076], [94, 87, 0.006260755006223917], [95, 87, 0.012399313971400261], [96, 87, 0.009433379396796227], [97, 87, 0.003441078355535865], [96, 88, 0.00439020711928606], [97, 88, 0.010239733383059502], [98, 88, 0.01116772647947073], [99, 88, 0.005457570310682058], [98, 89, 0.0023731838446110487], [99, 89, 0.007947309873998165], [100, 89, 0.013034172356128693], [101, 89, 0.007592816837131977], [102, 89, 0.0021514608524739742], [100, 90, 0.00023496054927818477], [101, 90, 0.005546679254621267], [102, 90, 0.010858396999537945], [103, 90, 0.009823615662753582], [104, 90, 0.004638473968952894], [103, 91, 0.0030602705664932728], [104, 91, 0.008121836930513382], [105, 91, 0.012128844857215881], [106, 91, 0.0071879224851727486], [107, 91, 0.002247000113129616], [105, 92, 0.0005085079465061426], [106, 92, 0.005331702530384064], [107, 92, 0.010154897347092628], [108, 92, 0.009781261906027794], [109, 92, 0.0050729489885270596], [110, 92, 0.0003646367113105953], [108, 93, 0.002505941316485405], [109, 93, 0.007102088537067175], [110, 93, 0.011698235757648945], [111, 93, 0.007915019057691097], [112, 93, 0.0034283846616744995], [111, 94, 0.004040570929646492], [112, 94, 0.008420334197580814], [113, 94, 0.010758612304925919], [114, 94, 0.00648314505815506], [115, 94, 0.0022076775785535574], [113, 95, 0.0009844168089330196], [114, 95, 0.005158022977411747], [115, 95, 0.009331629611551762], [116, 95, 0.009516296908259392], [117, 95, 0.005442172288894653], [118, 95, 0.0013680467382073402], [116, 96, 0.0019234465435147285], [117, 96, 0.005900462623685598], [118, 96, 0.009877478703856468], [119, 96, 0.008634302765130997], [120, 96, 0.004752081818878651], [121, 96, 0.0008698602323420346], [119, 97, 0.0025171886663883924], [120, 97, 0.006306931842118502], [121, 97, 0.010096673853695393], [122, 97, 0.00807521678507328], [123, 97, 0.004375695250928402], [124, 97, 0.0006761741824448109], [122, 98, 0.002802216447889805], [123, 98, 0.006413611583411694], [124, 98, 0.010025006718933582], [125, 98, 0.007804089691489935], [126, 98, 0.004278772044926882], [127, 98, 0.0007534541073255241], [125, 99, 0.002812325721606612], [126, 99, 0.006253630854189396], [127, 99, 0.009694935753941536], [128, 99, 0.007789100985974073], [129, 99, 0.004429795313626528], [130, 99, 0.0010704898741096258], [128, 100, 0.0025784021709114313], [129, 100, 0.005857671145349741], [130, 100, 0.009136940352618694], [131, 100, 0.008000868372619152], [132, 100, 0.004799720831215382], [133, 100, 0.0015985730569809675], [131, 101, 0.0021290841978043318], [132, 101, 0.0052539510652422905], [133, 101, 0.00837881863117218], [134, 101, 0.008412200026214123], [135, 101, 0.005361814517527819], [136, 101, 0.002311429474502802], [134, 102, 0.0014907211298123002], [135, 102, 0.004468441475182772], [136, 102, 0.007446161471307278], [137, 102, 0.008998350240290165], [138, 102, 0.006091524846851826], [139, 102, 0.00318469968624413], [140, 102, 0.0002778743510134518], [137, 103, 0.0006874035461805761], [138, 103, 0.003524982836097479], [139, 103, 0.006362562067806721], [140, 103, 0.009200140833854675], [141, 103, 0.006966239772737026], [142, 103, 0.004196294117718935], [143, 103, 0.0014263488119468093], [141, 104, 0.002445453079417348], [142, 104, 0.005149385891854763], [143, 104, 0.007853318005800247], [144, 104, 0.007965351454913616], [145, 104, 0.005325851496309042], [146, 104, 0.002686351304873824], [147, 104, 4.6851124352542683e-05], [144, 105, 0.0012498258147388697], [145, 105, 0.003826454281806946], [146, 105, 0.006403082516044378], [147, 105, 0.00897971075028181], [148, 105, 0.006554814055562019], [149, 105, 0.004039536230266094], [150, 105, 0.001524258521385491], [148, 106, 0.002411770634353161], [149, 106, 0.004867123905569315], [150, 106, 0.007322477176785469], [151, 106, 0.00786607339978218], [152, 106, 0.005469250492751598], [153, 106, 0.0030724273528903723], [154, 106, 0.0006756045040674508], [151, 107, 0.0009218427003361285], [152, 107, 0.003261544741690159], [153, 107, 0.00560124684125185], [154, 107, 0.007940948940813541], [155, 107, 0.006960286758840084], [156, 107, 0.004676329903304577], [157, 107, 0.0023923732805997133], [158, 107, 0.00010841657058335841], [155, 108, 0.001601085183210671], [156, 108, 0.003830620553344488], [157, 108, 0.006060156039893627], [158, 108, 0.008289691060781479], [159, 108, 0.006322428584098816], [160, 108, 0.004146021790802479], [161, 108, 0.0019696145318448544], [159, 109, 0.0020237017888575792], [160, 109, 0.004148253705352545], [161, 109, 0.006272805389016867], [162, 109, 0.007998434826731682], [163, 109, 0.005924496799707413], [164, 109, 0.0038505580741912127], [165, 109, 0.0017766198143363], [162, 110, 0.00019236317893955857], [163, 110, 0.0022169058211147785], [164, 110, 0.004241448361426592], [165, 110, 0.0062659913673996925], [166, 110, 0.007716970518231392], [167, 110, 0.005740635562688112], [168, 110, 0.003764300374314189], [169, 110, 0.0017879655351862311], [166, 111, 0.0002765751851256937], [167, 111, 0.002205819124355912], [168, 111, 0.0041350629180669785], [169, 111, 0.006064306478947401], [170, 111, 0.0076301731169223785], [171, 111, 0.005746927578002214], [172, 111, 0.003863682970404625], [173, 111, 0.001980437897145748], [174, 111, 9.719309309730306e-05], [170, 112, 0.0001752191747073084], [171, 112, 0.002013584366068244], [172, 112, 0.003851949702948332], [173, 112, 0.005690314806997776], [174, 112, 0.0075286803767085075], [175, 112, 0.005921597592532635], [176, 112, 0.004127021413296461], [177, 112, 0.002332444768399], [178, 112, 0.0005378681817092001], [175, 113, 0.0016614228952676058], [176, 113, 0.0034132569562643766], [177, 113, 0.005165090784430504], [178, 113, 0.006916924845427275], [179, 113, 0.006244422402232885], [180, 113, 0.004534309729933739], [181, 113, 0.0028241975232958794], [182, 113, 0.0011140849674120545], [179, 114, 0.0011690219398587942], [180, 114, 0.0028383824974298477], [181, 114, 0.004507742822170258], [182, 114, 0.006177103146910667], [183, 114, 0.00669668847694993], [184, 114, 0.005067131482064724], [185, 114, 0.0034375751856714487], [186, 114, 0.001808018540032208], [187, 114, 0.00017846190894488245], [183, 115, 0.0005544161540456116], [184, 115, 0.0021451376378536224], [185, 115, 0.0037358589470386505], [186, 115, 0.005326580721884966], [187, 115, 0.006917302496731281], [188, 115, 0.005708739627152681], [189, 115, 0.004155908711254597], [190, 115, 0.0026030780281871557], [191, 115, 0.0010502473451197147], [188, 116, 0.0013498314656317234], [189, 116, 0.002865670947358012], [190, 116, 0.004381510429084301], [191, 116, 0.0058973501436412334], [192, 116, 0.006443656049668789], [193, 116, 0.004963928833603859], [194, 116, 0.0034842020832002163], [195, 116, 0.00200447509996593], [196, 116, 0.0005247481749393046], [192, 117, 0.00046751255285926163], [193, 117, 0.0019119851058349013], [194, 117, 0.003356457455083728], [195, 117, 0.00480093015357852], [196, 117, 0.006245402619242668], [197, 117, 0.005847633816301823], [198, 117, 0.004437577910721302], [199, 117, 0.003027522237971425], [200, 117, 0.0016174663323909044], [201, 117, 0.00020741041225846857], [197, 118, 0.0008883357513695955], [198, 118, 0.0022648002486675978], [199, 118, 0.0036412647459656], [200, 118, 0.005017729010432959], [201, 118, 0.006394193507730961], [202, 118, 0.005450631491839886], [203, 118, 0.0041069528087973595], [204, 118, 0.0027632745914161205], [205, 118, 0.0014195962576195598], [206, 118, 7.591782923555002e-05], [202, 119, 0.0011187248164787889], [203, 119, 0.0024303868412971497], [204, 119, 0.0037420487497001886], [205, 119, 0.005053711123764515], [206, 119, 0.00636537279933691], [207, 119, 0.0052314260974526405], [208, 119, 0.003951027989387512], [209, 119, 0.002670630346983671], [210, 119, 0.001390232122503221], [211, 119, 0.00010983415268128738], [207, 120, 0.0011792670702561736], [208, 120, 0.002429152838885784], [209, 120, 0.003679038258269429], [210, 120, 0.004928923677653074], [211, 120, 0.00617880979552865], [212, 120, 0.005170582327991724], [213, 120, 0.0039504761807620525], [214, 120, 0.00273036933504045], [215, 120, 0.001510262954980135], [216, 120, 0.0002901565458159894], [212, 121, 0.001088875811547041], [213, 121, 0.002279920969158411], [214, 121, 0.003470966126769781], [215, 121, 0.004662011284381151], [216, 121, 0.005853056441992521], [217, 121, 0.005250118672847748], [218, 121, 0.004087434150278568], [219, 121, 0.002924750093370676], [220, 121, 0.001762065920047462], [221, 121, 0.0005993818631395698], [217, 122, 0.000865069217979908], [218, 122, 0.00200005155056715], [219, 122, 0.0031350336503237486], [220, 122, 0.004270015750080347], [221, 122, 0.005404998082667589], [222, 122, 0.005453326739370823], [223, 122, 0.004345402121543884], [224, 122, 0.0032374775037169456], [225, 122, 0.0021295526530593634], [226, 122, 0.001021627802401781], [222, 123, 0.0005239806487224996], [223, 123, 0.0016055030282586813], [224, 123, 0.0026870255824178457], [225, 123, 0.003768547670915723], [226, 123, 0.004850070457905531], [227, 123, 0.005765118170529604], [228, 123, 0.004709359724074602], [229, 123, 0.0036536010447889566], [230, 123, 0.002597842598333955], [231, 123, 0.0015420839190483093], [232, 123, 0.00048632529797032475], [227, 124, 8.027452713577077e-05], [228, 124, 0.0011108804028481245], [229, 124, 0.002141486154869199], [230, 124, 0.003172091906890273], [231, 124, 0.004202697891741991], [232, 124, 0.005233303643763065], [233, 124, 0.005165420472621918], [234, 124, 0.0041593704372644424], [235, 124, 0.003153321100398898], [236, 124, 0.00214727153070271], [237, 124, 0.0011412217281758785], [238, 124, 0.00013517220213543624], [233, 125, 0.000529693381395191], [234, 125, 0.0015117720467969775], [235, 125, 0.002493850886821747], [236, 125, 0.0034759296104311943], [237, 125, 0.004458008334040642], [238, 125, 0.005440087523311377], [239, 125, 0.004742166958749294], [240, 125, 0.0037834877148270607], [241, 125, 0.002824808470904827], [242, 125, 0.0018661292269825935], [243, 125, 0.0009074498666450381], [239, 126, 0.0008101033745333552], [240, 126, 0.00174594612326473], [241, 126, 0.002681788755580783], [242, 126, 0.0036176315043121576], [243, 126, 0.004553474020212889], [244, 126, 0.005390489473938942], [245, 126, 0.00447693420574069], [246, 126, 0.003563379170373082], [247, 126, 0.0026498239021748304], [248, 126, 0.0017362686339765787], [249, 126, 0.0008227135404013097], [244, 127, 4.7655015805503353e-05], [245, 127, 0.0009394447552040219], [246, 127, 0.0018312345491722226], [247, 127, 0.0027230242267251015], [248, 127, 0.003614814253523946], [249, 127, 0.004506603814661503], [250, 127, 0.005223152693361044], [251, 127, 0.004352618008852005], [252, 127, 0.0034820837900042534], [253, 127, 0.0026115491054952145], [254, 127, 0.0017410146538168192], [255, 127, 0.0008704800857231021]];
6
+ const WINDOW = Float64Array.from({ length: 400 }, (_, i) => .5 - .5 * Math.cos(2 * Math.PI * i / 399));
7
+ /** Matches nemo128.onnx: reflected centered STFT, includes its final frame. */
8
+ export function nemoFeatures(audio) {
9
+ if (audio.length < 320)
10
+ throw new Error('TDT audio must contain at least 320 samples (20 ms).');
11
+ const frames = Math.floor(audio.length / 160) + 1;
12
+ const emphasized = new Float32Array(audio.length);
13
+ emphasized[0] = audio[0];
14
+ for (let i = 1; i < audio.length; i++)
15
+ emphasized[i] = audio[i] - Math.fround(Math.fround(.97) * audio[i - 1]);
16
+ const real = new Float64Array(512), imag = new Float64Array(512);
17
+ const power = new Float32Array(257), data = new Float32Array(128 * frames);
18
+ for (let f = 0; f < frames; f++) {
19
+ real.fill(0);
20
+ imag.fill(0);
21
+ for (let i = 0; i < 400; i++) {
22
+ let sample = f * 160 + i - 200;
23
+ if (sample < 0)
24
+ sample = -sample;
25
+ if (sample >= audio.length)
26
+ sample = 2 * audio.length - 2 - sample;
27
+ real[i + 56] = emphasized[sample] * WINDOW[i];
28
+ }
29
+ fft(real, imag);
30
+ for (let k = 0; k < 257; k++)
31
+ power[k] = real[k] ** 2 + imag[k] ** 2;
32
+ const bands = new Float64Array(128);
33
+ for (const [k, m, weight] of MEL)
34
+ bands[m] += power[k] * weight;
35
+ for (let m = 0; m < 128; m++)
36
+ data[m * frames + f] = Math.log(Math.fround(Math.fround(bands[m]) + 2 ** -24));
37
+ }
38
+ for (let m = 0; m < 128; m++) {
39
+ let mean = 0;
40
+ for (let f = 0; f < frames; f++)
41
+ mean += data[m * frames + f];
42
+ mean = Math.fround(Math.fround(mean) / frames);
43
+ let variance = 0;
44
+ for (let f = 0; f < frames; f++)
45
+ variance += Math.fround(data[m * frames + f] - mean) ** 2;
46
+ const std = Math.fround(Math.sqrt(Math.fround(Math.fround(variance) / (frames - 1))));
47
+ const denominator = Math.fround(std + Math.fround(1e-5));
48
+ for (let f = 0; f < frames; f++)
49
+ data[m * frames + f] = Math.fround(data[m * frames + f] - mean) / denominator;
50
+ }
51
+ return { data, frames };
52
+ }
53
+ //# sourceMappingURL=nemo-frontend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemo-frontend.js","sourceRoot":"","sources":["../../src/tdt/nemo-frontend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,iFAAiF;AACjF,0FAA0F;AAC1F,0FAA0F;AAC1F,MAAM,GAAG,GAAe,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,kBAAkB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,kBAAkB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,kBAAkB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,kBAAkB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,kBAAkB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,iBAAiB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,kBAAkB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,sBAAsB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,oBAAoB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,qBAAqB,CAAC,EAAC,CAAC,GAAG,EAAC,GAAG,EAAC,mBAAmB,CAAC,EAAC,CAAC,GAAG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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@missionsquad/browserai",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Run small open AI models entirely in the browser with WebGPU: model catalog, capability slots, WebLLM + Transformers.js + Kokoro inference, streaming, schema-constrained JSON, metrics, cache management, and a press-to-talk voice pipeline — as an embeddable, UI-free SDK.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,10 +29,12 @@
29
29
  "build": "npm run clean && tsc --noEmit && tsc -p tsconfig.build.json",
30
30
  "typecheck": "tsc --noEmit",
31
31
  "test": "vitest run",
32
- "prepublishOnly": "npm run build && npm test"
32
+ "prepublishOnly": "npm run build && npm test",
33
+ "typecheck:examples": "tsc -p examples/tsconfig.json",
34
+ "validate": "npm run build && npm test && npm run typecheck:examples"
33
35
  },
34
36
  "engines": {
35
- "node": ">=20"
37
+ "node": ">=20.9.0"
36
38
  },
37
39
  "keywords": [
38
40
  "webgpu",
@@ -51,8 +53,9 @@
51
53
  "author": "Mission Squad",
52
54
  "license": "ISC",
53
55
  "dependencies": {
54
- "@huggingface/transformers": "4.2.0",
55
- "@mlc-ai/web-llm": "0.2.84"
56
+ "@huggingface/transformers": "4.3.2",
57
+ "@mlc-ai/web-llm": "0.2.84",
58
+ "onnxruntime-tdt": "npm:onnxruntime-web@1.31.1"
56
59
  },
57
60
  "devDependencies": {
58
61
  "@types/node": "24.10.4",