onnxruntime
72 строки · 2.4 Кб
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4import { InferenceSession } from 'onnxruntime-common';
5
6import { getInstance } from './wasm-factory';
7import { allocWasmString, checkLastError, iterateExtraOptions } from './wasm-utils';
8
9export const setRunOptions = (options: InferenceSession.RunOptions): [number, number[]] => {
10const wasm = getInstance();
11let runOptionsHandle = 0;
12const allocs: number[] = [];
13
14const runOptions: InferenceSession.RunOptions = options || {};
15
16try {
17if (options?.logSeverityLevel === undefined) {
18runOptions.logSeverityLevel = 2; // Default to warning
19} else if (
20typeof options.logSeverityLevel !== 'number' ||
21!Number.isInteger(options.logSeverityLevel) ||
22options.logSeverityLevel < 0 ||
23options.logSeverityLevel > 4
24) {
25throw new Error(`log serverity level is not valid: ${options.logSeverityLevel}`);
26}
27
28if (options?.logVerbosityLevel === undefined) {
29runOptions.logVerbosityLevel = 0; // Default to 0
30} else if (typeof options.logVerbosityLevel !== 'number' || !Number.isInteger(options.logVerbosityLevel)) {
31throw new Error(`log verbosity level is not valid: ${options.logVerbosityLevel}`);
32}
33
34if (options?.terminate === undefined) {
35runOptions.terminate = false;
36}
37
38let tagDataOffset = 0;
39if (options?.tag !== undefined) {
40tagDataOffset = allocWasmString(options.tag, allocs);
41}
42
43runOptionsHandle = wasm._OrtCreateRunOptions(
44runOptions.logSeverityLevel!,
45runOptions.logVerbosityLevel!,
46!!runOptions.terminate!,
47tagDataOffset,
48);
49if (runOptionsHandle === 0) {
50checkLastError("Can't create run options.");
51}
52
53if (options?.extra !== undefined) {
54iterateExtraOptions(options.extra, '', new WeakSet<Record<string, unknown>>(), (key, value) => {
55const keyDataOffset = allocWasmString(key, allocs);
56const valueDataOffset = allocWasmString(value, allocs);
57
58if (wasm._OrtAddRunConfigEntry(runOptionsHandle, keyDataOffset, valueDataOffset) !== 0) {
59checkLastError(`Can't set a run config entry: ${key} - ${value}.`);
60}
61});
62}
63
64return [runOptionsHandle, allocs];
65} catch (e) {
66if (runOptionsHandle !== 0) {
67wasm._OrtReleaseRunOptions(runOptionsHandle);
68}
69allocs.forEach((alloc) => wasm._free(alloc));
70throw e;
71}
72};
73