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
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* edgeFlow.js - Offline/PWA Support
|
|
3
|
+
*
|
|
4
|
+
* Utilities for offline-first ML inference.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Offline Manager
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Offline manager for PWA support
|
|
11
|
+
*/
|
|
12
|
+
export class OfflineManager {
|
|
13
|
+
config;
|
|
14
|
+
onlineListeners = new Set();
|
|
15
|
+
isInitialized = false;
|
|
16
|
+
constructor(config = {}) {
|
|
17
|
+
this.config = {
|
|
18
|
+
enabled: config.enabled ?? true,
|
|
19
|
+
cacheModels: config.cacheModels ?? true,
|
|
20
|
+
cacheConfig: config.cacheConfig ?? true,
|
|
21
|
+
maxCacheSize: config.maxCacheSize ?? 500 * 1024 * 1024, // 500MB
|
|
22
|
+
preloadModels: config.preloadModels ?? [],
|
|
23
|
+
serviceWorkerPath: config.serviceWorkerPath ?? '/edgeflow-sw.js',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize offline support
|
|
28
|
+
*/
|
|
29
|
+
async initialize() {
|
|
30
|
+
if (this.isInitialized)
|
|
31
|
+
return;
|
|
32
|
+
// Listen for online/offline events
|
|
33
|
+
if (typeof window !== 'undefined') {
|
|
34
|
+
window.addEventListener('online', () => this.notifyOnlineStatus(true));
|
|
35
|
+
window.addEventListener('offline', () => this.notifyOnlineStatus(false));
|
|
36
|
+
}
|
|
37
|
+
// Register service worker if available
|
|
38
|
+
if (this.config.enabled && 'serviceWorker' in navigator) {
|
|
39
|
+
try {
|
|
40
|
+
await this.registerServiceWorker();
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.warn('Service worker registration failed:', error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Preload models for offline use
|
|
47
|
+
if (this.config.preloadModels.length > 0) {
|
|
48
|
+
await this.preloadForOffline(this.config.preloadModels);
|
|
49
|
+
}
|
|
50
|
+
this.isInitialized = true;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register service worker
|
|
54
|
+
*/
|
|
55
|
+
async registerServiceWorker() {
|
|
56
|
+
if (!('serviceWorker' in navigator)) {
|
|
57
|
+
throw new Error('Service workers not supported');
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const registration = await navigator.serviceWorker.register(this.config.serviceWorkerPath, { scope: '/' });
|
|
61
|
+
console.log('edgeFlow.js service worker registered:', registration.scope);
|
|
62
|
+
// Handle updates
|
|
63
|
+
registration.onupdatefound = () => {
|
|
64
|
+
const newWorker = registration.installing;
|
|
65
|
+
if (newWorker) {
|
|
66
|
+
newWorker.onstatechange = () => {
|
|
67
|
+
if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
|
|
68
|
+
console.log('New edgeFlow.js service worker available');
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new Error(`Service worker registration failed: ${error}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Preload models for offline use
|
|
80
|
+
*/
|
|
81
|
+
async preloadForOffline(modelUrls) {
|
|
82
|
+
const { loadModelData } = await import('./model-loader.js');
|
|
83
|
+
for (const url of modelUrls) {
|
|
84
|
+
try {
|
|
85
|
+
console.log(`Preloading for offline: ${url}`);
|
|
86
|
+
await loadModelData(url, { cache: true });
|
|
87
|
+
console.log(`✓ Cached: ${url}`);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.warn(`Failed to cache ${url}:`, error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get offline status
|
|
96
|
+
*/
|
|
97
|
+
async getStatus() {
|
|
98
|
+
const { getModelCacheStats } = await import('./model-loader.js');
|
|
99
|
+
const stats = await getModelCacheStats();
|
|
100
|
+
let swStatus = 'none';
|
|
101
|
+
if ('serviceWorker' in navigator) {
|
|
102
|
+
const registration = await navigator.serviceWorker.getRegistration();
|
|
103
|
+
if (registration) {
|
|
104
|
+
if (registration.active)
|
|
105
|
+
swStatus = 'active';
|
|
106
|
+
else if (registration.installing)
|
|
107
|
+
swStatus = 'installing';
|
|
108
|
+
else if (registration.waiting)
|
|
109
|
+
swStatus = 'waiting';
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
isOnline: typeof navigator !== 'undefined' ? navigator.onLine : true,
|
|
114
|
+
offlineReady: stats.models > 0,
|
|
115
|
+
cachedModels: stats.models,
|
|
116
|
+
cacheSize: stats.totalSize,
|
|
117
|
+
serviceWorker: swStatus,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get list of cached models
|
|
122
|
+
*/
|
|
123
|
+
async getCachedModels() {
|
|
124
|
+
// Query IndexedDB for cached model metadata
|
|
125
|
+
const db = await this.openDatabase();
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
const tx = db.transaction('meta', 'readonly');
|
|
128
|
+
const store = tx.objectStore('meta');
|
|
129
|
+
const request = store.getAll();
|
|
130
|
+
request.onsuccess = () => {
|
|
131
|
+
const models = (request.result || []).map((meta) => ({
|
|
132
|
+
url: meta['url'],
|
|
133
|
+
size: meta['size'],
|
|
134
|
+
cachedAt: new Date(meta['cachedAt']),
|
|
135
|
+
lastAccessed: new Date(meta['lastAccessed'] || meta['cachedAt']),
|
|
136
|
+
modelId: meta['modelId'],
|
|
137
|
+
}));
|
|
138
|
+
resolve(models);
|
|
139
|
+
};
|
|
140
|
+
request.onerror = () => reject(request.error);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if a model is available offline
|
|
145
|
+
*/
|
|
146
|
+
async isModelAvailableOffline(url) {
|
|
147
|
+
const { isModelCached } = await import('./model-loader.js');
|
|
148
|
+
return isModelCached(url);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Remove model from offline cache
|
|
152
|
+
*/
|
|
153
|
+
async removeFromOffline(url) {
|
|
154
|
+
const { deleteCachedModel } = await import('./model-loader.js');
|
|
155
|
+
await deleteCachedModel(url);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Clear all offline data
|
|
159
|
+
*/
|
|
160
|
+
async clearOfflineData() {
|
|
161
|
+
const { clearModelCache } = await import('./model-loader.js');
|
|
162
|
+
await clearModelCache();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Check available storage
|
|
166
|
+
*/
|
|
167
|
+
async getStorageInfo() {
|
|
168
|
+
if ('storage' in navigator && 'estimate' in navigator.storage) {
|
|
169
|
+
const estimate = await navigator.storage.estimate();
|
|
170
|
+
return {
|
|
171
|
+
quota: estimate.quota ?? 0,
|
|
172
|
+
usage: estimate.usage ?? 0,
|
|
173
|
+
available: (estimate.quota ?? 0) - (estimate.usage ?? 0),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return { quota: 0, usage: 0, available: 0 };
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Request persistent storage
|
|
180
|
+
*/
|
|
181
|
+
async requestPersistentStorage() {
|
|
182
|
+
if ('storage' in navigator && 'persist' in navigator.storage) {
|
|
183
|
+
return await navigator.storage.persist();
|
|
184
|
+
}
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Add online status listener
|
|
189
|
+
*/
|
|
190
|
+
onOnlineStatusChange(listener) {
|
|
191
|
+
this.onlineListeners.add(listener);
|
|
192
|
+
return () => this.onlineListeners.delete(listener);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if currently online
|
|
196
|
+
*/
|
|
197
|
+
isOnline() {
|
|
198
|
+
return typeof navigator !== 'undefined' ? navigator.onLine : true;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Notify listeners of online status change
|
|
202
|
+
*/
|
|
203
|
+
notifyOnlineStatus(online) {
|
|
204
|
+
this.onlineListeners.forEach(listener => listener(online));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Open IndexedDB
|
|
208
|
+
*/
|
|
209
|
+
async openDatabase() {
|
|
210
|
+
return new Promise((resolve, reject) => {
|
|
211
|
+
const request = indexedDB.open('edgeflow-model-cache', 1);
|
|
212
|
+
request.onsuccess = () => resolve(request.result);
|
|
213
|
+
request.onerror = () => reject(request.error);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// Service Worker Template
|
|
219
|
+
// ============================================================================
|
|
220
|
+
/**
|
|
221
|
+
* Generate service worker code
|
|
222
|
+
*/
|
|
223
|
+
export function generateServiceWorker(options = {}) {
|
|
224
|
+
const { cacheName = 'edgeflow-v1', modelUrls = [], cacheFirst = true, } = options;
|
|
225
|
+
return `
|
|
226
|
+
// edgeFlow.js Service Worker
|
|
227
|
+
// Auto-generated - customize as needed
|
|
228
|
+
|
|
229
|
+
const CACHE_NAME = '${cacheName}';
|
|
230
|
+
const MODEL_URLS = ${JSON.stringify(modelUrls)};
|
|
231
|
+
|
|
232
|
+
// Install event - cache core files
|
|
233
|
+
self.addEventListener('install', (event) => {
|
|
234
|
+
event.waitUntil(
|
|
235
|
+
caches.open(CACHE_NAME)
|
|
236
|
+
.then((cache) => {
|
|
237
|
+
console.log('[edgeFlow SW] Caching core files');
|
|
238
|
+
return cache.addAll([
|
|
239
|
+
'/',
|
|
240
|
+
'/edgeflow.browser.min.js',
|
|
241
|
+
...MODEL_URLS,
|
|
242
|
+
]);
|
|
243
|
+
})
|
|
244
|
+
.then(() => self.skipWaiting())
|
|
245
|
+
);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// Activate event - cleanup old caches
|
|
249
|
+
self.addEventListener('activate', (event) => {
|
|
250
|
+
event.waitUntil(
|
|
251
|
+
caches.keys()
|
|
252
|
+
.then((cacheNames) => {
|
|
253
|
+
return Promise.all(
|
|
254
|
+
cacheNames
|
|
255
|
+
.filter((name) => name !== CACHE_NAME)
|
|
256
|
+
.map((name) => caches.delete(name))
|
|
257
|
+
);
|
|
258
|
+
})
|
|
259
|
+
.then(() => self.clients.claim())
|
|
260
|
+
);
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Fetch event - ${cacheFirst ? 'cache first' : 'network first'} strategy
|
|
264
|
+
self.addEventListener('fetch', (event) => {
|
|
265
|
+
const url = new URL(event.request.url);
|
|
266
|
+
|
|
267
|
+
// Only handle same-origin and model requests
|
|
268
|
+
if (url.origin !== location.origin && !isModelRequest(url)) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
${cacheFirst ? `
|
|
273
|
+
// Cache first strategy
|
|
274
|
+
event.respondWith(
|
|
275
|
+
caches.match(event.request)
|
|
276
|
+
.then((cached) => {
|
|
277
|
+
if (cached) {
|
|
278
|
+
return cached;
|
|
279
|
+
}
|
|
280
|
+
return fetch(event.request)
|
|
281
|
+
.then((response) => {
|
|
282
|
+
if (response.ok && shouldCache(event.request)) {
|
|
283
|
+
const clone = response.clone();
|
|
284
|
+
caches.open(CACHE_NAME)
|
|
285
|
+
.then((cache) => cache.put(event.request, clone));
|
|
286
|
+
}
|
|
287
|
+
return response;
|
|
288
|
+
});
|
|
289
|
+
})
|
|
290
|
+
);
|
|
291
|
+
` : `
|
|
292
|
+
// Network first strategy
|
|
293
|
+
event.respondWith(
|
|
294
|
+
fetch(event.request)
|
|
295
|
+
.then((response) => {
|
|
296
|
+
if (response.ok && shouldCache(event.request)) {
|
|
297
|
+
const clone = response.clone();
|
|
298
|
+
caches.open(CACHE_NAME)
|
|
299
|
+
.then((cache) => cache.put(event.request, clone));
|
|
300
|
+
}
|
|
301
|
+
return response;
|
|
302
|
+
})
|
|
303
|
+
.catch(() => caches.match(event.request))
|
|
304
|
+
);
|
|
305
|
+
`}
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
// Check if request is for a model file
|
|
309
|
+
function isModelRequest(url) {
|
|
310
|
+
return url.pathname.endsWith('.onnx') ||
|
|
311
|
+
url.pathname.endsWith('.bin') ||
|
|
312
|
+
url.hostname.includes('huggingface.co');
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Check if response should be cached
|
|
316
|
+
function shouldCache(request) {
|
|
317
|
+
const url = new URL(request.url);
|
|
318
|
+
return request.method === 'GET' && (
|
|
319
|
+
url.pathname.endsWith('.js') ||
|
|
320
|
+
url.pathname.endsWith('.onnx') ||
|
|
321
|
+
url.pathname.endsWith('.bin') ||
|
|
322
|
+
url.pathname.endsWith('.json')
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Handle messages from main thread
|
|
327
|
+
self.addEventListener('message', (event) => {
|
|
328
|
+
if (event.data.type === 'SKIP_WAITING') {
|
|
329
|
+
self.skipWaiting();
|
|
330
|
+
}
|
|
331
|
+
if (event.data.type === 'CACHE_MODEL') {
|
|
332
|
+
cacheModel(event.data.url);
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
// Cache a model URL
|
|
337
|
+
async function cacheModel(url) {
|
|
338
|
+
const cache = await caches.open(CACHE_NAME);
|
|
339
|
+
try {
|
|
340
|
+
const response = await fetch(url);
|
|
341
|
+
if (response.ok) {
|
|
342
|
+
await cache.put(url, response);
|
|
343
|
+
console.log('[edgeFlow SW] Cached model:', url);
|
|
344
|
+
}
|
|
345
|
+
} catch (error) {
|
|
346
|
+
console.error('[edgeFlow SW] Failed to cache model:', url, error);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
`.trim();
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Generate PWA manifest
|
|
353
|
+
*/
|
|
354
|
+
export function generateManifest(options = { name: 'edgeFlow.js App' }) {
|
|
355
|
+
return {
|
|
356
|
+
name: options.name,
|
|
357
|
+
short_name: options.shortName ?? options.name,
|
|
358
|
+
description: options.description ?? 'ML-powered application built with edgeFlow.js',
|
|
359
|
+
start_url: '/',
|
|
360
|
+
display: 'standalone',
|
|
361
|
+
theme_color: options.themeColor ?? '#4F46E5',
|
|
362
|
+
background_color: options.backgroundColor ?? '#FFFFFF',
|
|
363
|
+
icons: options.icons ?? [
|
|
364
|
+
{ src: '/icon-192.png', sizes: '192x192', type: 'image/png' },
|
|
365
|
+
{ src: '/icon-512.png', sizes: '512x512', type: 'image/png' },
|
|
366
|
+
],
|
|
367
|
+
categories: ['utilities', 'productivity'],
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
// ============================================================================
|
|
371
|
+
// Singleton Instance
|
|
372
|
+
// ============================================================================
|
|
373
|
+
let offlineManager = null;
|
|
374
|
+
/**
|
|
375
|
+
* Get the global offline manager instance
|
|
376
|
+
*/
|
|
377
|
+
export function getOfflineManager(config) {
|
|
378
|
+
if (!offlineManager) {
|
|
379
|
+
offlineManager = new OfflineManager(config);
|
|
380
|
+
}
|
|
381
|
+
return offlineManager;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Initialize offline support
|
|
385
|
+
*/
|
|
386
|
+
export async function initOffline(config) {
|
|
387
|
+
const manager = getOfflineManager(config);
|
|
388
|
+
await manager.initialize();
|
|
389
|
+
return manager.getStatus();
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Check if running in offline mode
|
|
393
|
+
*/
|
|
394
|
+
export function isOffline() {
|
|
395
|
+
return typeof navigator !== 'undefined' ? !navigator.onLine : false;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Check if PWA features are supported
|
|
399
|
+
*/
|
|
400
|
+
export function isPWASupported() {
|
|
401
|
+
return typeof window !== 'undefined' &&
|
|
402
|
+
'serviceWorker' in navigator &&
|
|
403
|
+
'caches' in window;
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=offline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offline.js","sourceRoot":"","sources":["../../src/utils/offline.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,37 +2,81 @@
|
|
|
2
2
|
* edgeFlow.js - Preprocessor
|
|
3
3
|
*
|
|
4
4
|
* Data preprocessing utilities for images, audio, and other data types.
|
|
5
|
+
* Supports HuggingFace preprocessor_config.json format.
|
|
5
6
|
*/
|
|
6
7
|
import { EdgeFlowTensor } from '../core/tensor.js';
|
|
8
|
+
/**
|
|
9
|
+
* Image input types
|
|
10
|
+
*/
|
|
11
|
+
export type ImageInput = HTMLImageElement | HTMLCanvasElement | ImageBitmap | ImageData | Blob | File | string;
|
|
12
|
+
/**
|
|
13
|
+
* Audio input types
|
|
14
|
+
*/
|
|
15
|
+
export type AudioInput = AudioBuffer | Float32Array | ArrayBuffer | Blob | File | string;
|
|
7
16
|
/**
|
|
8
17
|
* Image preprocessing options
|
|
9
18
|
*/
|
|
10
19
|
export interface ImagePreprocessorOptions {
|
|
11
|
-
/** Target width */
|
|
20
|
+
/** Target width (or size for square) */
|
|
12
21
|
width?: number;
|
|
13
22
|
/** Target height */
|
|
14
23
|
height?: number;
|
|
24
|
+
/** Single size for square output (sets both width and height) */
|
|
25
|
+
size?: number;
|
|
15
26
|
/** Resize mode */
|
|
16
|
-
resizeMode?: 'stretch' | 'contain' | 'cover' | 'pad';
|
|
27
|
+
resizeMode?: 'stretch' | 'contain' | 'cover' | 'pad' | 'shortest_edge' | 'longest_edge';
|
|
17
28
|
/** Normalization mean */
|
|
18
29
|
mean?: [number, number, number];
|
|
19
30
|
/** Normalization std */
|
|
20
31
|
std?: [number, number, number];
|
|
32
|
+
/** Rescale factor (applied before normalization) */
|
|
33
|
+
rescaleFactor?: number;
|
|
21
34
|
/** Convert to grayscale */
|
|
22
35
|
grayscale?: boolean;
|
|
23
36
|
/** Channel format */
|
|
24
37
|
channelFormat?: 'CHW' | 'HWC';
|
|
25
38
|
/** Output data type */
|
|
26
39
|
dtype?: 'float32' | 'uint8';
|
|
40
|
+
/** Do resize */
|
|
41
|
+
doResize?: boolean;
|
|
42
|
+
/** Do rescale */
|
|
43
|
+
doRescale?: boolean;
|
|
44
|
+
/** Do normalize */
|
|
45
|
+
doNormalize?: boolean;
|
|
46
|
+
/** Do center crop */
|
|
47
|
+
doCenterCrop?: boolean;
|
|
48
|
+
/** Center crop size */
|
|
49
|
+
cropSize?: number | {
|
|
50
|
+
width: number;
|
|
51
|
+
height: number;
|
|
52
|
+
};
|
|
53
|
+
/** Padding color for 'pad' mode (RGB 0-255) */
|
|
54
|
+
paddingColor?: [number, number, number];
|
|
27
55
|
}
|
|
28
56
|
/**
|
|
29
57
|
* ImagePreprocessor - Process images for model input
|
|
58
|
+
*
|
|
59
|
+
* Supports HuggingFace preprocessor_config.json format.
|
|
30
60
|
*/
|
|
31
61
|
export declare class ImagePreprocessor {
|
|
32
62
|
private readonly options;
|
|
33
63
|
private canvas;
|
|
34
64
|
private ctx;
|
|
35
65
|
constructor(options?: ImagePreprocessorOptions);
|
|
66
|
+
/**
|
|
67
|
+
* Load from HuggingFace preprocessor_config.json
|
|
68
|
+
*/
|
|
69
|
+
static fromConfig(config: Record<string, unknown>): ImagePreprocessor;
|
|
70
|
+
/**
|
|
71
|
+
* Load from HuggingFace Hub
|
|
72
|
+
*/
|
|
73
|
+
static fromUrl(url: string): Promise<ImagePreprocessor>;
|
|
74
|
+
/**
|
|
75
|
+
* Load from HuggingFace Hub by model ID
|
|
76
|
+
*/
|
|
77
|
+
static fromHuggingFace(modelId: string, options?: {
|
|
78
|
+
revision?: string;
|
|
79
|
+
}): Promise<ImagePreprocessor>;
|
|
36
80
|
/**
|
|
37
81
|
* Initialize canvas (lazy)
|
|
38
82
|
*/
|
|
@@ -40,15 +84,23 @@ export declare class ImagePreprocessor {
|
|
|
40
84
|
/**
|
|
41
85
|
* Process an image
|
|
42
86
|
*/
|
|
43
|
-
process(input:
|
|
87
|
+
process(input: ImageInput): Promise<EdgeFlowTensor>;
|
|
44
88
|
/**
|
|
45
89
|
* Process multiple images (batch)
|
|
46
90
|
*/
|
|
47
|
-
processBatch(inputs:
|
|
91
|
+
processBatch(inputs: ImageInput[]): Promise<EdgeFlowTensor>;
|
|
48
92
|
/**
|
|
49
|
-
* Load image from URL
|
|
93
|
+
* Load image from URL or base64
|
|
50
94
|
*/
|
|
51
95
|
private loadFromUrl;
|
|
96
|
+
/**
|
|
97
|
+
* Load image from Blob/File
|
|
98
|
+
*/
|
|
99
|
+
private loadFromBlob;
|
|
100
|
+
/**
|
|
101
|
+
* Center crop image
|
|
102
|
+
*/
|
|
103
|
+
private centerCrop;
|
|
52
104
|
/**
|
|
53
105
|
* Convert image element to ImageData
|
|
54
106
|
*/
|
|
@@ -61,6 +113,10 @@ export declare class ImagePreprocessor {
|
|
|
61
113
|
* Convert ImageData to tensor
|
|
62
114
|
*/
|
|
63
115
|
private toTensor;
|
|
116
|
+
/**
|
|
117
|
+
* Get current options
|
|
118
|
+
*/
|
|
119
|
+
getOptions(): ImagePreprocessorOptions;
|
|
64
120
|
}
|
|
65
121
|
/**
|
|
66
122
|
* Audio preprocessing options
|
|
@@ -81,11 +137,23 @@ export interface AudioPreprocessorOptions {
|
|
|
81
137
|
}
|
|
82
138
|
/**
|
|
83
139
|
* AudioPreprocessor - Process audio for model input
|
|
140
|
+
*
|
|
141
|
+
* Supports Whisper and other audio model preprocessing.
|
|
84
142
|
*/
|
|
85
143
|
export declare class AudioPreprocessor {
|
|
86
144
|
private readonly options;
|
|
87
145
|
private audioContext;
|
|
88
146
|
constructor(options?: AudioPreprocessorOptions);
|
|
147
|
+
/**
|
|
148
|
+
* Load from HuggingFace feature_extractor config
|
|
149
|
+
*/
|
|
150
|
+
static fromConfig(config: Record<string, unknown>): AudioPreprocessor;
|
|
151
|
+
/**
|
|
152
|
+
* Load from HuggingFace Hub
|
|
153
|
+
*/
|
|
154
|
+
static fromHuggingFace(modelId: string, options?: {
|
|
155
|
+
revision?: string;
|
|
156
|
+
}): Promise<AudioPreprocessor>;
|
|
89
157
|
/**
|
|
90
158
|
* Initialize audio context (lazy)
|
|
91
159
|
*/
|
|
@@ -93,11 +161,19 @@ export declare class AudioPreprocessor {
|
|
|
93
161
|
/**
|
|
94
162
|
* Process audio data
|
|
95
163
|
*/
|
|
96
|
-
process(input:
|
|
164
|
+
process(input: AudioInput): Promise<EdgeFlowTensor>;
|
|
165
|
+
/**
|
|
166
|
+
* Process raw waveform (for models that don't need mel spectrogram)
|
|
167
|
+
*/
|
|
168
|
+
processRaw(input: AudioInput): Promise<EdgeFlowTensor>;
|
|
97
169
|
/**
|
|
98
170
|
* Load audio from URL
|
|
99
171
|
*/
|
|
100
172
|
private loadFromUrl;
|
|
173
|
+
/**
|
|
174
|
+
* Load audio from Blob/File
|
|
175
|
+
*/
|
|
176
|
+
private loadFromBlob;
|
|
101
177
|
/**
|
|
102
178
|
* Decode audio data
|
|
103
179
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preprocessor.d.ts","sourceRoot":"","sources":["../../src/utils/preprocessor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"preprocessor.d.ts","sourceRoot":"","sources":["../../src/utils/preprocessor.ts"],"names":[],"mappings":"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"}
|