onnxruntime-web
Version:
A Javascript library for running ONNX models on browsers
8 lines (7 loc) • 27.1 kB
JavaScript
/*!
* ONNX Runtime Web v1.26.0
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License.
*/
;var Et=Object.create;var ce=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,It=Object.prototype.hasOwnProperty;var C=(e,t)=>()=>(e&&(t=e(e=0)),t);var xe=(e,t)=>{for(var n in t)ce(e,n,{get:t[n],enumerable:!0})},ue=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ht(t))!It.call(e,r)&&r!==n&&ce(e,r,{get:()=>t[r],enumerable:!(o=St(t,r))||o.enumerable});return e},G=(e,t,n)=>(ue(e,t,"default"),n&&ue(n,t,"default")),Tt=(e,t,n)=>(n=e!=null?Et(Ot(e)):{},ue(t||!e||!e.__esModule?ce(n,"default",{value:e,enumerable:!0}):n,e)),Ce=e=>ue(ce({},"__esModule",{value:!0}),e);var H,fe=C(()=>{"use strict";H=!!(typeof process<"u"&&process.versions&&process.versions.node)});var Lt,_t,V,ke,We,Bt,Pt,Ut,vt,Fe,Re,Se=C(()=>{"use strict";fe();Lt=H||typeof location>"u"?void 0:location.origin,_t=()=>{if(!H)return typeof document<"u"?document.currentScript?.src:typeof self<"u"?self.location?.href:void 0},V=_t(),ke=()=>{if(V&&!V.startsWith("blob:"))return V.substring(0,V.lastIndexOf("/")+1)},We=(e,t)=>{try{let n=t??V;return(n?new URL(e,n):new URL(e)).origin===Lt}catch{return!1}},Bt=(e,t)=>{let n=t??V;try{return(n?new URL(e,n):new URL(e)).href}catch{return}},Pt=(e,t)=>`${t??"./"}${e}`,Ut=async e=>{let n=await(await fetch(e,{credentials:"same-origin"})).blob();return URL.createObjectURL(n)},vt=async e=>(await import(/*webpackIgnore:true*/ /*@vite-ignore*/e)).default,Fe=void 0,Re=async(e,t,n,o)=>{let r=Fe&&!(e||t);if(r)if(V)r=We(V)||o&&!n;else if(o&&!n)r=!0;else throw new Error("cannot determine the script source URL.");if(r)return[void 0,Fe];{let a="ort-wasm-simd-threaded.mjs",s=e??Bt(a,t),i=!H&&n&&s&&!We(s,t),u=i?await Ut(s):s??Pt(a,t);return[i?u:void 0,await vt(u)]}}});var he,Oe,le,Ne,Dt,At,xt,Ge,E,Y=C(()=>{"use strict";Se();Oe=!1,le=!1,Ne=!1,Dt=()=>{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}},At=()=>{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}},xt=()=>{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}},Ge=async e=>{if(Oe)return Promise.resolve();if(le)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(Ne)throw new Error("previous call to 'initializeWebAssembly()' failed.");le=!0;let t=e.initTimeout,n=e.numThreads;if(e.simd!==!1){if(e.simd==="relaxed"){if(!xt())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!At())throw new Error("WebAssembly SIMD is not supported in the current environment.")}let o=Dt();n>1&&!o&&(typeof self<"u"&&!self.crossOriginIsolated&&console.warn("env.wasm.numThreads is set to "+n+", but this will not work unless you enable crossOriginIsolated mode. See https://web.dev/cross-origin-isolation-guide/ for more info."),console.warn("WebAssembly multi-threading is not supported in the current environment. Falling back to single-threading."),e.numThreads=n=1);let r=e.wasmPaths,a=typeof r=="string"?r:void 0,s=r?.mjs,i=s?.href??s,u=r?.wasm,l=u?.href??u,w=e.wasmBinary,[f,c]=await Re(i,a,n>1,!!w||!!l),p=!1,S=[];if(t>0&&S.push(new Promise(h=>{setTimeout(()=>{p=!0,h()},t)})),S.push(new Promise((h,v)=>{let m={numThreads:n};if(w)m.wasmBinary=w,m.locateFile=b=>b;else if(l||a)m.locateFile=b=>l??a+b;else if(i&&i.indexOf("blob:")!==0)m.locateFile=b=>new URL(b,i).href;else if(f){let b=ke();b&&(m.locateFile=M=>b+M)}c(m).then(b=>{le=!1,Oe=!0,he=b,h(),f&&URL.revokeObjectURL(f)},b=>{le=!1,Ne=!0,v(b)})})),await Promise.race(S),p)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},E=()=>{if(Oe&&he)return he;throw new Error("WebAssembly is not initialized yet.")}});var A,ne,g,pe=C(()=>{"use strict";Y();A=(e,t)=>{let n=E(),o=n.lengthBytesUTF8(e)+1,r=n._malloc(o);return n.stringToUTF8(e,r,o),t.push(r),r},ne=(e,t,n,o)=>{if(typeof e=="object"&&e!==null){if(n.has(e))throw new Error("Circular reference in options");n.add(e)}Object.entries(e).forEach(([r,a])=>{let s=t?t+r:r;if(typeof a=="object")ne(a,s+".",n,o);else if(typeof a=="string"||typeof a=="number")o(s,a.toString());else if(typeof a=="boolean")o(s,a?"1":"0");else throw new Error(`Can't handle extra config type: ${typeof a}`)})},g=e=>{let t=E(),n=t.stackSave();try{let o=t.PTR_SIZE,r=t.stackAlloc(2*o);t._OrtGetLastError(r,r+o);let a=Number(t.getValue(r,o===4?"i32":"i64")),s=t.getValue(r+o,"*"),i=s?t.UTF8ToString(s):"";throw new Error(`${e} ERROR_CODE: ${a}, ERROR_MESSAGE: ${i}`)}finally{t.stackRestore(n)}}});var je,$e=C(()=>{"use strict";Y();pe();je=e=>{let t=E(),n=0,o=[],r=e||{};try{if(e?.logSeverityLevel===void 0)r.logSeverityLevel=2;else if(typeof e.logSeverityLevel!="number"||!Number.isInteger(e.logSeverityLevel)||e.logSeverityLevel<0||e.logSeverityLevel>4)throw new Error(`log severity level is not valid: ${e.logSeverityLevel}`);if(e?.logVerbosityLevel===void 0)r.logVerbosityLevel=0;else if(typeof e.logVerbosityLevel!="number"||!Number.isInteger(e.logVerbosityLevel))throw new Error(`log verbosity level is not valid: ${e.logVerbosityLevel}`);e?.terminate===void 0&&(r.terminate=!1);let a=0;return e?.tag!==void 0&&(a=A(e.tag,o)),n=t._OrtCreateRunOptions(r.logSeverityLevel,r.logVerbosityLevel,!!r.terminate,a),n===0&&g("Can't create run options."),e?.extra!==void 0&&ne(e.extra,"",new WeakSet,(s,i)=>{let u=A(s,o),l=A(i,o);t._OrtAddRunConfigEntry(n,u,l)!==0&&g(`Can't set a run config entry: ${s} - ${i}.`)}),[n,o]}catch(a){throw n!==0&&t._OrtReleaseRunOptions(n),o.forEach(s=>t._free(s)),a}}});var Ct,Mt,Wt,Z,Ft,ze,He=C(()=>{"use strict";Y();pe();Ct=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}`)}},Mt=e=>{switch(e){case"sequential":return 0;case"parallel":return 1;default:throw new Error(`unsupported execution mode: ${e}`)}},Wt=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(n=>(typeof n=="string"?n:n.name)==="webgpu")&&(e.enableMemPattern=!1)},Z=(e,t,n,o)=>{let r=A(t,o),a=A(n,o);E()._OrtAddSessionConfigEntry(e,r,a)!==0&&g(`Can't set a session config entry: ${t} - ${n}.`)},Ft=async(e,t,n)=>{let o=t.executionProviders;for(let r of o){let a=typeof r=="string"?r:r.name,s=[];switch(a){case"webnn":if(a="WEBNN",Z(e,"session.disable_quant_qdq","1",n),Z(e,"session.disable_qdq_constant_folding","1",n),typeof r!="string"){let c=r?.deviceType;c&&Z(e,"deviceType",c,n)}break;case"webgpu":if(a="JS",typeof r!="string"){let f=r;if(f?.preferredLayout){if(f.preferredLayout!=="NCHW"&&f.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${f.preferredLayout}`);Z(e,"preferredLayout",f.preferredLayout,n)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${a}`)}let i=A(a,n),u=s.length,l=0,w=0;if(u>0){l=E()._malloc(u*E().PTR_SIZE),n.push(l),w=E()._malloc(u*E().PTR_SIZE),n.push(w);for(let f=0;f<u;f++)E().setValue(l+f*E().PTR_SIZE,s[f][0],"*"),E().setValue(w+f*E().PTR_SIZE,s[f][1],"*")}await E()._OrtAppendExecutionProvider(e,i,l,w,u)!==0&&g(`Can't append execution provider: ${a}.`)}},ze=async e=>{let t=E(),n=0,o=[],r=e||{};Wt(r);try{let a=Ct(r.graphOptimizationLevel??"all"),s=Mt(r.executionMode??"sequential"),i=typeof r.logId=="string"?A(r.logId,o):0,u=r.logSeverityLevel??2;if(!Number.isInteger(u)||u<0||u>4)throw new Error(`log severity level is not valid: ${u}`);let l=r.logVerbosityLevel??0;if(!Number.isInteger(l)||l<0||l>4)throw new Error(`log verbosity level is not valid: ${l}`);let w=typeof r.optimizedModelFilePath=="string"?A(r.optimizedModelFilePath,o):0;if(n=t._OrtCreateSessionOptions(a,!!r.enableCpuMemArena,!!r.enableMemPattern,s,!!r.enableProfiling,0,i,u,l,w),n===0&&g("Can't create session options."),r.executionProviders&&await Ft(n,r,o),r.enableGraphCapture!==void 0){if(typeof r.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${r.enableGraphCapture}`);Z(n,"enableGraphCapture",r.enableGraphCapture.toString(),o)}if(r.freeDimensionOverrides)for(let[f,c]of Object.entries(r.freeDimensionOverrides)){if(typeof f!="string")throw new Error(`free dimension override name must be a string: ${f}`);if(typeof c!="number"||!Number.isInteger(c)||c<0)throw new Error(`free dimension override value must be a non-negative integer: ${c}`);let p=A(f,o);t._OrtAddFreeDimensionOverride(n,p,c)!==0&&g(`Can't set a free dimension override: ${f} - ${c}.`)}return r.extra!==void 0&&ne(r.extra,"",new WeakSet,(f,c)=>{Z(n,f,c,o)}),[n,o]}catch(a){throw n!==0&&t._OrtReleaseSessionOptions(n)!==0&&g("Can't release session options."),o.forEach(s=>t._free(s)),a}}});var X,de,K,Ve,qe,me,be,Je,Ie=C(()=>{"use strict";X=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}`)}},de=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}`)}},K=(e,t)=>{let n=[-1,4,1,1,2,2,4,8,-1,1,2,8,4,8,-1,-1,-1,-1,-1,-1,-1,.5,.5][e],o=typeof t=="number"?t:t.reduce((r,a)=>r*a,1);return n>0?Math.ceil(o*n):void 0},Ve=e=>{switch(e){case"float16":return typeof Float16Array<"u"&&Float16Array.from?Float16Array:Uint16Array;case"float32":return Float32Array;case"uint8":return Uint8Array;case"int8":return Int8Array;case"uint16":return Uint16Array;case"int16":return Int16Array;case"int32":return Int32Array;case"bool":return Uint8Array;case"float64":return Float64Array;case"uint32":return Uint32Array;case"int64":return BigInt64Array;case"uint64":return BigUint64Array;default:throw new Error(`unsupported type: ${e}`)}},qe=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}`)}},me=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",be=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint64"||e==="int8"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",Je=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}`)}}});var oe,Te=C(()=>{"use strict";fe();oe=async e=>{if(typeof e=="string")if(H)try{let{readFile:t}=require("node:fs/promises");return new Uint8Array(await t(e))}catch(t){if(t.code==="ERR_FS_FILE_TOO_LARGE"){let{createReadStream:n}=require("node:fs"),o=n(e),r=[];for await(let a of o)r.push(a);return new Uint8Array(Buffer.concat(r))}throw t}else{let t=await fetch(e);if(!t.ok)throw new Error(`failed to load external data file: ${e}`);let n=t.headers.get("Content-Length"),o=n?parseInt(n,10):0;if(o<1073741824)return new Uint8Array(await t.arrayBuffer());{if(!t.body)throw new Error(`failed to load external data file: ${e}, no response body.`);let r=t.body.getReader(),a;try{a=new ArrayBuffer(o)}catch(i){if(i instanceof RangeError){let u=Math.ceil(o/65536);a=new WebAssembly.Memory({initial:u,maximum:u}).buffer}else throw i}let s=0;for(;;){let{done:i,value:u}=await r.read();if(i)break;let l=u.byteLength;new Uint8Array(a,s,l).set(u),s+=l}return new Uint8Array(a,0,o)}}else return e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof Uint8Array?e:new Uint8Array(e)}});var Q,kt,Xe,Ke,ee,Rt,Ye,Le,Qe,et,Ze,tt,rt,nt=C(()=>{"use strict";Q=require("onnxruntime-common");$e();He();Ie();Y();pe();Te();kt=(e,t)=>{E()._OrtInit(e,t)!==0&&g("Can't initialize onnxruntime.")},Xe=async e=>{kt(e.wasm.numThreads,qe(e.logLevel))},Ke=async(e,t)=>{E().asyncInit?.();let n=e.webgpu.adapter;if(t==="webgpu"){if(typeof navigator>"u"||!navigator.gpu)throw new Error("WebGPU is not supported in current environment");if(n){if(typeof n.limits!="object"||typeof n.features!="object"||typeof n.requestDevice!="function")throw new Error("Invalid GPU adapter set in `env.webgpu.adapter`. It must be a GPUAdapter object.")}else{let o=e.webgpu.powerPreference;if(o!==void 0&&o!=="low-power"&&o!=="high-performance")throw new Error(`Invalid powerPreference setting: "${o}"`);let r=e.webgpu.forceFallbackAdapter;if(r!==void 0&&typeof r!="boolean")throw new Error(`Invalid forceFallbackAdapter setting: "${r}"`);if(n=await navigator.gpu.requestAdapter({powerPreference:o,forceFallbackAdapter:r}),!n)throw new Error('Failed to get GPU adapter. You may need to enable flag "--enable-unsafe-webgpu" if you are using Chrome.')}}if(t==="webnn"&&(typeof navigator>"u"||!navigator.ml))throw new Error("WebNN is not supported in current environment")},ee=new Map,Rt=e=>{let t=E(),n=t.stackSave();try{let o=t.PTR_SIZE,r=t.stackAlloc(2*o);t._OrtGetInputOutputCount(e,r,r+o)!==0&&g("Can't get session input/output count.");let s=o===4?"i32":"i64";return[Number(t.getValue(r,s)),Number(t.getValue(r+o,s))]}finally{t.stackRestore(n)}},Ye=(e,t)=>{let n=E(),o=n.stackSave(),r=0;try{let a=n.PTR_SIZE,s=n.stackAlloc(2*a);n._OrtGetInputOutputMetadata(e,t,s,s+a)!==0&&g("Can't get session input/output metadata.");let u=Number(n.getValue(s,"*"));r=Number(n.getValue(s+a,"*"));let l=n.HEAP32[r/4];if(l===0)return[u,0];let w=n.HEAPU32[r/4+1],f=[];for(let c=0;c<w;c++){let p=Number(n.getValue(r+8+c*a,"*"));f.push(p!==0?n.UTF8ToString(p):Number(n.getValue(r+8+(c+w)*a,"*")))}return[u,l,f]}finally{n.stackRestore(o),r!==0&&n._OrtFree(r)}},Le=e=>{let t=E(),n=t._malloc(e.byteLength);if(n===0)throw new Error(`Can't create a session. failed to allocate a buffer of size ${e.byteLength}.`);return t.HEAPU8.set(e,n),[n,e.byteLength]},Qe=async(e,t)=>{let n,o,r=E();Array.isArray(e)?[n,o]=e:e.buffer===r.HEAPU8.buffer?[n,o]=[e.byteOffset,e.byteLength]:[n,o]=Le(e);let a=0,s=0,i=0,u=[],l=[],w=[];try{if([s,u]=await ze(t),t?.externalData&&r.mountExternalData){let y=[];for(let O of t.externalData){let _=typeof O=="string"?O:O.path;y.push(oe(typeof O=="string"?O:O.data).then(D=>{r.mountExternalData(_,D)}))}await Promise.all(y)}for(let y of t?.executionProviders??[])if((typeof y=="string"?y:y.name)==="webnn"){if(r.shouldTransferToMLTensor=!1,typeof y!="string"){let _=y,D=_?.context,B=_?.gpuDevice,te=_?.deviceType,q=_?.powerPreference;D?r.currentContext=D:B?r.currentContext=await r.webnnCreateMLContext(B):r.currentContext=await r.webnnCreateMLContext({deviceType:te,powerPreference:q})}else r.currentContext=await r.webnnCreateMLContext();break}a=await r._OrtCreateSession(n,o,s),r.webgpuOnCreateSession?.(a),a===0&&g("Can't create a session."),r.jsepOnCreateSession?.(),r.currentContext&&(r.webnnRegisterMLContext(a,r.currentContext),r.currentContext=void 0,r.shouldTransferToMLTensor=!0);let[f,c]=Rt(a),p=!!t?.enableGraphCapture,S=[],h=[],v=[],m=[],b=[];for(let y=0;y<f;y++){let[O,_,D]=Ye(a,y);O===0&&g("Can't get an input name."),l.push(O);let B=r.UTF8ToString(O);S.push(B),v.push(_===0?{name:B,isTensor:!1}:{name:B,isTensor:!0,type:de(_),shape:D})}for(let y=0;y<c;y++){let[O,_,D]=Ye(a,y+f);O===0&&g("Can't get an output name."),w.push(O);let B=r.UTF8ToString(O);h.push(B),m.push(_===0?{name:B,isTensor:!1}:{name:B,isTensor:!0,type:de(_),shape:D})}return ee.set(a,[a,l,w,null,p,!1]),[a,S,h,v,m]}catch(f){throw l.forEach(c=>r._OrtFree(c)),w.forEach(c=>r._OrtFree(c)),i!==0&&r._OrtReleaseBinding(i)!==0&&g("Can't release IO binding."),a!==0&&r._OrtReleaseSession(a)!==0&&g("Can't release session."),f}finally{r._free(n),s!==0&&r._OrtReleaseSessionOptions(s)!==0&&g("Can't release session options."),u.forEach(f=>r._free(f)),r.unmountExternalData?.()}},et=e=>{let t=E(),n=ee.get(e);if(!n)throw new Error(`cannot release session. invalid session id: ${e}`);let[o,r,a,s,i]=n;s&&(i&&t._OrtClearBoundOutputs(s.handle)!==0&&g("Can't clear bound outputs."),t._OrtReleaseBinding(s.handle)!==0&&g("Can't release IO binding.")),t.jsepOnReleaseSession?.(e),t.webnnOnReleaseSession?.(e),t.webgpuOnReleaseSession?.(e),r.forEach(u=>t._OrtFree(u)),a.forEach(u=>t._OrtFree(u)),t._OrtReleaseSession(o)!==0&&g("Can't release session."),ee.delete(e)},Ze=async(e,t,n,o,r,a,s=!1)=>{if(!e){t.push(0);return}let i=E(),u=i.PTR_SIZE,l=e[0],w=e[1],f=e[3],c=f,p,S;if(l==="string"&&(f==="gpu-buffer"||f==="ml-tensor"))throw new Error("String tensor is not supported on GPU.");if(s&&f!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${a} when enableGraphCapture is true.`);if(f==="gpu-buffer"){let m=e[2].gpuBuffer;S=K(X(l),w);{let b=i.jsepRegisterBuffer;if(!b)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');p=b(o,a,m,S)}}else if(f==="ml-tensor"){let m=e[2].mlTensor;S=K(X(l),w);let b=i.webnnRegisterMLTensor;if(!b)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');p=b(o,m,X(l),w)}else{let m=e[2];if(Array.isArray(m)){S=u*m.length,p=i._malloc(S),n.push(p);for(let b=0;b<m.length;b++){if(typeof m[b]!="string")throw new TypeError(`tensor data at index ${b} is not a string`);i.setValue(p+b*u,A(m[b],n),"*")}}else{let b=i.webnnIsGraphInput,M=i.webnnIsGraphOutput;if(l!=="string"&&b&&M){let y=i.UTF8ToString(r);if(b(o,y)||M(o,y)){let O=X(l);S=K(O,w),c="ml-tensor";let _=i.webnnCreateTemporaryTensor,D=i.webnnUploadTensor;if(!_||!D)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');let B=await _(o,O,w);D(B,new Uint8Array(m.buffer,m.byteOffset,m.byteLength)),p=B}else S=m.byteLength,p=i._malloc(S),n.push(p),i.HEAPU8.set(new Uint8Array(m.buffer,m.byteOffset,S),p)}else S=m.byteLength,p=i._malloc(S),n.push(p),i.HEAPU8.set(new Uint8Array(m.buffer,m.byteOffset,S),p)}}let h=i.stackSave(),v=i.stackAlloc(4*w.length);try{w.forEach((b,M)=>i.setValue(v+M*u,b,u===4?"i32":"i64"));let m=i._OrtCreateTensor(X(l),p,S,v,w.length,Je(c));m===0&&g(`Can't create tensor for input/output. session=${o}, index=${a}.`),t.push(m)}finally{i.stackRestore(h)}},tt=async(e,t,n,o,r,a)=>{let s=E(),i=s.PTR_SIZE,u=ee.get(e);if(!u)throw new Error(`cannot run inference. invalid session id: ${e}`);let l=u[0],w=u[1],f=u[2],c=u[3],p=u[4],S=u[5],h=t.length,v=o.length,m=0,b=[],M=[],y=[],O=[],_=[],D=s.stackSave(),B=s.stackAlloc(h*i),te=s.stackAlloc(h*i),q=s.stackAlloc(v*i),Pe=s.stackAlloc(v*i);try{[m,b]=je(a),(0,Q.TRACE_EVENT_BEGIN)("wasm prepareInputOutputTensor");for(let d=0;d<h;d++)await Ze(n[d],M,O,e,w[t[d]],t[d],p);for(let d=0;d<v;d++)await Ze(r[d],y,O,e,f[o[d]],h+o[d],p);(0,Q.TRACE_EVENT_END)("wasm prepareInputOutputTensor");for(let d=0;d<h;d++)s.setValue(B+d*i,M[d],"*"),s.setValue(te+d*i,w[t[d]],"*");for(let d=0;d<v;d++)s.setValue(q+d*i,y[d],"*"),s.setValue(Pe+d*i,f[o[d]],"*");s.jsepOnRunStart?.(l),s.webnnOnRunStart?.(l);let x;x=await s._OrtRun(l,te,B,h,Pe,v,q,m),x!==0&&g("failed to call OrtRun().");let N=[],Ue=[];(0,Q.TRACE_EVENT_BEGIN)("wasm ProcessOutputTensor");for(let d=0;d<v;d++){let W=Number(s.getValue(q+d*i,"*"));if(W===y[d]||_.includes(y[d])){N.push(r[d]),W!==y[d]&&s._OrtReleaseTensor(W)!==0&&g("Can't release tensor.");continue}let ve=s.stackSave(),F=s.stackAlloc(4*i),J=!1,T,P=0;try{s._OrtGetTensorData(W,F,F+i,F+2*i,F+3*i)!==0&&g(`Can't access output tensor data on index ${d}.`);let Ee=i===4?"i32":"i64",ae=Number(s.getValue(F,Ee));P=s.getValue(F+i,"*");let De=s.getValue(F+i*2,"*"),yt=Number(s.getValue(F+i*3,Ee)),j=[];for(let L=0;L<yt;L++)j.push(Number(s.getValue(De+L*i,Ee)));s._OrtFree(De)!==0&&g("Can't free memory for tensor dims.");let $=j.reduce((L,I)=>L*I,1);T=de(ae);let re=c?.outputPreferredLocations[o[d]];if(T==="string"){if(re==="gpu-buffer"||re==="ml-tensor")throw new Error("String tensor is not supported on GPU.");let L=[];for(let I=0;I<$;I++){let z=s.getValue(P+I*i,"*"),ie=s.getValue(P+(I+1)*i,"*"),Ae=I===$-1?void 0:ie-z;L.push(s.UTF8ToString(z,Ae))}N.push([T,j,L,"cpu"])}else if(re==="gpu-buffer"&&$>0){let L=s.jsepGetBuffer;if(!L)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let I=L(P),z=K(ae,$);if(z===void 0||!me(T))throw new Error(`Unsupported data type: ${T}`);J=!0,N.push([T,j,{gpuBuffer:I,download:s.jsepCreateDownloader(I,z,T),dispose:()=>{s._OrtReleaseTensor(W)!==0&&g("Can't release tensor.")}},"gpu-buffer"])}else if(re==="ml-tensor"&&$>0){let L=s.webnnEnsureTensor,I=s.webnnIsGraphInputOutputTypeSupported;if(!L||!I)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(K(ae,$)===void 0||!be(T))throw new Error(`Unsupported data type: ${T}`);if(!I(e,T,!1))throw new Error(`preferredLocation "ml-tensor" for ${T} output is not supported by current WebNN Context.`);let ie=await L(e,P,ae,j,!1);J=!0,N.push([T,j,{mlTensor:ie,download:s.webnnCreateMLTensorDownloader(P,T),dispose:()=>{s.webnnReleaseTensorId(P),s._OrtReleaseTensor(W)}},"ml-tensor"])}else if(re==="ml-tensor-cpu-output"&&$>0){let L=s.webnnCreateMLTensorDownloader(P,T)(),I=N.length;J=!0,Ue.push((async()=>{let z=[I,await L];return s.webnnReleaseTensorId(P),s._OrtReleaseTensor(W),z})()),N.push([T,j,[],"cpu"])}else{let L=Ve(T),I=new L($);new Uint8Array(I.buffer,I.byteOffset,I.byteLength).set(s.HEAPU8.subarray(P,P+I.byteLength)),N.push([T,j,I,"cpu"])}}finally{s.stackRestore(ve),T==="string"&&P&&s._free(P),J||s._OrtReleaseTensor(W)}}c&&!p&&(s._OrtClearBoundOutputs(c.handle)!==0&&g("Can't clear bound outputs."),ee.set(e,[l,w,f,c,p,!1]));for(let[d,W]of await Promise.all(Ue))N[d][2]=W;return(0,Q.TRACE_EVENT_END)("wasm ProcessOutputTensor"),N}finally{s.webnnOnRunEnd?.(l),s.stackRestore(D),M.forEach(x=>s._OrtReleaseTensor(x)),y.forEach(x=>s._OrtReleaseTensor(x)),O.forEach(x=>s._free(x)),m!==0&&s._OrtReleaseRunOptions(m),b.forEach(x=>s._free(x))}},rt=e=>{let t=E(),n=ee.get(e);if(!n)throw new Error("invalid session id");let o=n[0],r=t._OrtEndProfiling(o);r===0&&g("Can't get an profile file name."),t._OrtFree(r)}});var we,_e,ot,st,at,it,ut,ct,ft,lt,pt,Be=C(()=>{"use strict";we=require("onnxruntime-common");nt();Y();Se();_e=!1,ot=!1,st=!1,at=async()=>{if(!ot){if(_e)throw new Error("multiple calls to 'initWasm()' detected.");if(st)throw new Error("previous call to 'initWasm()' failed.");_e=!0;try{await Ge(we.env.wasm),await Xe(we.env),ot=!0}catch(e){throw st=!0,e}finally{_e=!1}}},it=async e=>{await Ke(we.env,e)},ut=async e=>Le(e),ct=async(e,t)=>Qe(e,t),ft=async e=>{et(e)},lt=async(e,t,n,o,r,a)=>tt(e,t,n,o,r,a),pt=async e=>{rt(e)}});var k,dt,Gt,ge,mt=C(()=>{"use strict";k=require("onnxruntime-common");Be();Ie();fe();Te();dt=(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()}`)}},Gt=e=>{switch(e[3]){case"cpu":return new k.Tensor(e[0],e[2],e[1]);case"gpu-buffer":{let t=e[0];if(!me(t))throw new Error(`not supported data type: ${t} for deserializing GPU tensor`);let{gpuBuffer:n,download:o,dispose:r}=e[2];return k.Tensor.fromGpuBuffer(n,{dataType:t,dims:e[1],download:o,dispose:r})}case"ml-tensor":{let t=e[0];if(!be(t))throw new Error(`not supported data type: ${t} for deserializing MLTensor tensor`);let{mlTensor:n,download:o,dispose:r}=e[2];return k.Tensor.fromMLTensor(n,{dataType:t,dims:e[1],download:o,dispose:r})}default:throw new Error(`invalid data location: ${e[3]}`)}},ge=class{async fetchModelAndCopyToWasmMemory(t){return ut(await oe(t))}async loadModel(t,n){(0,k.TRACE_FUNC_BEGIN)();let o;typeof t=="string"?H?o=await oe(t):o=await this.fetchModelAndCopyToWasmMemory(t):o=t,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await ct(o,n),(0,k.TRACE_FUNC_END)()}async dispose(){return ft(this.sessionId)}async run(t,n,o){(0,k.TRACE_FUNC_BEGIN)();let r=[],a=[];Object.entries(t).forEach(c=>{let p=c[0],S=c[1],h=this.inputNames.indexOf(p);if(h===-1)throw new Error(`invalid input '${p}'`);r.push(S),a.push(h)});let s=[],i=[];Object.entries(n).forEach(c=>{let p=c[0],S=c[1],h=this.outputNames.indexOf(p);if(h===-1)throw new Error(`invalid output '${p}'`);s.push(S),i.push(h)});let u=r.map((c,p)=>dt(c,()=>`input "${this.inputNames[a[p]]}"`)),l=s.map((c,p)=>c?dt(c,()=>`output "${this.outputNames[i[p]]}"`):null),w=await lt(this.sessionId,a,u,i,l,o),f={};for(let c=0;c<w.length;c++)f[this.outputNames[i[c]]]=s[c]??Gt(w[c]);return(0,k.TRACE_FUNC_END)(),f}startProfiling(){}endProfiling(){pt(this.sessionId)}}});var wt={};xe(wt,{OnnxruntimeWebAssemblyBackend:()=>ye,initializeFlags:()=>bt,wasmBackend:()=>jt});var U,bt,ye,jt,gt=C(()=>{"use strict";U=require("onnxruntime-common");Be();mt();bt=()=>{(typeof U.env.wasm.initTimeout!="number"||U.env.wasm.initTimeout<0)&&(U.env.wasm.initTimeout=0);let e=U.env.wasm.simd;if(typeof e!="boolean"&&e!==void 0&&e!=="fixed"&&e!=="relaxed"&&(console.warn(`Property "env.wasm.simd" is set to unknown value "${e}". Reset it to \`false\` and ignore SIMD feature checking.`),U.env.wasm.simd=!1),typeof U.env.wasm.proxy!="boolean"&&(U.env.wasm.proxy=!1),typeof U.env.wasm.trace!="boolean"&&(U.env.wasm.trace=!1),typeof U.env.wasm.numThreads!="number"||!Number.isInteger(U.env.wasm.numThreads)||U.env.wasm.numThreads<=0)if(typeof self<"u"&&!self.crossOriginIsolated)U.env.wasm.numThreads=1;else{let t=typeof navigator>"u"?require("node:os").cpus().length:navigator.hardwareConcurrency;U.env.wasm.numThreads=Math.min(4,Math.ceil((t||1)/2))}},ye=class{async init(t){bt(),await at(),await it(t)}async createInferenceSessionHandler(t,n){let o=new ge;return await o.loadModel(t,n),o}},jt=new ye});var R={};xe(R,{default:()=>zt});module.exports=Ce(R);G(R,require("onnxruntime-common"),module.exports);var $t=Tt(require("onnxruntime-common")),se=require("onnxruntime-common");var Me="1.26.0";var zt=$t;{let e=(gt(),Ce(wt)).wasmBackend;(0,se.registerBackend)("cpu",e,10),(0,se.registerBackend)("wasm",e,10)}Object.defineProperty(se.env.versions,"web",{value:Me,enumerable:!0});0&&(module.exports={...require("onnxruntime-common")});
//# sourceMappingURL=ort.node.min.js.map