edgeflowjs 0.1.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.
Files changed (98) hide show
  1. package/README.md +473 -0
  2. package/dist/backends/index.d.ts +13 -0
  3. package/dist/backends/index.d.ts.map +1 -0
  4. package/dist/backends/index.js +32 -0
  5. package/dist/backends/index.js.map +1 -0
  6. package/dist/backends/onnx.d.ts +46 -0
  7. package/dist/backends/onnx.d.ts.map +1 -0
  8. package/dist/backends/onnx.js +249 -0
  9. package/dist/backends/onnx.js.map +1 -0
  10. package/dist/backends/wasm.d.ts +78 -0
  11. package/dist/backends/wasm.d.ts.map +1 -0
  12. package/dist/backends/wasm.js +358 -0
  13. package/dist/backends/wasm.js.map +1 -0
  14. package/dist/backends/webgpu.d.ts +143 -0
  15. package/dist/backends/webgpu.d.ts.map +1 -0
  16. package/dist/backends/webgpu.js +326 -0
  17. package/dist/backends/webgpu.js.map +1 -0
  18. package/dist/backends/webnn.d.ts +115 -0
  19. package/dist/backends/webnn.d.ts.map +1 -0
  20. package/dist/backends/webnn.js +202 -0
  21. package/dist/backends/webnn.js.map +1 -0
  22. package/dist/core/index.d.ts +9 -0
  23. package/dist/core/index.d.ts.map +1 -0
  24. package/dist/core/index.js +14 -0
  25. package/dist/core/index.js.map +1 -0
  26. package/dist/core/memory.d.ts +234 -0
  27. package/dist/core/memory.d.ts.map +1 -0
  28. package/dist/core/memory.js +554 -0
  29. package/dist/core/memory.js.map +1 -0
  30. package/dist/core/runtime.d.ts +129 -0
  31. package/dist/core/runtime.d.ts.map +1 -0
  32. package/dist/core/runtime.js +352 -0
  33. package/dist/core/runtime.js.map +1 -0
  34. package/dist/core/scheduler.d.ts +118 -0
  35. package/dist/core/scheduler.d.ts.map +1 -0
  36. package/dist/core/scheduler.js +600 -0
  37. package/dist/core/scheduler.js.map +1 -0
  38. package/dist/core/tensor.d.ts +149 -0
  39. package/dist/core/tensor.d.ts.map +1 -0
  40. package/dist/core/tensor.js +719 -0
  41. package/dist/core/tensor.js.map +1 -0
  42. package/dist/core/types.d.ts +367 -0
  43. package/dist/core/types.d.ts.map +1 -0
  44. package/dist/core/types.js +54 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/edgeflow.browser.js +5601 -0
  47. package/dist/edgeflow.browser.js.map +7 -0
  48. package/dist/edgeflow.browser.min.js +19 -0
  49. package/dist/edgeflow.browser.min.js.map +7 -0
  50. package/dist/index.d.ts +71 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +158 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/pipelines/base.d.ts +122 -0
  55. package/dist/pipelines/base.d.ts.map +1 -0
  56. package/dist/pipelines/base.js +155 -0
  57. package/dist/pipelines/base.js.map +1 -0
  58. package/dist/pipelines/feature-extraction.d.ts +68 -0
  59. package/dist/pipelines/feature-extraction.d.ts.map +1 -0
  60. package/dist/pipelines/feature-extraction.js +197 -0
  61. package/dist/pipelines/feature-extraction.js.map +1 -0
  62. package/dist/pipelines/image-classification.d.ts +61 -0
  63. package/dist/pipelines/image-classification.d.ts.map +1 -0
  64. package/dist/pipelines/image-classification.js +140 -0
  65. package/dist/pipelines/image-classification.js.map +1 -0
  66. package/dist/pipelines/index.d.ts +58 -0
  67. package/dist/pipelines/index.d.ts.map +1 -0
  68. package/dist/pipelines/index.js +72 -0
  69. package/dist/pipelines/index.js.map +1 -0
  70. package/dist/pipelines/text-classification.d.ts +71 -0
  71. package/dist/pipelines/text-classification.d.ts.map +1 -0
  72. package/dist/pipelines/text-classification.js +175 -0
  73. package/dist/pipelines/text-classification.js.map +1 -0
  74. package/dist/tools/index.d.ts +143 -0
  75. package/dist/tools/index.d.ts.map +1 -0
  76. package/dist/tools/index.js +294 -0
  77. package/dist/tools/index.js.map +1 -0
  78. package/dist/utils/cache.d.ts +162 -0
  79. package/dist/utils/cache.d.ts.map +1 -0
  80. package/dist/utils/cache.js +443 -0
  81. package/dist/utils/cache.js.map +1 -0
  82. package/dist/utils/index.d.ts +8 -0
  83. package/dist/utils/index.d.ts.map +1 -0
  84. package/dist/utils/index.js +12 -0
  85. package/dist/utils/index.js.map +1 -0
  86. package/dist/utils/model-loader.d.ts +107 -0
  87. package/dist/utils/model-loader.d.ts.map +1 -0
  88. package/dist/utils/model-loader.js +694 -0
  89. package/dist/utils/model-loader.js.map +1 -0
  90. package/dist/utils/preprocessor.d.ts +147 -0
  91. package/dist/utils/preprocessor.d.ts.map +1 -0
  92. package/dist/utils/preprocessor.js +423 -0
  93. package/dist/utils/preprocessor.js.map +1 -0
  94. package/dist/utils/tokenizer.d.ts +140 -0
  95. package/dist/utils/tokenizer.d.ts.map +1 -0
  96. package/dist/utils/tokenizer.js +397 -0
  97. package/dist/utils/tokenizer.js.map +1 -0
  98. package/package.json +87 -0
@@ -0,0 +1,554 @@
1
+ /**
2
+ * edgeFlow.js - Memory Management
3
+ *
4
+ * Efficient memory management for tensors and models.
5
+ * Features:
6
+ * - Memory pooling
7
+ * - Automatic garbage collection
8
+ * - Memory tracking and statistics
9
+ * - Leak detection
10
+ */
11
+ /**
12
+ * Default memory pool configuration
13
+ */
14
+ const DEFAULT_POOL_CONFIG = {
15
+ initialSize: 64 * 1024 * 1024, // 64MB
16
+ maxSize: 512 * 1024 * 1024, // 512MB
17
+ growthFactor: 1.5,
18
+ autoGC: true,
19
+ gcThreshold: 0.8, // 80%
20
+ };
21
+ // ============================================================================
22
+ // Memory Manager
23
+ // ============================================================================
24
+ /**
25
+ * MemoryManager - Central memory management
26
+ *
27
+ * Provides:
28
+ * - Resource tracking
29
+ * - Memory statistics
30
+ * - Garbage collection coordination
31
+ * - Memory warning events
32
+ */
33
+ export class MemoryManager {
34
+ static instance = null;
35
+ config;
36
+ resources = new Map();
37
+ disposers = new Map();
38
+ listeners = new Map();
39
+ allocated = 0;
40
+ peak = 0;
41
+ gcScheduled = false;
42
+ disposed = false;
43
+ constructor(config = {}) {
44
+ this.config = { ...DEFAULT_POOL_CONFIG, ...config };
45
+ }
46
+ /**
47
+ * Get singleton instance
48
+ */
49
+ static getInstance() {
50
+ if (!MemoryManager.instance) {
51
+ MemoryManager.instance = new MemoryManager();
52
+ }
53
+ return MemoryManager.instance;
54
+ }
55
+ /**
56
+ * Configure the memory manager
57
+ */
58
+ static configure(config) {
59
+ if (MemoryManager.instance) {
60
+ console.warn('MemoryManager already initialized, configuration may not apply');
61
+ }
62
+ MemoryManager.instance = new MemoryManager(config);
63
+ }
64
+ /**
65
+ * Track a tensor
66
+ */
67
+ track(tensor, disposer) {
68
+ if (this.disposed)
69
+ return;
70
+ const size = this.estimateTensorSize(tensor);
71
+ this.resources.set(tensor.id, {
72
+ id: tensor.id,
73
+ type: 'tensor',
74
+ size,
75
+ createdAt: Date.now(),
76
+ stackTrace: this.captureStackTrace(),
77
+ });
78
+ if (disposer) {
79
+ this.disposers.set(tensor.id, disposer);
80
+ }
81
+ this.allocated += size;
82
+ this.peak = Math.max(this.peak, this.allocated);
83
+ this.checkMemoryThreshold();
84
+ }
85
+ /**
86
+ * Track a model
87
+ */
88
+ trackModel(model, disposer) {
89
+ if (this.disposed)
90
+ return;
91
+ const size = model.metadata.sizeBytes;
92
+ this.resources.set(model.id, {
93
+ id: model.id,
94
+ type: 'model',
95
+ size,
96
+ createdAt: Date.now(),
97
+ stackTrace: this.captureStackTrace(),
98
+ });
99
+ if (disposer) {
100
+ this.disposers.set(model.id, disposer);
101
+ }
102
+ this.allocated += size;
103
+ this.peak = Math.max(this.peak, this.allocated);
104
+ this.checkMemoryThreshold();
105
+ }
106
+ /**
107
+ * Untrack a resource
108
+ */
109
+ untrack(id) {
110
+ const resource = this.resources.get(id);
111
+ if (resource) {
112
+ this.allocated -= resource.size;
113
+ this.resources.delete(id);
114
+ this.disposers.delete(id);
115
+ }
116
+ }
117
+ /**
118
+ * Release a resource
119
+ */
120
+ release(resourceOrId) {
121
+ const id = typeof resourceOrId === 'string' ? resourceOrId : resourceOrId.id;
122
+ const disposer = this.disposers.get(id);
123
+ if (disposer) {
124
+ try {
125
+ disposer();
126
+ }
127
+ catch (error) {
128
+ console.error('Error disposing resource:', error);
129
+ }
130
+ }
131
+ this.untrack(id);
132
+ }
133
+ /**
134
+ * Estimate tensor memory size
135
+ */
136
+ estimateTensorSize(tensor) {
137
+ const bytesPerElement = this.getBytesPerElement(tensor.dtype);
138
+ return tensor.size * bytesPerElement;
139
+ }
140
+ /**
141
+ * Get bytes per element for a data type
142
+ */
143
+ getBytesPerElement(dtype) {
144
+ switch (dtype) {
145
+ case 'float32':
146
+ return 4;
147
+ case 'float16':
148
+ return 2;
149
+ case 'int32':
150
+ return 4;
151
+ case 'int64':
152
+ return 8;
153
+ case 'uint8':
154
+ case 'int8':
155
+ case 'bool':
156
+ return 1;
157
+ default:
158
+ return 4;
159
+ }
160
+ }
161
+ /**
162
+ * Capture stack trace for debugging
163
+ */
164
+ captureStackTrace() {
165
+ if (typeof Error.captureStackTrace === 'function') {
166
+ const obj = {};
167
+ Error.captureStackTrace(obj, this.captureStackTrace);
168
+ return obj.stack;
169
+ }
170
+ return new Error().stack;
171
+ }
172
+ /**
173
+ * Check if memory threshold is exceeded
174
+ */
175
+ checkMemoryThreshold() {
176
+ if (!this.config.autoGC)
177
+ return;
178
+ const usage = this.allocated / this.config.maxSize;
179
+ if (usage >= this.config.gcThreshold && !this.gcScheduled) {
180
+ this.gcScheduled = true;
181
+ this.emit('memory:warning', {
182
+ allocated: this.allocated,
183
+ maxSize: this.config.maxSize,
184
+ usage,
185
+ });
186
+ // Schedule GC on next tick
187
+ setTimeout(() => {
188
+ this.gc();
189
+ this.gcScheduled = false;
190
+ }, 0);
191
+ }
192
+ }
193
+ /**
194
+ * Garbage collection helper
195
+ */
196
+ gc() {
197
+ this.emit('memory:gc', { before: this.allocated });
198
+ // In browser environment, we can only suggest GC
199
+ // by releasing unused resources
200
+ // Find old resources that might be unused
201
+ const now = Date.now();
202
+ const oldResources = [];
203
+ for (const [id, resource] of this.resources) {
204
+ // Resources older than 5 minutes might be candidates for cleanup
205
+ if (now - resource.createdAt > 5 * 60 * 1000) {
206
+ oldResources.push(id);
207
+ }
208
+ }
209
+ // Note: We don't automatically release old resources
210
+ // This is just for reporting purposes
211
+ // Actual cleanup should be done by the user
212
+ this.emit('memory:gc', {
213
+ after: this.allocated,
214
+ potentialCleanup: oldResources.length,
215
+ });
216
+ }
217
+ /**
218
+ * Get memory statistics
219
+ */
220
+ getStats() {
221
+ let tensorCount = 0;
222
+ let modelCount = 0;
223
+ for (const resource of this.resources.values()) {
224
+ if (resource.type === 'tensor') {
225
+ tensorCount++;
226
+ }
227
+ else {
228
+ modelCount++;
229
+ }
230
+ }
231
+ return {
232
+ allocated: this.allocated,
233
+ used: this.allocated, // In JS, allocated = used
234
+ peak: this.peak,
235
+ tensorCount,
236
+ modelCount,
237
+ };
238
+ }
239
+ /**
240
+ * Get detailed resource list (for debugging)
241
+ */
242
+ getResourceDetails() {
243
+ return Array.from(this.resources.values());
244
+ }
245
+ /**
246
+ * Check for potential memory leaks
247
+ */
248
+ detectLeaks(maxAge = 10 * 60 * 1000) {
249
+ const now = Date.now();
250
+ const potentialLeaks = [];
251
+ for (const resource of this.resources.values()) {
252
+ if (now - resource.createdAt > maxAge) {
253
+ potentialLeaks.push(resource);
254
+ }
255
+ }
256
+ return potentialLeaks;
257
+ }
258
+ /**
259
+ * Add event listener
260
+ */
261
+ on(event, listener) {
262
+ let listeners = this.listeners.get(event);
263
+ if (!listeners) {
264
+ listeners = new Set();
265
+ this.listeners.set(event, listeners);
266
+ }
267
+ listeners.add(listener);
268
+ }
269
+ /**
270
+ * Remove event listener
271
+ */
272
+ off(event, listener) {
273
+ const listeners = this.listeners.get(event);
274
+ if (listeners) {
275
+ listeners.delete(listener);
276
+ }
277
+ }
278
+ /**
279
+ * Emit event
280
+ */
281
+ emit(type, data) {
282
+ const event = {
283
+ type,
284
+ timestamp: Date.now(),
285
+ data,
286
+ };
287
+ const listeners = this.listeners.get(type);
288
+ if (listeners) {
289
+ for (const listener of listeners) {
290
+ try {
291
+ listener(event);
292
+ }
293
+ catch (error) {
294
+ console.error('Error in event listener:', error);
295
+ }
296
+ }
297
+ }
298
+ }
299
+ /**
300
+ * Reset statistics
301
+ */
302
+ resetStats() {
303
+ this.peak = this.allocated;
304
+ }
305
+ /**
306
+ * Dispose all resources
307
+ */
308
+ disposeAll() {
309
+ for (const id of this.resources.keys()) {
310
+ this.release(id);
311
+ }
312
+ }
313
+ /**
314
+ * Dispose the manager
315
+ */
316
+ dispose() {
317
+ this.disposeAll();
318
+ this.disposed = true;
319
+ this.listeners.clear();
320
+ MemoryManager.instance = null;
321
+ }
322
+ }
323
+ // ============================================================================
324
+ // Memory Scope (RAII-like pattern)
325
+ // ============================================================================
326
+ /**
327
+ * Memory scope for automatic resource cleanup
328
+ *
329
+ * Usage:
330
+ * ```typescript
331
+ * const result = await withMemoryScope(async (scope) => {
332
+ * const tensor1 = scope.track(createTensor(...));
333
+ * const tensor2 = scope.track(createTensor(...));
334
+ * // Process tensors
335
+ * return computeResult(tensor1, tensor2);
336
+ * });
337
+ * // tensor1 and tensor2 are automatically disposed
338
+ * ```
339
+ */
340
+ export class MemoryScope {
341
+ resources = [];
342
+ children = [];
343
+ parent = null;
344
+ constructor(parent) {
345
+ if (parent) {
346
+ this.parent = parent;
347
+ parent.children.push(this);
348
+ }
349
+ }
350
+ /**
351
+ * Track a resource in this scope
352
+ */
353
+ track(resource) {
354
+ this.resources.push(resource);
355
+ return resource;
356
+ }
357
+ /**
358
+ * Create a child scope
359
+ */
360
+ createChild() {
361
+ return new MemoryScope(this);
362
+ }
363
+ /**
364
+ * Keep a resource (don't dispose it when scope ends)
365
+ */
366
+ keep(resource) {
367
+ const index = this.resources.indexOf(resource);
368
+ if (index !== -1) {
369
+ this.resources.splice(index, 1);
370
+ }
371
+ return resource;
372
+ }
373
+ /**
374
+ * Dispose all resources in this scope
375
+ */
376
+ dispose() {
377
+ // Dispose children first
378
+ for (const child of this.children) {
379
+ child.dispose();
380
+ }
381
+ this.children = [];
382
+ // Dispose resources in reverse order
383
+ for (let i = this.resources.length - 1; i >= 0; i--) {
384
+ try {
385
+ this.resources[i]?.dispose();
386
+ }
387
+ catch (error) {
388
+ console.error('Error disposing resource in scope:', error);
389
+ }
390
+ }
391
+ this.resources = [];
392
+ // Remove from parent
393
+ if (this.parent) {
394
+ const index = this.parent.children.indexOf(this);
395
+ if (index !== -1) {
396
+ this.parent.children.splice(index, 1);
397
+ }
398
+ this.parent = null;
399
+ }
400
+ }
401
+ }
402
+ /**
403
+ * Execute a function with automatic memory cleanup
404
+ */
405
+ export async function withMemoryScope(fn) {
406
+ const scope = new MemoryScope();
407
+ try {
408
+ return await fn(scope);
409
+ }
410
+ finally {
411
+ scope.dispose();
412
+ }
413
+ }
414
+ /**
415
+ * Synchronous version of withMemoryScope
416
+ */
417
+ export function withMemoryScopeSync(fn) {
418
+ const scope = new MemoryScope();
419
+ try {
420
+ return fn(scope);
421
+ }
422
+ finally {
423
+ scope.dispose();
424
+ }
425
+ }
426
+ // ============================================================================
427
+ // LRU Cache for Models
428
+ // ============================================================================
429
+ /**
430
+ * LRU Cache for loaded models
431
+ */
432
+ export class ModelCache {
433
+ maxSize;
434
+ maxModels;
435
+ cache = new Map();
436
+ currentSize = 0;
437
+ constructor(options = {}) {
438
+ this.maxSize = options.maxSize ?? 256 * 1024 * 1024; // 256MB default
439
+ this.maxModels = options.maxModels ?? 5;
440
+ }
441
+ /**
442
+ * Get a model from cache
443
+ */
444
+ get(key) {
445
+ const entry = this.cache.get(key);
446
+ if (entry) {
447
+ entry.lastAccess = Date.now();
448
+ return entry.model;
449
+ }
450
+ return undefined;
451
+ }
452
+ /**
453
+ * Add a model to cache
454
+ */
455
+ set(key, model) {
456
+ const size = model.metadata.sizeBytes;
457
+ // Check if we need to evict
458
+ while ((this.currentSize + size > this.maxSize || this.cache.size >= this.maxModels) &&
459
+ this.cache.size > 0) {
460
+ this.evictLRU();
461
+ }
462
+ // Add to cache
463
+ this.cache.set(key, {
464
+ model,
465
+ size,
466
+ lastAccess: Date.now(),
467
+ });
468
+ this.currentSize += size;
469
+ }
470
+ /**
471
+ * Remove a model from cache
472
+ */
473
+ delete(key) {
474
+ const entry = this.cache.get(key);
475
+ if (entry) {
476
+ entry.model.dispose();
477
+ this.currentSize -= entry.size;
478
+ this.cache.delete(key);
479
+ return true;
480
+ }
481
+ return false;
482
+ }
483
+ /**
484
+ * Check if model is in cache
485
+ */
486
+ has(key) {
487
+ return this.cache.has(key);
488
+ }
489
+ /**
490
+ * Evict least recently used model
491
+ */
492
+ evictLRU() {
493
+ let oldestKey = null;
494
+ let oldestTime = Infinity;
495
+ for (const [key, entry] of this.cache) {
496
+ if (entry.lastAccess < oldestTime) {
497
+ oldestTime = entry.lastAccess;
498
+ oldestKey = key;
499
+ }
500
+ }
501
+ if (oldestKey) {
502
+ this.delete(oldestKey);
503
+ }
504
+ }
505
+ /**
506
+ * Clear the cache
507
+ */
508
+ clear() {
509
+ for (const entry of this.cache.values()) {
510
+ entry.model.dispose();
511
+ }
512
+ this.cache.clear();
513
+ this.currentSize = 0;
514
+ }
515
+ /**
516
+ * Get cache statistics
517
+ */
518
+ getStats() {
519
+ return {
520
+ size: this.currentSize,
521
+ count: this.cache.size,
522
+ maxSize: this.maxSize,
523
+ maxModels: this.maxModels,
524
+ };
525
+ }
526
+ }
527
+ // ============================================================================
528
+ // Convenience Functions
529
+ // ============================================================================
530
+ /**
531
+ * Get memory manager instance
532
+ */
533
+ export function getMemoryManager() {
534
+ return MemoryManager.getInstance();
535
+ }
536
+ /**
537
+ * Get memory statistics
538
+ */
539
+ export function getMemoryStats() {
540
+ return MemoryManager.getInstance().getStats();
541
+ }
542
+ /**
543
+ * Release a resource
544
+ */
545
+ export function release(resource) {
546
+ MemoryManager.getInstance().release(resource);
547
+ }
548
+ /**
549
+ * Force garbage collection hint
550
+ */
551
+ export function gc() {
552
+ MemoryManager.getInstance().gc();
553
+ }
554
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * edgeFlow.js - Runtime Management
3
+ *
4
+ * Manages runtime backends and automatic selection.
5
+ * Provides unified interface for different compute backends.
6
+ */
7
+ import { Runtime, RuntimeType, RuntimeCapabilities, LoadedModel, ModelLoadOptions, ModelMetadata, Tensor, EventType, EventListener } from './types.js';
8
+ /**
9
+ * RuntimeManager - Manages runtime selection and lifecycle
10
+ *
11
+ * Features:
12
+ * - Automatic best runtime selection
13
+ * - Runtime registration
14
+ * - Capability detection
15
+ * - Fallback handling
16
+ */
17
+ export declare class RuntimeManager {
18
+ private static instance;
19
+ private readonly listeners;
20
+ private defaultRuntime;
21
+ private constructor();
22
+ /**
23
+ * Get singleton instance
24
+ */
25
+ static getInstance(): RuntimeManager;
26
+ /**
27
+ * Register a runtime factory
28
+ */
29
+ register(type: RuntimeType, factory: () => Runtime): void;
30
+ /**
31
+ * Get a runtime instance
32
+ */
33
+ getRuntime(type?: RuntimeType): Promise<Runtime>;
34
+ /**
35
+ * Get the best available runtime
36
+ */
37
+ getBestRuntime(): Promise<Runtime>;
38
+ /**
39
+ * Check which runtimes are available
40
+ */
41
+ detectAvailableRuntimes(): Promise<Map<RuntimeType, boolean>>;
42
+ /**
43
+ * Get capabilities of a runtime
44
+ */
45
+ getCapabilities(type: RuntimeType): Promise<RuntimeCapabilities>;
46
+ /**
47
+ * Set default runtime
48
+ */
49
+ setDefaultRuntime(type: RuntimeType): void;
50
+ /**
51
+ * Get default runtime type
52
+ */
53
+ getDefaultRuntimeType(): RuntimeType;
54
+ /**
55
+ * Dispose a specific runtime
56
+ */
57
+ disposeRuntime(type: RuntimeType): void;
58
+ /**
59
+ * Dispose all runtimes
60
+ */
61
+ disposeAll(): void;
62
+ /**
63
+ * Add event listener
64
+ */
65
+ on<T = unknown>(event: EventType, listener: EventListener<T>): void;
66
+ /**
67
+ * Remove event listener
68
+ */
69
+ off<T = unknown>(event: EventType, listener: EventListener<T>): void;
70
+ /**
71
+ * Emit event
72
+ */
73
+ private emit;
74
+ }
75
+ /**
76
+ * LoadedModelImpl - Implementation of LoadedModel interface
77
+ */
78
+ export declare class LoadedModelImpl implements LoadedModel {
79
+ readonly id: string;
80
+ readonly metadata: ModelMetadata;
81
+ readonly runtime: RuntimeType;
82
+ private _isLoaded;
83
+ private readonly _dispose;
84
+ constructor(metadata: ModelMetadata, runtime: RuntimeType, dispose: () => void);
85
+ get isLoaded(): boolean;
86
+ dispose(): void;
87
+ }
88
+ /**
89
+ * Load model from URL with advanced loading support
90
+ * (caching, sharding, resume download)
91
+ */
92
+ export declare function loadModel(url: string, options?: ModelLoadOptions & {
93
+ runtime?: RuntimeType;
94
+ cache?: boolean;
95
+ resumable?: boolean;
96
+ chunkSize?: number;
97
+ forceDownload?: boolean;
98
+ }): Promise<LoadedModel>;
99
+ /**
100
+ * Load model from ArrayBuffer
101
+ */
102
+ export declare function loadModelFromBuffer(data: ArrayBuffer, options?: ModelLoadOptions & {
103
+ runtime?: RuntimeType;
104
+ }): Promise<LoadedModel>;
105
+ /**
106
+ * Run inference on a model
107
+ */
108
+ export declare function runInference(model: LoadedModel, inputs: Tensor[]): Promise<Tensor[]>;
109
+ /**
110
+ * Run inference with batch processing
111
+ */
112
+ export declare function runBatchInference(model: LoadedModel, batches: Tensor[][]): Promise<Tensor[][]>;
113
+ /**
114
+ * Get runtime manager instance
115
+ */
116
+ export declare function getRuntimeManager(): RuntimeManager;
117
+ /**
118
+ * Register a runtime
119
+ */
120
+ export declare function registerRuntime(type: RuntimeType, factory: () => Runtime): void;
121
+ /**
122
+ * Get the best available runtime
123
+ */
124
+ export declare function getBestRuntime(): Promise<Runtime>;
125
+ /**
126
+ * Check available runtimes
127
+ */
128
+ export declare function getAvailableRuntimes(): Promise<Map<RuntimeType, boolean>>;
129
+ //# sourceMappingURL=runtime.d.ts.map