@missionsquad/browserai 0.1.0 → 0.2.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 +5 -0
- package/dist/client.d.ts +11 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +33 -12
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/hardware.d.ts +10 -0
- package/dist/hardware.d.ts.map +1 -1
- package/dist/hardware.js +15 -0
- package/dist/hardware.js.map +1 -1
- package/dist/history.d.ts +1 -1
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +1 -1
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inference.d.ts.map +1 -1
- package/dist/inference.js +8 -6
- package/dist/inference.js.map +1 -1
- package/dist/metrics.js +2 -2
- package/dist/metrics.js.map +1 -1
- package/dist/models.d.ts +12 -2
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +142 -0
- package/dist/models.js.map +1 -1
- package/dist/multimodal.d.ts +21 -1
- package/dist/multimodal.d.ts.map +1 -1
- package/dist/multimodal.js +69 -11
- package/dist/multimodal.js.map +1 -1
- package/dist/tdt/frontend.d.ts +7 -0
- package/dist/tdt/frontend.d.ts.map +1 -0
- package/dist/tdt/frontend.js +73 -0
- package/dist/tdt/frontend.js.map +1 -0
- package/dist/tdt/index.d.ts +37 -0
- package/dist/tdt/index.d.ts.map +1 -0
- package/dist/tdt/index.js +318 -0
- package/dist/tdt/index.js.map +1 -0
- package/dist/tdt/nemo-frontend.d.ts +6 -0
- package/dist/tdt/nemo-frontend.d.ts.map +1 -0
- package/dist/tdt/nemo-frontend.js +53 -0
- package/dist/tdt/nemo-frontend.js.map +1 -0
- package/package.json +6 -3
- package/src/client.ts +35 -10
- package/src/config.ts +7 -0
- package/src/hardware.ts +15 -0
- package/src/history.ts +2 -2
- package/src/index.ts +3 -1
- package/src/inference.ts +12 -6
- package/src/metrics.ts +2 -2
- package/src/models.ts +152 -1
- package/src/multimodal.ts +64 -10
- package/src/tdt/frontend.ts +61 -0
- package/src/tdt/index.ts +230 -0
- package/src/tdt/nemo-frontend.ts +43 -0
- package/src/tdt/runtime-types.d.ts +5 -0
- 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 @@
|
|
|
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.
|
|
3
|
+
"version": "0.2.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,7 +29,9 @@
|
|
|
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
37
|
"node": ">=20"
|
|
@@ -52,7 +54,8 @@
|
|
|
52
54
|
"license": "ISC",
|
|
53
55
|
"dependencies": {
|
|
54
56
|
"@huggingface/transformers": "4.2.0",
|
|
55
|
-
"@mlc-ai/web-llm": "0.2.84"
|
|
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",
|