gpu-sankhya 0.3.0 → 0.3.2
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 +121 -37
- package/dist/core.d.ts +25 -0
- package/dist/decode.d.ts +32 -0
- package/dist/index.js +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -130,6 +130,10 @@ interface Sankhya {
|
|
|
130
130
|
actually obtained. Result is cached, so repeated calls only probe once.
|
|
131
131
|
`parseBatch`'s `"auto"` backend uses this (not `isWebGPUAvailable()`)
|
|
132
132
|
to decide whether to try the GPU path.
|
|
133
|
+
- **Non-string input**: `parse`, `parseBatch`, and `inspect` all tolerate
|
|
134
|
+
a non-string argument (`null`, `undefined`, a number, object, array,
|
|
135
|
+
boolean, ...) by treating it as no input rather than throwing —
|
|
136
|
+
`parse(null)` returns `[]` instead of crashing.
|
|
133
137
|
- **`inspect(text) => Inspection`** — synchronous CPU inspection of the
|
|
134
138
|
raw model output before decode/repair: `{ text, chars: [{ch, bio,
|
|
135
139
|
bioProb, cls, clsId}], spans, ms }`, one entry per character with its
|
|
@@ -180,16 +184,13 @@ amortizing that overhead over a batch — hundreds of strings at once —
|
|
|
180
184
|
which is exactly what `parseBatch` does with `backend: "auto"`/`"webgpu"`;
|
|
181
185
|
`parse()` stays CPU-only and synchronous on purpose.
|
|
182
186
|
|
|
183
|
-
The WebGPU path
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
for a 0 mismatch count before relying on it. The demo's benchmark re-runs
|
|
191
|
-
the CPU/WebGPU comparison on every click, so any regression shows up as a
|
|
192
|
-
mismatch count rather than a silent wrong answer.
|
|
187
|
+
The WebGPU path has been verified on a real GPU in desktop Chrome with
|
|
188
|
+
the shipped `v2` model (residual layers included): on the demo page's
|
|
189
|
+
batch benchmark (500 varied strings) it matches the CPU backend
|
|
190
|
+
span-for-span (500/500) and runs about 1.9x faster (CPU 1.66 ms/string,
|
|
191
|
+
WebGPU 0.88 ms/string). The demo's benchmark re-runs the CPU/WebGPU
|
|
192
|
+
comparison on every click, so any regression shows up as a mismatch
|
|
193
|
+
count rather than a silent wrong answer.
|
|
193
194
|
|
|
194
195
|
## Accuracy
|
|
195
196
|
|
|
@@ -207,40 +208,51 @@ out-of-vocab "unk noise" augmentation so the model has actually seen
|
|
|
207
208
|
Python and JS runtimes for anyone using older exported weights.
|
|
208
209
|
|
|
209
210
|
On synthetic validation data (drawn from the same generator/templates as
|
|
210
|
-
training): 0.
|
|
211
|
+
training): 0.925 value accuracy. This number is optimistic — it's testing
|
|
211
212
|
the model on its own distribution.
|
|
212
213
|
|
|
213
214
|
On two hand-written gold sets, written independently of the generator —
|
|
214
|
-
`python/tests/gold.jsonl` (romanised Hindi,
|
|
215
|
-
and `python/tests/gold_deva.jsonl` (Devanagari Hindi,
|
|
215
|
+
`python/tests/gold.jsonl` (romanised Hindi, 220 sentences / 194 spans)
|
|
216
|
+
and `python/tests/gold_deva.jsonl` (Devanagari Hindi, 182 sentences / 151
|
|
216
217
|
spans) — evaluated against the shipped int8-quantized weights:
|
|
217
218
|
|
|
218
219
|
| gold set | examples | spans | value accuracy | span precision | span recall | span F1 |
|
|
219
220
|
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
220
|
-
| gold.jsonl (romanised) |
|
|
221
|
-
| gold_deva.jsonl (Devanagari) |
|
|
222
|
-
| combined |
|
|
223
|
-
|
|
224
|
-
Negatives (zero-gold-span examples,
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
221
|
+
| gold.jsonl (romanised) | 220 | 194 | 0.9381 | 0.9293 | 0.9485 | 0.9388 |
|
|
222
|
+
| gold_deva.jsonl (Devanagari) | 182 | 151 | 0.9735 | 0.9867 | 0.9801 | 0.9834 |
|
|
223
|
+
| combined | 402 | 345 | 0.9536 | 0.9540 | 0.9623 | 0.9582 |
|
|
224
|
+
|
|
225
|
+
Negatives (zero-gold-span examples, 73 total): 0 false positives.
|
|
226
|
+
Miss summary: missed 0, spurious 4, wrong value 3, wrong boundary 13.
|
|
227
|
+
Per-category value accuracy: digits 0.967, words 0.940, prefix 0.926,
|
|
228
|
+
range 0.917, currency 1.0, multi_unit 0.952, symbol_unit 0.970,
|
|
229
|
+
mixed_script 1.0, long 0.80.
|
|
230
|
+
|
|
231
|
+
For comparison, the previous shipped weights scored, on this same
|
|
232
|
+
enlarged gold set: 0.9096 (romanised) / 0.9603 (Devanagari) / 0.9322
|
|
233
|
+
combined value acc, F1 0.9258, 4/73 negatives false positives (5.5%).
|
|
234
|
+
(Their numbers on the older, smaller 353-example gold set were 0.952 /
|
|
235
|
+
0.986 / 0.968 — the new gold set is deliberately harder: it adds
|
|
236
|
+
conjunction-joined multi-span sentences, trailing-cardinal chains,
|
|
237
|
+
possessive noise, in-context typos, cardinal spelling variants, and 18
|
|
238
|
+
more negative examples.) This round also ran a 198-case hand-written
|
|
239
|
+
edge-case probe across 12 categories (whitespace/short input, long
|
|
240
|
+
input, Unicode, numeric forms, prefix semantics, compound units,
|
|
241
|
+
currency, negatives, multi-span strings, noise/typos, Devanagari
|
|
242
|
+
equivalents, API contract) targeting decoder and boundary bugs rather
|
|
243
|
+
than the gold distribution itself; the fixes below took it from 146
|
|
244
|
+
pass / 17 spurious / 8 wrong value / 7 crashes to 179 pass / 0 crashes /
|
|
245
|
+
5 spurious / 1 wrong value (remaining misses are mostly boundary/range
|
|
246
|
+
edge cases, tracked below).
|
|
236
247
|
|
|
237
248
|
**The gold numbers are the ones to trust.** Known miss categories, in rough
|
|
238
249
|
order of frequency:
|
|
239
250
|
|
|
251
|
+
- wrong span boundaries on multi-span/range/connector phrases (the
|
|
252
|
+
largest single category this round)
|
|
253
|
+
- wrong value on a handful of prefix/compound constructs
|
|
240
254
|
- unusual typos the noise model doesn't cover (e.g. "croer" for "crore")
|
|
241
|
-
- possessive apostrophes ("do lakh's")
|
|
242
255
|
- long multi-term/mixed-numeral constructs ("three n half lakh", "50M")
|
|
243
|
-
- multi-number range phrases ("तीस पैंतीस हज़ार", "paanch se sadhe saat lakh")
|
|
244
256
|
- occasional spurious spans triggered by unfamiliar words near number-ish
|
|
245
257
|
context
|
|
246
258
|
|
|
@@ -283,10 +295,51 @@ Raw per-character BIO/class predictions are cleaned up before evaluation:
|
|
|
283
295
|
majority vote over character-type sub-runs (fixes a stray misclassified
|
|
284
296
|
character inside an otherwise-consistent digit or letter run), plus a
|
|
285
297
|
few punctuation-specific rules.
|
|
298
|
+
- **Word integrity**: a `UNIT_`/`PFX_`/`CARD_` token must line up with the
|
|
299
|
+
letter-word it sits in — a letters-run that's only partially meaningful
|
|
300
|
+
(some characters fell back to `O`) has all of it retagged `O` (e.g.
|
|
301
|
+
`"10 km"`), while a run legitimately split into several back-to-back
|
|
302
|
+
meaningful sub-words is left alone (e.g. `"dedhlakh"` = `PFX_DEDH` +
|
|
303
|
+
`UNIT_LAKH`). A one-character symbol unit (`k`/`K`/`l`/`L`) is additionally
|
|
304
|
+
only valid when the next character isn't a letter, so `"20k logon"`
|
|
305
|
+
keeps its `k` but `"10 km"`'s `k` doesn't survive alone either.
|
|
306
|
+
Before that drop check runs, a BIO repair pass looks at the letter-word's
|
|
307
|
+
*raw* per-character classes: if they unambiguously agree on one word
|
|
308
|
+
class (trusting only direct evidence — a same-class run of 3+ characters,
|
|
309
|
+
or a short stray adopting a qualifying neighbour's class, never a diffuse
|
|
310
|
+
whole-run majority vote alone), the span's BIO is extended to cover the
|
|
311
|
+
whole word instead of being left partial — this also re-merges a span
|
|
312
|
+
that a low-confidence internal `O` gap had split in two (e.g. `"unnasi"`
|
|
313
|
+
raw-tagged `B I I O I O`, all six characters `CARD_79`, becomes one span
|
|
314
|
+
`"unnasi"` = 79 instead of dropping).
|
|
315
|
+
- **Bare-digits gate**: a span whose only meaningful tokens are digits (no
|
|
316
|
+
unit/prefix/cardinal word at all) with no detected currency marker is
|
|
317
|
+
dropped only when it's short and ungrouped (≤4 digits, no comma — route
|
|
318
|
+
numbers, OTPs, years: `"1"`, `"route 66"`, `"OTP 4521"`, `"2024"`) or very
|
|
319
|
+
long (≥10 digits — phone numbers: `"9876543210"`). Everything else is
|
|
320
|
+
kept as a plain (unitless) amount — `"15000"`, `"1,00,000"`,
|
|
321
|
+
`"2,50,00,000"` all parse; `"₹75"` / `"Rs 2,50,000/-"` / `"1200 rupees"`
|
|
322
|
+
still parse with `currency: "INR"`. The currency-marker look-ahead
|
|
323
|
+
scans 8 characters past the amount for a trailing marker word (up from
|
|
324
|
+
a shorter window that missed `"1200 rupees"` — `"rupees"` alone runs to
|
|
325
|
+
6 characters plus the leading space).
|
|
326
|
+
- **Range-connector repair**: a bare `-`/`–`/`—`/`/` between two amounts
|
|
327
|
+
becomes a `RANGE` tag (spaces around it stay `SEP`) when the left side
|
|
328
|
+
can end an amount by itself and the right side can start a fresh one
|
|
329
|
+
(`"2 lakh/3 lakh"`, `"दो-तीन लाख"`) — but not when it's really one
|
|
330
|
+
compound number, e.g. a prefix glued straight to a unit (`"dedh-lakh"`
|
|
331
|
+
stays one span, not a range).
|
|
332
|
+
- **Possessive trim**: a trailing `'s`/`’s` (1-2 letters) is stripped from
|
|
333
|
+
the end of a word and excluded from the span (`"2 lakh's"` → `"2 lakh"`).
|
|
286
334
|
- **Confidence filter**: a span's confidence is the mean of the max BIO
|
|
287
335
|
softmax probability per character; spans below 0.5 are dropped.
|
|
288
336
|
- Only after all of the above does the deterministic arithmetic core run
|
|
289
|
-
on the resulting token sequence
|
|
337
|
+
on the resulting token sequence, which also treats a `RANGE` connector
|
|
338
|
+
between two amounts that BOTH already carry a unit and are strictly
|
|
339
|
+
*descending* (e.g. `"ek lakh dus hazaar"` mistagged `RANGE` on the
|
|
340
|
+
space) as one additive amount rather than a `[low, high]` range —
|
|
341
|
+
genuine ranges (only one side has a unit, or both do but ascending) are
|
|
342
|
+
unaffected.
|
|
290
343
|
|
|
291
344
|
One more detail that matters more than it looks like it should: the
|
|
292
345
|
runtime right-pads the character-id array with 24 pad tokens before
|
|
@@ -313,16 +366,30 @@ outputs are discarded; only the real characters' predictions are used.
|
|
|
313
366
|
- **Offsets are into the normalized string.** `parse()`'s `start`/`end`
|
|
314
367
|
index `normalizeText(text)`, not the raw input, in the rare case NFC
|
|
315
368
|
normalization changes the string's length (see `normalizeText` in the
|
|
316
|
-
API section above)
|
|
369
|
+
API section above); in JS, an astral (surrogate-pair) character such as
|
|
370
|
+
an emoji also counts as two UTF-16 units in those offsets, same as any
|
|
371
|
+
other JS string indexing.
|
|
317
372
|
- Text longer than 128 characters is processed with a sliding window
|
|
318
373
|
(128-char windows, 16-char overlap) and results are merged/deduplicated
|
|
319
374
|
by span; extremely long inputs may still miss a span that straddles a
|
|
320
375
|
window boundary in an unlucky way.
|
|
376
|
+
- **Bare single cardinal words without a unit are not reliably
|
|
377
|
+
extracted.** `"unnasi"` alone produces no span, while `"unnasi hazaar"`
|
|
378
|
+
correctly resolves to 79000 — a bare number word needs a unit, prefix,
|
|
379
|
+
or digit context to be tagged.
|
|
380
|
+
- **Long multi-term ranges still split incorrectly.** Constructs like
|
|
381
|
+
`"paanch se sadhe saat lakh"` (a range where one side itself carries a
|
|
382
|
+
prefix word) are not reliably decoded as a single range.
|
|
383
|
+
- **Fullwidth and Arabic-Indic digits are not normalised.** Only
|
|
384
|
+
Devanagari digits (U+0966-U+096F) are mapped by `normalizeText`;
|
|
385
|
+
fullwidth (`2`) and Arabic-Indic (`٢`) digit forms are left as unknown
|
|
386
|
+
characters, so a phrase like `"2 lakh"` loses the digit and falls back
|
|
387
|
+
to the unit's default value.
|
|
321
388
|
- Model quality: see Accuracy above. The known miss categories there
|
|
322
|
-
(
|
|
323
|
-
occasional spurious spans) are model-quality
|
|
324
|
-
arithmetic core, which is unit-tested directly
|
|
325
|
-
model in `test/core.test.ts`.
|
|
389
|
+
(wrong span boundaries on multi-span/range phrases, unusual typos,
|
|
390
|
+
long multi-term ranges, occasional spurious spans) are model-quality
|
|
391
|
+
issues, not bugs in the arithmetic core, which is unit-tested directly
|
|
392
|
+
and independently of the model in `test/core.test.ts`.
|
|
326
393
|
|
|
327
394
|
## Repository layout
|
|
328
395
|
|
|
@@ -407,3 +474,20 @@ npmjs.com for this to work: package page -> Settings -> Trusted publisher,
|
|
|
407
474
|
with Organization/user `athrvk`, Repository `gpu-sankhya`, Workflow
|
|
408
475
|
filename `publish.yml`. The first release was published manually with
|
|
409
476
|
`npm publish`.
|
|
477
|
+
|
|
478
|
+
### Publishing to Hugging Face
|
|
479
|
+
|
|
480
|
+
The `.github/workflows/huggingface.yml` workflow mirrors the shipped model,
|
|
481
|
+
the demo, and the gold evaluation sets to Hugging Face:
|
|
482
|
+
|
|
483
|
+
- model: https://huggingface.co/athrvk/gpu-sankhya
|
|
484
|
+
- demo Space: https://huggingface.co/spaces/athrvk/gpu-sankhya-demo
|
|
485
|
+
- dataset: https://huggingface.co/datasets/athrvk/gpu-sankhya-gold
|
|
486
|
+
|
|
487
|
+
It runs on `workflow_dispatch` (choose `all`/`model`/`space`/`dataset`) and
|
|
488
|
+
on push to `master` when `package.json`, `models/default/**`,
|
|
489
|
+
`python/tests/gold*.jsonl`, or `demo/**` change. One-time setup: add an
|
|
490
|
+
`HF_TOKEN` repo secret with a write-scoped Hugging Face token for the
|
|
491
|
+
`athrvk` namespace — without it the workflow prints a notice and skips.
|
|
492
|
+
See `python/README.md`'s "Publishing to Hugging Face" section for the
|
|
493
|
+
underlying `python -m sankhya.hf_push` CLI (including `--dry-run`).
|
package/dist/core.d.ts
CHANGED
|
@@ -15,6 +15,31 @@ export declare function evaluate(rawTokens: Tok[]): Result;
|
|
|
15
15
|
* sorted longest-first so `detectCurrency` tries the longest (most
|
|
16
16
|
* specific) marker before a shorter one that might be its prefix (e.g.
|
|
17
17
|
* "Rs." before "Rs", "रुपये" before a shorter overlapping marker). */
|
|
18
|
+
/** R3: true when a span's meaningful tokens are ONLY digits (with
|
|
19
|
+
* DOT/COMMA/SEP glue) -- no UNIT_/PFX_/CARD_ token at all. Such a span is
|
|
20
|
+
* dropped by the caller unless a currency marker is detected for it. */
|
|
21
|
+
export declare function isBareDigits(tokens: Tok[]): boolean;
|
|
22
|
+
/** R3 (narrowed): whether a bare-digits span (see isBareDigits) with NO
|
|
23
|
+
* detected currency should be dropped. Most bare numbers ARE amounts
|
|
24
|
+
* (rent, prices, quantities: "15000", "2,50,00,000", "125,000") and must
|
|
25
|
+
* be kept; only the two genuinely ambiguous shapes are dropped:
|
|
26
|
+
*
|
|
27
|
+
* (a) short (<=4 digits) AND ungrouped (no comma) -- route numbers,
|
|
28
|
+
* OTPs, years, house numbers: "1", "66", "4521", "2024", "302".
|
|
29
|
+
* (b) very long (>=10 digits) -- phone numbers: "9876543210".
|
|
30
|
+
*
|
|
31
|
+
* A grouping comma (Indian or Western) is itself a strong signal of a
|
|
32
|
+
* real amount, so it exempts an otherwise-short span from rule (a):
|
|
33
|
+
* "1,00,000" (6 digits, comma) is kept, not dropped. */
|
|
34
|
+
export declare function shouldDropBareDigits(tokens: Tok[]): boolean;
|
|
18
35
|
export declare function mergeLangPacks(...packs: LangPack[]): LangPack;
|
|
36
|
+
/** Scan up to 8 chars before/after [start,end) for a currency marker. The
|
|
37
|
+
* window has to be wider than the longest marker word (6 chars, e.g.
|
|
38
|
+
* "rupaye"/"rupees"): the span boundary sits right after the number, so
|
|
39
|
+
* the gap before the marker word starts (whitespace, and occasionally
|
|
40
|
+
* punctuation like ", ") eats into a same-sized window and truncates the
|
|
41
|
+
* word -- "1200 rupees" with a 6-char after-window is " rupee" (missing
|
|
42
|
+
* the final "s"), so "rupees" never matches with startsWith(). 8 leaves
|
|
43
|
+
* slack for a couple of separator chars ahead of the longest marker. */
|
|
19
44
|
export declare function detectCurrency(text: string, start: number, end: number, pack: LangPack): "INR" | null;
|
|
20
45
|
export {};
|
package/dist/decode.d.ts
CHANGED
|
@@ -12,4 +12,36 @@ export interface DecodedSpan {
|
|
|
12
12
|
tokens: Array<[number, string]>;
|
|
13
13
|
confidence: number | null;
|
|
14
14
|
}
|
|
15
|
+
/** BIO repair (c): a word-class (UNIT_/PFX_/CARD_) token whose predicted
|
|
16
|
+
* span only PARTIALLY covers its letter word is not necessarily a bad
|
|
17
|
+
* match -- if the whole run's RAW per-char classes unanimously resolve
|
|
18
|
+
* (via `runUnanimousClass`, direct-evidence-only sub-run smoothing) to a
|
|
19
|
+
* SINGLE word class, the partial coverage is just low-confidence BIO
|
|
20
|
+
* dropout on an otherwise-agreed word, not a genuinely mixed/ambiguous
|
|
21
|
+
* run. Extend the span's BIO to cover the whole run (I for every char, B
|
|
22
|
+
* at the run start) instead of leaving it for R2 to drop -- this also
|
|
23
|
+
* merges spans that were split by an internal O gap inside that run back
|
|
24
|
+
* into a single span (e.g. "unnasi" B I I O I O -> B I I I I I).
|
|
25
|
+
*
|
|
26
|
+
* A run whose raw classes do NOT resolve to one unanimous word class this
|
|
27
|
+
* way (e.g. only part of the run predicts a word class, or the agreement
|
|
28
|
+
* is only visible via `repairLetterRun`'s diffuse whole-run majority-vote
|
|
29
|
+
* fallback rather than direct evidence) is left alone, so R2's drop still
|
|
30
|
+
* applies to it. Runs longer than 24 chars are skipped. */
|
|
31
|
+
export declare function extendWordIntegrityBio(bioIds: number[] | Int32Array, clsIds: number[] | Int32Array, runs: Array<[number, number]>): number[];
|
|
32
|
+
/** [start, end) maximal letter/mark runs over the WHOLE text (not just one
|
|
33
|
+
* span) -- word integrity needs the true word boundaries, which can extend
|
|
34
|
+
* outside a span that was cut short mid-word. */
|
|
35
|
+
export declare function letterRuns(text: string): Array<[number, number]>;
|
|
36
|
+
/** R2: a word-class (UNIT_/PFX_/CARD_) token must cover its entire letter
|
|
37
|
+
* word. Checked per WHOLE letters-run rather than per token, so a run
|
|
38
|
+
* legitimately split into several back-to-back meaningful tokens (e.g.
|
|
39
|
+
* "dedhlakh" = PFX_DEDH|UNIT_LAKH, both length-4 sub-runs) is left alone; a
|
|
40
|
+
* run that is only PARTIALLY meaningful (some chars fall back to O, e.g.
|
|
41
|
+
* "km" tagged UNIT_.../O) has ALL its meaningful chars retagged O too -- a
|
|
42
|
+
* partial match without an explanation for the rest of the word is
|
|
43
|
+
* untrustworthy. A single-character symbol unit (k/K/l/L) is additionally
|
|
44
|
+
* only valid when the following character is not a letter, even when it
|
|
45
|
+
* fully (and only) covers its own run. */
|
|
46
|
+
export declare function repairWordIntegrity(text: string, s: number, e: number, ids: number[] | Int32Array, runs: Array<[number, number]>): number[];
|
|
15
47
|
export declare function decodeSpans(text: string, bioIds: number[] | Int32Array, clsIds: number[] | Int32Array, bioProbs?: Float32Array[] | number[][] | null): DecodedSpan[];
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function LA(A){return A.version===2&&Array.isArray(A.conv)}function dA(A){return A.quantized!==void 0}function FA(A){let B=atob(A),n=new Int8Array(B.length);for(let e=0;e<B.length;e++)n[e]=B.charCodeAt(e)<<24>>24;return n}function T(A){let B=FA(A.data_b64),n=new Float32Array(B.length);for(let e=0;e<B.length;e++)n[e]=B[e]*A.scale;return{shape:A.shape,data:n}}function U(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function tA(A,B){return A*(B-1)/2}function Y(A){return{w:U(A.w),b:Float32Array.from(A.b.data)}}function m(A){return{w:T(A.w),b:Float32Array.from(A.b)}}function gA(A){let B=dA(A);if(LA(A)){let g=A.conv.map(f=>{let w=tA(f.dilation,f.k);if(B){let P=f;return{k:f.k,dilation:f.dilation,residual:f.residual,padding:w,w:T(P.w),b:Float32Array.from(P.b)}}let s=f;return{k:f.k,dilation:f.dilation,residual:f.residual,padding:w,w:U(s.w),b:Float32Array.from(s.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:B?T(A.embed):U(A.embed),conv:g,bio:B?m(A.bio):Y(A.bio),cls:B?m(A.cls):Y(A.cls)}}let n=A.layers??3,e=A.dilation??2,t=[{name:"conv1",k:3,dilation:1},{name:"conv2",k:5,dilation:1},{name:"conv3",k:3,dilation:e}];n===4&&t.push({name:"conv4",k:3,dilation:4});let r=t.map(g=>{let f=tA(g.dilation,g.k);if(B){let u=A[g.name];if(!u)throw new Error(`missing ${g.name} in weights JSON`);return{k:g.k,dilation:g.dilation,residual:!1,padding:f,w:T(u.w),b:Float32Array.from(u.b)}}let s=A[g.name];if(!s)throw new Error(`missing ${g.name} in weights JSON`);return{k:g.k,dilation:g.dilation,residual:!1,padding:f,w:U(s.w),b:Float32Array.from(s.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:B?T(A.embed):U(A.embed),conv:r,bio:B?m(A.bio):Y(A.bio),cls:B?m(A.cls):Y(A.cls)}}function MA(A){return Math.ceil(A/8)*8}function x(A){return MA(A+24)}var R=x(128),RA=/[०-९]/g;function k(A){return A.normalize("NFC").replace(RA,B=>String(B.charCodeAt(0)-2406)).toLowerCase()}function sA(A){let B=new Map;for(let n=0;n<A.length;n++)B.set(A[n],n);return B}function p(A,B,n,e){let t=B.get("<unk>")??1,r=B.get("<pad>")??0,g=e??A.length,f=n?n.subarray(0,g):new Int32Array(g);for(let w=0;w<A.length;w++)f[w]=B.get(A[w])??t;for(let w=A.length;w<g;w++)f[w]=r;return f}function Z(A){if(A<=128)return[{offset:0,length:A}];let B=[],n=112,e=0;for(;e<A;){let t=Math.min(128,A-e);if(B.push({offset:e,length:t}),e+t>=A)break;e+=n}return B}var X=class{buffers;padded;bioBuf;clsBuf;constructor(B){let n=B.conv,e=Math.max(B.embed.shape[1],...n.map(r=>r.w.shape[0]));this.buffers=[new Float32Array(e*R),new Float32Array(e*R)];let t=n.length?Math.max(...n.map(r=>r.padding)):0;this.padded=new Float32Array(e*(R+2*t)),this.bioBuf=new Float32Array(B.bio.w.shape[0]*R),this.clsBuf=new Float32Array(B.cls.w.shape[0]*R)}buf(B){return this.buffers[B%2]}paddedBuf(){return this.padded}};function OA(A,B,n,e,t,r){let[g,f,w]=e.w.shape;if(f!==B)throw new Error(`channel mismatch: expected ${B}, got ${f}`);let s=e.w.data,P=e.b,u=e.padding,o=e.dilation,C=n+2*u;for(let D=0;D<B;D++)r.fill(0,D*C,D*C+u),r.set(A.subarray(D*n,D*n+n),D*C+u),r.fill(0,D*C+u+n,D*C+C);for(let D=0;D<g;D++){let Q=D*n,i=P[D],I=D*B*w;if(w===3){for(let v=0;v<n;v++)t[Q+v]=i;for(let v=0;v<B;v++){let h=v*C,b=I+v*3,L=s[b],H=s[b+1],E=s[b+2];for(let c=0;c<n;c++){let a=h+c;t[Q+c]+=L*r[a]+H*r[a+o]+E*r[a+2*o]}}}else if(w===5){for(let v=0;v<n;v++)t[Q+v]=i;for(let v=0;v<B;v++){let h=v*C,b=I+v*5,L=s[b],H=s[b+1],E=s[b+2],c=s[b+3],a=s[b+4];for(let d=0;d<n;d++){let F=h+d;t[Q+d]+=L*r[F]+H*r[F+1]+E*r[F+2]+c*r[F+3]+a*r[F+4]}}}else{for(let v=0;v<n;v++)t[Q+v]=i;for(let v=0;v<B;v++){let h=v*C,b=I+v*w;for(let L=0;L<w;L++){let H=s[b+L],E=L*o,c=h+E;for(let a=0;a<n;a++)t[Q+a]+=H*r[c+a]}}}if(e.residual)for(let v=0;v<n;v++){let h=t[Q+v];t[Q+v]=(h>0?h:0)+A[Q+v]}else for(let v=0;v<n;v++){let h=t[Q+v];t[Q+v]=h>0?h:0}}return g}function wA(A,B,n,e,t){let[r,g]=e.w.shape;if(g!==B)throw new Error(`head channel mismatch: expected ${B}, got ${g}`);let f=e.w.data,w=e.b,s=B-B%4;for(let P=0;P<n;P++){let u=P*r;for(let o=0;o<r;o++){let C=w[o],D=o*B,Q=0;for(;Q<s;Q+=4)C+=f[D+Q]*A[Q*n+P]+f[D+Q+1]*A[(Q+1)*n+P]+f[D+Q+2]*A[(Q+2)*n+P]+f[D+Q+3]*A[(Q+3)*n+P];for(;Q<B;Q++)C+=f[D+Q]*A[Q*n+P];t[u+o]=C}}return r}function j(A,B,n){let e=B.length,t=A.embed,r=t.shape[1],g=n.buf(0);for(let u=0;u<e;u++){let C=B[u]*r;for(let D=0;D<r;D++)g[D*e+u]=t.data[C+D]}let f=r,w=n.paddedBuf(),s=1;for(let u of A.conv){let o=n.buf(s);f=OA(g,f,e,u,o,w),g=o,s++}wA(g,f,e,A.bio,n.bioBuf);let P=wA(g,f,e,A.cls,n.clsBuf);return{bioLogits:n.bioBuf,clsLogits:n.clsBuf,length:e,nCls:P}}function $(A,B,n,e){let t=-1/0;for(let g=0;g<n;g++)t=Math.max(t,A[B+g]);let r=0;for(let g=0;g<n;g++){let f=Math.exp(A[B+g]-t);e[g]=f,r+=f}for(let g=0;g<n;g++)e[g]/=r;return e}function G(A,B,n){let e=0,t=-1/0;for(let r=0;r<n;r++){let g=A[B+r];g>t&&(t=g,e=r)}return e}var xA=["PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE"],zA=Array.from({length:99},(A,B)=>`CARD_${B+1}`),TA=["UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],UA=["O","SEP","RANGE","DIGITS","DOT","COMMA"],M=["O",...UA.filter(A=>A!=="O"),...xA,...zA,...TA],O=Object.fromEntries(M.map((A,B)=>[A,B])),PA={UNIT_SAU:100,UNIT_HAZAAR:1e3,UNIT_LAKH:1e5,UNIT_MILLION:1e6,UNIT_CRORE:1e7,UNIT_BILLION:1e9,UNIT_ARAB:1e9,UNIT_KHARAB:1e11},AA={UNIT_SAU:"sau",UNIT_HAZAAR:"hazaar",UNIT_LAKH:"lakh",UNIT_MILLION:"million",UNIT_CRORE:"crore",UNIT_BILLION:"billion",UNIT_ARAB:"arab",UNIT_KHARAB:"kharab"},BA={PFX_PAAV:{standalone:.25,op:null},PFX_AADHA:{standalone:.5,op:null},PFX_PAUNE:{standalone:.75,op:"sub25",min_n:2},PFX_SAVA:{standalone:1.25,op:"add25",min_n:2},PFX_DEDH:{standalone:1.5,op:null},PFX_DHAI:{standalone:2.5,op:null},PFX_SAADHE:{standalone:.5,op:"add5",min_n:3}};function CA(A){return A in BA}function oA(A){return A.startsWith("CARD_")}function vA(A){return A in PA}function DA(A){return parseInt(A.split("_",2)[1],10)}function N(A){return PA[A]}var QA=new Set(["SEP","RANGE","DOT","COMMA"]),pA=["PFX_","CARD_","UNIT_"],GA=["PFX_","CARD_","UNIT_"];function yA(A){return pA.some(B=>A.startsWith(B))||A==="DIGITS"}function YA(A){return GA.some(B=>A.startsWith(B))}var mA=O.O,J=O.SEP,eA=O.RANGE,XA=O.DIGITS,jA=O.DOT,NA=O.COMMA,JA=/\p{L}|\p{M}/u;function uA(A){return JA.test(A)?"letter":/[0-9]/.test(A)?"digit":/\s/.test(A)?"space":"punct"}function SA(A){let B=[],n=0,e=A.length;for(;n<e;){let t=uA(A[n]),r=n+1;for(;r<e&&uA(A[r])===t;)r++;B.push({type:t,start:n,end:r}),n=r}return B}function KA(A,B,n){let e=new Map;for(let s=B;s<n;s++){let P=A[s];YA(M[P])&&e.set(P,(e.get(P)??0)+1)}if(e.size===0)return mA;let t=-1;for(let s of e.values())s>t&&(t=s);let r=[...e.entries()].filter(([,s])=>s===t).map(([s])=>s);if(r.length===1)return r[0];let g=-1,f=1/0,w=r[0];for(let s of r){let P=0,u=0,o=1/0;for(let C=B;C<n;C++)A[C]===s?(o===1/0&&(o=C),P++,P>u&&(u=P)):P=0;(u>g||u===g&&o<f)&&(g=u,f=o,w=s)}return w}function _A(A,B,n){let e=[],t=B;for(;t<n;){let f=t+1;for(;f<n&&A[f]===A[t];)f++;e.push({start:t,end:f,cls:A[t]}),t=f}let r=KA(A,B,n),g=[];for(let f=0;f<e.length;f++){let w=e[f];if(w.end-w.start>=3){g.push([w.start,w.end,w.cls]);continue}let P=f>0?e[f-1]:null,u=f<e.length-1?e[f+1]:null,o=P!==null&&P.end-P.start>=3,C=u!==null&&u.end-u.start>=3,D;if(o&&C){let Q=P.end-P.start;D=u.end-u.start>Q?u.cls:P.cls}else o?D=P.cls:C?D=u.cls:D=r;g.push([w.start,w.end,D])}return g}function WA(A,B){let n=A.length,e=new Array(n),t=SA(A);for(let r=0;r<t.length;r++){let g=t[r],{type:f,start:w,end:s}=g;if(f==="digit"){for(let C=w;C<s;C++)e[C]=XA;continue}if(f==="space"){let C=!1;for(let Q=w;Q<s;Q++)if(B[Q]===eA){C=!0;break}let D=C?eA:J;for(let Q=w;Q<s;Q++)e[Q]=D;continue}if(f==="letter"){for(let[C,D,Q]of _A(B,w,s))for(let i=C;i<D;i++)e[i]=Q;continue}let P=r>0?t[r-1].type:null,u=r<t.length-1?t[r+1].type:null,o=J;if(s-w===1){let C=A[w];(C==="."||C===",")&&P==="digit"&&u==="digit"?o=C==="."?jA:NA:(C==="-"||C==="\u2013"||C==="/")&&P==="digit"&&u==="digit"?o=eA:o=J}for(let C=w;C<s;C++)e[C]=o}return e}function VA(A,B){let n=Array.from({length:B},(e,t)=>A[t]);for(let e=1;e<B-1;e++)A[e]===0&&(A[e-1]===1||A[e-1]===2)&&A[e+1]===2&&(n[e]=2);return n}function EA(A){return A!==void 0&&A>="0"&&A<="9"}function qA(A,B,n){if(n<=B||!EA(A[n-1]))return n;let e=n;for(;e<A.length&&EA(A[e]);)e++;return e}function cA(A,B,n,e){let t=A.length,r=VA(B,t),g=[],f=null;for(let s=0;s<t;s++){let P=r[s];P===1?(f!==null&&g.push([f,s]),f=s):P===2||f!==null&&(g.push([f,s]),f=null)}f!==null&&g.push([f,t]);for(let s=0;s<g.length;s++)g[s]=[g[s][0],qA(A,g[s][0],g[s][1])];let w=[];for(let[s,P]of g){let u=A.slice(s,P),o=Array.from({length:P-s},(H,E)=>n[s+E]),C=WA(u,o),D=s,Q=[];for(let H=s+1;H<=P;H++)(H===P||C[H-s]!==C[D-s])&&(Q.push([C[D-s],D,H]),D=H);let i=0,I=Q.length;for(;i<I&&QA.has(M[Q[i][0]]);)i++;for(;I>i&&QA.has(M[Q[I-1][0]]);)I--;let v=Q.slice(i,I);if(v.length===0)continue;let h=v[0][1],b=v[v.length-1][2];if(!v.some(([H])=>yA(M[H])))continue;let L=null;if(e){let H=[];for(let E=h;E<b;E++)H.push(Math.max(...e[E]));if(L=H.length?H.reduce((E,c)=>E+c,0)/H.length:0,L<.5)continue}w.push({start:h,end:b,text:A.slice(h,b),tokens:v.map(([H,E,c])=>[H,A.slice(E,c)]),confidence:L})}return w}function ZA(A){let B=[],n="",e=!1,t=()=>{if(e){let r=n.replace(/,/g,""),g=parseFloat(r);B.push(["NUM",Number.isNaN(g)?0:g])}n="",e=!1};for(let[r,g]of A)r!=="SEP"&&(r==="DIGITS"||r==="DOT"||r==="COMMA"?(n+=g,e=!0):(t(),B.push([r,g])));return t(),B}function $A(A,B){if(B!==null){let n=BA[B];if(n===void 0)return A!==null?A:1;if(A!==null&&n.op){if(n.op==="sub25")return A-.25;if(n.op==="add25")return A+.25;if(n.op==="add5")return A+.5}return n.standalone}return A!==null?A:1}function AB(A){let B=ZA(A),n=0,e=null,t=null,r=null,g=null;function f(w){let s=$A(r,g);if(w===null)n+=s*1;else{let P=N(w);e!==null&&P>e?n=n*P:n=n+s*P,e=P,(t===null||P>N(t))&&(t=w)}r=null,g=null}for(let[w,s]of B)if(w==="NUM")r!==null&&f(null),r=s;else if(oA(w)){r!==null&&f(null);try{r=DA(w)}catch{}}else if(CA(w))g!==null&&f(null),g=w;else if(vA(w))f(w);else continue;return(r!==null||g!==null)&&f(null),[n,t]}function S(A){let B=Math.round(A),n=Math.max(1e-6,Math.abs(A)*1e-9);return Math.abs(A-B)<n?B:Math.round(A*1e6)/1e6}function BB(A){let B=[],n=0;for(;n<A.length;){let[e,t]=A[n];if(e.startsWith("PFX_")){let r=t,g=n+1;for(;;){let f=g;if(f<A.length&&A[f][0]==="SEP"&&f++,f<A.length&&A[f][0]===e){for(let w=g;w<=f;w++)r+=A[w][1];g=f+1;continue}break}B.push([e,r]),n=g}else B.push(A[n]),n++}return B}function aA(A){try{let B=A.map(o=>o[0]),n=BB(A),e=[[]];for(let[o,C]of n){if(o==="RANGE"){e.length<2&&e.push([]);continue}e[e.length-1].push([o,C])}let t=e.filter(o=>o.length>0).map(o=>AB(o));if(t.length===0)return{value:0,range:null,unit:null,classes:B,currency:null};if(t.length===1){let[o,C]=t[0];return{value:S(o),range:null,unit:C?AA[C]??null:null,classes:B,currency:null}}let[r,g]=t[0],[f,w]=t[1],s;g===null&&w!==null?(r=r*N(w),s=w):s=g!==null?g:w;let[P,u]=r<=f?[r,f]:[f,r];return{value:S(P),range:[S(P),S(u)],unit:s?AA[s]??null:null,classes:B,currency:null}}catch{return{value:0,range:null,unit:null,classes:A.map(B=>B[0]),currency:null}}}function iA(...A){let B=(e,t)=>t.length-e.length,n=e=>[...new Set(e.flat())].sort(B);return{currency_markers_before:n(A.map(e=>e.currency_markers_before??[])),currency_words_after:n(A.map(e=>e.currency_words_after??[]))}}function IA(A,B,n,e){let t=A.slice(Math.max(0,B-4),B),r=A.slice(n,n+6),f=t.replace(/\s+$/,"").toLowerCase(),w=[...e.currency_markers_before??[]].sort((o,C)=>C.length-o.length);for(let o of w){let C=o.replace(/\.+$/,"").toLowerCase();if(f.endsWith(o.toLowerCase())||f.endsWith(C))return"INR"}let P=r.replace(/^\s+/,"").toLowerCase(),u=[...e.currency_words_after??[]].sort((o,C)=>C.length-o.length);for(let o of u){let C=o.toLowerCase();if(P.startsWith(C))return"INR"}return null}var HA={currency_markers_before:["\u20B9","Rs","Rs.","rs","INR","Re"],currency_words_after:["rupaye","rupay","rupees","rupiya","rupya","/-"]};var bA={currency_markers_before:["\u20B9","\u0930\u0941","\u0930\u0941.","Rs","Rs.","INR"],currency_words_after:["\u0930\u0941\u092A\u092F\u0947","\u0930\u0941\u092A\u090F","\u0930\u0942\u092A\u092F\u0947","\u0930\u0941\u092A\u092F\u093E","/-"]};var eB=`
|
|
1
|
+
function zA(A){return A.version===2&&Array.isArray(A.conv)}function TA(A){return A.quantized!==void 0}function kA(A){let e=atob(A),n=new Int8Array(e.length);for(let B=0;B<e.length;B++)n[B]=e.charCodeAt(B)<<24>>24;return n}function z(A){let e=kA(A.data_b64),n=new Float32Array(e.length);for(let B=0;B<e.length;B++)n[B]=e[B]*A.scale;return{shape:A.shape,data:n}}function T(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function wA(A,e){return A*(e-1)/2}function N(A){return{w:T(A.w),b:Float32Array.from(A.b.data)}}function X(A){return{w:z(A.w),b:Float32Array.from(A.b)}}function PA(A){let e=TA(A);if(zA(A)){let s=A.conv.map(t=>{let g=wA(t.dilation,t.k);if(e){let P=t;return{k:t.k,dilation:t.dilation,residual:t.residual,padding:g,w:z(P.w),b:Float32Array.from(P.b)}}let o=t;return{k:t.k,dilation:t.dilation,residual:t.residual,padding:g,w:T(o.w),b:Float32Array.from(o.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:e?z(A.embed):T(A.embed),conv:s,bio:e?X(A.bio):N(A.bio),cls:e?X(A.cls):N(A.cls)}}let n=A.layers??3,B=A.dilation??2,f=[{name:"conv1",k:3,dilation:1},{name:"conv2",k:5,dilation:1},{name:"conv3",k:3,dilation:B}];n===4&&f.push({name:"conv4",k:3,dilation:4});let r=f.map(s=>{let t=wA(s.dilation,s.k);if(e){let w=A[s.name];if(!w)throw new Error(`missing ${s.name} in weights JSON`);return{k:s.k,dilation:s.dilation,residual:!1,padding:t,w:z(w.w),b:Float32Array.from(w.b)}}let o=A[s.name];if(!o)throw new Error(`missing ${s.name} in weights JSON`);return{k:s.k,dilation:s.dilation,residual:!1,padding:t,w:T(o.w),b:Float32Array.from(o.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:e?z(A.embed):T(A.embed),conv:r,bio:e?X(A.bio):N(A.bio),cls:e?X(A.cls):N(A.cls)}}function xA(A){return Math.ceil(A/8)*8}function R(A){return xA(A+24)}var O=R(128),pA=/[०-९]/g;function k(A){return A.normalize("NFC").replace(pA,e=>String(e.charCodeAt(0)-2406)).toLowerCase()}function CA(A){let e=new Map;for(let n=0;n<A.length;n++)e.set(A[n],n);return e}function x(A,e,n,B){let f=e.get("<unk>")??1,r=e.get("<pad>")??0,s=B??A.length,t=n?n.subarray(0,s):new Int32Array(s);for(let g=0;g<A.length;g++)t[g]=e.get(A[g])??f;for(let g=A.length;g<s;g++)t[g]=r;return t}function eA(A){if(A<=128)return[{offset:0,length:A}];let e=[],n=112,B=0;for(;B<A;){let f=Math.min(128,A-B);if(e.push({offset:B,length:f}),B+f>=A)break;B+=n}return e}var j=class{buffers;padded;bioBuf;clsBuf;constructor(e){let n=e.conv,B=Math.max(e.embed.shape[1],...n.map(r=>r.w.shape[0]));this.buffers=[new Float32Array(B*O),new Float32Array(B*O)];let f=n.length?Math.max(...n.map(r=>r.padding)):0;this.padded=new Float32Array(B*(O+2*f)),this.bioBuf=new Float32Array(e.bio.w.shape[0]*O),this.clsBuf=new Float32Array(e.cls.w.shape[0]*O)}buf(e){return this.buffers[e%2]}paddedBuf(){return this.padded}};function mA(A,e,n,B,f,r){let[s,t,g]=B.w.shape;if(t!==e)throw new Error(`channel mismatch: expected ${e}, got ${t}`);let o=B.w.data,P=B.b,w=B.padding,C=B.dilation,D=n+2*w;for(let u=0;u<e;u++)r.fill(0,u*D,u*D+w),r.set(A.subarray(u*n,u*n+n),u*D+w),r.fill(0,u*D+w+n,u*D+D);for(let u=0;u<s;u++){let Q=u*n,l=P[u],I=u*e*g;if(g===3){for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let H=v*D,i=I+v*3,d=o[i],M=o[i+1],E=o[i+2];for(let c=0;c<n;c++){let a=H+c;f[Q+c]+=d*r[a]+M*r[a+C]+E*r[a+2*C]}}}else if(g===5){for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let H=v*D,i=I+v*5,d=o[i],M=o[i+1],E=o[i+2],c=o[i+3],a=o[i+4];for(let h=0;h<n;h++){let F=H+h;f[Q+h]+=d*r[F]+M*r[F+1]+E*r[F+2]+c*r[F+3]+a*r[F+4]}}}else{for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let H=v*D,i=I+v*g;for(let d=0;d<g;d++){let M=o[i+d],E=d*C,c=H+E;for(let a=0;a<n;a++)f[Q+a]+=M*r[c+a]}}}if(B.residual)for(let v=0;v<n;v++){let H=f[Q+v];f[Q+v]=(H>0?H:0)+A[Q+v]}else for(let v=0;v<n;v++){let H=f[Q+v];f[Q+v]=H>0?H:0}}return s}function DA(A,e,n,B,f){let[r,s]=B.w.shape;if(s!==e)throw new Error(`head channel mismatch: expected ${e}, got ${s}`);let t=B.w.data,g=B.b,o=e-e%4;for(let P=0;P<n;P++){let w=P*r;for(let C=0;C<r;C++){let D=g[C],u=C*e,Q=0;for(;Q<o;Q+=4)D+=t[u+Q]*A[Q*n+P]+t[u+Q+1]*A[(Q+1)*n+P]+t[u+Q+2]*A[(Q+2)*n+P]+t[u+Q+3]*A[(Q+3)*n+P];for(;Q<e;Q++)D+=t[u+Q]*A[Q*n+P];f[w+C]=D}}return r}function S(A,e,n){let B=e.length,f=A.embed,r=f.shape[1],s=n.buf(0);for(let w=0;w<B;w++){let D=e[w]*r;for(let u=0;u<r;u++)s[u*B+w]=f.data[D+u]}let t=r,g=n.paddedBuf(),o=1;for(let w of A.conv){let C=n.buf(o);t=mA(s,t,B,w,C,g),s=C,o++}DA(s,t,B,A.bio,n.bioBuf);let P=DA(s,t,B,A.cls,n.clsBuf);return{bioLogits:n.bioBuf,clsLogits:n.clsBuf,length:B,nCls:P}}function BA(A,e,n,B){let f=-1/0;for(let s=0;s<n;s++)f=Math.max(f,A[e+s]);let r=0;for(let s=0;s<n;s++){let t=Math.exp(A[e+s]-f);B[s]=t,r+=t}for(let s=0;s<n;s++)B[s]/=r;return B}function p(A,e,n){let B=0,f=-1/0;for(let r=0;r<n;r++){let s=A[e+r];s>f&&(f=s,B=r)}return B}var yA=["PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE"],YA=Array.from({length:99},(A,e)=>`CARD_${e+1}`),NA=["UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],XA=["O","SEP","RANGE","DIGITS","DOT","COMMA"],L=["O",...XA.filter(A=>A!=="O"),...yA,...YA,...NA],U=Object.fromEntries(L.map((A,e)=>[A,e])),vA={UNIT_SAU:100,UNIT_HAZAAR:1e3,UNIT_LAKH:1e5,UNIT_MILLION:1e6,UNIT_CRORE:1e7,UNIT_BILLION:1e9,UNIT_ARAB:1e9,UNIT_KHARAB:1e11},J={UNIT_SAU:"sau",UNIT_HAZAAR:"hazaar",UNIT_LAKH:"lakh",UNIT_MILLION:"million",UNIT_CRORE:"crore",UNIT_BILLION:"billion",UNIT_ARAB:"arab",UNIT_KHARAB:"kharab"},nA={PFX_PAAV:{standalone:.25,op:null},PFX_AADHA:{standalone:.5,op:null},PFX_PAUNE:{standalone:.75,op:"sub25",min_n:2},PFX_SAVA:{standalone:1.25,op:"add25",min_n:2},PFX_DEDH:{standalone:1.5,op:null},PFX_DHAI:{standalone:2.5,op:null},PFX_SAADHE:{standalone:.5,op:"add5",min_n:3}};function QA(A){return A in nA}function uA(A){return A.startsWith("CARD_")}function cA(A){return A in vA}function aA(A){return parseInt(A.split("_",2)[1],10)}function K(A){return vA[A]}var SA=new Set(["SEP","RANGE","DOT","COMMA"]),EA=new Set([...SA,"O"]),fA=["PFX_","CARD_","UNIT_"],JA=["PFX_","CARD_","UNIT_"],KA=new Set(["-","\u2013","\u2014","/"]),_A=new Set(["k","K","l","L"]),iA=/['’]([A-Za-zऀ-ॿ]{1,2})(?![A-Za-zऀ-ॿ])/g;function WA(A){return fA.some(e=>A.startsWith(e))||A==="DIGITS"}function VA(A){return JA.some(e=>A.startsWith(e))}var W=U.O,_=U.SEP,rA=U.RANGE,qA=U.DIGITS,ZA=U.DOT,$A=U.COMMA,Ae=/\p{L}|\p{M}/u;function m(A){return Ae.test(A)?"letter":/[0-9]/.test(A)?"digit":/\s/.test(A)?"space":"punct"}function ee(A){let e=[],n=0,B=A.length;for(;n<B;){let f=m(A[n]),r=n+1;for(;r<B&&m(A[r])===f;)r++;e.push({type:f,start:n,end:r}),n=r}return e}function Be(A,e,n){let B=new Map;for(let o=e;o<n;o++){let P=A[o];VA(L[P])&&B.set(P,(B.get(P)??0)+1)}if(B.size===0)return W;let f=-1;for(let o of B.values())o>f&&(f=o);let r=[...B.entries()].filter(([,o])=>o===f).map(([o])=>o);if(r.length===1)return r[0];let s=-1,t=1/0,g=r[0];for(let o of r){let P=0,w=0,C=1/0;for(let D=e;D<n;D++)A[D]===o?(C===1/0&&(C=D),P++,P>w&&(w=P)):P=0;(w>s||w===s&&C<t)&&(s=w,t=C,g=o)}return g}function bA(A,e,n){let B=[],f=e;for(;f<n;){let t=f+1;for(;t<n&&A[t]===A[f];)t++;B.push({start:f,end:t,cls:A[f]}),f=t}let r=Be(A,e,n),s=[];for(let t=0;t<B.length;t++){let g=B[t];if(g.end-g.start>=3){s.push([g.start,g.end,g.cls]);continue}let P=t>0?B[t-1]:null,w=t<B.length-1?B[t+1]:null,C=P!==null&&P.end-P.start>=3,D=w!==null&&w.end-w.start>=3,u;if(C&&D){let Q=P.end-P.start;u=w.end-w.start>Q?w.cls:P.cls}else C?u=P.cls:D?u=w.cls:u=r;s.push([g.start,g.end,u])}return s}function ne(A){return fA.some(e=>A.startsWith(e))||A==="DIGITS"}function lA(A,e,n,B){if(A==="digit")return"DIGITS";if(A==="letter"){let f=bA(B,e,n),r=new Map;for(let[g,o,P]of f)r.set(P,(r.get(P)??0)+(o-g));let s=-1,t=-1;for(let[g,o]of r)o>t&&(t=o,s=g);return s>=0?L[s]:null}return null}function IA(A,e,n){let B=e+n;if(B<0||B>=A.length||A[B].type==="space"&&(B+=n,B<0||B>=A.length))return null;let f=A[B];return f.type==="digit"||f.type==="letter"?f:null}function re(A,e,n){let B=IA(A,e,-1),f=IA(A,e,1);if(!B||!f)return!1;let r=lA(B.type,B.start,B.end,n),s=lA(f.type,f.start,f.end,n);return!r||!s||!ne(r)?!1:s==="DIGITS"||s.startsWith("CARD_")||s.startsWith("PFX_")}function te(A,e){let n=A.length,B=new Array(n),f=ee(A);for(let r=0;r<f.length;r++){let s=f[r],{type:t,start:g,end:o}=s;if(t==="digit"){for(let D=g;D<o;D++)B[D]=qA;continue}if(t==="space"){let D=!1;for(let Q=g;Q<o;Q++)if(e[Q]===rA){D=!0;break}let u=D?rA:_;for(let Q=g;Q<o;Q++)B[Q]=u;continue}if(t==="letter"){for(let[D,u,Q]of bA(e,g,o))for(let l=D;l<u;l++)B[l]=Q;continue}let P=r>0?f[r-1].type:null,w=r<f.length-1?f[r+1].type:null,C=_;if(o-g===1){let D=A[g];(D==="."||D===",")&&P==="digit"&&w==="digit"?C=D==="."?ZA:$A:KA.has(D)&&re(f,r,e)?C=rA:C=_}for(let D=g;D<o;D++)B[D]=C}return B}function fe(A,e){let n=Array.from({length:e},(B,f)=>A[f]);for(let B=1;B<e-1;B++)A[B]===0&&(A[B-1]===1||A[B-1]===2)&&A[B+1]===2&&(n[B]=2);return n}function HA(A){return A!==void 0&&A>="0"&&A<="9"}function se(A,e,n){if(n<=e||!HA(A[n-1]))return n;let B=n;for(;B<A.length&&HA(A[B]);)B++;return B}var ge=24;function oe(A,e,n){let B=[],f=e;for(;f<n;){let t=f+1;for(;t<n&&A[t]===A[f];)t++;B.push({start:f,end:t,cls:A[f]}),f=t}let r=[];for(let t=0;t<B.length;t++){let g=B[t];if(g.end-g.start>=3){r.push(g.cls);continue}let o=t>0?B[t-1]:null,P=t<B.length-1?B[t+1]:null,w=o!==null&&o.end-o.start>=3,C=P!==null&&P.end-P.start>=3;if(w&&C){let D=o.end-o.start,u=P.end-P.start;r.push(u>D?P.cls:o.cls)}else if(w)r.push(o.cls);else if(C)r.push(P.cls);else return null}return new Set(r).size===1?r[0]:null}function we(A,e,n){let B=A.length,f=Array.from({length:B},(r,s)=>A[s]);for(let[r,s]of n){let t=s-r;if(t===0||t>ge)continue;let g=!1,o=!0;for(let w=r;w<s;w++)A[w]===1||A[w]===2?g=!0:o=!1;if(!g||o)continue;let P=oe(e,r,s);if(!(P===null||!tA(L[P]))){for(let w=r;w<s;w++)f[w]=2;f[r]=1}}return f}function Pe(A){let e=[],n=0,B=A.length;for(;n<B;)if(m(A[n])==="letter"){let f=n+1;for(;f<B&&m(A[f])==="letter";)f++;e.push([n,f]),n=f}else n++;return e}function tA(A){return fA.some(e=>A.startsWith(e))&&A!=="DIGITS"}function Ce(A,e,n,B,f){let r=Array.from({length:B.length},(s,t)=>B[t]);for(let[s,t]of f){if(t<=e||s>=n)continue;let g=Math.max(s,e),o=Math.min(t,n),P=s>=e&&t<=n;if(P){for(let w=s;w<t;w++)if(!tA(L[r[w]])){P=!1;break}}if(P){t-s===1&&L[r[s]].startsWith("UNIT_")&&_A.has(A[s])&&t<A.length&&m(A[t])==="letter"&&(r[s]=W);continue}for(let w=g;w<o;w++)tA(L[r[w]])&&(r[w]=W)}return r}function De(A,e,n,B){let f=Array.from({length:B.length},(t,g)=>B[g]),r=A.slice(e,n);iA.lastIndex=0;let s;for(;s=iA.exec(r);)for(let t=e+s.index;t<e+s.index+s[0].length;t++)f[t]=W;return f}function hA(A,e,n,B){let f=A.length,r=Pe(A),s=fe(e,f);s=we(s,n,r);let t=[],g=null;for(let w=0;w<f;w++){let C=s[w];C===1?(g!==null&&t.push([g,w]),g=w):C===2||g!==null&&(t.push([g,w]),g=null)}g!==null&&t.push([g,f]);for(let w=0;w<t.length;w++)t[w]=[t[w][0],se(A,t[w][0],t[w][1])];let o=Array.from({length:f},(w,C)=>n[C]),P=[];for(let[w,C]of t){let D=A.slice(w,C),u=Array.from({length:C-w},(c,a)=>o[w+a]),Q=te(D,u);for(let c=w;c<C;c++)o[c]=Q[c-w];o=Ce(A,w,C,o,r),o=De(A,w,C,o);let l=w,I=[];for(let c=w+1;c<=C;c++)(c===C||o[c]!==o[l])&&(I.push([o[l],l,c]),l=c);let v=0,H=I.length;for(;v<H&&EA.has(L[I[v][0]]);)v++;for(;H>v&&EA.has(L[I[H-1][0]]);)H--;let i=I.slice(v,H);if(i.length===0)continue;let d=i[0][1],M=i[i.length-1][2];if(!i.some(([c])=>WA(L[c])))continue;let E=null;if(B){let c=[];for(let a=d;a<M;a++)c.push(Math.max(...B[a]));if(E=c.length?c.reduce((a,h)=>a+h,0)/c.length:0,E<.5)continue}P.push({start:d,end:M,text:A.slice(d,M),tokens:i.map(([c,a,h])=>[c,A.slice(a,h)]),confidence:E})}return P}function ve(A){let e=[],n="",B=!1,f=()=>{if(B){let r=n.replace(/,/g,""),s=parseFloat(r);e.push(["NUM",Number.isNaN(s)?0:s])}n="",B=!1};for(let[r,s]of A)r!=="SEP"&&(r==="DIGITS"||r==="DOT"||r==="COMMA"?(n+=s,B=!0):(f(),e.push([r,s])));return f(),e}function Qe(A,e){if(e!==null){let n=nA[e];if(n===void 0)return A!==null?A:1;if(A!==null&&n.op){if(n.op==="sub25")return A-.25;if(n.op==="add25")return A+.25;if(n.op==="add5")return A+.5}return n.standalone}return A!==null?A:1}function ue(A){let e=ve(A),n=0,B=null,f=null,r=null,s=null;function t(g){let o=Qe(r,s);if(g===null)n+=o*1;else{let P=K(g);B!==null&&P>B?n=n*P:n=n+o*P,B=P,(f===null||P>K(f))&&(f=g)}r=null,s=null}for(let[g,o]of e)if(g==="NUM")r!==null&&t(null),r=o;else if(uA(g)){r!==null&&t(null);try{r=aA(g)}catch{}}else if(QA(g))s!==null&&t(null),s=g;else if(cA(g))t(g);else continue;return(r!==null||s!==null)&&t(null),[n,f]}function y(A){let e=Math.round(A),n=Math.max(1e-6,Math.abs(A)*1e-9);return Math.abs(A-e)<n?e:Math.round(A*1e6)/1e6}function ce(A){let e=[],n=0;for(;n<A.length;){let[B,f]=A[n];if(B.startsWith("PFX_")){let r=f,s=n+1;for(;;){let t=s;if(t<A.length&&A[t][0]==="SEP"&&t++,t<A.length&&A[t][0]===B){for(let g=s;g<=t;g++)r+=A[g][1];s=t+1;continue}break}e.push([B,r]),n=s}else e.push(A[n]),n++}return e}function dA(A){try{let e=A.map(C=>C[0]),n=ce(A),B=[[]];for(let[C,D]of n){if(C==="RANGE"){B.length<2&&B.push([]);continue}B[B.length-1].push([C,D])}let f=B.filter(C=>C.length>0).map(C=>ue(C));if(f.length===0)return{value:0,range:null,unit:null,classes:e,currency:null};if(f.length===1){let[C,D]=f[0];return{value:y(C),range:null,unit:D?J[D]??null:null,classes:e,currency:null}}let[r,s]=f[0],[t,g]=f[1];if(s!==null&&g!==null&&r>t)return{value:y(r+t),range:null,unit:J[s]??null,classes:e,currency:null};let o;s===null&&g!==null?(r=r*K(g),o=g):o=s!==null?s:g;let[P,w]=r<=t?[r,t]:[t,r];return{value:y(P),range:[y(P),y(w)],unit:o?J[o]??null:null,classes:e,currency:null}}catch{return{value:0,range:null,unit:null,classes:A.map(e=>e[0]),currency:null}}}function ae(A){let e=!1;for(let[n]of A)if(n==="DIGITS")e=!0;else if(n.startsWith("UNIT_")||n.startsWith("PFX_")||n.startsWith("CARD_"))return!1;return e}function FA(A){if(!ae(A))return!1;let e=0,n=!1;for(let[B,f]of A)B==="DIGITS"?e+=f.length:B==="COMMA"&&(n=!0);return e<=4&&!n||e>=10}function LA(...A){let e=(B,f)=>f.length-B.length,n=B=>[...new Set(B.flat())].sort(e);return{currency_markers_before:n(A.map(B=>B.currency_markers_before??[])),currency_words_after:n(A.map(B=>B.currency_words_after??[]))}}function MA(A,e,n,B){let f=A.slice(Math.max(0,e-8),e),r=A.slice(n,n+8),t=f.replace(/\s+$/,"").toLowerCase(),g=[...B.currency_markers_before??[]].sort((C,D)=>D.length-C.length);for(let C of g){let D=C.replace(/\.+$/,"").toLowerCase();if(t.endsWith(C.toLowerCase())||t.endsWith(D))return"INR"}let P=r.replace(/^\s+/,"").toLowerCase(),w=[...B.currency_words_after??[]].sort((C,D)=>D.length-C.length);for(let C of w){let D=C.toLowerCase();if(P.startsWith(D))return"INR"}return null}var OA={currency_markers_before:["\u20B9","Rs","Rs.","rs","INR","Re"],currency_words_after:["rupaye","rupay","rupees","rupiya","rupya","/-"]};var UA={currency_markers_before:["\u20B9","\u0930\u0941","\u0930\u0941.","Rs","Rs.","INR"],currency_words_after:["\u0930\u0941\u092A\u092F\u0947","\u0930\u0941\u092A\u090F","\u0930\u0942\u092A\u092F\u0947","\u0930\u0941\u092A\u092F\u093E","/-"]};var Ee=`
|
|
2
2
|
struct Params { batch: u32, length: u32, embedDim: u32, vocab: u32, stride: u32 };
|
|
3
3
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
4
4
|
@group(0) @binding(1) var<storage, read> charIds: array<i32>;
|
|
@@ -17,7 +17,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
17
17
|
xOut[(b * p.embedDim + c) * p.length + t] = embed[cid * p.embedDim + c];
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
`,
|
|
20
|
+
`,ie=`
|
|
21
21
|
struct Params { batch: u32, length: u32, cIn: u32, cOut: u32, k: u32, padding: u32, dilation: u32, relu: u32, residual: u32, stride: u32 };
|
|
22
22
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
23
23
|
@group(0) @binding(1) var<storage, read> x: array<f32>; // (batch, cIn, L)
|
|
@@ -52,7 +52,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
52
52
|
}
|
|
53
53
|
out[(b * p.cOut + oc) * p.length + t] = acc;
|
|
54
54
|
}
|
|
55
|
-
`,
|
|
55
|
+
`,le=`
|
|
56
56
|
struct Params { batch: u32, length: u32, cIn: u32, nOut: u32, stride: u32 };
|
|
57
57
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
58
58
|
@group(0) @binding(1) var<storage, read> x: array<f32>; // (batch, cIn, L)
|
|
@@ -76,4 +76,4 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
76
76
|
}
|
|
77
77
|
out[(b * p.length + t) * p.nOut + o] = acc;
|
|
78
78
|
}
|
|
79
|
-
`;function nA(){return typeof navigator<"u"&&!!navigator.gpu}var K=null;function rA(){return K||(K=(async()=>{if(!nA())return!1;try{return await navigator.gpu.requestAdapter()!==null}catch{return!1}})(),K)}var _=class{weights;state=null;constructor(B){this.weights=B}async init(){if(this.state)return this.state;if(!nA())throw new Error("WebGPU is not available in this environment");let B=await navigator.gpu.requestAdapter();if(!B)throw new Error("No WebGPU adapter available");let n=await B.requestDevice(),e=(f,w)=>{let s=n.createBuffer({size:Math.max(4,f.byteLength),usage:w,mappedAtCreation:!0});return new Float32Array(s.getMappedRange()).set(f),s.unmap(),s},t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r=this.weights,g=r.conv.map(f=>({w:e(f.w.data,t),b:e(f.b,t)}));return this.state={device:n,embedModule:n.createShaderModule({code:eB}),convModule:n.createShaderModule({code:nB}),headModule:n.createShaderModule({code:rB}),embedBuf:e(r.embed.data,t),convBufs:g,bioBuf:{w:e(r.bio.w.data,t),b:e(r.bio.b,t)},clsBuf:{w:e(r.cls.w.data,t),b:e(r.cls.b,t)}},this.state}async run(B,n,e){let t=await this.init(),{device:r}=t,g=this.weights,f=g.embed.shape[1],w=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,s=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,P=r.createBuffer({size:B.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Int32Array(P.getMappedRange()).set(B),P.unmap();let u=E=>{let c=r.createBuffer({size:E.byteLength,usage:s,mappedAtCreation:!0});return new Uint32Array(c.getMappedRange()).set(E),c.unmap(),c},o=r.limits?.maxComputeWorkgroupsPerDimension??65535,C=E=>{let c=Math.max(1,Math.ceil(E/64)),a=Math.min(c,o),d=Math.ceil(c/a);return{x:a,y:d,stride:a*64}},D=(E,c,a)=>{let d=r.createBindGroup({layout:E.getBindGroupLayout(0),entries:c}),F=r.createCommandEncoder(),l=F.beginComputePass();l.setPipeline(E),l.setBindGroup(0,d),l.dispatchWorkgroups(a.x,a.y),l.end(),r.queue.submit([F.finish()])},Q=r.createBuffer({size:n*f*e*4,usage:w});{let E=C(n*e),c=u(new Uint32Array([n,e,f,g.embed.shape[0],E.stride])),a=r.createComputePipeline({layout:"auto",compute:{module:t.embedModule,entryPoint:"main"}});D(a,[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:P}},{binding:2,resource:{buffer:t.embedBuf}},{binding:3,resource:{buffer:Q}}],E)}let i=f,I=g.conv,v=r.createComputePipeline({layout:"auto",compute:{module:t.convModule,entryPoint:"main"}});for(let E=0;E<I.length;E++){let c=I[E],[a,,d]=c.w.shape,F=c.dilation,l=c.padding,z=r.createBuffer({size:n*a*e*4,usage:w}),y=C(n*a*e),hA=u(new Uint32Array([n,e,i,a,d,l,F,1,c.residual?1:0,y.stride]));D(v,[{binding:0,resource:{buffer:hA}},{binding:1,resource:{buffer:Q}},{binding:2,resource:{buffer:t.convBufs[E].w}},{binding:3,resource:{buffer:t.convBufs[E].b}},{binding:4,resource:{buffer:z}}],y),Q=z,i=a}let h=r.createComputePipeline({layout:"auto",compute:{module:t.headModule,entryPoint:"main"}}),b=async(E,c)=>{let a=r.createBuffer({size:n*e*c*4,usage:w}),d=C(n*e*c),F=u(new Uint32Array([n,e,i,c,d.stride]));D(h,[{binding:0,resource:{buffer:F}},{binding:1,resource:{buffer:Q}},{binding:2,resource:{buffer:E.w}},{binding:3,resource:{buffer:E.b}},{binding:4,resource:{buffer:a}}],d);let l=r.createBuffer({size:n*e*c*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),z=r.createCommandEncoder();z.copyBufferToBuffer(a,0,l,0,n*e*c*4),r.queue.submit([z.finish()]),await l.mapAsync(GPUMapMode.READ);let y=new Float32Array(l.getMappedRange().slice(0));return l.unmap(),y},L=await b(t.bioBuf,g.bio.w.shape[0]),H=await b(t.clsBuf,g.cls.w.shape[0]);return{bio:L,cls:H}}};var lA={version:2,quantized:"int8_symmetric_per_tensor",charset:["<pad>","<unk>"," ","!",'"',"#","%","'","(",")","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":","=","?","@","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","}","~","\u0901","\u0902","\u0903","\u0905","\u0906","\u0907","\u0908","\u0909","\u090A","\u090F","\u0911","\u0913","\u0915","\u0916","\u0917","\u0918","\u091A","\u091B","\u091C","\u091D","\u091F","\u0920","\u0921","\u0922","\u0923","\u0924","\u0925","\u0926","\u0927","\u0928","\u092A","\u092B","\u092C","\u092D","\u092E","\u092F","\u0930","\u0932","\u0935","\u0936","\u0937","\u0938","\u0939","\u093C","\u093E","\u093F","\u0940","\u0941","\u0942","\u0947","\u0948","\u0949","\u094B","\u094C","\u094D","\u20B9"],classes:["O","SEP","RANGE","DIGITS","DOT","COMMA","PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5","CARD_6","CARD_7","CARD_8","CARD_9","CARD_10","CARD_11","CARD_12","CARD_13","CARD_14","CARD_15","CARD_16","CARD_17","CARD_18","CARD_19","CARD_20","CARD_21","CARD_22","CARD_23","CARD_24","CARD_25","CARD_26","CARD_27","CARD_28","CARD_29","CARD_30","CARD_31","CARD_32","CARD_33","CARD_34","CARD_35","CARD_36","CARD_37","CARD_38","CARD_39","CARD_40","CARD_41","CARD_42","CARD_43","CARD_44","CARD_45","CARD_46","CARD_47","CARD_48","CARD_49","CARD_50","CARD_51","CARD_52","CARD_53","CARD_54","CARD_55","CARD_56","CARD_57","CARD_58","CARD_59","CARD_60","CARD_61","CARD_62","CARD_63","CARD_64","CARD_65","CARD_66","CARD_67","CARD_68","CARD_69","CARD_70","CARD_71","CARD_72","CARD_73","CARD_74","CARD_75","CARD_76","CARD_77","CARD_78","CARD_79","CARD_80","CARD_81","CARD_82","CARD_83","CARD_84","CARD_85","CARD_86","CARD_87","CARD_88","CARD_89","CARD_90","CARD_91","CARD_92","CARD_93","CARD_94","CARD_95","CARD_96","CARD_97","CARD_98","CARD_99","UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],embed_dim:16,channels:48,embed:{shape:[114,16],scale:.026793908327817917,data_b64:"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"},conv:[{k:5,dilation:1,residual:!1,w:{shape:[48,16,5],scale:.006297729909420013,data_b64:"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"},b:[-.41403,-.37083,-.17471,-.10723,-.217,-.12782,-.13307,-.17872,.14632,.22011,-.51505,-.49735,-.37585,-.09941,-.28281,-.019124,-.42833,.035917,-.10015,-.15915,-.25731,-.26232,-.0039441,-.27283,-.15598,-.25122,-.0023473,-.22346,-.29785,-.20515,-.19531,-.4258,-.18466,-.01237,.29463,-.2259,-.34927,.099886,-.44475,.075165,-.23074,-.3804,-.36044,-.20509,-.13041,-.65456,-.15375,-.27194]},{k:3,dilation:1,residual:!0,w:{shape:[48,48,3],scale:.011268280446529388,data_b64:"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"},b:[-.11524,-.18613,.1175,-.24892,.044796,.036463,.162,.1028,.29527,.66518,.22132,.018315,.021825,-.035526,-.079711,.003407,.027631,.018111,.091177,.19069,-.014315,.14228,.56057,.094511,-.2393,.14826,.15474,.080275,.10113,-.0066077,.18899,.37924,.22151,.15665,.025146,.12335,.039528,.020341,.17161,.30304,.089673,.7569,-.26167,-.43312,-.10887,-.15408,.089991,.14783]},{k:3,dilation:2,residual:!0,w:{shape:[48,48,3],scale:.01531923096626997,data_b64:"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"},b:[.32767,.15526,.082936,-.049189,-.054941,-.15,.26939,.011199,82305e-8,1.0392,.2586,-.35586,.59987,.199,.1843,.024139,-.021032,.021746,.068581,.1081,-.066881,.28893,.89474,.89374,.0083983,.010518,.63441,.033195,.63983,.12939,.35362,.14388,1.1091,.2411,-.18525,.38478,-.054586,.68936,-.039841,.35021,.042444,1.2556,-.077732,-.63378,-.12078,.63872,-.024576,.76438]},{k:3,dilation:4,residual:!0,w:{shape:[48,48,3],scale:.017100131139159203,data_b64:"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"},b:[1.3777,.085752,.28277,-.0026793,-.36331,.26844,.23482,.45244,-1.3456,.32375,.62031,-.2426,.0069488,.28055,1.2795,.49334,.092458,.021483,.35107,.12564,.094297,.33727,1.1613,.91248,.33595,-.31547,1.0323,.48746,-.51575,.62476,.13256,.57825,1.5317,.17567,.028722,.71635,-.029699,-.071299,.67362,.67226,.57821,1.9162,.22972,-.058133,-.21721,1.7296,-.063783,1.2866]},{k:3,dilation:8,residual:!0,w:{shape:[48,48,3],scale:.01713515631854534,data_b64:"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"},b:[.17334,.95171,.39722,.81052,.1426,.24649,.26206,-1.6457,.60351,.68078,.32679,-.072643,-1.4102,-.10251,-.77406,.49564,-.033894,.076563,.036676,-.66481,-.080242,.22412,.46619,1.2746,.53776,.49293,.26188,.56415,-.41336,-.037646,.33929,.76413,.56441,.18243,.5228,-95438e-10,-.11429,.43393,.4121,-.025991,.0081522,1.6035,.041022,.06896,.15759,1.8212,-.1321,.81853]}],bio:{w:{shape:[3,48],scale:.004121375735849142,data_b64:"KP707AkH9PmB9RL0dgJFDxD4ASj2ADr27AgHFQIH9PgXzeMA/QHvLQ4FAP76/wb52gD+7gwJ9/IM9xDu9wT4ERP3/FX7/yD67Q0FEwT09fYMFtL68wTsVgAB/gIGuAb62gH67AoK+vA/9hEAiwTwEBr48+X7Adbt7BEFEgL29fcLFkQIBwXuwCH//gIE9Qb7"},b:[.33826,-.72342,.082475]},cls:{w:{shape:[120,48],scale:.006543000228703022,data_b64:"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"},b:[2.1537,.47451,.029461,.89724,-.12645,-1.3064,-.42351,-.070797,.34355,.20397,-.43014,-.063977,-.11719,-.34141,-.37835,-.64427,-.53819,-.47944,-.56216,-.12763,-.48014,-.56977,.050473,-.33839,-.65921,-.31452,-.33799,.10971,.078488,-.45741,-.15056,-.018883,-.27828,-.17847,-.81039,-.28268,-.14222,-.29722,-.77616,-.47762,-.3697,-.46026,-.13087,-.49869,-.28312,-.69974,-.41188,-.92325,-.58822,-.39002,-.77904,-.36065,-.11276,-.51998,-.6679,-.38287,-.65133,-.40006,-.26539,-.30836,-.44642,-.63607,-.34191,-.47544,-.56102,-.12988,-.55126,-.47222,-.1993,-.83675,-.95856,-.1607,-.10582,-.52014,-.43954,-.43493,-.62038,-.5219,-.36894,-.45107,-.21352,-.24609,-.35412,-.22215,-.3239,.0019337,-.40894,-.61599,-.35282,-.37185,-.41393,-.5583,-.21046,-.82141,-.49686,-.81666,-.62528,-.17747,-.33321,-.42288,-.37428,-.17428,-1.1207,-.22147,-.65601,-.58428,-.5439,-.10838,-.0096173,-.40622,-.38756,-1.0267,.49986,.42088,.80243,-.025016,.4964,-.71379,.045631,-.52001]}};var V=class{weights;charToId;gpu=null;defaultBackend;scratch;idsScratch=new Int32Array(R);bioIdsScratch=new Int32Array(128);clsIdsScratch=new Int32Array(128);bioProbsScratch=Array.from({length:128},()=>new Float32Array(3));constructor(B={}){this.weights=gA(B.weights??lA),this.charToId=sA(this.weights.charset),this.defaultBackend=B.backend??"cpu",this.scratch=new X(this.weights)}parse(B,n={}){let e=B;B=k(B);let t=e.length===B.length,r,g=Z(B.length);if(g.length===1&&g[0].length===B.length){let f=x(B.length),w=p(B,this.charToId,this.idsScratch,f),s=j(this.weights,w,this.scratch);r=this.decodeForward(B,s,0,B.length)}else{let f=[],w=new Set;for(let s of g){let P=B.slice(s.offset,s.offset+s.length),u=x(P.length),o=p(P,this.charToId,this.idsScratch,u),C=j(this.weights,o,this.scratch),D=this.decodeForward(P,C,s.offset,P.length);for(let Q of D){let i=`${Q.start}:${Q.end}`;w.has(i)||(w.add(i),f.push(Q))}}f.sort((s,P)=>s.start-P.start),r=f}if(t)for(let f of r)f.span=e.slice(f.start,f.end);return r}decodeForward(B,n,e,t=n.length){let r=t,g=r<=128,f=g?this.bioIdsScratch:new Int32Array(r),w=g?this.clsIdsScratch:new Int32Array(r),s=g?this.bioProbsScratch:Array.from({length:r},()=>new Float32Array(3));for(let o=0;o<r;o++)f[o]=G(n.bioLogits,o*3,3),w[o]=G(n.clsLogits,o*n.nCls,n.nCls),$(n.bioLogits,o*3,3,s[o]);let P=cA(B,f.subarray(0,r),w.subarray(0,r),s),u=[];for(let o of P){let C=o.tokens.map(([i,I])=>[M[i],I]),D=aA(C),Q=IA(B,o.start,o.end,tB);u.push({span:o.text,start:o.start+e,end:o.end+e,value:D.value,...D.range?{range:D.range}:{},unit:D.unit??null,currency:Q,confidence:o.confidence??0,classes:D.classes})}return u}inspect(B){let n=performance.now(),e=k(B),t=Z(e.length),r=new Array(e.length),g=new Array(e.length).fill(!1);for(let s of t){let P=e.slice(s.offset,s.offset+s.length),u=x(P.length),o=p(P,this.charToId,this.idsScratch,u),C=j(this.weights,o,this.scratch);for(let D=0;D<P.length;D++){let Q=s.offset+D;if(g[Q])continue;g[Q]=!0;let i=G(C.bioLogits,D*3,3),I=new Float32Array(3);$(C.bioLogits,D*3,3,I);let v=G(C.clsLogits,D*C.nCls,C.nCls);r[Q]={ch:P[D],bio:i,bioProb:[I[0],I[1],I[2]],cls:M[v],clsId:v}}}let f=this.parse(B),w=performance.now()-n;return{text:e,chars:r,spans:f,ms:w}}modelInfo(){let B=this.weights,n=B.embed.data.length;for(let t of B.conv)n+=t.w.data.length+t.b.length;n+=B.bio.w.data.length+B.bio.b.length,n+=B.cls.w.data.length+B.cls.b.length;let e=B.conv.length?Math.max(...B.conv.map(t=>t.w.shape[0])):B.embed.shape[1];return{version:B.version,params:n,channels:e,embedDim:B.embed.shape[1],vocab:B.embed.shape[0],classes:B.classes.length,layers:B.conv.map(t=>({k:t.k,dilation:t.dilation,residual:t.residual}))}}async parseBatch(B,n={}){let e=n.backend??this.defaultBackend;if(!(e==="webgpu"||e==="auto"&&B.length>=32&&await rA()))return B.map(P=>this.parse(P,{backend:"cpu"}));let r=B,g=B.map(k),f=new Array(B.length),w=[],s=[];for(let P=0;P<g.length;P++)g[P].length<=128?w.push(P):s.push(P);for(let P of s)f[P]=this.parse(r[P],{backend:"cpu"});if(w.length>0){this.gpu||(this.gpu=new _(this.weights));let P=Math.max(...w.map(v=>g[v].length),1),u=x(P),o=w.length,C=new Int32Array(o*u),D=this.charToId.get("<pad>")??0;C.fill(D);for(let v=0;v<o;v++){let h=g[w[v]],b=p(h,this.charToId);C.set(b,v*u)}let{bio:Q,cls:i}=await this.gpu.run(C,o,u),I=this.weights.cls.w.shape[0];for(let v=0;v<o;v++){let h=w[v],b=g[h],L=r[h],H=L.length===b.length,E=b.length,c=new Float32Array(E*3),a=new Float32Array(E*I);for(let l=0;l<E;l++)c.set(Q.subarray((v*u+l)*3,(v*u+l)*3+3),l*3),a.set(i.subarray((v*u+l)*I,(v*u+l)*I+I),l*I);let d={bioLogits:c,clsLogits:a,length:E,nCls:I},F=this.decodeForward(b,d,0,E);if(H)for(let l of F)l.span=L.slice(l.start,l.end);f[h]=F}}return f}},fA=null;function q(){return fA||(fA=new V),fA}function FB(A,B={}){return q().parse(A,B)}function MB(A,B={}){return q().parseBatch(A,B)}function RB(A){return q().inspect(A)}function OB(){return q().modelInfo()}function xB(A={}){return new V(A)}var tB=iA(HA,bA);export{M as CLASSES,V as Parser,xB as createParser,RB as inspect,nA as isWebGPUAvailable,OB as modelInfo,k as normalizeText,FB as parse,MB as parseBatch,rA as probeWebGPU};
|
|
79
|
+
`;function sA(){return typeof navigator<"u"&&!!navigator.gpu}var V=null;function gA(){return V||(V=(async()=>{if(!sA())return!1;try{return await navigator.gpu.requestAdapter()!==null}catch{return!1}})(),V)}var q=class{weights;state=null;constructor(e){this.weights=e}async init(){if(this.state)return this.state;if(!sA())throw new Error("WebGPU is not available in this environment");let e=await navigator.gpu.requestAdapter();if(!e)throw new Error("No WebGPU adapter available");let n=await e.requestDevice(),B=(t,g)=>{let o=n.createBuffer({size:Math.max(4,t.byteLength),usage:g,mappedAtCreation:!0});return new Float32Array(o.getMappedRange()).set(t),o.unmap(),o},f=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r=this.weights,s=r.conv.map(t=>({w:B(t.w.data,f),b:B(t.b,f)}));return this.state={device:n,embedModule:n.createShaderModule({code:Ee}),convModule:n.createShaderModule({code:ie}),headModule:n.createShaderModule({code:le}),embedBuf:B(r.embed.data,f),convBufs:s,bioBuf:{w:B(r.bio.w.data,f),b:B(r.bio.b,f)},clsBuf:{w:B(r.cls.w.data,f),b:B(r.cls.b,f)}},this.state}async run(e,n,B){let f=await this.init(),{device:r}=f,s=this.weights,t=s.embed.shape[1],g=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,o=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,P=r.createBuffer({size:e.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Int32Array(P.getMappedRange()).set(e),P.unmap();let w=E=>{let c=r.createBuffer({size:E.byteLength,usage:o,mappedAtCreation:!0});return new Uint32Array(c.getMappedRange()).set(E),c.unmap(),c},C=r.limits?.maxComputeWorkgroupsPerDimension??65535,D=E=>{let c=Math.max(1,Math.ceil(E/64)),a=Math.min(c,C),h=Math.ceil(c/a);return{x:a,y:h,stride:a*64}},u=(E,c,a)=>{let h=r.createBindGroup({layout:E.getBindGroupLayout(0),entries:c}),F=r.createCommandEncoder(),b=F.beginComputePass();b.setPipeline(E),b.setBindGroup(0,h),b.dispatchWorkgroups(a.x,a.y),b.end(),r.queue.submit([F.finish()])},Q=r.createBuffer({size:n*t*B*4,usage:g});{let E=D(n*B),c=w(new Uint32Array([n,B,t,s.embed.shape[0],E.stride])),a=r.createComputePipeline({layout:"auto",compute:{module:f.embedModule,entryPoint:"main"}});u(a,[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:P}},{binding:2,resource:{buffer:f.embedBuf}},{binding:3,resource:{buffer:Q}}],E)}let l=t,I=s.conv,v=r.createComputePipeline({layout:"auto",compute:{module:f.convModule,entryPoint:"main"}});for(let E=0;E<I.length;E++){let c=I[E],[a,,h]=c.w.shape,F=c.dilation,b=c.padding,G=r.createBuffer({size:n*a*B*4,usage:g}),Y=D(n*a*B),GA=w(new Uint32Array([n,B,l,a,h,b,F,1,c.residual?1:0,Y.stride]));u(v,[{binding:0,resource:{buffer:GA}},{binding:1,resource:{buffer:Q}},{binding:2,resource:{buffer:f.convBufs[E].w}},{binding:3,resource:{buffer:f.convBufs[E].b}},{binding:4,resource:{buffer:G}}],Y),Q=G,l=a}let H=r.createComputePipeline({layout:"auto",compute:{module:f.headModule,entryPoint:"main"}}),i=async(E,c)=>{let a=r.createBuffer({size:n*B*c*4,usage:g}),h=D(n*B*c),F=w(new Uint32Array([n,B,l,c,h.stride]));u(H,[{binding:0,resource:{buffer:F}},{binding:1,resource:{buffer:Q}},{binding:2,resource:{buffer:E.w}},{binding:3,resource:{buffer:E.b}},{binding:4,resource:{buffer:a}}],h);let b=r.createBuffer({size:n*B*c*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),G=r.createCommandEncoder();G.copyBufferToBuffer(a,0,b,0,n*B*c*4),r.queue.submit([G.finish()]),await b.mapAsync(GPUMapMode.READ);let Y=new Float32Array(b.getMappedRange().slice(0));return b.unmap(),Y},d=await i(f.bioBuf,s.bio.w.shape[0]),M=await i(f.clsBuf,s.cls.w.shape[0]);return{bio:d,cls:M}}};var RA={version:2,quantized:"int8_symmetric_per_tensor",charset:["<pad>","<unk>"," ","!",'"',"#","%","'","(",")","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":","=","?","@","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","}","~","\u0901","\u0902","\u0903","\u0905","\u0906","\u0907","\u0908","\u0909","\u090A","\u090F","\u0911","\u0913","\u0914","\u0915","\u0916","\u0917","\u0918","\u091A","\u091B","\u091C","\u091D","\u091F","\u0920","\u0921","\u0922","\u0923","\u0924","\u0925","\u0926","\u0927","\u0928","\u092A","\u092B","\u092C","\u092D","\u092E","\u092F","\u0930","\u0932","\u0935","\u0936","\u0937","\u0938","\u0939","\u093C","\u093E","\u093F","\u0940","\u0941","\u0942","\u0947","\u0948","\u0949","\u094B","\u094C","\u094D","\u20B9"],classes:["O","SEP","RANGE","DIGITS","DOT","COMMA","PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE","CARD_1","CARD_2","CARD_3","CARD_4","CARD_5","CARD_6","CARD_7","CARD_8","CARD_9","CARD_10","CARD_11","CARD_12","CARD_13","CARD_14","CARD_15","CARD_16","CARD_17","CARD_18","CARD_19","CARD_20","CARD_21","CARD_22","CARD_23","CARD_24","CARD_25","CARD_26","CARD_27","CARD_28","CARD_29","CARD_30","CARD_31","CARD_32","CARD_33","CARD_34","CARD_35","CARD_36","CARD_37","CARD_38","CARD_39","CARD_40","CARD_41","CARD_42","CARD_43","CARD_44","CARD_45","CARD_46","CARD_47","CARD_48","CARD_49","CARD_50","CARD_51","CARD_52","CARD_53","CARD_54","CARD_55","CARD_56","CARD_57","CARD_58","CARD_59","CARD_60","CARD_61","CARD_62","CARD_63","CARD_64","CARD_65","CARD_66","CARD_67","CARD_68","CARD_69","CARD_70","CARD_71","CARD_72","CARD_73","CARD_74","CARD_75","CARD_76","CARD_77","CARD_78","CARD_79","CARD_80","CARD_81","CARD_82","CARD_83","CARD_84","CARD_85","CARD_86","CARD_87","CARD_88","CARD_89","CARD_90","CARD_91","CARD_92","CARD_93","CARD_94","CARD_95","CARD_96","CARD_97","CARD_98","CARD_99","UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],embed_dim:16,channels:48,embed:{shape:[115,16],scale:.029206380248069763,data_b64:"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"},conv:[{k:5,dilation:1,residual:!1,w:{shape:[48,16,5],scale:.005528415087610483,data_b64:"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"},b:[-.42246,-.0030015,-.39637,-.5094,-.31567,-.0066605,-.2116,-.14381,-.45926,.032123,.1051,-.068757,-.176,-.24408,-.22495,.14888,-.34372,-.015254,-.075969,-.38499,-.55512,-.42426,-.53993,.33177,-.20909,-.010612,-.25817,-.36655,-.6817,-.27189,-.46838,-.20614,.24502,.23912,-.50761,-.14509,-.035654,-.67123,-.2002,-.26759,-.13114,-.07664,-.34302,-.3735,-.44522,-.18075,-.079652,-.066312]},{k:3,dilation:1,residual:!0,w:{shape:[48,48,3],scale:.02171662636101246,data_b64:"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"},b:[.10809,.26585,.094204,.14064,-.0069209,.14709,.023642,.17102,.12289,-.1588,.0013055,.11863,.42029,.21744,.085736,-.042563,.014954,-.16326,-.1126,-.0021493,-.1829,.13248,.12985,.64143,.41735,.43393,-.014888,-.21078,-.12343,.10631,.17523,-.34975,.20128,.043467,.29196,-.066172,.40999,.11899,.089091,-.099698,.46059,-.13938,.18717,.065401,.11365,.23228,.71649,1.0244]},{k:3,dilation:2,residual:!0,w:{shape:[48,48,3],scale:.011372479610145092,data_b64:"HOwE4wvy8x8FEOX21QQUEw8HD/YK6vYCAgMK+fj+Fuv3+QIL5PD9GP/r5fcJEQ/z6fTm5Ab0Hdz37wP2A+zWFvsAIxgH9BELFvMHBQr3+Qvx//TzDAnnCvbuLQjiEuPr/vrtwM0cDg0NHOvuBuv+OOvU+gAFJ/T9CuUDBgAOwf8YEO/v/CT67+PyD+QK/bsg4vcHOv4o/9r79uf7BPHjAvgKBBgK89/vFA8N/SEN/8a5/Ov28fUO++/u8N3RDv79CwYTBQjz7SIcDxUUEQjs1eoB+eP+BejPBw4c9er9CvveBRUlAOYD2uwHEh0JDBsZ+Q0DARMbEAf9x+4E9v4NCxgSDh8Y8hQfDhACAw/+5dG6Cf757/QL+vIE/QkG7Bj5G/Tk9fcM+tAXBP/v7g0G6wEd8dwdEhogERD3Dx/0/vUE8PETBAwA9ysA1PQHAQYG+fYHCNsC7vsCFq7/+PjgDfzz7//u7Pn78hEOAAYL+dQTGevuAO0V++j9F/vm+Qz1CgwDCiHx+sUPFxHx//4GDZ0dCxTnBcUI3P0GDwjm49kc9vAm9N74EPEE6v4JAxny/SoZ9AIW/eXXOwMz9Ojp5fwg+/znAvoU7NUECPnb+uDo+AMJDBYKDRYS/PnUBwYL++32A+72AiMhDBEL/wP8CQ8HCgMCCg/3AwD+AxMAAu3sICAy/L4N/uvoABH7/+vy6/AABPq+BgX3Aw3/+/X39AYQEQ7sAhcO/gAAAPby9tLKB+79/hr/A/8G/g3ZBxbPByUI0PLz6NHi8Pf3BdwSBPbxCOb76u78CvL3BxUJCPbr++kE/B3lEAUVAPb49RAZ4/j8GSQl6er9AwAUBP3/JSwMGwsd5+wUAgP45uz5DgQJAvPt9O79CyH0/Pb2Dvz97/oKCiH+GigY+wQB9+X17tzoKCQR/yMI3+T9Fx8Q/uwF6O0PAPz9BQT0ARP//gQD+AP83PL8HRYWAPX/9vb0ItYK3PH+7O39//cG8AsPBAkECOTv8PoL/u/pERoB/yj4+fgFDQH3EQX/EQwLIiEOLSYOIgQA/fnr8eIB6/ru8Af49AgREwntBwsJ6PcMAfoC1t31+PMN8P7qGSH7Agf/+/kDFRIJ6gcH+/v++/X16+jxCAQHBRYSA/cB8e0A9+7+5fDw3vMUAgzs/eDe6MvR7envNg5IBAoF7t/tAwoD/e/R+/P7/vUJFf7wGBPi5cfRFiApDAwA8/sP9v0GAwX+AfL6BQUA6+DYBPsM/evcAOjlHC0d+/3/ChwU9/r7BgEB3c3f/OsDCBL7EA0DCyMUAfwV/xAb8Bkl2uAD+gP/99bM+CAs9hMY9/kEEhwICyQFAf0ECP3/Cgn8HAX9C/4M+gTu/w8AFtoM/vb65+UC/g4KDQQHCOsCAQEHFAMP+wUAE/376wkL9vT1AAz/BPzy8wj9Hw8GCxAU/uz5Ev0LFQ8Q4+TkDQIG8esS8A31/uj06t79+vH9FAr7tOL+CgwS/tza8PMO//b7/gML7PkH+P8a//ID+QUD7ej1/PsG8+UDAgH87vf18/7z99UD+/fvAAD8Ag31BAD6MOAJ+wcF+/8J++378PH/CAYL9fEA180ACAQGFAEHEhP6Agj3/wrjAwELCAsE5fgI2ukG+fEL+QEE+/z8/w4U3vL+FREaFwwGEgj6+PQC7wn7Av4B9A4B7u3xFBT3/AH3EP8DEwkD6vUJ+Pz1/PoCBxQH7QQEAg4BKDMk7uwJ6NfuGBz16e789AMFCOkI5u0G8PD0FeQS9+fn5u78/RgYBgwA5vP8Bvvx1uP2BfD5Gh4dD/sF88rpFyL7/wYH9Pv4Dw/7Ew/62d7xEO3yAP8NFwkHGhD3+fT6Mff/EfgD/fgDIBcCGQz1HCz/DBMAEh0UC/z2IAANyNf26/n2EQwDDP8D8/kODOby7eTq6uP1/+Py5tgE2M3V79vUDxAV9wUHMCEADyccCNUc7ezs9+DwABAQJSsJ4u0NDyD8+fny5+75+wsUDSUu9+Pq8d/u9gcU2sT19ez1/M3cHioY+vz5AiUNCDMiNzMdDAzrAPnyB/HlBRIOBdrl8gMTDhAG/ism5N0BEyQC8pm5DvoK+hIaDx8L/gD6Bw8L++z4+xX8A/oCBOIKAREFCgcC7gkJDRgR//7+EPjt/Pn0COMUFfsCCRcGEgH6GQMMAxUO4gr4BAT47/sI9gP8CgD+//369Pj9Ghf2/wQA/Qr38e/0EwbwBejf+dL+AfXt2t8ODf3y/Afx9eb5DxIB2soN+PDtDfD8CxcD/urz8AAFChX28PkEAAMLDAcS9QcADxIF8v387QMK/QX75OjdCQkl9uH3/eoBCxwDFPfZCN/kBPgHEv0cCggS7djjAwjj+uj1B/L7FQgP//7+697fEysCBfwB9QDy/AoRC/kA+uTkAAkN9PT2+g3zE/zpA+/OBQD8BiT689fnAwL7A+n0/xoWFhQIFRsVGiMR+9zq5r7YBPL4Dgjx/gP/8/gJBwgICQX7DfUBCOr69/QM/fPy/OvuBwH3BxYDAfAF+fL++hkNARL0+NwDFf44AwXy/fLq+/UGDA0K9wYCBOj2CSgY/QQFAA7+BR4C+PgB/voDARnvAwAM6tv2BfYECfMKCQQSBBAE9gHK/wQTEB38DBEF6t8BBhEL+ez5+AAACgUL+frt+AP+9vsIAAQEBvL8BfX+5ePSBAL5D/4N1+H/GyMcBvkC7gMPBRYW+fv29dsB9uwQEBcKG/vZGRkPHeMO8vwLEBgLDAwU+c7r6QMB/AIk7t7Y/vwC+CURBQf/AQYBDhQL2cXnAvYD9/Pz5eEL9eMM+P8Q/uPx6PcG0Mf0DPcKw/X22ef3BBD9GxwL+PYE9/gCFBQJABUE8fn5BBYHCCX97Pv8FRQNDhUF6Nr89PX39AUB8QIQBPUAr5f6AhQNCgUH/f/0BPD0AggPEwIHEf8c3+r6APTtAdQCAPX67PckCxP47dj6Bg3/Ex0V9/3xBAX/7QAEBgsDCCohFDEO7eTyFRn9C8wA+yQsC/0D++0BHCcU8fYAAw0GFxP/9Qf8A+jo7wAQ/AHv5Mf7B/YZBBfx7vIBCvcAEPgI6AoBISEFDAj++QIRBw0RBg35+PHwAQX+DBESDwz8AAQGFhf0/wXvG+EIB/4L9fUV9fAF+wj7CQEFCgQK/Rj7BBIGBAD/FxH/+t/qAQkR9wju6fTz8Pzr6u7yAg7k5RUI7ersAQb27+0N5u/89f8AEwoI8v3xA+XvFxf59fgG+RASAQ4Q7eT4+wD1BQgH/AnzCPL69+H7BPUGAQABBOnuAAX2+hUZAgn+//TfAt8H9vn78Qj9AujG/QkV89coBSEA8hIA3xMD9N8t+fD2BxHy//sG+fgECgfr8Arx9u/27QwFEQoL+AMSEQ7wDK4o9BgCAwIFB/bm7P36BA8WAgoU/wkaBQ8F/drO8vIF7f4FBQ0XACHdBh/YHgUO6en++wD2Eg8H+vf5BAkB4NP99P76BwgA+wsKCfPq9/v79+b99woC8f368/UF9N35BBUAHvkNCRcN8uH28e0HKScCA//q+eEM4QIL1+EB+/Tx9eYE5PkDFggBDhAIHwUJ/w8HDRUgGhQLEAcC6NsGIQ8N9AoO/fUEDRYT49nk/w329/0FEgIC5N3/DOTv8dbJGQL9DPfzEAwV6d3i2/L4AP34BCYfBOXuBwUaBxER9O7y+MviBN3p9v3x0gYP+/XlBO/V5OoXSTRp/PPmGA0H6e/sAAgTEw4IAfDe+ujSBRwb3PYA0PLvMVwmHAwS+ADpAs/1EBP1BSQF/dO+yNf4GyAO+er97fUB9f7x4sPU+e/6AhoWAP36BxkWFSIh9eX68e0L+AP++wIP787F/O0A+QgE/hQf5+LtDBQSNC4LBNT66/YE+QsILR3YK/QJJi0JHhcR5t8UBhgaRAtL/xcPEu0A+NLp0NwB8NTYHB0HBwYK+xT/JADn5N/tA//5/9bm+PjwEgf55Pjx5NbjLC8QCwgIHjo55eQAAAQQ+cSUDRwK8PQC9PT+0NH82s0CCwLiAwACAN/t1czz3Nfd68nuBgLmCQT2/NkFEBgVDwXk7N/5Bx4YFBkfCf/+8O33/wr/FiYr7s0CBAcP+e3vWyQa4sTv6vEB9wv/CgPk8vLb+vr39w/0/v75Ayso9PcF+wj+CN7/BA0SBgzz8r73GCf5CwUA/v3/DA36+/j1/OrbIQ/7BRgH+/8K/QAUAhsLDwAG//f+/PTdEP4O6dzw9/8Q9wEE/PD/C/j+A/r9BA/v+e7wFPv6/u/2Ahn4/O7/Cwn/+BQLE/wEBA4B4u8H1+X2HOUlAfnu594A/+b4/f/mARISAQMZBx0QDgPz9vf/BP/0DfQWGB4VCAEG/e7s6vn7AQ8N/yAr6wAGCAYE+v7e6vbwAQsGAAb5COUADw/26wfzE/v6AgHr7e4E8vIS9enM+gQU+vz4DhD6BRkQCBoB9uvw9OD2/Aj4+ur38wL0/AsEEgf+FBUBEAMK5gD66Oz7CP8GCNYd9Onr8uX1Aer0/hIW+Q/lHQsGHBkH9vfyFQv7BB4MDA8aBCYGDwn1zrXaIzUd8vMFBxIBBgUC6eDwAOkQ7gEB8vz279gODBQFDiITAwr18uz0Chb++u72EOUBEuzt/wL46QoEBgDpBxz99/n1+hcF9wf27N8FDA73+e709LT3CxQZDO77Aevw9Pgc/wMUARgGHdURBBMH8fvyBgsT/gYMEvoJFfgO/PzlDv36AR8AAPYE+PkXAu0FHjQU+wEFCxAOA/IEAdUC8P3m8QL7BPgB9voQ8x4HANruCAIK/AkL/wMGBAL//Aj/Afj2CAIBAgD37/EGBgj9BiIO/f76AwoG/wcA/wQDDRUM+wgH/gIF/gX7APT6ChoL+/MB+e78APj4CxQFANsS/QgN+/n8/Q8I/wb2BgkGBRQQAgD/AA79DgwIA/oB8O4GHwwC7O33/Pf1+/L//gT/APoB7uz8++/6A/YIAgX2A/f66N3tEwYHCxUS4/bsJDQxAAYG9vwE7wsQ/woA7uPeCRohFScgAPP1ByYWGhLvAwL3ITkcA/wA8+vwCOfjAwXuBxYLEBYBBfII/gUHCBoTEAlD6rvBAxTu7vHQ5fT86NjO59vSCfDs8uHg09LFCBgO1bzd8djY/en6Gige8srcEREnFCUhAxEB/AYBBfL08PkX5drz6vIE/+3wEPD/9QXdHhbuFv8J3cjPDxsMGhkODO3TDOzz2PcTIxoJEPja5fgQDhUNB/nx5fYj/gEBCQHM7+IACAoJ2azK6g4Q8Ar3/g0FQv8aLyzkCfX04u8PEA8X+9/u+QENCxMf3vr+9erz/u7mIDMfBufe/w/7ABId6cjO/BX5DxL/9wINAgEc7sYM+RANDhshDREDq7js4d/k9wQB8QX99dXq/hj4ESEWEPn0AugF+u3+EQcI+OD24Ozy8OP9AAb6Gx3+Euj75f0ADg4I+wQF3eTm5OEW9c/w8szZEgoAHzEV4QQNAxkWCRMjSz8MCbsH+Qv6DP73BhQPCAf98P0HASYbHQkDEvP325q1BPsQ6QH9Av4BChIKDwsA5OL0EAsHIBEPGwwFBwHsBPoW+PMj+uv+wtIGHB4LHwbg9Ozz5PwC6NDlFR7q+urx6QUf8/n71vkVAggPKRX9EQ0S1OX5/ufPKg8U9+DeFRfx9gsG+ebvY/8VEff9/v75IBH5FxQE9QP56OXY9QIOCA0XFxMDyAcEAgoK+vkHAOnW/yEnBPsWxvkW4+n596bx9f/qDw/2+Prk9fr6+tv48fvq+DYgA/TzCP/3BQEJ6cje9PEC//Pt+AYOBff68grs+woBFO3ZDSgQDQj4HRgRzM7z5OTaDAgJ8v0FCv/zA/vvABUP4PHpEyD4Pi9G/v0QA/v7E8X3HDEq//7p+P8D6/ILJiwZ9tnX+BL//QUO8cDLAeng8Q/8AP8A8doUDikY9hkDDQkPD/z7+v74DwgL/hkOAisc6eHf+P36Bw0MC//u7u0C3rnx/gIKHRTrAw8d3er8+wP29gkV9Q8GEx38Agf7CQgB6Nfd/gMU7OYADREN7/UCDgAU8APwAgv3QBFUA/Td+e3x+wHxDBL8Dw78/AII5foL/f4K1vAOCvj+9MvI5NPrAQsOCAr8ERQTCQIYERAM2sDp7+T628ny+gDw798GAfX4Cd/1EA7wGx0oCeHrAgAHFxAHDuz77AH59RMG+wsM6/bpAPoQ8gAPER4kOVIL+f4U7evz/gYDDuDzASAGFgwK+//k8AgK6OfzCw8dXxYg/N362N3gy7H6DOf1qtHyMTch8AgOBA8AGyUc87CfA/sH+gTw4usIAfkFBQXx5eMGAgMDIvn249AM29DZ7vfxFx8V9v30/e70E/r5Fubm7uDzB/cP7/rpEOrq8QcU/+34Cwwa/BYcEA8IBvjT+Ar8/QH+EwLx/O0A+Qf76O3jDgn0/BEJ+ur8AAARBv4CCxj8Dg4RKhoNBxv88A4I+u0D+wcI/SQh9gkNAwcJ2efR8hkIBRAY/fUCAuUJBN//9/kI4QADBgT7DBf+29ruBA8SAA38BhEJ7vAABBQJAvf1AP0I4/0EC/4GFeTqBBv/8/T3+u/wC/kLGRQK9vvL8gEIEgP/EQcBBAEFA/z93tvVAhcOCRkGBvv5BQIK9+/tGCP5/uT3OfkFEwQD+QT1Exf/DBoF9+H+CPv6G/34zsf01ur5AgcHDwcD9vsL/98J/Bcl8uH1CPDeFQ0U5tLH6wsC/ejn9gEE+xIABgoIHPXj9ejcBO8dBPzuBfHU9/cC5PLxB/f7BAorDwIQ48+06vP9/wwNDP74EAwJ/xwTAOXQARcH9iQJ/ej1FDMbGhL+FyIV8//89AsUERIi9fz4FSUMCBUECeX0/wz2CQsF8rbL/AMBARD/EgwK/Pb2BzHsDhch/hMOCxTtHQsV/fH9ARMJ8xIE/uYE4tv+Bfj+Dc3s/fMG//oA+d3n8+ju9fT+5OD2BgQEDAsPCw8H+xHI+AIDFBQBAw39JREO/fD6A/fs5ujZBvsC/AIHFyD+/eb+AQgBBfAH/hf1EALxEfAR2eXuBxED/S0fAAYBBgHx99jl9eoEAA0DBwr6+O/2BhEA5tsiE+YI/RnNuscYGLPM/Qjx9OgDBQPdEfDy77Uh+hXOBxrOFvEOE/zsEfD28QcH/ssECeQDyAo85uMh0ywX+fTz8ND5+Ar35AQA+en5CAPY0hg3DOf8NO4c75Ec7QMd5/UK+gwI3NH64AsRFhv1stMr5vMg6vMF9Mn+6wscBebZI+IGCeEK/RIIGj7hAOz3DyAk7dLiENnPlqr59uT24dTw6uIGA+H78O38/QsJEBHr7sn2Dwb16woVQzsG8s3IDhgTDwr7+uQL+BD75PsKFxsK+ery+xbwEQAq9Pz6/gIJzO/uDS0bBBn7EQoJDiYz1svAE7vwHDcqCu7g/vvr8+oFdh9G+Tsm+R8K/QsT6ZWB+fz27+nj8P8KC/cc9yAIHSQf/wYR8+e9EgoS+fzu+s/iAxETAfoT/hARDwL3D/n7AucLEg/5BwUN+vz3BvPOAv7wAPTw/hAJAf8F6fcRAwAABf8H9uj2A/8ICA789w0SAA0AAgPw/gL/AxIY+AMPEA3zBLnu8f/cAPX39OXv8REK9QQO9vE///36/wULAMjOAPr1Ax4B7egCAQ3+ARLx9QkK//sA/fX19wn08woR/AwKDBwT++4PCPLx7ggOCO31+fYH9uj8CfUEBBj++/QA/fv6EPj19PAKDAX/DRwG+/P8+/f5/BEX+AoOB/QG6wIAAuHPDQEIBgcK9woDBvf3Afj9/O78DAL+/xj87voFAQsDDQT/FCgbHswGAPPz+hYNBwcE/hAGBPwB8vgO/t8JDhED29LgA/vm4esN9e7w4/vf/QoQ/Pr/9wIFEgEM/PXl+/j7+uz6BgX6DhT97+4E9vYAAxD1BhwI+Q8C+xDyA+j5DwgF+O36Bff8+w74/wv08ezvFRr4/P/0AAoCDPsBEhcQ+uoNEB0N/wr9DvIA4wMBBhga///55vr0EAMh/NjR/Av9EBH+AgEPCQX9CyT01uoGDwP2CggB3PPmKDI5EQkODAb89QgD+/cL0+DnFSAiGBUS5/DsEQ4FD/cZDev8HhQMCQYI5eoA9+rvBxD8/goNGBIPCxYcAQ8EDhEZHiAi59HfDwsP+eL52QES4OTi3Ofz6/Hr8Ov6yNf58v0D8dvl5OLh+/LpGBkO1dPiG9UjIQoOCgwK+AP7AAP879/47vntBQ7tDAH++6wKFicJDBb1Avb/DBYKBwL95OcSBww2Exn/ARvsCSQM/t0j//n/FyMLCf0M3dv3/d756+vtAP0CAAT4AwsDDvr8Bw8DEA0f7NQCBvgO7eP+4/4h+vb468oH+fUU2eX177wG6w8K99vN3uQA9wfvEfIH7t3zDwwNDc0D9/UEChAABR777OgQAw/5CAsDAfr4Dv739vr47/ACCAcB/vT69/EHCQoBANL3/gUCBOz0AwT3AQv488P3Dg0G+u/0CB0JCgQKCgL99RQK9w4QBuYC+AUIAgcH+x70AgD69QD0B+cAByMAB/T0Cwv29+n/CgABAg35CSgR8P4E5+z7B/fy7gQEDPYD9+72BCAYE+EaAgQQBPn8BgX8Gg4K6gfg4NjvNiT/5Pr5GTUGFfAD+uL7ICUh+Q0ADLXt/f/y/fj9+ebb/QIGBxsXBPHsDPbqKQ8ODhP4QB8l6e8Q4+Dm99jv7cwd/P0IBPX+9QHp/+jYBAjtCw7z6tP45+HyJs0X6wcFFgsd7wrv5PIUNkAe9RUOBPP0GiIU0uXs5fntAt/hZDMj+vTu9uzwH/ru7xMC8QQKHhTt5/gK/hUL9O/+/voGAhH8F+8D6fIABvgMEEICDPb/4gwC/f/23erw7OUNGP3YA//x3eDcAwT8BQLwBP4aAQnkBvL18PIZCvT1C+r//+8EKdTa7Pb1B/X6HyAR+PYNFfX7/hz47/jgCfb0/C/t+uv5Edvz7CMY7BED7tH2BvvkLwcWB/ck2gb//PjvD/j+/wICCQYC/vgE8v0C/vz7+e799yEKDAX6/QYBCPcD/AYDFAUH+gz/CgAB/PL4+OcH7PAD6v0BBAP5CPwJ/g7/AAEB+P4CECD76vIBAgsG+/wD/QAI/ugEAQYBEOwF7vn26f//AfD+1QL08PcHAg0DCfoC894C9wz8DB8BBAwCAQv8BB8JA/X9"},b:[-.045669,.365,.16298,.056926,.061365,.17121,.31628,.60688,.23114,.09403,-.40148,.18148,.75038,.50584,.15352,.29074,.44291,.12645,-.18931,.47873,-.38551,.28317,.55262,.39227,.38131,1.2725,-.064018,-.040631,-.09375,.14131,.44183,-.048867,-.17769,-.10518,.14749,-.22889,.65898,-.10786,.25988,.064485,.74896,.57062,.44417,.27367,.70502,.078341,.99578,.91641]},{k:3,dilation:4,residual:!0,w:{shape:[48,48,3],scale:.016013650223612785,data_b64:"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"},b:[.12815,.87146,.33192,.44547,-.007632,.33449,.31869,.91658,.61102,-.0034602,.26675,.65376,.12435,.4758,1.1636,.0035353,1.2932,.70309,.076384,.048984,-.051782,.23859,.012983,-.050207,-.0084905,1.0506,-.22662,.24729,.0080632,.80607,.092929,.38957,-.21694,.15222,.59882,-.020806,.97913,.055986,.054323,.3747,1.1563,.82255,1.5244,.31746,.042843,-.28672,1.1229,1.0624]},{k:3,dilation:8,residual:!0,w:{shape:[48,48,3],scale:.014567811042070389,data_b64:"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"},b:[-.10209,-.4862,-1.2464,-1.1972,-.10959,.017397,1.2648,.77302,.52286,.84262,-.029006,1.8643,.13893,1.5804,.15474,-.31713,1.4025,-1.4027,.18632,.012404,-.076322,1.1977,1.2403,-.041636,.28303,1.1963,-1.6589,.0090801,-.069721,.38039,-.11284,1.349,-2.4128,.26607,.66346,.65388,.017525,-.3425,-.0726,.3579,.22987,.2369,-.15815,.018548,.89442,.070234,2.0972,-1.0126]}],bio:{w:{shape:[3,48],scale:.004168502055108547,data_b64:"7/sUIBkCDfPuy/0QBkbd9yMICfLwBPDvEfo37vHv+PuB9g6gDvn9+kHvB+7vzgBSJDsbaN4CDfLwxCAVB9X++AwdCt/1Btv+E8TI2fjw2/cC+g4ND/n2/OPvCPDu2wEqKOLO7e8CDfPwSwEOCL8I9/zkCh0XBu0bEyXrGADxLPti+w4sD/n5+7bwB+8WNgGo"},b:[.18046,-.7663,.072858]},cls:{w:{shape:[120,48],scale:.00567670026794076,data_b64:"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"},b:[2.0027,1.2945,-.28072,.72027,-1.0331,-1.6638,-.21735,-.33161,.086345,.29916,-.3261,.078574,.90926,-.83461,-.84115,-.14665,-.044583,-.19085,-.13869,-.49243,-.88449,-.34868,-.53668,.09578,-.53226,-.35943,-.89781,-1.058,-.73711,.094275,-.77523,-.35261,.21741,-.54233,-.3885,-.46544,-.68879,-.67397,-.68836,-.77007,-.76595,-.36312,.41362,-.58424,-.8435,-.67918,-.70729,-.65979,-.77047,-.37647,-.49488,-63573e-8,-.5059,-.98657,-.52866,-.51039,-.17223,-.27703,.16426,-.05408,-.22805,.055086,-.31279,-.3578,-.98577,-.075522,-.5297,-.32323,-.058951,-.59986,-.063719,-.49272,-.49078,.38117,-.28573,-.33333,-.19816,-.64504,-.40924,-.19423,-.30237,-.27751,-.21272,-.32228,-.26795,-.53006,.055159,-.45349,-.11935,-.46747,-.57663,-.23346,.39296,-.80921,-.67229,-.56665,-.5278,-.84155,-.27958,-.94085,-.59683,-.74172,-.57104,-.29101,-.54431,-.79465,-.13767,-.62478,.014713,-.50479,-.36415,-.42477,.77882,.7003,.8939,.0061365,.66724,.0084922,-.13957,-.83726]}};var $=class{weights;charToId;gpu=null;defaultBackend;scratch;idsScratch=new Int32Array(O);bioIdsScratch=new Int32Array(128);clsIdsScratch=new Int32Array(128);bioProbsScratch=Array.from({length:128},()=>new Float32Array(3));constructor(e={}){this.weights=PA(e.weights??RA),this.charToId=CA(this.weights.charset),this.defaultBackend=e.backend??"cpu",this.scratch=new j(this.weights)}parse(e,n={}){if(typeof e!="string")return[];let B=e;e=k(e);let f=B.length===e.length,r,s=eA(e.length);if(s.length===1&&s[0].length===e.length){let t=R(e.length),g=x(e,this.charToId,this.idsScratch,t),o=S(this.weights,g,this.scratch);r=this.decodeForward(e,o,0,e.length)}else{let t=[],g=new Set;for(let o of s){let P=e.slice(o.offset,o.offset+o.length),w=R(P.length),C=x(P,this.charToId,this.idsScratch,w),D=S(this.weights,C,this.scratch),u=this.decodeForward(P,D,o.offset,P.length);for(let Q of u){let l=`${Q.start}:${Q.end}`;g.has(l)||(g.add(l),t.push(Q))}}t.sort((o,P)=>o.start-P.start),r=t}if(f)for(let t of r)t.span=B.slice(t.start,t.end);return r}decodeForward(e,n,B,f=n.length){let r=f,s=r<=128,t=s?this.bioIdsScratch:new Int32Array(r),g=s?this.clsIdsScratch:new Int32Array(r),o=s?this.bioProbsScratch:Array.from({length:r},()=>new Float32Array(3));for(let C=0;C<r;C++)t[C]=p(n.bioLogits,C*3,3),g[C]=p(n.clsLogits,C*n.nCls,n.nCls),BA(n.bioLogits,C*3,3,o[C]);let P=hA(e,t.subarray(0,r),g.subarray(0,r),o),w=[];for(let C of P){let D=C.tokens.map(([l,I])=>[L[l],I]),u=MA(e,C.start,C.end,He);if(FA(D)&&u===null)continue;let Q=dA(D);w.push({span:C.text,start:C.start+B,end:C.end+B,value:Q.value,...Q.range?{range:Q.range}:{},unit:Q.unit??null,currency:u,confidence:C.confidence??0,classes:Q.classes})}return w}inspect(e){let n=performance.now();typeof e!="string"&&(e="");let B=k(e),f=eA(B.length),r=new Array(B.length),s=new Array(B.length).fill(!1);for(let o of f){let P=B.slice(o.offset,o.offset+o.length),w=R(P.length),C=x(P,this.charToId,this.idsScratch,w),D=S(this.weights,C,this.scratch);for(let u=0;u<P.length;u++){let Q=o.offset+u;if(s[Q])continue;s[Q]=!0;let l=p(D.bioLogits,u*3,3),I=new Float32Array(3);BA(D.bioLogits,u*3,3,I);let v=p(D.clsLogits,u*D.nCls,D.nCls);r[Q]={ch:P[u],bio:l,bioProb:[I[0],I[1],I[2]],cls:L[v],clsId:v}}}let t=this.parse(e),g=performance.now()-n;return{text:B,chars:r,spans:t,ms:g}}modelInfo(){let e=this.weights,n=e.embed.data.length;for(let f of e.conv)n+=f.w.data.length+f.b.length;n+=e.bio.w.data.length+e.bio.b.length,n+=e.cls.w.data.length+e.cls.b.length;let B=e.conv.length?Math.max(...e.conv.map(f=>f.w.shape[0])):e.embed.shape[1];return{version:e.version,params:n,channels:B,embedDim:e.embed.shape[1],vocab:e.embed.shape[0],classes:e.classes.length,layers:e.conv.map(f=>({k:f.k,dilation:f.dilation,residual:f.residual}))}}async parseBatch(e,n={}){e=e.map(P=>typeof P=="string"?P:"");let B=n.backend??this.defaultBackend;if(!(B==="webgpu"||B==="auto"&&e.length>=32&&await gA()))return e.map(P=>this.parse(P,{backend:"cpu"}));let r=e,s=e.map(k),t=new Array(e.length),g=[],o=[];for(let P=0;P<s.length;P++)s[P].length<=128?g.push(P):o.push(P);for(let P of o)t[P]=this.parse(r[P],{backend:"cpu"});if(g.length>0){this.gpu||(this.gpu=new q(this.weights));let P=Math.max(...g.map(v=>s[v].length),1),w=R(P),C=g.length,D=new Int32Array(C*w),u=this.charToId.get("<pad>")??0;D.fill(u);for(let v=0;v<C;v++){let H=s[g[v]],i=x(H,this.charToId);D.set(i,v*w)}let{bio:Q,cls:l}=await this.gpu.run(D,C,w),I=this.weights.cls.w.shape[0];for(let v=0;v<C;v++){let H=g[v],i=s[H],d=r[H],M=d.length===i.length,E=i.length,c=new Float32Array(E*3),a=new Float32Array(E*I);for(let b=0;b<E;b++)c.set(Q.subarray((v*w+b)*3,(v*w+b)*3+3),b*3),a.set(l.subarray((v*w+b)*I,(v*w+b)*I+I),b*I);let h={bioLogits:c,clsLogits:a,length:E,nCls:I},F=this.decodeForward(i,h,0,E);if(M)for(let b of F)b.span=d.slice(b.start,b.end);t[H]=F}}return t}},oA=null;function AA(){return oA||(oA=new $),oA}function Se(A,e={}){return AA().parse(A,e)}function Je(A,e={}){return AA().parseBatch(A,e)}function Ke(A){return AA().inspect(A)}function _e(){return AA().modelInfo()}function We(A={}){return new $(A)}var He=LA(OA,UA);export{L as CLASSES,$ as Parser,We as createParser,Ke as inspect,sA as isWebGPUAvailable,_e as modelInfo,k as normalizeText,Se as parse,Je as parseBatch,gA as probeWebGPU};
|