gpu-sankhya 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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's plain (non-residual) conv layers have been verified on
184
- a real GPU in desktop Chrome, matching the CPU backend span-for-span on
185
- the demo page's batch benchmark. The current shipped model (arch `v2`)
186
- adds a residual connection (`y = relu(conv(x)) + x`) on four of its five
187
- layers; the WGSL shader's residual path is covered by unit tests that
188
- check its structure but has not yet been re-verified against a real GPU
189
- adapter in a browser run the demo's batch benchmark yourself and check
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.932 value accuracy. This number is optimistic — it's testing
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, 184 sentences / 168 spans)
215
- and `python/tests/gold_deva.jsonl` (Devanagari Hindi, 169 sentences / 141
215
+ `python/tests/gold.jsonl` (romanised Hindi, 214 sentences / 188 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) | 184 | 168 | 0.9515 | 0.8971 | 0.9515 | 0.9235 |
221
- | gold_deva.jsonl (Devanagari) | 169 | 141 | 0.9861 | 0.9662 | 0.9931 | 0.9795 |
222
- | combined | 353 | 309 | 0.9676 | 0.9288 | 0.9709 | 0.9494 |
223
-
224
- Negatives (zero-gold-span examples, 55 total): 4 false positives (7.3%).
225
- Per-category value accuracy: digits 0.977, words 0.964, prefix 0.948,
226
- range 0.917, currency 0.979, multi_unit 1.0, symbol_unit 1.0,
227
- mixed_script 1.0, long 0.75.
228
-
229
- Compared to the previously shipped `v1` model (0.9441 / 0.9645 / 0.9536
230
- combined value acc, F1 0.9510, 2/55 negatives false positives): this
231
- model gains about 1.4 points of value accuracy and is materially more
232
- robust to input containing characters outside its training vocabulary,
233
- at the cost of slightly lower span precision it produces a few more
234
- spurious spans on unfamiliar words. That's a known, measured trade-off,
235
- not an oversight.
221
+ | gold.jsonl (romanised) | 214 | 188 | 0.9255 | 0.9167 | 0.9362 | 0.9263 |
222
+ | gold_deva.jsonl (Devanagari) | 182 | 151 | 0.9735 | 0.9737 | 0.9801 | 0.9769 |
223
+ | combined | 396 | 339 | 0.9469 | 0.9419 | 0.9558 | 0.9488 |
224
+
225
+ Negatives (zero-gold-span examples, 73 total): 0 false positives.
226
+ Miss summary: missed 2, spurious 7, 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,42 @@ 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
+ - **Bare-digits gate**: a span whose only meaningful tokens are digits (no
307
+ unit/prefix/cardinal word at all) with no detected currency marker is
308
+ dropped only when it's short and ungrouped (≤4 digits, no comma — route
309
+ numbers, OTPs, years: `"1"`, `"route 66"`, `"OTP 4521"`, `"2024"`) or very
310
+ long (≥10 digits — phone numbers: `"9876543210"`). Everything else is
311
+ kept as a plain (unitless) amount — `"15000"`, `"1,00,000"`,
312
+ `"2,50,00,000"` all parse; `"₹75"` / `"Rs 2,50,000/-"` / `"1200 rupees"`
313
+ still parse with `currency: "INR"`. The currency-marker look-ahead
314
+ scans 8 characters past the amount for a trailing marker word (up from
315
+ a shorter window that missed `"1200 rupees"` — `"rupees"` alone runs to
316
+ 6 characters plus the leading space).
317
+ - **Range-connector repair**: a bare `-`/`–`/`—`/`/` between two amounts
318
+ becomes a `RANGE` tag (spaces around it stay `SEP`) when the left side
319
+ can end an amount by itself and the right side can start a fresh one
320
+ (`"2 lakh/3 lakh"`, `"दो-तीन लाख"`) — but not when it's really one
321
+ compound number, e.g. a prefix glued straight to a unit (`"dedh-lakh"`
322
+ stays one span, not a range).
323
+ - **Possessive trim**: a trailing `'s`/`’s` (1-2 letters) is stripped from
324
+ the end of a word and excluded from the span (`"2 lakh's"` → `"2 lakh"`).
286
325
  - **Confidence filter**: a span's confidence is the mean of the max BIO
287
326
  softmax probability per character; spans below 0.5 are dropped.
288
327
  - Only after all of the above does the deterministic arithmetic core run
289
- on the resulting token sequence.
328
+ on the resulting token sequence, which also treats a `RANGE` connector
329
+ between two amounts that BOTH already carry a unit and are strictly
330
+ *descending* (e.g. `"ek lakh dus hazaar"` mistagged `RANGE` on the
331
+ space) as one additive amount rather than a `[low, high]` range —
332
+ genuine ranges (only one side has a unit, or both do but ascending) are
333
+ unaffected.
290
334
 
291
335
  One more detail that matters more than it looks like it should: the
292
336
  runtime right-pads the character-id array with 24 pad tokens before
@@ -313,16 +357,30 @@ outputs are discarded; only the real characters' predictions are used.
313
357
  - **Offsets are into the normalized string.** `parse()`'s `start`/`end`
314
358
  index `normalizeText(text)`, not the raw input, in the rare case NFC
315
359
  normalization changes the string's length (see `normalizeText` in the
316
- API section above).
360
+ API section above); in JS, an astral (surrogate-pair) character such as
361
+ an emoji also counts as two UTF-16 units in those offsets, same as any
362
+ other JS string indexing.
317
363
  - Text longer than 128 characters is processed with a sliding window
318
364
  (128-char windows, 16-char overlap) and results are merged/deduplicated
319
365
  by span; extremely long inputs may still miss a span that straddles a
320
366
  window boundary in an unlucky way.
367
+ - **Bare single cardinal words without a unit are not reliably
368
+ extracted.** `"unnasi"` alone produces no span, while `"unnasi hazaar"`
369
+ correctly resolves to 79000 — a bare number word needs a unit, prefix,
370
+ or digit context to be tagged.
371
+ - **Long multi-term ranges still split incorrectly.** Constructs like
372
+ `"paanch se sadhe saat lakh"` (a range where one side itself carries a
373
+ prefix word) are not reliably decoded as a single range.
374
+ - **Fullwidth and Arabic-Indic digits are not normalised.** Only
375
+ Devanagari digits (U+0966-U+096F) are mapped by `normalizeText`;
376
+ fullwidth (`2`) and Arabic-Indic (`٢`) digit forms are left as unknown
377
+ characters, so a phrase like `"2 lakh"` loses the digit and falls back
378
+ to the unit's default value.
321
379
  - Model quality: see Accuracy above. The known miss categories there
322
- (unusual typos, possessive apostrophes, long multi-term ranges,
323
- occasional spurious spans) are model-quality issues, not bugs in the
324
- arithmetic core, which is unit-tested directly and independently of the
325
- model in `test/core.test.ts`.
380
+ (wrong span boundaries on multi-span/range phrases, unusual typos,
381
+ long multi-term ranges, occasional spurious spans) are model-quality
382
+ issues, not bugs in the arithmetic core, which is unit-tested directly
383
+ and independently of the model in `test/core.test.ts`.
326
384
 
327
385
  ## Repository layout
328
386
 
@@ -407,3 +465,20 @@ npmjs.com for this to work: package page -> Settings -> Trusted publisher,
407
465
  with Organization/user `athrvk`, Repository `gpu-sankhya`, Workflow
408
466
  filename `publish.yml`. The first release was published manually with
409
467
  `npm publish`.
468
+
469
+ ### Publishing to Hugging Face
470
+
471
+ The `.github/workflows/huggingface.yml` workflow mirrors the shipped model,
472
+ the demo, and the gold evaluation sets to Hugging Face:
473
+
474
+ - model: https://huggingface.co/athrvk/gpu-sankhya
475
+ - demo Space: https://huggingface.co/spaces/athrvk/gpu-sankhya-demo
476
+ - dataset: https://huggingface.co/datasets/athrvk/gpu-sankhya-gold
477
+
478
+ It runs on `workflow_dispatch` (choose `all`/`model`/`space`/`dataset`) and
479
+ on push to `master` when `package.json`, `models/default/**`,
480
+ `python/tests/gold*.jsonl`, or `demo/**` change. One-time setup: add an
481
+ `HF_TOKEN` repo secret with a write-scoped Hugging Face token for the
482
+ `athrvk` namespace — without it the workflow prints a notice and skips.
483
+ See `python/README.md`'s "Publishing to Hugging Face" section for the
484
+ 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,19 @@ export interface DecodedSpan {
12
12
  tokens: Array<[number, string]>;
13
13
  confidence: number | null;
14
14
  }
15
+ /** [start, end) maximal letter/mark runs over the WHOLE text (not just one
16
+ * span) -- word integrity needs the true word boundaries, which can extend
17
+ * outside a span that was cut short mid-word. */
18
+ export declare function letterRuns(text: string): Array<[number, number]>;
19
+ /** R2: a word-class (UNIT_/PFX_/CARD_) token must cover its entire letter
20
+ * word. Checked per WHOLE letters-run rather than per token, so a run
21
+ * legitimately split into several back-to-back meaningful tokens (e.g.
22
+ * "dedhlakh" = PFX_DEDH|UNIT_LAKH, both length-4 sub-runs) is left alone; a
23
+ * run that is only PARTIALLY meaningful (some chars fall back to O, e.g.
24
+ * "km" tagged UNIT_.../O) has ALL its meaningful chars retagged O too -- a
25
+ * partial match without an explanation for the rest of the word is
26
+ * untrustworthy. A single-character symbol unit (k/K/l/L) is additionally
27
+ * only valid when the following character is not a letter, even when it
28
+ * fully (and only) covers its own run. */
29
+ export declare function repairWordIntegrity(text: string, s: number, e: number, ids: number[] | Int32Array, runs: Array<[number, number]>): number[];
15
30
  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 GA(A){return A.version===2&&Array.isArray(A.conv)}function TA(A){return A.quantized!==void 0}function kA(A){let e=atob(A),B=new Int8Array(e.length);for(let n=0;n<e.length;n++)B[n]=e.charCodeAt(n)<<24>>24;return B}function G(A){let e=kA(A.data_b64),B=new Float32Array(e.length);for(let n=0;n<e.length;n++)B[n]=e[n]*A.scale;return{shape:A.shape,data:B}}function T(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function PA(A,e){return A*(e-1)/2}function X(A){return{w:T(A.w),b:Float32Array.from(A.b.data)}}function N(A){return{w:G(A.w),b:Float32Array.from(A.b)}}function oA(A){let e=TA(A);if(GA(A)){let f=A.conv.map(s=>{let g=PA(s.dilation,s.k);if(e){let o=s;return{k:s.k,dilation:s.dilation,residual:s.residual,padding:g,w:G(o.w),b:Float32Array.from(o.b)}}let P=s;return{k:s.k,dilation:s.dilation,residual:s.residual,padding:g,w:T(P.w),b:Float32Array.from(P.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:e?G(A.embed):T(A.embed),conv:f,bio:e?N(A.bio):X(A.bio),cls:e?N(A.cls):X(A.cls)}}let B=A.layers??3,n=A.dilation??2,t=[{name:"conv1",k:3,dilation:1},{name:"conv2",k:5,dilation:1},{name:"conv3",k:3,dilation:n}];B===4&&t.push({name:"conv4",k:3,dilation:4});let r=t.map(f=>{let s=PA(f.dilation,f.k);if(e){let w=A[f.name];if(!w)throw new Error(`missing ${f.name} in weights JSON`);return{k:f.k,dilation:f.dilation,residual:!1,padding:s,w:G(w.w),b:Float32Array.from(w.b)}}let P=A[f.name];if(!P)throw new Error(`missing ${f.name} in weights JSON`);return{k:f.k,dilation:f.dilation,residual:!1,padding:s,w:T(P.w),b:Float32Array.from(P.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:e?G(A.embed):T(A.embed),conv:r,bio:e?N(A.bio):X(A.bio),cls:e?N(A.cls):X(A.cls)}}function zA(A){return Math.ceil(A/8)*8}function x(A){return zA(A+24)}var R=x(128),pA=/[०-९]/g;function k(A){return A.normalize("NFC").replace(pA,e=>String(e.charCodeAt(0)-2406)).toLowerCase()}function wA(A){let e=new Map;for(let B=0;B<A.length;B++)e.set(A[B],B);return e}function z(A,e,B,n){let t=e.get("<unk>")??1,r=e.get("<pad>")??0,f=n??A.length,s=B?B.subarray(0,f):new Int32Array(f);for(let g=0;g<A.length;g++)s[g]=e.get(A[g])??t;for(let g=A.length;g<f;g++)s[g]=r;return s}function eA(A){if(A<=128)return[{offset:0,length:A}];let e=[],B=112,n=0;for(;n<A;){let t=Math.min(128,A-n);if(e.push({offset:n,length:t}),n+t>=A)break;n+=B}return e}var j=class{buffers;padded;bioBuf;clsBuf;constructor(e){let B=e.conv,n=Math.max(e.embed.shape[1],...B.map(r=>r.w.shape[0]));this.buffers=[new Float32Array(n*R),new Float32Array(n*R)];let t=B.length?Math.max(...B.map(r=>r.padding)):0;this.padded=new Float32Array(n*(R+2*t)),this.bioBuf=new Float32Array(e.bio.w.shape[0]*R),this.clsBuf=new Float32Array(e.cls.w.shape[0]*R)}buf(e){return this.buffers[e%2]}paddedBuf(){return this.padded}};function yA(A,e,B,n,t,r){let[f,s,g]=n.w.shape;if(s!==e)throw new Error(`channel mismatch: expected ${e}, got ${s}`);let P=n.w.data,o=n.b,w=n.padding,D=n.dilation,C=B+2*w;for(let u=0;u<e;u++)r.fill(0,u*C,u*C+w),r.set(A.subarray(u*B,u*B+B),u*C+w),r.fill(0,u*C+w+B,u*C+C);for(let u=0;u<f;u++){let v=u*B,I=o[u],l=u*e*g;if(g===3){for(let Q=0;Q<B;Q++)t[v+Q]=I;for(let Q=0;Q<e;Q++){let b=Q*C,i=l+Q*3,M=P[i],L=P[i+1],a=P[i+2];for(let c=0;c<B;c++){let E=b+c;t[v+c]+=M*r[E]+L*r[E+D]+a*r[E+2*D]}}}else if(g===5){for(let Q=0;Q<B;Q++)t[v+Q]=I;for(let Q=0;Q<e;Q++){let b=Q*C,i=l+Q*5,M=P[i],L=P[i+1],a=P[i+2],c=P[i+3],E=P[i+4];for(let H=0;H<B;H++){let d=b+H;t[v+H]+=M*r[d]+L*r[d+1]+a*r[d+2]+c*r[d+3]+E*r[d+4]}}}else{for(let Q=0;Q<B;Q++)t[v+Q]=I;for(let Q=0;Q<e;Q++){let b=Q*C,i=l+Q*g;for(let M=0;M<g;M++){let L=P[i+M],a=M*D,c=b+a;for(let E=0;E<B;E++)t[v+E]+=L*r[c+E]}}}if(n.residual)for(let Q=0;Q<B;Q++){let b=t[v+Q];t[v+Q]=(b>0?b:0)+A[v+Q]}else for(let Q=0;Q<B;Q++){let b=t[v+Q];t[v+Q]=b>0?b:0}}return f}function DA(A,e,B,n,t){let[r,f]=n.w.shape;if(f!==e)throw new Error(`head channel mismatch: expected ${e}, got ${f}`);let s=n.w.data,g=n.b,P=e-e%4;for(let o=0;o<B;o++){let w=o*r;for(let D=0;D<r;D++){let C=g[D],u=D*e,v=0;for(;v<P;v+=4)C+=s[u+v]*A[v*B+o]+s[u+v+1]*A[(v+1)*B+o]+s[u+v+2]*A[(v+2)*B+o]+s[u+v+3]*A[(v+3)*B+o];for(;v<e;v++)C+=s[u+v]*A[v*B+o];t[w+D]=C}}return r}function S(A,e,B){let n=e.length,t=A.embed,r=t.shape[1],f=B.buf(0);for(let w=0;w<n;w++){let C=e[w]*r;for(let u=0;u<r;u++)f[u*n+w]=t.data[C+u]}let s=r,g=B.paddedBuf(),P=1;for(let w of A.conv){let D=B.buf(P);s=yA(f,s,n,w,D,g),f=D,P++}DA(f,s,n,A.bio,B.bioBuf);let o=DA(f,s,n,A.cls,B.clsBuf);return{bioLogits:B.bioBuf,clsLogits:B.clsBuf,length:n,nCls:o}}function BA(A,e,B,n){let t=-1/0;for(let f=0;f<B;f++)t=Math.max(t,A[e+f]);let r=0;for(let f=0;f<B;f++){let s=Math.exp(A[e+f]-t);n[f]=s,r+=s}for(let f=0;f<B;f++)n[f]/=r;return n}function p(A,e,B){let n=0,t=-1/0;for(let r=0;r<B;r++){let f=A[e+r];f>t&&(t=f,n=r)}return n}var mA=["PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE"],YA=Array.from({length:99},(A,e)=>`CARD_${e+1}`),XA=["UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],NA=["O","SEP","RANGE","DIGITS","DOT","COMMA"],F=["O",...NA.filter(A=>A!=="O"),...mA,...YA,...XA],O=Object.fromEntries(F.map((A,e)=>[A,e])),CA={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 vA(A){return A.startsWith("CARD_")}function uA(A){return A in CA}function cA(A){return parseInt(A.split("_",2)[1],10)}function K(A){return CA[A]}var SA=new Set(["SEP","RANGE","DOT","COMMA"]),EA=new Set([...SA,"O"]),tA=["PFX_","CARD_","UNIT_"],JA=["PFX_","CARD_","UNIT_"],KA=new Set(["-","\u2013","\u2014","/"]),_A=new Set(["k","K","l","L"]),aA=/['’]([A-Za-zऀ-ॿ]{1,2})(?![A-Za-zऀ-ॿ])/g;function WA(A){return tA.some(e=>A.startsWith(e))||A==="DIGITS"}function VA(A){return JA.some(e=>A.startsWith(e))}var W=O.O,_=O.SEP,rA=O.RANGE,qA=O.DIGITS,ZA=O.DOT,$A=O.COMMA,Ae=/\p{L}|\p{M}/u;function y(A){return Ae.test(A)?"letter":/[0-9]/.test(A)?"digit":/\s/.test(A)?"space":"punct"}function ee(A){let e=[],B=0,n=A.length;for(;B<n;){let t=y(A[B]),r=B+1;for(;r<n&&y(A[r])===t;)r++;e.push({type:t,start:B,end:r}),B=r}return e}function Be(A,e,B){let n=new Map;for(let P=e;P<B;P++){let o=A[P];VA(F[o])&&n.set(o,(n.get(o)??0)+1)}if(n.size===0)return W;let t=-1;for(let P of n.values())P>t&&(t=P);let r=[...n.entries()].filter(([,P])=>P===t).map(([P])=>P);if(r.length===1)return r[0];let f=-1,s=1/0,g=r[0];for(let P of r){let o=0,w=0,D=1/0;for(let C=e;C<B;C++)A[C]===P?(D===1/0&&(D=C),o++,o>w&&(w=o)):o=0;(w>f||w===f&&D<s)&&(f=w,s=D,g=P)}return g}function hA(A,e,B){let n=[],t=e;for(;t<B;){let s=t+1;for(;s<B&&A[s]===A[t];)s++;n.push({start:t,end:s,cls:A[t]}),t=s}let r=Be(A,e,B),f=[];for(let s=0;s<n.length;s++){let g=n[s];if(g.end-g.start>=3){f.push([g.start,g.end,g.cls]);continue}let o=s>0?n[s-1]:null,w=s<n.length-1?n[s+1]:null,D=o!==null&&o.end-o.start>=3,C=w!==null&&w.end-w.start>=3,u;if(D&&C){let v=o.end-o.start;u=w.end-w.start>v?w.cls:o.cls}else D?u=o.cls:C?u=w.cls:u=r;f.push([g.start,g.end,u])}return f}function ne(A){return tA.some(e=>A.startsWith(e))||A==="DIGITS"}function iA(A,e,B,n){if(A==="digit")return"DIGITS";if(A==="letter"){let t=hA(n,e,B),r=new Map;for(let[g,P,o]of t)r.set(o,(r.get(o)??0)+(P-g));let f=-1,s=-1;for(let[g,P]of r)P>s&&(s=P,f=g);return f>=0?F[f]:null}return null}function IA(A,e,B){let n=e+B;if(n<0||n>=A.length||A[n].type==="space"&&(n+=B,n<0||n>=A.length))return null;let t=A[n];return t.type==="digit"||t.type==="letter"?t:null}function re(A,e,B){let n=IA(A,e,-1),t=IA(A,e,1);if(!n||!t)return!1;let r=iA(n.type,n.start,n.end,B),f=iA(t.type,t.start,t.end,B);return!r||!f||!ne(r)?!1:f==="DIGITS"||f.startsWith("CARD_")||f.startsWith("PFX_")}function te(A,e){let B=A.length,n=new Array(B),t=ee(A);for(let r=0;r<t.length;r++){let f=t[r],{type:s,start:g,end:P}=f;if(s==="digit"){for(let C=g;C<P;C++)n[C]=qA;continue}if(s==="space"){let C=!1;for(let v=g;v<P;v++)if(e[v]===rA){C=!0;break}let u=C?rA:_;for(let v=g;v<P;v++)n[v]=u;continue}if(s==="letter"){for(let[C,u,v]of hA(e,g,P))for(let I=C;I<u;I++)n[I]=v;continue}let o=r>0?t[r-1].type:null,w=r<t.length-1?t[r+1].type:null,D=_;if(P-g===1){let C=A[g];(C==="."||C===",")&&o==="digit"&&w==="digit"?D=C==="."?ZA:$A:KA.has(C)&&re(t,r,e)?D=rA:D=_}for(let C=g;C<P;C++)n[C]=D}return n}function fe(A,e){let B=Array.from({length:e},(n,t)=>A[t]);for(let n=1;n<e-1;n++)A[n]===0&&(A[n-1]===1||A[n-1]===2)&&A[n+1]===2&&(B[n]=2);return B}function lA(A){return A!==void 0&&A>="0"&&A<="9"}function se(A,e,B){if(B<=e||!lA(A[B-1]))return B;let n=B;for(;n<A.length&&lA(A[n]);)n++;return n}function ge(A){let e=[],B=0,n=A.length;for(;B<n;)if(y(A[B])==="letter"){let t=B+1;for(;t<n&&y(A[t])==="letter";)t++;e.push([B,t]),B=t}else B++;return e}function bA(A){return tA.some(e=>A.startsWith(e))&&A!=="DIGITS"}function Pe(A,e,B,n,t){let r=Array.from({length:n.length},(f,s)=>n[s]);for(let[f,s]of t){if(s<=e||f>=B)continue;let g=Math.max(f,e),P=Math.min(s,B),o=f>=e&&s<=B;if(o){for(let w=f;w<s;w++)if(!bA(F[r[w]])){o=!1;break}}if(o){s-f===1&&F[r[f]].startsWith("UNIT_")&&_A.has(A[f])&&s<A.length&&y(A[s])==="letter"&&(r[f]=W);continue}for(let w=g;w<P;w++)bA(F[r[w]])&&(r[w]=W)}return r}function oe(A,e,B,n){let t=Array.from({length:n.length},(s,g)=>n[g]),r=A.slice(e,B);aA.lastIndex=0;let f;for(;f=aA.exec(r);)for(let s=e+f.index;s<e+f.index+f[0].length;s++)t[s]=W;return t}function HA(A,e,B,n){let t=A.length,r=fe(e,t),f=[],s=null;for(let w=0;w<t;w++){let D=r[w];D===1?(s!==null&&f.push([s,w]),s=w):D===2||s!==null&&(f.push([s,w]),s=null)}s!==null&&f.push([s,t]);for(let w=0;w<f.length;w++)f[w]=[f[w][0],se(A,f[w][0],f[w][1])];let g=ge(A),P=Array.from({length:t},(w,D)=>B[D]),o=[];for(let[w,D]of f){let C=A.slice(w,D),u=Array.from({length:D-w},(c,E)=>P[w+E]),v=te(C,u);for(let c=w;c<D;c++)P[c]=v[c-w];P=Pe(A,w,D,P,g),P=oe(A,w,D,P);let I=w,l=[];for(let c=w+1;c<=D;c++)(c===D||P[c]!==P[I])&&(l.push([P[I],I,c]),I=c);let Q=0,b=l.length;for(;Q<b&&EA.has(F[l[Q][0]]);)Q++;for(;b>Q&&EA.has(F[l[b-1][0]]);)b--;let i=l.slice(Q,b);if(i.length===0)continue;let M=i[0][1],L=i[i.length-1][2];if(!i.some(([c])=>WA(F[c])))continue;let a=null;if(n){let c=[];for(let E=M;E<L;E++)c.push(Math.max(...n[E]));if(a=c.length?c.reduce((E,H)=>E+H,0)/c.length:0,a<.5)continue}o.push({start:M,end:L,text:A.slice(M,L),tokens:i.map(([c,E,H])=>[c,A.slice(E,H)]),confidence:a})}return o}function we(A){let e=[],B="",n=!1,t=()=>{if(n){let r=B.replace(/,/g,""),f=parseFloat(r);e.push(["NUM",Number.isNaN(f)?0:f])}B="",n=!1};for(let[r,f]of A)r!=="SEP"&&(r==="DIGITS"||r==="DOT"||r==="COMMA"?(B+=f,n=!0):(t(),e.push([r,f])));return t(),e}function De(A,e){if(e!==null){let B=nA[e];if(B===void 0)return A!==null?A:1;if(A!==null&&B.op){if(B.op==="sub25")return A-.25;if(B.op==="add25")return A+.25;if(B.op==="add5")return A+.5}return B.standalone}return A!==null?A:1}function Ce(A){let e=we(A),B=0,n=null,t=null,r=null,f=null;function s(g){let P=De(r,f);if(g===null)B+=P*1;else{let o=K(g);n!==null&&o>n?B=B*o:B=B+P*o,n=o,(t===null||o>K(t))&&(t=g)}r=null,f=null}for(let[g,P]of e)if(g==="NUM")r!==null&&s(null),r=P;else if(vA(g)){r!==null&&s(null);try{r=cA(g)}catch{}}else if(QA(g))f!==null&&s(null),f=g;else if(uA(g))s(g);else continue;return(r!==null||f!==null)&&s(null),[B,t]}function m(A){let e=Math.round(A),B=Math.max(1e-6,Math.abs(A)*1e-9);return Math.abs(A-e)<B?e:Math.round(A*1e6)/1e6}function Qe(A){let e=[],B=0;for(;B<A.length;){let[n,t]=A[B];if(n.startsWith("PFX_")){let r=t,f=B+1;for(;;){let s=f;if(s<A.length&&A[s][0]==="SEP"&&s++,s<A.length&&A[s][0]===n){for(let g=f;g<=s;g++)r+=A[g][1];f=s+1;continue}break}e.push([n,r]),B=f}else e.push(A[B]),B++}return e}function MA(A){try{let e=A.map(D=>D[0]),B=Qe(A),n=[[]];for(let[D,C]of B){if(D==="RANGE"){n.length<2&&n.push([]);continue}n[n.length-1].push([D,C])}let t=n.filter(D=>D.length>0).map(D=>Ce(D));if(t.length===0)return{value:0,range:null,unit:null,classes:e,currency:null};if(t.length===1){let[D,C]=t[0];return{value:m(D),range:null,unit:C?J[C]??null:null,classes:e,currency:null}}let[r,f]=t[0],[s,g]=t[1];if(f!==null&&g!==null&&r>s)return{value:m(r+s),range:null,unit:J[f]??null,classes:e,currency:null};let P;f===null&&g!==null?(r=r*K(g),P=g):P=f!==null?f:g;let[o,w]=r<=s?[r,s]:[s,r];return{value:m(o),range:[m(o),m(w)],unit:P?J[P]??null:null,classes:e,currency:null}}catch{return{value:0,range:null,unit:null,classes:A.map(e=>e[0]),currency:null}}}function ve(A){let e=!1;for(let[B]of A)if(B==="DIGITS")e=!0;else if(B.startsWith("UNIT_")||B.startsWith("PFX_")||B.startsWith("CARD_"))return!1;return e}function dA(A){if(!ve(A))return!1;let e=0,B=!1;for(let[n,t]of A)n==="DIGITS"?e+=t.length:n==="COMMA"&&(B=!0);return e<=4&&!B||e>=10}function FA(...A){let e=(n,t)=>t.length-n.length,B=n=>[...new Set(n.flat())].sort(e);return{currency_markers_before:B(A.map(n=>n.currency_markers_before??[])),currency_words_after:B(A.map(n=>n.currency_words_after??[]))}}function LA(A,e,B,n){let t=A.slice(Math.max(0,e-8),e),r=A.slice(B,B+8),s=t.replace(/\s+$/,"").toLowerCase(),g=[...n.currency_markers_before??[]].sort((D,C)=>C.length-D.length);for(let D of g){let C=D.replace(/\.+$/,"").toLowerCase();if(s.endsWith(D.toLowerCase())||s.endsWith(C))return"INR"}let o=r.replace(/^\s+/,"").toLowerCase(),w=[...n.currency_words_after??[]].sort((D,C)=>C.length-D.length);for(let D of w){let C=D.toLowerCase();if(o.startsWith(C))return"INR"}return null}var RA={currency_markers_before:["\u20B9","Rs","Rs.","rs","INR","Re"],currency_words_after:["rupaye","rupay","rupees","rupiya","rupya","/-"]};var OA={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 ue=`
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
- `,nB=`
20
+ `,ce=`
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
- `,rB=`
55
+ `,Ee=`
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 fA(){return typeof navigator<"u"&&!!navigator.gpu}var V=null;function sA(){return V||(V=(async()=>{if(!fA())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(!fA())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 B=await e.requestDevice(),n=(s,g)=>{let P=B.createBuffer({size:Math.max(4,s.byteLength),usage:g,mappedAtCreation:!0});return new Float32Array(P.getMappedRange()).set(s),P.unmap(),P},t=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r=this.weights,f=r.conv.map(s=>({w:n(s.w.data,t),b:n(s.b,t)}));return this.state={device:B,embedModule:B.createShaderModule({code:ue}),convModule:B.createShaderModule({code:ce}),headModule:B.createShaderModule({code:Ee}),embedBuf:n(r.embed.data,t),convBufs:f,bioBuf:{w:n(r.bio.w.data,t),b:n(r.bio.b,t)},clsBuf:{w:n(r.cls.w.data,t),b:n(r.cls.b,t)}},this.state}async run(e,B,n){let t=await this.init(),{device:r}=t,f=this.weights,s=f.embed.shape[1],g=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,P=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,o=r.createBuffer({size:e.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Int32Array(o.getMappedRange()).set(e),o.unmap();let w=a=>{let c=r.createBuffer({size:a.byteLength,usage:P,mappedAtCreation:!0});return new Uint32Array(c.getMappedRange()).set(a),c.unmap(),c},D=r.limits?.maxComputeWorkgroupsPerDimension??65535,C=a=>{let c=Math.max(1,Math.ceil(a/64)),E=Math.min(c,D),H=Math.ceil(c/E);return{x:E,y:H,stride:E*64}},u=(a,c,E)=>{let H=r.createBindGroup({layout:a.getBindGroupLayout(0),entries:c}),d=r.createCommandEncoder(),h=d.beginComputePass();h.setPipeline(a),h.setBindGroup(0,H),h.dispatchWorkgroups(E.x,E.y),h.end(),r.queue.submit([d.finish()])},v=r.createBuffer({size:B*s*n*4,usage:g});{let a=C(B*n),c=w(new Uint32Array([B,n,s,f.embed.shape[0],a.stride])),E=r.createComputePipeline({layout:"auto",compute:{module:t.embedModule,entryPoint:"main"}});u(E,[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:o}},{binding:2,resource:{buffer:t.embedBuf}},{binding:3,resource:{buffer:v}}],a)}let I=s,l=f.conv,Q=r.createComputePipeline({layout:"auto",compute:{module:t.convModule,entryPoint:"main"}});for(let a=0;a<l.length;a++){let c=l[a],[E,,H]=c.w.shape,d=c.dilation,h=c.padding,U=r.createBuffer({size:B*E*n*4,usage:g}),Y=C(B*E*n),UA=w(new Uint32Array([B,n,I,E,H,h,d,1,c.residual?1:0,Y.stride]));u(Q,[{binding:0,resource:{buffer:UA}},{binding:1,resource:{buffer:v}},{binding:2,resource:{buffer:t.convBufs[a].w}},{binding:3,resource:{buffer:t.convBufs[a].b}},{binding:4,resource:{buffer:U}}],Y),v=U,I=E}let b=r.createComputePipeline({layout:"auto",compute:{module:t.headModule,entryPoint:"main"}}),i=async(a,c)=>{let E=r.createBuffer({size:B*n*c*4,usage:g}),H=C(B*n*c),d=w(new Uint32Array([B,n,I,c,H.stride]));u(b,[{binding:0,resource:{buffer:d}},{binding:1,resource:{buffer:v}},{binding:2,resource:{buffer:a.w}},{binding:3,resource:{buffer:a.b}},{binding:4,resource:{buffer:E}}],H);let h=r.createBuffer({size:B*n*c*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),U=r.createCommandEncoder();U.copyBufferToBuffer(E,0,h,0,B*n*c*4),r.queue.submit([U.finish()]),await h.mapAsync(GPUMapMode.READ);let Y=new Float32Array(h.getMappedRange().slice(0));return h.unmap(),Y},M=await i(t.bioBuf,f.bio.w.shape[0]),L=await i(t.clsBuf,f.cls.w.shape[0]);return{bio:M,cls:L}}};var xA={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:.037109747529029846,data_b64:"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"},conv:[{k:5,dilation:1,residual:!1,w:{shape:[48,16,5],scale:.0056425235234200954,data_b64:"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"},b:[-.24382,-.38407,-.17817,-.351,-.22238,-.0019299,.028242,-.32424,-.21751,-.039856,-.006906,.12596,-.51106,.050427,.15754,.092282,-.29897,-.62661,-.0011282,-.7889,-.13757,.19859,-.055453,-.46586,-.038519,-.46619,.029959,-.0023833,-.30013,-.51659,-57684e-8,-.19363,-.10826,-.0072604,-.55949,.039256,-.28819,-.31607,1372e-7,-.063139,-.052011,-.12956,-.22692,-.51442,.16734,-.55926,.027049,-.51846]},{k:3,dilation:1,residual:!0,w:{shape:[48,48,3],scale:.013383498415350914,data_b64:"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"},b:[.11358,.11704,-.088201,-.033611,-.002863,.066441,.21947,.3986,-.12785,.46101,.26606,.1678,.17644,.49194,.36484,.3702,-.028757,.043993,-.032994,.45611,.06581,-.087146,.062385,.033713,.14835,.21905,.26361,-.10899,.29428,.48339,-.067757,.28667,.2584,-.10572,-.029867,.62242,-.16582,.19591,.20494,.15142,.42574,.21697,.023204,.21846,.019266,-.092303,.17447,.071329]},{k:3,dilation:2,residual:!0,w:{shape:[48,48,3],scale:.010257013142108917,data_b64:"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"},b:[.19117,-.074236,-.042869,.23032,.014854,-.33218,-.27652,.5013,-.1957,.25585,.66936,-.033494,.2669,.57471,.51624,.44239,.04774,.069218,.63188,.39761,-.089879,.99325,-.048568,-.23978,-.07374,.10848,-.27321,-.18405,.22888,1.0015,.16014,.14434,.09867,-.16617,.32079,.45812,.28912,.58278,1.0206,.20699,.39127,.13378,-.066438,.084532,-.014646,.68524,.10335,.14651]},{k:3,dilation:4,residual:!0,w:{shape:[48,48,3],scale:.01723182387650013,data_b64:"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"},b:[1.7206,.31359,-.2062,.93225,.2975,-1.3697,.17743,.72685,-.81717,.28116,.62245,.038487,.65606,.65371,.59583,.74065,-.14375,.1782,.38128,.090745,.23095,-.074912,.06153,.12158,.018713,.34466,.25065,.24443,-.10432,1.8078,.77921,.54224,-.1821,.47568,.74781,.58168,.02778,.32489,1.0448,-.077362,.32227,-.047404,-.33059,-.039291,.23171,1.0791,.16394,-.043724]},{k:3,dilation:8,residual:!0,w:{shape:[48,48,3],scale:.02836204320192337,data_b64:"ASkMAg4A/gD2AfcEBPAE/A78ANACAuz9Af7+AvwA/xD//tn9AgkCAvQCAQf+/wb+Bg8C/vX//fkABAoD/v7//+4JAhcCAwgB/A8D/w8B/f3/AOYA/x8D/vQKAuoB/g3//+YA/+UA/eoAAfsBAwr//+0BAgkAAe0C//kA/tz9AP7+/xH//+D9A+4B/vwB/xcB/vwKAhL/AfP+AQcDARX/AQD9AO4CAO//AfoDAPAAAOb/AAX/AfkBAf4CAO4AAQoAAvsAAAAAAQABAfT///gBAg8KAQv/Ae4BAfMAARX//wYAAAUA/wMB/w8I//sA//wAAAQA/+oA/+v/AP0BAPgAAfX+AhQDAvMCABIDAAH//gH+/84AAPwAAPoC/wsA/wX+AvsM/P0C/gjzAhoE/+4D/v4D/+wEAPXz/+v8ARP/Buj//eH9/e4E/uEE/P8C/gP9BvMEAwoE//YC9vD//wMB/wkJ/g8DCiQF+/f8AeAA/wD7AwQABBkBAgr/Ae8GA/QA/Q0ECRkGA+78/gL/+979/PT7AQ8GA/kEBu/9AgED/fL8Avb+Aaz//80GAwMAAhH//gsE9tcC9R3tChkF+vMCAP/+/s4CBuvy/vkBARr/Ag7/BvH9/v0DBgQD/fH8/v39B/4DCCAE/gUD+/cDAP8BAugIBhT/BxQCBAYBAvT8/fD8AfAA/A4H/gMCBdgAAfUBAfAE/wYAAe/9/wAA/RED/fj9/vwHAgQBAQEE/vAA/QD8Ax8BAtf//tYHAe//Ax3+AQYGAPwAAf8BAAUAAOEAAAL/AAEAAAYBAPv/AAMA//4AAPcAAAsAAAQBAAEAAAYAAAEAAAIAAAIAAAEAAAEAAAcGAP0A/wAA/wIAAP0AAAQBAAIAAAIAAAIEAP4AAPkAAAMAAP4AAfwAAP8AAAAAAAEBAAEAAP8AABoAAAAAAf4AAP8AAAQA//QAAP8AAP4BBh0HCfUBBALvAPoCBhgE+jIH/+wCAPL0AAL//wn+/gcB9uz+BRQDAfQB/gT//wH/BwAC/QMB//sBCR4C//wB/OsC/xEFAAIC/P399+v9/wH8/xICAAoC/vD8/+MC+uUA/gcDAhUAAAH9Afn/BQIDAu//AQQDAf8DAvz+++YA/vX//Q3//tP+Bd0B/PoA//r+APME/+3//gUAAfsCAPgA/v0DAfIAAQIBAP/+APYAAgj+AP3///IA//8CAQEAAP8AAAMC////AP///wUA/wT/AP0CAfsB//3/AAf//wAAAP4AAQsA/wH/ARMBAP8AAOEA/xcAAfsAAQX+AP8AAA0B//f/AAcB/xb//+0AAAQBAfsAASwBAfP//wABAPkAAPX/BAoD/v0AAgwGAAP9/vn+AAQAAAT9AgAG/ff6AAEA/gcA//wC/wAAAP0FAf4B/xIB/fb8//3+/w/+/v4A/wIBAP0B//P//f3+/P0BAQQAAv0FAf8AAQj+AAT/AQL+AP/+//wAAQEABAwB/////vv/APsC/v/+Af7+/fz8AQECBfgAAQABAfL//An9AAAAAfME/vz+Af8A/+z5//8EAgkBAPj///8G/uL6AwIIAP8BBPcD/xT9AfsC+gX0/wcAAQ8BAwUGAfwBA/IGAfgAAf0CBRoHAxH/AgYCAvkB/fn//QX5/f//AAEDAv0H/vsDAP4DABUB/gL++uT/AAIBAQUB/woABPgD/fkABRkIAff6+P7+AQcA/wkCBPIFAQEC/hb+AfoDAPIAAP4CAAz/AAQAAAUAAAT/AAgCAP7+AOAA//gAAP8BAAMAAAoCAAIAAP8A////AP0AAAQAAPkAAA0AAAwDAAD///8A/wIAAPgAAAQBAP0AAAX/AAYCAAkAAPwAAAcAAAIAAQQBAPwAAAYAAAQA/wIAAAQA/wD/AAABAQMAAAEAAAMA/wUAAAIAAPwB/REAAQX+AAD8AvsAAPMCAQkBAOoBAfn5Af0C//v9BiL+/+P8/+wAAO0CAN/9AP79/hID/wwA//v/AAoC/+v//+X8/wYD//UAAhn+Afv7Af79ARsC/wsJAP3/AfABAQwC/xAEAsP9/uP+APD/AAsEAQX//goBAxsAAfcA//kB//UBATEA/+n/AfoDAP8B/wgA/gIDAAMAAPj+AvYBAf8AAP8BAOkCAO/8AAkEAPcAAv8AAOz+AAAA/vr9//n/AAIBAPoCAP8AAQICAfwAAAQBAvwEAAD/ABUBAfEAAAv+APr9ABAAAAQCAAwEAPwBAO0BAAIA//n+/vT/APgBAAoBAA7/AQICAAkAAQ8DAAn+/v3/ABYAAA0BAfQCAPoB//7///z9/P7//v/+AAD9AP///f77/f8A///+/Pr//fr+APv///79Afr8/AD8/fv9AfwAAP7+/wIBAf0A/PwC+/4A/Pz7/QD////8+/8A+/7+/vr9/QID/P3///v7//39/gL9Av79/f0EAf/+//v7AP3+AP8B/vz9/P3+AQD//P8AAf4B+wD8+gD7/fsA/f79+/0BAyEKAgoB/Q30+xsAAOoEAxD/AbYCA/T7/vUA/xsA/xb//9T8//IGAAAD/9L7AgX/AQcCBQACAgIAAPwBAgH//ewDAhUCAOsD+hEC//r9ARD+AQb//f0GAPEEA8gF/xb//tUBAv3+AO/7AgP/AP0A/wP//fb+AfkCAyIB/9T/AgD9APgA//3+//EHAhYC/RT+AP//AP0AAAQBAAAAAAIAAAgAAAEAAAQAAAAAAPwA//0AAAsAAAkAAPz/AOUAAP4AAPwAAP4AAP8AAAAAAP8AAPsAAP4AAAIAAAAAAAgAAAIAAP0AAAQAAPwAAAUAAPwAAAAAAP8AAAQBAAAAAPgAAAMAAPwAAAYAAAAAAAIAAP8AAPoAAAQAAAEAAP4AAP8AEfsYCfcABe/fBBYE6f0CA/z69/gACxzy7YEFAQP+9Qj9+/j8/gUAEvANDff+91P88d4F//4J9gn/9PIC+fgBDAEL+w0G9PoG6u/2DAT9D+T5DAD/DS0A+Qf9CPwC+AIBABYEAAP8Cv8B/fr/+wUEAvr99voQCPgG5AIA8PYGI+sAAA//Bgv+7pr/8gT9Afz6+wYJAf3/AOX9APYDAA4CAeIB/vME/+f9AgoDAAcAA7sC/wH9AfkA/gD9/wIBAAcAAusEAfsAAgMCAf4BAf7/Ag4LAPkAAtkBAQsA/wL9AAP7//8B/gkD/hILAAQEAPYDABAA//cA/eUAAPgAAegB/wwAABsD////Ag4DAPz7/Qj9AA0AAPwAA/UCAegC/xsA/vkBAgACAPT8/xIAAg0A/Q/5AOABAO4BAf8CAAoAAN8D//kBAAkCAfj/AAcAAAIA/wL+/8ICAOsBAQIAAiQBAP//AAj/ARQBAhAB//wAAQEAAfL9ABoAAQQB//wB/w//AeL/AOr//+z//+sBAAEAAfH/AAAA//sCAf0B//UA/g7+ANwB/+D/AgIDAAkAAhH/AwQF/vcAAAcC/wEAAO3//wcAAAYCAQID///+/wMA/xAA/+4A/wEA/gj7AfoCAPoA/+UDAQb+Af0A/f4A/gAA/v8CAgoA//EB/QL+/vwBAPYA/vkAAPwAAAcD/gsCAfr///MDAQMBAwcA/vsA/Pz//w0BAP3+/wIBA/UBAQD+AQf/APkAAvIC/goBAvkCAOsB/hASAg4AAu72ABECAv0DACL+AekDAPH3AfQB/+T/AwwD/fr8/woBAfP//v/+AAkAA/kF/QMD/+UAAQT+AAYB/foNARcBAQQDA+4A/fkD/gn+APr+AyEFAAwJAPYCAAwBAPIAAgL+/+P//vcA/+z//9n9Aw4DAO0CAw4E//v+/QL/APcBAN8AAu4GAcUAAhH+/AsJBvQC/QrsAfAFAgUE/goBAM8AA+f7//cAARoD/98D/vr//AEC//cBAwr+AgL/B/oD+tQB//sA/vsBCQgE/vsOABL5AhkB/wH+AB4E//D9AfkA/AABAAsD/ub+Afv//90A/xAEAfH8//AAAQUAAP4AAxII/wcB+vECAPv//wD9AQcAAdf//+cD/PH/AQP8/gP0+f/+E/4b+er7EhT59vkH/Pz1+dQM5wPh///7CP8G9QH5+/wC9P3uAPwBChQN3OLB9wMABvcBBQca+gL7/fID9/z2AwbyCREPBAz1AQYEAv77CgoEGBEQ+fDhCggI8wUAAAAR/9UJAwD9+wL3+vv+6unp1ezV/wMD+gnt6evdBQYF3+Xf9f79AQIREhAPBf4E/xsB/vj0BwUBAv0CAfr9Av0F//T5//IDACEAAfcB+/n+AvUD+wP8/PwAAAX/B/IDAwwD/fwF/gkB/u4EAgIHBP//AQEEA/QD/eMA/Ab9AQz/BQkDAQAF/g8C/vn//gQBAfgA//D8/uUD/Lr6/PoBBfwDAPAEBBAGAA3//PP+/db+A9oABP0I//v//w3+AhAF//oA/wQCAP3///D//wH+APsBAQgC//UAAAYA/ggA//UBAAEAAAX+APoBAPwAAP8AAQcAARgA//YA//cBAAYDAAkAANYA/fr//wT/Af0BAP8AAAAB/wsEAAMAAPoAAO0CAAwBAggB/w8A/vb//xEAAPj/AO8BAQ4B////AQj/AfX/AewB/wUAAQwB//gB/hkGBv0BAwfuAhMHBO8C/hH9/uoE//D8Afb+AAYB/ff7+eP7//wBAfQC/QoB/AcACBMH/vz//wEC/vT9APkBAQ8G/g8BBfsDFA7/AO/7/Aj9/v8BAA3+//YE/AwCAvYAABwEAP7//+f9/u4B/w4F/eoBA/ICAOcAAwkEAfT9+/n9AN8BAdf+BvEEAAX//xYC+///AQIAAPr7APkFAv4CAfoA//4FAOT6AQoHAAABAvUDAAr+AAAB/Qj5/wEAARMAAQkGAQsAAfMEAgcAAfkAAQkFAgv/AgsCAgAB/wv//wL5/vz/AAUC/wEF/fgCAP0DAP7//gMA++v/AP8BAQcA/wb9AgADAAMBAwwFAfv7+gP+/wQAAA8BBe4DAf4C/hL++/3++vz//wEA/AEA/wH//f4BAf7//f39AP37Af3///4BAf4AAQH9Af7///z7/vz9/P///f///v39+wH++/79/f3+/fz//Pv/AgED/wH/+/7+Afz8AAD//Pv9/v78APv8Afz7/v3/AAD7/vz8+f4AAAD8/gH/AAEA/P///AD9/P78AQL+//79AP7///z9AP4BAgULBhADBf7v/OUEA/UCAg78Av4B//j0/wD/AAz+AAAA/PP8/vMBAfYD+vIAAAAAAAkB/gwD/wIB+gH+/dsC+wcJ/vQA/fQCCQf+/vX9/wT9BhsEBgUGAvYA+vsE/+X+/yn+AwUC/u/6AgEA/uj++vH8AA0FA/IFAQz9BPoA+/MA/fz/Avj9AwEF/fn///j+/RoKAQT+/AL3A/sE/+AFAs79/9oDAu79AfoBAA3+/xwE/eQBAQIBA+kBABcDAQn8BfsDARf+AQP///ICAuz+AvgM/xMAAv0C9ugCAP0HAAD/ANwB/BgF/hIJBAcAAfoAAe8A//YC/+IAAhT/Acv+AOgGAQMBAbQEAQgG//38/gf+////APL9/+kE//ED/yEBCPkAAAAA/wUAAf0AAf0A/gMAAQAAAf0AAAIAAP0AAAMAAP4AAAIAAAAAAAAAAPUAAPwBAAAAAAMAAAAAAAMACPT/AP4AAP0AAfsAAAMAAAAAAQEAAAEAB/QAAAEAAP0AAP8BAf0AAP8AAAAAAP0AAAH/AQAAAP8AAfsA/wEA/wUAAAAAAAAAAP4AAAIAAP8A/iAJ/RL+Aev7BdgBBu8FBMEAANgE/+j+BQMBAiH+/wsC/f//Afr//98A/gUC/wb8BQcDANL8/fcEAe0FAQUBAO0CAf7/AAsAAxoB/wb9+vX+/fIB+Rn+/Q4KAiACAgAC/xz8/NgA+tf/AREEAPr//PgFARUBAdECAfIDAgP9/P/+/9cA/+r9BfAABO4C/xkA/QAC/P39/gL+AQL9//4A/QH/AP///f4A/gEBAf3+/v3+/gMA/AH//AD//wEA/gAAAv4D/v8AAf8A/v/9AvwB/v8B/v8A//0B/QD/AP8CAf/9/wAB+wD8/QH+/f39/f0A/gAA/v0BAQL9/P4A/f79/P7+Af8C/f//Av7+//7+/fwA/AEC/wD/Af3+/gD8Af39APwJAAD/Afr8/wYCARQB/wH9AfQBAOn9AAUCAPkAAvH/AAkAAPMA//EBABL/AAUA/gAEAPQCAOIBAN8BAPwBAAYJAeT+/w8CAvYAABUAAAD/APn/AQkAAhAH//wBAOsBARwBAe///+UAAAH/AAkBAPv/ARYDAAsBAPsCAAMB/wH+APj//wIAAPUEAAEBAAT/BfcEAwQA/wXxAwQF/wUE/Br9AeMAAvH1Af7/ABYBAPQA/wMAAQICAAsDAv3+/wL9BAX/AA8CAA4C++4F/u0D/f8O/vb3/+v+/f79AAUA/f/9AO///wkH/v8GAAQA/fgC/QkDCSQKAe3//wcAAgoDAfoAAxAGAekB/uf//Pf8AP7//+n//+8A/+oC//UAAP3/+gTzCCQABPf+BBP/Bgz//h4B/wf+/vL9BPv9/v7/At78/A3+AwT/A/wB/Rb9AgkAAfT99vIBANz9DR4CAhsAAuvs+BkEBQv+BRD//gUBAAn/BRoD9P4FANzzAAj+/xMA/cgC/uj6//D6/bkAAQT/A97//gH9BBAAAOT7/gj+/gwBAPL//Ov+Aw7/AQwBAQf9Bgn3+wgNDfwNA/j4Dwnx+P7/+gD5/PQH7v7t/v37Aw0K+wIAAwMBAff6/fwCBwYG3Orn/QQBAfgBAAbv/fztBgMHAPH7AAD9CgX6AQj1AQH9BP39BgoHDQoN/fn2AwcF/gX8AQgFBOIB/OL1+wIA+/v++Pj64vvt/P8B/QgA/fD0AgYG8vL88vv+AAX9DAsBAAMA//AA/gL//wcBAP3/AAUAAAT/Af4AAP4AAAQAAQYAAQMA//YAAP4BAOgA/wEAAAsAAAMAAAUA/vQAAAwA/wYBAfz/APsAABD/AQ0AAAgAAPkAAAH/AAP/Af8BAfkAAQcAAgcBAf3/AAD/Af4B//AAAAYBAPwA/+P/APQAAAAAAQcBAPAAAAYAARwAAPsA//QB+goC/A7yCvgE/O0C/u7+/OcAAfH4/wD9BBn//x0C/e37/e3/+/7+AfEBBAMCBPwC/wADAAwC+wX+AvsBBP8BAAABBvv+AP79AAX9/fP8AxwC/f4E//79AfUAAAUA/dj9/hwDAAT7/u///vYADB4C/hcE//oB+OT7Awf+/ewCAzP/BOz/AukA/f///gn+ABAH//8D/fj0A+oEAAsEBAAA/+YCAfDwAQIAAh0E/wAIA/X8/fIAAdEB//kA//oBBO0FAhEC/fwE/gn3APcDAvYG/+79AQMEBPH8AA8DAOf4AfcAAhIGAA3//vIB//oCASoD/+4B//P+/wH9/gf//fv/AC4HA+UEAA4D/wf//gj//yP//tz+Ad8E/+H+AvH+/hcAAOUAAvP4/xMABfcB/AX+/+P/AO8AAfkBAQX/Ahf9/+78AusBAe3/AA/8AAAA/AoCAAkDAPIDBPH//+cBAQMGAfL///8AAiEBAQT9AQYAAPkCAgQHAf0F/woB/wkBADD//d/8/twAAgwBAw0E/+P//wz/AP7+/gQCAPr//fb//x4B/+sAAfID/sn+AA8A/Pn5Af8B//L5APsFAgQCAfkA//4G/875AhkJAAEBA/QE/w79AfwC+wn1/wQAAQ0AAgoHAgcAAuAGAQEAAfoBA/UCAhD/AwsDAv4B/hr//gj4/f3/AAQDAPcD/fcDAP4DAAkA/QL/+eH/APoBAQYA/wv/A/sD//4ABfsHARn5+BD+AAcAACICBugEAf8C/hj+AwIA/vwBAQwEAAD+//L+/wYBAAX/ARME/ur8AAEA/gwA//gB/wQA/wEAAf0CAAMA/uz/AP/+ABj//v4A/wIA/xf+AP0A/vf//f//AOkBAfYDAPsAAQIAAQj+/wcAAPz+//gCAQIABAwB/gP//fv/AAMB//7+AAEAABT+Ad0AA/EAAfwBAd8B/Q7/AfwBAO8CAAj89vkF/PL7+vMLCOX/+QMJ/gUK/9XvCv3//wAEBgkC8uz8+vsF2xHa//oBBBT6DO0QBwv5EgAP+/sA+fD//BAPDBQCAfQB9Qf55uYD+vn17u3z+foPCggQ8wkABfYE/ukB+ff8/dv38u7/59Xn9wv/C/H+8vv6DvMNBPTy7A/5/esBCvkFCP4KEPgF+Pn6/wMDAQQA//b8Ad4BAfMCAf3/AP4CAPP9AQwCAA8AAg4B//7+AAUA/v/+APQBAAIAAgkEAAUAAf4BAAD/AP8AAf8EAQUBAQEAAQr//+3//wP9//kA/wQEAAkDAOwBAPkB/wMBAAEA/vP/AAwAAAEAAAYAAf0BAA0AAhACAPz+/fX/AA4AAAQAAfYDAPIA/wz/APrk/wL7/AkcBOwAAhb1APoI/P7y++8RAPTiAP3t9wsF+v74A/kB//T6/v0J/Qv7AdjkAwAD/QsC/AwU/QTq9uX99OP0/wXm/hQMAwbu/gIA/f37AAb4/wgGAefgAQsI9AH//wEP/NwBAPzuBfztAPf6/OrtB+jWAv8A/wDz+9Dp+/79AszvAQkBAgEX/wcS/v3/AAn8B+8GAgb/AvP/AgcD//4A//UB/Pz8AP79/vMA/xb7AwgAAvkA++//AAcA/QMABxIB//r+Bwv9At4CAPz5+vwFAAMBAgYAARH+BAP//wMCBAkEAPX9+wEC/P8AAAgA/QP9/+8AAAIA+wIABAT//fX/BO0AAf3+ABQB/fQB/AAAAAsBAun+/gP/Ag8A/wAA/vn8/v7+/gL8/QH8AP4A/gD9/P4BAQIA/AH8Af/+/f7/AQD8///+/f39AQEBAAAA/gL+APsAAP/8APv9Af8A//v//P39//79AAEAAP/9/f38/v/9AP8A/v0BAf4A/wAB/P/+/QH7//////4A+v78/wD+/gH8AQD//v3//QH+AgD9AAD/AP7+APv9/v3+/w4IABr+A/X9AwkDAdgD//IC/94DAOr6//8AAfv/AAoC/vD+AAP/Agb9AgAAAQoAAwcEAeoDAggBAQEAAAUAARMK/yAD/9cAASEA/hADAAP+//n//hIDABMK/wAAABYDALID/xD///UBAPwB/+n/AQX+AeoA/wkA/ucB/wL+/+r/APkAAO0BANwAAOv//hMA"},b:[.40977,.59899,.21644,.22858,1.5047,.2282,1.0961,1.5619,.70156,-1.3602,-.14413,.35846,-.093414,.16863,1.7523,.58493,.69916,.20671,1.4914,.4477,.4493,.32447,.10877,-.72769,.098431,.79216,-.0092255,.35221,.18134,1.5414,.43936,.038611,.20285,.52693,-.65092,.48794,.7451,.045148,.36787,.21284,-1.3916,-2.2047,.010128,.39447,.085648,-.43788,.017951,.31546]}],bio:{w:{shape:[3,48],scale:.004223219584673643,data_b64:"9BAP/t/w+yvAGv0LF/b6/RH3Nv4BWwfyFq/xBfcPCf309Q4I7RITBnex0/fV+Qwa8g4PAADx+u74GfwK//b0HBH5AfwA+wr1Ff74Bfj8CQHy8wz07xMTBgUeAfsO9w0c8w0PACjy+bMuF/0M8vb32RL50f4AqQr3FUT/BPfrCQ3x8w3j7BQTBp1/MfxB+BQb"},b:[.3298,-1.0277,-.017153]},cls:{w:{shape:[120,48],scale:.004936628974974155,data_b64:"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"},b:[2.1812,1.1932,-.12909,.99489,-1.0059,-1.5953,-.73583,-.11399,.73543,.30603,-.61356,.014246,.51264,-.22961,-.77544,.47317,-.036083,.41667,-.2461,-.89269,-.30756,-.84472,-.82134,-.46859,-.87589,-.3564,-1.2778,-.43376,-.31977,-.47586,-.31124,-.59335,-.28646,-.94846,-.53685,-.60465,-1.015,-.36367,-.87949,-.38464,-.2511,-.42145,-.50176,-.66217,-.42143,-.1735,-.36331,-.19983,-.25013,-.43281,-.35854,-.44943,-.53251,-.75929,-.42566,.054378,-.62883,.090769,-.62326,-.34156,-.68823,-.21448,-.60644,-.5597,-.86791,-.48415,-.83884,-.6919,-.48049,-.47518,-.14021,-.35018,-.7899,-.025957,-.44889,-.38806,-.35918,-.29211,-.22144,-.47468,-.43834,-.53023,-.49121,-.30336,-.49787,-.44441,-.46111,-.55548,-.21931,-.80624,-.19708,-.39377,-.59085,-.64261,-.34571,-.49424,-.27933,.12296,-.46782,-.38657,-.57408,-.29697,-.76351,-.54065,-.78931,-.96345,-.2801,-.44264,-.33914,-.68746,-.11425,-.29714,-.15539,.84044,1.1134,-.40905,.44269,.36281,-.58235,-.017571]}};var $=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(e={}){this.weights=oA(e.weights??xA),this.charToId=wA(this.weights.charset),this.defaultBackend=e.backend??"cpu",this.scratch=new j(this.weights)}parse(e,B={}){if(typeof e!="string")return[];let n=e;e=k(e);let t=n.length===e.length,r,f=eA(e.length);if(f.length===1&&f[0].length===e.length){let s=x(e.length),g=z(e,this.charToId,this.idsScratch,s),P=S(this.weights,g,this.scratch);r=this.decodeForward(e,P,0,e.length)}else{let s=[],g=new Set;for(let P of f){let o=e.slice(P.offset,P.offset+P.length),w=x(o.length),D=z(o,this.charToId,this.idsScratch,w),C=S(this.weights,D,this.scratch),u=this.decodeForward(o,C,P.offset,o.length);for(let v of u){let I=`${v.start}:${v.end}`;g.has(I)||(g.add(I),s.push(v))}}s.sort((P,o)=>P.start-o.start),r=s}if(t)for(let s of r)s.span=n.slice(s.start,s.end);return r}decodeForward(e,B,n,t=B.length){let r=t,f=r<=128,s=f?this.bioIdsScratch:new Int32Array(r),g=f?this.clsIdsScratch:new Int32Array(r),P=f?this.bioProbsScratch:Array.from({length:r},()=>new Float32Array(3));for(let D=0;D<r;D++)s[D]=p(B.bioLogits,D*3,3),g[D]=p(B.clsLogits,D*B.nCls,B.nCls),BA(B.bioLogits,D*3,3,P[D]);let o=HA(e,s.subarray(0,r),g.subarray(0,r),P),w=[];for(let D of o){let C=D.tokens.map(([I,l])=>[F[I],l]),u=LA(e,D.start,D.end,ie);if(dA(C)&&u===null)continue;let v=MA(C);w.push({span:D.text,start:D.start+n,end:D.end+n,value:v.value,...v.range?{range:v.range}:{},unit:v.unit??null,currency:u,confidence:D.confidence??0,classes:v.classes})}return w}inspect(e){let B=performance.now();typeof e!="string"&&(e="");let n=k(e),t=eA(n.length),r=new Array(n.length),f=new Array(n.length).fill(!1);for(let P of t){let o=n.slice(P.offset,P.offset+P.length),w=x(o.length),D=z(o,this.charToId,this.idsScratch,w),C=S(this.weights,D,this.scratch);for(let u=0;u<o.length;u++){let v=P.offset+u;if(f[v])continue;f[v]=!0;let I=p(C.bioLogits,u*3,3),l=new Float32Array(3);BA(C.bioLogits,u*3,3,l);let Q=p(C.clsLogits,u*C.nCls,C.nCls);r[v]={ch:o[u],bio:I,bioProb:[l[0],l[1],l[2]],cls:F[Q],clsId:Q}}}let s=this.parse(e),g=performance.now()-B;return{text:n,chars:r,spans:s,ms:g}}modelInfo(){let e=this.weights,B=e.embed.data.length;for(let t of e.conv)B+=t.w.data.length+t.b.length;B+=e.bio.w.data.length+e.bio.b.length,B+=e.cls.w.data.length+e.cls.b.length;let n=e.conv.length?Math.max(...e.conv.map(t=>t.w.shape[0])):e.embed.shape[1];return{version:e.version,params:B,channels:n,embedDim:e.embed.shape[1],vocab:e.embed.shape[0],classes:e.classes.length,layers:e.conv.map(t=>({k:t.k,dilation:t.dilation,residual:t.residual}))}}async parseBatch(e,B={}){e=e.map(o=>typeof o=="string"?o:"");let n=B.backend??this.defaultBackend;if(!(n==="webgpu"||n==="auto"&&e.length>=32&&await sA()))return e.map(o=>this.parse(o,{backend:"cpu"}));let r=e,f=e.map(k),s=new Array(e.length),g=[],P=[];for(let o=0;o<f.length;o++)f[o].length<=128?g.push(o):P.push(o);for(let o of P)s[o]=this.parse(r[o],{backend:"cpu"});if(g.length>0){this.gpu||(this.gpu=new q(this.weights));let o=Math.max(...g.map(Q=>f[Q].length),1),w=x(o),D=g.length,C=new Int32Array(D*w),u=this.charToId.get("<pad>")??0;C.fill(u);for(let Q=0;Q<D;Q++){let b=f[g[Q]],i=z(b,this.charToId);C.set(i,Q*w)}let{bio:v,cls:I}=await this.gpu.run(C,D,w),l=this.weights.cls.w.shape[0];for(let Q=0;Q<D;Q++){let b=g[Q],i=f[b],M=r[b],L=M.length===i.length,a=i.length,c=new Float32Array(a*3),E=new Float32Array(a*l);for(let h=0;h<a;h++)c.set(v.subarray((Q*w+h)*3,(Q*w+h)*3+3),h*3),E.set(I.subarray((Q*w+h)*l,(Q*w+h)*l+l),h*l);let H={bioLogits:c,clsLogits:E,length:a,nCls:l},d=this.decodeForward(i,H,0,a);if(L)for(let h of d)h.span=M.slice(h.start,h.end);s[b]=d}}return s}},gA=null;function AA(){return gA||(gA=new $),gA}function Xe(A,e={}){return AA().parse(A,e)}function Ne(A,e={}){return AA().parseBatch(A,e)}function je(A){return AA().inspect(A)}function Se(){return AA().modelInfo()}function Je(A={}){return new $(A)}var ie=FA(RA,OA);export{F as CLASSES,$ as Parser,Je as createParser,je as inspect,fA as isWebGPUAvailable,Se as modelInfo,k as normalizeText,Xe as parse,Ne as parseBatch,sA as probeWebGPU};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gpu-sankhya",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "Fast char-CNN extraction of Hinglish and Devanagari Hindi numeric quantities, with CPU and WebGPU backends.",
6
6
  "license": "MIT",