scanic 1.4.1 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,9 +17,9 @@
17
17
 
18
18
  **Ultra-fast, production-ready document scanning for the modern Web.**
19
19
 
20
- Scanic is a high-performance document scanner library that brings professional-grade document edge detection and perspective correction to the browser and Node.js. By combining **Rust-powered WebAssembly** for pixel crunching and **GPU-accelerated Canvas** for image warping, Scanic delivers near-native performance (~10ms transforms) with a tiny footprint.
20
+ Scanic is a high-performance document scanner library that brings professional-grade document edge detection and perspective correction to the browser and Node.js. By combining **Rust-powered WebAssembly** for pixel crunching and a **fast bilinear inverse-map warp** for image extraction, Scanic delivers near-native performance (~10ms transforms) with a tiny footprint.
21
21
 
22
- [**Documentation**](https://marquaye.github.io/scanic) | [**Live Demo**](https://marquaye.github.io/scanic/demo/) | [**Framework Examples**](#💻-framework-examples) | [**API Reference**](https://marquaye.github.io/scanic/api/reference)
22
+ [**Documentation**](https://marquaye.github.io/scanic) | [**Live Demo**](https://marquaye.github.io/scanic/demo/) | [**Framework Examples**](https://marquaye.github.io/scanic/guide/frameworks) | [**API Reference**](https://marquaye.github.io/scanic/api/reference)
23
23
 
24
24
  ---
25
25
 
@@ -31,7 +31,7 @@ Traditional web scanning solutions often force a trade-off:
31
31
 
32
32
  **Scanic bridges this gap:**
33
33
  - **Hybrid Engine**: Rust/WASM handles the CPU-heavy edge detection.
34
- - **Turbo Warp**: Custom Triangle Subdivision algorithm utilizes the GPU for perspective correction.
34
+ - **Turbo Warp**: A per-pixel bilinear inverse-map does perspective correction with no Canvas state-machine overhead or seam artifacts.
35
35
  - **Zero Latency**: Designed for real-time applications like webcam scanning.
36
36
 
37
37
  ---
@@ -129,9 +129,6 @@ percent smaller than the stock 13 MB runtime while running at the same speed. Se
129
129
  the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection)
130
130
  for options, self hosting, and threading.
131
131
 
132
- > Using the UMD or `<script>` build? The bundled runtime applies to the ESM build.
133
- > For ML there, add `onnxruntime-web@1.23.x` to your page yourself, since the UMD
134
- > format cannot split code into separate chunks.
135
132
 
136
133
  ### Manual corner adjustment UI
137
134
 
@@ -181,111 +178,6 @@ async function onFrame(img) {
181
178
  }
182
179
  ```
183
180
 
184
- ### Complete Example
185
-
186
- ```js
187
- import { scanDocument } from 'scanic';
188
-
189
- async function processDocument() {
190
- // Get image from file input or any source
191
- const imageFile = document.getElementById('fileInput').files[0];
192
- const img = new Image();
193
-
194
- img.onload = async () => {
195
- try {
196
- // Extract and display the scanned document
197
- const result = await scanDocument(img, {
198
- mode: 'extract',
199
- output: 'canvas'
200
- });
201
-
202
- if (result.success) {
203
- // Add the extracted document to the page
204
- document.getElementById('output').appendChild(result.output);
205
-
206
- // Or get as data URL for download/display
207
- const dataUrl = result.output.toDataURL('image/png');
208
- console.log('Extracted document as data URL:', dataUrl);
209
- }
210
- } catch (error) {
211
- console.error('Error processing document:', error);
212
- }
213
- };
214
-
215
- img.src = URL.createObjectURL(imageFile);
216
- }
217
-
218
- // HTML setup
219
- // <input type="file" id="fileInput" accept="image/*" onchange="processDocument()">
220
- // <div id="output"></div>
221
- ```
222
-
223
- ## ⚙️ API Reference
224
-
225
- ### `scanDocument(image, options?)`
226
- The primary function for detecting and extracting documents.
227
-
228
- | Parameter | Type | Description |
229
- | :--- | :--- | :--- |
230
- | `image` | `HTMLImage\|Canvas\|ImageData` | The source image to scan. |
231
- | `options` | `Object` | Configuration options (see below). |
232
-
233
- #### `options` Properties
234
- | Option | Type | Default | Description |
235
- | :--- | :--- | :--- | :--- |
236
- | `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). |
237
- | `mode` | `'detect' \| 'extract'` | `'detect'` | `'detect'` returns coordinates; `'extract'` returns the warped image. |
238
- | `output` | `'canvas' \| 'imagedata' \| 'dataurl'` | `'canvas'` | The format of the returned processed image. |
239
- | `maxProcessingDimension` | `number` | `800` | Downscales image to this size for detection (faster). |
240
- | `lowThreshold` | `number` | `adaptive` | Optional lower threshold for Canny edge detection. If omitted together with `highThreshold`, adaptive thresholds are used. |
241
- | `highThreshold` | `number` | `adaptive` | Optional upper threshold for Canny edge detection. |
242
- | `applyDilation` | `boolean` | `true` | Enables dilation in the primary pass. |
243
- | `dilationKernelSize` | `number` | `3` | Morphological dilation kernel size for edge connection. |
244
- | `dilationIterations` | `number` | `1` | Number of dilation passes. |
245
- | `minArea` | `number` | `1000` | Minimum pixel area to consider a contour a "document". |
246
- | `enableDetectionCascade` | `boolean` | `true` | Enables fallback pass profiles for hard images. |
247
- | `minCascadeTriggerConfidence` | `number` | `0.68` | Confidence threshold before trying additional pass profiles. |
248
- | `maxCandidateContours` | `number` | `12` | Number of largest contours to score per pass. |
249
- | `minDocumentCoverageRatio` | `number` | `0.04` | Minimum image coverage required for a valid candidate. |
250
- | `minDocumentFillRatio` | `number` | `0.07` | Minimum contour fill ratio within its bounding box. |
251
- | `maxDocumentAspectRatio` | `number` | `8` | Maximum accepted aspect ratio for candidates. |
252
- | `debug` | `boolean` | `false` | If true, returns intermediate processing steps. |
253
-
254
- ##### `options.ml` (only when `detector: 'ml'`)
255
- | Option | Type | Default | Description |
256
- | :--- | :--- | :--- | :--- |
257
- | `assetBaseUrl` | `string` | jsDelivr `scanic-ml` | Base URL serving the `.wasm` + `.ort` assets. Set to self-host. |
258
- | `modelUrl` | `string` | `${assetBaseUrl}doccornernet_lean.ort` | Explicit model URL. |
259
- | `wasmPaths` | `string` | `assetBaseUrl` | Directory for the ORT wasm/loader. |
260
- | `modelBytes` | `Uint8Array` | (none) | Pre fetched model bytes (skips the network). |
261
- | `numThreads` | `number` | `1` | ORT threads. `>1` needs COOP/COEP headers. |
262
- | `minScore` | `number` | `0.5` | Minimum P(document) for `success: true`. |
263
-
264
- #### Return Value
265
- Returns a `Promise<ScannerResult>`:
266
- ```ts
267
- {
268
- success: boolean; // Did we find a document?
269
- corners: CornerPoints; // { topLeft, topRight, bottomRight, bottomLeft }
270
- output: any; // The warped image (if mode is 'extract')
271
- contour: Array<Point>; // Raw detection points
272
- score?: number; // P(document present), 0–1 (ML detector only)
273
- timings: Array<Object>; // Performance breakdown
274
- message: string; // Status or error message
275
- }
276
- ```
277
-
278
- ---
279
-
280
- ### `new Scanner()`
281
- The recommended class for high-performance applications (Webcam, Batch processing).
282
-
283
- ```js
284
- const scanner = new Scanner();
285
- await scanner.initialize(); // Pre-loads WASM
286
- const result = await scanner.scan(image, options);
287
- ```
288
-
289
181
  ## Examples
290
182
 
291
183
  ```js
@@ -328,16 +220,6 @@ const rawData = await scanDocument(imageElement, {
328
220
 
329
221
  ```
330
222
 
331
- ## 💻 Framework Examples
332
-
333
- Scanic is framework-agnostic but works great with modern UI libraries:
334
-
335
- | Framework | Link |
336
- | :--- | :--- |
337
- | **Vue 3** | [Vue & React Guide](https://marquaye.github.io/scanic/guide/frameworks) |
338
- | **React** | [Vue & React Guide](https://marquaye.github.io/scanic/guide/frameworks) |
339
-
340
- ---
341
223
 
342
224
  ## 🛠️ Development
343
225
 
@@ -381,26 +263,21 @@ Scanic uses Vitest for unit and regression testing. We test against real documen
381
263
  npm test
382
264
  ```
383
265
 
266
+ The regression suite covers both the classical detector and the optional ML detector
267
+ (`src/baseline.test.js` and `src/baseline.ml.test.js`), each checked against its own
268
+ golden baseline in `testImages/`:
384
269
 
385
- ## 🖥️ Node.js Support
386
-
387
- Scanic can run on the server! Since it relies on the Canvas API, you need to provide a canvas implementation (like `node-canvas`) and a DOM environment (`jsdom`).
388
-
389
- ```js
390
- import { scanDocument } from 'scanic';
391
- import { loadImage } from 'canvas';
392
- import { JSDOM } from 'jsdom';
393
-
394
- // Setup global environment
395
- const dom = new JSDOM();
396
- global.document = dom.window.document;
397
- global.ImageData = dom.window.ImageData;
270
+ ```bash
271
+ npm run baseline:check # classical detector vs testImages/baseline-results.json
272
+ npm run baseline:check:ml # ML detector vs testImages/baseline-results.ml.json
398
273
 
399
- const img = await loadImage('document.jpg');
400
- const result = await scanDocument(img, { mode: 'extract' });
274
+ npm run baseline:update # regenerate the classical baseline
275
+ npm run baseline:update:ml # regenerate the ML baseline
401
276
  ```
402
277
 
403
- ---
278
+ The ML baseline test skips automatically when `onnxruntime-web` or the `scanic-ml`
279
+ model assets aren't available locally.
280
+
404
281
 
405
282
  ## 📊 Comparison
406
283
 
@@ -412,19 +289,6 @@ const result = await scanDocument(img, { mode: 'extract' });
412
289
  | **GPU Acceleration** | ✅ Yes | ❌ No | ❌ No |
413
290
  | **TypeScript** | ✅ Yes | ❌ No | ✅ Yes |
414
291
 
415
- ---
416
-
417
- ## 🏗️ Performance Architecture
418
-
419
- Scanic uses a **hybrid JavaScript + WebAssembly approach**:
420
-
421
- - **JavaScript Layer**: High-level API, DOM manipulation, and workflow coordination
422
- - **WebAssembly Layer**: CPU-intensive operations like:
423
- - Gaussian blur with SIMD optimizations
424
- - Canny edge detection with hysteresis thresholding
425
- - Gradient calculations using Sobel operators
426
- - Non-maximum suppression for edge thinning
427
- - Morphological operations (dilation/erosion)
428
292
 
429
293
  ## 🤝 Contributing
430
294
 
@@ -443,6 +307,7 @@ Contributions are welcome! Whether it's reporting a bug, suggesting a feature, o
443
307
 
444
308
  - Inspired by [jscanify](https://github.com/puffinsoft/jscanify).
445
309
  - WASM Blur module powered by Rust.
310
+ - The optional ML corner detector's architecture is [DocCornerNet](https://github.com/mapo80/DocCornerNet-CoordClass) (MIT licensed) by [mapo80](https://github.com/mapo80), based on [SimCC](https://arxiv.org/abs/2107.03332) (Li et al., ECCV 2022). See the [ML detection guide](https://marquaye.github.io/scanic/guide/ml-detection) for how it's trained, slimmed, and deployed in scanic.
446
311
 
447
312
  ---
448
313
 
@@ -490,6 +355,14 @@ Contributions are welcome! Whether it's reporting a bug, suggesting a feature, o
490
355
  <br/>
491
356
  <em>Unique and personalized children's books</em>
492
357
  </td>
358
+ <td align="center" width="250">
359
+ <a href="https://ausschreibungszentrale.de/" target="_blank">
360
+ <br/>
361
+ <strong>ausschreibungszentrale.de</strong>
362
+ </a>
363
+ <br/>
364
+ <em>Public tender matching platform</em>
365
+ </td>
493
366
  </tr>
494
367
  </table>
495
368
 
@@ -1 +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};
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=e.assetBaseUrl?(n=e.assetBaseUrl).endsWith("/")?n:`${n}/`:"https://cdn.jsdelivr.net/npm/scanic-ml@0.2.0/dist/";var n;const o=e.modelUrl||`${t}doccornernet_lean.ort`,a=e.wasmPaths||t,s=void 0!==e.numThreads?e.numThreads:e.threaded?4:1,c=`${o}|${a}|${s}`;if(r.has(c))return r.get(c);const d=(async()=>{const t=await i();t.env.wasm.wasmPaths=a,t.env.wasm.numThreads=s,t.env.wasm.proxy=!1;const n=e.modelBytes||new Uint8Array(await(await fetch(o)).arrayBuffer());return{ort:t,session:await t.InferenceSession.create(n,{executionProviders:["wasm"],graphOptimizationLevel:"all"})}})();r.set(c,d);try{return await d}catch(u){throw r.delete(c),u}}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 h=("undefined"!=typeof performance?performance:Date).now();const{session:m}=await s(r);c.push({step:"ML Session Load",ms:(("undefined"!=typeof performance?performance:Date).now()-h).toFixed(2)});const l=await i();h=("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()-h).toFixed(2)}),h=("undefined"!=typeof performance?performance:Date).now();const p=await m.run({[m.inputNames[0]]:w});c.push({step:"ML Inference",ms:(("undefined"!=typeof performance?performance:Date).now()-h).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};
@@ -1 +1,3 @@
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};
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.27.0"}),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=/* @__PURE__ */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=/* @__PURE__ */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(
2
+ /*webpackIgnore:true*/
3
+ 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)||n&&!r;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,n.locateFile=e=>e;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)=>{let n=t.executionProviders;for(let a of n){let t="string"==typeof a?a:a.name,n=[];switch(t){case"webnn":if(t="WEBNN",Ve(e,"session.disable_quant_qdq","1",r),Ve(e,"session.disable_qdq_constant_folding","1",r),"string"!=typeof a){let t=a?.deviceType;t&&Ve(e,"deviceType",t,r)}break;case"webgpu":if(t="JS","string"!=typeof a){let t=a;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=n.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,n[e][0],"*"),Ne().setValue(l+e*Ne().PTR_SIZE,n[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,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: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=[],T=i.stackSave(),A=i.stackAlloc(w*s),C=i.stackAlloc(w*s),R=i.stackAlloc(h*s),O=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(A+e*s,g[e],"*"),i.setValue(C+e*s,f[t[e]],"*");for(let e=0;e<h;e++)i.setValue(R+e*s,b[e],"*"),i.setValue(O+e*s,p[n[e]],"*");let l;i.jsepOnRunStart?.(u),i.webnnOnRunStart?.(u),l=await i._OrtRun(u,C,A,w,O,h,R,y),0!==l&&ke("failed to call OrtRun().");let T=[],U=[];x("wasm ProcessOutputTensor");for(let t=0;t<h;t++){let r=Number(i.getValue(R+t*s,"*"));if(r===b[t]||v.includes(b[t])){T.push(a[t]),r!==b[t]&&0!==i._OrtReleaseTensor(r)&&ke("Can't release tensor.");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))}T.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,T.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,T.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=T.length;f=!0,U.push((async()=>{let n=[t,await e];return i.webnnReleaseTensorId(p),i._OrtReleaseTensor(r),n})()),T.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)),T.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(U))T[e][2]=t;return P("wasm ProcessOutputTensor"),T}finally{i.webnnOnRunEnd?.(u),i.stackRestore(T),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.27.0",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};