onnxruntime-web
Version:
A Javascript library for running ONNX models on browsers
73 lines (60 loc) • 2.45 kB
text/typescript
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import { InferenceSession } from 'onnxruntime-common';
import { getInstance } from './wasm-factory';
import { allocWasmString, checkLastError, iterateExtraOptions } from './wasm-utils';
export const setRunOptions = (options: InferenceSession.RunOptions): [number, number[]] => {
const wasm = getInstance();
let runOptionsHandle = 0;
const allocs: number[] = [];
const runOptions: InferenceSession.RunOptions = options || {};
try {
if (options?.logSeverityLevel === undefined) {
runOptions.logSeverityLevel = 2; // Default to warning
} else if (
typeof options.logSeverityLevel !== 'number' ||
!Number.isInteger(options.logSeverityLevel) ||
options.logSeverityLevel < 0 ||
options.logSeverityLevel > 4
) {
throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);
}
if (options?.logVerbosityLevel === undefined) {
runOptions.logVerbosityLevel = 0; // Default to 0
} else if (typeof options.logVerbosityLevel !== 'number' || !Number.isInteger(options.logVerbosityLevel)) {
throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);
}
if (options?.terminate === undefined) {
runOptions.terminate = false;
}
let tagDataOffset = 0;
if (options?.tag !== undefined) {
tagDataOffset = allocWasmString(options.tag, allocs);
}
runOptionsHandle = wasm._OrtCreateRunOptions(
runOptions.logSeverityLevel!,
runOptions.logVerbosityLevel!,
!!runOptions.terminate!,
tagDataOffset,
);
if (runOptionsHandle === 0) {
checkLastError("Can't create run options.");
}
if (options?.extra !== undefined) {
iterateExtraOptions(options.extra, '', new WeakSet<Record<string, unknown>>(), (key, value) => {
const keyDataOffset = allocWasmString(key, allocs);
const valueDataOffset = allocWasmString(value, allocs);
if (wasm._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {
checkLastError(`Can't set a run config entry: ${key} - ${value}.`);
}
});
}
return [runOptionsHandle, allocs];
} catch (e) {
if (runOptionsHandle !== 0) {
wasm._OrtReleaseRunOptions(runOptionsHandle);
}
allocs.forEach((alloc) => wasm._free(alloc));
throw e;
}
};