gpu-sankhya 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -46,9 +46,15 @@ parse("sava lakh");
46
46
  // [{
47
47
  // span: "sava lakh", start: 0, end: 9,
48
48
  // value: 125000, unit: "lakh", currency: null,
49
- // confidence: 0.95, classes: ["PFX_SAVA", "SEP", "UNIT_LAKH"]
49
+ // confidence: 0.95, classes: ["PFX_SAVA", "SEP", "UNIT_LAKH"],
50
+ // verified: true, tokens: [["PFX_SAVA","sava"],["SEP"," "],["UNIT_LAKH","lakh"]]
50
51
  // }]
51
52
 
53
+ // strict mode: only verified spans come back -- "the right number or
54
+ // nothing" (see "Correct or abstains" below).
55
+ parse("savaa lakhhh", { strict: true }); // []
56
+ parse("savaa lakhhh"); // [{ value: 125000, verified: false, ... }]
57
+
52
58
  parse("mera budget paune do lakh tak ka hai");
53
59
  // [{ span: "paune do lakh", value: 175000, unit: "lakh", ... }]
54
60
 
@@ -105,9 +111,28 @@ interface Sankhya {
105
111
  currency: "INR"|null; // adjacent marker detected outside the span
106
112
  confidence: number; // mean of span-tag softmax probs over the span
107
113
  classes: string[]; // normalised token classes, e.g. ["PFX_DHAI","UNIT_LAKH"]
114
+ verified: boolean; // true iff every token in `tokens` is independently
115
+ // justified by the lexicon -- see "Correct or abstains"
116
+ tokens: Array<[string, string]>; // (class, text) tokens the span decoded to,
117
+ // in order -- for explainability and verification
108
118
  }
109
119
  ```
110
120
 
121
+ ### Correct or abstains
122
+
123
+ The CNN's job is only to *propose* a span and its token classes; a
124
+ deterministic core (lexicon lookups + the arithmetic in `core.ts`) computes
125
+ the value. A span is **verified** when every one of its `tokens` is
126
+ independently justified by the lexicon — a digit run is all digits, a
127
+ separator is whitespace, and every other token's exact (lowercased) text
128
+ is the surface form the lexicon lists for that class — so a verified
129
+ span's value is a pure function of the lexicon and the arithmetic core,
130
+ neither of which is a black box: both are unit-tested (`test/verify.test.ts`,
131
+ `test/core.test.ts`) independent of the model. `strict: true` uses this to
132
+ give you the guarantee "the right number or nothing": it drops every span
133
+ the model tagged but the lexicon didn't corroborate, rather than risk
134
+ returning a value for a spelling the model merely guessed at.
135
+
111
136
  ### API
112
137
 
113
138
  - **`parse(text, opts?) => Sankhya[]`** — synchronous, always CPU. Use
@@ -117,6 +142,11 @@ interface Sankhya {
117
142
  `{ backend: "auto" }` to use WebGPU automatically when it's available
118
143
  *and* the batch has at least 32 texts (otherwise CPU, since GPU
119
144
  dispatch overhead dominates for small batches).
145
+ - **`{ strict: true }`** (on `parse`/`parseBatch`/`Parser.parse`/
146
+ `Parser.parseBatch`, CPU and WebGPU paths alike) — drop any span that
147
+ isn't `verified`, so you only ever get back a span whose value is
148
+ provably a pure function of the lexicon + arithmetic core. Default
149
+ `false` (unverified spans are still returned, with `verified: false`).
120
150
  - **`createParser({ weights?, backend? })`** — build a `Parser` instance
121
151
  around a custom weights JSON (float or int8 form, as written by
122
152
  `python/sankhya/export.py`), instead of the bundled default model. See
@@ -212,21 +242,22 @@ training): 0.925 value accuracy. This number is optimistic — it's testing
212
242
  the model on its own distribution.
213
243
 
214
244
  On two hand-written gold sets, written independently of the generator —
215
- `python/tests/gold.jsonl` (romanised Hindi, 220 sentences / 194 spans)
216
- and `python/tests/gold_deva.jsonl` (Devanagari Hindi, 182 sentences / 151
245
+ `python/tests/gold.jsonl` (romanised Hindi, 227 sentences / 199 spans)
246
+ and `python/tests/gold_deva.jsonl` (Devanagari Hindi, 186 sentences / 155
217
247
  spans) — evaluated against the shipped int8-quantized weights:
218
248
 
219
249
  | gold set | examples | spans | value accuracy | span precision | span recall | span F1 |
220
250
  | --- | ---: | ---: | ---: | ---: | ---: | ---: |
221
- | gold.jsonl (romanised) | 220 | 194 | 0.9536 | 0.9585 | 0.9536 | 0.9561 |
222
- | gold_deva.jsonl (Devanagari) | 182 | 151 | 0.9801 | 0.9867 | 0.9801 | 0.9834 |
223
- | combined | 402 | 345 | 0.9652 | 0.9708 | 0.9652 | 0.9680 |
251
+ | gold.jsonl (romanised) | 227 | 199 | 0.9548 | 0.9502 | 0.9598 | 0.9550 |
252
+ | gold_deva.jsonl (Devanagari) | 186 | 155 | 0.9806 | 0.9806 | 0.9806 | 0.9806 |
253
+ | combined | 413 | 354 | 0.9661 | 0.9635 | 0.9689 | 0.9662 |
254
+ | strict mode (verified spans only) | 413 | 320 covered (0.904) | 1.0000 | — | — | — |
224
255
 
225
- Negatives (zero-gold-span examples, 73 total): 0 false positives.
226
- Miss summary: missed 3, spurious 0, wrong value 0, wrong boundary 9.
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.
256
+ Negatives (zero-gold-span examples, 75 total): 0 false positives.
257
+ Miss summary: missed 1, spurious 1, wrong value 2, wrong boundary 10.
258
+ Per-category value accuracy: digits 0.967, words 0.961, prefix 0.963,
259
+ range 0.889, currency 1.0, multi_unit 0.917, symbol_unit 1.0,
260
+ mixed_script 1.0, long 0.667.
230
261
 
231
262
  For comparison, the previous shipped weights scored, on this same
232
263
  enlarged gold set: 0.9096 (romanised) / 0.9603 (Devanagari) / 0.9322
@@ -323,12 +354,28 @@ Raw per-character BIO/class predictions are cleaned up before evaluation:
323
354
  scans 8 characters past the amount for a trailing marker word (up from
324
355
  a shorter window that missed `"1200 rupees"` — `"rupees"` alone runs to
325
356
  6 characters plus the leading space).
357
+ - **Lone-ambiguous-unit gate**: a span whose only meaningful token is a
358
+ single `UNIT_KHARAB` or `UNIT_MILLION` word, with no preceding
359
+ number/prefix and no detected currency marker, is dropped — `"kharab"`
360
+ (Hindi: usually "broken") and `"mil"`/`"million"` (often just an
361
+ English loanword/fragment) are only genuine amount units when a number
362
+ precedes them. `"unka washing machine kharab ho gaya hai"` no longer
363
+ parses; `"das kharab"`, `"2 mil"`, and `"kharab rupaye"` (currency
364
+ marker present) still parse. Other unit words (`"lakh"`, `"hazaar"`)
365
+ are unaffected.
326
366
  - **Range-connector repair**: a bare `-`/`–`/`—`/`/` between two amounts
327
367
  becomes a `RANGE` tag (spaces around it stay `SEP`) when the left side
328
368
  can end an amount by itself and the right side can start a fresh one
329
369
  (`"2 lakh/3 lakh"`, `"दो-तीन लाख"`) — but not when it's really one
330
370
  compound number, e.g. a prefix glued straight to a unit (`"dedh-lakh"`
331
371
  stays one span, not a range).
372
+ - **Word-connector span merge**: when a whole connector WORD (e.g.
373
+ `"se"`/`"से"`) between two separately BIO-decoded spans is itself tagged
374
+ `RANGE` by the class head, the two spans are merged into one `RANGE`
375
+ span (connector letters → `RANGE`, its flanking spaces → `SEP`) — fixes
376
+ the BIO head splitting a range like `"दो लाख से तीन लाख"` or `"5 hazaar
377
+ se 8 hazaar"` into two separate amounts even though the class head
378
+ correctly tagged the connector word.
332
379
  - **Possessive trim**: a trailing `'s`/`’s` (1-2 letters) is stripped from
333
380
  the end of a word and excluded from the span (`"2 lakh's"` → `"2 lakh"`).
334
381
  - **Confidence filter**: a span's confidence is the mean of the max BIO
@@ -340,6 +387,28 @@ Raw per-character BIO/class predictions are cleaned up before evaluation:
340
387
  space) as one additive amount rather than a `[low, high]` range —
341
388
  genuine ranges (only one side has a unit, or both do but ascending) are
342
389
  unaffected.
390
+ - **R7 — juxtaposed ranges with no connector word**: two adjacent
391
+ coefficient+unit terms with NO `RANGE` token between them at all (e.g.
392
+ `"teen hazaar paanch hazaar"`, `"bees lac pachees lac"`, `"तीन हज़ार
393
+ पाँच हज़ार"`) are evaluated as a `[low, high]` range rather than
394
+ summed, when both terms carry an explicit coefficient and the second
395
+ term's unit is the same size or larger — this is the same shape of
396
+ arithmetic as an explicit range connector, just spoken without one.
397
+ Multiplicative stacking (`"das hazaar crore"`, second term has no
398
+ coefficient), descending additive chains (`"ek lakh dus hazaar"`), and
399
+ cardinal-only juxtaposition (`"do teen lakh"`, already repaired into an
400
+ explicit `RANGE` upstream) are all unaffected; two equal terms
401
+ (`"paanch lakh paanch lakh"`) fall back to plain additive doubling
402
+ rather than a degenerate `[x, x]` range.
403
+
404
+ An optional linear-chain CRF (`--crf`, see `python/README.md`) can replace
405
+ the plain per-character argmax with Viterbi decoding, but experiments on
406
+ this dataset found it doesn't beat the plain model — 0.957 vs. 0.965
407
+ combined gold value accuracy at best — while training ~7x slower and
408
+ occasionally showing unexplained late-training loss blowups; the
409
+ structural rules above already give the decoded label sequence most of
410
+ the coherence a CRF would add. It ships as a tested, opt-in flag; the
411
+ bundled weights do not use it.
343
412
 
344
413
  One more detail that matters more than it looks like it should: the
345
414
  runtime right-pads the character-id array with 24 pad tokens before
package/dist/core.d.ts CHANGED
@@ -32,6 +32,19 @@ export declare function isBareDigits(tokens: Tok[]): boolean;
32
32
  * real amount, so it exempts an otherwise-short span from rule (a):
33
33
  * "1,00,000" (6 digits, comma) is kept, not dropped. */
34
34
  export declare function shouldDropBareDigits(tokens: Tok[]): boolean;
35
+ /** R4: whether a span consisting of a single ambiguous unit word (with no
36
+ * preceding number) should be dropped. "kharab" (Hindi: usually "broken")
37
+ * and "mil"/"million" (often just an English loanword/fragment) are only
38
+ * genuine amount units when a number precedes them ("das kharab", "2 mil");
39
+ * alone they are almost always false positives ("washing machine kharab ho
40
+ * gaya", "mil ke rehna").
41
+ *
42
+ * True when the span's meaningful tokens (ignoring SEP/RANGE/DOT/COMMA/O
43
+ * glue) consist of exactly one token whose class is UNIT_KHARAB or
44
+ * UNIT_MILLION, and there is no CARD_-prefixed/DIGITS/PFX_-prefixed token
45
+ * anywhere in the span. This is class-level (not surface-level), so it
46
+ * needs no lexicon. */
47
+ export declare function shouldDropLoneAmbiguousUnit(tokens: Tok[]): boolean;
35
48
  export declare function mergeLangPacks(...packs: LangPack[]): LangPack;
36
49
  /** Scan up to 8 chars before/after [start,end) for a currency marker. The
37
50
  * window has to be wider than the longest marker word (6 chars, e.g.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- function TA(A){return A.version===2&&Array.isArray(A.conv)}function OA(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 T(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 O(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function wA(A,e){return A*(e-1)/2}function N(A){return{w:O(A.w),b:Float32Array.from(A.b.data)}}function X(A){return{w:T(A.w),b:Float32Array.from(A.b)}}function PA(A){let e=OA(A);if(TA(A)){let g=A.conv.map(t=>{let s=wA(t.dilation,t.k);if(e){let P=t;return{k:t.k,dilation:t.dilation,residual:t.residual,padding:s,w:T(P.w),b:Float32Array.from(P.b)}}let o=t;return{k:t.k,dilation:t.dilation,residual:t.residual,padding:s,w:O(o.w),b:Float32Array.from(o.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:e?T(A.embed):O(A.embed),conv:g,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(g=>{let t=wA(g.dilation,g.k);if(e){let w=A[g.name];if(!w)throw new Error(`missing ${g.name} in weights JSON`);return{k:g.k,dilation:g.dilation,residual:!1,padding:t,w:T(w.w),b:Float32Array.from(w.b)}}let o=A[g.name];if(!o)throw new Error(`missing ${g.name} in weights JSON`);return{k:g.k,dilation:g.dilation,residual:!1,padding:t,w:O(o.w),b:Float32Array.from(o.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:e?T(A.embed):O(A.embed),conv:r,bio:e?X(A.bio):N(A.bio),cls:e?X(A.cls):N(A.cls)}}function GA(A){return Math.ceil(A/8)*8}function U(A){return GA(A+24)}var R=U(128),pA=/[०-९]/g;function k(A){return A.normalize("NFC").replace(pA,e=>String(e.charCodeAt(0)-2406)).toLowerCase()}function DA(A){let e=new Map;for(let n=0;n<A.length;n++)e.set(A[n],n);return e}function G(A,e,n,B){let f=e.get("<unk>")??1,r=e.get("<pad>")??0,g=B??A.length,t=n?n.subarray(0,g):new Int32Array(g);for(let s=0;s<A.length;s++)t[s]=e.get(A[s])??f;for(let s=A.length;s<g;s++)t[s]=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*R),new Float32Array(B*R)];let f=n.length?Math.max(...n.map(r=>r.padding)):0;this.padded=new Float32Array(B*(R+2*f)),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,n,B,f,r){let[g,t,s]=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,D=B.dilation,C=n+2*w;for(let u=0;u<e;u++)r.fill(0,u*C,u*C+w),r.set(A.subarray(u*n,u*n+n),u*C+w),r.fill(0,u*C+w+n,u*C+C);for(let u=0;u<g;u++){let Q=u*n,l=P[u],I=u*e*s;if(s===3){for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let b=v*C,i=I+v*3,d=o[i],L=o[i+1],E=o[i+2];for(let c=0;c<n;c++){let a=b+c;f[Q+c]+=d*r[a]+L*r[a+D]+E*r[a+2*D]}}}else if(s===5){for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let b=v*C,i=I+v*5,d=o[i],L=o[i+1],E=o[i+2],c=o[i+3],a=o[i+4];for(let H=0;H<n;H++){let M=b+H;f[Q+H]+=d*r[M]+L*r[M+1]+E*r[M+2]+c*r[M+3]+a*r[M+4]}}}else{for(let v=0;v<n;v++)f[Q+v]=l;for(let v=0;v<e;v++){let b=v*C,i=I+v*s;for(let d=0;d<s;d++){let L=o[i+d],E=d*D,c=b+E;for(let a=0;a<n;a++)f[Q+a]+=L*r[c+a]}}}if(B.residual)for(let v=0;v<n;v++){let b=f[Q+v];f[Q+v]=(b>0?b:0)+A[Q+v]}else for(let v=0;v<n;v++){let b=f[Q+v];f[Q+v]=b>0?b:0}}return g}function CA(A,e,n,B,f){let[r,g]=B.w.shape;if(g!==e)throw new Error(`head channel mismatch: expected ${e}, got ${g}`);let t=B.w.data,s=B.b,o=e-e%4;for(let P=0;P<n;P++){let w=P*r;for(let D=0;D<r;D++){let C=s[D],u=D*e,Q=0;for(;Q<o;Q+=4)C+=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++)C+=t[u+Q]*A[Q*n+P];f[w+D]=C}}return r}function S(A,e,n){let B=e.length,f=A.embed,r=f.shape[1],g=n.buf(0);for(let w=0;w<B;w++){let C=e[w]*r;for(let u=0;u<r;u++)g[u*B+w]=f.data[C+u]}let t=r,s=n.paddedBuf(),o=1;for(let w of A.conv){let D=n.buf(o);t=yA(g,t,B,w,D,s),g=D,o++}CA(g,t,B,A.bio,n.bioBuf);let P=CA(g,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 g=0;g<n;g++)f=Math.max(f,A[e+g]);let r=0;for(let g=0;g<n;g++){let t=Math.exp(A[e+g]-f);B[g]=t,r+=t}for(let g=0;g<n;g++)B[g]/=r;return B}function p(A,e,n){let B=0,f=-1/0;for(let r=0;r<n;r++){let g=A[e+r];g>f&&(f=g,B=r)}return B}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}`),NA=["UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],XA=["O","SEP","RANGE","DIGITS","DOT","COMMA"],F=["O",...XA.filter(A=>A!=="O"),...mA,...YA,...NA],x=Object.fromEntries(F.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},K={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 J(A){return vA[A]}var SA=new Set(["SEP","RANGE","DOT","COMMA"]),EA=new Set([...SA,"O"]),fA=["PFX_","CARD_","UNIT_"],KA=["PFX_","CARD_","UNIT_"],JA=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 KA.some(e=>A.startsWith(e))}var W=x.O,_=x.SEP,rA=x.RANGE,qA=x.DIGITS,ZA=x.DOT,$A=x.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=[],n=0,B=A.length;for(;n<B;){let f=y(A[n]),r=n+1;for(;r<B&&y(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(F[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 g=-1,t=1/0,s=r[0];for(let o of r){let P=0,w=0,D=1/0;for(let C=e;C<n;C++)A[C]===o?(D===1/0&&(D=C),P++,P>w&&(w=P)):P=0;(w>g||w===g&&D<t)&&(g=w,t=D,s=o)}return s}function hA(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),g=[];for(let t=0;t<B.length;t++){let s=B[t];if(s.end-s.start>=3){g.push([s.start,s.end,s.cls]);continue}let P=t>0?B[t-1]:null,w=t<B.length-1?B[t+1]:null,D=P!==null&&P.end-P.start>=3,C=w!==null&&w.end-w.start>=3,u;if(D&&C){let Q=P.end-P.start;u=w.end-w.start>Q?w.cls:P.cls}else D?u=P.cls:C?u=w.cls:u=r;g.push([s.start,s.end,u])}return g}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=hA(B,e,n),r=new Map;for(let[s,o,P]of f)r.set(P,(r.get(P)??0)+(o-s));let g=-1,t=-1;for(let[s,o]of r)o>t&&(t=o,g=s);return g>=0?F[g]: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),g=lA(f.type,f.start,f.end,n);return!r||!g||!ne(r)?!1:g==="DIGITS"||g.startsWith("CARD_")||g.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 g=f[r],{type:t,start:s,end:o}=g;if(t==="digit"){for(let C=s;C<o;C++)B[C]=qA;continue}if(t==="space"){let C=!1;for(let Q=s;Q<o;Q++)if(e[Q]===rA){C=!0;break}let u=C?rA:_;for(let Q=s;Q<o;Q++)B[Q]=u;continue}if(t==="letter"){for(let[C,u,Q]of hA(e,s,o))for(let l=C;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,D=_;if(o-s===1){let C=A[s];(C==="."||C===",")&&P==="digit"&&w==="digit"?D=C==="."?ZA:$A:JA.has(C)&&re(f,r,e)?D=rA:D=_}for(let C=s;C<o;C++)B[C]=D}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 bA(A){return A!==void 0&&A>="0"&&A<="9"}function ge(A,e,n){if(n<=e||!bA(A[n-1]))return n;let B=n;for(;B<A.length&&bA(A[B]);)B++;return B}var se=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 s=B[t];if(s.end-s.start>=3){r.push(s.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,D=P!==null&&P.end-P.start>=3;if(w&&D){let C=o.end-o.start,u=P.end-P.start;r.push(u>C?P.cls:o.cls)}else if(w)r.push(o.cls);else if(D)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,g)=>A[g]);for(let[r,g]of n){let t=g-r;if(t===0||t>se)continue;let s=!1,o=!0;for(let w=r;w<g;w++)A[w]===1||A[w]===2?s=!0:o=!1;if(!s||o)continue;let P=oe(e,r,g);if(!(P===null||!tA(F[P]))){for(let w=r;w<g;w++)f[w]=2;f[r]=1}}return f}function Pe(A){let e=[],n=0,B=A.length;for(;n<B;)if(y(A[n])==="letter"){let f=n+1;for(;f<B&&y(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 De(A,e,n,B,f){let r=Array.from({length:B.length},(g,t)=>B[t]);for(let[g,t]of f){if(t<=e||g>=n)continue;let s=Math.max(g,e),o=Math.min(t,n),P=g>=e&&t<=n;if(P){for(let w=g;w<t;w++)if(!tA(F[r[w]])){P=!1;break}}if(P){t-g===1&&F[r[g]].startsWith("UNIT_")&&_A.has(A[g])&&t<A.length&&y(A[t])==="letter"&&(r[g]=W);continue}for(let w=s;w<o;w++)tA(F[r[w]])&&(r[w]=W)}return r}function Ce(A,e,n,B){let f=Array.from({length:B.length},(t,s)=>B[s]),r=A.slice(e,n);iA.lastIndex=0;let g;for(;g=iA.exec(r);)for(let t=e+g.index;t<e+g.index+g[0].length;t++)f[t]=W;return f}function HA(A,e,n,B){let f=A.length,r=Pe(A),g=fe(e,f);g=we(g,n,r);let t=[],s=null;for(let w=0;w<f;w++){let D=g[w];D===1?(s!==null&&t.push([s,w]),s=w):D===2||s!==null&&(t.push([s,w]),s=null)}s!==null&&t.push([s,f]);for(let w=0;w<t.length;w++)t[w]=[t[w][0],ge(A,t[w][0],t[w][1])];let o=Array.from({length:f},(w,D)=>n[D]),P=[];for(let[w,D]of t){let C=A.slice(w,D),u=Array.from({length:D-w},(c,a)=>o[w+a]),Q=te(C,u);for(let c=w;c<D;c++)o[c]=Q[c-w];o=De(A,w,D,o,r),o=Ce(A,w,D,o);let l=w,I=[];for(let c=w+1;c<=D;c++)(c===D||o[c]!==o[l])&&(I.push([o[l],l,c]),l=c);let v=0,b=I.length;for(;v<b&&EA.has(F[I[v][0]]);)v++;for(;b>v&&EA.has(F[I[b-1][0]]);)b--;let i=I.slice(v,b);if(i.length===0)continue;let d=i[0][1],L=i[i.length-1][2];if(!i.some(([c])=>WA(F[c])))continue;let E=null;if(B){let c=[];for(let a=d;a<L;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:L,text:A.slice(d,L),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,""),g=parseFloat(r);e.push(["NUM",Number.isNaN(g)?0:g])}n="",B=!1};for(let[r,g]of A)r!=="SEP"&&(r==="DIGITS"||r==="DOT"||r==="COMMA"?(n+=g,B=!0):(f(),e.push([r,g])));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,g=null;function t(s){let o=Qe(r,g);if(s===null)n+=o*1;else{let P=J(s);B!==null&&P>B?n=n*P:n=n+o*P,B=P,(f===null||P>J(f))&&(f=s)}r=null,g=null}for(let[s,o]of e)if(s==="NUM")r!==null&&t(null),r=o;else if(uA(s)){r!==null&&t(null);try{r=aA(s)}catch{}}else if(QA(s))g!==null&&t(null),g=s;else if(cA(s))t(s);else continue;return(r!==null||g!==null)&&t(null),[n,f]}function m(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,g=n+1;for(;;){let t=g;if(t<A.length&&A[t][0]==="SEP"&&t++,t<A.length&&A[t][0]===B){for(let s=g;s<=t;s++)r+=A[s][1];g=t+1;continue}break}e.push([B,r]),n=g}else e.push(A[n]),n++}return e}function dA(A){try{let e=A.map(D=>D[0]),n=ce(A),B=[[]];for(let[D,C]of n){if(D==="RANGE"){B.length<2&&B.push([]);continue}B[B.length-1].push([D,C])}let f=B.filter(D=>D.length>0).map(D=>ue(D));if(f.length===0)return{value:0,range:null,unit:null,classes:e,currency:null};if(f.length===1){let[D,C]=f[0];return{value:m(D),range:null,unit:C?K[C]??null:null,classes:e,currency:null}}let[r,g]=f[0],[t,s]=f[1];if(g!==null&&s!==null&&r>t)return{value:m(r+t),range:null,unit:K[g]??null,classes:e,currency:null};let o;g===null&&s!==null?(r=r*J(s),o=s):o=g!==null?g:s;let[P,w]=r<=t?[r,t]:[t,r];return{value:m(P),range:[m(P),m(w)],unit:o?K[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 MA(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 FA(...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 LA(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(),s=[...B.currency_markers_before??[]].sort((D,C)=>C.length-D.length);for(let D of s){let C=D.replace(/\.+$/,"").toLowerCase();if(t.endsWith(D.toLowerCase())||t.endsWith(C))return"INR"}let P=r.replace(/^\s+/,"").toLowerCase(),w=[...B.currency_words_after??[]].sort((D,C)=>C.length-D.length);for(let D of w){let C=D.toLowerCase();if(P.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 xA={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=`
1
+ function XA(A){if(A.crf)return{trans:Float32Array.from(A.crf.trans.data),start:Float32Array.from(A.crf.start.data),end:Float32Array.from(A.crf.end.data)}}function NA(A){return A.version===2&&Array.isArray(A.conv)}function YA(A){return A.quantized!==void 0}function jA(A){let e=atob(A),t=new Int8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)<<24>>24;return t}function x(A){let e=jA(A.data_b64),t=new Float32Array(e.length);for(let n=0;n<e.length;n++)t[n]=e[n]*A.scale;return{shape:A.shape,data:t}}function m(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function cA(A,e){return A*(e-1)/2}function j(A){return{w:m(A.w),b:Float32Array.from(A.b.data)}}function S(A){return{w:x(A.w),b:Float32Array.from(A.b)}}function uA(A){let e=YA(A);if(NA(A)){let f=A.conv.map(B=>{let a=cA(B.dilation,B.k);if(e){let D=B;return{k:B.k,dilation:B.dilation,residual:B.residual,padding:a,w:x(D.w),b:Float32Array.from(D.b)}}let C=B;return{k:B.k,dilation:B.dilation,residual:B.residual,padding:a,w:m(C.w),b:Float32Array.from(C.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:e?x(A.embed):m(A.embed),conv:f,bio:e?S(A.bio):j(A.bio),cls:e?S(A.cls):j(A.cls),crf:XA(A)}}let t=A.layers??3,n=A.dilation??2,r=[{name:"conv1",k:3,dilation:1},{name:"conv2",k:5,dilation:1},{name:"conv3",k:3,dilation:n}];t===4&&r.push({name:"conv4",k:3,dilation:4});let s=r.map(f=>{let B=cA(f.dilation,f.k);if(e){let o=A[f.name];if(!o)throw new Error(`missing ${f.name} in weights JSON`);return{k:f.k,dilation:f.dilation,residual:!1,padding:B,w:x(o.w),b:Float32Array.from(o.b)}}let C=A[f.name];if(!C)throw new Error(`missing ${f.name} in weights JSON`);return{k:f.k,dilation:f.dilation,residual:!1,padding:B,w:m(C.w),b:Float32Array.from(C.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:e?x(A.embed):m(A.embed),conv:s,bio:e?S(A.bio):j(A.bio),cls:e?S(A.cls):j(A.cls)}}function SA(A){return Math.ceil(A/8)*8}function z(A){return SA(A+24)}var L=z(128),JA=/[०-९]/g;function y(A){return A.normalize("NFC").replace(JA,e=>String(e.charCodeAt(0)-2406)).toLowerCase()}function iA(A){let e=new Map;for(let t=0;t<A.length;t++)e.set(A[t],t);return e}function G(A,e,t,n){let r=e.get("<unk>")??1,s=e.get("<pad>")??0,f=n??A.length,B=t?t.subarray(0,f):new Int32Array(f);for(let a=0;a<A.length;a++)B[a]=e.get(A[a])??r;for(let a=A.length;a<f;a++)B[a]=s;return B}function tA(A){if(A<=128)return[{offset:0,length:A}];let e=[],t=112,n=0;for(;n<A;){let r=Math.min(128,A-n);if(e.push({offset:n,length:r}),n+r>=A)break;n+=t}return e}var J=class{buffers;padded;bioBuf;clsBuf;constructor(e){let t=e.conv,n=Math.max(e.embed.shape[1],...t.map(s=>s.w.shape[0]));this.buffers=[new Float32Array(n*L),new Float32Array(n*L)];let r=t.length?Math.max(...t.map(s=>s.padding)):0;this.padded=new Float32Array(n*(L+2*r)),this.bioBuf=new Float32Array(e.bio.w.shape[0]*L),this.clsBuf=new Float32Array(e.cls.w.shape[0]*L)}buf(e){return this.buffers[e%2]}paddedBuf(){return this.padded}};function KA(A,e,t,n,r,s){let[f,B,a]=n.w.shape;if(B!==e)throw new Error(`channel mismatch: expected ${e}, got ${B}`);let C=n.w.data,D=n.b,o=n.padding,g=n.dilation,v=t+2*o;for(let P=0;P<e;P++)s.fill(0,P*v,P*v+o),s.set(A.subarray(P*t,P*t+t),P*v+o),s.fill(0,P*v+o+t,P*v+v);for(let P=0;P<f;P++){let c=P*t,l=D[P],Q=P*e*a;if(a===3){for(let w=0;w<t;w++)r[c+w]=l;for(let w=0;w<e;w++){let E=w*v,R=Q+w*3,H=C[R],F=C[R+1],h=C[R+2];for(let u=0;u<t;u++){let i=E+u;r[c+u]+=H*s[i]+F*s[i+g]+h*s[i+2*g]}}}else if(a===5){for(let w=0;w<t;w++)r[c+w]=l;for(let w=0;w<e;w++){let E=w*v,R=Q+w*5,H=C[R],F=C[R+1],h=C[R+2],u=C[R+3],i=C[R+4];for(let b=0;b<t;b++){let _=E+b;r[c+b]+=H*s[_]+F*s[_+1]+h*s[_+2]+u*s[_+3]+i*s[_+4]}}}else{for(let w=0;w<t;w++)r[c+w]=l;for(let w=0;w<e;w++){let E=w*v,R=Q+w*a;for(let H=0;H<a;H++){let F=C[R+H],h=H*g,u=E+h;for(let i=0;i<t;i++)r[c+i]+=F*s[u+i]}}}if(n.residual)for(let w=0;w<t;w++){let E=r[c+w];r[c+w]=(E>0?E:0)+A[c+w]}else for(let w=0;w<t;w++){let E=r[c+w];r[c+w]=E>0?E:0}}return f}function QA(A,e,t,n,r){let[s,f]=n.w.shape;if(f!==e)throw new Error(`head channel mismatch: expected ${e}, got ${f}`);let B=n.w.data,a=n.b,C=e-e%4;for(let D=0;D<t;D++){let o=D*s;for(let g=0;g<s;g++){let v=a[g],P=g*e,c=0;for(;c<C;c+=4)v+=B[P+c]*A[c*t+D]+B[P+c+1]*A[(c+1)*t+D]+B[P+c+2]*A[(c+2)*t+D]+B[P+c+3]*A[(c+3)*t+D];for(;c<e;c++)v+=B[P+c]*A[c*t+D];r[o+g]=v}}return s}function K(A,e,t){let n=e.length,r=A.embed,s=r.shape[1],f=t.buf(0);for(let o=0;o<n;o++){let v=e[o]*s;for(let P=0;P<s;P++)f[P*n+o]=r.data[v+P]}let B=s,a=t.paddedBuf(),C=1;for(let o of A.conv){let g=t.buf(C);B=KA(f,B,n,o,g,a),f=g,C++}QA(f,B,n,A.bio,t.bioBuf);let D=QA(f,B,n,A.cls,t.clsBuf);return{bioLogits:t.bioBuf,clsLogits:t.clsBuf,length:n,nCls:D}}function rA(A,e,t,n){let r=-1/0;for(let f=0;f<t;f++)r=Math.max(r,A[e+f]);let s=0;for(let f=0;f<t;f++){let B=Math.exp(A[e+f]-r);n[f]=B,s+=B}for(let f=0;f<t;f++)n[f]/=s;return n}function X(A,e,t){let n=0,r=-1/0;for(let s=0;s<t;s++){let f=A[e+s];f>r&&(r=f,n=s)}return n}var WA=new Float32Array(L*3),VA=new Int32Array(L*3);function sA(A,e,t,n){if(e===0)return;let{trans:r,start:s,end:f}=t,B=WA,a=VA;for(let g=0;g<3;g++)B[g]=Math.fround(s[g]+A[g]);for(let g=1;g<e;g++){let v=(g-1)*3,P=g*3,c=g*3;for(let l=0;l<3;l++){let Q=-1/0,w=0;for(let E=0;E<3;E++){let R=Math.fround(B[v+E]+r[E*3+l]);R>Q&&(Q=R,w=E)}B[P+l]=Math.fround(Q+A[c+l]),a[P+l]=w}}let C=(e-1)*3,D=-1/0,o=0;for(let g=0;g<3;g++){let v=Math.fround(B[C+g]+f[g]);v>D&&(D=v,o=g)}n[e-1]=o;for(let g=e-1;g>0;g--)o=a[g*3+o],n[g-1]=o}var qA=["PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE"],ZA=Array.from({length:99},(A,e)=>`CARD_${e+1}`),$A=["UNIT_SAU","UNIT_HAZAAR","UNIT_LAKH","UNIT_MILLION","UNIT_CRORE","UNIT_BILLION","UNIT_ARAB","UNIT_KHARAB"],Ae=["O","SEP","RANGE","DIGITS","DOT","COMMA"],d=["O",...Ae.filter(A=>A!=="O"),...qA,...ZA,...$A],O=Object.fromEntries(d.map((A,e)=>[A,e])),EA={UNIT_SAU:100,UNIT_HAZAAR:1e3,UNIT_LAKH:1e5,UNIT_MILLION:1e6,UNIT_CRORE:1e7,UNIT_BILLION:1e9,UNIT_ARAB:1e9,UNIT_KHARAB:1e11},N={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 fA(A){return A in BA}function aA(A){return A.startsWith("CARD_")}function DA(A){return A in EA}function lA(A){return parseInt(A.split("_",2)[1],10)}function p(A){return EA[A]}var ne=new Set(["SEP","RANGE","DOT","COMMA"]),hA=new Set([...ne,"O"]),oA=["PFX_","CARD_","UNIT_"],te=["PFX_","CARD_","UNIT_"],re=new Set(["-","\u2013","\u2014","/"]),se=new Set(["k","K","l","L"]),RA=/['’]([A-Za-zऀ-ॿ]{1,2})(?![A-Za-zऀ-ॿ])/g;function Be(A){return oA.some(e=>A.startsWith(e))||A==="DIGITS"}function fe(A){return te.some(e=>A.startsWith(e))}var V=O.O,T=O.SEP,W=O.RANGE,ae=O.DIGITS,De=O.DOT,Ce=O.COMMA,oe=/\p{L}|\p{M}/u;function M(A){return oe.test(A)?"letter":/[0-9]/.test(A)?"digit":/\s/.test(A)?"space":"punct"}function ge(A){let e=[],t=0,n=A.length;for(;t<n;){let r=M(A[t]),s=t+1;for(;s<n&&M(A[s])===r;)s++;e.push({type:r,start:t,end:s}),t=s}return e}function ve(A,e,t){let n=new Map;for(let C=e;C<t;C++){let D=A[C];fe(d[D])&&n.set(D,(n.get(D)??0)+1)}if(n.size===0)return V;let r=-1;for(let C of n.values())C>r&&(r=C);let s=[...n.entries()].filter(([,C])=>C===r).map(([C])=>C);if(s.length===1)return s[0];let f=-1,B=1/0,a=s[0];for(let C of s){let D=0,o=0,g=1/0;for(let v=e;v<t;v++)A[v]===C?(g===1/0&&(g=v),D++,D>o&&(o=D)):D=0;(o>f||o===f&&g<B)&&(f=o,B=g,a=C)}return a}function dA(A,e,t){let n=[],r=e;for(;r<t;){let B=r+1;for(;B<t&&A[B]===A[r];)B++;n.push({start:r,end:B,cls:A[r]}),r=B}let s=ve(A,e,t),f=[];for(let B=0;B<n.length;B++){let a=n[B];if(a.end-a.start>=3){f.push([a.start,a.end,a.cls]);continue}let D=B>0?n[B-1]:null,o=B<n.length-1?n[B+1]:null,g=D!==null&&D.end-D.start>=3,v=o!==null&&o.end-o.start>=3,P;if(g&&v){let c=D.end-D.start;P=o.end-o.start>c?o.cls:D.cls}else g?P=D.cls:v?P=o.cls:P=s;f.push([a.start,a.end,P])}return f}function Pe(A){return oA.some(e=>A.startsWith(e))||A==="DIGITS"}function IA(A,e,t,n){if(A==="digit")return"DIGITS";if(A==="letter"){let r=dA(n,e,t),s=new Map;for(let[a,C,D]of r)s.set(D,(s.get(D)??0)+(C-a));let f=-1,B=-1;for(let[a,C]of s)C>B&&(B=C,f=a);return f>=0?d[f]:null}return null}function bA(A,e,t){let n=e+t;if(n<0||n>=A.length||A[n].type==="space"&&(n+=t,n<0||n>=A.length))return null;let r=A[n];return r.type==="digit"||r.type==="letter"?r:null}function we(A,e,t){let n=bA(A,e,-1),r=bA(A,e,1);if(!n||!r)return!1;let s=IA(n.type,n.start,n.end,t),f=IA(r.type,r.start,r.end,t);return!s||!f||!Pe(s)?!1:f==="DIGITS"||f.startsWith("CARD_")||f.startsWith("PFX_")}function ce(A,e){let t=A.length,n=new Array(t),r=ge(A);for(let s=0;s<r.length;s++){let f=r[s],{type:B,start:a,end:C}=f;if(B==="digit"){for(let v=a;v<C;v++)n[v]=ae;continue}if(B==="space"){let v=!1;for(let c=a;c<C;c++)if(e[c]===W){v=!0;break}let P=v?W:T;for(let c=a;c<C;c++)n[c]=P;continue}if(B==="letter"){for(let[v,P,c]of dA(e,a,C))for(let l=v;l<P;l++)n[l]=c;continue}let D=s>0?r[s-1].type:null,o=s<r.length-1?r[s+1].type:null,g=T;if(C-a===1){let v=A[a];(v==="."||v===",")&&D==="digit"&&o==="digit"?g=v==="."?De:Ce:re.has(v)&&we(r,s,e)?g=W:g=T}for(let v=a;v<C;v++)n[v]=g}return n}function ue(A,e){let t=Array.from({length:e},(n,r)=>A[r]);for(let n=1;n<e-1;n++)A[n]===0&&(A[n-1]===1||A[n-1]===2)&&A[n+1]===2&&(t[n]=2);return t}function HA(A){return A!==void 0&&A>="0"&&A<="9"}function ie(A,e,t){if(t<=e||!HA(A[t-1]))return t;let n=t;for(;n<A.length&&HA(A[n]);)n++;return n}var Qe=24;function Ee(A,e,t){let n=[],r=e;for(;r<t;){let B=r+1;for(;B<t&&A[B]===A[r];)B++;n.push({start:r,end:B,cls:A[r]}),r=B}let s=[];for(let B=0;B<n.length;B++){let a=n[B];if(a.end-a.start>=3){s.push(a.cls);continue}let C=B>0?n[B-1]:null,D=B<n.length-1?n[B+1]:null,o=C!==null&&C.end-C.start>=3,g=D!==null&&D.end-D.start>=3;if(o&&g){let v=C.end-C.start,P=D.end-D.start;s.push(P>v?D.cls:C.cls)}else if(o)s.push(C.cls);else if(g)s.push(D.cls);else return null}return new Set(s).size===1?s[0]:null}function le(A,e,t){let n=A.length,r=Array.from({length:n},(s,f)=>A[f]);for(let[s,f]of t){let B=f-s;if(B===0||B>Qe)continue;let a=!1,C=!0;for(let o=s;o<f;o++)A[o]===1||A[o]===2?a=!0:C=!1;if(!a||C)continue;let D=Ee(e,s,f);if(!(D===null||!CA(d[D]))){for(let o=s;o<f;o++)r[o]=2;r[s]=1}}return r}function he(A){let e=[],t=0,n=A.length;for(;t<n;)if(M(A[t])==="letter"){let r=t+1;for(;r<n&&M(A[r])==="letter";)r++;e.push([t,r]),t=r}else t++;return e}function CA(A){return oA.some(e=>A.startsWith(e))&&A!=="DIGITS"}function Re(A,e,t,n,r){let s=Array.from({length:n.length},(f,B)=>n[B]);for(let[f,B]of r){if(B<=e||f>=t)continue;let a=Math.max(f,e),C=Math.min(B,t),D=f>=e&&B<=t;if(D){for(let o=f;o<B;o++)if(!CA(d[s[o]])){D=!1;break}}if(D){B-f===1&&d[s[f]].startsWith("UNIT_")&&se.has(A[f])&&B<A.length&&M(A[B])==="letter"&&(s[f]=V);continue}for(let o=a;o<C;o++)CA(d[s[o]])&&(s[o]=V)}return s}function Ie(A,e,t,n){let r=Array.from({length:n.length},(B,a)=>n[a]),s=A.slice(e,t);RA.lastIndex=0;let f;for(;f=RA.exec(s);)for(let B=e+f.index;B<e+f.index+f[0].length;B++)r[B]=V;return r}function be(A){let e=new Map;for(let f of A)e.set(f,(e.get(f)??0)+1);let t=-1;for(let f of e.values())f>t&&(t=f);let n=[...e.entries()].filter(([,f])=>f===t).map(([f])=>f);if(n.length===1)return n[0];let r=-1,s=n[0];for(let f of n){let B=0,a=0;for(let C of A)C===f?(B++,B>a&&(a=B)):B=0;a>r&&(r=a,s=f)}return s}function He(A,e,t){if(t.length<2)return t;let n=[t[0]];for(let r of t.slice(1)){let s=n[n.length-1],f=s.end,B=r.start,a=A.slice(f,B),C=a.length,D=0;for(;D<C&&M(a[D])==="space";)D++;let o=D;for(;D<C&&M(a[D])==="letter";)D++;let g=D;for(;D<C&&M(a[D])==="space";)D++;if(o===g||D!==C){n.push(r);continue}let v=f+o,P=f+g,c=[];for(let E=v;E<P;E++)c.push(e[E]);if(d[be(c)]!=="RANGE"){n.push(r);continue}let Q=[];o>0&&Q.push([T,a.slice(0,o)]),Q.push([W,a.slice(o,g)]),g<C&&Q.push([T,a.slice(g,C)]);let w=s.confidence===null||r.confidence===null?null:(s.confidence+r.confidence)/2;n[n.length-1]={start:s.start,end:r.end,text:A.slice(s.start,r.end),tokens:[...s.tokens,...Q,...r.tokens],confidence:w}}return n}function _A(A,e,t,n){let r=A.length,s=he(A),f=ue(e,r);f=le(f,t,s);let B=[],a=null;for(let o=0;o<r;o++){let g=f[o];g===1?(a!==null&&B.push([a,o]),a=o):g===2||a!==null&&(B.push([a,o]),a=null)}a!==null&&B.push([a,r]);for(let o=0;o<B.length;o++)B[o]=[B[o][0],ie(A,B[o][0],B[o][1])];let C=Array.from({length:r},(o,g)=>t[g]),D=[];for(let[o,g]of B){let v=A.slice(o,g),P=Array.from({length:g-o},(u,i)=>C[o+i]),c=ce(v,P);for(let u=o;u<g;u++)C[u]=c[u-o];C=Re(A,o,g,C,s),C=Ie(A,o,g,C);let l=o,Q=[];for(let u=o+1;u<=g;u++)(u===g||C[u]!==C[l])&&(Q.push([C[l],l,u]),l=u);let w=0,E=Q.length;for(;w<E&&hA.has(d[Q[w][0]]);)w++;for(;E>w&&hA.has(d[Q[E-1][0]]);)E--;let R=Q.slice(w,E);if(R.length===0)continue;let H=R[0][1],F=R[R.length-1][2];if(!R.some(([u])=>Be(d[u])))continue;let h=null;if(n){let u=[];for(let i=H;i<F;i++)u.push(Math.max(...n[i]));if(h=u.length?u.reduce((i,b)=>i+b,0)/u.length:0,h<.5)continue}D.push({start:H,end:F,text:A.slice(H,F),tokens:R.map(([u,i,b])=>[u,A.slice(i,b)]),confidence:h})}return He(A,t,D)}function FA(A){let e=[],t="",n=!1,r=()=>{if(n){let s=t.replace(/,/g,""),f=parseFloat(s);e.push(["NUM",Number.isNaN(f)?0:f])}t="",n=!1};for(let[s,f]of A)s!=="SEP"&&(s==="DIGITS"||s==="DOT"||s==="COMMA"?(t+=f,n=!0):(r(),e.push([s,f])));return r(),e}function de(A,e){if(e!==null){let t=BA[e];if(t===void 0)return A!==null?A:1;if(A!==null&&t.op){if(t.op==="sub25")return A-.25;if(t.op==="add25")return A+.25;if(t.op==="add5")return A+.5}return t.standalone}return A!==null?A:1}function gA(A){let e=FA(A),t=0,n=null,r=null,s=null,f=null;function B(a){let C=de(s,f);if(a===null)t+=C*1;else{let D=p(a);n!==null&&D>n?t=t*D:t=t+C*D,n=D,(r===null||D>p(r))&&(r=a)}s=null,f=null}for(let[a,C]of e)if(a==="NUM")s!==null&&B(null),s=C;else if(aA(a)){s!==null&&B(null);try{s=lA(a)}catch{}}else if(fA(a))f!==null&&B(null),f=a;else if(DA(a))B(a);else continue;return(s!==null||f!==null)&&B(null),[t,r]}function U(A){let e=Math.round(A),t=Math.max(1e-6,Math.abs(A)*1e-9);return Math.abs(A-e)<t?e:Math.round(A*1e6)/1e6}function _e(A){let e=[],t=0;for(;t<A.length;){let[n,r]=A[t];if(n.startsWith("PFX_")){let s=r,f=t+1;for(;;){let B=f;if(B<A.length&&A[B][0]==="SEP"&&B++,B<A.length&&A[B][0]===n){for(let a=f;a<=B;a++)s+=A[a][1];f=B+1;continue}break}e.push([n,s]),t=f}else e.push(A[t]),t++}return e}function Fe(A){let e=[],t=0,n=!1;for(let r=0;r<A.length;r++){let[s]=A[r];if(s==="NUM"||aA(s)||fA(s))n=!0;else if(DA(s))e.push([t,r+1,n,s]),t=r+1,n=!1;else continue}return t<A.length&&e.push([t,A.length,n,null]),e}function Le(A,e){let t=FA(A),n=Fe(t);for(let r=0;r<n.length-1;r++){let[,s,f,B]=n[r],[a,,C,D]=n[r+1];if(!(f&&C&&B!==null&&D!==null)||p(D)<p(B))continue;let[o]=gA(t.slice(0,s)),[g]=gA(t.slice(a));if(o<g)return{value:U(o),range:[U(o),U(g)],unit:N[B]??null,classes:e,currency:null}}return null}function LA(A){try{let e=A.map(g=>g[0]),t=_e(A),n=[[]];for(let[g,v]of t){if(g==="RANGE"){n.length<2&&n.push([]);continue}n[n.length-1].push([g,v])}let r=n.filter(g=>g.length>0).map(g=>gA(g));if(r.length===0)return{value:0,range:null,unit:null,classes:e,currency:null};if(r.length===1){let g=Le(n[0],e);if(g!==null)return g;let[v,P]=r[0];return{value:U(v),range:null,unit:P?N[P]??null:null,classes:e,currency:null}}let[s,f]=r[0],[B,a]=r[1];if(f!==null&&a!==null&&s>B)return{value:U(s+B),range:null,unit:N[f]??null,classes:e,currency:null};let C;f===null&&a!==null?(s=s*p(a),C=a):C=f!==null?f:a;let[D,o]=s<=B?[s,B]:[B,s];return{value:U(D),range:[U(D),U(o)],unit:C?N[C]??null:null,classes:e,currency:null}}catch{return{value:0,range:null,unit:null,classes:A.map(e=>e[0]),currency:null}}}function Me(A){let e=!1;for(let[t]of A)if(t==="DIGITS")e=!0;else if(t.startsWith("UNIT_")||t.startsWith("PFX_")||t.startsWith("CARD_"))return!1;return e}function MA(A){if(!Me(A))return!1;let e=0,t=!1;for(let[n,r]of A)n==="DIGITS"?e+=r.length:n==="COMMA"&&(t=!0);return e<=4&&!t||e>=10}var Ue=new Set(["SEP","RANGE","DOT","COMMA","O"]);function UA(A){let e=A.filter(([n])=>!Ue.has(n));if(e.length!==1)return!1;let[t]=e[0];if(t!=="UNIT_KHARAB"&&t!=="UNIT_MILLION")return!1;for(let[n]of A)if(n==="DIGITS"||n.startsWith("CARD_")||n.startsWith("PFX_"))return!1;return!0}function OA(...A){let e=(n,r)=>r.length-n.length,t=n=>[...new Set(n.flat())].sort(e);return{currency_markers_before:t(A.map(n=>n.currency_markers_before??[])),currency_words_after:t(A.map(n=>n.currency_words_after??[]))}}function zA(A,e,t,n){let r=A.slice(Math.max(0,e-8),e),s=A.slice(t,t+8),B=r.replace(/\s+$/,"").toLowerCase(),a=[...n.currency_markers_before??[]].sort((g,v)=>v.length-g.length);for(let g of a){let v=g.replace(/\.+$/,"").toLowerCase();if(B.endsWith(g.toLowerCase())||B.endsWith(v))return"INR"}let D=s.replace(/^\s+/,"").toLowerCase(),o=[...n.currency_words_after??[]].sort((g,v)=>v.length-g.length);for(let g of o){let v=g.toLowerCase();if(D.startsWith(v))return"INR"}return null}var pA={packs:{hi_deva:{forms:{bn:"UNIT_BILLION",cr:"UNIT_CRORE",k:"UNIT_HAZAAR",l:"UNIT_LAKH",lpa:"UNIT_LAKH",m:"UNIT_MILLION",\u0905\u091F\u094D\u0920\u093E\u0908\u0938:"CARD_28",\u0905\u091F\u094D\u0920\u093E\u0928\u0935\u0947:"CARD_98",\u0905\u091F\u094D\u0920\u093E\u0935\u0928:"CARD_58",\u0905\u091F\u094D\u0920\u093E\u0938\u0940:"CARD_88",\u0905\u0920\u0939\u0924\u094D\u0924\u0930:"CARD_78",\u0905\u0920\u093E\u0908\u0938:"CARD_28",\u0905\u0920\u093E\u0930\u0939:"CARD_18",\u0905\u0920\u094D\u0920\u093E\u0908\u0938:"CARD_28",\u0905\u0921\u093C\u0924\u093E\u0932\u0940\u0938:"CARD_48",\u0905\u0921\u093C\u0924\u0940\u0938:"CARD_38",\u0905\u0921\u093C\u0938\u0920:"CARD_68",\u0905\u0922\u093C\u093E\u0908:"PFX_DHAI",\u0905\u0930\u092C:"UNIT_ARAB",\u0905\u0938\u094D\u0938\u0940:"CARD_80",\u0906\u0920:"CARD_8",\u0906\u0927\u093E:"PFX_AADHA",\u0906\u0927\u0940:"PFX_AADHA",\u0906\u0927\u0947:"PFX_AADHA",\u0907\u0915\u0924\u093E\u0932\u0940\u0938:"CARD_41",\u0907\u0915\u0924\u0940\u0938:"CARD_31",\u0907\u0915\u0938\u0920:"CARD_61",\u0907\u0915\u0939\u0924\u094D\u0924\u0930:"CARD_71",\u0907\u0915\u094D\u0915\u0940\u0938:"CARD_21",\u0907\u0915\u094D\u092F\u093E\u0928\u0935\u0947:"CARD_91",\u0907\u0915\u094D\u092F\u093E\u0935\u0928:"CARD_51",\u0907\u0915\u094D\u092F\u093E\u0938\u0940:"CARD_81",\u0909\u0928\u091A\u093E\u0938:"CARD_49",\u0909\u0928\u0924\u093E\u0932\u0940\u0938:"CARD_39",\u0909\u0928\u0924\u0940\u0938:"CARD_29",\u0909\u0928\u0938\u0920:"CARD_59",\u0909\u0928\u0939\u0924\u094D\u0924\u0930:"CARD_69",\u0909\u0928\u094D\u0928\u0940\u0938:"CARD_19",\u0909\u0928\u094D\u092F\u093E\u0938\u0940:"CARD_79",\u090F\u0915:"CARD_1",\u0915\u0930\u094B\u0921:"UNIT_CRORE",\u0915\u0930\u094B\u0921\u093C:"UNIT_CRORE",\u0915\u0930\u094B\u0921\u093C\u094B\u0902:"O",\u0916\u0930\u092C:"UNIT_KHARAB",\u0916\u094B\u0916\u093E:"UNIT_CRORE",\u0917\u094D\u092F\u093E\u0930\u0939:"CARD_11",\u091A\u093E\u0930:"CARD_4",\u091A\u093E\u0932\u0940\u0938:"CARD_40",\u091A\u094C\u0902\u0924\u0940\u0938:"CARD_34",\u091A\u094C\u0902\u0938\u0920:"CARD_64",\u091A\u094C\u0926\u0939:"CARD_14",\u091A\u094C\u092C\u0940\u0938:"CARD_24",\u091A\u094C\u0930\u093E\u0928\u0935\u0947:"CARD_94",\u091A\u094C\u0930\u093E\u0938\u0940:"CARD_84",\u091A\u094C\u0935\u0928:"CARD_54",\u091A\u094C\u0935\u093E\u0932\u0940\u0938:"CARD_44",\u091A\u094C\u0939\u0924\u094D\u0924\u0930:"CARD_74",\u091B\u0903:"CARD_6",\u091B\u0924\u094D\u0924\u0940\u0938:"CARD_36",\u091B\u092A\u094D\u092A\u0928:"CARD_56",\u091B\u092C\u094D\u092C\u0940\u0938:"CARD_26",\u091B\u0939:"CARD_6",\u091B\u093F\u092F\u093E\u0928\u0935\u0947:"CARD_96",\u091B\u093F\u092F\u093E\u0932\u0940\u0938:"CARD_46",\u091B\u093F\u092F\u093E\u0938\u0920:"CARD_66",\u091B\u093F\u092F\u093E\u0938\u0940:"CARD_86",\u091B\u093F\u0939\u0924\u094D\u0924\u0930:"CARD_76",\u091B\u0947:"CARD_6",\u0921\u0947\u0922:"PFX_DEDH",\u0921\u0947\u0922\u093C:"PFX_DEDH",\u0922\u093E\u0908:"PFX_DHAI",\u0924\u093F\u0930\u092A\u0928:"CARD_53",\u0924\u093F\u0930\u0938\u0920:"CARD_63",\u0924\u093F\u0930\u093E\u0928\u0935\u0947:"CARD_93",\u0924\u093F\u0930\u093E\u0938\u0940:"CARD_83",\u0924\u093F\u0939\u0924\u094D\u0924\u0930:"CARD_73",\u0924\u0940\u0928:"CARD_3",\u0924\u0940\u0938:"CARD_30",\u0924\u0947\u0908\u0938:"CARD_23",\u0924\u0947\u0930\u0939:"CARD_13",\u0924\u0948\u0902\u0924\u093E\u0932\u0940\u0938:"CARD_43",\u0924\u0948\u0902\u0924\u0940\u0938:"CARD_33",\u0926\u0938:"CARD_10",\u0926\u094B:"CARD_2",\u0928\u092C\u094D\u092C\u0947:"CARD_90",\u0928\u0935\u093E\u0938\u0940:"CARD_89",\u0928\u093F\u0928\u094D\u092F\u093E\u0928\u0935\u0947:"CARD_99",\u0928\u094C:"CARD_9",\u092A\u0902\u0926\u094D\u0930\u0939:"CARD_15",\u092A\u091A\u092A\u0928:"CARD_55",\u092A\u091A\u0939\u0924\u094D\u0924\u0930:"CARD_75",\u092A\u091A\u093E\u0928\u0935\u0947:"CARD_95",\u092A\u091A\u093E\u0938:"CARD_50",\u092A\u091A\u093E\u0938\u0940:"CARD_85",\u092A\u091A\u094D\u091A\u0940\u0938:"CARD_25",\u092A\u0928\u094D\u0926\u094D\u0930\u0939:"CARD_15",\u092A\u093E\u0901\u091A:"CARD_5",\u092A\u093E\u0902\u091A:"CARD_5",\u092A\u093E\u0935:"PFX_PAAV",\u092A\u0947\u091F\u0940:"UNIT_LAKH",\u092A\u0948\u0902\u0924\u093E\u0932\u0940\u0938:"CARD_45",\u092A\u0948\u0902\u0924\u0940\u0938:"CARD_35",\u092A\u0948\u0902\u0938\u0920:"CARD_65",\u092A\u094C\u0928\u0947:"PFX_PAUNE",\u092C\u0924\u094D\u0924\u0940\u0938:"CARD_32",\u092C\u092F\u093E\u0932\u0940\u0938:"CARD_42",\u092C\u092F\u093E\u0938\u0940:"CARD_82",\u092C\u0939\u0924\u094D\u0924\u0930:"CARD_72",\u092C\u093E\u0908\u0938:"CARD_22",\u092C\u093E\u0928\u0935\u0947:"CARD_92",\u092C\u093E\u0930\u0939:"CARD_12",\u092C\u093E\u0935\u0928:"CARD_52",\u092C\u093E\u0938\u0920:"CARD_62",\u092C\u093F\u0932\u093F\u092F\u0928:"UNIT_BILLION",\u092C\u0940\u0938:"CARD_20",\u092E\u093F\u0932\u093F\u092F\u0928:"UNIT_MILLION",\u0932\u093E\u0916:"UNIT_LAKH",\u0932\u093E\u0916\u094B\u0902:"O",\u0938\u0921\u093C\u0938\u0920:"CARD_67",\u0938\u0924\u0939\u0924\u094D\u0924\u0930:"CARD_77",\u0938\u0924\u094D\u0924\u0930:"CARD_70",\u0938\u0924\u094D\u0924\u093E\u0908\u0938:"CARD_27",\u0938\u0924\u094D\u0924\u093E\u0928\u0935\u0947:"CARD_97",\u0938\u0924\u094D\u0924\u093E\u0935\u0928:"CARD_57",\u0938\u0924\u094D\u0924\u093E\u0938\u0940:"CARD_87",\u0938\u0924\u094D\u0930\u0939:"CARD_17",\u0938\u0935\u093E:"PFX_SAVA",\u0938\u093E\u0920:"CARD_60",\u0938\u093E\u0922\u093C\u0947:"PFX_SAADHE",\u0938\u093E\u0922\u0947:"PFX_SAADHE",\u0938\u093E\u0924:"CARD_7",\u0938\u0948\u0902\u0924\u093E\u0932\u0940\u0938:"CARD_47",\u0938\u0948\u0902\u0924\u0940\u0938:"CARD_37",\u0938\u0948\u0915\u0921\u093C\u094B\u0902:"O",\u0938\u094B\u0932\u0939:"CARD_16",\u0938\u094C:"UNIT_SAU",\u0939\u091C\u093C\u093E\u0930:"UNIT_HAZAAR",\u0939\u091C\u093C\u093E\u0930\u094B\u0902:"O",\u0939\u091C\u093E\u0930:"UNIT_HAZAAR",\u0939\u091C\u093E\u0930\u094B\u0902:"O"},range_words:["to","\u092F\u093E","\u0938\u0947"]},hi_latn:{forms:{"1":"CARD_1",aadh:"PFX_AADHA",aadha:"PFX_AADHA",aadhaa:"PFX_AADHA",aadhe:"PFX_AADHA",aadhi:"PFX_AADHA",aath:"CARD_8",adha:"PFX_AADHA",adhaa:"PFX_AADHA",adhaai:"PFX_DHAI",adhai:"PFX_DHAI",adhe:"PFX_AADHA",adhi:"PFX_AADHA",adsath:"CARD_68",adtalis:"CARD_48",adtis:"CARD_38","and a half":"PFX_SAADHE","and a quarter":"PFX_SAVA","and half":"PFX_SAADHE",arab:"UNIT_ARAB",araba:"UNIT_ARAB",arabon:"O",arhaai:"PFX_DHAI",arhai:"PFX_DHAI",arsath:"CARD_68",artalis:"CARD_48",artis:"CARD_38",assi:"CARD_80",atarah:"CARD_18",athaarah:"CARD_18",athanve:"CARD_98",athara:"CARD_18",atharah:"CARD_18",athasi:"CARD_88",athattar:"CARD_78",athavan:"CARD_58",athhattar:"CARD_78",athsath:"CARD_68",athtalis:"CARD_48",athtis:"CARD_38",atthaanve:"CARD_98",atthaasi:"CARD_88",atthais:"CARD_28",atthanve:"CARD_98",attharah:"CARD_18",atthasi:"CARD_88",atthattar:"CARD_78",atthavan:"CARD_58",atthawan:"CARD_58",b:"UNIT_BILLION",baais:"CARD_22",baanve:"CARD_92",baarah:"CARD_12",baasath:"CARD_62",baavan:"CARD_52",bahatar:"CARD_72",bahattar:"CARD_72",bais:"CARD_22",banave:"CARD_92",banve:"CARD_92",bara:"CARD_12",barah:"CARD_12",basath:"CARD_62",baseth:"CARD_62",battis:"CARD_32",bavan:"CARD_52",bawan:"CARD_52",bayaalis:"CARD_42",bayaasi:"CARD_82",bayalis:"CARD_42",bayasi:"CARD_82",bayees:"CARD_22",bees:"CARD_20",billion:"UNIT_BILLION",bis:"CARD_20",biss:"CARD_20",bn:"UNIT_BILLION",byalis:"CARD_42",byasi:"CARD_82",chaachat:"CARD_66",chaar:"CARD_4",chah:"CARD_6",chalis:"CARD_40",chanchat:"CARD_66",chanchatt:"CARD_66",chansath:"CARD_66",chappan:"CARD_56",char:"CARD_4",chaubis:"CARD_24",chauda:"CARD_14",chaudah:"CARD_14",chauhatar:"CARD_74",chauhattar:"CARD_74",chaunsath:"CARD_64",chauntis:"CARD_34",chauraanve:"CARD_94",chauraasi:"CARD_84",chauranve:"CARD_94",chaurasi:"CARD_84",chausath:"CARD_64",chauvan:"CARD_54",chauwalis:"CARD_44",chauwan:"CARD_54",chawwan:"CARD_54",che:"CARD_6",cheh:"CARD_6",chhabbis:"CARD_26",chhabees:"CARD_26",chhachat:"CARD_66",chhah:"CARD_6",chhapan:"CARD_56",chhappan:"CARD_56",chhasath:"CARD_66",chhattis:"CARD_36",chhe:"CARD_6",chhianve:"CARD_96",chhiasath:"CARD_66",chhiasi:"CARD_86",chhihattar:"CARD_76",chhiyalis:"CARD_46",chhiyanve:"CARD_96",chhiyasat:"CARD_66",chhiyasath:"CARD_66",chhiyasi:"CARD_86",chhiyattar:"CARD_76",chihattar:"CARD_76",chihttr:"CARD_76",chiyanve:"CARD_96",chiyasat:"CARD_66",chiyasath:"CARD_66",chiyasi:"CARD_86",chohattar:"CARD_74",chonsath:"CARD_64",choranve:"CARD_94",chorasi:"CARD_84",choudah:"CARD_14",cr:"UNIT_CRORE",crode:"UNIT_CRORE",crodon:"O",croer:"UNIT_CRORE",crore:"UNIT_CRORE",crores:"UNIT_CRORE",croron:"O",crorr:"UNIT_CRORE",crs:"UNIT_CRORE",das:"CARD_10",ded:"PFX_DEDH",dedh:"PFX_DEDH",dedhh:"PFX_DEDH",dedhi:"PFX_DEDH",derh:"PFX_DEDH",dhaai:"PFX_DHAI",dhaee:"PFX_DHAI",dhai:"PFX_DHAI",dhaii:"PFX_DHAI",dhay:"PFX_DHAI",dhayi:"PFX_DHAI",dhed:"PFX_DEDH",dhedh:"PFX_DEDH",do:"CARD_2",dus:"CARD_10",eight:"CARD_8",eighteen:"CARD_18",eighty:"CARD_80",ek:"CARD_1",ekhattar:"CARD_71",ekkis:"CARD_21",eksath:"CARD_61",ektalis:"CARD_41",ektis:"CARD_31",ekyanve:"CARD_91",ekyasi:"CARD_81",ekyavan:"CARD_51",eleven:"CARD_11",fifteen:"CARD_15",fifty:"CARD_50",five:"CARD_5",forty:"CARD_40",four:"CARD_4",fourteen:"CARD_14",gyaarah:"CARD_11",gyara:"CARD_11",gyarah:"CARD_11",hajaar:"UNIT_HAZAAR",hajar:"UNIT_HAZAAR",hajaron:"O",half:"PFX_AADHA","half a":"PFX_AADHA",hazaar:"UNIT_HAZAAR",hazaaron:"O",hazar:"UNIT_HAZAAR",hazaron:"O",hazzar:"UNIT_HAZAAR",hundred:"UNIT_SAU",hzr:"UNIT_HAZAAR",ikattis:"CARD_31",ikhatar:"CARD_71",ikhattar:"CARD_71",ikhsath:"CARD_61",ikkees:"CARD_21",ikkis:"CARD_21",ikkyanve:"CARD_91",ikkyasi:"CARD_81",ikkyavan:"CARD_51",iksath:"CARD_61",iktaalis:"CARD_41",iktalis:"CARD_41",iktis:"CARD_31",ikyaanve:"CARD_91",ikyaasi:"CARD_81",ikyanve:"CARD_91",ikyasi:"CARD_81",ikyavan:"CARD_51",k:"UNIT_HAZAAR",karod:"UNIT_CRORE",karodh:"UNIT_CRORE",karodon:"O",karor:"UNIT_CRORE",karore:"UNIT_CRORE",karoron:"O",kharab:"UNIT_KHARAB",khokha:"UNIT_CRORE",khokhaa:"UNIT_CRORE",krodo:"O",krodon:"O",l:"UNIT_LAKH",laakh:"UNIT_LAKH",laakhon:"O",lac:"UNIT_LAKH",lack:"UNIT_LAKH",lacs:"UNIT_LAKH",lakh:"UNIT_LAKH",lakhh:"UNIT_LAKH",lakho:"O",lakhon:"O",lakhs:"UNIT_LAKH",lk:"UNIT_LAKH",lkah:"UNIT_LAKH",lkh:"UNIT_LAKH",lpa:"UNIT_LAKH",m:"UNIT_MILLION",mil:"UNIT_MILLION",million:"UNIT_MILLION",millium:"UNIT_MILLION",mn:"UNIT_MILLION","n half":"PFX_SAADHE",nabbe:"CARD_90",nabbey:"CARD_90",nau:"CARD_9",navaasi:"CARD_89",navasi:"CARD_89",nawaasi:"CARD_89",nawasi:"CARD_89",ninanve:"CARD_99",nine:"CARD_9",nineteen:"CARD_19",ninety:"CARD_90",ninnyanve:"CARD_99",ninyaanve:"CARD_99",ninyanve:"CARD_99",one:"CARD_1",paach:"CARD_5",paanch:"CARD_5",paav:"PFX_PAAV",pachaanve:"CARD_95",pachaas:"CARD_50",pachaasi:"CARD_85",pachanve:"CARD_95",pachas:"CARD_50",pachasi:"CARD_85",pachattar:"CARD_75",pachchees:"CARD_25",pachchis:"CARD_25",pachees:"CARD_25",pachhatar:"CARD_75",pachhattar:"CARD_75",pachis:"CARD_25",pachpan:"CARD_55",pachpann:"CARD_55",painsath:"CARD_65",painsatth:"CARD_65",paintaalis:"CARD_45",paintalis:"CARD_45",paintees:"CARD_35",paintis:"CARD_35",panch:"CARD_5",panchanve:"CARD_95",pandra:"CARD_15",pandrah:"CARD_15",pandreh:"CARD_15",pantis:"CARD_35",pau:"PFX_PAAV",paun:"PFX_PAUNE",pauna:"PFX_PAUNE",paunay:"PFX_PAUNE",paune:"PFX_PAUNE",pauv:"PFX_PAAV",pav:"PFX_PAAV",paw:"PFX_PAAV",pawne:"PFX_PAUNE",pensath:"CARD_65",pentalis:"CARD_45",pentis:"CARD_35",peti:"UNIT_LAKH",pichasi:"CARD_85",pona:"PFX_PAUNE",pone:"PFX_PAUNE",powne:"PFX_PAUNE",saade:"PFX_SAADHE",saadhe:"PFX_SAADHE",saadhey:"PFX_SAADHE",saat:"CARD_7",saath:"CARD_60",sade:"PFX_SAADHE",sadhe:"PFX_SAADHE",sadhey:"PFX_SAADHE",sadsath:"CARD_67",sainkdon:"O",saintalis:"CARD_47",saintees:"CARD_37",saintis:"CARD_37",saitalis:"CARD_47",saitis:"CARD_37",sao:"UNIT_SAU",sarhe:"PFX_SAADHE",sarhsath:"CARD_67",sarsath:"CARD_67",sataanve:"CARD_97",sataasi:"CARD_87",satais:"CARD_27",satanve:"CARD_97",satasi:"CARD_87",satattar:"CARD_77",satavan:"CARD_57",sath:"CARD_60",sathattar:"CARD_77",satra:"CARD_17",satrah:"CARD_17",satreh:"CARD_17",sattaees:"CARD_27",sattahattar:"CARD_77",sattais:"CARD_27",sattanve:"CARD_97",sattar:"CARD_70",sattasi:"CARD_87",sattavan:"CARD_57",sattawan:"CARD_57",sau:"UNIT_SAU",sava:"PFX_SAVA",savaa:"PFX_SAVA",savva:"PFX_SAVA",sawa:"PFX_SAVA",sawaa:"PFX_SAVA",seven:"CARD_7",seventeen:"CARD_17",seventy:"CARD_70",six:"CARD_6",sixteen:"CARD_16",sixty:"CARD_60",so:"UNIT_SAU",sola:"CARD_16",solah:"CARD_16",soleh:"CARD_16",sou:"UNIT_SAU",swa:"PFX_SAVA",taintalis:"CARD_43",taintis:"CARD_33",teen:"CARD_3",tees:"CARD_30",tehattar:"CARD_73",teis:"CARD_23",ten:"CARD_10",tera:"CARD_13",terah:"CARD_13",teranve:"CARD_93",terasi:"CARD_83",terh:"CARD_13",thirteen:"CARD_13",thirty:"CARD_30",thou:"UNIT_HAZAAR",thousand:"UNIT_HAZAAR",three:"CARD_3",tihatar:"CARD_73",tihattar:"CARD_73",tin:"CARD_3",tiraanve:"CARD_93",tiraasi:"CARD_83",tiranve:"CARD_93",tirasi:"CARD_83",tirepan:"CARD_53",tirpan:"CARD_53",tirsath:"CARD_63",tirseth:"CARD_63",tis:"CARD_30",trepan:"CARD_53",tresath:"CARD_63",twelve:"CARD_12",twenty:"CARD_20",two:"CARD_2",unanchas:"CARD_49",unasi:"CARD_79",unatees:"CARD_29",unattis:"CARD_29",unchalis:"CARD_39",unchas:"CARD_49",unees:"CARD_19",unhatar:"CARD_69",unhattar:"CARD_69",unnaasi:"CARD_79",unnasi:"CARD_79",unnatis:"CARD_29",unnchas:"CARD_49",unnees:"CARD_19",unnhattar:"CARD_69",unnis:"CARD_19",unnsath:"CARD_59",unnyasi:"CARD_79",unsath:"CARD_59",unsatth:"CARD_59",untaalis:"CARD_39",untalis:"CARD_39",untees:"CARD_29",untis:"CARD_29",unyasi:"CARD_79"},range_words:["or","se","to","ya"]}},version:1};var ze=pA,q=new Map,TA=new Set;for(let A of Object.values(ze.packs)){for(let[e,t]of Object.entries(A.forms))q.has(e)||q.set(e,t);for(let e of A.range_words)TA.add(e.toLowerCase())}var pe=new Set(["-","\u2013","\u2014","/"]);function Te(A){if(A.length===0)return!1;for(let e of A){let t=e.codePointAt(0),n=e>="0"&&e<="9",r=t>=2406&&t<=2415;if(!n&&!r)return!1}return!0}function kA(A){if(A.length===0)return!1;let e=!1;for(let[t,n]of A)switch(t){case"SEP":{if(n.length===0||/\S/.test(n))return!1;break}case"DOT":{if(n!==".")return!1;break}case"COMMA":{if(n!==",")return!1;break}case"RANGE":{let r=n.replace(/\s+/g,""),s=n.toLowerCase();if(!pe.has(r)&&!TA.has(s))return!1;break}case"DIGITS":{if(!Te(n))return!1;e=!0;break}case"O":{if(q.get(n.toLowerCase())!=="O")return!1;break}default:{if(q.get(n.toLowerCase())!==t)return!1;e=!0;break}}return e}var xA={currency_markers_before:["\u20B9","Rs","Rs.","rs","INR","Re"],currency_words_after:["rupaye","rupay","rupees","rupiya","rupya","/-"]};var mA={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 ke=`
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
- `,ie=`
20
+ `,xe=`
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
- `,le=`
55
+ `,me=`
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 gA(){return typeof navigator<"u"&&!!navigator.gpu}var V=null;function sA(){return V||(V=(async()=>{if(!gA())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(!gA())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,s)=>{let o=n.createBuffer({size:Math.max(4,t.byteLength),usage:s,mappedAtCreation:!0});return new Float32Array(o.getMappedRange()).set(t),o.unmap(),o},f=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r=this.weights,g=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:g,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,g=this.weights,t=g.embed.shape[1],s=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},D=r.limits?.maxComputeWorkgroupsPerDimension??65535,C=E=>{let c=Math.max(1,Math.ceil(E/64)),a=Math.min(c,D),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}),M=r.createCommandEncoder(),h=M.beginComputePass();h.setPipeline(E),h.setBindGroup(0,H),h.dispatchWorkgroups(a.x,a.y),h.end(),r.queue.submit([M.finish()])},Q=r.createBuffer({size:n*t*B*4,usage:s});{let E=C(n*B),c=w(new Uint32Array([n,B,t,g.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=g.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,M=c.dilation,h=c.padding,z=r.createBuffer({size:n*a*B*4,usage:s}),Y=C(n*a*B),zA=w(new Uint32Array([n,B,l,a,H,h,M,1,c.residual?1:0,Y.stride]));u(v,[{binding:0,resource:{buffer:zA}},{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:z}}],Y),Q=z,l=a}let b=r.createComputePipeline({layout:"auto",compute:{module:f.headModule,entryPoint:"main"}}),i=async(E,c)=>{let a=r.createBuffer({size:n*B*c*4,usage:s}),H=C(n*B*c),M=w(new Uint32Array([n,B,l,c,H.stride]));u(b,[{binding:0,resource:{buffer:M}},{binding:1,resource:{buffer:Q}},{binding:2,resource:{buffer:E.w}},{binding:3,resource:{buffer:E.b}},{binding:4,resource:{buffer:a}}],H);let h=r.createBuffer({size:n*B*c*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),z=r.createCommandEncoder();z.copyBufferToBuffer(a,0,h,0,n*B*c*4),r.queue.submit([z.finish()]),await h.mapAsync(GPUMapMode.READ);let Y=new Float32Array(h.getMappedRange().slice(0));return h.unmap(),Y},d=await i(f.bioBuf,g.bio.w.shape[0]),L=await i(f.clsBuf,g.cls.w.shape[0]);return{bio:d,cls:L}}};var UA={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:.031428899616003036,data_b64:"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"},conv:[{k:5,dilation:1,residual:!1,w:{shape:[48,16,5],scale:.006290150806307793,data_b64:"6QP89fIF0cgE/Aof0iD67rI8AwDPF/8GBwgaCvUHDA4cFvTV+NXxCO/i5/X4GzUbKBMOF9P89u7XHPb8+uYU8/gS+y75/ugSAO/2+Ob55wMWScoGAAvk6AD7AQsH8gIxSAUs+vUN5xcK/u0E//4M+dkdCdwI7QEN0Nvs2vgCEBQA9Nf9PAEF9BYaFAfT4CoUAgNS/wcL5eoo+u4QRhT/Au8bDvbk8uHl/AkECSIO/+n8JuXz8asO3+sVAtbPAvPJjiD/BBbmMBENHdoE8xBLHNUL7v7xHf/3z6QlB+D79h8O6PcBDAkJQ90gFfju/EgaEPAR+QUk3tTn/OkNAhwC6NQ0Fv4jRSAQ7PkSGtLz6DvqB//XPRAL+ATro+//7Dbt7gf8Cvb8/CoRGOb+JAbt2PQfGgSv/QAQ/gYQEQUfCRH62PoAFgD7BQIGCTz3GPcEDRznKwbxJfQA/gIi/QAIJFWzBQjhDdoD+QbGGewON/wAGfcd2QcC9esRAvoFHi/+/vAJ6wIFAef+EewC/eZLB9z/HPEI9tnmBvI2RhFJCtD77gUF7hEK9OwNAgkD/+jlAd7+8gEwBP/uuboA+DgA9lAP7rcnG/3YOiAC+KUXDNnz/TIaCQbt1f/76iv2WPUFAvrBAekUFhTl+hf+HgX9BNrU4fHkBcoU/gMT4+zg9RLK/AYFF/YA+BP/Hw/w+eYzCAruCsEp/P45ywEK9RvkAgsALq0FCNnkwBkUC/U/LA7+tt0n4eHRzvj9FFM96Ozv9Am8EgbS6hUIGRE4+vX01RDkKgBaL/YWDd8NHw4SQf35+uUUuC0M78rmLxHw7Bj9DunA8w3//Q3V6u8R+m26Ff3iDiQK+OcE6/4VFfHvBvUR4uPsA/VJMv8EDf4XAAP65AD+++MV+/P7DNr2BA4VGxkR9Bcs4uTz8RwH7e7xJBjt8gD5GRHu6Q8a+QPj1SckHOz0BA7t6yvz/QgB7P4C+/bo/OEK2iHo+hb1NRb79yUtCAMI9Ss6CQQeBvD86v/t4/kNseH1Bf3H9/sG+brnAO4HBxD+8gcB1BX49joYB/3/0esQDukI9wkDDPr54QT98NYWEAXn5yL/E/PNHvcIFd7x9QDx9PD/EgxNCfgKNtYK+P/TIQv89/4bAwrj2OD76xAD4xLoC9m6IvXk2uP7CwLpAqjh+PPLG/T/GAbgFhAH/gvn//UHEvoKDS8aDwkNBgoFCgIsPwz7CcbqBf4E9AAh//0H7+4H0Out8vvezN/q+w0i7O30DiE2B+zi9yYTAEALC+Qe37kP/BMUHewB7Qj54ORHRBz/IggQJ/ERKSXuDgLmFzMQBwPR4eH57gZb8AklKjEEB9AW/iEE8BHsCfz4DOf0CwT92vL9KAr3EwAGAi0WFerzB/QNG1ADIAH4Hxf5BfPfQw/tBNrH6O/6CR0CFAcDFhj3/+P65QkIKeUTDO7rHhAN3ZHZ2fzkFVk/KP7QKC8Q9xklMg4QPhrz4Q4W2SHT/ffbK+LzHDrQDAkm+Pv/BgbRPhP1/yPrGw/44PXqCyUl5fILBBMbCfflENwC/enQMwYI5sU/7QsewSnqEvTWOuoL/P03H/giL/4Q+dA0Fxb4z83yAAdLBer0/P0WHgH+4hcN+gvyChEGAtMD8f749y4Q9gixu+ECC0j9Bu/70A/eAvG8/A0F6LzvCvz2+QX7Cgb8MQr0+jQa+/ny2gwEAvr5qwcCARjyGPf7BgTb1+fdERMNACokMwj+9/YH+O3+DuQB8sLivwIPGfMYGfzjC8vp/OkIDPDo/Bg5CAjfMhkM7dEnBUIF4tw7IQvJOv7dCuThEAsQ5vfr7+rhI/ICAh0sJCT4UT/wA/viBe72AgIK8PwLDwoMBxKu4uQP5eQHFQD06AskCtniKywL9/kbEwTwJQ/5GPQO7u8I48fNDdzx2bnT/yAp8wPy9BU2BBDo9P4b9gsS6g0P3+knCR8AN9oA+/gP59f1Be7x2vPj6uY39+7xLv761e0ZHf3n7f4Z9+quPgX0HuhA/QMUQDY3MwPgyu3+3Qv5COzp8Rc3TO8EHyPiABAR8fQRKxUFEgcCBhXw+PnS4+7S5tDT7hUcGyC5FQoDDOIOBw8h+RAhJTkW8NsHFfX9+B8K7vIW8wIC/B75EAEd6e7/A/Ta0fcG5PTaDf4L+wMS//fs2voCCAQs3hLv8BTR/RH7Ax8B3+MEHxPfDx77Aef/6PX2+wABBAAjRi/o8CEY+foO2fGp3QL71QT1APPqIBUJAyjg9AbyHuP0+A3mvP8A+vQBBgIMBcoGAt/v/+34Ignm7f7yEfD0/f7n0Oz3HSHv9QT4Btvw+uoKAPTxHCEi9AkTOOAFFf3X/O0CBfwaBAAFIPru/ecNA+L17Mu/5f/yCPfx9vMeD/r6FurC9A3f1AcIDQD3yv8H4vDiCgPj2NbSAecF9Of7+SUi+PELNCgMA/36EBooAsT4Bv//KPPw+P7W7Q7v/gr5Oe78A/wA/wb/E/gS/vga7PgBCwUA9gXz1dX2A/QvNAoAxg/l9wLuRRr0DfBH/QcMDhD/5PodYR3k+y8uH/n8/f4L+hEz2+oUGxAk7/z11vb+/QcTFfv+8RES/hv8+R4JDPLhze0BEQkH+Oz56P0GFe7X7/f/EN40CBQBzRk4CPr57vXwFe4J6f/s9xQI6/fg29//19r1/wEoHxIbBAsaNBbp+voAEQwPH/cGEAAKEQ/1/tXZ7P0JGgD+DAYG6A3+ICX9Hv8WKiEoGSkrACMZEwkKIBPyAhfw8PEJvx0n9xLk4w4Z990LF/cKNAkY6+0iGdzw3vQR7foGCxsP6sUaFP/43f/kxQsAK+8G5SA2RwP7PhUTCt/bFvfvEDEVJOPm6u8B2R4dNwIZ/CX+6ev34M8DC/bR/BkI9uznLvXn4Sry9AkYCwv6+tH21Qf32d62//fq2PcS//UNHCzx+xMo2PkE+qjWAOYU/PH648e5zwnj6RH2AgYP9QseJyQpChMJ8wYOJPgVFQfU9N8B/hlD7+/wFAENDBHS4+MLCN4uEv8S6NrT0vUo5PL1BtEJRxYIDxv7AAgdRjsb69EDJ+70zgEmGO9HJBEfCS82Htz89vzL3fwEGPUPABQc3ALt9jhFGwTwyzTQAQr3FPf4+DIp9vgj5MgK9f+6BdMCGgwl+frg7DAIAf8zOwryQUvs1PklJdci/RwQ2yEE+ObR1QwAz7fQ7ewL+REDDVZRHgcS3vfW9BgsJgIF7//p9Pf69tgTCv7YvCL/+PIxFAcZFoHiAQ0QG9v29BIr+AD+BLgBB/K1yt7r8RwgCwAI+vfS7gkR3hnnAulE5R3/PAsP8APlMFwDAQMJ7QAFCPM2BQD7yxP4/vOZAwTw/PABFPwTyu4B/e4sEewJCAwH6vsV9SMH9urN+fsK+eknG/wNH+kIAQG37P8P/hAGAvj2ACMF+h1HEgsBGyPH/QPaDBHx+gbhHPkGBv/6+wQrD+X+BeQaB/v16Q4XAfLrGPv9Bt8H//336/nuA/wP/iwKCv8z/PoAJN33AB3qHT/4+/TvTBXxE+7I8v7b9uX5+wIG4/358+z4/Prj2AL6EQocFhnr/xzZ8OIR/NkB+RQF9v329i8FBfEHLP4ACdX59wraCg/NFfbnvwQJCQQB9P70D/kFA/joBwHmElrfOBbu6q4g5/oMDh/3BPMLAPMC/A4r+AYQ/v8RCxUsHgXm/uk3EfDxzyICD/wK9xgECyAk+/f7IgbrFu3s8+kOH/oVEfPlEvP6DODo9/DvBgMXHQbr8wn7EQz9Fgr68/0LEA0Jybv9EVgi5PUEKQoE1Qo0NiMM9gUnD/0yDvz6EegaFRT47QRGPSoI+r+i/x/sN9ki6BYL+Ovm5g8DKhkRDxvLywf34frlHC0D6OrS8scbMiQv+N8tKvAW//8Y+BfkIybc/efyCfUg2w5HC+UPBOsWChzsB+cG9gQCFeEO/+31/+YCHCwUBfYC7hASCRP7CfIE8wESEvXbBfwSBvQUDAsOASPxAP0I9wfp9gP6DBbx4/sR+vvp9SsN9fvZFw748hLu6uwFtd0j//XU9vEIIxHb+/vO4Of++gf8Den/3B7K/w3W2vD/BhtbAAkC0uQMCAIzVeb/7ffl8woBqfsYBeje5f8A9g4gEv7zHtT2CBoOCOcPBzkzKfsNCdXGCAgYITfxERwY+yv1BxbxAff5DhQWBgTpJgD10+UYHf4H7RAM+yYvLDMA7w0p4fTixfgA+/IfAQUlEzfxCef5+usI+QoXKQ4F5fns9frE+rL0ARfnPv79/2/aAv77Lx/0AhzQOQECvPsFIfnQ7MoOAAIAx/sKHSz4B/rAIgIg/+AP+A/7yDQUA/vV8d31/Qgd6OT+OAMH8wMAXDLy8ej4FPEILeknJQT1Dgj2BPEb8vACDuruCf3zDf4KEMv5GAj70MDh9AQJ7AP/B8/W2ev+1R7i9RHwMhkC/NzkyO0OBOvI6ggT6P/7AfsmKur3x4qz3fD/QBIHCSr5Uu7/6g4nBwztBc3L/f4DGRYN9AYnAfr21w4X7OkM89sN+wgkBAPv4jX0Cu3sDe4B3/gaE/oUBg8V9PX63fj/+gMq/fHHCdPtJBfUCh8A/PDB1e/dDSsfDjbqBAP59TMIAAgjFw33/RwIwwUA6+rk+Qsh/Ar56eYg4/cL5yYN1Pb/w/gn/tAT+NwU4ugRDv4T+f/v/eWw9Oz7IWQXGQTwyvL3/+GrGfX8GS0kEAwK0ggA9uvDIgz//9Hk9gP19xcO8v5BDAr/8tsE9vQBugTkDSpd7vIL49viAg7rzfANFP4RAP4U0wDq/xsE9xUHHz8CHw4mKjsgB/8EDkAM/iP6AOsUHu0BAwHy2wbxAuju/Q3VGBQk/uYhGQsH/+oi/PT1/VXr/fcJOvACEf7oKQ7xBcj73/To7NjyATLjGyEJ9DoaFRUiHRgBFd/iBQnj8gcM8OIG8dzkCtUPIPjuEVtKH/zx2AfxDtjp1N7/LwrO+NHmIgADMSnKNu4ZKwcKHv8MIeUFAQX1/fTv+dYNAP4LE8v3/wgdxucFCxjg/RALAuf3BwcNCAsCA/sUA/vjylEHCgE39vUQEzvrCAcUL+jyEAsn3f/8/iIg+/cPEx0J"},b:[-.17364,-.38739,-.2607,-.45207,-.18537,.080982,-.17033,-.093565,-.14781,97265e-8,-.20138,.12032,-.32839,-.31072,-.077194,.20015,-.21796,-.7154,.010095,-.9235,-.26263,.13311,-.10266,-.55403,-.25231,-.6246,-.60348,31976e-8,-.63929,-.65831,.041219,-.36931,-.15309,-.059742,-.37661,-.37382,-.38717,-.27458,-.14118,.0038513,-.11354,.014295,-.33004,-.37157,.31551,-.65493,.013061,-.27978]},{k:3,dilation:1,residual:!0,w:{shape:[48,48,3],scale:.01307241152971983,data_b64:"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"},b:[.12728,.23057,-.049862,-.12345,.051526,.16247,.038686,.31777,-5044e-7,.45052,.2731,-.034255,.21069,.33912,.37254,.35973,-.03793,.49118,.20192,.23636,.074086,-.096358,.044678,.088321,.012345,.099132,.1955,.041173,-.11149,-.076147,-.11371,.22511,.059769,.059321,-.065647,.48298,-.17765,.29159,-.28504,.24442,.21738,.17888,-.18307,.052557,.15735,-.38273,-.15942,.015911]},{k:3,dilation:2,residual:!0,w:{shape:[48,48,3],scale:.012118758633732796,data_b64:"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"},b:[.42526,-.018646,-.046902,.085615,-.097236,.043131,.26146,.52447,-.15482,.89498,.85283,-.070978,.9454,.34617,.5114,.49209,.021658,.7805,.90902,.58875,-.18753,.24967,-.24721,-.1591,-.18904,-.1032,-.058184,.71993,.44409,.20453,.12519,.26645,.032874,-.16234,.52653,1.2787,.1312,.79518,-.26286,.88507,.0070287,.38067,.10993,.39889,-.023762,.38479,-.38521,-.13663]},{k:3,dilation:4,residual:!0,w:{shape:[48,48,3],scale:.02247241884469986,data_b64:"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"},b:[.25465,.30112,22528e-8,.25806,-.3583,-.17637,.3427,.72967,.010093,.73045,1.2951,-.0064023,.94117,.26018,.34947,.61163,-.16288,2.3975,.67294,.52789,.32498,-1.1242,.1412,.020151,1.2105,-.087648,.32267,.5233,-.056027,-.0055481,1.0103,.96197,-.13409,.60131,.60142,1.9709,.11829,1.0262,1.8891,.27538,-.073567,.64638,.23707,-.059397,-.15365,1.5563,-.036813,.42758]},{k:3,dilation:8,residual:!0,w:{shape:[48,48,3],scale:.01787199079990387,data_b64:"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"},b:[.91862,.65436,-.13312,.65764,.92847,-.037449,.013942,1.5821,.81311,.11236,1.6626,.66674,-.11374,.40245,.38364,.041558,-2.1116,.73693,1.5589,.16456,.12314,.24958,.24521,.26361,.013116,.66216,.013609,.39799,-.18088,1.4454,.55458,.02579,.19249,.40514,1.2981,.97078,.063668,.62026,1.1519,.60559,-1.4828,.021215,.29938,.35468,.31701,-.24198,.028639,.29068]}],bio:{w:{shape:[3,48],scale:.004835921339690685,data_b64:"9AkM/gnx+g3/GB3lDff3xqvwNP8DOAP4G6PhBPULBgLz9hcG8BAJBH8FCfoS+/UV9Q8K/hDu+f8BEQjPAfj4FRvK6/8A8An8Hiz8BvnpCAb19hP57RENBf4UCv8V7xgW8wwN/Qzw+tX/FcpA9vn3HmkP3P8A1Qz7BDIHBvf+BwX09//l7xEUBKsaB/0U9RQV"},b:[.36122,-.65132,-.16829]},cls:{w:{shape:[120,48],scale:.006135262083262205,data_b64:"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"},b:[2.0723,1.0607,-.24934,1.0107,-.080326,-1.2843,-.85037,-.32558,.030327,-.018597,-.45833,.23256,.43774,-.02813,-.80853,.19507,-.28852,.22684,-.55874,-.44662,-.83283,-.86144,-.43801,-.299,-.57308,-.15609,-.95885,-.37369,-.33408,-.36452,.13161,.014104,-.10553,-.92234,-.64867,-.5208,-1.1172,-.74943,-.69722,-.93611,-.50387,-.45246,-.57126,-1.1437,-.19268,-.007911,-.9375,-.78199,-.88571,-.78928,-.74557,-.46453,-.55509,-1.452,-.54216,-.056653,-.83677,-.51795,-.99961,-.53138,-.85038,-.41498,-.59241,-.41867,-1.3204,-.20875,-1.0603,-1.3353,-.93781,-.63768,-.28795,-.1241,-.89149,-1.0132,-.39317,-.37804,-.41038,-.5451,-.28891,-.77723,-.51958,-.0060439,-.62825,-.86789,.021334,-.43327,-1.0298,-.90527,-.60219,-.73554,-.53358,-.28367,-.60228,-.98779,-.45318,-.34428,-.70306,-.72602,-.68318,-1.0351,-.19452,-.38778,-.79516,-.22651,-.67388,-.36044,-.51191,-.67856,-.34167,-.37624,-.15197,-.09546,.3639,.33022,1.4654,-.45574,.38083,-1.189,.10367,.2199]}};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=PA(e.weights??UA),this.charToId=DA(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,g=eA(e.length);if(g.length===1&&g[0].length===e.length){let t=U(e.length),s=G(e,this.charToId,this.idsScratch,t),o=S(this.weights,s,this.scratch);r=this.decodeForward(e,o,0,e.length)}else{let t=[],s=new Set;for(let o of g){let P=e.slice(o.offset,o.offset+o.length),w=U(P.length),D=G(P,this.charToId,this.idsScratch,w),C=S(this.weights,D,this.scratch),u=this.decodeForward(P,C,o.offset,P.length);for(let Q of u){let l=`${Q.start}:${Q.end}`;s.has(l)||(s.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,g=r<=128,t=g?this.bioIdsScratch:new Int32Array(r),s=g?this.clsIdsScratch:new Int32Array(r),o=g?this.bioProbsScratch:Array.from({length:r},()=>new Float32Array(3));for(let D=0;D<r;D++)t[D]=p(n.bioLogits,D*3,3),s[D]=p(n.clsLogits,D*n.nCls,n.nCls),BA(n.bioLogits,D*3,3,o[D]);let P=HA(e,t.subarray(0,r),s.subarray(0,r),o),w=[];for(let D of P){let C=D.tokens.map(([l,I])=>[F[l],I]),u=LA(e,D.start,D.end,be);if(MA(C)&&u===null)continue;let Q=dA(C);w.push({span:D.text,start:D.start+B,end:D.end+B,value:Q.value,...Q.range?{range:Q.range}:{},unit:Q.unit??null,currency:u,confidence:D.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),g=new Array(B.length).fill(!1);for(let o of f){let P=B.slice(o.offset,o.offset+o.length),w=U(P.length),D=G(P,this.charToId,this.idsScratch,w),C=S(this.weights,D,this.scratch);for(let u=0;u<P.length;u++){let Q=o.offset+u;if(g[Q])continue;g[Q]=!0;let l=p(C.bioLogits,u*3,3),I=new Float32Array(3);BA(C.bioLogits,u*3,3,I);let v=p(C.clsLogits,u*C.nCls,C.nCls);r[Q]={ch:P[u],bio:l,bioProb:[I[0],I[1],I[2]],cls:F[v],clsId:v}}}let t=this.parse(e),s=performance.now()-n;return{text:B,chars:r,spans:t,ms:s}}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 sA()))return e.map(P=>this.parse(P,{backend:"cpu"}));let r=e,g=e.map(k),t=new Array(e.length),s=[],o=[];for(let P=0;P<g.length;P++)g[P].length<=128?s.push(P):o.push(P);for(let P of o)t[P]=this.parse(r[P],{backend:"cpu"});if(s.length>0){this.gpu||(this.gpu=new q(this.weights));let P=Math.max(...s.map(v=>g[v].length),1),w=U(P),D=s.length,C=new Int32Array(D*w),u=this.charToId.get("<pad>")??0;C.fill(u);for(let v=0;v<D;v++){let b=g[s[v]],i=G(b,this.charToId);C.set(i,v*w)}let{bio:Q,cls:l}=await this.gpu.run(C,D,w),I=this.weights.cls.w.shape[0];for(let v=0;v<D;v++){let b=s[v],i=g[b],d=r[b],L=d.length===i.length,E=i.length,c=new Float32Array(E*3),a=new Float32Array(E*I);for(let h=0;h<E;h++)c.set(Q.subarray((v*w+h)*3,(v*w+h)*3+3),h*3),a.set(l.subarray((v*w+h)*I,(v*w+h)*I+I),h*I);let H={bioLogits:c,clsLogits:a,length:E,nCls:I},M=this.decodeForward(i,H,0,E);if(L)for(let h of M)h.span=d.slice(h.start,h.end);t[b]=M}}return t}},oA=null;function AA(){return oA||(oA=new $),oA}function Se(A,e={}){return AA().parse(A,e)}function Ke(A,e={}){return AA().parseBatch(A,e)}function Je(A){return AA().inspect(A)}function _e(){return AA().modelInfo()}function We(A={}){return new $(A)}var be=FA(RA,xA);export{F as CLASSES,$ as Parser,We as createParser,Je as inspect,gA as isWebGPUAvailable,_e as modelInfo,k as normalizeText,Se as parse,Ke as parseBatch,sA as probeWebGPU};
79
+ `;function vA(){return typeof navigator<"u"&&!!navigator.gpu}var Z=null;function PA(){return Z||(Z=(async()=>{if(!vA())return!1;try{return await navigator.gpu.requestAdapter()!==null}catch{return!1}})(),Z)}var $=class{weights;state=null;constructor(e){this.weights=e}async init(){if(this.state)return this.state;if(!vA())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 t=await e.requestDevice(),n=(B,a)=>{let C=t.createBuffer({size:Math.max(4,B.byteLength),usage:a,mappedAtCreation:!0});return new Float32Array(C.getMappedRange()).set(B),C.unmap(),C},r=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,s=this.weights,f=s.conv.map(B=>({w:n(B.w.data,r),b:n(B.b,r)}));return this.state={device:t,embedModule:t.createShaderModule({code:ke}),convModule:t.createShaderModule({code:xe}),headModule:t.createShaderModule({code:me}),embedBuf:n(s.embed.data,r),convBufs:f,bioBuf:{w:n(s.bio.w.data,r),b:n(s.bio.b,r)},clsBuf:{w:n(s.cls.w.data,r),b:n(s.cls.b,r)}},this.state}async run(e,t,n){let r=await this.init(),{device:s}=r,f=this.weights,B=f.embed.shape[1],a=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,C=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,D=s.createBuffer({size:e.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Int32Array(D.getMappedRange()).set(e),D.unmap();let o=h=>{let u=s.createBuffer({size:h.byteLength,usage:C,mappedAtCreation:!0});return new Uint32Array(u.getMappedRange()).set(h),u.unmap(),u},g=s.limits?.maxComputeWorkgroupsPerDimension??65535,v=h=>{let u=Math.max(1,Math.ceil(h/64)),i=Math.min(u,g),b=Math.ceil(u/i);return{x:i,y:b,stride:i*64}},P=(h,u,i)=>{let b=s.createBindGroup({layout:h.getBindGroupLayout(0),entries:u}),_=s.createCommandEncoder(),I=_.beginComputePass();I.setPipeline(h),I.setBindGroup(0,b),I.dispatchWorkgroups(i.x,i.y),I.end(),s.queue.submit([_.finish()])},c=s.createBuffer({size:t*B*n*4,usage:a});{let h=v(t*n),u=o(new Uint32Array([t,n,B,f.embed.shape[0],h.stride])),i=s.createComputePipeline({layout:"auto",compute:{module:r.embedModule,entryPoint:"main"}});P(i,[{binding:0,resource:{buffer:u}},{binding:1,resource:{buffer:D}},{binding:2,resource:{buffer:r.embedBuf}},{binding:3,resource:{buffer:c}}],h)}let l=B,Q=f.conv,w=s.createComputePipeline({layout:"auto",compute:{module:r.convModule,entryPoint:"main"}});for(let h=0;h<Q.length;h++){let u=Q[h],[i,,b]=u.w.shape,_=u.dilation,I=u.padding,k=s.createBuffer({size:t*i*n*4,usage:a}),Y=v(t*i*n),GA=o(new Uint32Array([t,n,l,i,b,I,_,1,u.residual?1:0,Y.stride]));P(w,[{binding:0,resource:{buffer:GA}},{binding:1,resource:{buffer:c}},{binding:2,resource:{buffer:r.convBufs[h].w}},{binding:3,resource:{buffer:r.convBufs[h].b}},{binding:4,resource:{buffer:k}}],Y),c=k,l=i}let E=s.createComputePipeline({layout:"auto",compute:{module:r.headModule,entryPoint:"main"}}),R=async(h,u)=>{let i=s.createBuffer({size:t*n*u*4,usage:a}),b=v(t*n*u),_=o(new Uint32Array([t,n,l,u,b.stride]));P(E,[{binding:0,resource:{buffer:_}},{binding:1,resource:{buffer:c}},{binding:2,resource:{buffer:h.w}},{binding:3,resource:{buffer:h.b}},{binding:4,resource:{buffer:i}}],b);let I=s.createBuffer({size:t*n*u*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),k=s.createCommandEncoder();k.copyBufferToBuffer(i,0,I,0,t*n*u*4),s.queue.submit([k.finish()]),await I.mapAsync(GPUMapMode.READ);let Y=new Float32Array(I.getMappedRange().slice(0));return I.unmap(),Y},H=await R(r.bioBuf,f.bio.w.shape[0]),F=await R(r.clsBuf,f.cls.w.shape[0]);return{bio:H,cls:F}}};var yA={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:.027303295210003853,data_b64:"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"},conv:[{k:5,dilation:1,residual:!1,w:{shape:[48,16,5],scale:.006574669387191534,data_b64:"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"},b:[-.31929,-.045999,-.40305,-.39295,-.13954,-.24104,-.53474,-.21671,-.46175,.077572,.039769,-.040953,-.48041,-.11485,-.32836,.083721,-.52205,-.22272,-.083818,-.56126,-.55955,-.60158,-.62202,.086986,.046654,.019929,-.41565,-.37971,-.13659,-.042863,-.10238,-.17997,-.30422,-.04185,-.37229,-.20252,-.13547,-.69886,-.30349,-.24882,-.25193,-.28751,-.45349,-.63501,-.42076,-.1823,.070981,-.017687]},{k:3,dilation:1,residual:!0,w:{shape:[48,48,3],scale:.01602521724998951,data_b64:"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"},b:[.056214,-.12524,.23884,.0024871,-.06175,-.31766,-.14961,-.037517,.20302,-.044519,.15582,.46601,.78273,.11867,.05001,.35455,-.034919,-.073859,-.050784,-.037817,-.41513,-.13376,.70105,.70566,.26129,.15269,-.2305,-.078317,-.22751,.13662,.25707,-.19063,.25661,-.028151,.28978,.41472,.47561,.12276,-.059242,-.49669,.57152,-.32093,.041158,.018289,-.14852,.054595,.1895,.21106]},{k:3,dilation:2,residual:!0,w:{shape:[48,48,3],scale:.011627851985394955,data_b64:"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"},b:[-.2905,-.03646,.20467,-.11792,-.068682,-.12794,.67811,.40356,-.10258,.021032,.41819,1.2684,1.3565,.29341,.12242,.30189,1.0168,.037088,-.18086,.14312,-.39863,.47754,.16237,.36304,.058092,1.1541,.11184,-.019706,.045608,1.4488,.0021099,-.21032,.030593,-.10661,.24996,-.21887,.058977,.16564,.13488,-.4112,.87899,.21653,.33517,.7668,.18889,.12303,.83771,.78421]},{k:3,dilation:4,residual:!0,w:{shape:[48,48,3],scale:.030631914734840393,data_b64:"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"},b:[.051436,.58024,.71758,-.27969,.28778,.33216,.31188,.23569,.3305,-.10469,.5278,1.6406,-.067324,.24835,.41882,-.22585,1.8259,.96147,.002934,.048236,.0073087,.60823,.31096,.12285,.042868,.89324,.23269,.11376,.24216,1.1819,.34392,-.3203,.060985,.10997,.43409,.018524,.47538,-.022916,.03208,.21715,1.9319,.34116,.42903,.89243,.058132,-.1399,.59723,.9662]},{k:3,dilation:8,residual:!0,w:{shape:[48,48,3],scale:.02437734417617321,data_b64:"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"},b:[-.095424,-1.0412,.038494,-1.8677,-.11797,.14448,1.1875,93106e-8,.53545,.49672,.35824,.25156,.49496,.2637,.65419,.99175,1.3647,-.10529,-.083752,-.012303,-.13534,.67019,.90971,-.030518,-.034959,1.9539,.41068,-.038103,-.1407,.54517,-.095919,.93171,.5754,.47958,1.0011,.31704,.44425,-1.3234,-.076986,.1531,.45021,.25218,.26872,.0026443,1.817,.19703,1.7538,-.35513]}],bio:{w:{shape:[3,48],scale:.005212794058024883,data_b64:"DQQEIPr+Cvbxuwg0A/3z9yUGFw36Be8EEQT/9vzwA/v4+wukDX/35zXzBvPw8wADEDUTQe8ADPbx8ggDBPz4+uVMAPH6A+4F+PgA7PbyAPz3+gv7CwT78ODzCPPAAAEhG9jt8v4AC/XxOwjeBPv3+grG+gMDBO4LFf3/CfbxBPz3+go+DLLzCMbzCfMuCgDo"},b:[.3519,-.45088,-.36292]},cls:{w:{shape:[120,48],scale:.005673965439200401,data_b64:"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"},b:[2.242,1.3744,-.47951,.6161,-2.4455,-1.5301,-1.0143,-.093522,.023086,.0087727,-.078257,-.17369,.020164,-.54997,-.57181,.44243,.027244,-.35139,-.89164,-.33272,-.18314,-.76673,-.54692,-.68857,-.30066,-.258,-.71149,-.31854,-.089586,-.43189,.047698,-.016066,-.81204,-.4251,-.88151,-.88009,-.79047,-.51782,-.42018,-1.1849,-.78106,-.77428,-.2046,-.38955,-1.4188,-.7007,-.31201,-.41446,-.92158,-.42966,-.86422,-.54021,-.30576,-.54322,-.63683,-.16471,-.12409,-.03448,-1.0125,-.22992,-.30688,-.54466,-.85746,.10627,-1.0269,-.95531,-.3397,-1.1359,-.60038,-1.0637,-.36039,-.94921,-.32892,-.66161,-.6971,-1.3174,-.35987,-.38449,-.36889,-.25041,-.47356,-.28453,-.45676,-.4763,-.32352,-.64705,-.33239,-.25252,-.48801,-.32516,-.76514,-.40702,-.33294,-.62638,-.8749,-.86953,-.65204,-.073133,-.13683,-.55527,-.82726,-.029609,-.69776,-.77748,-.5235,-1.2791,-.2632,-.59748,-.76975,-.81658,-.29771,-.60698,.0051561,.93853,1.3302,-.49395,.34466,-.30127,-.65059,-.63965]}};var eA=class{weights;charToId;gpu=null;defaultBackend;scratch;idsScratch=new Int32Array(L);bioIdsScratch=new Int32Array(128);clsIdsScratch=new Int32Array(128);bioProbsScratch=Array.from({length:128},()=>new Float32Array(3));constructor(e={}){this.weights=uA(e.weights??yA),this.charToId=iA(this.weights.charset),this.defaultBackend=e.backend??"cpu",this.scratch=new J(this.weights)}parse(e,t={}){if(typeof e!="string")return[];let n=e;e=y(e);let r=n.length===e.length,s,f=tA(e.length);if(f.length===1&&f[0].length===e.length){let B=z(e.length),a=G(e,this.charToId,this.idsScratch,B),C=K(this.weights,a,this.scratch);s=this.decodeForward(e,C,0,e.length,t.strict??!1)}else{let B=[],a=new Set;for(let C of f){let D=e.slice(C.offset,C.offset+C.length),o=z(D.length),g=G(D,this.charToId,this.idsScratch,o),v=K(this.weights,g,this.scratch),P=this.decodeForward(D,v,C.offset,D.length,t.strict??!1);for(let c of P){let l=`${c.start}:${c.end}`;a.has(l)||(a.add(l),B.push(c))}}B.sort((C,D)=>C.start-D.start),s=B}if(r)for(let B of s)B.span=n.slice(B.start,B.end);return s}decodeForward(e,t,n,r=t.length,s=!1){let f=r,B=f<=128,a=B?this.bioIdsScratch:new Int32Array(f),C=B?this.clsIdsScratch:new Int32Array(f),D=B?this.bioProbsScratch:Array.from({length:f},()=>new Float32Array(3));this.weights.crf&&sA(t.bioLogits,f,this.weights.crf,a);for(let v=0;v<f;v++)this.weights.crf||(a[v]=X(t.bioLogits,v*3,3)),C[v]=X(t.clsLogits,v*t.nCls,t.nCls),rA(t.bioLogits,v*3,3,D[v]);let o=_A(e,a.subarray(0,f),C.subarray(0,f),D),g=[];for(let v of o){let P=v.tokens.map(([w,E])=>[d[w],E]),c=zA(e,v.start,v.end,Ge);if(MA(P)&&c===null||UA(P)&&c===null)continue;let l=kA(P);if(s&&!l)continue;let Q=LA(P);g.push({span:v.text,start:v.start+n,end:v.end+n,value:Q.value,...Q.range?{range:Q.range}:{},unit:Q.unit??null,currency:c,confidence:v.confidence??0,classes:Q.classes,verified:l,tokens:P})}return g}inspect(e){let t=performance.now();typeof e!="string"&&(e="");let n=y(e),r=tA(n.length),s=new Array(n.length),f=new Array(n.length).fill(!1);for(let C of r){let D=n.slice(C.offset,C.offset+C.length),o=z(D.length),g=G(D,this.charToId,this.idsScratch,o),v=K(this.weights,g,this.scratch);this.weights.crf&&sA(v.bioLogits,D.length,this.weights.crf,this.bioIdsScratch);for(let P=0;P<D.length;P++){let c=C.offset+P;if(f[c])continue;f[c]=!0;let l=this.weights.crf?this.bioIdsScratch[P]:X(v.bioLogits,P*3,3),Q=new Float32Array(3);rA(v.bioLogits,P*3,3,Q);let w=X(v.clsLogits,P*v.nCls,v.nCls);s[c]={ch:D[P],bio:l,bioProb:[Q[0],Q[1],Q[2]],cls:d[w],clsId:w}}}let B=this.parse(e),a=performance.now()-t;return{text:n,chars:s,spans:B,ms:a}}modelInfo(){let e=this.weights,t=e.embed.data.length;for(let r of e.conv)t+=r.w.data.length+r.b.length;t+=e.bio.w.data.length+e.bio.b.length,t+=e.cls.w.data.length+e.cls.b.length,e.crf&&(t+=e.crf.trans.length+e.crf.start.length+e.crf.end.length);let n=e.conv.length?Math.max(...e.conv.map(r=>r.w.shape[0])):e.embed.shape[1];return{version:e.version,params:t,channels:n,embedDim:e.embed.shape[1],vocab:e.embed.shape[0],classes:e.classes.length,layers:e.conv.map(r=>({k:r.k,dilation:r.dilation,residual:r.residual})),crf:!!e.crf}}async parseBatch(e,t={}){e=e.map(D=>typeof D=="string"?D:"");let n=t.backend??this.defaultBackend;if(!(n==="webgpu"||n==="auto"&&e.length>=32&&await PA()))return e.map(D=>this.parse(D,{backend:"cpu",strict:t.strict}));let s=e,f=e.map(y),B=new Array(e.length),a=[],C=[];for(let D=0;D<f.length;D++)f[D].length<=128?a.push(D):C.push(D);for(let D of C)B[D]=this.parse(s[D],{backend:"cpu",strict:t.strict});if(a.length>0){this.gpu||(this.gpu=new $(this.weights));let D=Math.max(...a.map(w=>f[w].length),1),o=z(D),g=a.length,v=new Int32Array(g*o),P=this.charToId.get("<pad>")??0;v.fill(P);for(let w=0;w<g;w++){let E=f[a[w]],R=G(E,this.charToId);v.set(R,w*o)}let{bio:c,cls:l}=await this.gpu.run(v,g,o),Q=this.weights.cls.w.shape[0];for(let w=0;w<g;w++){let E=a[w],R=f[E],H=s[E],F=H.length===R.length,h=R.length,u=new Float32Array(h*3),i=new Float32Array(h*Q);for(let I=0;I<h;I++)u.set(c.subarray((w*o+I)*3,(w*o+I)*3+3),I*3),i.set(l.subarray((w*o+I)*Q,(w*o+I)*Q+Q),I*Q);let b={bioLogits:u,clsLogits:i,length:h,nCls:Q},_=this.decodeForward(R,b,0,h,t.strict??!1);if(F)for(let I of _)I.span=H.slice(I.start,I.end);B[E]=_}}return B}},wA=null;function nA(){return wA||(wA=new eA),wA}function vn(A,e={}){return nA().parse(A,e)}function Pn(A,e={}){return nA().parseBatch(A,e)}function wn(A){return nA().inspect(A)}function cn(){return nA().modelInfo()}function un(A={}){return new eA(A)}var Ge=OA(xA,mA);export{d as CLASSES,eA as Parser,un as createParser,wn as inspect,vA as isWebGPUAvailable,cn as modelInfo,y as normalizeText,vn as parse,Pn as parseBatch,PA as probeWebGPU};
@@ -1,4 +1,4 @@
1
- import type { LoadedWeights } from "./weights.js";
1
+ import type { CrfParams, LoadedWeights } from "./weights.js";
2
2
  export interface ForwardResult {
3
3
  bioLogits: Float32Array;
4
4
  clsLogits: Float32Array;
@@ -19,3 +19,11 @@ export declare class Scratch {
19
19
  export declare function forward(weights: LoadedWeights, charIds: Int32Array | number[], scratch: Scratch): ForwardResult;
20
20
  export declare function softmaxRow(logits: Float32Array, rowStart: number, n: number, out: Float32Array): Float32Array;
21
21
  export declare function argmaxRow(logits: Float32Array, rowStart: number, n: number): number;
22
+ /** Viterbi-decode the BIO path (labels 0=O,1=B,2=I) over `L` real positions
23
+ * of `bioLogits` (row-major (L,3), only the first L rows are read), writing
24
+ * the best label sequence into `out` (length >= L). Float32 arithmetic in
25
+ * the exact accumulation order of CRF_CONTRACT.md so results match the
26
+ * numpy reference bit-for-bit; ties (equal score) keep the FIRST (lowest
27
+ * index) candidate -- iterate i/j = 0,1,2 and only replace on strictly
28
+ * greater. L === 0 is a no-op (empty path). */
29
+ export declare function viterbi(bioLogits: Float32Array, L: number, crf: CrfParams, out: Int32Array): void;
package/dist/types.d.ts CHANGED
@@ -8,9 +8,20 @@ export interface Sankhya {
8
8
  currency: "INR" | null;
9
9
  confidence: number;
10
10
  classes: string[];
11
+ /** True when every decoded token is independently justified by the
12
+ * lexicon (or a structural rule for SEP/DOT/COMMA/RANGE/DIGITS) -- see
13
+ * verifyTokens() in verify.ts. A verified span's value is a pure
14
+ * function of the lexicon + arithmetic core. */
15
+ verified: boolean;
16
+ /** The (class, text) tokens the span decoded to, in order -- for
17
+ * explainability and for verifyTokens(). */
18
+ tokens: Array<[string, string]>;
11
19
  }
12
20
  export interface ParseOptions {
13
21
  backend?: "cpu" | "webgpu" | "auto";
22
+ /** When true, spans that are not verified() are dropped from the
23
+ * result. Default false. */
24
+ strict?: boolean;
14
25
  }
15
26
  /** Raw float weights JSON, as written by python/sankhya/export.py (float form). */
16
27
  export interface WeightsJsonFloat {
@@ -205,6 +216,23 @@ export interface WeightsJsonV2Float {
205
216
  data: number[];
206
217
  };
207
218
  };
219
+ /** Optional CRF params over the BIO head (3 labels: O/B/I). Stored as
220
+ * float tensors even in the int8 weights file -- 15 numbers, not worth
221
+ * quantizing. Absent -> legacy argmax BIO decoding. */
222
+ crf?: {
223
+ trans: {
224
+ shape: number[];
225
+ data: number[];
226
+ };
227
+ start: {
228
+ shape: number[];
229
+ data: number[];
230
+ };
231
+ end: {
232
+ shape: number[];
233
+ data: number[];
234
+ };
235
+ };
208
236
  }
209
237
  /** Weights JSON version 2, int8 form. */
210
238
  export interface WeightsJsonV2Int8 {
@@ -236,6 +264,22 @@ export interface WeightsJsonV2Int8 {
236
264
  };
237
265
  b: number[];
238
266
  };
267
+ /** Optional CRF params -- stored in FLOAT even in the int8 file (see
268
+ * WeightsJsonV2Float.crf). */
269
+ crf?: {
270
+ trans: {
271
+ shape: number[];
272
+ data: number[];
273
+ };
274
+ start: {
275
+ shape: number[];
276
+ data: number[];
277
+ };
278
+ end: {
279
+ shape: number[];
280
+ data: number[];
281
+ };
282
+ };
239
283
  }
240
284
  export type WeightsJson = WeightsJsonFloat | WeightsJsonInt8 | WeightsJsonV2Float | WeightsJsonV2Int8;
241
285
  export interface CharTag {
@@ -264,4 +308,7 @@ export interface ModelInfo {
264
308
  dilation: number;
265
309
  residual: boolean;
266
310
  }>;
311
+ /** Whether the loaded weights include a CRF head (Viterbi decoding used
312
+ * for BIO instead of legacy per-position argmax). */
313
+ crf: boolean;
267
314
  }
@@ -0,0 +1,3 @@
1
+ /** Verify a decoded span's token list against the lexicon + structural
2
+ * rules. Pure function of (tokens, lexicon) -- see VERIFY_CONTRACT.md. */
3
+ export declare function verifyTokens(tokens: Array<[string, string]>): boolean;
package/dist/weights.d.ts CHANGED
@@ -15,6 +15,11 @@ export interface HeadLayer {
15
15
  w: Tensor;
16
16
  b: Float32Array;
17
17
  }
18
+ export interface CrfParams {
19
+ trans: Float32Array;
20
+ start: Float32Array;
21
+ end: Float32Array;
22
+ }
18
23
  export interface LoadedWeights {
19
24
  version: number;
20
25
  charset: string[];
@@ -23,6 +28,9 @@ export interface LoadedWeights {
23
28
  conv: ConvLayer[];
24
29
  bio: HeadLayer;
25
30
  cls: HeadLayer;
31
+ /** Optional CRF params over the BIO head; undefined when the weights
32
+ * JSON has no `crf` block (legacy argmax BIO decoding). */
33
+ crf?: CrfParams;
26
34
  }
27
35
  /** Load a v1 or v2, float or int8, weights JSON (as written by
28
36
  * python/sankhya/export.py) into a normalised LoadedWeights with an ordered
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gpu-sankhya",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
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",