gpu-sankhya 0.3.3 → 0.3.4
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 +35 -10
- package/dist/core.d.ts +13 -0
- package/dist/index.js +4 -4
- package/dist/infer-cpu.d.ts +9 -1
- package/dist/types.d.ts +36 -0
- package/dist/weights.d.ts +8 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -212,21 +212,21 @@ training): 0.925 value accuracy. This number is optimistic — it's testing
|
|
|
212
212
|
the model on its own distribution.
|
|
213
213
|
|
|
214
214
|
On two hand-written gold sets, written independently of the generator —
|
|
215
|
-
`python/tests/gold.jsonl` (romanised Hindi,
|
|
216
|
-
and `python/tests/gold_deva.jsonl` (Devanagari Hindi,
|
|
215
|
+
`python/tests/gold.jsonl` (romanised Hindi, 225 sentences / 197 spans)
|
|
216
|
+
and `python/tests/gold_deva.jsonl` (Devanagari Hindi, 185 sentences / 154
|
|
217
217
|
spans) — evaluated against the shipped int8-quantized weights:
|
|
218
218
|
|
|
219
219
|
| gold set | examples | spans | value accuracy | span precision | span recall | span F1 |
|
|
220
220
|
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
|
221
|
-
| gold.jsonl (romanised) |
|
|
222
|
-
| gold_deva.jsonl (Devanagari) |
|
|
223
|
-
| combined |
|
|
221
|
+
| gold.jsonl (romanised) | 225 | 197 | 0.9543 | 0.9497 | 0.9594 | 0.9545 |
|
|
222
|
+
| gold_deva.jsonl (Devanagari) | 185 | 154 | 0.9740 | 0.9805 | 0.9805 | 0.9805 |
|
|
223
|
+
| combined | 410 | 351 | 0.9632 | 0.9632 | 0.9687 | 0.9659 |
|
|
224
224
|
|
|
225
|
-
Negatives (zero-gold-span examples,
|
|
226
|
-
Miss summary: missed
|
|
227
|
-
Per-category value accuracy: digits 0.967, words 0.
|
|
228
|
-
range 0.
|
|
229
|
-
mixed_script 1.0, long 0.
|
|
225
|
+
Negatives (zero-gold-span examples, 75 total): 0 false positives.
|
|
226
|
+
Miss summary: missed 1, spurious 1, wrong value 2, wrong boundary 10.
|
|
227
|
+
Per-category value accuracy: digits 0.967, words 0.961, prefix 0.963,
|
|
228
|
+
range 0.889, currency 1.0, multi_unit 0.917, symbol_unit 1.0,
|
|
229
|
+
mixed_script 1.0, long 0.667.
|
|
230
230
|
|
|
231
231
|
For comparison, the previous shipped weights scored, on this same
|
|
232
232
|
enlarged gold set: 0.9096 (romanised) / 0.9603 (Devanagari) / 0.9322
|
|
@@ -323,12 +323,28 @@ Raw per-character BIO/class predictions are cleaned up before evaluation:
|
|
|
323
323
|
scans 8 characters past the amount for a trailing marker word (up from
|
|
324
324
|
a shorter window that missed `"1200 rupees"` — `"rupees"` alone runs to
|
|
325
325
|
6 characters plus the leading space).
|
|
326
|
+
- **Lone-ambiguous-unit gate**: a span whose only meaningful token is a
|
|
327
|
+
single `UNIT_KHARAB` or `UNIT_MILLION` word, with no preceding
|
|
328
|
+
number/prefix and no detected currency marker, is dropped — `"kharab"`
|
|
329
|
+
(Hindi: usually "broken") and `"mil"`/`"million"` (often just an
|
|
330
|
+
English loanword/fragment) are only genuine amount units when a number
|
|
331
|
+
precedes them. `"unka washing machine kharab ho gaya hai"` no longer
|
|
332
|
+
parses; `"das kharab"`, `"2 mil"`, and `"kharab rupaye"` (currency
|
|
333
|
+
marker present) still parse. Other unit words (`"lakh"`, `"hazaar"`)
|
|
334
|
+
are unaffected.
|
|
326
335
|
- **Range-connector repair**: a bare `-`/`–`/`—`/`/` between two amounts
|
|
327
336
|
becomes a `RANGE` tag (spaces around it stay `SEP`) when the left side
|
|
328
337
|
can end an amount by itself and the right side can start a fresh one
|
|
329
338
|
(`"2 lakh/3 lakh"`, `"दो-तीन लाख"`) — but not when it's really one
|
|
330
339
|
compound number, e.g. a prefix glued straight to a unit (`"dedh-lakh"`
|
|
331
340
|
stays one span, not a range).
|
|
341
|
+
- **Word-connector span merge**: when a whole connector WORD (e.g.
|
|
342
|
+
`"se"`/`"से"`) between two separately BIO-decoded spans is itself tagged
|
|
343
|
+
`RANGE` by the class head, the two spans are merged into one `RANGE`
|
|
344
|
+
span (connector letters → `RANGE`, its flanking spaces → `SEP`) — fixes
|
|
345
|
+
the BIO head splitting a range like `"दो लाख से तीन लाख"` or `"5 hazaar
|
|
346
|
+
se 8 hazaar"` into two separate amounts even though the class head
|
|
347
|
+
correctly tagged the connector word.
|
|
332
348
|
- **Possessive trim**: a trailing `'s`/`’s` (1-2 letters) is stripped from
|
|
333
349
|
the end of a word and excluded from the span (`"2 lakh's"` → `"2 lakh"`).
|
|
334
350
|
- **Confidence filter**: a span's confidence is the mean of the max BIO
|
|
@@ -341,6 +357,15 @@ Raw per-character BIO/class predictions are cleaned up before evaluation:
|
|
|
341
357
|
genuine ranges (only one side has a unit, or both do but ascending) are
|
|
342
358
|
unaffected.
|
|
343
359
|
|
|
360
|
+
An optional linear-chain CRF (`--crf`, see `python/README.md`) can replace
|
|
361
|
+
the plain per-character argmax with Viterbi decoding, but experiments on
|
|
362
|
+
this dataset found it doesn't beat the plain model — 0.957 vs. 0.965
|
|
363
|
+
combined gold value accuracy at best — while training ~7x slower and
|
|
364
|
+
occasionally showing unexplained late-training loss blowups; the
|
|
365
|
+
structural rules above already give the decoded label sequence most of
|
|
366
|
+
the coherence a CRF would add. It ships as a tested, opt-in flag; the
|
|
367
|
+
bundled weights do not use it.
|
|
368
|
+
|
|
344
369
|
One more detail that matters more than it looks like it should: the
|
|
345
370
|
runtime right-pads the character-id array with 24 pad tokens before
|
|
346
371
|
running the forward pass (mirroring `python/sankhya/np_infer.py`'s
|
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 TA(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 GA(A){return A.version===2&&Array.isArray(A.conv)}function kA(A){return A.quantized!==void 0}function mA(A){let e=atob(A),r=new Int8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n)<<24>>24;return r}function T(A){let e=mA(A.data_b64),r=new Float32Array(e.length);for(let n=0;n<e.length;n++)r[n]=e[n]*A.scale;return{shape:A.shape,data:r}}function G(A){return{shape:A.shape,data:Float32Array.from(A.data)}}function wA(A,e){return A*(e-1)/2}function j(A){return{w:G(A.w),b:Float32Array.from(A.b.data)}}function N(A){return{w:T(A.w),b:Float32Array.from(A.b)}}function PA(A){let e=kA(A);if(GA(A)){let s=A.conv.map(B=>{let g=wA(B.dilation,B.k);if(e){let w=B;return{k:B.k,dilation:B.dilation,residual:B.residual,padding:g,w:T(w.w),b:Float32Array.from(w.b)}}let v=B;return{k:B.k,dilation:B.dilation,residual:B.residual,padding:g,w:G(v.w),b:Float32Array.from(v.b.data)}});return{version:2,charset:A.charset,classes:A.classes,embed:e?T(A.embed):G(A.embed),conv:s,bio:e?N(A.bio):j(A.bio),cls:e?N(A.cls):j(A.cls),crf:TA(A)}}let r=A.layers??3,n=A.dilation??2,f=[{name:"conv1",k:3,dilation:1},{name:"conv2",k:5,dilation:1},{name:"conv3",k:3,dilation:n}];r===4&&f.push({name:"conv4",k:3,dilation:4});let t=f.map(s=>{let B=wA(s.dilation,s.k);if(e){let P=A[s.name];if(!P)throw new Error(`missing ${s.name} in weights JSON`);return{k:s.k,dilation:s.dilation,residual:!1,padding:B,w:T(P.w),b:Float32Array.from(P.b)}}let v=A[s.name];if(!v)throw new Error(`missing ${s.name} in weights JSON`);return{k:s.k,dilation:s.dilation,residual:!1,padding:B,w:G(v.w),b:Float32Array.from(v.b.data)}});return{version:A.version??1,charset:A.charset,classes:A.classes,embed:e?T(A.embed):G(A.embed),conv:t,bio:e?N(A.bio):j(A.bio),cls:e?N(A.cls):j(A.cls)}}function yA(A){return Math.ceil(A/8)*8}function x(A){return yA(A+24)}var z=x(128),XA=/[०-९]/g;function k(A){return A.normalize("NFC").replace(XA,e=>String(e.charCodeAt(0)-2406)).toLowerCase()}function DA(A){let e=new Map;for(let r=0;r<A.length;r++)e.set(A[r],r);return e}function m(A,e,r,n){let f=e.get("<unk>")??1,t=e.get("<pad>")??0,s=n??A.length,B=r?r.subarray(0,s):new Int32Array(s);for(let g=0;g<A.length;g++)B[g]=e.get(A[g])??f;for(let g=A.length;g<s;g++)B[g]=t;return B}function nA(A){if(A<=128)return[{offset:0,length:A}];let e=[],r=112,n=0;for(;n<A;){let f=Math.min(128,A-n);if(e.push({offset:n,length:f}),n+f>=A)break;n+=r}return e}var S=class{buffers;padded;bioBuf;clsBuf;constructor(e){let r=e.conv,n=Math.max(e.embed.shape[1],...r.map(t=>t.w.shape[0]));this.buffers=[new Float32Array(n*z),new Float32Array(n*z)];let f=r.length?Math.max(...r.map(t=>t.padding)):0;this.padded=new Float32Array(n*(z+2*f)),this.bioBuf=new Float32Array(e.bio.w.shape[0]*z),this.clsBuf=new Float32Array(e.cls.w.shape[0]*z)}buf(e){return this.buffers[e%2]}paddedBuf(){return this.padded}};function YA(A,e,r,n,f,t){let[s,B,g]=n.w.shape;if(B!==e)throw new Error(`channel mismatch: expected ${e}, got ${B}`);let v=n.w.data,w=n.b,P=n.padding,o=n.dilation,D=r+2*P;for(let Q=0;Q<e;Q++)t.fill(0,Q*D,Q*D+P),t.set(A.subarray(Q*r,Q*r+r),Q*D+P),t.fill(0,Q*D+P+r,Q*D+D);for(let Q=0;Q<s;Q++){let u=Q*r,I=w[Q],i=Q*e*g;if(g===3){for(let C=0;C<r;C++)f[u+C]=I;for(let C=0;C<e;C++){let E=C*D,b=i+C*3,d=v[b],L=v[b+1],l=v[b+2];for(let c=0;c<r;c++){let a=E+c;f[u+c]+=d*t[a]+L*t[a+o]+l*t[a+2*o]}}}else if(g===5){for(let C=0;C<r;C++)f[u+C]=I;for(let C=0;C<e;C++){let E=C*D,b=i+C*5,d=v[b],L=v[b+1],l=v[b+2],c=v[b+3],a=v[b+4];for(let h=0;h<r;h++){let M=E+h;f[u+h]+=d*t[M]+L*t[M+1]+l*t[M+2]+c*t[M+3]+a*t[M+4]}}}else{for(let C=0;C<r;C++)f[u+C]=I;for(let C=0;C<e;C++){let E=C*D,b=i+C*g;for(let d=0;d<g;d++){let L=v[b+d],l=d*o,c=E+l;for(let a=0;a<r;a++)f[u+a]+=L*t[c+a]}}}if(n.residual)for(let C=0;C<r;C++){let E=f[u+C];f[u+C]=(E>0?E:0)+A[u+C]}else for(let C=0;C<r;C++){let E=f[u+C];f[u+C]=E>0?E:0}}return s}function CA(A,e,r,n,f){let[t,s]=n.w.shape;if(s!==e)throw new Error(`head channel mismatch: expected ${e}, got ${s}`);let B=n.w.data,g=n.b,v=e-e%4;for(let w=0;w<r;w++){let P=w*t;for(let o=0;o<t;o++){let D=g[o],Q=o*e,u=0;for(;u<v;u+=4)D+=B[Q+u]*A[u*r+w]+B[Q+u+1]*A[(u+1)*r+w]+B[Q+u+2]*A[(u+2)*r+w]+B[Q+u+3]*A[(u+3)*r+w];for(;u<e;u++)D+=B[Q+u]*A[u*r+w];f[P+o]=D}}return t}function J(A,e,r){let n=e.length,f=A.embed,t=f.shape[1],s=r.buf(0);for(let P=0;P<n;P++){let D=e[P]*t;for(let Q=0;Q<t;Q++)s[Q*n+P]=f.data[D+Q]}let B=t,g=r.paddedBuf(),v=1;for(let P of A.conv){let o=r.buf(v);B=YA(s,B,n,P,o,g),s=o,v++}CA(s,B,n,A.bio,r.bioBuf);let w=CA(s,B,n,A.cls,r.clsBuf);return{bioLogits:r.bioBuf,clsLogits:r.clsBuf,length:n,nCls:w}}function rA(A,e,r,n){let f=-1/0;for(let s=0;s<r;s++)f=Math.max(f,A[e+s]);let t=0;for(let s=0;s<r;s++){let B=Math.exp(A[e+s]-f);n[s]=B,t+=B}for(let s=0;s<r;s++)n[s]/=t;return n}function y(A,e,r){let n=0,f=-1/0;for(let t=0;t<r;t++){let s=A[e+t];s>f&&(f=s,n=t)}return n}var jA=new Float32Array(z*3),NA=new Int32Array(z*3);function tA(A,e,r,n){if(e===0)return;let{trans:f,start:t,end:s}=r,B=jA,g=NA;for(let o=0;o<3;o++)B[o]=Math.fround(t[o]+A[o]);for(let o=1;o<e;o++){let D=(o-1)*3,Q=o*3,u=o*3;for(let I=0;I<3;I++){let i=-1/0,C=0;for(let E=0;E<3;E++){let b=Math.fround(B[D+E]+f[E*3+I]);b>i&&(i=b,C=E)}B[Q+I]=Math.fround(i+A[u+I]),g[Q+I]=C}}let v=(e-1)*3,w=-1/0,P=0;for(let o=0;o<3;o++){let D=Math.fround(B[v+o]+s[o]);D>w&&(w=D,P=o)}n[e-1]=P;for(let o=e-1;o>0;o--)P=g[o*3+P],n[o-1]=P}var SA=["PFX_PAAV","PFX_AADHA","PFX_PAUNE","PFX_SAVA","PFX_DEDH","PFX_DHAI","PFX_SAADHE"],JA=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"],KA=["O","SEP","RANGE","DIGITS","DOT","COMMA"],F=["O",...KA.filter(A=>A!=="O"),...SA,...JA,..._A],O=Object.fromEntries(F.map((A,e)=>[A,e])),QA={UNIT_SAU:100,UNIT_HAZAAR:1e3,UNIT_LAKH:1e5,UNIT_MILLION:1e6,UNIT_CRORE:1e7,UNIT_BILLION:1e9,UNIT_ARAB:1e9,UNIT_KHARAB:1e11},_={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 uA(A){return A in BA}function cA(A){return A.startsWith("CARD_")}function aA(A){return A in QA}function iA(A){return parseInt(A.split("_",2)[1],10)}function K(A){return QA[A]}var VA=new Set(["SEP","RANGE","DOT","COMMA"]),EA=new Set([...VA,"O"]),sA=["PFX_","CARD_","UNIT_"],qA=["PFX_","CARD_","UNIT_"],ZA=new Set(["-","\u2013","\u2014","/"]),$A=new Set(["k","K","l","L"]),lA=/['’]([A-Za-zऀ-ॿ]{1,2})(?![A-Za-zऀ-ॿ])/g;function Ae(A){return sA.some(e=>A.startsWith(e))||A==="DIGITS"}function ee(A){return qA.some(e=>A.startsWith(e))}var V=O.O,U=O.SEP,W=O.RANGE,ne=O.DIGITS,re=O.DOT,te=O.COMMA,Be=/\p{L}|\p{M}/u;function R(A){return Be.test(A)?"letter":/[0-9]/.test(A)?"digit":/\s/.test(A)?"space":"punct"}function fe(A){let e=[],r=0,n=A.length;for(;r<n;){let f=R(A[r]),t=r+1;for(;t<n&&R(A[t])===f;)t++;e.push({type:f,start:r,end:t}),r=t}return e}function se(A,e,r){let n=new Map;for(let v=e;v<r;v++){let w=A[v];ee(F[w])&&n.set(w,(n.get(w)??0)+1)}if(n.size===0)return V;let f=-1;for(let v of n.values())v>f&&(f=v);let t=[...n.entries()].filter(([,v])=>v===f).map(([v])=>v);if(t.length===1)return t[0];let s=-1,B=1/0,g=t[0];for(let v of t){let w=0,P=0,o=1/0;for(let D=e;D<r;D++)A[D]===v?(o===1/0&&(o=D),w++,w>P&&(P=w)):w=0;(P>s||P===s&&o<B)&&(s=P,B=o,g=v)}return g}function hA(A,e,r){let n=[],f=e;for(;f<r;){let B=f+1;for(;B<r&&A[B]===A[f];)B++;n.push({start:f,end:B,cls:A[f]}),f=B}let t=se(A,e,r),s=[];for(let B=0;B<n.length;B++){let g=n[B];if(g.end-g.start>=3){s.push([g.start,g.end,g.cls]);continue}let w=B>0?n[B-1]:null,P=B<n.length-1?n[B+1]:null,o=w!==null&&w.end-w.start>=3,D=P!==null&&P.end-P.start>=3,Q;if(o&&D){let u=w.end-w.start;Q=P.end-P.start>u?P.cls:w.cls}else o?Q=w.cls:D?Q=P.cls:Q=t;s.push([g.start,g.end,Q])}return s}function ge(A){return sA.some(e=>A.startsWith(e))||A==="DIGITS"}function IA(A,e,r,n){if(A==="digit")return"DIGITS";if(A==="letter"){let f=hA(n,e,r),t=new Map;for(let[g,v,w]of f)t.set(w,(t.get(w)??0)+(v-g));let s=-1,B=-1;for(let[g,v]of t)v>B&&(B=v,s=g);return s>=0?F[s]:null}return null}function bA(A,e,r){let n=e+r;if(n<0||n>=A.length||A[n].type==="space"&&(n+=r,n<0||n>=A.length))return null;let f=A[n];return f.type==="digit"||f.type==="letter"?f:null}function oe(A,e,r){let n=bA(A,e,-1),f=bA(A,e,1);if(!n||!f)return!1;let t=IA(n.type,n.start,n.end,r),s=IA(f.type,f.start,f.end,r);return!t||!s||!ge(t)?!1:s==="DIGITS"||s.startsWith("CARD_")||s.startsWith("PFX_")}function ve(A,e){let r=A.length,n=new Array(r),f=fe(A);for(let t=0;t<f.length;t++){let s=f[t],{type:B,start:g,end:v}=s;if(B==="digit"){for(let D=g;D<v;D++)n[D]=ne;continue}if(B==="space"){let D=!1;for(let u=g;u<v;u++)if(e[u]===W){D=!0;break}let Q=D?W:U;for(let u=g;u<v;u++)n[u]=Q;continue}if(B==="letter"){for(let[D,Q,u]of hA(e,g,v))for(let I=D;I<Q;I++)n[I]=u;continue}let w=t>0?f[t-1].type:null,P=t<f.length-1?f[t+1].type:null,o=U;if(v-g===1){let D=A[g];(D==="."||D===",")&&w==="digit"&&P==="digit"?o=D==="."?re:te:ZA.has(D)&&oe(f,t,e)?o=W:o=U}for(let D=g;D<v;D++)n[D]=o}return n}function we(A,e){let r=Array.from({length:e},(n,f)=>A[f]);for(let n=1;n<e-1;n++)A[n]===0&&(A[n-1]===1||A[n-1]===2)&&A[n+1]===2&&(r[n]=2);return r}function HA(A){return A!==void 0&&A>="0"&&A<="9"}function Pe(A,e,r){if(r<=e||!HA(A[r-1]))return r;let n=r;for(;n<A.length&&HA(A[n]);)n++;return n}var De=24;function Ce(A,e,r){let n=[],f=e;for(;f<r;){let B=f+1;for(;B<r&&A[B]===A[f];)B++;n.push({start:f,end:B,cls:A[f]}),f=B}let t=[];for(let B=0;B<n.length;B++){let g=n[B];if(g.end-g.start>=3){t.push(g.cls);continue}let v=B>0?n[B-1]:null,w=B<n.length-1?n[B+1]:null,P=v!==null&&v.end-v.start>=3,o=w!==null&&w.end-w.start>=3;if(P&&o){let D=v.end-v.start,Q=w.end-w.start;t.push(Q>D?w.cls:v.cls)}else if(P)t.push(v.cls);else if(o)t.push(w.cls);else return null}return new Set(t).size===1?t[0]:null}function Qe(A,e,r){let n=A.length,f=Array.from({length:n},(t,s)=>A[s]);for(let[t,s]of r){let B=s-t;if(B===0||B>De)continue;let g=!1,v=!0;for(let P=t;P<s;P++)A[P]===1||A[P]===2?g=!0:v=!1;if(!g||v)continue;let w=Ce(e,t,s);if(!(w===null||!fA(F[w]))){for(let P=t;P<s;P++)f[P]=2;f[t]=1}}return f}function ue(A){let e=[],r=0,n=A.length;for(;r<n;)if(R(A[r])==="letter"){let f=r+1;for(;f<n&&R(A[f])==="letter";)f++;e.push([r,f]),r=f}else r++;return e}function fA(A){return sA.some(e=>A.startsWith(e))&&A!=="DIGITS"}function ce(A,e,r,n,f){let t=Array.from({length:n.length},(s,B)=>n[B]);for(let[s,B]of f){if(B<=e||s>=r)continue;let g=Math.max(s,e),v=Math.min(B,r),w=s>=e&&B<=r;if(w){for(let P=s;P<B;P++)if(!fA(F[t[P]])){w=!1;break}}if(w){B-s===1&&F[t[s]].startsWith("UNIT_")&&$A.has(A[s])&&B<A.length&&R(A[B])==="letter"&&(t[s]=V);continue}for(let P=g;P<v;P++)fA(F[t[P]])&&(t[P]=V)}return t}function ae(A,e,r,n){let f=Array.from({length:n.length},(B,g)=>n[g]),t=A.slice(e,r);lA.lastIndex=0;let s;for(;s=lA.exec(t);)for(let B=e+s.index;B<e+s.index+s[0].length;B++)f[B]=V;return f}function ie(A){let e=new Map;for(let s of A)e.set(s,(e.get(s)??0)+1);let r=-1;for(let s of e.values())s>r&&(r=s);let n=[...e.entries()].filter(([,s])=>s===r).map(([s])=>s);if(n.length===1)return n[0];let f=-1,t=n[0];for(let s of n){let B=0,g=0;for(let v of A)v===s?(B++,B>g&&(g=B)):B=0;g>f&&(f=g,t=s)}return t}function Ee(A,e,r){if(r.length<2)return r;let n=[r[0]];for(let f of r.slice(1)){let t=n[n.length-1],s=t.end,B=f.start,g=A.slice(s,B),v=g.length,w=0;for(;w<v&&R(g[w])==="space";)w++;let P=w;for(;w<v&&R(g[w])==="letter";)w++;let o=w;for(;w<v&&R(g[w])==="space";)w++;if(P===o||w!==v){n.push(f);continue}let D=s+P,Q=s+o,u=[];for(let E=D;E<Q;E++)u.push(e[E]);if(F[ie(u)]!=="RANGE"){n.push(f);continue}let i=[];P>0&&i.push([U,g.slice(0,P)]),i.push([W,g.slice(P,o)]),o<v&&i.push([U,g.slice(o,v)]);let C=t.confidence===null||f.confidence===null?null:(t.confidence+f.confidence)/2;n[n.length-1]={start:t.start,end:f.end,text:A.slice(t.start,f.end),tokens:[...t.tokens,...i,...f.tokens],confidence:C}}return n}function dA(A,e,r,n){let f=A.length,t=ue(A),s=we(e,f);s=Qe(s,r,t);let B=[],g=null;for(let P=0;P<f;P++){let o=s[P];o===1?(g!==null&&B.push([g,P]),g=P):o===2||g!==null&&(B.push([g,P]),g=null)}g!==null&&B.push([g,f]);for(let P=0;P<B.length;P++)B[P]=[B[P][0],Pe(A,B[P][0],B[P][1])];let v=Array.from({length:f},(P,o)=>r[o]),w=[];for(let[P,o]of B){let D=A.slice(P,o),Q=Array.from({length:o-P},(c,a)=>v[P+a]),u=ve(D,Q);for(let c=P;c<o;c++)v[c]=u[c-P];v=ce(A,P,o,v,t),v=ae(A,P,o,v);let I=P,i=[];for(let c=P+1;c<=o;c++)(c===o||v[c]!==v[I])&&(i.push([v[I],I,c]),I=c);let C=0,E=i.length;for(;C<E&&EA.has(F[i[C][0]]);)C++;for(;E>C&&EA.has(F[i[E-1][0]]);)E--;let b=i.slice(C,E);if(b.length===0)continue;let d=b[0][1],L=b[b.length-1][2];if(!b.some(([c])=>Ae(F[c])))continue;let l=null;if(n){let c=[];for(let a=d;a<L;a++)c.push(Math.max(...n[a]));if(l=c.length?c.reduce((a,h)=>a+h,0)/c.length:0,l<.5)continue}w.push({start:d,end:L,text:A.slice(d,L),tokens:b.map(([c,a,h])=>[c,A.slice(a,h)]),confidence:l})}return Ee(A,r,w)}function le(A){let e=[],r="",n=!1,f=()=>{if(n){let t=r.replace(/,/g,""),s=parseFloat(t);e.push(["NUM",Number.isNaN(s)?0:s])}r="",n=!1};for(let[t,s]of A)t!=="SEP"&&(t==="DIGITS"||t==="DOT"||t==="COMMA"?(r+=s,n=!0):(f(),e.push([t,s])));return f(),e}function Ie(A,e){if(e!==null){let r=BA[e];if(r===void 0)return A!==null?A:1;if(A!==null&&r.op){if(r.op==="sub25")return A-.25;if(r.op==="add25")return A+.25;if(r.op==="add5")return A+.5}return r.standalone}return A!==null?A:1}function be(A){let e=le(A),r=0,n=null,f=null,t=null,s=null;function B(g){let v=Ie(t,s);if(g===null)r+=v*1;else{let w=K(g);n!==null&&w>n?r=r*w:r=r+v*w,n=w,(f===null||w>K(f))&&(f=g)}t=null,s=null}for(let[g,v]of e)if(g==="NUM")t!==null&&B(null),t=v;else if(cA(g)){t!==null&&B(null);try{t=iA(g)}catch{}}else if(uA(g))s!==null&&B(null),s=g;else if(aA(g))B(g);else continue;return(t!==null||s!==null)&&B(null),[r,f]}function X(A){let e=Math.round(A),r=Math.max(1e-6,Math.abs(A)*1e-9);return Math.abs(A-e)<r?e:Math.round(A*1e6)/1e6}function He(A){let e=[],r=0;for(;r<A.length;){let[n,f]=A[r];if(n.startsWith("PFX_")){let t=f,s=r+1;for(;;){let B=s;if(B<A.length&&A[B][0]==="SEP"&&B++,B<A.length&&A[B][0]===n){for(let g=s;g<=B;g++)t+=A[g][1];s=B+1;continue}break}e.push([n,t]),r=s}else e.push(A[r]),r++}return e}function FA(A){try{let e=A.map(o=>o[0]),r=He(A),n=[[]];for(let[o,D]of r){if(o==="RANGE"){n.length<2&&n.push([]);continue}n[n.length-1].push([o,D])}let f=n.filter(o=>o.length>0).map(o=>be(o));if(f.length===0)return{value:0,range:null,unit:null,classes:e,currency:null};if(f.length===1){let[o,D]=f[0];return{value:X(o),range:null,unit:D?_[D]??null:null,classes:e,currency:null}}let[t,s]=f[0],[B,g]=f[1];if(s!==null&&g!==null&&t>B)return{value:X(t+B),range:null,unit:_[s]??null,classes:e,currency:null};let v;s===null&&g!==null?(t=t*K(g),v=g):v=s!==null?s:g;let[w,P]=t<=B?[t,B]:[B,t];return{value:X(w),range:[X(w),X(P)],unit:v?_[v]??null:null,classes:e,currency:null}}catch{return{value:0,range:null,unit:null,classes:A.map(e=>e[0]),currency:null}}}function he(A){let e=!1;for(let[r]of A)if(r==="DIGITS")e=!0;else if(r.startsWith("UNIT_")||r.startsWith("PFX_")||r.startsWith("CARD_"))return!1;return e}function MA(A){if(!he(A))return!1;let e=0,r=!1;for(let[n,f]of A)n==="DIGITS"?e+=f.length:n==="COMMA"&&(r=!0);return e<=4&&!r||e>=10}var de=new Set(["SEP","RANGE","DOT","COMMA","O"]);function LA(A){let e=A.filter(([n])=>!de.has(n));if(e.length!==1)return!1;let[r]=e[0];if(r!=="UNIT_KHARAB"&&r!=="UNIT_MILLION")return!1;for(let[n]of A)if(n==="DIGITS"||n.startsWith("CARD_")||n.startsWith("PFX_"))return!1;return!0}function zA(...A){let e=(n,f)=>f.length-n.length,r=n=>[...new Set(n.flat())].sort(e);return{currency_markers_before:r(A.map(n=>n.currency_markers_before??[])),currency_words_after:r(A.map(n=>n.currency_words_after??[]))}}function RA(A,e,r,n){let f=A.slice(Math.max(0,e-8),e),t=A.slice(r,r+8),B=f.replace(/\s+$/,"").toLowerCase(),g=[...n.currency_markers_before??[]].sort((o,D)=>D.length-o.length);for(let o of g){let D=o.replace(/\.+$/,"").toLowerCase();if(B.endsWith(o.toLowerCase())||B.endsWith(D))return"INR"}let w=t.replace(/^\s+/,"").toLowerCase(),P=[...n.currency_words_after??[]].sort((o,D)=>D.length-o.length);for(let o of P){let D=o.toLowerCase();if(w.startsWith(D))return"INR"}return null}var OA={currency_markers_before:["\u20B9","Rs","Rs.","rs","INR","Re"],currency_words_after:["rupaye","rupay","rupees","rupiya","rupya","/-"]};var 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 Fe=`
|
|
2
2
|
struct Params { batch: u32, length: u32, embedDim: u32, vocab: u32, stride: u32 };
|
|
3
3
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
4
4
|
@group(0) @binding(1) var<storage, read> charIds: array<i32>;
|
|
@@ -17,7 +17,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
17
17
|
xOut[(b * p.embedDim + c) * p.length + t] = embed[cid * p.embedDim + c];
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
`,
|
|
20
|
+
`,Me=`
|
|
21
21
|
struct Params { batch: u32, length: u32, cIn: u32, cOut: u32, k: u32, padding: u32, dilation: u32, relu: u32, residual: u32, stride: u32 };
|
|
22
22
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
23
23
|
@group(0) @binding(1) var<storage, read> x: array<f32>; // (batch, cIn, L)
|
|
@@ -52,7 +52,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
52
52
|
}
|
|
53
53
|
out[(b * p.cOut + oc) * p.length + t] = acc;
|
|
54
54
|
}
|
|
55
|
-
`,
|
|
55
|
+
`,Le=`
|
|
56
56
|
struct Params { batch: u32, length: u32, cIn: u32, nOut: u32, stride: u32 };
|
|
57
57
|
@group(0) @binding(0) var<uniform> p: Params;
|
|
58
58
|
@group(0) @binding(1) var<storage, read> x: array<f32>; // (batch, cIn, L)
|
|
@@ -76,4 +76,4 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
|
76
76
|
}
|
|
77
77
|
out[(b * p.length + t) * p.nOut + o] = acc;
|
|
78
78
|
}
|
|
79
|
-
`;function 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:"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"},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 gA(){return typeof navigator<"u"&&!!navigator.gpu}var q=null;function oA(){return q||(q=(async()=>{if(!gA())return!1;try{return await navigator.gpu.requestAdapter()!==null}catch{return!1}})(),q)}var Z=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 r=await e.requestDevice(),n=(B,g)=>{let v=r.createBuffer({size:Math.max(4,B.byteLength),usage:g,mappedAtCreation:!0});return new Float32Array(v.getMappedRange()).set(B),v.unmap(),v},f=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,t=this.weights,s=t.conv.map(B=>({w:n(B.w.data,f),b:n(B.b,f)}));return this.state={device:r,embedModule:r.createShaderModule({code:Fe}),convModule:r.createShaderModule({code:Me}),headModule:r.createShaderModule({code:Le}),embedBuf:n(t.embed.data,f),convBufs:s,bioBuf:{w:n(t.bio.w.data,f),b:n(t.bio.b,f)},clsBuf:{w:n(t.cls.w.data,f),b:n(t.cls.b,f)}},this.state}async run(e,r,n){let f=await this.init(),{device:t}=f,s=this.weights,B=s.embed.shape[1],g=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,v=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,w=t.createBuffer({size:e.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,mappedAtCreation:!0});new Int32Array(w.getMappedRange()).set(e),w.unmap();let P=l=>{let c=t.createBuffer({size:l.byteLength,usage:v,mappedAtCreation:!0});return new Uint32Array(c.getMappedRange()).set(l),c.unmap(),c},o=t.limits?.maxComputeWorkgroupsPerDimension??65535,D=l=>{let c=Math.max(1,Math.ceil(l/64)),a=Math.min(c,o),h=Math.ceil(c/a);return{x:a,y:h,stride:a*64}},Q=(l,c,a)=>{let h=t.createBindGroup({layout:l.getBindGroupLayout(0),entries:c}),M=t.createCommandEncoder(),H=M.beginComputePass();H.setPipeline(l),H.setBindGroup(0,h),H.dispatchWorkgroups(a.x,a.y),H.end(),t.queue.submit([M.finish()])},u=t.createBuffer({size:r*B*n*4,usage:g});{let l=D(r*n),c=P(new Uint32Array([r,n,B,s.embed.shape[0],l.stride])),a=t.createComputePipeline({layout:"auto",compute:{module:f.embedModule,entryPoint:"main"}});Q(a,[{binding:0,resource:{buffer:c}},{binding:1,resource:{buffer:w}},{binding:2,resource:{buffer:f.embedBuf}},{binding:3,resource:{buffer:u}}],l)}let I=B,i=s.conv,C=t.createComputePipeline({layout:"auto",compute:{module:f.convModule,entryPoint:"main"}});for(let l=0;l<i.length;l++){let c=i[l],[a,,h]=c.w.shape,M=c.dilation,H=c.padding,p=t.createBuffer({size:r*a*n*4,usage:g}),Y=D(r*a*n),pA=P(new Uint32Array([r,n,I,a,h,H,M,1,c.residual?1:0,Y.stride]));Q(C,[{binding:0,resource:{buffer:pA}},{binding:1,resource:{buffer:u}},{binding:2,resource:{buffer:f.convBufs[l].w}},{binding:3,resource:{buffer:f.convBufs[l].b}},{binding:4,resource:{buffer:p}}],Y),u=p,I=a}let E=t.createComputePipeline({layout:"auto",compute:{module:f.headModule,entryPoint:"main"}}),b=async(l,c)=>{let a=t.createBuffer({size:r*n*c*4,usage:g}),h=D(r*n*c),M=P(new Uint32Array([r,n,I,c,h.stride]));Q(E,[{binding:0,resource:{buffer:M}},{binding:1,resource:{buffer:u}},{binding:2,resource:{buffer:l.w}},{binding:3,resource:{buffer:l.b}},{binding:4,resource:{buffer:a}}],h);let H=t.createBuffer({size:r*n*c*4,usage:GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ}),p=t.createCommandEncoder();p.copyBufferToBuffer(a,0,H,0,r*n*c*4),t.queue.submit([p.finish()]),await H.mapAsync(GPUMapMode.READ);let Y=new Float32Array(H.getMappedRange().slice(0));return H.unmap(),Y},d=await b(f.bioBuf,s.bio.w.shape[0]),L=await b(f.clsBuf,s.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:.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 AA=class{weights;charToId;gpu=null;defaultBackend;scratch;idsScratch=new Int32Array(z);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 S(this.weights)}parse(e,r={}){if(typeof e!="string")return[];let n=e;e=k(e);let f=n.length===e.length,t,s=nA(e.length);if(s.length===1&&s[0].length===e.length){let B=x(e.length),g=m(e,this.charToId,this.idsScratch,B),v=J(this.weights,g,this.scratch);t=this.decodeForward(e,v,0,e.length)}else{let B=[],g=new Set;for(let v of s){let w=e.slice(v.offset,v.offset+v.length),P=x(w.length),o=m(w,this.charToId,this.idsScratch,P),D=J(this.weights,o,this.scratch),Q=this.decodeForward(w,D,v.offset,w.length);for(let u of Q){let I=`${u.start}:${u.end}`;g.has(I)||(g.add(I),B.push(u))}}B.sort((v,w)=>v.start-w.start),t=B}if(f)for(let B of t)B.span=n.slice(B.start,B.end);return t}decodeForward(e,r,n,f=r.length){let t=f,s=t<=128,B=s?this.bioIdsScratch:new Int32Array(t),g=s?this.clsIdsScratch:new Int32Array(t),v=s?this.bioProbsScratch:Array.from({length:t},()=>new Float32Array(3));this.weights.crf&&tA(r.bioLogits,t,this.weights.crf,B);for(let o=0;o<t;o++)this.weights.crf||(B[o]=y(r.bioLogits,o*3,3)),g[o]=y(r.clsLogits,o*r.nCls,r.nCls),rA(r.bioLogits,o*3,3,v[o]);let w=dA(e,B.subarray(0,t),g.subarray(0,t),v),P=[];for(let o of w){let D=o.tokens.map(([I,i])=>[F[I],i]),Q=RA(e,o.start,o.end,Re);if(MA(D)&&Q===null||LA(D)&&Q===null)continue;let u=FA(D);P.push({span:o.text,start:o.start+n,end:o.end+n,value:u.value,...u.range?{range:u.range}:{},unit:u.unit??null,currency:Q,confidence:o.confidence??0,classes:u.classes})}return P}inspect(e){let r=performance.now();typeof e!="string"&&(e="");let n=k(e),f=nA(n.length),t=new Array(n.length),s=new Array(n.length).fill(!1);for(let v of f){let w=n.slice(v.offset,v.offset+v.length),P=x(w.length),o=m(w,this.charToId,this.idsScratch,P),D=J(this.weights,o,this.scratch);this.weights.crf&&tA(D.bioLogits,w.length,this.weights.crf,this.bioIdsScratch);for(let Q=0;Q<w.length;Q++){let u=v.offset+Q;if(s[u])continue;s[u]=!0;let I=this.weights.crf?this.bioIdsScratch[Q]:y(D.bioLogits,Q*3,3),i=new Float32Array(3);rA(D.bioLogits,Q*3,3,i);let C=y(D.clsLogits,Q*D.nCls,D.nCls);t[u]={ch:w[Q],bio:I,bioProb:[i[0],i[1],i[2]],cls:F[C],clsId:C}}}let B=this.parse(e),g=performance.now()-r;return{text:n,chars:t,spans:B,ms:g}}modelInfo(){let e=this.weights,r=e.embed.data.length;for(let f of e.conv)r+=f.w.data.length+f.b.length;r+=e.bio.w.data.length+e.bio.b.length,r+=e.cls.w.data.length+e.cls.b.length,e.crf&&(r+=e.crf.trans.length+e.crf.start.length+e.crf.end.length);let n=e.conv.length?Math.max(...e.conv.map(f=>f.w.shape[0])):e.embed.shape[1];return{version:e.version,params:r,channels:n,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})),crf:!!e.crf}}async parseBatch(e,r={}){e=e.map(w=>typeof w=="string"?w:"");let n=r.backend??this.defaultBackend;if(!(n==="webgpu"||n==="auto"&&e.length>=32&&await oA()))return e.map(w=>this.parse(w,{backend:"cpu"}));let t=e,s=e.map(k),B=new Array(e.length),g=[],v=[];for(let w=0;w<s.length;w++)s[w].length<=128?g.push(w):v.push(w);for(let w of v)B[w]=this.parse(t[w],{backend:"cpu"});if(g.length>0){this.gpu||(this.gpu=new Z(this.weights));let w=Math.max(...g.map(C=>s[C].length),1),P=x(w),o=g.length,D=new Int32Array(o*P),Q=this.charToId.get("<pad>")??0;D.fill(Q);for(let C=0;C<o;C++){let E=s[g[C]],b=m(E,this.charToId);D.set(b,C*P)}let{bio:u,cls:I}=await this.gpu.run(D,o,P),i=this.weights.cls.w.shape[0];for(let C=0;C<o;C++){let E=g[C],b=s[E],d=t[E],L=d.length===b.length,l=b.length,c=new Float32Array(l*3),a=new Float32Array(l*i);for(let H=0;H<l;H++)c.set(u.subarray((C*P+H)*3,(C*P+H)*3+3),H*3),a.set(I.subarray((C*P+H)*i,(C*P+H)*i+i),H*i);let h={bioLogits:c,clsLogits:a,length:l,nCls:i},M=this.decodeForward(b,h,0,l);if(L)for(let H of M)H.span=d.slice(H.start,H.end);B[E]=M}}return B}},vA=null;function eA(){return vA||(vA=new AA),vA}function $e(A,e={}){return eA().parse(A,e)}function An(A,e={}){return eA().parseBatch(A,e)}function en(A){return eA().inspect(A)}function nn(){return eA().modelInfo()}function rn(A={}){return new AA(A)}var Re=zA(OA,xA);export{F as CLASSES,AA as Parser,rn as createParser,en as inspect,gA as isWebGPUAvailable,nn as modelInfo,k as normalizeText,$e as parse,An as parseBatch,oA as probeWebGPU};
|
package/dist/infer-cpu.d.ts
CHANGED
|
@@ -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
|
@@ -205,6 +205,23 @@ export interface WeightsJsonV2Float {
|
|
|
205
205
|
data: number[];
|
|
206
206
|
};
|
|
207
207
|
};
|
|
208
|
+
/** Optional CRF params over the BIO head (3 labels: O/B/I). Stored as
|
|
209
|
+
* float tensors even in the int8 weights file -- 15 numbers, not worth
|
|
210
|
+
* quantizing. Absent -> legacy argmax BIO decoding. */
|
|
211
|
+
crf?: {
|
|
212
|
+
trans: {
|
|
213
|
+
shape: number[];
|
|
214
|
+
data: number[];
|
|
215
|
+
};
|
|
216
|
+
start: {
|
|
217
|
+
shape: number[];
|
|
218
|
+
data: number[];
|
|
219
|
+
};
|
|
220
|
+
end: {
|
|
221
|
+
shape: number[];
|
|
222
|
+
data: number[];
|
|
223
|
+
};
|
|
224
|
+
};
|
|
208
225
|
}
|
|
209
226
|
/** Weights JSON version 2, int8 form. */
|
|
210
227
|
export interface WeightsJsonV2Int8 {
|
|
@@ -236,6 +253,22 @@ export interface WeightsJsonV2Int8 {
|
|
|
236
253
|
};
|
|
237
254
|
b: number[];
|
|
238
255
|
};
|
|
256
|
+
/** Optional CRF params -- stored in FLOAT even in the int8 file (see
|
|
257
|
+
* WeightsJsonV2Float.crf). */
|
|
258
|
+
crf?: {
|
|
259
|
+
trans: {
|
|
260
|
+
shape: number[];
|
|
261
|
+
data: number[];
|
|
262
|
+
};
|
|
263
|
+
start: {
|
|
264
|
+
shape: number[];
|
|
265
|
+
data: number[];
|
|
266
|
+
};
|
|
267
|
+
end: {
|
|
268
|
+
shape: number[];
|
|
269
|
+
data: number[];
|
|
270
|
+
};
|
|
271
|
+
};
|
|
239
272
|
}
|
|
240
273
|
export type WeightsJson = WeightsJsonFloat | WeightsJsonInt8 | WeightsJsonV2Float | WeightsJsonV2Int8;
|
|
241
274
|
export interface CharTag {
|
|
@@ -264,4 +297,7 @@ export interface ModelInfo {
|
|
|
264
297
|
dilation: number;
|
|
265
298
|
residual: boolean;
|
|
266
299
|
}>;
|
|
300
|
+
/** Whether the loaded weights include a CRF head (Viterbi decoding used
|
|
301
|
+
* for BIO instead of legacy per-position argmax). */
|
|
302
|
+
crf: boolean;
|
|
267
303
|
}
|
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
|