scanic 1.3.0 โ†’ 1.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
@@ -43,7 +43,7 @@ Traditional web scanning solutions often force a trade-off:
43
43
  - ๐Ÿฆ€ **WASM Core**: High-performance Gaussian Blur, Canny Edge Detection, and Dilation.
44
44
  - ๐Ÿ› ๏ธ **Modern API**: Clean, Promise-based API with full **TypeScript** support.
45
45
  - ๐Ÿ“ฆ **Featherweight**: Under **100KB** total size (gzipped).
46
- - ๐Ÿค– **Optional ML detector**: opt into a neural corner detector for hard photos โ€” lazy-loaded, zero cost to classical users. See the [ML Detection guide](https://marquaye.github.io/scanic/guide/ml-detection).
46
+ - ๐Ÿค– **Optional ML detector**: opt into a neural corner detector for hard photos โ€” lazy-loaded, zero cost to classical users, and powered by a **custom minimal ONNX Runtime build** (1.5 MB WASM, ~88% smaller than stock) instead of the usual 13 MB. See the [ML Detection guide](https://marquaye.github.io/scanic/guide/ml-detection).
47
47
  - ๐Ÿงช **Production Grade**: Built-in regression tests with physical image baselines.
48
48
 
49
49
  ## ๐Ÿ†• What's New
@@ -52,6 +52,7 @@ See the [**full documentation**](https://marquaye.github.io/scanic), the
52
52
  [**changelog**](CHANGELOG.md), and the [**releases**](https://github.com/marquaye/scanic/releases)
53
53
  for the latest. Recent highlights:
54
54
 
55
+ - **Optional ML detector** โ€” opt into a neural corner detector (`detector: 'ml'`) for hard photos: cluttered desks, low contrast, strong perspective. Lazy-loaded and zero cost to classical users. See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection).
55
56
  - **Styleable corner editor** โ€” a built-in, touch-friendly UI to fine-tune detected corners, now fully themeable via CSS variables with a polished default toolbar. See the [corner editor guide](https://marquaye.github.io/scanic/guide/corner-editor).
56
57
  - **New docs site** with guides for Web/Node.js/Electron/React/Vue and an interactive in-browser playground.
57
58
 
@@ -100,6 +101,40 @@ if (extracted.success) {
100
101
  }
101
102
  ```
102
103
 
104
+ ### ML Detection (Optional)
105
+
106
+ For hard photos, opt into the neural detector. It's lazy-loaded and needs **no
107
+ extra install** โ€” just scanic:
108
+
109
+ ```bash
110
+ npm install scanic
111
+ ```
112
+
113
+ ```js
114
+ import { scanDocument } from 'scanic';
115
+
116
+ const result = await scanDocument(imageElement, { detector: 'ml' });
117
+ if (result.success) {
118
+ console.log(result.corners);
119
+ console.log(result.score); // P(document present), 0โ€“1
120
+ }
121
+ ```
122
+
123
+ The ONNX Runtime JS API is bundled as a **lazy, code-split chunk** (~50 KB, gzip
124
+ ~15 KB) that classical users never download. On first ML use, scanic fetches
125
+ ~2 MB from a CDN (the companion [`scanic-ml`](https://www.npmjs.com/package/scanic-ml)
126
+ package): a 1.9 MB channel-slimmed SimCC model plus a **custom minimal ONNX
127
+ Runtime Web build** โ€” just 1.5 MB of WASM (~88% smaller than stock ort-web's
128
+ ~13 MB), compiled with only the ~18 operators this model needs while keeping the
129
+ same MLAS SIMD kernels, so it's the same speed at a fraction of the size.
130
+
131
+ > UMD/`<script>` consumers: the bundle applies to the ESM build. For ML on the
132
+ > UMD/CommonJS build, load `onnxruntime-web@1.23.x` yourself (it stays external
133
+ > there because UMD can't code-split).
134
+
135
+ See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection)
136
+ for the full size/speed story, warm-up, self-hosting, and threading.
137
+
103
138
  ### Manual Corner Adjustment UI (New)
104
139
 
105
140
  Use the built-in corner editor to let users drag corners on mobile and desktop,
@@ -200,6 +235,7 @@ The primary function for detecting and extracting documents.
200
235
  #### `options` Properties
201
236
  | Option | Type | Default | Description |
202
237
  | :--- | :--- | :--- | :--- |
238
+ | `detector` | `'classical' \| 'ml'` | `'classical'` | Corner detection method. `'ml'` uses the optional neural detector (lazy-loaded; no extra install). See the [ML Detection guide](https://marquaye.github.io/scanic/guide/ml-detection). |
203
239
  | `mode` | `'detect' \| 'extract'` | `'detect'` | `'detect'` returns coordinates; `'extract'` returns the warped image. |
204
240
  | `output` | `'canvas' \| 'imagedata' \| 'dataurl'` | `'canvas'` | The format of the returned processed image. |
205
241
  | `maxProcessingDimension` | `number` | `800` | Downscales image to this size for detection (faster). |
@@ -217,6 +253,16 @@ The primary function for detecting and extracting documents.
217
253
  | `maxDocumentAspectRatio` | `number` | `8` | Maximum accepted aspect ratio for candidates. |
218
254
  | `debug` | `boolean` | `false` | If true, returns intermediate processing steps. |
219
255
 
256
+ ##### `options.ml` (only when `detector: 'ml'`)
257
+ | Option | Type | Default | Description |
258
+ | :--- | :--- | :--- | :--- |
259
+ | `assetBaseUrl` | `string` | jsDelivr `scanic-ml` | Base URL serving the `.wasm` + `.ort` assets. Set to self-host. |
260
+ | `modelUrl` | `string` | `${assetBaseUrl}doccornernet_lean.ort` | Explicit model URL. |
261
+ | `wasmPaths` | `string` | `assetBaseUrl` | Directory for the ORT wasm/loader. |
262
+ | `modelBytes` | `Uint8Array` | โ€” | Pre-fetched model bytes (skips the network). |
263
+ | `numThreads` | `number` | `1` | ORT threads. `>1` needs COOP/COEP headers. |
264
+ | `minScore` | `number` | `0.5` | Minimum P(document) for `success: true`. |
265
+
220
266
  #### Return Value
221
267
  Returns a `Promise<ScannerResult>`:
222
268
  ```ts
@@ -225,6 +271,7 @@ Returns a `Promise<ScannerResult>`:
225
271
  corners: CornerPoints; // { topLeft, topRight, bottomRight, bottomLeft }
226
272
  output: any; // The warped image (if mode is 'extract')
227
273
  contour: Array<Point>; // Raw detection points
274
+ score?: number; // P(document present), 0โ€“1 (ML detector only)
228
275
  timings: Array<Object>; // Performance breakdown
229
276
  message: string; // Status or error message
230
277
  }
@@ -0,0 +1 @@
1
+ var e=224,t=[.485,.456,.406],n=[.229,.224,.225],o=["topLeft","topRight","bottomRight","bottomLeft"],a=null,r=/* @__PURE__ */new Map;async function i(){return a||(a=import("./scanic-ort.wasm.min.js").catch(e=>{throw a=null,new Error(`scanic: failed to load the ML runtime (onnxruntime-web). It is bundled with scanic's ESM build; if you use the UMD/CommonJS build, install it alongside scanic: \`npm install onnxruntime-web@1.23.x\`. (original error: ${e?.message||e})`)})),a}async function s(e){const t=(n=e.assetBaseUrl||"https://cdn.jsdelivr.net/npm/scanic-ml@0.1.0/dist/").endsWith("/")?n:`${n}/`;var n;const o=e.modelUrl||`${t}doccornernet_lean.ort`;if(r.has(o))return r.get(o);const a=(async()=>{const n=await i();n.env.wasm.wasmPaths=e.wasmPaths||t,void 0!==e.numThreads?n.env.wasm.numThreads=e.numThreads:n.env.wasm.numThreads=1,n.env.wasm.proxy=!1;const a=e.modelBytes||new Uint8Array(await(await fetch(o)).arrayBuffer());return{ort:n,session:await n.InferenceSession.create(a,{executionProviders:["wasm"],graphOptimizationLevel:"all"})}})();r.set(o,a);try{return await a}catch(s){throw r.delete(o),s}}async function c(a,r={}){const c=[],{width:d,height:u}=function(e){if(e&&"number"==typeof e.width&&"number"==typeof e.height&&e.data)return{width:e.width,height:e.height};if(e)return{width:e.width||e.naturalWidth,height:e.height||e.naturalHeight};throw new Error("No image provided")}(a);let m=("undefined"!=typeof performance?performance:Date).now();const{session:h}=await s(r);c.push({step:"ML Session Load",ms:(("undefined"!=typeof performance?performance:Date).now()-m).toFixed(2)});const l=await i();m=("undefined"!=typeof performance?performance:Date).now();const f=r.inputData||function(o){const a="undefined"!=typeof OffscreenCanvas,r=a?new OffscreenCanvas(e,e):document.createElement("canvas");a||(r.width=e,r.height=e);const i=r.getContext("2d",{willReadFrequently:!0});if(i.imageSmoothingEnabled=!0,i.imageSmoothingQuality="medium",o&&"number"==typeof o.width&&"number"==typeof o.height&&o.data){const t=a?new OffscreenCanvas(o.width,o.height):document.createElement("canvas");a||(t.width=o.width,t.height=o.height),t.getContext("2d").putImageData(o,0,0),i.drawImage(t,0,0,o.width,o.height,0,0,e,e)}else{const t=o.width||o.naturalWidth,n=o.height||o.naturalHeight;i.drawImage(o,0,0,t,n,0,0,e,e)}const{data:s}=i.getImageData(0,0,e,e),c=new Float32Array(150528);for(let e=0,d=0;e<s.length;e+=4,d+=3)c[d]=(s[e]/255-t[0])/n[0],c[d+1]=(s[e+1]/255-t[1])/n[1],c[d+2]=(s[e+2]/255-t[2])/n[2];return c}(a),w=new l.Tensor("float32",f,[1,e,e,3]);c.push({step:"ML Preprocess",ms:(("undefined"!=typeof performance?performance:Date).now()-m).toFixed(2)}),m=("undefined"!=typeof performance?performance:Date).now();const p=await h.run({[h.inputNames[0]]:w});c.push({step:"ML Inference",ms:(("undefined"!=typeof performance?performance:Date).now()-m).toFixed(2)});const g=function(e,t,n){let a=null,r=null;for(const o in e){const t=e[o].data;8===t.length?a=t:1===t.length&&(r=t[0])}if(!a)return null;const i={};for(let c=0;c<4;c++)i[o[c]]={x:a[2*c]*t,y:a[2*c+1]*n};return{corners:i,score:null===r?null:(s=r,1/(1+Math.exp(-s)))};var s}(p,d,u);if(!g)return{success:!1,corners:null,confidence:null,score:null,message:"ML model produced no coordinates",timings:c};const y=void 0!==r.minScore?r.minScore:.5,v=null===g.score||g.score>=y;return{success:v,corners:g.corners,confidence:g.score,score:g.score,message:v?"Document detected (ml)":"No confident document (ml)",timings:c}}async function d(e={}){await s(e)}export{c as detectDocumentMl,d as initializeMl};
@@ -0,0 +1 @@
1
+ var e,t,r,n,a,o,i,s,l,u,f,p,d,c,w,h,y,m,g,b,E,v,T,A,C,R,O,U,I,L,x,P,_,$,B=/* @__PURE__ */(e=>"undefined"!=typeof require?require:"undefined"!=typeof Proxy?new Proxy(e,{get:(e,t)=>("undefined"!=typeof require?require:e)[t]}):e)(function(e){if("undefined"!=typeof require)return require.apply(this,arguments);throw Error('Calling `require` for "'+e+"\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.")}),N=Object.defineProperty,M=Object.getOwnPropertyDescriptor,S=Object.getOwnPropertyNames,k=Object.prototype.hasOwnProperty,D=(e=function(e){if(typeof B<"u")return B.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')},typeof B<"u"?B:typeof Proxy<"u"?new Proxy(e,{get:(e,t)=>(typeof B<"u"?B:e)[t]}):e),G=(e,t)=>()=>(e&&(t=e(e=0)),t),F=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},j=e=>((e,t,r,n)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of S(t))!k.call(e,a)&&a!==r&&N(e,a,{get:()=>t[a],enumerable:!(n=M(t,a))||n.enumerable});return e})(N({},"__esModule",{value:!0}),e),V=G(()=>{t=/* @__PURE__ */new Map,r=[],n=(e,n,a)=>{if(n&&"function"==typeof n.init&&"function"==typeof n.createInferenceSessionHandler){let o=t.get(e);if(void 0===o)t.set(e,{backend:n,priority:a});else{if(o.priority>a)return;if(o.priority===a&&o.backend!==n)throw new Error(`cannot register backend "${e}" using priority ${a}`)}if(a>=0){let n=r.indexOf(e);-1!==n&&r.splice(n,1);for(let o=0;o<r.length;o++)if(t.get(r[o]).priority<=a)return void r.splice(o,0,e);r.push(e)}return}throw new TypeError("not a valid backend")},a=async e=>{let r=t.get(e);if(!r)return"backend not found.";if(r.initialized)return r.backend;if(r.aborted)return r.error;{let t=!!r.initPromise;try{return t||(r.initPromise=r.backend.init(e)),await r.initPromise,r.initialized=!0,r.backend}catch(n){return t||(r.error=`${n}`,r.aborted=!0),r.error}finally{delete r.initPromise}}},o=async e=>{let t,n=e.executionProviders||[],o=n.map(e=>"string"==typeof e?e:e.name),i=0===o.length?r:o,s=[],l=/* @__PURE__ */new Set;for(let r of i){let e=await a(r);"string"==typeof e?s.push({name:r,err:e}):(t||(t=e),t===e&&l.add(r))}if(!t)throw new Error(`no available backend found. ERR: ${s.map(e=>`[${e.name}] ${e.err}`).join(", ")}`);for(let{name:r,err:a}of s)o.includes(r);let u=n.filter(e=>l.has("string"==typeof e?e:e.name));return[t,new Proxy(e,{get:(e,t)=>"executionProviders"===t?u:Reflect.get(e,t)})]}}),W=G(()=>{V()}),H=G(()=>{i="1.23.2"}),z=G(()=>{H(),s="warning",l={wasm:{},webgl:{},webgpu:{},versions:{common:i},set logLevel(e){if(void 0!==e){if("string"!=typeof e||-1===["verbose","info","warning","error","fatal"].indexOf(e))throw new Error(`Unsupported logging level: ${e}`);s=e}},get logLevel(){return s}},Object.defineProperty(l,"logLevel",{enumerable:!0})}),q=G(()=>{z(),u=l}),Z=G(()=>{f=(e,t)=>{let r=typeof document<"u"?document.createElement("canvas"):new OffscreenCanvas(1,1);r.width=e.dims[3],r.height=e.dims[2];let n=r.getContext("2d");if(null!=n){let a,o;void 0!==t?.tensorLayout&&"NHWC"===t.tensorLayout?(a=e.dims[2],o=e.dims[3]):(a=e.dims[3],o=e.dims[2]);let i,s,l=void 0!==t?.format?t.format:"RGB",u=t?.norm;void 0===u||void 0===u.mean?i=[255,255,255,255]:"number"==typeof u.mean?i=[u.mean,u.mean,u.mean,u.mean]:(i=[u.mean[0],u.mean[1],u.mean[2],0],void 0!==u.mean[3]&&(i[3]=u.mean[3])),void 0===u||void 0===u.bias?s=[0,0,0,0]:"number"==typeof u.bias?s=[u.bias,u.bias,u.bias,u.bias]:(s=[u.bias[0],u.bias[1],u.bias[2],0],void 0!==u.bias[3]&&(s[3]=u.bias[3]));let f=o*a,p=0,d=f,c=2*f,w=-1;"RGBA"===l?(p=0,d=f,c=2*f,w=3*f):"RGB"===l?(p=0,d=f,c=2*f):"RBG"===l&&(p=0,c=f,d=2*f);for(let t=0;t<o;t++)for(let r=0;r<a;r++){let a=(e.data[p++]-s[0])*i[0],o=(e.data[d++]-s[1])*i[1],l=(e.data[c++]-s[2])*i[2],u=-1===w?255:(e.data[w++]-s[3])*i[3];n.fillStyle="rgba("+a+","+o+","+l+","+u+")",n.fillRect(r,t,1,1)}if("toDataURL"in r)return r.toDataURL();throw new Error("toDataURL is not supported")}throw new Error("Can not access image data")},p=(e,t)=>{let r,n=typeof document<"u"?document.createElement("canvas").getContext("2d"):new OffscreenCanvas(1,1).getContext("2d");if(null==n)throw new Error("Can not access image data");{let a,o,i;void 0!==t?.tensorLayout&&"NHWC"===t.tensorLayout?(a=e.dims[2],o=e.dims[1],i=e.dims[3]):(a=e.dims[3],o=e.dims[2],i=e.dims[1]);let s,l,u=void 0!==t&&void 0!==t.format?t.format:"RGB",f=t?.norm;void 0===f||void 0===f.mean?s=[255,255,255,255]:"number"==typeof f.mean?s=[f.mean,f.mean,f.mean,f.mean]:(s=[f.mean[0],f.mean[1],f.mean[2],255],void 0!==f.mean[3]&&(s[3]=f.mean[3])),void 0===f||void 0===f.bias?l=[0,0,0,0]:"number"==typeof f.bias?l=[f.bias,f.bias,f.bias,f.bias]:(l=[f.bias[0],f.bias[1],f.bias[2],0],void 0!==f.bias[3]&&(l[3]=f.bias[3]));let p=o*a;if(void 0!==t&&(void 0!==t.format&&4===i&&"RGBA"!==t.format||3===i&&"RGB"!==t.format&&"BGR"!==t.format))throw new Error("Tensor format doesn't match input tensor dims");let d=4,c=0,w=1,h=2,y=3,m=0,g=p,b=2*p,E=-1;"RGBA"===u?(m=0,g=p,b=2*p,E=3*p):"RGB"===u?(m=0,g=p,b=2*p):"RBG"===u&&(m=0,b=p,g=2*p),r=n.createImageData(a,o);for(let t=0;t<o*a;c+=d,w+=d,h+=d,y+=d,t++)r.data[c]=(e.data[m++]-l[0])*s[0],r.data[w]=(e.data[g++]-l[1])*s[1],r.data[h]=(e.data[b++]-l[2])*s[2],r.data[y]=-1===E?255:(e.data[E++]-l[3])*s[3]}return r}}),J=G(()=>{Q(),d=(e,t)=>{if(void 0===e)throw new Error("Image buffer must be defined");if(void 0===t.height||void 0===t.width)throw new Error("Image height and width must be defined");if("NHWC"===t.tensorLayout)throw new Error("NHWC Tensor layout is not supported yet");let r,n,{height:a,width:o}=t,i=t.norm??{mean:255,bias:0};r="number"==typeof i.mean?[i.mean,i.mean,i.mean,i.mean]:[i.mean[0],i.mean[1],i.mean[2],i.mean[3]??255],n="number"==typeof i.bias?[i.bias,i.bias,i.bias,i.bias]:[i.bias[0],i.bias[1],i.bias[2],i.bias[3]??0];let s=void 0!==t.format?t.format:"RGBA",l=void 0!==t.tensorFormat&&void 0!==t.tensorFormat?t.tensorFormat:"RGB",u=a*o,f="RGBA"===l?new Float32Array(4*u):new Float32Array(3*u),p=4,d=0,c=1,w=2,h=3,y=0,m=u,g=2*u,b=-1;"RGB"===s&&(p=3,d=0,c=1,w=2,h=-1),"RGBA"===l?b=3*u:"RBG"===l?(y=0,g=u,m=2*u):"BGR"===l&&(g=0,m=u,y=2*u);for(let E=0;E<u;E++,d+=p,w+=p,c+=p,h+=p)f[y++]=(e[d]+n[0])/r[0],f[m++]=(e[c]+n[1])/r[1],f[g++]=(e[w]+n[2])/r[2],-1!==b&&-1!==h&&(f[b++]=(e[h]+n[3])/r[3]);return new C("float32",f,"RGBA"===l?[1,4,a,o]:[1,3,a,o])},c=async(e,t)=>{let r,n=typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement,a=typeof ImageData<"u"&&e instanceof ImageData,o=typeof ImageBitmap<"u"&&e instanceof ImageBitmap,i="string"==typeof e,s=t??{},l=()=>{if(typeof document<"u")return document.createElement("canvas");if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(1,1);throw new Error("Canvas is not supported")},u=e=>typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||e instanceof OffscreenCanvas?e.getContext("2d"):null;if(n){let n=l();n.width=e.width,n.height=e.height;let a=u(n);if(null==a)throw new Error("Can not access image data");{let n=e.height,o=e.width;if(void 0!==t&&void 0!==t.resizedHeight&&void 0!==t.resizedWidth&&(n=t.resizedHeight,o=t.resizedWidth),void 0!==t){if(s=t,void 0!==t.tensorFormat)throw new Error("Image input config format must be RGBA for HTMLImageElement");s.tensorFormat="RGBA",s.height=n,s.width=o}else s.tensorFormat="RGBA",s.height=n,s.width=o;a.drawImage(e,0,0),r=a.getImageData(0,0,o,n).data}}else{if(!a){if(o){if(void 0===t)throw new Error("Please provide image config with format for Imagebitmap");let n=l();n.width=e.width,n.height=e.height;let a=u(n);if(null!=a){let t=e.height,n=e.width;return a.drawImage(e,0,0,n,t),r=a.getImageData(0,0,n,t).data,s.height=t,s.width=n,d(r,s)}throw new Error("Can not access image data")}if(i)return new Promise((t,r)=>{let n=l(),a=u(n);if(!e||!a)return r();let o=new Image;o.crossOrigin="Anonymous",o.src=e,o.onload=()=>{n.width=o.width,n.height=o.height,a.drawImage(o,0,0,n.width,n.height);let e=a.getImageData(0,0,n.width,n.height);s.height=n.height,s.width=n.width,t(d(e.data,s))}});throw new Error("Input data provided is not supported - aborted tensor creation")}{let n,a;if(void 0!==t&&void 0!==t.resizedWidth&&void 0!==t.resizedHeight?(n=t.resizedHeight,a=t.resizedWidth):(n=e.height,a=e.width),void 0!==t&&(s=t),s.format="RGBA",s.height=n,s.width=a,void 0!==t){let t=l();t.width=a,t.height=n;let o=u(t);if(null==o)throw new Error("Can not access image data");o.putImageData(e,0,0),r=o.getImageData(0,0,a,n).data}else r=e.data}}if(void 0!==r)return d(r,s);throw new Error("Input data provided is not supported - aborted tensor creation")},w=(e,t)=>{let{width:r,height:n,download:a,dispose:o}=t;return new C({location:"texture",type:"float32",texture:e,dims:[1,n,r,4],download:a,dispose:o})},h=(e,t)=>{let{dataType:r,dims:n,download:a,dispose:o}=t;return new C({location:"gpu-buffer",type:r??"float32",gpuBuffer:e,dims:n,download:a,dispose:o})},y=(e,t)=>{let{dataType:r,dims:n,download:a,dispose:o}=t;return new C({location:"ml-tensor",type:r??"float32",mlTensor:e,dims:n,download:a,dispose:o})},m=(e,t,r)=>new C({location:"cpu-pinned",type:e,data:t,dims:r??[t.length]})}),Y=G(()=>{g=new Map([["float32",Float32Array],["uint8",Uint8Array],["int8",Int8Array],["uint16",Uint16Array],["int16",Int16Array],["int32",Int32Array],["bool",Uint8Array],["float64",Float64Array],["uint32",Uint32Array],["int4",Uint8Array],["uint4",Uint8Array]]),b=new Map([[Float32Array,"float32"],[Uint8Array,"uint8"],[Int8Array,"int8"],[Uint16Array,"uint16"],[Int16Array,"int16"],[Int32Array,"int32"],[Float64Array,"float64"],[Uint32Array,"uint32"]]),E=!1,v=()=>{if(!E){E=!0;let e=typeof BigInt64Array<"u"&&BigInt64Array.from,t=typeof BigUint64Array<"u"&&BigUint64Array.from,r=globalThis.Float16Array,n=typeof r<"u"&&r.from;e&&(g.set("int64",BigInt64Array),b.set(BigInt64Array,"int64")),t&&(g.set("uint64",BigUint64Array),b.set(BigUint64Array,"uint64")),n?(g.set("float16",r),b.set(r,"float16")):g.set("float16",Uint16Array)}}}),K=G(()=>{Q(),T=e=>{let t=1;for(let r=0;r<e.length;r++){let n=e[r];if("number"!=typeof n||!Number.isSafeInteger(n))throw new TypeError(`dims[${r}] must be an integer, got: ${n}`);if(n<0)throw new RangeError(`dims[${r}] must be a non-negative integer, got: ${n}`);t*=n}return t},A=(e,t)=>{switch(e.location){case"cpu":return new C(e.type,e.data,t);case"cpu-pinned":return new C({location:"cpu-pinned",data:e.data,type:e.type,dims:t});case"texture":return new C({location:"texture",texture:e.texture,type:e.type,dims:t});case"gpu-buffer":return new C({location:"gpu-buffer",gpuBuffer:e.gpuBuffer,type:e.type,dims:t});case"ml-tensor":return new C({location:"ml-tensor",mlTensor:e.mlTensor,type:e.type,dims:t});default:throw new Error(`tensorReshape: tensor location ${e.location} is not supported`)}}}),Q=G(()=>{Z(),J(),Y(),K(),C=class{constructor(e,t,r){let n,a;if(v(),"object"==typeof e&&"location"in e)switch(this.dataLocation=e.location,n=e.type,a=e.dims,e.location){case"cpu-pinned":{let t=g.get(n);if(!t)throw new TypeError(`unsupported type "${n}" to create tensor from pinned buffer`);if(!(e.data instanceof t))throw new TypeError(`buffer should be of type ${t.name}`);this.cpuData=e.data;break}case"texture":if("float32"!==n)throw new TypeError(`unsupported type "${n}" to create tensor from texture`);this.gpuTextureData=e.texture,this.downloader=e.download,this.disposer=e.dispose;break;case"gpu-buffer":if("float32"!==n&&"float16"!==n&&"int32"!==n&&"int64"!==n&&"uint32"!==n&&"uint8"!==n&&"bool"!==n&&"uint4"!==n&&"int4"!==n)throw new TypeError(`unsupported type "${n}" to create tensor from gpu buffer`);this.gpuBufferData=e.gpuBuffer,this.downloader=e.download,this.disposer=e.dispose;break;case"ml-tensor":if("float32"!==n&&"float16"!==n&&"int32"!==n&&"int64"!==n&&"uint32"!==n&&"uint64"!==n&&"int8"!==n&&"uint8"!==n&&"bool"!==n&&"uint4"!==n&&"int4"!==n)throw new TypeError(`unsupported type "${n}" to create tensor from MLTensor`);this.mlTensorData=e.mlTensor,this.downloader=e.download,this.disposer=e.dispose;break;default:throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`)}else{let o,i;if("string"==typeof e)if(n=e,i=r,"string"===e){if(!Array.isArray(t))throw new TypeError("A string tensor's data must be a string array.");o=t}else{let r=g.get(e);if(void 0===r)throw new TypeError(`Unsupported tensor type: ${e}.`);if(Array.isArray(t)){if("float16"===e&&r===Uint16Array||"uint4"===e||"int4"===e)throw new TypeError(`Creating a ${e} tensor from number array is not supported. Please use ${r.name} as data.`);o="uint64"===e||"int64"===e?r.from(t,BigInt):r.from(t)}else if(t instanceof r)o=t;else if(t instanceof Uint8ClampedArray){if("uint8"!==e)throw new TypeError("A Uint8ClampedArray tensor's data must be type of uint8");o=Uint8Array.from(t)}else{if(!("float16"===e&&t instanceof Uint16Array&&r!==Uint16Array))throw new TypeError(`A ${n} tensor's data must be type of ${r}`);o=new globalThis.Float16Array(t.buffer,t.byteOffset,t.length)}}else if(i=t,Array.isArray(e)){if(0===e.length)throw new TypeError("Tensor type cannot be inferred from an empty array.");let t=typeof e[0];if("string"===t)n="string",o=e;else{if("boolean"!==t)throw new TypeError(`Invalid element type of data array: ${t}.`);n="bool",o=Uint8Array.from(e)}}else if(e instanceof Uint8ClampedArray)n="uint8",o=Uint8Array.from(e);else{let t=b.get(e.constructor);if(void 0===t)throw new TypeError(`Unsupported type for tensor data: ${e.constructor}.`);n=t,o=e}if(void 0===i)i=[o.length];else if(!Array.isArray(i))throw new TypeError("A tensor's dims must be a number array");a=i,this.cpuData=o,this.dataLocation="cpu"}let o=T(a);if(this.cpuData&&o!==this.cpuData.length&&("uint4"!==n&&"int4"!==n||Math.ceil(o/2)!==this.cpuData.length))throw new Error(`Tensor's size(${o}) does not match data length(${this.cpuData.length}).`);this.type=n,this.dims=a,this.size=o}static async fromImage(e,t){return c(e,t)}static fromTexture(e,t){return w(e,t)}static fromGpuBuffer(e,t){return h(e,t)}static fromMLTensor(e,t){return y(e,t)}static fromPinnedBuffer(e,t,r){return m(e,t,r)}toDataURL(e){return f(this,e)}toImageData(e){return p(this,e)}get data(){if(this.ensureValid(),!this.cpuData)throw new Error("The data is not on CPU. Use `getData()` to download GPU data to CPU, or use `texture` or `gpuBuffer` property to access the GPU data directly.");return this.cpuData}get location(){return this.dataLocation}get texture(){if(this.ensureValid(),!this.gpuTextureData)throw new Error("The data is not stored as a WebGL texture.");return this.gpuTextureData}get gpuBuffer(){if(this.ensureValid(),!this.gpuBufferData)throw new Error("The data is not stored as a WebGPU buffer.");return this.gpuBufferData}get mlTensor(){if(this.ensureValid(),!this.mlTensorData)throw new Error("The data is not stored as a WebNN MLTensor.");return this.mlTensorData}async getData(e){switch(this.ensureValid(),this.dataLocation){case"cpu":case"cpu-pinned":return this.data;case"texture":case"gpu-buffer":case"ml-tensor":if(!this.downloader)throw new Error("The current tensor is not created with a specified data downloader.");if(this.isDownloading)throw new Error("The current tensor is being downloaded.");try{this.isDownloading=!0;let t=await this.downloader();return this.downloader=void 0,this.dataLocation="cpu",this.cpuData=t,e&&this.disposer&&(this.disposer(),this.disposer=void 0),t}finally{this.isDownloading=!1}default:throw new Error(`cannot get data from location: ${this.dataLocation}`)}}dispose(){if(this.isDownloading)throw new Error("The current tensor is being downloaded.");this.disposer&&(this.disposer(),this.disposer=void 0),this.cpuData=void 0,this.gpuTextureData=void 0,this.gpuBufferData=void 0,this.mlTensorData=void 0,this.downloader=void 0,this.isDownloading=void 0,this.dataLocation="none"}ensureValid(){if("none"===this.dataLocation)throw new Error("The tensor is disposed.")}reshape(e){if(this.ensureValid(),this.downloader||this.disposer)throw new Error("Cannot reshape a tensor that owns GPU resource.");return A(this,e)}}}),X=G(()=>{Q(),R=C}),ee=G(()=>{z(),O=(e,t)=>{typeof l.trace>"u"?l.wasm.trace:l.trace},U=(e,t)=>{let r=/* @__PURE__ */(new Error).stack?.split(/\r\n|\r|\n/g)||[],n=!1;for(let a=0;a<r.length;a++){if(n&&!r[a].includes("TRACE_FUNC")){let n=`FUNC_${e}::${r[a].trim().split(" ")[1]}`;return t&&(n+=`::${t}`),void O("CPU",n)}r[a].includes("TRACE_FUNC")&&(n=!0)}},I=e=>{(typeof l.trace>"u"?!l.wasm.trace:!l.trace)||U("BEGIN",e)},L=e=>{(typeof l.trace>"u"?!l.wasm.trace:!l.trace)||U("END",e)},x=e=>{typeof l.trace>"u"?l.wasm.trace:l.trace},P=e=>{typeof l.trace>"u"?l.wasm.trace:l.trace}}),te=G(()=>{V(),X(),ee(),_=class e{constructor(e){this.handler=e}async run(e,t,r){I(),x("InferenceSession.run");let n={},a={};if("object"!=typeof e||null===e||e instanceof R||Array.isArray(e))throw new TypeError("'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.");let o=!0;if("object"==typeof t){if(null===t)throw new TypeError("Unexpected argument[1]: cannot be null.");if(t instanceof R)throw new TypeError("'fetches' cannot be a Tensor");if(Array.isArray(t)){if(0===t.length)throw new TypeError("'fetches' cannot be an empty array.");o=!1;for(let e of t){if("string"!=typeof e)throw new TypeError("'fetches' must be a string array or an object.");if(-1===this.outputNames.indexOf(e))throw new RangeError(`'fetches' contains invalid output name: ${e}.`);n[e]=null}if("object"==typeof r&&null!==r)a=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else{let e=!1,i=Object.getOwnPropertyNames(t);for(let r of this.outputNames)if(-1!==i.indexOf(r)){let a=t[r];(null===a||a instanceof R)&&(e=!0,o=!1,n[r]=a)}if(e){if("object"==typeof r&&null!==r)a=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else a=t}}else if(typeof t<"u")throw new TypeError("Unexpected argument[1]: must be 'fetches' or 'options'.");for(let l of this.inputNames)if(typeof e[l]>"u")throw new Error(`input '${l}' is missing in 'feeds'.`);if(o)for(let l of this.outputNames)n[l]=null;let i=await this.handler.run(e,n,a),s={};for(let l in i)if(Object.hasOwnProperty.call(i,l)){let e=i[l];s[l]=e instanceof R?e:new R(e.type,e.data,e.dims)}return P("InferenceSession.run"),L(),s}async release(){return this.handler.dispose()}static async create(t,r,n,a){I(),x("InferenceSession.create");let i,s={};if("string"==typeof t){if(i=t,"object"==typeof r&&null!==r)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else if(t instanceof Uint8Array){if(i=t,"object"==typeof r&&null!==r)s=r;else if(typeof r<"u")throw new TypeError("'options' must be an object.")}else{if(!(t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer))throw new TypeError("Unexpected argument[0]: must be 'path' or 'buffer'.");{let e=t,o=0,l=t.byteLength;if("object"==typeof r&&null!==r)s=r;else if("number"==typeof r){if(o=r,!Number.isSafeInteger(o))throw new RangeError("'byteOffset' must be an integer.");if(o<0||o>=e.byteLength)throw new RangeError(`'byteOffset' is out of range [0, ${e.byteLength}).`);if(l=t.byteLength-o,"number"==typeof n){if(l=n,!Number.isSafeInteger(l))throw new RangeError("'byteLength' must be an integer.");if(l<=0||o+l>e.byteLength)throw new RangeError(`'byteLength' is out of range (0, ${e.byteLength-o}].`);if("object"==typeof a&&null!==a)s=a;else if(typeof a<"u")throw new TypeError("'options' must be an object.")}else if(typeof n<"u")throw new TypeError("'byteLength' must be a number.")}else if(typeof r<"u")throw new TypeError("'options' must be an object.");i=new Uint8Array(e,o,l)}}let[l,u]=await o(s),f=await l.createInferenceSessionHandler(i,u);return P("InferenceSession.create"),L(),new e(f)}startProfiling(){this.handler.startProfiling()}endProfiling(){this.handler.endProfiling()}get inputNames(){return this.handler.inputNames}get outputNames(){return this.handler.outputNames}get inputMetadata(){return this.handler.inputMetadata}get outputMetadata(){return this.handler.outputMetadata}}}),re=G(()=>{te(),$=_}),ne=G(()=>{}),ae=G(()=>{}),oe=G(()=>{}),ie=G(()=>{}),se={};F(se,{InferenceSession:()=>$,TRACE:()=>O,TRACE_EVENT_BEGIN:()=>x,TRACE_EVENT_END:()=>P,TRACE_FUNC_BEGIN:()=>I,TRACE_FUNC_END:()=>L,Tensor:()=>R,env:()=>u,registerBackend:()=>n});var le=G(()=>{W(),q(),re(),X(),ne(),ae(),ee(),oe(),ie()}),ue=G(()=>{}),fe={};F(fe,{default:()=>ce});var pe,de,ce,we,he,ye,me,ge,be,Ee,ve,Te,Ae,Ce,Re,Oe,Ue,Ie,Le,xe,Pe,_e,$e,Be,Ne,Me,Se,ke,De,Ge,Fe,je,Ve,We,He,ze,qe,Ze,Je,Ye,Ke,Qe,Xe,et,tt,rt,nt,at,ot,it,st,lt,ut,ft,pt,dt,ct,wt,ht,yt,mt,gt,bt,Et,vt,Tt,At,Ct,Rt,Ot,Ut,It,Lt,xt,Pt,_t,$t,Bt,Nt=G(()=>{Vt(),St(),Mt(),pe="ort-wasm-proxy-worker",(de=globalThis.self?.name===pe)&&(self.onmessage=e=>{let{type:t,in:r}=e.data;try{switch(t){case"init-wasm":Be(r.wasm).then(()=>{rt(r).then(()=>{postMessage({type:t})},e=>{postMessage({type:t,err:e})})},e=>{postMessage({type:t,err:e})});break;case"init-ep":{let{epName:e,env:n}=r;nt(n,e).then(()=>{postMessage({type:t})},e=>{postMessage({type:t,err:e})});break}case"copy-from":{let{buffer:e}=r,n=st(e);postMessage({type:t,out:n});break}case"create":{let{model:e,options:n}=r;lt(e,n).then(e=>{postMessage({type:t,out:e})},e=>{postMessage({type:t,err:e})});break}case"release":ut(r),postMessage({type:t});break;case"run":{let{sessionId:e,inputIndices:n,inputs:a,outputIndices:o,options:i}=r;pt(e,n,a,o,new Array(o.length).fill(null),i).then(e=>{e.some(e=>"cpu"!==e[3])?postMessage({type:t,err:"Proxy does not support non-cpu tensor location."}):postMessage({type:t,out:e},ct([...a,...e]))},e=>{postMessage({type:t,err:e})});break}case"end-profiling":dt(r),postMessage({type:t})}}catch(n){postMessage({type:t,err:n})}}),ce=de?null:e=>new Worker(e??ye,{type:"module",name:pe})}),Mt=G(()=>{ue(),we=typeof location>"u"?void 0:location.origin,he=import.meta.url>"file:"&&import.meta.url<"file;",ye=(()=>he?new URL(new URL("ort.wasm.min.mjs",import.meta.url).href,we).href:import.meta.url)(),me=()=>{if(ye&&!ye.startsWith("blob:"))return ye.substring(0,ye.lastIndexOf("/")+1)},ge=(e,t)=>{try{let r=t??ye;return(r?new URL(e,r):new URL(e)).origin===we}catch{return!1}},be=(e,t)=>{let r=t??ye;try{return(r?new URL(e,r):new URL(e)).href}catch{return}},Ee=(e,t)=>`${t??"./"}${e}`,ve=async e=>{let t=await(await fetch(e,{credentials:"same-origin"})).blob();return URL.createObjectURL(t)},Te=async e=>(await import(e)).default,Ae=(Nt(),j(fe)).default,Ce=async()=>{if(!ye)throw new Error("Failed to load proxy worker: cannot determine the script source URL.");if(ge(ye))return[void 0,Ae()];let e=await ve(ye);return[e,Ae(e)]},Re=void 0,Oe=async(e,t,r,n)=>{let a=Re;if(a)if(ye)a=ge(ye);else{if(!n||r)throw new Error("cannot determine the script source URL.");a=!0}if(a)return[void 0,Re];{let n="ort-wasm-simd-threaded.mjs",a=e??be(n,t),o=r&&a&&!ge(a,t),i=o?await ve(a):a??Ee(n,t);return[o?i:void 0,await Te(i)]}}}),St=G(()=>{Mt(),Ie=!1,Le=!1,xe=!1,Pe=()=>{if(typeof SharedArrayBuffer>"u")return!1;try{return typeof MessageChannel<"u"&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}},_e=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,30,1,28,0,65,0,253,15,253,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,186,1,26,11]))}catch{return!1}},$e=()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,19,1,17,0,65,1,253,15,65,2,253,15,65,3,253,15,253,147,2,11]))}catch{return!1}},Be=async e=>{if(Ie)return Promise.resolve();if(Le)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(xe)throw new Error("previous call to 'initializeWebAssembly()' failed.");Le=!0;let t=e.initTimeout,r=e.numThreads;if(!1!==e.simd)if("relaxed"===e.simd){if(!$e())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!_e())throw new Error("WebAssembly SIMD is not supported in the current environment.");let n=Pe();r>1&&!n&&(typeof self<"u"&&self.crossOriginIsolated,e.numThreads=r=1);let a=e.wasmPaths,o="string"==typeof a?a:void 0,i=a?.mjs,s=i?.href??i,l=a?.wasm,u=l?.href??l,f=e.wasmBinary,[p,d]=await Oe(s,o,r>1,!!f||!!u),c=!1,w=[];if(t>0&&w.push(new Promise(e=>{setTimeout(()=>{c=!0,e()},t)})),w.push(new Promise((e,t)=>{let n={numThreads:r};if(f)n.wasmBinary=f;else if(u||o)n.locateFile=e=>u??o+e;else if(s&&0!==s.indexOf("blob:"))n.locateFile=e=>new URL(e,s).href;else if(p){let e=me();e&&(n.locateFile=t=>e+t)}d(n).then(t=>{Le=!1,Ie=!0,Ue=t,e(),p&&URL.revokeObjectURL(p)},e=>{Le=!1,xe=!0,t(e)})})),await Promise.race(w),c)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},Ne=()=>{if(Ie&&Ue)return Ue;throw new Error("WebAssembly is not initialized yet.")}}),kt=G(()=>{St(),Me=(e,t)=>{let r=Ne(),n=r.lengthBytesUTF8(e)+1,a=r._malloc(n);return r.stringToUTF8(e,a,n),t.push(a),a},Se=(e,t,r,n)=>{if("object"==typeof e&&null!==e){if(r.has(e))throw new Error("Circular reference in options");r.add(e)}Object.entries(e).forEach(([e,a])=>{let o=t?t+e:e;if("object"==typeof a)Se(a,o+".",r,n);else if("string"==typeof a||"number"==typeof a)n(o,a.toString());else{if("boolean"!=typeof a)throw new Error("Can't handle extra config type: "+typeof a);n(o,a?"1":"0")}})},ke=e=>{let t=Ne(),r=t.stackSave();try{let r=t.PTR_SIZE,n=t.stackAlloc(2*r);t._OrtGetLastError(n,n+r);let a=Number(t.getValue(n,4===r?"i32":"i64")),o=t.getValue(n+r,"*"),i=o?t.UTF8ToString(o):"";throw new Error(`${e} ERROR_CODE: ${a}, ERROR_MESSAGE: ${i}`)}finally{t.stackRestore(r)}}}),Dt=G(()=>{St(),kt(),De=e=>{let t=Ne(),r=0,n=[],a=e||{};try{if(void 0===e?.logSeverityLevel)a.logSeverityLevel=2;else if("number"!=typeof e.logSeverityLevel||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log severity level is not valid: ${e.logSeverityLevel}`);if(void 0===e?.logVerbosityLevel)a.logVerbosityLevel=0;else if("number"!=typeof e.logVerbosityLevel||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);void 0===e?.terminate&&(a.terminate=!1);let o=0;return void 0!==e?.tag&&(o=Me(e.tag,n)),r=t._OrtCreateRunOptions(a.logSeverityLevel,a.logVerbosityLevel,!!a.terminate,o),0===r&&ke("Can't create run options."),void 0!==e?.extra&&Se(e.extra,"",/* @__PURE__ */new WeakSet,(e,a)=>{let o=Me(e,n),i=Me(a,n);0!==t._OrtAddRunConfigEntry(r,o,i)&&ke(`Can't set a run config entry: ${e} - ${a}.`)}),[r,n]}catch(o){throw 0!==r&&t._OrtReleaseRunOptions(r),n.forEach(e=>t._free(e)),o}}}),Gt=G(()=>{St(),kt(),Ge=e=>{switch(e){case"disabled":return 0;case"basic":return 1;case"extended":return 2;case"layout":return 3;case"all":return 99;default:throw new Error(`unsupported graph optimization level: ${e}`)}},Fe=e=>{switch(e){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}},je=e=>{e.extra||(e.extra={}),e.extra.session||(e.extra.session={});let t=e.extra.session;t.use_ort_model_bytes_directly||(t.use_ort_model_bytes_directly="1"),e.executionProviders&&e.executionProviders.some(e=>"webgpu"===("string"==typeof e?e:e.name))&&(e.enableMemPattern=!1)},Ve=(e,t,r,n)=>{let a=Me(t,n),o=Me(r,n);0!==Ne()._OrtAddSessionConfigEntry(e,a,o)&&ke(`Can't set a session config entry: ${t} - ${r}.`)},We=async(e,t,r)=>{for(let n of t){let t="string"==typeof n?n:n.name,a=[];switch(t){case"webnn":if(t="WEBNN","string"!=typeof n){let t=n?.deviceType;t&&Ve(e,"deviceType",t,r)}break;case"webgpu":if(t="JS","string"!=typeof n){let t=n;if(t?.preferredLayout){if("NCHW"!==t.preferredLayout&&"NHWC"!==t.preferredLayout)throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${t.preferredLayout}`);Ve(e,"preferredLayout",t.preferredLayout,r)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${t}`)}let o=Me(t,r),i=a.length,s=0,l=0;if(i>0){s=Ne()._malloc(i*Ne().PTR_SIZE),r.push(s),l=Ne()._malloc(i*Ne().PTR_SIZE),r.push(l);for(let e=0;e<i;e++)Ne().setValue(s+e*Ne().PTR_SIZE,a[e][0],"*"),Ne().setValue(l+e*Ne().PTR_SIZE,a[e][1],"*")}0!==await Ne()._OrtAppendExecutionProvider(e,o,s,l,i)&&ke(`Can't append execution provider: ${t}.`)}},He=async e=>{let t=Ne(),r=0,n=[],a=e||{};je(a);try{let e=Ge(a.graphOptimizationLevel??"all"),o=Fe(a.executionMode??"sequential"),i="string"==typeof a.logId?Me(a.logId,n):0,s=a.logSeverityLevel??2;if(!Number.isInteger(s)||s<0||s>4)throw new Error(`log severity level is not valid: ${s}`);let l=a.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw new Error(`log verbosity level is not valid: ${l}`);let u="string"==typeof a.optimizedModelFilePath?Me(a.optimizedModelFilePath,n):0;if(r=t._OrtCreateSessionOptions(e,!!a.enableCpuMemArena,!!a.enableMemPattern,o,!!a.enableProfiling,0,i,s,l,u),0===r&&ke("Can't create session options."),a.executionProviders&&await We(r,a.executionProviders,n),void 0!==a.enableGraphCapture){if("boolean"!=typeof a.enableGraphCapture)throw new Error(`enableGraphCapture must be a boolean value: ${a.enableGraphCapture}`);Ve(r,"enableGraphCapture",a.enableGraphCapture.toString(),n)}if(a.freeDimensionOverrides)for(let[f,p]of Object.entries(a.freeDimensionOverrides)){if("string"!=typeof f)throw new Error(`free dimension override name must be a string: ${f}`);if("number"!=typeof p||!Number.isInteger(p)||p<0)throw new Error(`free dimension override value must be a non-negative integer: ${p}`);let e=Me(f,n);0!==t._OrtAddFreeDimensionOverride(r,e,p)&&ke(`Can't set a free dimension override: ${f} - ${p}.`)}return void 0!==a.extra&&Se(a.extra,"",/* @__PURE__ */new WeakSet,(e,t)=>{Ve(r,e,t,n)}),[r,n]}catch(o){throw 0!==r&&0!==t._OrtReleaseSessionOptions(r)&&ke("Can't release session options."),n.forEach(e=>t._free(e)),o}}}),Ft=G(()=>{ze=e=>{switch(e){case"int8":return 3;case"uint8":return 2;case"bool":return 9;case"int16":return 5;case"uint16":return 4;case"int32":return 6;case"uint32":return 12;case"float16":return 10;case"float32":return 1;case"float64":return 11;case"string":return 8;case"int64":return 7;case"uint64":return 13;case"int4":return 22;case"uint4":return 21;default:throw new Error(`unsupported data type: ${e}`)}},qe=e=>{switch(e){case 3:return"int8";case 2:return"uint8";case 9:return"bool";case 5:return"int16";case 4:return"uint16";case 6:return"int32";case 12:return"uint32";case 10:return"float16";case 1:return"float32";case 11:return"float64";case 8:return"string";case 7:return"int64";case 13:return"uint64";case 22:return"int4";case 21:return"uint4";default:throw new Error(`unsupported data type: ${e}`)}},Ze=(e,t)=>{let r=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][e],n="number"==typeof t?t:t.reduce((e,t)=>e*t,1);return r>0?Math.ceil(n*r):void 0},Je=e=>{switch(e){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":case"bool":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},Ye=e=>{switch(e){case"verbose":return 0;case"info":return 1;case"warning":return 2;case"error":return 3;case"fatal":return 4;default:throw new Error(`unsupported logging level: ${e}`)}},Ke=e=>"float32"===e||"float16"===e||"int32"===e||"int64"===e||"uint32"===e||"uint8"===e||"bool"===e||"uint4"===e||"int4"===e,Qe=e=>"float32"===e||"float16"===e||"int32"===e||"int64"===e||"uint32"===e||"uint64"===e||"int8"===e||"uint8"===e||"bool"===e||"uint4"===e||"int4"===e,Xe=e=>{switch(e){case"none":return 0;case"cpu":return 1;case"cpu-pinned":return 2;case"texture":return 3;case"gpu-buffer":return 4;case"ml-tensor":return 5;default:throw new Error(`unsupported data location: ${e}`)}}}),jt=G(()=>{ue(),et=async e=>{if("string"==typeof e){let r=await fetch(e);if(!r.ok)throw new Error(`failed to load external data file: ${e}`);let n=r.headers.get("Content-Length"),a=n?parseInt(n,10):0;if(a<1073741824)return new Uint8Array(await r.arrayBuffer());{if(!r.body)throw new Error(`failed to load external data file: ${e}, no response body.`);let n,o=r.body.getReader();try{n=new ArrayBuffer(a)}catch(t){if(!(t instanceof RangeError))throw t;{let e=Math.ceil(a/65536);n=new WebAssembly.Memory({initial:e,maximum:e}).buffer}}let i=0;for(;;){let{done:e,value:t}=await o.read();if(e)break;let r=t.byteLength;new Uint8Array(n,i,r).set(t),i+=r}return new Uint8Array(n,0,a)}}return e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof Uint8Array?e:new Uint8Array(e)}}),Vt=G(()=>{le(),Dt(),Gt(),Ft(),St(),kt(),jt(),tt=(e,t)=>{0!==Ne()._OrtInit(e,t)&&ke("Can't initialize onnxruntime.")},rt=async e=>{tt(e.wasm.numThreads,Ye(e.logLevel))},nt=async(e,t)=>{Ne().asyncInit?.();let r=e.webgpu.adapter;if("webgpu"===t){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not supported in current environment");if(r){if("object"!=typeof r.limits||"object"!=typeof r.features||"function"!=typeof r.requestDevice)throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let t=e.webgpu.powerPreference;if(void 0!==t&&"low-power"!==t&&"high-performance"!==t)throw new Error(`Invalid powerPreference setting: "${t}"`);let n=e.webgpu.forceFallbackAdapter;if(void 0!==n&&"boolean"!=typeof n)throw new Error(`Invalid forceFallbackAdapter setting: "${n}"`);if(r=await navigator.gpu.requestAdapter({powerPreference:t,forceFallbackAdapter:n}),!r)throw new Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}}if("webnn"===t&&(typeof navigator>"u"||!navigator.ml))throw new Error("WebNN is not supported in current environment")},at=/* @__PURE__ */new Map,ot=e=>{let t=Ne(),r=t.stackSave();try{let r=t.PTR_SIZE,n=t.stackAlloc(2*r);0!==t._OrtGetInputOutputCount(e,n,n+r)&&ke("Can't get session input/output count.");let a=4===r?"i32":"i64";return[Number(t.getValue(n,a)),Number(t.getValue(n+r,a))]}finally{t.stackRestore(r)}},it=(e,t)=>{let r=Ne(),n=r.stackSave(),a=0;try{let n=r.PTR_SIZE,o=r.stackAlloc(2*n);0!==r._OrtGetInputOutputMetadata(e,t,o,o+n)&&ke("Can't get session input/output metadata.");let i=Number(r.getValue(o,"*"));a=Number(r.getValue(o+n,"*"));let s=r.HEAP32[a/4];if(0===s)return[i,0];let l=r.HEAPU32[a/4+1],u=[];for(let e=0;e<l;e++){let t=Number(r.getValue(a+8+e*n,"*"));u.push(0!==t?r.UTF8ToString(t):Number(r.getValue(a+8+(e+l)*n,"*")))}return[i,s,u]}finally{r.stackRestore(n),0!==a&&r._OrtFree(a)}},st=e=>{let t=Ne(),r=t._malloc(e.byteLength);if(0===r)throw new Error(`Can't create a session. failed to allocate a buffer of size ${e.byteLength}.`);return t.HEAPU8.set(e,r),[r,e.byteLength]},lt=async(e,t)=>{let r,n,a=Ne();Array.isArray(e)?[r,n]=e:e.buffer===a.HEAPU8.buffer?[r,n]=[e.byteOffset,e.byteLength]:[r,n]=st(e);let o=0,i=0,s=[],l=[],u=[];try{if([i,s]=await He(t),t?.externalData&&a.mountExternalData){let e=[];for(let r of t.externalData){let t="string"==typeof r?r:r.path;e.push(et("string"==typeof r?r:r.data).then(e=>{a.mountExternalData(t,e)}))}await Promise.all(e)}for(let r of t?.executionProviders??[])if("webnn"===("string"==typeof r?r:r.name)){if(a.shouldTransferToMLTensor=!1,"string"!=typeof r){let e=r,t=e?.context,n=e?.gpuDevice,o=e?.deviceType,i=e?.powerPreference;a.currentContext=t||(n?await a.webnnCreateMLContext(n):await a.webnnCreateMLContext({deviceType:o,powerPreference:i}))}else a.currentContext=await a.webnnCreateMLContext();break}o=await a._OrtCreateSession(r,n,i),a.webgpuOnCreateSession?.(o),0===o&&ke("Can't create a session."),a.jsepOnCreateSession?.(),a.currentContext&&(a.webnnRegisterMLContext(o,a.currentContext),a.currentContext=void 0,a.shouldTransferToMLTensor=!0);let[e,f]=ot(o),p=!!t?.enableGraphCapture,d=[],c=[],w=[],h=[];for(let t=0;t<e;t++){let[e,r,n]=it(o,t);0===e&&ke("Can't get an input name."),l.push(e);let i=a.UTF8ToString(e);d.push(i),w.push(0===r?{name:i,isTensor:!1}:{name:i,isTensor:!0,type:qe(r),shape:n})}for(let t=0;t<f;t++){let[r,n,i]=it(o,t+e);0===r&&ke("Can't get an output name."),u.push(r);let s=a.UTF8ToString(r);c.push(s),h.push(0===n?{name:s,isTensor:!1}:{name:s,isTensor:!0,type:qe(n),shape:i})}return at.set(o,[o,l,u,null,p,!1]),[o,d,c,w,h]}catch(f){throw l.forEach(e=>a._OrtFree(e)),u.forEach(e=>a._OrtFree(e)),0!==o&&0!==a._OrtReleaseSession(o)&&ke("Can't release session."),f}finally{a._free(r),0!==i&&0!==a._OrtReleaseSessionOptions(i)&&ke("Can't release session options."),s.forEach(e=>a._free(e)),a.unmountExternalData?.()}},ut=e=>{let t=Ne(),r=at.get(e);if(!r)throw new Error(`cannot release session. invalid session id: ${e}`);let[n,a,o,i,s]=r;i&&(s&&0!==t._OrtClearBoundOutputs(i.handle)&&ke("Can't clear bound outputs."),0!==t._OrtReleaseBinding(i.handle)&&ke("Can't release IO binding.")),t.jsepOnReleaseSession?.(e),t.webnnOnReleaseSession?.(e),t.webgpuOnReleaseSession?.(e),a.forEach(e=>t._OrtFree(e)),o.forEach(e=>t._OrtFree(e)),0!==t._OrtReleaseSession(n)&&ke("Can't release session."),at.delete(e)},ft=async(e,t,r,n,a,o,i=!1)=>{if(!e)return void t.push(0);let s,l,u=Ne(),f=u.PTR_SIZE,p=e[0],d=e[1],c=e[3],w=c;if("string"===p&&("gpu-buffer"===c||"ml-tensor"===c))throw new Error("String tensor is not supported on GPU.");if(i&&"gpu-buffer"!==c)throw new Error(`External buffer must be provided for input/output index ${o} when enableGraphCapture is true.`);if("gpu-buffer"===c){let t=e[2].gpuBuffer;l=Ze(ze(p),d);{let e=u.jsepRegisterBuffer;if(!e)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');s=e(n,o,t,l)}}else if("ml-tensor"===c){let t=e[2].mlTensor;l=Ze(ze(p),d);let r=u.webnnRegisterMLTensor;if(!r)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');s=r(n,t,ze(p),d)}else{let t=e[2];if(Array.isArray(t)){l=f*t.length,s=u._malloc(l),r.push(s);for(let e=0;e<t.length;e++){if("string"!=typeof t[e])throw new TypeError(`tensor data at index ${e} is not a string`);u.setValue(s+e*f,Me(t[e],r),"*")}}else{let e=u.webnnIsGraphInput,o=u.webnnIsGraphOutput;if("string"!==p&&e&&o){let i=u.UTF8ToString(a);if(e(n,i)||o(n,i)){let e=ze(p);l=Ze(e,d),w="ml-tensor";let r=u.webnnCreateTemporaryTensor,a=u.webnnUploadTensor;if(!r||!a)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');let o=await r(n,e,d);a(o,new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),s=o}else l=t.byteLength,s=u._malloc(l),r.push(s),u.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,l),s)}else l=t.byteLength,s=u._malloc(l),r.push(s),u.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,l),s)}}let h=u.stackSave(),y=u.stackAlloc(4*d.length);try{d.forEach((e,t)=>u.setValue(y+t*f,e,4===f?"i32":"i64"));let e=u._OrtCreateTensor(ze(p),s,l,y,d.length,Xe(w));0===e&&ke(`Can't create tensor for input/output. session=${n}, index=${o}.`),t.push(e)}finally{u.stackRestore(h)}},pt=async(e,t,r,n,a,o)=>{let i=Ne(),s=i.PTR_SIZE,l=at.get(e);if(!l)throw new Error(`cannot run inference. invalid session id: ${e}`);let u=l[0],f=l[1],p=l[2],d=l[3],c=l[4];l[5];let w=t.length,h=n.length,y=0,m=[],g=[],b=[],E=[],v=i.stackSave(),T=i.stackAlloc(w*s),A=i.stackAlloc(w*s),C=i.stackAlloc(h*s),R=i.stackAlloc(h*s);try{[y,m]=De(o),x("wasm prepareInputOutputTensor");for(let n=0;n<w;n++)await ft(r[n],g,E,e,f[t[n]],t[n],c);for(let t=0;t<h;t++)await ft(a[t],b,E,e,p[n[t]],w+n[t],c);P("wasm prepareInputOutputTensor");for(let e=0;e<w;e++)i.setValue(T+e*s,g[e],"*"),i.setValue(A+e*s,f[t[e]],"*");for(let e=0;e<h;e++)i.setValue(C+e*s,b[e],"*"),i.setValue(R+e*s,p[n[e]],"*");let l;i.jsepOnRunStart?.(u),i.webnnOnRunStart?.(u),l=await i._OrtRun(u,A,T,w,R,h,C,y),0!==l&&ke("failed to call OrtRun().");let v=[],O=[];x("wasm ProcessOutputTensor");for(let t=0;t<h;t++){let r=Number(i.getValue(C+t*s,"*"));if(r===b[t]){v.push(a[t]);continue}let o,l=i.stackSave(),u=i.stackAlloc(4*s),f=!1,p=0;try{0!==i._OrtGetTensorData(r,u,u+s,u+2*s,u+3*s)&&ke(`Can't access output tensor data on index ${t}.`);let a=4===s?"i32":"i64",l=Number(i.getValue(u,a));p=i.getValue(u+s,"*");let c=i.getValue(u+2*s,"*"),w=Number(i.getValue(u+3*s,a)),h=[];for(let e=0;e<w;e++)h.push(Number(i.getValue(c+e*s,a)));0!==i._OrtFree(c)&&ke("Can't free memory for tensor dims.");let y=h.reduce((e,t)=>e*t,1);o=qe(l);let m=d?.outputPreferredLocations[n[t]];if("string"===o){if("gpu-buffer"===m||"ml-tensor"===m)throw new Error("String tensor is not supported on GPU.");let e=[];for(let t=0;t<y;t++){let r=i.getValue(p+t*s,"*"),n=i.getValue(p+(t+1)*s,"*"),a=t===y-1?void 0:n-r;e.push(i.UTF8ToString(r,a))}v.push([o,h,e,"cpu"])}else if("gpu-buffer"===m&&y>0){let e=i.jsepGetBuffer;if(!e)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let t=e(p),n=Ze(l,y);if(void 0===n||!Ke(o))throw new Error(`Unsupported data type: ${o}`);f=!0,v.push([o,h,{gpuBuffer:t,download:i.jsepCreateDownloader(t,n,o),dispose:()=>{0!==i._OrtReleaseTensor(r)&&ke("Can't release tensor.")}},"gpu-buffer"])}else if("ml-tensor"===m&&y>0){let t=i.webnnEnsureTensor,n=i.webnnIsGraphInputOutputTypeSupported;if(!t||!n)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(void 0===Ze(l,y)||!Qe(o))throw new Error(`Unsupported data type: ${o}`);if(!n(e,o,!1))throw new Error(`preferredLocation "ml-tensor" for ${o} output is not supported by current WebNN Context.`);let a=await t(e,p,l,h,!1);f=!0,v.push([o,h,{mlTensor:a,download:i.webnnCreateMLTensorDownloader(p,o),dispose:()=>{i.webnnReleaseTensorId(p),i._OrtReleaseTensor(r)}},"ml-tensor"])}else if("ml-tensor-cpu-output"===m&&y>0){let e=i.webnnCreateMLTensorDownloader(p,o)(),t=v.length;f=!0,O.push((async()=>{let n=[t,await e];return i.webnnReleaseTensorId(p),i._OrtReleaseTensor(r),n})()),v.push([o,h,[],"cpu"])}else{let e=new(Je(o))(y);new Uint8Array(e.buffer,e.byteOffset,e.byteLength).set(i.HEAPU8.subarray(p,p+e.byteLength)),v.push([o,h,e,"cpu"])}}finally{i.stackRestore(l),"string"===o&&p&&i._free(p),f||i._OrtReleaseTensor(r)}}d&&!c&&(0!==i._OrtClearBoundOutputs(d.handle)&&ke("Can't clear bound outputs."),at.set(e,[u,f,p,d,c,!1]));for(let[e,t]of await Promise.all(O))v[e][2]=t;return P("wasm ProcessOutputTensor"),v}finally{i.webnnOnRunEnd?.(u),i.stackRestore(v),g.forEach(e=>i._OrtReleaseTensor(e)),b.forEach(e=>i._OrtReleaseTensor(e)),E.forEach(e=>i._free(e)),0!==y&&i._OrtReleaseRunOptions(y),m.forEach(e=>i._free(e))}},dt=e=>{let t=Ne(),r=at.get(e);if(!r)throw new Error("invalid session id");let n=r[0],a=t._OrtEndProfiling(n);0===a&&ke("Can't get an profile file name."),t._OrtFree(a)},ct=e=>{let t=[];for(let r of e){let e=r[2];!Array.isArray(e)&&"buffer"in e&&t.push(e.buffer)}return t}}),Wt=G(()=>{le(),Vt(),St(),Mt(),wt=()=>!!u.wasm.proxy&&typeof document<"u",yt=!1,mt=!1,gt=!1,vt=/* @__PURE__ */new Map,Tt=(e,t)=>{let r=vt.get(e);r?r.push(t):vt.set(e,[t])},At=()=>{if(yt||!mt||gt||!ht)throw new Error("worker not ready")},Ct=e=>{switch(e.data.type){case"init-wasm":yt=!1,e.data.err?(gt=!0,Et[1](e.data.err)):(mt=!0,Et[0]()),bt&&(URL.revokeObjectURL(bt),bt=void 0);break;case"init-ep":case"copy-from":case"create":case"release":case"run":case"end-profiling":{let t=vt.get(e.data.type);e.data.err?t.shift()[1](e.data.err):t.shift()[0](e.data.out);break}}},Rt=async()=>{if(!mt){if(yt)throw new Error("multiple calls to 'initWasm()' detected.");if(gt)throw new Error("previous call to 'initWasm()' failed.");if(yt=!0,wt())return new Promise((e,t)=>{ht?.terminate(),Ce().then(([r,n])=>{try{(ht=n).onerror=e=>t(e),ht.onmessage=Ct,Et=[e,t];let a={type:"init-wasm",in:u};if(!a.in.wasm.wasmPaths&&r){let e=me();e&&(a.in.wasm.wasmPaths=e)}ht.postMessage(a),bt=r}catch(a){t(a)}},t)});try{await Be(u.wasm),await rt(u),mt=!0}catch(e){throw gt=!0,e}finally{yt=!1}}},Ot=async e=>{if(wt())return At(),new Promise((t,r)=>{Tt("init-ep",[t,r]);let n={type:"init-ep",in:{epName:e,env:u}};ht.postMessage(n)});await nt(u,e)},Ut=async e=>wt()?(At(),new Promise((t,r)=>{Tt("copy-from",[t,r]);let n={type:"copy-from",in:{buffer:e}};ht.postMessage(n,[e.buffer])})):st(e),It=async(e,t)=>{if(wt()){if(t?.preferredOutputLocation)throw new Error('session option "preferredOutputLocation" is not supported for proxy.');return At(),new Promise((r,n)=>{Tt("create",[r,n]);let a={type:"create",in:{model:e,options:{...t}}},o=[];e instanceof Uint8Array&&o.push(e.buffer),ht.postMessage(a,o)})}return lt(e,t)},Lt=async e=>{if(wt())return At(),new Promise((t,r)=>{Tt("release",[t,r]);let n={type:"release",in:e};ht.postMessage(n)});ut(e)},xt=async(e,t,r,n,a,o)=>{if(wt()){if(r.some(e=>"cpu"!==e[3]))throw new Error("input tensor on GPU is not supported for proxy.");if(a.some(e=>e))throw new Error("pre-allocated output tensor is not supported for proxy.");return At(),new Promise((a,i)=>{Tt("run",[a,i]);let s=r,l={type:"run",in:{sessionId:e,inputIndices:t,inputs:s,outputIndices:n,options:o}};ht.postMessage(l,ct(s))})}return pt(e,t,r,n,a,o)},Pt=async e=>{if(wt())return At(),new Promise((t,r)=>{Tt("end-profiling",[t,r]);let n={type:"end-profiling",in:e};ht.postMessage(n)});dt(e)}}),Ht=G(()=>{le(),Wt(),Ft(),ue(),jt(),_t=(e,t)=>{switch(e.location){case"cpu":return[e.type,e.dims,e.data,"cpu"];case"gpu-buffer":return[e.type,e.dims,{gpuBuffer:e.gpuBuffer},"gpu-buffer"];case"ml-tensor":return[e.type,e.dims,{mlTensor:e.mlTensor},"ml-tensor"];default:throw new Error(`invalid data location: ${e.location} for ${t()}`)}},$t=e=>{switch(e[3]){case"cpu":return new R(e[0],e[2],e[1]);case"gpu-buffer":{let t=e[0];if(!Ke(t))throw new Error(`not supported data type: ${t} for deserializing GPU tensor`);let{gpuBuffer:r,download:n,dispose:a}=e[2];return R.fromGpuBuffer(r,{dataType:t,dims:e[1],download:n,dispose:a})}case"ml-tensor":{let t=e[0];if(!Qe(t))throw new Error(`not supported data type: ${t} for deserializing MLTensor tensor`);let{mlTensor:r,download:n,dispose:a}=e[2];return R.fromMLTensor(r,{dataType:t,dims:e[1],download:n,dispose:a})}default:throw new Error(`invalid data location: ${e[3]}`)}},Bt=class{async fetchModelAndCopyToWasmMemory(e){return Ut(await et(e))}async loadModel(e,t){let r;I(),r="string"==typeof e?await this.fetchModelAndCopyToWasmMemory(e):e,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await It(r,t),L()}async dispose(){return Lt(this.sessionId)}async run(e,t,r){I();let n=[],a=[];Object.entries(e).forEach(e=>{let t=e[0],r=e[1],o=this.inputNames.indexOf(t);if(-1===o)throw new Error(`invalid input '${t}'`);n.push(r),a.push(o)});let o=[],i=[];Object.entries(t).forEach(e=>{let t=e[0],r=e[1],n=this.outputNames.indexOf(t);if(-1===n)throw new Error(`invalid output '${t}'`);o.push(r),i.push(n)});let s=n.map((e,t)=>_t(e,()=>`input "${this.inputNames[a[t]]}"`)),l=o.map((e,t)=>e?_t(e,()=>`output "${this.outputNames[i[t]]}"`):null),u=await xt(this.sessionId,a,s,i,l,r),f={};for(let p=0;p<u.length;p++)f[this.outputNames[i[p]]]=o[p]??$t(u[p]);return L(),f}startProfiling(){}endProfiling(){Pt(this.sessionId)}}}),zt={};F(zt,{OnnxruntimeWebAssemblyBackend:()=>Zt,initializeFlags:()=>qt,wasmBackend:()=>Jt});var qt,Zt,Jt,Yt=G(()=>{le(),Wt(),Ht(),qt=()=>{("number"!=typeof u.wasm.initTimeout||u.wasm.initTimeout<0)&&(u.wasm.initTimeout=0);let e=u.wasm.simd;if("boolean"!=typeof e&&void 0!==e&&"fixed"!==e&&"relaxed"!==e&&(u.wasm.simd=!1),"boolean"!=typeof u.wasm.proxy&&(u.wasm.proxy=!1),"boolean"!=typeof u.wasm.trace&&(u.wasm.trace=!1),"number"!=typeof u.wasm.numThreads||!Number.isInteger(u.wasm.numThreads)||u.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)u.wasm.numThreads=1;else{let e=typeof navigator>"u"?D("node:os").cpus().length:navigator.hardwareConcurrency;u.wasm.numThreads=Math.min(4,Math.ceil((e||1)/2))}},Jt=new(Zt=class{async init(e){qt(),await Rt(),await Ot(e)}async createInferenceSessionHandler(e,t){let r=new Bt;return await r.loadModel(e,t),r}})});le(),le(),le();var Kt=se;{let e=(Yt(),j(zt)).wasmBackend;n("cpu",e,10),n("wasm",e,10)}Object.defineProperty(u.versions,"web",{value:"1.23.2",enumerable:!0});export{$ as InferenceSession,O as TRACE,x as TRACE_EVENT_BEGIN,P as TRACE_EVENT_END,I as TRACE_FUNC_BEGIN,L as TRACE_FUNC_END,R as Tensor,Kt as default,u as env,n as registerBackend};