8 lines
25 KiB
JavaScript
8 lines
25 KiB
JavaScript
/*!
|
|
* ONNX Runtime Web v1.22.0
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License.
|
|
*/
|
|
"use strict";var wt=Object.create;var ie=Object.defineProperty;var yt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var St=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var C=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ae=(e,t)=>{for(var n in t)ie(e,n,{get:t[n],enumerable:!0})},ae=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ht(t))!Et.call(e,r)&&r!==n&&ie(e,r,{get:()=>t[r],enumerable:!(o=yt(t,r))||o.enumerable});return e},G=(e,t,n)=>(ae(e,t,"default"),n&&ae(n,t,"default")),Ot=(e,t,n)=>(n=e!=null?wt(St(e)):{},ae(t||!e||!e.__esModule?ie(n,"default",{value:e,enumerable:!0}):n,e)),Be=e=>ae(ie({},"__esModule",{value:!0}),e);var H,ue=C(()=>{"use strict";H=!!(typeof process<"u"&&process.versions&&process.versions.node)});var Tt,vt,V,ke,Ce,Pt,It,Lt,_t,De,We,he=C(()=>{"use strict";ue();Tt=H||typeof location>"u"?void 0:location.origin,vt=()=>{if(!H)return typeof document<"u"?document.currentScript?.src:typeof self<"u"?self.location?.href:void 0},V=vt(),ke=()=>{if(V&&!V.startsWith("blob:"))return V.substring(0,V.lastIndexOf("/")+1)},Ce=(e,t)=>{try{let n=t??V;return(n?new URL(e,n):new URL(e)).origin===Tt}catch{return!1}},Pt=(e,t)=>{let n=t??V;try{return(n?new URL(e,n):new URL(e)).href}catch{return}},It=(e,t)=>`${t??"./"}${e}`,Lt=async e=>{let n=await(await fetch(e,{credentials:"same-origin"})).blob();return URL.createObjectURL(n)},_t=async e=>(await import(/*webpackIgnore:true*/e)).default,De=void 0,We=async(e,t,n)=>{if(!e&&!t&&De&&V&&Ce(V))return[void 0,De];{let o="ort-wasm-simd-threaded.mjs",r=e??Pt(o,t),a=!H&&n&&r&&!Ce(r,t),s=a?await Lt(r):r??It(o,t);return[a?s:void 0,await _t(s)]}}});var Se,Ee,ce,Fe,Ut,xt,At,Re,y,Y=C(()=>{"use strict";he();Ee=!1,ce=!1,Fe=!1,Ut=()=>{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}},xt=()=>{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}},At=()=>{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}},Re=async e=>{if(Ee)return Promise.resolve();if(ce)throw new Error("multiple calls to 'initializeWebAssembly()' detected.");if(Fe)throw new Error("previous call to 'initializeWebAssembly()' failed.");ce=!0;let t=e.initTimeout,n=e.numThreads;if(e.simd!==!1){if(e.simd==="relaxed"){if(!At())throw new Error("Relaxed WebAssembly SIMD is not supported in the current environment.")}else if(!xt())throw new Error("WebAssembly SIMD is not supported in the current environment.")}let o=Ut();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,c=r?.wasm,f=c?.href??c,l=e.wasmBinary,[d,u]=await We(i,a,n>1),p=!1,S=[];if(t>0&&S.push(new Promise(O=>{setTimeout(()=>{p=!0,O()},t)})),S.push(new Promise((O,x)=>{let b={numThreads:n};if(l)b.wasmBinary=l;else if(f||a)b.locateFile=g=>f??a+g;else if(i&&i.indexOf("blob:")!==0)b.locateFile=g=>new URL(g,i).href;else if(d){let g=ke();g&&(b.locateFile=D=>g+D)}u(b).then(g=>{ce=!1,Ee=!0,Se=g,O(),d&&URL.revokeObjectURL(d)},g=>{ce=!1,Fe=!0,x(g)})})),await Promise.race(S),p)throw new Error(`WebAssembly backend initializing failed due to timeout: ${t}ms`)},y=()=>{if(Ee&&Se)return Se;throw new Error("WebAssembly is not initialized yet.")}});var B,te,w,le=C(()=>{"use strict";Y();B=(e,t)=>{let n=y(),o=n.lengthBytesUTF8(e)+1,r=n._malloc(o);return n.stringToUTF8(e,r,o),t.push(r),r},te=(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")te(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}`)})},w=e=>{let t=y(),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 Ne,Ge=C(()=>{"use strict";Y();le();Ne=e=>{let t=y(),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 serverity 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=B(e.tag,o)),n=t._OrtCreateRunOptions(r.logSeverityLevel,r.logVerbosityLevel,!!r.terminate,a),n===0&&w("Can't create run options."),e?.extra!==void 0&&te(e.extra,"",new WeakSet,(s,i)=>{let c=B(s,o),f=B(i,o);t._OrtAddRunConfigEntry(n,c,f)!==0&&w(`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 Bt,Mt,Ct,fe,Dt,$e,ze=C(()=>{"use strict";Y();le();Bt=e=>{switch(e){case"disabled":return 0;case"basic":return 1;case"extended":return 2;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}`)}},Ct=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)},fe=(e,t,n,o)=>{let r=B(t,o),a=B(n,o);y()._OrtAddSessionConfigEntry(e,r,a)!==0&&w(`Can't set a session config entry: ${t} - ${n}.`)},Dt=async(e,t,n)=>{for(let o of t){let r=typeof o=="string"?o:o.name,a=[];switch(r){case"webnn":if(r="WEBNN",typeof o!="string"){let d=o?.deviceType;d&&fe(e,"deviceType",d,n)}break;case"webgpu":if(r="JS",typeof o!="string"){let l=o;if(l?.preferredLayout){if(l.preferredLayout!=="NCHW"&&l.preferredLayout!=="NHWC")throw new Error(`preferredLayout must be either 'NCHW' or 'NHWC': ${l.preferredLayout}`);fe(e,"preferredLayout",l.preferredLayout,n)}}break;case"wasm":case"cpu":continue;default:throw new Error(`not supported execution provider: ${r}`)}let s=B(r,n),i=a.length,c=0,f=0;if(i>0){c=y()._malloc(i*y().PTR_SIZE),n.push(c),f=y()._malloc(i*y().PTR_SIZE),n.push(f);for(let l=0;l<i;l++)y().setValue(c+l*y().PTR_SIZE,a[l][0],"*"),y().setValue(f+l*y().PTR_SIZE,a[l][1],"*")}await y()._OrtAppendExecutionProvider(e,s,c,f,i)!==0&&w(`Can't append execution provider: ${r}.`)}},$e=async e=>{let t=y(),n=0,o=[],r=e||{};Ct(r);try{let a=Bt(r.graphOptimizationLevel??"all"),s=Mt(r.executionMode??"sequential"),i=typeof r.logId=="string"?B(r.logId,o):0,c=r.logSeverityLevel??2;if(!Number.isInteger(c)||c<0||c>4)throw new Error(`log serverity level is not valid: ${c}`);let f=r.logVerbosityLevel??0;if(!Number.isInteger(f)||f<0||f>4)throw new Error(`log verbosity level is not valid: ${f}`);let l=typeof r.optimizedModelFilePath=="string"?B(r.optimizedModelFilePath,o):0;if(n=t._OrtCreateSessionOptions(a,!!r.enableCpuMemArena,!!r.enableMemPattern,s,!!r.enableProfiling,0,i,c,f,l),n===0&&w("Can't create session options."),r.executionProviders&&await Dt(n,r.executionProviders,o),r.enableGraphCapture!==void 0){if(typeof r.enableGraphCapture!="boolean")throw new Error(`enableGraphCapture must be a boolean value: ${r.enableGraphCapture}`);fe(n,"enableGraphCapture",r.enableGraphCapture.toString(),o)}if(r.freeDimensionOverrides)for(let[d,u]of Object.entries(r.freeDimensionOverrides)){if(typeof d!="string")throw new Error(`free dimension override name must be a string: ${d}`);if(typeof u!="number"||!Number.isInteger(u)||u<0)throw new Error(`free dimension override value must be a non-negative integer: ${u}`);let p=B(d,o);t._OrtAddFreeDimensionOverride(n,p,u)!==0&&w(`Can't set a free dimension override: ${d} - ${u}.`)}return r.extra!==void 0&&te(r.extra,"",new WeakSet,(d,u)=>{fe(n,d,u,o)}),[n,o]}catch(a){throw n!==0&&t._OrtReleaseSessionOptions(n)!==0&&w("Can't release session options."),o.forEach(s=>t._free(s)),a}}});var Z,pe,X,je,He,de,me,Ve,Oe=C(()=>{"use strict";Z=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}`)}},pe=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}`)}},X=(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},je=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}`)}},He=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}`)}},de=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",me=e=>e==="float32"||e==="float16"||e==="int32"||e==="int64"||e==="uint32"||e==="uint64"||e==="int8"||e==="uint8"||e==="bool"||e==="uint4"||e==="int4",Ve=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 re,Te=C(()=>{"use strict";ue();re=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 c=Math.ceil(o/65536);a=new WebAssembly.Memory({initial:c,maximum:c}).buffer}else throw i}let s=0;for(;;){let{done:i,value:c}=await r.read();if(i)break;let f=c.byteLength;new Uint8Array(a,s,f).set(c),s+=f}return new Uint8Array(a,0,o)}}else return e instanceof Blob?new Uint8Array(await e.arrayBuffer()):e instanceof Uint8Array?e:new Uint8Array(e)}});var kt,Ye,Ze,K,Wt,qe,ve,Xe,Ke,Je,Qe,et,tt=C(()=>{"use strict";Ge();ze();Oe();Y();le();Te();kt=(e,t)=>{y()._OrtInit(e,t)!==0&&w("Can't initialize onnxruntime.")},Ye=async e=>{kt(e.wasm.numThreads,He(e.logLevel))},Ze=async(e,t)=>{y().asyncInit?.()},K=new Map,Wt=e=>{let t=y(),n=t.stackSave();try{let o=t.PTR_SIZE,r=t.stackAlloc(2*o);t._OrtGetInputOutputCount(e,r,r+o)!==0&&w("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)}},qe=(e,t)=>{let n=y(),o=n.stackSave(),r=0;try{let a=n.PTR_SIZE,s=n.stackAlloc(2*a);n._OrtGetInputOutputMetadata(e,t,s,s+a)!==0&&w("Can't get session input/output metadata.");let c=Number(n.getValue(s,"*"));r=Number(n.getValue(s+a,"*"));let f=n.HEAP32[r/4];if(f===0)return[c,0];let l=n.HEAPU32[r/4+1],d=[];for(let u=0;u<l;u++){let p=Number(n.getValue(r+8+u*a,"*"));d.push(p!==0?n.UTF8ToString(p):Number(n.getValue(r+8+(u+l)*a,"*")))}return[c,f,d]}finally{n.stackRestore(o),r!==0&&n._OrtFree(r)}},ve=e=>{let t=y(),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]},Xe=async(e,t)=>{let n,o,r=y();Array.isArray(e)?[n,o]=e:e.buffer===r.HEAPU8.buffer?[n,o]=[e.byteOffset,e.byteLength]:[n,o]=ve(e);let a=0,s=0,i=0,c=[],f=[],l=[];try{if([s,c]=await $e(t),t?.externalData&&r.mountExternalData){let h=[];for(let E of t.externalData){let I=typeof E=="string"?E:E.path;h.push(re(typeof E=="string"?E:E.data).then(A=>{r.mountExternalData(I,A)}))}await Promise.all(h)}for(let h of t?.executionProviders??[])if((typeof h=="string"?h:h.name)==="webnn"){if(r.shouldTransferToMLTensor=!1,typeof h!="string"){let I=h,A=I?.context,L=I?.gpuDevice,q=I?.deviceType,Q=I?.powerPreference;A?r.currentContext=A:L?r.currentContext=await r.webnnCreateMLContext(L):r.currentContext=await r.webnnCreateMLContext({deviceType:q,powerPreference:Q})}else r.currentContext=await r.webnnCreateMLContext();break}a=await r._OrtCreateSession(n,o,s),r.webgpuOnCreateSession?.(a),a===0&&w("Can't create a session."),r.jsepOnCreateSession?.(),r.currentContext&&(r.webnnRegisterMLContext(a,r.currentContext),r.currentContext=void 0,r.shouldTransferToMLTensor=!0);let[d,u]=Wt(a),p=!!t?.enableGraphCapture,S=[],O=[],x=[],b=[],g=[];for(let h=0;h<d;h++){let[E,I,A]=qe(a,h);E===0&&w("Can't get an input name."),f.push(E);let L=r.UTF8ToString(E);S.push(L),x.push(I===0?{name:L,isTensor:!1}:{name:L,isTensor:!0,type:pe(I),shape:A})}for(let h=0;h<u;h++){let[E,I,A]=qe(a,h+d);E===0&&w("Can't get an output name."),l.push(E);let L=r.UTF8ToString(E);O.push(L),b.push(I===0?{name:L,isTensor:!1}:{name:L,isTensor:!0,type:pe(I),shape:A})}return K.set(a,[a,f,l,null,p,!1]),[a,S,O,x,b]}catch(d){throw f.forEach(u=>r._OrtFree(u)),l.forEach(u=>r._OrtFree(u)),i!==0&&r._OrtReleaseBinding(i)!==0&&w("Can't release IO binding."),a!==0&&r._OrtReleaseSession(a)!==0&&w("Can't release session."),d}finally{r._free(n),s!==0&&r._OrtReleaseSessionOptions(s)!==0&&w("Can't release session options."),c.forEach(d=>r._free(d)),r.unmountExternalData?.()}},Ke=e=>{let t=y(),n=K.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&&w("Can't clear bound outputs."),t._OrtReleaseBinding(s.handle)!==0&&w("Can't release IO binding.")),t.jsepOnReleaseSession?.(e),t.webnnOnReleaseSession?.(e),t.webgpuOnReleaseSession?.(e),r.forEach(c=>t._OrtFree(c)),a.forEach(c=>t._OrtFree(c)),t._OrtReleaseSession(o)!==0&&w("Can't release session."),K.delete(e)},Je=async(e,t,n,o,r,a,s=!1)=>{if(!e){t.push(0);return}let i=y(),c=i.PTR_SIZE,f=e[0],l=e[1],d=e[3],u=d,p,S;if(f==="string"&&(d==="gpu-buffer"||d==="ml-tensor"))throw new Error("String tensor is not supported on GPU.");if(s&&d!=="gpu-buffer")throw new Error(`External buffer must be provided for input/output index ${a} when enableGraphCapture is true.`);if(d==="gpu-buffer"){let b=e[2].gpuBuffer;S=X(Z(f),l);{let g=i.jsepRegisterBuffer;if(!g)throw new Error('Tensor location "gpu-buffer" is not supported without using WebGPU.');p=g(o,a,b,S)}}else if(d==="ml-tensor"){let b=e[2].mlTensor;S=X(Z(f),l);let g=i.webnnRegisterMLTensor;if(!g)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');p=g(o,b,Z(f),l)}else{let b=e[2];if(Array.isArray(b)){S=c*b.length,p=i._malloc(S),n.push(p);for(let g=0;g<b.length;g++){if(typeof b[g]!="string")throw new TypeError(`tensor data at index ${g} is not a string`);i.setValue(p+g*c,B(b[g],n),"*")}}else{let g=i.webnnIsGraphInput,D=i.webnnIsGraphOutput;if(f!=="string"&&g&&D){let h=i.UTF8ToString(r);if(g(o,h)||D(o,h)){let E=Z(f);S=X(E,l),u="ml-tensor";let I=i.webnnCreateTemporaryTensor,A=i.webnnUploadTensor;if(!I||!A)throw new Error('Tensor location "ml-tensor" is not supported without using WebNN.');let L=await I(o,E,l);A(L,new Uint8Array(b.buffer,b.byteOffset,b.byteLength)),p=L}else S=b.byteLength,p=i._malloc(S),n.push(p),i.HEAPU8.set(new Uint8Array(b.buffer,b.byteOffset,S),p)}else S=b.byteLength,p=i._malloc(S),n.push(p),i.HEAPU8.set(new Uint8Array(b.buffer,b.byteOffset,S),p)}}let O=i.stackSave(),x=i.stackAlloc(4*l.length);try{l.forEach((g,D)=>i.setValue(x+D*c,g,c===4?"i32":"i64"));let b=i._OrtCreateTensor(Z(f),p,S,x,l.length,Ve(u));b===0&&w(`Can't create tensor for input/output. session=${o}, index=${a}.`),t.push(b)}finally{i.stackRestore(O)}},Qe=async(e,t,n,o,r,a)=>{let s=y(),i=s.PTR_SIZE,c=K.get(e);if(!c)throw new Error(`cannot run inference. invalid session id: ${e}`);let f=c[0],l=c[1],d=c[2],u=c[3],p=c[4],S=c[5],O=t.length,x=o.length,b=0,g=[],D=[],h=[],E=[],I=s.stackSave(),A=s.stackAlloc(O*i),L=s.stackAlloc(O*i),q=s.stackAlloc(x*i),Q=s.stackAlloc(x*i);try{[b,g]=Ne(a);for(let m=0;m<O;m++)await Je(n[m],D,E,e,l[t[m]],t[m],p);for(let m=0;m<x;m++)await Je(r[m],h,E,e,d[o[m]],O+o[m],p);for(let m=0;m<O;m++)s.setValue(A+m*i,D[m],"*"),s.setValue(L+m*i,l[t[m]],"*");for(let m=0;m<x;m++)s.setValue(q+m*i,h[m],"*"),s.setValue(Q+m*i,d[o[m]],"*");s.jsepOnRunStart?.(f),s.webnnOnRunStart?.(f);let M;M=await s._OrtRun(f,L,A,O,Q,x,q,b),M!==0&&w("failed to call OrtRun().");let R=[],Le=[];for(let m=0;m<x;m++){let N=Number(s.getValue(q+m*i,"*"));if(N===h[m]){R.push(r[m]);continue}let _e=s.stackSave(),k=s.stackAlloc(4*i),J=!1,v,_=0;try{s._OrtGetTensorData(N,k,k+i,k+2*i,k+3*i)!==0&&w(`Can't access output tensor data on index ${m}.`);let ye=i===4?"i32":"i64",oe=Number(s.getValue(k,ye));_=s.getValue(k+i,"*");let Ue=s.getValue(k+i*2,"*"),gt=Number(s.getValue(k+i*3,ye)),$=[];for(let P=0;P<gt;P++)$.push(Number(s.getValue(Ue+P*i,ye)));s._OrtFree(Ue)!==0&&w("Can't free memory for tensor dims.");let z=$.reduce((P,T)=>P*T,1);v=pe(oe);let ee=u?.outputPreferredLocations[o[m]];if(v==="string"){if(ee==="gpu-buffer"||ee==="ml-tensor")throw new Error("String tensor is not supported on GPU.");let P=[];for(let T=0;T<z;T++){let j=s.getValue(_+T*i,"*"),se=s.getValue(_+(T+1)*i,"*"),xe=T===z-1?void 0:se-j;P.push(s.UTF8ToString(j,xe))}R.push([v,$,P,"cpu"])}else if(ee==="gpu-buffer"&&z>0){let P=s.jsepGetBuffer;if(!P)throw new Error('preferredLocation "gpu-buffer" is not supported without using WebGPU.');let T=P(_),j=X(oe,z);if(j===void 0||!de(v))throw new Error(`Unsupported data type: ${v}`);J=!0,R.push([v,$,{gpuBuffer:T,download:s.jsepCreateDownloader(T,j,v),dispose:()=>{s._OrtReleaseTensor(N)!==0&&w("Can't release tensor.")}},"gpu-buffer"])}else if(ee==="ml-tensor"&&z>0){let P=s.webnnEnsureTensor,T=s.webnnIsGraphInputOutputTypeSupported;if(!P||!T)throw new Error('preferredLocation "ml-tensor" is not supported without using WebNN.');if(X(oe,z)===void 0||!me(v))throw new Error(`Unsupported data type: ${v}`);if(!T(e,v,!1))throw new Error(`preferredLocation "ml-tensor" for ${v} output is not supported by current WebNN Context.`);let se=await P(e,_,oe,$,!1);J=!0,R.push([v,$,{mlTensor:se,download:s.webnnCreateMLTensorDownloader(_,v),dispose:()=>{s.webnnReleaseTensorId(_),s._OrtReleaseTensor(N)}},"ml-tensor"])}else if(ee==="ml-tensor-cpu-output"&&z>0){let P=s.webnnCreateMLTensorDownloader(_,v)(),T=R.length;J=!0,Le.push((async()=>{let j=[T,await P];return s.webnnReleaseTensorId(_),s._OrtReleaseTensor(N),j})()),R.push([v,$,[],"cpu"])}else{let P=je(v),T=new P(z);new Uint8Array(T.buffer,T.byteOffset,T.byteLength).set(s.HEAPU8.subarray(_,_+T.byteLength)),R.push([v,$,T,"cpu"])}}finally{s.stackRestore(_e),v==="string"&&_&&s._free(_),J||s._OrtReleaseTensor(N)}}u&&!p&&(s._OrtClearBoundOutputs(u.handle)!==0&&w("Can't clear bound outputs."),K.set(e,[f,l,d,u,p,!1]));for(let[m,N]of await Promise.all(Le))R[m][2]=N;return R}finally{s.webnnOnRunEnd?.(f),s.stackRestore(I),D.forEach(M=>s._OrtReleaseTensor(M)),h.forEach(M=>s._OrtReleaseTensor(M)),E.forEach(M=>s._free(M)),b!==0&&s._OrtReleaseRunOptions(b),g.forEach(M=>s._free(M))}},et=e=>{let t=y(),n=K.get(e);if(!n)throw new Error("invalid session id");let o=n[0],r=t._OrtEndProfiling(o);r===0&&w("Can't get an profile file name."),t._OrtFree(r)}});var be,Pe,rt,nt,ot,st,at,it,ut,ct,lt,Ie=C(()=>{"use strict";be=require("onnxruntime-common");tt();Y();he();Pe=!1,rt=!1,nt=!1,ot=async()=>{if(!rt){if(Pe)throw new Error("multiple calls to 'initWasm()' detected.");if(nt)throw new Error("previous call to 'initWasm()' failed.");Pe=!0;try{await Re(be.env.wasm),await Ye(be.env),rt=!0}catch(e){throw nt=!0,e}finally{Pe=!1}}},st=async e=>{await Ze(be.env,e)},at=async e=>ve(e),it=async(e,t)=>Xe(e,t),ut=async e=>{Ke(e)},ct=async(e,t,n,o,r,a)=>Qe(e,t,n,o,r,a),lt=async e=>{et(e)}});var W,ft,Rt,ge,pt=C(()=>{"use strict";W=require("onnxruntime-common");Ie();Oe();ue();Te();ft=(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()}`)}},Rt=e=>{switch(e[3]){case"cpu":return new W.Tensor(e[0],e[2],e[1]);case"gpu-buffer":{let t=e[0];if(!de(t))throw new Error(`not supported data type: ${t} for deserializing GPU tensor`);let{gpuBuffer:n,download:o,dispose:r}=e[2];return W.Tensor.fromGpuBuffer(n,{dataType:t,dims:e[1],download:o,dispose:r})}case"ml-tensor":{let t=e[0];if(!me(t))throw new Error(`not supported data type: ${t} for deserializing MLTensor tensor`);let{mlTensor:n,download:o,dispose:r}=e[2];return W.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 at(await re(t))}async loadModel(t,n){(0,W.TRACE_FUNC_BEGIN)();let o;typeof t=="string"?H?o=await re(t):o=await this.fetchModelAndCopyToWasmMemory(t):o=t,[this.sessionId,this.inputNames,this.outputNames,this.inputMetadata,this.outputMetadata]=await it(o,n),(0,W.TRACE_FUNC_END)()}async dispose(){return ut(this.sessionId)}async run(t,n,o){(0,W.TRACE_FUNC_BEGIN)();let r=[],a=[];Object.entries(t).forEach(u=>{let p=u[0],S=u[1],O=this.inputNames.indexOf(p);if(O===-1)throw new Error(`invalid input '${p}'`);r.push(S),a.push(O)});let s=[],i=[];Object.entries(n).forEach(u=>{let p=u[0],S=u[1],O=this.outputNames.indexOf(p);if(O===-1)throw new Error(`invalid output '${p}'`);s.push(S),i.push(O)});let c=r.map((u,p)=>ft(u,()=>`input "${this.inputNames[a[p]]}"`)),f=s.map((u,p)=>u?ft(u,()=>`output "${this.outputNames[i[p]]}"`):null),l=await ct(this.sessionId,a,c,i,f,o),d={};for(let u=0;u<l.length;u++)d[this.outputNames[i[u]]]=s[u]??Rt(l[u]);return(0,W.TRACE_FUNC_END)(),d}startProfiling(){}endProfiling(){lt(this.sessionId)}}});var mt={};Ae(mt,{OnnxruntimeWebAssemblyBackend:()=>we,initializeFlags:()=>dt,wasmBackend:()=>Nt});var U,dt,we,Nt,bt=C(()=>{"use strict";U=require("onnxruntime-common");Ie();pt();dt=()=>{(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))}},we=class{async init(t){dt(),await ot(),await st(t)}async createInferenceSessionHandler(t,n){let o=new ge;return await o.loadModel(t,n),o}},Nt=new we});var F={};Ae(F,{default:()=>$t});module.exports=Be(F);G(F,require("onnxruntime-common"),module.exports);var Gt=Ot(require("onnxruntime-common")),ne=require("onnxruntime-common");var Me="1.22.0";var $t=Gt;{let e=(bt(),Be(mt)).wasmBackend;(0,ne.registerBackend)("cpu",e,10),(0,ne.registerBackend)("wasm",e,10)}Object.defineProperty(ne.env.versions,"web",{value:Me,enumerable:!0});0&&(module.exports={...require("onnxruntime-common")});
|
|
//# sourceMappingURL=ort.node.min.js.map
|