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,197 @@
1
+ /**
2
+ * edgeFlow.js - Feature Extraction Pipeline
3
+ *
4
+ * Extract embeddings/features from text, images, or other data.
5
+ */
6
+ import { EdgeFlowTensor } from '../core/tensor.js';
7
+ import { createBasicTokenizer } from '../utils/tokenizer.js';
8
+ import { BasePipeline, registerPipeline, } from './base.js';
9
+ /**
10
+ * FeatureExtractionPipeline - Extract embeddings from text
11
+ */
12
+ export class FeatureExtractionPipeline extends BasePipeline {
13
+ tokenizer = null;
14
+ embeddingDim;
15
+ constructor(config, embeddingDim = 768) {
16
+ super(config);
17
+ this.embeddingDim = embeddingDim;
18
+ }
19
+ /**
20
+ * Initialize pipeline
21
+ */
22
+ async initialize() {
23
+ await super.initialize();
24
+ if (!this.tokenizer) {
25
+ this.tokenizer = createBasicTokenizer();
26
+ }
27
+ }
28
+ /**
29
+ * Run feature extraction
30
+ */
31
+ async run(input, options) {
32
+ const isBatch = Array.isArray(input);
33
+ const inputs = isBatch ? input : [input];
34
+ await this.initialize();
35
+ const startTime = performance.now();
36
+ const results = [];
37
+ for (const text of inputs) {
38
+ // Preprocess
39
+ const tensorInputs = await this.preprocess(text);
40
+ // Run inference
41
+ const outputs = await this.runInference(tensorInputs);
42
+ // Postprocess
43
+ const result = await this.postprocess(outputs, options);
44
+ results.push(result);
45
+ }
46
+ const processingTime = performance.now() - startTime;
47
+ for (const result of results) {
48
+ result.processingTime = processingTime / results.length;
49
+ }
50
+ return isBatch ? results : results[0];
51
+ }
52
+ /**
53
+ * Preprocess text input
54
+ */
55
+ async preprocess(input) {
56
+ const text = Array.isArray(input) ? input[0] : input;
57
+ const encoded = this.tokenizer.encode(text, {
58
+ maxLength: 128,
59
+ padding: 'max_length',
60
+ truncation: true,
61
+ });
62
+ const inputIds = new EdgeFlowTensor(new Float32Array(encoded.inputIds), [1, encoded.inputIds.length], 'float32');
63
+ const attentionMask = new EdgeFlowTensor(new Float32Array(encoded.attentionMask), [1, encoded.attentionMask.length], 'float32');
64
+ return [inputIds, attentionMask];
65
+ }
66
+ /**
67
+ * Run model inference
68
+ */
69
+ async runInference(inputs) {
70
+ // Generate mock embeddings for demo
71
+ // In production, this would call the actual model
72
+ const seqLen = inputs[0]?.shape[1] ?? 128;
73
+ const embeddings = new Float32Array(seqLen * this.embeddingDim);
74
+ // Generate deterministic pseudo-embeddings based on input
75
+ const inputData = inputs[0]?.toFloat32Array() ?? new Float32Array(0);
76
+ for (let i = 0; i < seqLen; i++) {
77
+ for (let j = 0; j < this.embeddingDim; j++) {
78
+ const inputVal = inputData[i] ?? 0;
79
+ embeddings[i * this.embeddingDim + j] =
80
+ Math.sin(inputVal * (j + 1) * 0.01) * 0.1;
81
+ }
82
+ }
83
+ return [new EdgeFlowTensor(embeddings, [1, seqLen, this.embeddingDim], 'float32')];
84
+ }
85
+ /**
86
+ * Postprocess model outputs
87
+ */
88
+ async postprocess(outputs, options) {
89
+ const hiddenStates = outputs[0];
90
+ if (!hiddenStates) {
91
+ return { embeddings: [] };
92
+ }
93
+ const pooling = options?.pooling ?? 'mean';
94
+ const normalize = options?.normalize ?? true;
95
+ let embeddings;
96
+ switch (pooling) {
97
+ case 'cls':
98
+ // Use first token (CLS) embedding
99
+ embeddings = this.extractCLSEmbedding(hiddenStates);
100
+ break;
101
+ case 'max':
102
+ // Max pooling
103
+ embeddings = this.maxPooling(hiddenStates);
104
+ break;
105
+ case 'none':
106
+ // Return all token embeddings (flattened)
107
+ embeddings = hiddenStates.toArray();
108
+ break;
109
+ case 'mean':
110
+ default:
111
+ // Mean pooling
112
+ embeddings = this.meanPooling(hiddenStates);
113
+ break;
114
+ }
115
+ // Normalize if requested
116
+ if (normalize) {
117
+ embeddings = this.normalizeVector(embeddings);
118
+ }
119
+ // Dimension reduction if requested
120
+ if (options?.outputDim && options.outputDim < embeddings.length) {
121
+ embeddings = embeddings.slice(0, options.outputDim);
122
+ }
123
+ return { embeddings };
124
+ }
125
+ /**
126
+ * Extract CLS token embedding
127
+ */
128
+ extractCLSEmbedding(hiddenStates) {
129
+ const data = hiddenStates.toFloat32Array();
130
+ const embeddingDim = hiddenStates.shape[2] ?? this.embeddingDim;
131
+ return Array.from(data.slice(0, embeddingDim));
132
+ }
133
+ /**
134
+ * Mean pooling over sequence
135
+ */
136
+ meanPooling(hiddenStates) {
137
+ const data = hiddenStates.toFloat32Array();
138
+ const seqLen = hiddenStates.shape[1] ?? 1;
139
+ const embeddingDim = hiddenStates.shape[2] ?? this.embeddingDim;
140
+ const result = new Float32Array(embeddingDim);
141
+ for (let i = 0; i < seqLen; i++) {
142
+ for (let j = 0; j < embeddingDim; j++) {
143
+ result[j] = (result[j] ?? 0) + (data[i * embeddingDim + j] ?? 0) / seqLen;
144
+ }
145
+ }
146
+ return Array.from(result);
147
+ }
148
+ /**
149
+ * Max pooling over sequence
150
+ */
151
+ maxPooling(hiddenStates) {
152
+ const data = hiddenStates.toFloat32Array();
153
+ const seqLen = hiddenStates.shape[1] ?? 1;
154
+ const embeddingDim = hiddenStates.shape[2] ?? this.embeddingDim;
155
+ const result = new Array(embeddingDim).fill(-Infinity);
156
+ for (let i = 0; i < seqLen; i++) {
157
+ for (let j = 0; j < embeddingDim; j++) {
158
+ const val = data[i * embeddingDim + j] ?? 0;
159
+ if (val > (result[j] ?? -Infinity)) {
160
+ result[j] = val;
161
+ }
162
+ }
163
+ }
164
+ return result;
165
+ }
166
+ /**
167
+ * L2 normalize vector
168
+ */
169
+ normalizeVector(vec) {
170
+ let norm = 0;
171
+ for (const v of vec) {
172
+ norm += v * v;
173
+ }
174
+ norm = Math.sqrt(norm);
175
+ if (norm === 0)
176
+ return vec;
177
+ return vec.map(v => v / norm);
178
+ }
179
+ }
180
+ // ============================================================================
181
+ // Factory Function
182
+ // ============================================================================
183
+ /**
184
+ * Create feature extraction pipeline
185
+ */
186
+ export function createFeatureExtractionPipeline(config = {}) {
187
+ return new FeatureExtractionPipeline({
188
+ task: 'feature-extraction',
189
+ model: config.model ?? 'default',
190
+ runtime: config.runtime,
191
+ cache: config.cache ?? true,
192
+ quantization: config.quantization,
193
+ });
194
+ }
195
+ // Register pipeline
196
+ registerPipeline('feature-extraction', (config) => new FeatureExtractionPipeline(config));
197
+ //# sourceMappingURL=feature-extraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-extraction.js","sourceRoot":"","sources":["../../src/pipelines/feature-extraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * edgeFlow.js - Image Classification Pipeline
3
+ *
4
+ * Classify images into categories using vision models.
5
+ */
6
+ import { PipelineConfig, PipelineOptions } from '../core/types.js';
7
+ import { EdgeFlowTensor } from '../core/tensor.js';
8
+ import { BasePipeline, ImageClassificationResult } from './base.js';
9
+ /**
10
+ * Image classification options
11
+ */
12
+ export interface ImageClassificationOptions extends PipelineOptions {
13
+ /** Return all labels with scores */
14
+ returnAllScores?: boolean;
15
+ /** Custom labels */
16
+ labels?: string[];
17
+ /** Number of top predictions to return */
18
+ topK?: number;
19
+ }
20
+ /**
21
+ * Image classification input types
22
+ */
23
+ export type ImageInput = HTMLImageElement | HTMLCanvasElement | ImageBitmap | ImageData | string;
24
+ /**
25
+ * ImageClassificationPipeline - Classify images
26
+ */
27
+ export declare class ImageClassificationPipeline extends BasePipeline<ImageInput | ImageInput[], ImageClassificationResult | ImageClassificationResult[]> {
28
+ private preprocessor;
29
+ private labels;
30
+ private numClasses;
31
+ constructor(config: PipelineConfig, labels?: string[], numClasses?: number);
32
+ /**
33
+ * Initialize pipeline
34
+ */
35
+ initialize(): Promise<void>;
36
+ /**
37
+ * Set custom labels
38
+ */
39
+ setLabels(labels: string[]): void;
40
+ /**
41
+ * Run classification
42
+ */
43
+ run(input: ImageInput | ImageInput[], options?: ImageClassificationOptions): Promise<ImageClassificationResult | ImageClassificationResult[]>;
44
+ /**
45
+ * Preprocess image input
46
+ */
47
+ protected preprocess(input: ImageInput | ImageInput[]): Promise<EdgeFlowTensor[]>;
48
+ /**
49
+ * Run model inference
50
+ */
51
+ private runInference;
52
+ /**
53
+ * Postprocess model outputs
54
+ */
55
+ protected postprocess(outputs: EdgeFlowTensor[], options?: ImageClassificationOptions): Promise<ImageClassificationResult>;
56
+ }
57
+ /**
58
+ * Create image classification pipeline
59
+ */
60
+ export declare function createImageClassificationPipeline(config?: Partial<PipelineConfig>, labels?: string[]): ImageClassificationPipeline;
61
+ //# sourceMappingURL=image-classification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-classification.d.ts","sourceRoot":"","sources":["../../src/pipelines/image-classification.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAW,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EACL,YAAY,EACZ,yBAAyB,EAG1B,MAAM,WAAW,CAAC;AAMnB;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,eAAe;IACjE,oCAAoC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,MAAM,CAAC;AAEX;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,YAAY,CAC3D,UAAU,GAAG,UAAU,EAAE,EACzB,yBAAyB,GAAG,yBAAyB,EAAE,CACxD;IACC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAS;gBAGzB,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,MAAM,EAAE,EACjB,UAAU,GAAE,MAAa;IAO3B;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKjC;;OAEG;IACY,GAAG,CAChB,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,EAChC,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,yBAAyB,GAAG,yBAAyB,EAAE,CAAC;IA8BnE;;OAEG;cACsB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAchG;;OAEG;YACW,YAAY;IAmB1B;;OAEG;cACsB,WAAW,CAClC,OAAO,EAAE,cAAc,EAAE,EACzB,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,yBAAyB,CAAC;CAkCtC;AAMD;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,EACpC,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,2BAA2B,CAW7B"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * edgeFlow.js - Image Classification Pipeline
3
+ *
4
+ * Classify images into categories using vision models.
5
+ */
6
+ import { EdgeFlowTensor, softmax } from '../core/tensor.js';
7
+ import { createImagePreprocessor } from '../utils/preprocessor.js';
8
+ import { BasePipeline, registerPipeline, IMAGENET_LABELS, } from './base.js';
9
+ /**
10
+ * ImageClassificationPipeline - Classify images
11
+ */
12
+ export class ImageClassificationPipeline extends BasePipeline {
13
+ preprocessor = null;
14
+ labels;
15
+ numClasses;
16
+ constructor(config, labels, numClasses = 1000) {
17
+ super(config);
18
+ this.labels = labels ?? IMAGENET_LABELS;
19
+ this.numClasses = numClasses;
20
+ }
21
+ /**
22
+ * Initialize pipeline
23
+ */
24
+ async initialize() {
25
+ await super.initialize();
26
+ if (!this.preprocessor) {
27
+ this.preprocessor = createImagePreprocessor('imagenet');
28
+ }
29
+ }
30
+ /**
31
+ * Set custom labels
32
+ */
33
+ setLabels(labels) {
34
+ this.labels = labels;
35
+ this.numClasses = labels.length;
36
+ }
37
+ /**
38
+ * Run classification
39
+ */
40
+ async run(input, options) {
41
+ const isBatch = Array.isArray(input);
42
+ const inputs = isBatch ? input : [input];
43
+ await this.initialize();
44
+ const startTime = performance.now();
45
+ const results = [];
46
+ for (const image of inputs) {
47
+ // Preprocess
48
+ const tensorInputs = await this.preprocess(image);
49
+ // Run inference
50
+ const outputs = await this.runInference(tensorInputs);
51
+ // Postprocess
52
+ const result = await this.postprocess(outputs, options);
53
+ results.push(result);
54
+ }
55
+ const processingTime = performance.now() - startTime;
56
+ for (const result of results) {
57
+ result.processingTime = processingTime / results.length;
58
+ }
59
+ return isBatch ? results : results[0];
60
+ }
61
+ /**
62
+ * Preprocess image input
63
+ */
64
+ async preprocess(input) {
65
+ const image = Array.isArray(input) ? input[0] : input;
66
+ // Process image
67
+ const tensor = await this.preprocessor.process(image);
68
+ // Add batch dimension if needed
69
+ if (tensor.shape.length === 3) {
70
+ return [tensor.reshape([1, ...tensor.shape])];
71
+ }
72
+ return [tensor];
73
+ }
74
+ /**
75
+ * Run model inference
76
+ */
77
+ async runInference(inputs) {
78
+ // Generate mock classification logits for demo
79
+ // In production, this would call the actual model
80
+ const logits = new Float32Array(this.numClasses);
81
+ // Generate deterministic pseudo-logits based on input
82
+ const inputData = inputs[0]?.toFloat32Array() ?? new Float32Array(0);
83
+ let sum = 0;
84
+ for (let i = 0; i < Math.min(1000, inputData.length); i++) {
85
+ sum += inputData[i] ?? 0;
86
+ }
87
+ for (let i = 0; i < this.numClasses; i++) {
88
+ logits[i] = Math.sin(sum * (i + 1) * 0.1) * 3;
89
+ }
90
+ return [new EdgeFlowTensor(logits, [1, this.numClasses], 'float32')];
91
+ }
92
+ /**
93
+ * Postprocess model outputs
94
+ */
95
+ async postprocess(outputs, options) {
96
+ const logits = outputs[0];
97
+ if (!logits) {
98
+ return { label: 'unknown', score: 0 };
99
+ }
100
+ // Apply softmax
101
+ const probs = softmax(logits, -1);
102
+ const probsArray = probs.toFloat32Array();
103
+ const topK = options?.topK ?? 1;
104
+ if (topK > 1 || options?.returnAllScores) {
105
+ // Return top-K results (simplified to top-1 here)
106
+ }
107
+ // Find argmax
108
+ let maxIdx = 0;
109
+ let maxScore = probsArray[0] ?? 0;
110
+ for (let i = 1; i < probsArray.length; i++) {
111
+ if ((probsArray[i] ?? 0) > maxScore) {
112
+ maxScore = probsArray[i] ?? 0;
113
+ maxIdx = i;
114
+ }
115
+ }
116
+ const label = options?.labels?.[maxIdx] ?? this.labels[maxIdx] ?? `class_${maxIdx}`;
117
+ return {
118
+ label,
119
+ score: maxScore,
120
+ };
121
+ }
122
+ }
123
+ // ============================================================================
124
+ // Factory Function
125
+ // ============================================================================
126
+ /**
127
+ * Create image classification pipeline
128
+ */
129
+ export function createImageClassificationPipeline(config = {}, labels) {
130
+ return new ImageClassificationPipeline({
131
+ task: 'image-classification',
132
+ model: config.model ?? 'default',
133
+ runtime: config.runtime,
134
+ cache: config.cache ?? true,
135
+ quantization: config.quantization,
136
+ }, labels);
137
+ }
138
+ // Register pipeline
139
+ registerPipeline('image-classification', (config) => new ImageClassificationPipeline(config));
140
+ //# sourceMappingURL=image-classification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-classification.js","sourceRoot":"","sources":["../../src/pipelines/image-classification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * edgeFlow.js - Pipeline Exports
3
+ */
4
+ import { RuntimeType, QuantizationType } from '../core/types.js';
5
+ export { BasePipeline, registerPipeline, getPipelineFactory, SENTIMENT_LABELS, EMOTION_LABELS, IMAGENET_LABELS, type PipelineResult, type TextClassificationResult, type FeatureExtractionResult, type ImageClassificationResult, type ObjectDetectionResult, } from './base.js';
6
+ export { TextClassificationPipeline, SentimentAnalysisPipeline, createTextClassificationPipeline, createSentimentAnalysisPipeline, type TextClassificationOptions, } from './text-classification.js';
7
+ export { FeatureExtractionPipeline, createFeatureExtractionPipeline, type FeatureExtractionOptions, } from './feature-extraction.js';
8
+ export { ImageClassificationPipeline, createImageClassificationPipeline, type ImageClassificationOptions, type ImageInput, } from './image-classification.js';
9
+ /**
10
+ * Pipeline options for the factory function
11
+ */
12
+ export interface PipelineFactoryOptions {
13
+ /** Model ID or URL */
14
+ model?: string;
15
+ /** Runtime to use */
16
+ runtime?: RuntimeType;
17
+ /** Enable caching */
18
+ cache?: boolean;
19
+ /** Quantization type */
20
+ quantization?: QuantizationType;
21
+ /** Custom labels for classification */
22
+ labels?: string[];
23
+ }
24
+ /**
25
+ * Supported pipeline task mapping
26
+ */
27
+ type PipelineTaskMap = {
28
+ 'text-classification': TextClassificationPipeline;
29
+ 'sentiment-analysis': SentimentAnalysisPipeline;
30
+ 'feature-extraction': FeatureExtractionPipeline;
31
+ 'image-classification': ImageClassificationPipeline;
32
+ };
33
+ import { TextClassificationPipeline, SentimentAnalysisPipeline } from './text-classification.js';
34
+ import { FeatureExtractionPipeline } from './feature-extraction.js';
35
+ import { ImageClassificationPipeline } from './image-classification.js';
36
+ /**
37
+ * Create a pipeline for a specific task
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * // Create a sentiment analysis pipeline
42
+ * const sentiment = await pipeline('sentiment-analysis');
43
+ * const result = await sentiment.run('I love this product!');
44
+ *
45
+ * // Create an image classifier with custom model
46
+ * const classifier = await pipeline('image-classification', {
47
+ * model: 'https://example.com/model.bin',
48
+ * });
49
+ * ```
50
+ */
51
+ export declare function pipeline<T extends keyof PipelineTaskMap>(task: T, options?: PipelineFactoryOptions): Promise<PipelineTaskMap[T]>;
52
+ /**
53
+ * Create multiple pipelines at once
54
+ */
55
+ export declare function createPipelines<T extends (keyof PipelineTaskMap)[]>(tasks: T, options?: PipelineFactoryOptions): Promise<{
56
+ [K in T[number]]: PipelineTaskMap[K];
57
+ }>;
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,gCAAgC,EAChC,+BAA+B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,KAAK,0BAA0B,EAC/B,KAAK,UAAU,GAChB,MAAM,2BAA2B,CAAC;AAMnC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,qBAAqB;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG;IACrB,qBAAqB,EAAE,0BAA0B,CAAC;IAClD,oBAAoB,EAAE,yBAAyB,CAAC;IAChD,oBAAoB,EAAE,yBAAyB,CAAC;IAChD,sBAAsB,EAAE,2BAA2B,CAAC;CACrD,CAAC;AAGF,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAAC,CAAC,SAAS,MAAM,eAAe,EAC5D,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAgC7B;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,eAAe,CAAC,EAAE,EACvE,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC;KAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;CAAE,CAAC,CAanD"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * edgeFlow.js - Pipeline Exports
3
+ */
4
+ // Base
5
+ export { BasePipeline, registerPipeline, getPipelineFactory, SENTIMENT_LABELS, EMOTION_LABELS, IMAGENET_LABELS, } from './base.js';
6
+ // Text Classification
7
+ export { TextClassificationPipeline, SentimentAnalysisPipeline, createTextClassificationPipeline, createSentimentAnalysisPipeline, } from './text-classification.js';
8
+ // Feature Extraction
9
+ export { FeatureExtractionPipeline, createFeatureExtractionPipeline, } from './feature-extraction.js';
10
+ // Image Classification
11
+ export { ImageClassificationPipeline, createImageClassificationPipeline, } from './image-classification.js';
12
+ // Import pipeline classes
13
+ import { TextClassificationPipeline, SentimentAnalysisPipeline } from './text-classification.js';
14
+ import { FeatureExtractionPipeline } from './feature-extraction.js';
15
+ import { ImageClassificationPipeline } from './image-classification.js';
16
+ /**
17
+ * Create a pipeline for a specific task
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // Create a sentiment analysis pipeline
22
+ * const sentiment = await pipeline('sentiment-analysis');
23
+ * const result = await sentiment.run('I love this product!');
24
+ *
25
+ * // Create an image classifier with custom model
26
+ * const classifier = await pipeline('image-classification', {
27
+ * model: 'https://example.com/model.bin',
28
+ * });
29
+ * ```
30
+ */
31
+ export async function pipeline(task, options) {
32
+ const config = {
33
+ task: task,
34
+ model: options?.model ?? 'default',
35
+ runtime: options?.runtime,
36
+ cache: options?.cache ?? true,
37
+ quantization: options?.quantization,
38
+ };
39
+ let pipelineInstance;
40
+ switch (task) {
41
+ case 'text-classification':
42
+ pipelineInstance = new TextClassificationPipeline(config, options?.labels);
43
+ break;
44
+ case 'sentiment-analysis':
45
+ pipelineInstance = new SentimentAnalysisPipeline(config);
46
+ break;
47
+ case 'feature-extraction':
48
+ pipelineInstance = new FeatureExtractionPipeline(config);
49
+ break;
50
+ case 'image-classification':
51
+ pipelineInstance = new ImageClassificationPipeline(config, options?.labels);
52
+ break;
53
+ default:
54
+ throw new Error(`Unknown pipeline task: ${task}`);
55
+ }
56
+ // Initialize the pipeline
57
+ await pipelineInstance.initialize();
58
+ return pipelineInstance;
59
+ }
60
+ /**
61
+ * Create multiple pipelines at once
62
+ */
63
+ export async function createPipelines(tasks, options) {
64
+ const pipelines = await Promise.all(tasks.map(task => pipeline(task, options)));
65
+ const result = {};
66
+ for (let i = 0; i < tasks.length; i++) {
67
+ const task = tasks[i];
68
+ result[task] = pipelines[i];
69
+ }
70
+ return result;
71
+ }
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipelines/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO;AACP,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,GAMhB,MAAM,WAAW,CAAC;AAEnB,sBAAsB;AACtB,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,gCAAgC,EAChC,+BAA+B,GAEhC,MAAM,0BAA0B,CAAC;AAElC,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAEhC,MAAM,yBAAyB,CAAC;AAEjC,uBAAuB;AACvB,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,GAGlC,MAAM,2BAA2B,CAAC;AAgCnC,0BAA0B;AAC1B,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAO,EACP,OAAgC;IAEhC,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,IAAoB;QAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,SAAS;QAClC,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;KACpC,CAAC;IAEF,IAAI,gBAAkI,CAAC;IAEvI,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,qBAAqB;YACxB,gBAAgB,GAAG,IAAI,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3E,MAAM;QACR,KAAK,oBAAoB;YACvB,gBAAgB,GAAG,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM;QACR,KAAK,oBAAoB;YACvB,gBAAgB,GAAG,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM;QACR,KAAK,sBAAsB;YACzB,gBAAgB,GAAG,IAAI,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5E,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,0BAA0B;IAC1B,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAEpC,OAAO,gBAAsC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAQ,EACR,OAAgC;IAEhC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAC3C,CAAC;IAEF,MAAM,MAAM,GAAsD,EAAE,CAAC;IAErE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,CAAC,IAAiB,CAAC,GAAG,SAAS,CAAC,CAAC,CAA+B,CAAC;IACzE,CAAC;IAED,OAAO,MAAkD,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * edgeFlow.js - Text Classification Pipeline
3
+ *
4
+ * High-level API for text classification tasks including
5
+ * sentiment analysis, topic classification, etc.
6
+ */
7
+ import { PipelineConfig, PipelineOptions } from '../core/types.js';
8
+ import { EdgeFlowTensor } from '../core/tensor.js';
9
+ import { BasePipeline, TextClassificationResult } from './base.js';
10
+ /**
11
+ * Text classification options
12
+ */
13
+ export interface TextClassificationOptions extends PipelineOptions {
14
+ /** Return all labels with scores */
15
+ returnAllScores?: boolean;
16
+ /** Custom labels */
17
+ labels?: string[];
18
+ /** Number of labels to return */
19
+ topK?: number;
20
+ }
21
+ /**
22
+ * TextClassificationPipeline - Classify text into categories
23
+ */
24
+ export declare class TextClassificationPipeline extends BasePipeline<string | string[], TextClassificationResult | TextClassificationResult[]> {
25
+ private tokenizer;
26
+ private labels;
27
+ constructor(config: PipelineConfig, labels?: string[]);
28
+ /**
29
+ * Initialize pipeline
30
+ */
31
+ initialize(): Promise<void>;
32
+ /**
33
+ * Set custom labels
34
+ */
35
+ setLabels(labels: string[]): void;
36
+ /**
37
+ * Run classification
38
+ */
39
+ run(input: string | string[], options?: TextClassificationOptions): Promise<TextClassificationResult | TextClassificationResult[]>;
40
+ /**
41
+ * Preprocess text input
42
+ */
43
+ protected preprocess(input: string | string[]): Promise<EdgeFlowTensor[]>;
44
+ /**
45
+ * Run model inference
46
+ */
47
+ private runInference;
48
+ /**
49
+ * Postprocess model outputs
50
+ */
51
+ protected postprocess(outputs: EdgeFlowTensor[], options?: TextClassificationOptions): Promise<TextClassificationResult>;
52
+ }
53
+ /**
54
+ * SentimentAnalysisPipeline - Specialized for sentiment analysis
55
+ */
56
+ export declare class SentimentAnalysisPipeline extends TextClassificationPipeline {
57
+ constructor(config: PipelineConfig);
58
+ /**
59
+ * Analyze sentiment
60
+ */
61
+ analyze(text: string | string[], options?: TextClassificationOptions): Promise<TextClassificationResult | TextClassificationResult[]>;
62
+ }
63
+ /**
64
+ * Create text classification pipeline
65
+ */
66
+ export declare function createTextClassificationPipeline(config?: Partial<PipelineConfig>): TextClassificationPipeline;
67
+ /**
68
+ * Create sentiment analysis pipeline
69
+ */
70
+ export declare function createSentimentAnalysisPipeline(config?: Partial<PipelineConfig>): SentimentAnalysisPipeline;
71
+ //# sourceMappingURL=text-classification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-classification.d.ts","sourceRoot":"","sources":["../../src/pipelines/text-classification.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAW,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EACL,YAAY,EACZ,wBAAwB,EAGzB,MAAM,WAAW,CAAC;AAMnB;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAChE,oCAAoC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAC1D,MAAM,GAAG,MAAM,EAAE,EACjB,wBAAwB,GAAG,wBAAwB,EAAE,CACtD;IACC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAW;gBAEb,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;IAKrD;;OAEG;IACY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS1C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjC;;OAEG;IACY,GAAG,CAChB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,wBAAwB,GAAG,wBAAwB,EAAE,CAAC;IA+BjE;;OAEG;cACsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA0BxF;;OAEG;YACW,YAAY;IAkB1B;;OAEG;cACsB,WAAW,CAClC,OAAO,EAAE,cAAc,EAAE,EACzB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,wBAAwB,CAAC;CAqCrC;AAMD;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,0BAA0B;gBAC3D,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,wBAAwB,GAAG,wBAAwB,EAAE,CAAC;CAGlE;AAMD;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GACnC,0BAA0B,CAQ5B;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GACnC,yBAAyB,CAQ3B"}