edgeflowjs 0.1.0 → 0.2.0
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 +200 -66
- package/dist/backends/index.d.ts +9 -2
- package/dist/backends/index.d.ts.map +1 -1
- package/dist/backends/index.js +13 -13
- package/dist/backends/index.js.map +1 -1
- package/dist/backends/onnx.d.ts +11 -4
- package/dist/backends/onnx.d.ts.map +1 -1
- package/dist/backends/onnx.js +97 -78
- package/dist/backends/onnx.js.map +1 -1
- package/dist/backends/transformers-adapter.d.ts +99 -0
- package/dist/backends/transformers-adapter.d.ts.map +1 -0
- package/dist/backends/transformers-adapter.js +171 -0
- package/dist/backends/transformers-adapter.js.map +1 -0
- package/dist/backends/webgpu.d.ts +7 -5
- package/dist/backends/webgpu.d.ts.map +1 -1
- package/dist/backends/webgpu.js +7 -5
- package/dist/backends/webgpu.js.map +1 -1
- package/dist/backends/webnn.d.ts +6 -5
- package/dist/backends/webnn.d.ts.map +1 -1
- package/dist/backends/webnn.js +6 -5
- package/dist/backends/webnn.js.map +1 -1
- package/dist/core/composer.d.ts +118 -0
- package/dist/core/composer.d.ts.map +1 -0
- package/dist/core/composer.js +163 -0
- package/dist/core/composer.js.map +1 -0
- package/dist/core/device-profiler.d.ts +75 -0
- package/dist/core/device-profiler.d.ts.map +1 -0
- package/dist/core/device-profiler.js +131 -0
- package/dist/core/device-profiler.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory.d.ts +22 -2
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +49 -13
- package/dist/core/memory.js.map +1 -1
- package/dist/core/plugin.d.ts +100 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +106 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/runtime.d.ts +4 -0
- package/dist/core/runtime.d.ts.map +1 -1
- package/dist/core/runtime.js +18 -0
- package/dist/core/runtime.js.map +1 -1
- package/dist/core/scheduler.d.ts +17 -0
- package/dist/core/scheduler.d.ts.map +1 -1
- package/dist/core/scheduler.js +101 -3
- package/dist/core/scheduler.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker.d.ts +202 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +477 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/edgeflow.browser.js +9770 -4383
- package/dist/edgeflow.browser.js.map +4 -4
- package/dist/edgeflow.browser.min.js +435 -5
- package/dist/edgeflow.browser.min.js.map +4 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -10
- package/dist/index.js.map +1 -1
- package/dist/pipelines/automatic-speech-recognition.d.ts +63 -0
- package/dist/pipelines/automatic-speech-recognition.d.ts.map +1 -0
- package/dist/pipelines/automatic-speech-recognition.js +269 -0
- package/dist/pipelines/automatic-speech-recognition.js.map +1 -0
- package/dist/pipelines/base.d.ts +6 -1
- package/dist/pipelines/base.d.ts.map +1 -1
- package/dist/pipelines/base.js +12 -2
- package/dist/pipelines/base.js.map +1 -1
- package/dist/pipelines/feature-extraction.d.ts +5 -40
- package/dist/pipelines/feature-extraction.d.ts.map +1 -1
- package/dist/pipelines/feature-extraction.js +44 -63
- package/dist/pipelines/feature-extraction.js.map +1 -1
- package/dist/pipelines/image-classification.d.ts +4 -36
- package/dist/pipelines/image-classification.d.ts.map +1 -1
- package/dist/pipelines/image-classification.js +22 -60
- package/dist/pipelines/image-classification.js.map +1 -1
- package/dist/pipelines/image-segmentation.d.ts +221 -0
- package/dist/pipelines/image-segmentation.d.ts.map +1 -0
- package/dist/pipelines/image-segmentation.js +535 -0
- package/dist/pipelines/image-segmentation.js.map +1 -0
- package/dist/pipelines/index.d.ts +18 -0
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +51 -2
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/object-detection.d.ts +44 -0
- package/dist/pipelines/object-detection.d.ts.map +1 -0
- package/dist/pipelines/object-detection.js +218 -0
- package/dist/pipelines/object-detection.js.map +1 -0
- package/dist/pipelines/question-answering.d.ts +41 -0
- package/dist/pipelines/question-answering.d.ts.map +1 -0
- package/dist/pipelines/question-answering.js +164 -0
- package/dist/pipelines/question-answering.js.map +1 -0
- package/dist/pipelines/text-classification.d.ts +3 -39
- package/dist/pipelines/text-classification.d.ts.map +1 -1
- package/dist/pipelines/text-classification.js +29 -67
- package/dist/pipelines/text-classification.js.map +1 -1
- package/dist/pipelines/text-generation.d.ts +281 -0
- package/dist/pipelines/text-generation.d.ts.map +1 -0
- package/dist/pipelines/text-generation.js +766 -0
- package/dist/pipelines/text-generation.js.map +1 -0
- package/dist/pipelines/zero-shot-classification.d.ts +45 -0
- package/dist/pipelines/zero-shot-classification.d.ts.map +1 -0
- package/dist/pipelines/zero-shot-classification.js +140 -0
- package/dist/pipelines/zero-shot-classification.js.map +1 -0
- package/dist/tools/benchmark.d.ts +92 -0
- package/dist/tools/benchmark.d.ts.map +1 -0
- package/dist/tools/benchmark.js +213 -0
- package/dist/tools/benchmark.js.map +1 -0
- package/dist/tools/debugger.d.ts +258 -0
- package/dist/tools/debugger.d.ts.map +1 -0
- package/dist/tools/debugger.js +624 -0
- package/dist/tools/debugger.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/monitor.d.ts +284 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +921 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/quantization.d.ts +235 -0
- package/dist/tools/quantization.d.ts.map +1 -0
- package/dist/tools/quantization.js +830 -0
- package/dist/tools/quantization.js.map +1 -0
- package/dist/utils/hub.d.ts +162 -0
- package/dist/utils/hub.d.ts.map +1 -0
- package/dist/utils/hub.js +311 -0
- package/dist/utils/hub.js.map +1 -0
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/model-loader.d.ts.map +1 -1
- package/dist/utils/model-loader.js +106 -30
- package/dist/utils/model-loader.js.map +1 -1
- package/dist/utils/offline.d.ts +147 -0
- package/dist/utils/offline.d.ts.map +1 -0
- package/dist/utils/offline.js +405 -0
- package/dist/utils/offline.js.map +1 -0
- package/dist/utils/preprocessor.d.ts +82 -6
- package/dist/utils/preprocessor.d.ts.map +1 -1
- package/dist/utils/preprocessor.js +278 -21
- package/dist/utils/preprocessor.js.map +1 -1
- package/dist/utils/tokenizer.d.ts +197 -72
- package/dist/utils/tokenizer.d.ts.map +1 -1
- package/dist/utils/tokenizer.js +558 -274
- package/dist/utils/tokenizer.js.map +1 -1
- package/package.json +26 -11
package/dist/backends/onnx.js
CHANGED
|
@@ -2,69 +2,36 @@
|
|
|
2
2
|
* edgeFlow.js - ONNX Runtime Backend
|
|
3
3
|
*
|
|
4
4
|
* Uses onnxruntime-web for real ONNX model inference.
|
|
5
|
-
*
|
|
5
|
+
* onnxruntime-web is an optional peer dependency loaded dynamically.
|
|
6
6
|
*/
|
|
7
7
|
import { EdgeFlowError, ErrorCodes, } from '../core/types.js';
|
|
8
8
|
import { LoadedModelImpl } from '../core/runtime.js';
|
|
9
9
|
import { EdgeFlowTensor } from '../core/tensor.js';
|
|
10
10
|
import { getMemoryManager } from '../core/memory.js';
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
const ONNX_CDN_BASE = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX_VERSION}/dist/`;
|
|
14
|
-
const ONNX_SCRIPT_URL = `${ONNX_CDN_BASE}ort.min.js`;
|
|
15
|
-
// Global ONNX Runtime reference (loaded dynamically)
|
|
11
|
+
// Lazy-loaded onnxruntime-web module
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
13
|
let ort = null;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Dynamically load ONNX Runtime from CDN
|
|
20
|
-
*/
|
|
21
|
-
async function loadONNXRuntime() {
|
|
22
|
-
// Return cached instance
|
|
14
|
+
async function getOrt() {
|
|
23
15
|
if (ort)
|
|
24
16
|
return ort;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// Dynamically load the script
|
|
38
|
-
const script = document.createElement('script');
|
|
39
|
-
script.src = ONNX_SCRIPT_URL;
|
|
40
|
-
script.async = true;
|
|
41
|
-
script.onload = () => {
|
|
42
|
-
if (window.ort) {
|
|
43
|
-
ort = window.ort;
|
|
44
|
-
// Configure WASM paths
|
|
45
|
-
ort.env.wasm.wasmPaths = ONNX_CDN_BASE;
|
|
46
|
-
console.log(`✓ ONNX Runtime v${ONNX_VERSION} loaded from CDN`);
|
|
47
|
-
resolve(ort);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
reject(new Error('ONNX Runtime loaded but ort global not found'));
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
script.onerror = () => {
|
|
54
|
-
reject(new Error(`Failed to load ONNX Runtime from ${ONNX_SCRIPT_URL}`));
|
|
55
|
-
};
|
|
56
|
-
document.head.appendChild(script);
|
|
57
|
-
});
|
|
58
|
-
return ortLoadPromise;
|
|
17
|
+
try {
|
|
18
|
+
// Import the WASM-only sub-path so Vite rewrites the bare specifier
|
|
19
|
+
// to ort.wasm.bundle.min.mjs. This avoids loading the JSEP/WebGPU
|
|
20
|
+
// worker module (jsep.mjs) that ort.bundle.min.mjs eagerly fetches
|
|
21
|
+
// whenever navigator.gpu exists — which causes a 404 in dev servers
|
|
22
|
+
// that restrict ES module imports from /public.
|
|
23
|
+
ort = await import('onnxruntime-web/wasm');
|
|
24
|
+
return ort;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
59
29
|
}
|
|
60
30
|
/**
|
|
61
|
-
*
|
|
31
|
+
* Check whether onnxruntime-web is importable.
|
|
62
32
|
*/
|
|
63
|
-
async function
|
|
64
|
-
|
|
65
|
-
ort = await loadONNXRuntime();
|
|
66
|
-
}
|
|
67
|
-
return ort;
|
|
33
|
+
export async function isOnnxAvailable() {
|
|
34
|
+
return (await getOrt()) != null;
|
|
68
35
|
}
|
|
69
36
|
const sessionStore = new Map();
|
|
70
37
|
// ============================================================================
|
|
@@ -72,7 +39,6 @@ const sessionStore = new Map();
|
|
|
72
39
|
// ============================================================================
|
|
73
40
|
/**
|
|
74
41
|
* ONNXRuntime - Real ONNX model inference using onnxruntime-web
|
|
75
|
-
* Automatically loads ONNX Runtime from CDN when first used.
|
|
76
42
|
*/
|
|
77
43
|
export class ONNXRuntime {
|
|
78
44
|
name = 'wasm'; // Register as wasm since it's the fallback
|
|
@@ -89,24 +55,30 @@ export class ONNXRuntime {
|
|
|
89
55
|
};
|
|
90
56
|
}
|
|
91
57
|
/**
|
|
92
|
-
* Check if ONNX Runtime is available (
|
|
58
|
+
* Check if ONNX Runtime is available (peer dependency installed)
|
|
93
59
|
*/
|
|
94
60
|
async isAvailable() {
|
|
95
|
-
|
|
96
|
-
return true;
|
|
61
|
+
return isOnnxAvailable();
|
|
97
62
|
}
|
|
98
63
|
/**
|
|
99
|
-
* Initialize the ONNX runtime
|
|
64
|
+
* Initialize the ONNX runtime
|
|
100
65
|
*/
|
|
101
66
|
async initialize() {
|
|
102
67
|
if (this.initialized)
|
|
103
68
|
return;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
//
|
|
109
|
-
|
|
69
|
+
const ortModule = await getOrt();
|
|
70
|
+
if (!ortModule) {
|
|
71
|
+
throw new EdgeFlowError('onnxruntime-web is not installed. Install it with: npm install onnxruntime-web', ErrorCodes.RUNTIME_NOT_AVAILABLE);
|
|
72
|
+
}
|
|
73
|
+
// Configure WASM backend for browser use.
|
|
74
|
+
// numThreads=1 disables multi-threading so ort only needs the plain
|
|
75
|
+
// .wasm binary — the worker .mjs file is never requested, which avoids
|
|
76
|
+
// Vite's restriction on importing files from /public as ES modules.
|
|
77
|
+
// Consumers should copy onnxruntime-web/dist/*.wasm to public/ort/.
|
|
78
|
+
if (typeof window !== 'undefined' && ortModule.env?.wasm) {
|
|
79
|
+
ortModule.env.wasm.wasmPaths = '/ort/';
|
|
80
|
+
ortModule.env.wasm.numThreads = 1;
|
|
81
|
+
}
|
|
110
82
|
this.initialized = true;
|
|
111
83
|
}
|
|
112
84
|
/**
|
|
@@ -116,16 +88,20 @@ export class ONNXRuntime {
|
|
|
116
88
|
if (!this.initialized) {
|
|
117
89
|
await this.initialize();
|
|
118
90
|
}
|
|
119
|
-
const ortInstance = await getOrt();
|
|
120
91
|
try {
|
|
121
|
-
|
|
92
|
+
const ortModule = await getOrt();
|
|
93
|
+
if (!ortModule) {
|
|
94
|
+
throw new Error('onnxruntime-web is not installed');
|
|
95
|
+
}
|
|
96
|
+
// WASM-only execution provider — WebGPU acceleration can be added
|
|
97
|
+
// later via the dedicated WebGPURuntime backend.
|
|
122
98
|
const sessionOptions = {
|
|
123
|
-
executionProviders: [
|
|
99
|
+
executionProviders: ['wasm'],
|
|
124
100
|
graphOptimizationLevel: 'all',
|
|
125
101
|
};
|
|
126
|
-
// Create inference session (convert ArrayBuffer to Uint8Array)
|
|
127
102
|
const modelBytes = new Uint8Array(modelData);
|
|
128
|
-
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
+
const session = await ortModule.InferenceSession.create(modelBytes, sessionOptions);
|
|
129
105
|
// Get input/output names
|
|
130
106
|
const inputNames = session.inputNames;
|
|
131
107
|
const outputNames = session.outputNames;
|
|
@@ -141,12 +117,12 @@ export class ONNXRuntime {
|
|
|
141
117
|
const metadata = {
|
|
142
118
|
name: options.metadata?.name ?? 'onnx-model',
|
|
143
119
|
version: '1.0.0',
|
|
144
|
-
inputs: inputNames.map(name => ({
|
|
120
|
+
inputs: inputNames.map((name) => ({
|
|
145
121
|
name,
|
|
146
122
|
dtype: 'float32',
|
|
147
123
|
shape: [-1], // Dynamic shape
|
|
148
124
|
})),
|
|
149
|
-
outputs: outputNames.map(name => ({
|
|
125
|
+
outputs: outputNames.map((name) => ({
|
|
150
126
|
name,
|
|
151
127
|
dtype: 'float32',
|
|
152
128
|
shape: [-1],
|
|
@@ -175,35 +151,31 @@ export class ONNXRuntime {
|
|
|
175
151
|
if (!sessionData) {
|
|
176
152
|
throw new EdgeFlowError(`ONNX session not found for model ${model.id}`, ErrorCodes.MODEL_NOT_LOADED, { modelId: model.id });
|
|
177
153
|
}
|
|
178
|
-
const ortInstance = await getOrt();
|
|
179
154
|
const { session, inputNames, outputNames } = sessionData;
|
|
180
155
|
try {
|
|
181
|
-
|
|
156
|
+
const ortModule = await getOrt();
|
|
182
157
|
const feeds = {};
|
|
183
158
|
for (let i = 0; i < Math.min(inputs.length, inputNames.length); i++) {
|
|
184
159
|
const inputName = inputNames[i];
|
|
185
160
|
const inputTensor = inputs[i];
|
|
186
161
|
if (inputName && inputTensor) {
|
|
187
|
-
// Convert to ONNX tensor with correct dtype
|
|
188
162
|
const dtype = inputTensor.dtype;
|
|
189
163
|
let ortTensor;
|
|
190
164
|
if (dtype === 'int64') {
|
|
191
|
-
// Get raw BigInt64Array data directly
|
|
192
165
|
const data = inputTensor.data;
|
|
193
|
-
ortTensor = new
|
|
166
|
+
ortTensor = new ortModule.Tensor('int64', data, inputTensor.shape);
|
|
194
167
|
}
|
|
195
168
|
else if (dtype === 'int32') {
|
|
196
169
|
const data = inputTensor.data;
|
|
197
|
-
ortTensor = new
|
|
170
|
+
ortTensor = new ortModule.Tensor('int32', data, inputTensor.shape);
|
|
198
171
|
}
|
|
199
172
|
else {
|
|
200
173
|
const data = inputTensor.toFloat32Array();
|
|
201
|
-
ortTensor = new
|
|
174
|
+
ortTensor = new ortModule.Tensor('float32', data, inputTensor.shape);
|
|
202
175
|
}
|
|
203
176
|
feeds[inputName] = ortTensor;
|
|
204
177
|
}
|
|
205
178
|
}
|
|
206
|
-
// Run inference
|
|
207
179
|
const results = await session.run(feeds);
|
|
208
180
|
// Convert outputs to EdgeFlowTensor
|
|
209
181
|
const outputs = [];
|
|
@@ -221,6 +193,53 @@ export class ONNXRuntime {
|
|
|
221
193
|
throw new EdgeFlowError(`ONNX inference failed: ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.INFERENCE_FAILED, { modelId: model.id, error });
|
|
222
194
|
}
|
|
223
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Run inference with named inputs
|
|
198
|
+
*/
|
|
199
|
+
async runNamed(model, namedInputs) {
|
|
200
|
+
const sessionData = sessionStore.get(model.id);
|
|
201
|
+
if (!sessionData) {
|
|
202
|
+
throw new EdgeFlowError(`ONNX session not found for model ${model.id}`, ErrorCodes.MODEL_NOT_LOADED, { modelId: model.id });
|
|
203
|
+
}
|
|
204
|
+
const { session, inputNames, outputNames } = sessionData;
|
|
205
|
+
try {
|
|
206
|
+
const ortModule = await getOrt();
|
|
207
|
+
const feeds = {};
|
|
208
|
+
for (const [inputName, inputTensor] of namedInputs) {
|
|
209
|
+
const tensor = inputTensor;
|
|
210
|
+
const dtype = tensor.dtype;
|
|
211
|
+
let ortTensor;
|
|
212
|
+
if (dtype === 'int64') {
|
|
213
|
+
const data = tensor.data;
|
|
214
|
+
ortTensor = new ortModule.Tensor('int64', data, tensor.shape);
|
|
215
|
+
}
|
|
216
|
+
else if (dtype === 'int32') {
|
|
217
|
+
const data = tensor.data;
|
|
218
|
+
ortTensor = new ortModule.Tensor('int32', data, tensor.shape);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const data = tensor.toFloat32Array();
|
|
222
|
+
ortTensor = new ortModule.Tensor('float32', data, tensor.shape);
|
|
223
|
+
}
|
|
224
|
+
feeds[inputName] = ortTensor;
|
|
225
|
+
}
|
|
226
|
+
const results = await session.run(feeds);
|
|
227
|
+
// Convert outputs to EdgeFlowTensor
|
|
228
|
+
const outputs = [];
|
|
229
|
+
for (const outputName of outputNames) {
|
|
230
|
+
const ortTensor = results[outputName];
|
|
231
|
+
if (ortTensor) {
|
|
232
|
+
const data = ortTensor.data;
|
|
233
|
+
const shape = Array.from(ortTensor.dims).map(d => Number(d));
|
|
234
|
+
outputs.push(new EdgeFlowTensor(new Float32Array(data), shape, 'float32'));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return outputs;
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
throw new EdgeFlowError(`ONNX inference failed: ${error instanceof Error ? error.message : String(error)}`, ErrorCodes.INFERENCE_FAILED, { modelId: model.id, expectedInputs: inputNames, providedInputs: Array.from(namedInputs.keys()), error });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
224
243
|
/**
|
|
225
244
|
* Unload a model
|
|
226
245
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx.js","sourceRoot":"","sources":["../../src/backends/onnx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAQL,aAAa,EACb,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,
|
|
1
|
+
{"version":3,"file":"onnx.js","sourceRoot":"","sources":["../../src/backends/onnx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - transformers.js Adapter Backend
|
|
3
|
+
*
|
|
4
|
+
* Wraps transformers.js (by Hugging Face) as an inference backend, giving
|
|
5
|
+
* users access to 1000+ HuggingFace models while adding edgeFlow.js's
|
|
6
|
+
* orchestration layer (scheduling, caching, memory management, workers).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { useTransformersBackend } from 'edgeflowjs';
|
|
11
|
+
* import { pipeline as tfPipeline } from '@xenova/transformers';
|
|
12
|
+
*
|
|
13
|
+
* // Register the adapter
|
|
14
|
+
* useTransformersBackend();
|
|
15
|
+
*
|
|
16
|
+
* // Now use edgeFlow.js pipeline API — inference delegates to transformers.js
|
|
17
|
+
* const classifier = await pipeline('text-classification', {
|
|
18
|
+
* model: 'Xenova/distilbert-base-uncased-finetuned-sst-2-english',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // edgeFlow.js handles scheduling, batching, memory, caching
|
|
22
|
+
* const results = await classifier.runBatch(thousandsOfTexts);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import { Runtime, RuntimeType, RuntimeCapabilities, LoadedModel, ModelLoadOptions, Tensor } from '../core/types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Minimal interface for a transformers.js pipeline instance.
|
|
28
|
+
* We avoid importing @xenova/transformers directly so edgeFlow.js
|
|
29
|
+
* does not add it as a hard dependency.
|
|
30
|
+
*/
|
|
31
|
+
interface TransformersPipelineInstance {
|
|
32
|
+
(input: unknown, options?: unknown): Promise<unknown>;
|
|
33
|
+
dispose?: () => Promise<void> | void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A factory that creates a transformers.js pipeline.
|
|
37
|
+
* Users pass this so we don't hard-depend on the library.
|
|
38
|
+
*/
|
|
39
|
+
export type TransformersPipelineFactory = (task: string, model?: string, options?: Record<string, unknown>) => Promise<TransformersPipelineInstance>;
|
|
40
|
+
/**
|
|
41
|
+
* Options for configuring the transformers.js adapter.
|
|
42
|
+
*/
|
|
43
|
+
export interface TransformersAdapterOptions {
|
|
44
|
+
/** The pipeline factory from transformers.js (e.g. the `pipeline` function) */
|
|
45
|
+
pipelineFactory: TransformersPipelineFactory;
|
|
46
|
+
/** Default device ('webgpu' | 'wasm' | 'cpu') — passed to transformers.js */
|
|
47
|
+
device?: string;
|
|
48
|
+
/** Default dtype ('fp32' | 'fp16' | 'q8' | 'q4') */
|
|
49
|
+
dtype?: string;
|
|
50
|
+
/** Cache directory (browser IndexedDB path) */
|
|
51
|
+
cacheDir?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare class TransformersAdapterRuntime implements Runtime {
|
|
54
|
+
readonly name: RuntimeType;
|
|
55
|
+
get capabilities(): RuntimeCapabilities;
|
|
56
|
+
isAvailable(): Promise<boolean>;
|
|
57
|
+
initialize(): Promise<void>;
|
|
58
|
+
loadModel(modelData: ArrayBuffer, options?: ModelLoadOptions): Promise<LoadedModel>;
|
|
59
|
+
/**
|
|
60
|
+
* Load a transformers.js pipeline by task + model name
|
|
61
|
+
* (called by the higher-level adapter pipeline, not via the
|
|
62
|
+
* standard loadModel path).
|
|
63
|
+
*/
|
|
64
|
+
loadPipeline(task: string, model: string, pipelineOptions?: Record<string, unknown>): Promise<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Run inference by passing the raw input to the transformers.js pipeline.
|
|
67
|
+
* The result is returned as a single EdgeFlowTensor wrapping the JSON-encoded output
|
|
68
|
+
* (since transformers.js returns task-specific objects, not raw tensors).
|
|
69
|
+
*/
|
|
70
|
+
run(model: LoadedModel, inputs: Tensor[]): Promise<Tensor[]>;
|
|
71
|
+
/**
|
|
72
|
+
* High-level: run the transformers.js pipeline directly with arbitrary input.
|
|
73
|
+
* Returns the raw result object (not a tensor).
|
|
74
|
+
*/
|
|
75
|
+
runDirect(modelId: string, input: unknown, options?: Record<string, unknown>): Promise<unknown>;
|
|
76
|
+
dispose(): void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Register the transformers.js adapter as the default inference backend.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { pipeline } from '@xenova/transformers';
|
|
84
|
+
* import { useTransformersBackend } from 'edgeflowjs';
|
|
85
|
+
*
|
|
86
|
+
* useTransformersBackend({
|
|
87
|
+
* pipelineFactory: pipeline,
|
|
88
|
+
* device: 'webgpu',
|
|
89
|
+
* dtype: 'fp16',
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export declare function useTransformersBackend(options: TransformersAdapterOptions): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get the adapter runtime instance (for advanced use).
|
|
96
|
+
*/
|
|
97
|
+
export declare function getTransformersAdapter(): TransformersAdapterRuntime | null;
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=transformers-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers-adapter.d.ts","sourceRoot":"","sources":["../../src/backends/transformers-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAEhB,MAAM,EAGP,MAAM,kBAAkB,CAAC;AAU1B;;;;GAIG;AACH,UAAU,4BAA4B;IACpC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,4BAA4B,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,+EAA+E;IAC/E,eAAe,EAAE,2BAA2B,CAAC;IAC7C,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkBD,qBAAa,0BAA2B,YAAW,OAAO;IACxD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAU;IAEpC,IAAI,YAAY,IAAI,mBAAmB,CAStC;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,SAAS,CACb,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,CAAC;IA6BvB;;;;OAIG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,OAAO,CAAC,MAAM,CAAC;IAmBlB;;;;OAIG;IACG,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBlE;;;OAGG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC;IAWnB,OAAO,IAAI,IAAI;CAQhB;AAQD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAIhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,0BAA0B,GAAG,IAAI,CAE1E"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - transformers.js Adapter Backend
|
|
3
|
+
*
|
|
4
|
+
* Wraps transformers.js (by Hugging Face) as an inference backend, giving
|
|
5
|
+
* users access to 1000+ HuggingFace models while adding edgeFlow.js's
|
|
6
|
+
* orchestration layer (scheduling, caching, memory management, workers).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { useTransformersBackend } from 'edgeflowjs';
|
|
11
|
+
* import { pipeline as tfPipeline } from '@xenova/transformers';
|
|
12
|
+
*
|
|
13
|
+
* // Register the adapter
|
|
14
|
+
* useTransformersBackend();
|
|
15
|
+
*
|
|
16
|
+
* // Now use edgeFlow.js pipeline API — inference delegates to transformers.js
|
|
17
|
+
* const classifier = await pipeline('text-classification', {
|
|
18
|
+
* model: 'Xenova/distilbert-base-uncased-finetuned-sst-2-english',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // edgeFlow.js handles scheduling, batching, memory, caching
|
|
22
|
+
* const results = await classifier.runBatch(thousandsOfTexts);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import { EdgeFlowError, ErrorCodes, } from '../core/types.js';
|
|
26
|
+
import { LoadedModelImpl } from '../core/runtime.js';
|
|
27
|
+
import { EdgeFlowTensor } from '../core/tensor.js';
|
|
28
|
+
import { getMemoryManager } from '../core/memory.js';
|
|
29
|
+
import { registerRuntime } from '../core/runtime.js';
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Session store: maps model IDs to transformers.js pipeline instances
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
const sessionStore = new Map();
|
|
34
|
+
let adapterOptions = null;
|
|
35
|
+
// ---------------------------------------------------------------------------
|
|
36
|
+
// Runtime implementation
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
export class TransformersAdapterRuntime {
|
|
39
|
+
name = 'wasm'; // registers under the wasm slot
|
|
40
|
+
get capabilities() {
|
|
41
|
+
return {
|
|
42
|
+
concurrency: true,
|
|
43
|
+
quantization: true,
|
|
44
|
+
float16: true,
|
|
45
|
+
dynamicShapes: true,
|
|
46
|
+
maxBatchSize: 128,
|
|
47
|
+
availableMemory: 1024 * 1024 * 1024,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async isAvailable() {
|
|
51
|
+
return adapterOptions?.pipelineFactory != null;
|
|
52
|
+
}
|
|
53
|
+
async initialize() {
|
|
54
|
+
if (!adapterOptions?.pipelineFactory) {
|
|
55
|
+
throw new EdgeFlowError('TransformersAdapterRuntime requires a pipelineFactory. ' +
|
|
56
|
+
'Call useTransformersBackend({ pipelineFactory }) first.', ErrorCodes.RUNTIME_INIT_FAILED);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async loadModel(modelData, options = {}) {
|
|
60
|
+
// modelData is unused — transformers.js downloads its own models.
|
|
61
|
+
// Instead the model identifier comes via metadata.name or the URL.
|
|
62
|
+
const modelName = options.metadata?.name ?? 'default';
|
|
63
|
+
const metadata = {
|
|
64
|
+
name: modelName,
|
|
65
|
+
version: '1.0.0',
|
|
66
|
+
inputs: [{ name: 'input', dtype: 'float32', shape: [-1] }],
|
|
67
|
+
outputs: [{ name: 'output', dtype: 'float32', shape: [-1] }],
|
|
68
|
+
sizeBytes: modelData.byteLength || 0,
|
|
69
|
+
quantization: options.quantization ?? 'float32',
|
|
70
|
+
format: 'onnx',
|
|
71
|
+
};
|
|
72
|
+
const modelId = `tjs_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`;
|
|
73
|
+
const model = new LoadedModelImpl(metadata, this.name, () => {
|
|
74
|
+
const session = sessionStore.get(modelId);
|
|
75
|
+
if (session?.instance.dispose) {
|
|
76
|
+
session.instance.dispose();
|
|
77
|
+
}
|
|
78
|
+
sessionStore.delete(modelId);
|
|
79
|
+
});
|
|
80
|
+
getMemoryManager().trackModel(model, () => model.dispose());
|
|
81
|
+
return model;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Load a transformers.js pipeline by task + model name
|
|
85
|
+
* (called by the higher-level adapter pipeline, not via the
|
|
86
|
+
* standard loadModel path).
|
|
87
|
+
*/
|
|
88
|
+
async loadPipeline(task, model, pipelineOptions) {
|
|
89
|
+
if (!adapterOptions?.pipelineFactory) {
|
|
90
|
+
throw new EdgeFlowError('Adapter not initialised', ErrorCodes.RUNTIME_NOT_INITIALIZED);
|
|
91
|
+
}
|
|
92
|
+
const opts = { ...pipelineOptions };
|
|
93
|
+
if (adapterOptions.device)
|
|
94
|
+
opts['device'] = adapterOptions.device;
|
|
95
|
+
if (adapterOptions.dtype)
|
|
96
|
+
opts['dtype'] = adapterOptions.dtype;
|
|
97
|
+
const instance = await adapterOptions.pipelineFactory(task, model, opts);
|
|
98
|
+
const modelId = `tjs_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`;
|
|
99
|
+
sessionStore.set(modelId, { instance, task, model });
|
|
100
|
+
return modelId;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Run inference by passing the raw input to the transformers.js pipeline.
|
|
104
|
+
* The result is returned as a single EdgeFlowTensor wrapping the JSON-encoded output
|
|
105
|
+
* (since transformers.js returns task-specific objects, not raw tensors).
|
|
106
|
+
*/
|
|
107
|
+
async run(model, inputs) {
|
|
108
|
+
const session = sessionStore.get(model.id);
|
|
109
|
+
if (!session) {
|
|
110
|
+
throw new EdgeFlowError(`No transformers.js session for model ${model.id}`, ErrorCodes.MODEL_NOT_LOADED);
|
|
111
|
+
}
|
|
112
|
+
// Reconstruct input from tensor (simple: use the float data as-is)
|
|
113
|
+
const inputData = inputs[0]?.toFloat32Array() ?? new Float32Array(0);
|
|
114
|
+
const result = await session.instance(inputData);
|
|
115
|
+
// Wrap the result in a tensor — downstream pipelines can interpret it
|
|
116
|
+
const resultArray = Array.isArray(result)
|
|
117
|
+
? new Float32Array(result.flat(Infinity))
|
|
118
|
+
: new Float32Array([0]);
|
|
119
|
+
return [new EdgeFlowTensor(resultArray, [resultArray.length], 'float32')];
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* High-level: run the transformers.js pipeline directly with arbitrary input.
|
|
123
|
+
* Returns the raw result object (not a tensor).
|
|
124
|
+
*/
|
|
125
|
+
async runDirect(modelId, input, options) {
|
|
126
|
+
const session = sessionStore.get(modelId);
|
|
127
|
+
if (!session) {
|
|
128
|
+
throw new EdgeFlowError(`No transformers.js session for model ${modelId}`, ErrorCodes.MODEL_NOT_LOADED);
|
|
129
|
+
}
|
|
130
|
+
return session.instance(input, options);
|
|
131
|
+
}
|
|
132
|
+
dispose() {
|
|
133
|
+
for (const [id, session] of sessionStore) {
|
|
134
|
+
if (session.instance.dispose) {
|
|
135
|
+
session.instance.dispose();
|
|
136
|
+
}
|
|
137
|
+
sessionStore.delete(id);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Public API
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
let adapterRuntime = null;
|
|
145
|
+
/**
|
|
146
|
+
* Register the transformers.js adapter as the default inference backend.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* import { pipeline } from '@xenova/transformers';
|
|
151
|
+
* import { useTransformersBackend } from 'edgeflowjs';
|
|
152
|
+
*
|
|
153
|
+
* useTransformersBackend({
|
|
154
|
+
* pipelineFactory: pipeline,
|
|
155
|
+
* device: 'webgpu',
|
|
156
|
+
* dtype: 'fp16',
|
|
157
|
+
* });
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export function useTransformersBackend(options) {
|
|
161
|
+
adapterOptions = options;
|
|
162
|
+
adapterRuntime = new TransformersAdapterRuntime();
|
|
163
|
+
registerRuntime('wasm', () => adapterRuntime);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get the adapter runtime instance (for advanced use).
|
|
167
|
+
*/
|
|
168
|
+
export function getTransformersAdapter() {
|
|
169
|
+
return adapterRuntime;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=transformers-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers-adapter.js","sourceRoot":"","sources":["../../src/backends/transformers-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* edgeFlow.js - WebGPU Backend
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* **Status: Planned** - This is a skeleton implementation that initializes
|
|
5
|
+
* WebGPU and creates compute pipelines but does not perform real model
|
|
6
|
+
* inference. For GPU-accelerated inference, use the ONNX Runtime backend
|
|
7
|
+
* which supports WebGPU via its execution providers.
|
|
8
|
+
*
|
|
9
|
+
* This backend is intended for future custom WebGPU compute shader
|
|
10
|
+
* implementations that bypass ONNX Runtime for specialized ops.
|
|
9
11
|
*/
|
|
10
12
|
import { Runtime, RuntimeType, RuntimeCapabilities, LoadedModel, ModelLoadOptions, Tensor } from '../core/types.js';
|
|
11
13
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/backends/webgpu.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/backends/webgpu.ts"],"names":[],"mappings":"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"}
|