@automatalabs/react-native-transformers 0.1.1 → 0.1.3
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 +5 -1
- package/app.plugin.js +1 -1
- package/dist/app.plugin.d.ts +3 -0
- package/dist/app.plugin.d.ts.map +1 -0
- package/dist/app.plugin.js +4 -0
- package/dist/app.plugin.js.map +1 -0
- package/dist/plugin/src/index.d.ts +4 -0
- package/dist/plugin/src/index.d.ts.map +1 -0
- package/dist/plugin/src/index.js +16 -0
- package/dist/plugin/src/index.js.map +1 -0
- package/dist/src/adapter/onnxruntime-web-webgpu.d.ts +47 -0
- package/dist/src/adapter/onnxruntime-web-webgpu.d.ts.map +1 -0
- package/dist/src/adapter/onnxruntime-web-webgpu.js +256 -0
- package/dist/src/adapter/onnxruntime-web-webgpu.js.map +1 -0
- package/dist/src/expoFileSystemCache.d.ts +17 -0
- package/dist/src/expoFileSystemCache.d.ts.map +1 -0
- package/dist/src/expoFileSystemCache.js +240 -0
- package/dist/src/expoFileSystemCache.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/metro.d.ts +21 -0
- package/dist/src/metro.d.ts.map +1 -0
- package/dist/src/metro.js +90 -0
- package/dist/src/metro.js.map +1 -0
- package/dist/src/runtime.d.ts +17 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/runtime.js +511 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/transformers.d.ts +19 -0
- package/dist/src/transformers.d.ts.map +1 -0
- package/dist/src/transformers.js +224 -0
- package/dist/src/transformers.js.map +1 -0
- package/dist/src/types.d.ts +96 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +58 -13
- package/plugin/src/index.js +0 -13
- package/src/adapter/onnxruntime-web-webgpu.js +0 -246
- package/src/expoFileSystemCache.js +0 -251
- package/src/index.js +0 -27
- package/src/metro.js +0 -66
- package/src/runtime.js +0 -535
- package/src/transformers.js +0 -225
package/src/runtime.js
DELETED
|
@@ -1,535 +0,0 @@
|
|
|
1
|
-
const { Platform } = require('react-native');
|
|
2
|
-
const ortReactNative = require('onnxruntime-react-native');
|
|
3
|
-
const EXPO_FETCH_MODULE_ID = 'expo/fetch';
|
|
4
|
-
|
|
5
|
-
const REACT_NATIVE_EXECUTION_PROVIDER_ONLY_DEVICES = new Set([
|
|
6
|
-
'cpu',
|
|
7
|
-
'coreml',
|
|
8
|
-
'xnnpack',
|
|
9
|
-
'nnapi',
|
|
10
|
-
'qnn',
|
|
11
|
-
]);
|
|
12
|
-
const TRANSFORMERS_REACT_NATIVE_METADATA = Symbol.for(
|
|
13
|
-
'@automatalabs/react-native-transformers.metadata',
|
|
14
|
-
);
|
|
15
|
-
const TRANSFORMERS_DEVICE_SURROGATE = 'auto';
|
|
16
|
-
const DEFAULT_MODEL_CACHE_SYMBOL = Symbol.for(
|
|
17
|
-
'@automatalabs/react-native-transformers.default-expo-file-system-cache',
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
const DEFAULT_FEATURE_SET = Object.freeze({
|
|
21
|
-
has() {
|
|
22
|
-
return false;
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
function getNavigatorUserAgent(platform) {
|
|
27
|
-
switch (platform) {
|
|
28
|
-
case 'ios':
|
|
29
|
-
return '@automatalabs/react-native-transformers (iOS)';
|
|
30
|
-
case 'android':
|
|
31
|
-
return '@automatalabs/react-native-transformers (Android)';
|
|
32
|
-
default:
|
|
33
|
-
return '@automatalabs/react-native-transformers';
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function installTransformersReactNativeGlobals(options = {}) {
|
|
38
|
-
const { installNavigatorGpuShim = true } = options;
|
|
39
|
-
const result = {
|
|
40
|
-
installedSelfAlias: false,
|
|
41
|
-
installedWindowAlias: false,
|
|
42
|
-
installedNavigatorGpuShim: false,
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
if (typeof globalThis.self === 'undefined') {
|
|
46
|
-
globalThis.self = globalThis;
|
|
47
|
-
result.installedSelfAlias = true;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (typeof globalThis.window === 'undefined') {
|
|
51
|
-
globalThis.window = globalThis;
|
|
52
|
-
result.installedWindowAlias = true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (!installNavigatorGpuShim) {
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (typeof globalThis.navigator === 'undefined') {
|
|
60
|
-
globalThis.navigator = {};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
globalThis.navigator.userAgent ??= getNavigatorUserAgent(Platform.OS);
|
|
64
|
-
globalThis.navigator.vendor ??= '';
|
|
65
|
-
globalThis.navigator.product ??= 'ReactNative';
|
|
66
|
-
|
|
67
|
-
if (!globalThis.navigator.gpu) {
|
|
68
|
-
globalThis.navigator.gpu = {
|
|
69
|
-
async requestAdapter() {
|
|
70
|
-
return {
|
|
71
|
-
features: DEFAULT_FEATURE_SET,
|
|
72
|
-
};
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
result.installedNavigatorGpuShim = true;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return result;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function getOptionalExpoFileSystemCacheModule() {
|
|
82
|
-
try {
|
|
83
|
-
return require('./expoFileSystemCache');
|
|
84
|
-
} catch (error) {
|
|
85
|
-
const message = String(error?.message ?? '');
|
|
86
|
-
|
|
87
|
-
if (error?.code === 'MODULE_NOT_FOUND' && message.includes('expo-file-system')) {
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function createExpoFileSystemCache(options = {}) {
|
|
96
|
-
const cacheModule = getOptionalExpoFileSystemCacheModule();
|
|
97
|
-
|
|
98
|
-
if (!cacheModule) {
|
|
99
|
-
throw new Error(
|
|
100
|
-
'expo-file-system is not installed. Install it with `npx expo install expo-file-system` to enable persistent model caching.',
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return cacheModule.createExpoFileSystemCache(options);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function getDefaultExpoFileSystemModelCacheDirectory() {
|
|
108
|
-
const cacheModule = getOptionalExpoFileSystemCacheModule();
|
|
109
|
-
|
|
110
|
-
if (!cacheModule) {
|
|
111
|
-
throw new Error(
|
|
112
|
-
'expo-file-system is not installed. Install it with `npx expo install expo-file-system` to inspect the default cache directory.',
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return cacheModule.getDefaultExpoFileSystemModelCacheDirectory();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function getDefaultExpoFileSystemCache() {
|
|
120
|
-
const cacheModule = getOptionalExpoFileSystemCacheModule();
|
|
121
|
-
|
|
122
|
-
if (!cacheModule) {
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (!globalThis[DEFAULT_MODEL_CACHE_SYMBOL]) {
|
|
127
|
-
globalThis[DEFAULT_MODEL_CACHE_SYMBOL] = cacheModule.createExpoFileSystemCache({
|
|
128
|
-
directory: cacheModule.getDefaultExpoFileSystemModelCacheDirectory(),
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return globalThis[DEFAULT_MODEL_CACHE_SYMBOL];
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function configureTransformersEnvironment(transformers, options = {}) {
|
|
136
|
-
const targetEnv = transformers?.env;
|
|
137
|
-
|
|
138
|
-
if (!targetEnv || typeof targetEnv !== 'object') {
|
|
139
|
-
return null;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const {
|
|
143
|
-
allowLocalModels,
|
|
144
|
-
allowRemoteModels,
|
|
145
|
-
localModelPath,
|
|
146
|
-
customCache,
|
|
147
|
-
enableCustomCache = true,
|
|
148
|
-
fetch,
|
|
149
|
-
} = options;
|
|
150
|
-
|
|
151
|
-
targetEnv.useFS = false;
|
|
152
|
-
targetEnv.useFSCache = false;
|
|
153
|
-
targetEnv.useBrowserCache = false;
|
|
154
|
-
targetEnv.useWasmCache = false;
|
|
155
|
-
|
|
156
|
-
if (allowLocalModels !== undefined) {
|
|
157
|
-
targetEnv.allowLocalModels = allowLocalModels;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (allowRemoteModels !== undefined) {
|
|
161
|
-
targetEnv.allowRemoteModels = allowRemoteModels;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (localModelPath !== undefined) {
|
|
165
|
-
targetEnv.localModelPath = localModelPath;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (customCache) {
|
|
169
|
-
targetEnv.customCache = customCache;
|
|
170
|
-
targetEnv.useCustomCache = true;
|
|
171
|
-
} else if (enableCustomCache) {
|
|
172
|
-
const defaultCache = getDefaultExpoFileSystemCache();
|
|
173
|
-
|
|
174
|
-
targetEnv.customCache = defaultCache;
|
|
175
|
-
targetEnv.useCustomCache = !!defaultCache;
|
|
176
|
-
} else {
|
|
177
|
-
targetEnv.customCache = null;
|
|
178
|
-
targetEnv.useCustomCache = false;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
ensureTransformersFetch(transformers, { fetch });
|
|
182
|
-
|
|
183
|
-
return targetEnv;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function resolveExpoFetch() {
|
|
187
|
-
try {
|
|
188
|
-
return require(EXPO_FETCH_MODULE_ID).fetch;
|
|
189
|
-
} catch {
|
|
190
|
-
return undefined;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function ensureTransformersFetch(transformers, options = {}) {
|
|
195
|
-
const targetEnv = transformers?.env;
|
|
196
|
-
|
|
197
|
-
if (!targetEnv || typeof targetEnv !== 'object') {
|
|
198
|
-
return undefined;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (typeof options.fetch === 'function') {
|
|
202
|
-
targetEnv.fetch = options.fetch;
|
|
203
|
-
return targetEnv.fetch;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const expoFetch = resolveExpoFetch();
|
|
207
|
-
if (typeof expoFetch === 'function') {
|
|
208
|
-
targetEnv.fetch = expoFetch;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
return targetEnv.fetch;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
function getSupportedExecutionProviderNames() {
|
|
215
|
-
try {
|
|
216
|
-
return (ortReactNative.listSupportedBackends?.() ?? []).map((backend) => backend.name);
|
|
217
|
-
} catch {
|
|
218
|
-
return [];
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
function isPlainObject(value) {
|
|
223
|
-
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
function isReactNativeExecutionProviderDevice(device) {
|
|
227
|
-
return typeof device === 'string' && REACT_NATIVE_EXECUTION_PROVIDER_ONLY_DEVICES.has(device);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
function normalizeTransformersDeviceValue(device) {
|
|
231
|
-
if (isReactNativeExecutionProviderDevice(device)) {
|
|
232
|
-
return TRANSFORMERS_DEVICE_SURROGATE;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
if (isPlainObject(device)) {
|
|
236
|
-
return Object.fromEntries(
|
|
237
|
-
Object.entries(device).map(([key, value]) => [key, normalizeTransformersDeviceValue(value)]),
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return device;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
function inferExecutionProvidersFromDeviceValue(device) {
|
|
245
|
-
if (isReactNativeExecutionProviderDevice(device)) {
|
|
246
|
-
return rewriteExecutionProviders([device]);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (!isPlainObject(device)) {
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
const executionProviderKeys = new Set();
|
|
254
|
-
let preferredExecutionProviders = null;
|
|
255
|
-
|
|
256
|
-
for (const value of Object.values(device)) {
|
|
257
|
-
const nextExecutionProviders = inferExecutionProvidersFromDeviceValue(value);
|
|
258
|
-
|
|
259
|
-
if (!nextExecutionProviders) {
|
|
260
|
-
return null;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
const key = JSON.stringify(nextExecutionProviders);
|
|
264
|
-
executionProviderKeys.add(key);
|
|
265
|
-
preferredExecutionProviders = nextExecutionProviders;
|
|
266
|
-
|
|
267
|
-
if (executionProviderKeys.size > 1) {
|
|
268
|
-
return null;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
return preferredExecutionProviders;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
function getTransformersReactNativeMetadata(value) {
|
|
276
|
-
return value?.[TRANSFORMERS_REACT_NATIVE_METADATA] ?? null;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
function setTransformersReactNativeMetadata(value, metadata) {
|
|
280
|
-
if (!value || (typeof value !== 'object' && typeof value !== 'function')) {
|
|
281
|
-
return value;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
Object.defineProperty(value, TRANSFORMERS_REACT_NATIVE_METADATA, {
|
|
285
|
-
configurable: true,
|
|
286
|
-
enumerable: false,
|
|
287
|
-
writable: true,
|
|
288
|
-
value: {
|
|
289
|
-
...(getTransformersReactNativeMetadata(value) ?? {}),
|
|
290
|
-
...metadata,
|
|
291
|
-
},
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
return value;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
function getDefaultExecutionProviders(options = {}) {
|
|
298
|
-
const platform = options.platform ?? Platform.OS;
|
|
299
|
-
const availableNames = new Set(options.availableNames ?? getSupportedExecutionProviderNames());
|
|
300
|
-
const providers = [];
|
|
301
|
-
|
|
302
|
-
if (platform === 'ios') {
|
|
303
|
-
providers.push('coreml');
|
|
304
|
-
} else if (platform === 'android') {
|
|
305
|
-
providers.push('qnn', 'nnapi');
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
providers.push('xnnpack', 'cpu');
|
|
309
|
-
|
|
310
|
-
if (availableNames.size === 0) {
|
|
311
|
-
return providers;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return providers.filter((name) => availableNames.has(name));
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
function dedupeExecutionProviders(executionProviders) {
|
|
318
|
-
const seen = new Set();
|
|
319
|
-
const deduped = [];
|
|
320
|
-
|
|
321
|
-
for (const provider of executionProviders) {
|
|
322
|
-
const key =
|
|
323
|
-
typeof provider === 'string'
|
|
324
|
-
? provider
|
|
325
|
-
: `${provider.name}:${JSON.stringify(provider, Object.keys(provider).sort())}`;
|
|
326
|
-
|
|
327
|
-
if (!seen.has(key)) {
|
|
328
|
-
seen.add(key);
|
|
329
|
-
deduped.push(provider);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
return deduped;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
function fallbackProviderList(primaryName, primaryValue, fallbackNames, availableNames) {
|
|
337
|
-
const providers = [];
|
|
338
|
-
|
|
339
|
-
if (!availableNames || availableNames.size === 0 || availableNames.has(primaryName)) {
|
|
340
|
-
providers.push(primaryValue);
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
for (const fallbackName of fallbackNames) {
|
|
344
|
-
if (!availableNames || availableNames.size === 0 || availableNames.has(fallbackName)) {
|
|
345
|
-
providers.push(fallbackName);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
return providers;
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
function rewriteExecutionProvider(provider, options = {}) {
|
|
353
|
-
const availableNames = new Set(options.availableNames ?? getSupportedExecutionProviderNames());
|
|
354
|
-
const defaultProviders = getDefaultExecutionProviders({
|
|
355
|
-
platform: options.platform,
|
|
356
|
-
availableNames,
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
const providerName = typeof provider === 'string' ? provider : provider?.name;
|
|
360
|
-
|
|
361
|
-
switch (providerName) {
|
|
362
|
-
case 'wasm':
|
|
363
|
-
return fallbackProviderList('xnnpack', 'xnnpack', ['cpu'], availableNames);
|
|
364
|
-
|
|
365
|
-
case 'webgpu':
|
|
366
|
-
case 'gpu':
|
|
367
|
-
case 'webnn':
|
|
368
|
-
case 'webnn-gpu':
|
|
369
|
-
case 'webnn-cpu':
|
|
370
|
-
case 'webnn-npu':
|
|
371
|
-
case 'cuda':
|
|
372
|
-
case 'dml':
|
|
373
|
-
return defaultProviders;
|
|
374
|
-
|
|
375
|
-
case 'coreml':
|
|
376
|
-
case 'nnapi':
|
|
377
|
-
case 'qnn':
|
|
378
|
-
case 'xnnpack':
|
|
379
|
-
return fallbackProviderList(providerName, provider, ['cpu'], availableNames);
|
|
380
|
-
|
|
381
|
-
case 'cpu':
|
|
382
|
-
return availableNames.size > 0 && !availableNames.has('cpu') ? [] : [provider];
|
|
383
|
-
|
|
384
|
-
default:
|
|
385
|
-
if (!providerName) {
|
|
386
|
-
return [];
|
|
387
|
-
}
|
|
388
|
-
if (availableNames.size > 0 && !availableNames.has(providerName)) {
|
|
389
|
-
return [];
|
|
390
|
-
}
|
|
391
|
-
return [provider];
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
function rewriteExecutionProviders(executionProviders, options = {}) {
|
|
396
|
-
if (!Array.isArray(executionProviders)) {
|
|
397
|
-
return executionProviders;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
const availableNames = new Set(options.availableNames ?? getSupportedExecutionProviderNames());
|
|
401
|
-
const rewritten = executionProviders.flatMap((provider) =>
|
|
402
|
-
rewriteExecutionProvider(provider, {
|
|
403
|
-
...options,
|
|
404
|
-
availableNames,
|
|
405
|
-
}),
|
|
406
|
-
);
|
|
407
|
-
|
|
408
|
-
return dedupeExecutionProviders(rewritten);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
function sanitizeSessionOptions(sessionOptions, options = {}) {
|
|
412
|
-
if (!sessionOptions || typeof sessionOptions !== 'object') {
|
|
413
|
-
return sessionOptions;
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
const sanitized = {
|
|
417
|
-
...sessionOptions,
|
|
418
|
-
};
|
|
419
|
-
|
|
420
|
-
if (Array.isArray(sessionOptions.executionProviders)) {
|
|
421
|
-
sanitized.executionProviders = rewriteExecutionProviders(sessionOptions.executionProviders, options);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
delete sanitized.preferredOutputLocation;
|
|
425
|
-
delete sanitized.enableGraphCapture;
|
|
426
|
-
|
|
427
|
-
return sanitized;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
function normalizeTransformersConfig(config) {
|
|
431
|
-
if (!config || typeof config !== 'object') {
|
|
432
|
-
return config;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
const transformersJsConfig = config['transformers.js_config'];
|
|
436
|
-
|
|
437
|
-
if (!isPlainObject(transformersJsConfig)) {
|
|
438
|
-
return config;
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
const originalDevice = transformersJsConfig.device;
|
|
442
|
-
const normalizedDevice = normalizeTransformersDeviceValue(originalDevice);
|
|
443
|
-
const preferredExecutionProviders = inferExecutionProvidersFromDeviceValue(originalDevice);
|
|
444
|
-
const metadata = {};
|
|
445
|
-
let didChangeConfig = false;
|
|
446
|
-
|
|
447
|
-
if (normalizedDevice !== originalDevice) {
|
|
448
|
-
const nextTransformersJsConfig = {
|
|
449
|
-
...transformersJsConfig,
|
|
450
|
-
device: normalizedDevice,
|
|
451
|
-
};
|
|
452
|
-
|
|
453
|
-
if (
|
|
454
|
-
isReactNativeExecutionProviderDevice(originalDevice) &&
|
|
455
|
-
isPlainObject(transformersJsConfig.device_config) &&
|
|
456
|
-
transformersJsConfig.device_config[originalDevice]
|
|
457
|
-
) {
|
|
458
|
-
nextTransformersJsConfig.device_config = {
|
|
459
|
-
...transformersJsConfig.device_config,
|
|
460
|
-
[normalizedDevice]: {
|
|
461
|
-
...(transformersJsConfig.device_config[normalizedDevice] ?? {}),
|
|
462
|
-
...transformersJsConfig.device_config[originalDevice],
|
|
463
|
-
},
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
config['transformers.js_config'] = nextTransformersJsConfig;
|
|
468
|
-
didChangeConfig = true;
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
if (preferredExecutionProviders) {
|
|
472
|
-
metadata.preferredExecutionProviders = preferredExecutionProviders;
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
if (originalDevice !== undefined) {
|
|
476
|
-
metadata.originalDevice = originalDevice;
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
if (didChangeConfig || Object.keys(metadata).length > 0) {
|
|
480
|
-
setTransformersReactNativeMetadata(config, metadata);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
return config;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
function normalizeTransformersOptions(options = {}) {
|
|
487
|
-
const normalized = {
|
|
488
|
-
...options,
|
|
489
|
-
};
|
|
490
|
-
const normalizedConfig = normalizeTransformersConfig(options.config);
|
|
491
|
-
const originalDevice = options.device;
|
|
492
|
-
const normalizedDevice = normalizeTransformersDeviceValue(originalDevice);
|
|
493
|
-
const sessionOptions = sanitizeSessionOptions(options.session_options ?? {});
|
|
494
|
-
const configMetadata = getTransformersReactNativeMetadata(normalizedConfig);
|
|
495
|
-
const preferredExecutionProviders =
|
|
496
|
-
inferExecutionProvidersFromDeviceValue(originalDevice) ??
|
|
497
|
-
configMetadata?.preferredExecutionProviders ??
|
|
498
|
-
null;
|
|
499
|
-
|
|
500
|
-
if (normalizedConfig !== undefined) {
|
|
501
|
-
normalized.config = normalizedConfig;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
if (normalizedDevice !== originalDevice) {
|
|
505
|
-
normalized.device = normalizedDevice;
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
if (preferredExecutionProviders && sessionOptions.executionProviders == null) {
|
|
509
|
-
sessionOptions.executionProviders = preferredExecutionProviders;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
if (normalized.device == null) {
|
|
513
|
-
normalized.device = 'auto';
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
if (Object.keys(sessionOptions).length > 0) {
|
|
517
|
-
normalized.session_options = sessionOptions;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
return normalized;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
module.exports = {
|
|
524
|
-
installTransformersReactNativeGlobals,
|
|
525
|
-
configureTransformersEnvironment,
|
|
526
|
-
ensureTransformersFetch,
|
|
527
|
-
getSupportedExecutionProviderNames,
|
|
528
|
-
getDefaultExecutionProviders,
|
|
529
|
-
rewriteExecutionProviders,
|
|
530
|
-
sanitizeSessionOptions,
|
|
531
|
-
normalizeTransformersConfig,
|
|
532
|
-
normalizeTransformersOptions,
|
|
533
|
-
createExpoFileSystemCache,
|
|
534
|
-
getDefaultExpoFileSystemModelCacheDirectory,
|
|
535
|
-
};
|