agentic-flow 2.0.0-alpha → 2.0.1-alpha
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 +320 -23
- package/agentic-flow/.claude/agents/base-template-generator.md +229 -3
- package/agentic-flow/.claude/agents/core/coder.md +212 -7
- package/agentic-flow/.claude/agents/core/planner.md +228 -7
- package/agentic-flow/.claude/agents/core/researcher.md +205 -10
- package/agentic-flow/.claude/agents/core/reviewer.md +216 -5
- package/agentic-flow/.claude/agents/core/tester.md +213 -3
- package/agentic-flow/.claude/agents/data/ml/data-ml-model.md +256 -5
- package/agentic-flow/.claude/agents/development/backend/dev-backend-api.md +209 -6
- package/agentic-flow/.claude/agents/documentation/api-docs/docs-api-openapi.md +185 -5
- package/agentic-flow/.claude/agents/github/code-review-swarm.md +307 -468
- package/agentic-flow/.claude/agents/github/issue-tracker.md +270 -13
- package/agentic-flow/.claude/agents/github/pr-manager.md +259 -12
- package/agentic-flow/.claude/agents/github/release-manager.md +253 -15
- package/agentic-flow/.claude/agents/github/workflow-automation.md +277 -9
- package/agentic-flow/.claude/agents/sona/sona-learning-optimizer.md +496 -0
- package/agentic-flow/.claude/agents/sparc/architecture.md +231 -4
- package/agentic-flow/.claude/agents/sparc/pseudocode.md +206 -4
- package/agentic-flow/.claude/agents/sparc/refinement.md +283 -6
- package/agentic-flow/.claude/agents/sparc/specification.md +205 -3
- package/agentic-flow/.claude/agents/swarm/adaptive-coordinator.md +731 -0
- package/agentic-flow/.claude/agents/swarm/hierarchical-coordinator.md +455 -1
- package/agentic-flow/.claude/agents/swarm/mesh-coordinator.md +571 -0
- package/agentic-flow/.claude/agents/templates/sparc-coordinator.md +336 -5
- package/agentic-flow/dist/cli/commands/sona-train.d.ts.map +1 -0
- package/agentic-flow/dist/cli/commands/sona-train.js +295 -0
- package/agentic-flow/dist/cli/commands/sona-train.js.map +1 -0
- package/agentic-flow/dist/cli/commands/sona.d.ts.map +1 -0
- package/agentic-flow/dist/cli/commands/sona.js +290 -0
- package/agentic-flow/dist/cli/commands/sona.js.map +1 -0
- package/agentic-flow/dist/core/agentdb-fast.d.ts.map +1 -0
- package/agentic-flow/dist/core/agentdb-fast.js +299 -0
- package/agentic-flow/dist/core/agentdb-fast.js.map +1 -0
- package/agentic-flow/dist/core/attention-fallbacks.d.ts.map +1 -0
- package/agentic-flow/dist/core/attention-fallbacks.js +321 -0
- package/agentic-flow/dist/core/attention-fallbacks.js.map +1 -0
- package/agentic-flow/dist/core/embedding-service.d.ts.map +1 -0
- package/agentic-flow/dist/core/embedding-service.js +370 -0
- package/agentic-flow/dist/core/embedding-service.js.map +1 -0
- package/agentic-flow/dist/core/gnn-wrapper.d.ts.map +1 -0
- package/agentic-flow/dist/core/gnn-wrapper.js +236 -0
- package/agentic-flow/dist/core/gnn-wrapper.js.map +1 -0
- package/agentic-flow/dist/core/index.d.ts.map +1 -1
- package/agentic-flow/dist/core/index.js +80 -3
- package/agentic-flow/dist/core/index.js.map +1 -1
- package/agentic-flow/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/agentic-flow/dist/mcp/claudeFlowSdkServer.js +109 -0
- package/agentic-flow/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/agentic-flow/dist/mcp/tools/agent-booster-tools.d.ts.map +1 -0
- package/agentic-flow/dist/mcp/tools/agent-booster-tools.js +262 -0
- package/agentic-flow/dist/mcp/tools/agent-booster-tools.js.map +1 -0
- package/agentic-flow/dist/mcp/tools/sona-tools.d.ts.map +1 -0
- package/agentic-flow/dist/mcp/tools/sona-tools.js +560 -0
- package/agentic-flow/dist/mcp/tools/sona-tools.js.map +1 -0
- package/agentic-flow/dist/optimizations/agent-booster-migration.d.ts.map +1 -0
- package/agentic-flow/dist/optimizations/agent-booster-migration.js +323 -0
- package/agentic-flow/dist/optimizations/agent-booster-migration.js.map +1 -0
- package/agentic-flow/dist/optimizations/configuration-tuning.d.ts.map +1 -0
- package/agentic-flow/dist/optimizations/configuration-tuning.js +422 -0
- package/agentic-flow/dist/optimizations/configuration-tuning.js.map +1 -0
- package/agentic-flow/dist/optimizations/ruvector-backend.d.ts.map +1 -0
- package/agentic-flow/dist/optimizations/ruvector-backend.js +464 -0
- package/agentic-flow/dist/optimizations/ruvector-backend.js.map +1 -0
- package/agentic-flow/dist/services/embedding-service.d.ts.map +1 -0
- package/agentic-flow/dist/services/embedding-service.js +367 -0
- package/agentic-flow/dist/services/embedding-service.js.map +1 -0
- package/agentic-flow/dist/services/sona-agent-training.d.ts.map +1 -0
- package/agentic-flow/dist/services/sona-agent-training.js +382 -0
- package/agentic-flow/dist/services/sona-agent-training.js.map +1 -0
- package/agentic-flow/dist/services/sona-agentdb-integration.d.ts.map +1 -0
- package/agentic-flow/dist/services/sona-agentdb-integration.js +346 -0
- package/agentic-flow/dist/services/sona-agentdb-integration.js.map +1 -0
- package/agentic-flow/dist/services/sona-service.d.ts.map +1 -0
- package/agentic-flow/dist/services/sona-service.js +448 -0
- package/agentic-flow/dist/services/sona-service.js.map +1 -0
- package/agentic-flow/dist/services/sona-types.d.ts.map +1 -0
- package/agentic-flow/dist/services/sona-types.js +59 -0
- package/agentic-flow/dist/services/sona-types.js.map +1 -0
- package/docs/README.md +27 -2
- package/package.json +12 -2
- package/docs/AGENTIC_JUJUTSU_QUICKSTART.md +0 -491
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production Embedding Service
|
|
3
|
+
*
|
|
4
|
+
* Replaces mock embeddings with real implementations:
|
|
5
|
+
* 1. OpenAI Embeddings API (text-embedding-3-small/large)
|
|
6
|
+
* 2. Local Transformers.js (runs in Node.js/browser)
|
|
7
|
+
* 3. Custom ONNX models
|
|
8
|
+
* 4. Fallback hash-based embeddings (for development)
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from 'events';
|
|
11
|
+
/**
|
|
12
|
+
* Base embedding service interface
|
|
13
|
+
*/
|
|
14
|
+
export class EmbeddingService extends EventEmitter {
|
|
15
|
+
config;
|
|
16
|
+
cache = new Map();
|
|
17
|
+
constructor(config) {
|
|
18
|
+
super();
|
|
19
|
+
this.config = {
|
|
20
|
+
cacheSize: 1000,
|
|
21
|
+
...config
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get cached embedding if available
|
|
26
|
+
*/
|
|
27
|
+
getCached(text) {
|
|
28
|
+
return this.cache.get(text) || null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Cache embedding with LRU eviction
|
|
32
|
+
*/
|
|
33
|
+
setCached(text, embedding) {
|
|
34
|
+
if (this.cache.size >= this.config.cacheSize) {
|
|
35
|
+
// Remove oldest entry (first in map)
|
|
36
|
+
const firstKey = this.cache.keys().next().value;
|
|
37
|
+
this.cache.delete(firstKey);
|
|
38
|
+
}
|
|
39
|
+
this.cache.set(text, embedding);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Clear cache
|
|
43
|
+
*/
|
|
44
|
+
clearCache() {
|
|
45
|
+
this.cache.clear();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* OpenAI Embeddings Service
|
|
50
|
+
*
|
|
51
|
+
* Uses OpenAI's text-embedding-3-small (1536D) or text-embedding-3-large (3072D)
|
|
52
|
+
* https://platform.openai.com/docs/guides/embeddings
|
|
53
|
+
*/
|
|
54
|
+
export class OpenAIEmbeddingService extends EmbeddingService {
|
|
55
|
+
apiKey;
|
|
56
|
+
model;
|
|
57
|
+
baseURL = 'https://api.openai.com/v1/embeddings';
|
|
58
|
+
constructor(config) {
|
|
59
|
+
super({ ...config, provider: 'openai' });
|
|
60
|
+
this.apiKey = config.apiKey;
|
|
61
|
+
this.model = config.model || 'text-embedding-3-small';
|
|
62
|
+
}
|
|
63
|
+
async embed(text) {
|
|
64
|
+
// Check cache
|
|
65
|
+
const cached = this.getCached(text);
|
|
66
|
+
if (cached) {
|
|
67
|
+
return {
|
|
68
|
+
embedding: cached,
|
|
69
|
+
latency: 0
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const start = Date.now();
|
|
73
|
+
try {
|
|
74
|
+
const response = await fetch(this.baseURL, {
|
|
75
|
+
method: 'POST',
|
|
76
|
+
headers: {
|
|
77
|
+
'Content-Type': 'application/json',
|
|
78
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
79
|
+
},
|
|
80
|
+
body: JSON.stringify({
|
|
81
|
+
model: this.model,
|
|
82
|
+
input: text,
|
|
83
|
+
dimensions: this.config.dimensions || undefined
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
throw new Error(`OpenAI API error: ${response.statusText}`);
|
|
88
|
+
}
|
|
89
|
+
const data = await response.json();
|
|
90
|
+
const embedding = data.data[0].embedding;
|
|
91
|
+
// Cache it
|
|
92
|
+
this.setCached(text, embedding);
|
|
93
|
+
const latency = Date.now() - start;
|
|
94
|
+
this.emit('embed', { text, latency });
|
|
95
|
+
return {
|
|
96
|
+
embedding,
|
|
97
|
+
usage: data.usage,
|
|
98
|
+
latency
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw new Error(`OpenAI embedding failed: ${error.message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async embedBatch(texts) {
|
|
106
|
+
const start = Date.now();
|
|
107
|
+
try {
|
|
108
|
+
const response = await fetch(this.baseURL, {
|
|
109
|
+
method: 'POST',
|
|
110
|
+
headers: {
|
|
111
|
+
'Content-Type': 'application/json',
|
|
112
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
113
|
+
},
|
|
114
|
+
body: JSON.stringify({
|
|
115
|
+
model: this.model,
|
|
116
|
+
input: texts,
|
|
117
|
+
dimensions: this.config.dimensions || undefined
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
if (!response.ok) {
|
|
121
|
+
throw new Error(`OpenAI API error: ${response.statusText}`);
|
|
122
|
+
}
|
|
123
|
+
const data = await response.json();
|
|
124
|
+
const latency = Date.now() - start;
|
|
125
|
+
return data.data.map((item, index) => {
|
|
126
|
+
const embedding = item.embedding;
|
|
127
|
+
this.setCached(texts[index], embedding);
|
|
128
|
+
return {
|
|
129
|
+
embedding,
|
|
130
|
+
usage: {
|
|
131
|
+
promptTokens: Math.floor(data.usage.prompt_tokens / texts.length),
|
|
132
|
+
totalTokens: Math.floor(data.usage.total_tokens / texts.length)
|
|
133
|
+
},
|
|
134
|
+
latency: Math.floor(latency / texts.length)
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new Error(`OpenAI batch embedding failed: ${error.message}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Transformers.js Local Embedding Service
|
|
145
|
+
*
|
|
146
|
+
* Runs locally without API calls using ONNX runtime
|
|
147
|
+
* https://huggingface.co/docs/transformers.js
|
|
148
|
+
*/
|
|
149
|
+
export class TransformersEmbeddingService extends EmbeddingService {
|
|
150
|
+
pipeline = null;
|
|
151
|
+
modelName;
|
|
152
|
+
constructor(config) {
|
|
153
|
+
super({ ...config, provider: 'transformers' });
|
|
154
|
+
this.modelName = config.model || 'Xenova/all-MiniLM-L6-v2';
|
|
155
|
+
}
|
|
156
|
+
async initialize() {
|
|
157
|
+
if (this.pipeline)
|
|
158
|
+
return;
|
|
159
|
+
try {
|
|
160
|
+
// Dynamically import transformers.js
|
|
161
|
+
const { pipeline } = await import('@xenova/transformers');
|
|
162
|
+
this.pipeline = await pipeline('feature-extraction', this.modelName);
|
|
163
|
+
this.emit('initialized', { model: this.modelName });
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
throw new Error(`Failed to initialize transformers.js: ${error.message}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async embed(text) {
|
|
170
|
+
await this.initialize();
|
|
171
|
+
// Check cache
|
|
172
|
+
const cached = this.getCached(text);
|
|
173
|
+
if (cached) {
|
|
174
|
+
return {
|
|
175
|
+
embedding: cached,
|
|
176
|
+
latency: 0
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const start = Date.now();
|
|
180
|
+
try {
|
|
181
|
+
const output = await this.pipeline(text, { pooling: 'mean', normalize: true });
|
|
182
|
+
// Convert to regular array
|
|
183
|
+
const embedding = Array.from(output.data);
|
|
184
|
+
// Cache it
|
|
185
|
+
this.setCached(text, embedding);
|
|
186
|
+
const latency = Date.now() - start;
|
|
187
|
+
this.emit('embed', { text, latency });
|
|
188
|
+
return {
|
|
189
|
+
embedding,
|
|
190
|
+
latency
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw new Error(`Transformers.js embedding failed: ${error.message}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async embedBatch(texts) {
|
|
198
|
+
await this.initialize();
|
|
199
|
+
const start = Date.now();
|
|
200
|
+
try {
|
|
201
|
+
const results = [];
|
|
202
|
+
for (const text of texts) {
|
|
203
|
+
const cached = this.getCached(text);
|
|
204
|
+
if (cached) {
|
|
205
|
+
results.push({
|
|
206
|
+
embedding: cached,
|
|
207
|
+
latency: 0
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const output = await this.pipeline(text, {
|
|
212
|
+
pooling: 'mean',
|
|
213
|
+
normalize: true
|
|
214
|
+
});
|
|
215
|
+
const embedding = Array.from(output.data);
|
|
216
|
+
this.setCached(text, embedding);
|
|
217
|
+
results.push({
|
|
218
|
+
embedding,
|
|
219
|
+
latency: Math.floor((Date.now() - start) / texts.length)
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return results;
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
throw new Error(`Transformers.js batch embedding failed: ${error.message}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Mock Embedding Service (for development/testing)
|
|
232
|
+
*
|
|
233
|
+
* Generates deterministic hash-based embeddings
|
|
234
|
+
* Fast but not semantically meaningful
|
|
235
|
+
*/
|
|
236
|
+
export class MockEmbeddingService extends EmbeddingService {
|
|
237
|
+
constructor(config) {
|
|
238
|
+
super({
|
|
239
|
+
provider: 'mock',
|
|
240
|
+
dimensions: 384,
|
|
241
|
+
...config
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
async embed(text) {
|
|
245
|
+
// Check cache
|
|
246
|
+
const cached = this.getCached(text);
|
|
247
|
+
if (cached) {
|
|
248
|
+
return {
|
|
249
|
+
embedding: cached,
|
|
250
|
+
latency: 0
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const start = Date.now();
|
|
254
|
+
// Generate hash-based embedding
|
|
255
|
+
const embedding = this.hashEmbedding(text);
|
|
256
|
+
// Cache it
|
|
257
|
+
this.setCached(text, embedding);
|
|
258
|
+
const latency = Date.now() - start;
|
|
259
|
+
return {
|
|
260
|
+
embedding,
|
|
261
|
+
latency
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
async embedBatch(texts) {
|
|
265
|
+
return Promise.all(texts.map(text => this.embed(text)));
|
|
266
|
+
}
|
|
267
|
+
hashEmbedding(text) {
|
|
268
|
+
const dimensions = this.config.dimensions || 384;
|
|
269
|
+
const embedding = new Array(dimensions);
|
|
270
|
+
// Seed with text hash
|
|
271
|
+
let hash = 0;
|
|
272
|
+
for (let i = 0; i < text.length; i++) {
|
|
273
|
+
hash = (hash << 5) - hash + text.charCodeAt(i);
|
|
274
|
+
hash = hash & hash;
|
|
275
|
+
}
|
|
276
|
+
// Generate pseudo-random embedding
|
|
277
|
+
for (let i = 0; i < dimensions; i++) {
|
|
278
|
+
const seed = hash + i * 2654435761;
|
|
279
|
+
const x = Math.sin(seed) * 10000;
|
|
280
|
+
embedding[i] = x - Math.floor(x);
|
|
281
|
+
}
|
|
282
|
+
// Normalize to unit vector
|
|
283
|
+
const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));
|
|
284
|
+
return embedding.map(v => v / norm);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Factory function to create appropriate embedding service
|
|
289
|
+
*/
|
|
290
|
+
export function createEmbeddingService(config) {
|
|
291
|
+
switch (config.provider) {
|
|
292
|
+
case 'openai':
|
|
293
|
+
if (!config.apiKey) {
|
|
294
|
+
throw new Error('OpenAI API key required');
|
|
295
|
+
}
|
|
296
|
+
return new OpenAIEmbeddingService(config);
|
|
297
|
+
case 'transformers':
|
|
298
|
+
return new TransformersEmbeddingService(config);
|
|
299
|
+
case 'mock':
|
|
300
|
+
return new MockEmbeddingService(config);
|
|
301
|
+
default:
|
|
302
|
+
console.warn(`Unknown provider: ${config.provider}, using mock`);
|
|
303
|
+
return new MockEmbeddingService(config);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Convenience function for quick embeddings
|
|
308
|
+
*/
|
|
309
|
+
export async function getEmbedding(text, config) {
|
|
310
|
+
const service = createEmbeddingService({
|
|
311
|
+
provider: 'mock',
|
|
312
|
+
...config
|
|
313
|
+
});
|
|
314
|
+
const result = await service.embed(text);
|
|
315
|
+
return result.embedding;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Benchmark different embedding providers
|
|
319
|
+
*/
|
|
320
|
+
export async function benchmarkEmbeddings(testText = 'Hello world') {
|
|
321
|
+
const results = {};
|
|
322
|
+
// Test mock
|
|
323
|
+
const mockService = new MockEmbeddingService({ dimensions: 384 });
|
|
324
|
+
const mockResult = await mockService.embed(testText);
|
|
325
|
+
results.mock = {
|
|
326
|
+
latency: mockResult.latency,
|
|
327
|
+
dimensions: mockResult.embedding.length
|
|
328
|
+
};
|
|
329
|
+
// Test transformers (if available)
|
|
330
|
+
try {
|
|
331
|
+
const transformersService = new TransformersEmbeddingService({
|
|
332
|
+
model: 'Xenova/all-MiniLM-L6-v2'
|
|
333
|
+
});
|
|
334
|
+
const transformersResult = await transformersService.embed(testText);
|
|
335
|
+
results.transformers = {
|
|
336
|
+
latency: transformersResult.latency,
|
|
337
|
+
dimensions: transformersResult.embedding.length
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
results.transformers = {
|
|
342
|
+
error: error.message
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
// Test OpenAI (if API key available)
|
|
346
|
+
const apiKey = process.env.OPENAI_API_KEY;
|
|
347
|
+
if (apiKey) {
|
|
348
|
+
try {
|
|
349
|
+
const openaiService = new OpenAIEmbeddingService({
|
|
350
|
+
apiKey,
|
|
351
|
+
model: 'text-embedding-3-small'
|
|
352
|
+
});
|
|
353
|
+
const openaiResult = await openaiService.embed(testText);
|
|
354
|
+
results.openai = {
|
|
355
|
+
latency: openaiResult.latency,
|
|
356
|
+
dimensions: openaiResult.embedding.length
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
results.openai = {
|
|
361
|
+
error: error.message
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return results;
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=embedding-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-service.js","sourceRoot":"","sources":["../../src/services/embedding-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Production Embedding Service\n *\n * Replaces mock embeddings with real implementations:\n * 1. OpenAI Embeddings API (text-embedding-3-small/large)\n * 2. Local Transformers.js (runs in Node.js/browser)\n * 3. Custom ONNX models\n * 4. Fallback hash-based embeddings (for development)\n */\n\nimport { EventEmitter } from 'events';\n\nexport interface EmbeddingConfig {\n provider: 'openai' | 'transformers' | 'onnx' | 'mock';\n model?: string;\n dimensions?: number;\n apiKey?: string;\n cacheSize?: number;\n}\n\nexport interface EmbeddingResult {\n embedding: number[];\n usage?: {\n promptTokens: number;\n totalTokens: number;\n };\n latency: number;\n}\n\n/**\n * Base embedding service interface\n */\nexport abstract class EmbeddingService extends EventEmitter {\n protected config: EmbeddingConfig;\n protected cache: Map<string, number[]> = new Map();\n\n constructor(config: EmbeddingConfig) {\n super();\n this.config = {\n cacheSize: 1000,\n ...config\n };\n }\n\n abstract embed(text: string): Promise<EmbeddingResult>;\n abstract embedBatch(texts: string[]): Promise<EmbeddingResult[]>;\n\n /**\n * Get cached embedding if available\n */\n protected getCached(text: string): number[] | null {\n return this.cache.get(text) || null;\n }\n\n /**\n * Cache embedding with LRU eviction\n */\n protected setCached(text: string, embedding: number[]): void {\n if (this.cache.size >= this.config.cacheSize!) {\n // Remove oldest entry (first in map)\n const firstKey = this.cache.keys().next().value;\n this.cache.delete(firstKey);\n }\n this.cache.set(text, embedding);\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n}\n\n/**\n * OpenAI Embeddings Service\n *\n * Uses OpenAI's text-embedding-3-small (1536D) or text-embedding-3-large (3072D)\n * https://platform.openai.com/docs/guides/embeddings\n */\nexport class OpenAIEmbeddingService extends EmbeddingService {\n private apiKey: string;\n private model: string;\n private baseURL = 'https://api.openai.com/v1/embeddings';\n\n constructor(config: Omit<EmbeddingConfig, 'provider'> & { apiKey: string }) {\n super({ ...config, provider: 'openai' });\n this.apiKey = config.apiKey;\n this.model = config.model || 'text-embedding-3-small';\n }\n\n async embed(text: string): Promise<EmbeddingResult> {\n // Check cache\n const cached = this.getCached(text);\n if (cached) {\n return {\n embedding: cached,\n latency: 0\n };\n }\n\n const start = Date.now();\n\n try {\n const response = await fetch(this.baseURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`\n },\n body: JSON.stringify({\n model: this.model,\n input: text,\n dimensions: this.config.dimensions || undefined\n })\n });\n\n if (!response.ok) {\n throw new Error(`OpenAI API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n const embedding = data.data[0].embedding;\n\n // Cache it\n this.setCached(text, embedding);\n\n const latency = Date.now() - start;\n\n this.emit('embed', { text, latency });\n\n return {\n embedding,\n usage: data.usage,\n latency\n };\n } catch (error: any) {\n throw new Error(`OpenAI embedding failed: ${error.message}`);\n }\n }\n\n async embedBatch(texts: string[]): Promise<EmbeddingResult[]> {\n const start = Date.now();\n\n try {\n const response = await fetch(this.baseURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`\n },\n body: JSON.stringify({\n model: this.model,\n input: texts,\n dimensions: this.config.dimensions || undefined\n })\n });\n\n if (!response.ok) {\n throw new Error(`OpenAI API error: ${response.statusText}`);\n }\n\n const data = await response.json();\n const latency = Date.now() - start;\n\n return data.data.map((item: any, index: number) => {\n const embedding = item.embedding;\n this.setCached(texts[index], embedding);\n\n return {\n embedding,\n usage: {\n promptTokens: Math.floor(data.usage.prompt_tokens / texts.length),\n totalTokens: Math.floor(data.usage.total_tokens / texts.length)\n },\n latency: Math.floor(latency / texts.length)\n };\n });\n } catch (error: any) {\n throw new Error(`OpenAI batch embedding failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Transformers.js Local Embedding Service\n *\n * Runs locally without API calls using ONNX runtime\n * https://huggingface.co/docs/transformers.js\n */\nexport class TransformersEmbeddingService extends EmbeddingService {\n private pipeline: any = null;\n private modelName: string;\n\n constructor(config: Omit<EmbeddingConfig, 'provider'>) {\n super({ ...config, provider: 'transformers' });\n this.modelName = config.model || 'Xenova/all-MiniLM-L6-v2';\n }\n\n async initialize(): Promise<void> {\n if (this.pipeline) return;\n\n try {\n // Dynamically import transformers.js\n const { pipeline } = await import('@xenova/transformers');\n\n this.pipeline = await pipeline('feature-extraction', this.modelName);\n this.emit('initialized', { model: this.modelName });\n } catch (error: any) {\n throw new Error(`Failed to initialize transformers.js: ${error.message}`);\n }\n }\n\n async embed(text: string): Promise<EmbeddingResult> {\n await this.initialize();\n\n // Check cache\n const cached = this.getCached(text);\n if (cached) {\n return {\n embedding: cached,\n latency: 0\n };\n }\n\n const start = Date.now();\n\n try {\n const output = await this.pipeline(text, { pooling: 'mean', normalize: true });\n\n // Convert to regular array\n const embedding = Array.from(output.data);\n\n // Cache it\n this.setCached(text, embedding);\n\n const latency = Date.now() - start;\n\n this.emit('embed', { text, latency });\n\n return {\n embedding,\n latency\n };\n } catch (error: any) {\n throw new Error(`Transformers.js embedding failed: ${error.message}`);\n }\n }\n\n async embedBatch(texts: string[]): Promise<EmbeddingResult[]> {\n await this.initialize();\n\n const start = Date.now();\n\n try {\n const results: EmbeddingResult[] = [];\n\n for (const text of texts) {\n const cached = this.getCached(text);\n\n if (cached) {\n results.push({\n embedding: cached,\n latency: 0\n });\n } else {\n const output = await this.pipeline(text, {\n pooling: 'mean',\n normalize: true\n });\n const embedding = Array.from(output.data);\n\n this.setCached(text, embedding);\n\n results.push({\n embedding,\n latency: Math.floor((Date.now() - start) / texts.length)\n });\n }\n }\n\n return results;\n } catch (error: any) {\n throw new Error(`Transformers.js batch embedding failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Mock Embedding Service (for development/testing)\n *\n * Generates deterministic hash-based embeddings\n * Fast but not semantically meaningful\n */\nexport class MockEmbeddingService extends EmbeddingService {\n constructor(config?: Partial<EmbeddingConfig>) {\n super({\n provider: 'mock',\n dimensions: 384,\n ...config\n });\n }\n\n async embed(text: string): Promise<EmbeddingResult> {\n // Check cache\n const cached = this.getCached(text);\n if (cached) {\n return {\n embedding: cached,\n latency: 0\n };\n }\n\n const start = Date.now();\n\n // Generate hash-based embedding\n const embedding = this.hashEmbedding(text);\n\n // Cache it\n this.setCached(text, embedding);\n\n const latency = Date.now() - start;\n\n return {\n embedding,\n latency\n };\n }\n\n async embedBatch(texts: string[]): Promise<EmbeddingResult[]> {\n return Promise.all(texts.map(text => this.embed(text)));\n }\n\n private hashEmbedding(text: string): number[] {\n const dimensions = this.config.dimensions || 384;\n const embedding = new Array(dimensions);\n\n // Seed with text hash\n let hash = 0;\n for (let i = 0; i < text.length; i++) {\n hash = (hash << 5) - hash + text.charCodeAt(i);\n hash = hash & hash;\n }\n\n // Generate pseudo-random embedding\n for (let i = 0; i < dimensions; i++) {\n const seed = hash + i * 2654435761;\n const x = Math.sin(seed) * 10000;\n embedding[i] = x - Math.floor(x);\n }\n\n // Normalize to unit vector\n const norm = Math.sqrt(embedding.reduce((sum, v) => sum + v * v, 0));\n return embedding.map(v => v / norm);\n }\n}\n\n/**\n * Factory function to create appropriate embedding service\n */\nexport function createEmbeddingService(config: EmbeddingConfig): EmbeddingService {\n switch (config.provider) {\n case 'openai':\n if (!config.apiKey) {\n throw new Error('OpenAI API key required');\n }\n return new OpenAIEmbeddingService(config as any);\n\n case 'transformers':\n return new TransformersEmbeddingService(config);\n\n case 'mock':\n return new MockEmbeddingService(config);\n\n default:\n console.warn(`Unknown provider: ${config.provider}, using mock`);\n return new MockEmbeddingService(config);\n }\n}\n\n/**\n * Convenience function for quick embeddings\n */\nexport async function getEmbedding(\n text: string,\n config?: Partial<EmbeddingConfig>\n): Promise<number[]> {\n const service = createEmbeddingService({\n provider: 'mock',\n ...config\n } as EmbeddingConfig);\n\n const result = await service.embed(text);\n return result.embedding;\n}\n\n/**\n * Benchmark different embedding providers\n */\nexport async function benchmarkEmbeddings(testText: string = 'Hello world'): Promise<{\n mock: { latency: number; dimensions: number };\n transformers?: { latency: number; dimensions: number; error?: string };\n openai?: { latency: number; dimensions: number; error?: string };\n}> {\n const results: any = {};\n\n // Test mock\n const mockService = new MockEmbeddingService({ dimensions: 384 });\n const mockResult = await mockService.embed(testText);\n results.mock = {\n latency: mockResult.latency,\n dimensions: mockResult.embedding.length\n };\n\n // Test transformers (if available)\n try {\n const transformersService = new TransformersEmbeddingService({\n model: 'Xenova/all-MiniLM-L6-v2'\n });\n const transformersResult = await transformersService.embed(testText);\n results.transformers = {\n latency: transformersResult.latency,\n dimensions: transformersResult.embedding.length\n };\n } catch (error: any) {\n results.transformers = {\n error: error.message\n };\n }\n\n // Test OpenAI (if API key available)\n const apiKey = process.env.OPENAI_API_KEY;\n if (apiKey) {\n try {\n const openaiService = new OpenAIEmbeddingService({\n apiKey,\n model: 'text-embedding-3-small'\n });\n const openaiResult = await openaiService.embed(testText);\n results.openai = {\n latency: openaiResult.latency,\n dimensions: openaiResult.embedding.length\n };\n } catch (error: any) {\n results.openai = {\n error: error.message\n };\n }\n }\n\n return results;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sona-agent-training.d.ts","sourceRoot":"","sources":["../../src/services/sona-agent-training.ts"],"names":[],"mappings":"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"}
|