@sparkleideas/embeddings 3.0.0-alpha.12-patch.14 → 3.0.0-alpha.12-patch.6
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/dist/embedding-service.d.ts.map +1 -1
- package/dist/embedding-service.js +21 -1
- package/dist/embedding-service.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/rvf-embedding-cache.d.ts +118 -0
- package/dist/rvf-embedding-cache.d.ts.map +1 -0
- package/dist/rvf-embedding-cache.js +458 -0
- package/dist/rvf-embedding-cache.js.map +1 -0
- package/dist/rvf-embedding-service.d.ts +79 -0
- package/dist/rvf-embedding-service.d.ts.map +1 -0
- package/dist/rvf-embedding-service.js +318 -0
- package/dist/rvf-embedding-service.js.map +1 -0
- package/dist/types.d.ts +15 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/embedding-service.ts +22 -1
- package/src/index.ts +10 -0
- package/src/rvf-embedding-cache.ts +578 -0
- package/src/rvf-embedding-service.ts +377 -0
- package/src/types.ts +20 -2
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RVF Embedding Service - Lightweight Hash-Based Embeddings
|
|
3
|
+
*
|
|
4
|
+
* Provides deterministic, sub-millisecond embedding generation using
|
|
5
|
+
* FNV-1a hash-based vectors. No neural model or external API required.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Deterministic: same input always produces the same embedding
|
|
9
|
+
* - FNV-1a hash seeding with multi-round mixing
|
|
10
|
+
* - L2-normalized output vectors
|
|
11
|
+
* - Sub-millisecond generation (<0.1ms typical)
|
|
12
|
+
* - RvfEmbeddingCache for binary file persistence
|
|
13
|
+
* - Zero external dependencies
|
|
14
|
+
*
|
|
15
|
+
* Use cases:
|
|
16
|
+
* - Fast similarity search where relative distances matter more than semantics
|
|
17
|
+
* - Development and testing without API keys
|
|
18
|
+
* - Offline environments without neural model access
|
|
19
|
+
* - Bootstrapping before heavier providers are available
|
|
20
|
+
*
|
|
21
|
+
* @module @sparkleideas/embeddings
|
|
22
|
+
*/
|
|
23
|
+
import { EventEmitter } from 'events';
|
|
24
|
+
import { normalize } from './normalization.js';
|
|
25
|
+
import { RvfEmbeddingCache } from './rvf-embedding-cache.js';
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Constants
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/** FNV-1a offset basis (32-bit) */
|
|
30
|
+
const FNV_OFFSET_BASIS = 0x811c9dc5;
|
|
31
|
+
/** FNV-1a prime (32-bit) */
|
|
32
|
+
const FNV_PRIME = 0x01000193;
|
|
33
|
+
/** Default embedding dimensions */
|
|
34
|
+
const DEFAULT_DIMENSIONS = 384;
|
|
35
|
+
/** Default in-memory LRU cache size */
|
|
36
|
+
const DEFAULT_CACHE_SIZE = 1000;
|
|
37
|
+
// ============================================================================
|
|
38
|
+
// LRU Cache (lightweight in-memory)
|
|
39
|
+
// ============================================================================
|
|
40
|
+
class LRUCache {
|
|
41
|
+
maxSize;
|
|
42
|
+
cache = new Map();
|
|
43
|
+
hits = 0;
|
|
44
|
+
misses = 0;
|
|
45
|
+
constructor(maxSize) {
|
|
46
|
+
this.maxSize = maxSize;
|
|
47
|
+
}
|
|
48
|
+
get(key) {
|
|
49
|
+
const value = this.cache.get(key);
|
|
50
|
+
if (value !== undefined) {
|
|
51
|
+
// Move to end (most recently used)
|
|
52
|
+
this.cache.delete(key);
|
|
53
|
+
this.cache.set(key, value);
|
|
54
|
+
this.hits++;
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
this.misses++;
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
set(key, value) {
|
|
61
|
+
if (this.cache.has(key)) {
|
|
62
|
+
this.cache.delete(key);
|
|
63
|
+
}
|
|
64
|
+
else if (this.cache.size >= this.maxSize) {
|
|
65
|
+
const firstKey = this.cache.keys().next().value;
|
|
66
|
+
if (firstKey !== undefined) {
|
|
67
|
+
this.cache.delete(firstKey);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
this.cache.set(key, value);
|
|
71
|
+
}
|
|
72
|
+
clear() {
|
|
73
|
+
this.cache.clear();
|
|
74
|
+
this.hits = 0;
|
|
75
|
+
this.misses = 0;
|
|
76
|
+
}
|
|
77
|
+
get size() {
|
|
78
|
+
return this.cache.size;
|
|
79
|
+
}
|
|
80
|
+
get hitRate() {
|
|
81
|
+
const total = this.hits + this.misses;
|
|
82
|
+
return total > 0 ? this.hits / total : 0;
|
|
83
|
+
}
|
|
84
|
+
getStats() {
|
|
85
|
+
return {
|
|
86
|
+
size: this.cache.size,
|
|
87
|
+
maxSize: this.maxSize,
|
|
88
|
+
hits: this.hits,
|
|
89
|
+
misses: this.misses,
|
|
90
|
+
hitRate: this.hitRate,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// RVF Embedding Service
|
|
96
|
+
// ============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Lightweight hash-based embedding service.
|
|
99
|
+
*
|
|
100
|
+
* Generates deterministic embeddings from text using FNV-1a hashing
|
|
101
|
+
* with multi-round mixing and L2 normalization. The output is a unit
|
|
102
|
+
* vector in R^n where n = configured dimensions (default 384).
|
|
103
|
+
*
|
|
104
|
+
* Extends EventEmitter and implements IEmbeddingService for drop-in
|
|
105
|
+
* compatibility with other providers.
|
|
106
|
+
*/
|
|
107
|
+
export class RvfEmbeddingService extends EventEmitter {
|
|
108
|
+
provider = 'rvf';
|
|
109
|
+
dimensions;
|
|
110
|
+
cache;
|
|
111
|
+
normalizationType;
|
|
112
|
+
embeddingListeners = new Set();
|
|
113
|
+
persistentCache = null;
|
|
114
|
+
constructor(config) {
|
|
115
|
+
super();
|
|
116
|
+
this.dimensions = config.dimensions ?? DEFAULT_DIMENSIONS;
|
|
117
|
+
if (this.dimensions <= 0 || !Number.isInteger(this.dimensions)) {
|
|
118
|
+
throw new Error(`Invalid dimensions: ${this.dimensions}. Must be a positive integer.`);
|
|
119
|
+
}
|
|
120
|
+
this.cache = new LRUCache(config.cacheSize ?? DEFAULT_CACHE_SIZE);
|
|
121
|
+
this.normalizationType = config.normalization ?? 'none';
|
|
122
|
+
// Initialize persistent RVF cache if a path is provided
|
|
123
|
+
if (config.cachePath) {
|
|
124
|
+
this.persistentCache = new RvfEmbeddingCache({
|
|
125
|
+
cachePath: config.cachePath,
|
|
126
|
+
maxSize: config.cacheSize ?? 10000,
|
|
127
|
+
dimensions: this.dimensions,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// --------------------------------------------------------------------------
|
|
132
|
+
// IEmbeddingService Implementation
|
|
133
|
+
// --------------------------------------------------------------------------
|
|
134
|
+
/**
|
|
135
|
+
* Generate an embedding for a single text string.
|
|
136
|
+
*/
|
|
137
|
+
async embed(text) {
|
|
138
|
+
if (typeof text !== 'string') {
|
|
139
|
+
throw new Error('embed() expects a string argument');
|
|
140
|
+
}
|
|
141
|
+
// Check in-memory cache
|
|
142
|
+
const cached = this.cache.get(text);
|
|
143
|
+
if (cached) {
|
|
144
|
+
this.emitEvent({ type: 'cache_hit', text });
|
|
145
|
+
return { embedding: cached, latencyMs: 0, cached: true };
|
|
146
|
+
}
|
|
147
|
+
// Check persistent cache
|
|
148
|
+
if (this.persistentCache) {
|
|
149
|
+
const persisted = await this.persistentCache.get(text);
|
|
150
|
+
if (persisted) {
|
|
151
|
+
this.cache.set(text, persisted);
|
|
152
|
+
this.emitEvent({ type: 'cache_hit', text });
|
|
153
|
+
return { embedding: persisted, latencyMs: 0, cached: true, persistentCached: true };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this.emitEvent({ type: 'embed_start', text });
|
|
157
|
+
const startTime = performance.now();
|
|
158
|
+
// Generate deterministic embedding
|
|
159
|
+
const embedding = this.generateHashEmbedding(text);
|
|
160
|
+
// Apply optional normalization (hash embeddings are already L2-normalized,
|
|
161
|
+
// but the user may want a different normalization)
|
|
162
|
+
const normalized = this.applyNormalization(embedding);
|
|
163
|
+
// Store in caches
|
|
164
|
+
this.cache.set(text, normalized);
|
|
165
|
+
if (this.persistentCache) {
|
|
166
|
+
await this.persistentCache.set(text, normalized);
|
|
167
|
+
}
|
|
168
|
+
const latencyMs = performance.now() - startTime;
|
|
169
|
+
this.emitEvent({ type: 'embed_complete', text, latencyMs });
|
|
170
|
+
return { embedding: normalized, latencyMs };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Generate embeddings for multiple text strings.
|
|
174
|
+
*/
|
|
175
|
+
async embedBatch(texts) {
|
|
176
|
+
if (!Array.isArray(texts)) {
|
|
177
|
+
throw new Error('embedBatch() expects an array of strings');
|
|
178
|
+
}
|
|
179
|
+
this.emitEvent({ type: 'batch_start', count: texts.length });
|
|
180
|
+
const startTime = performance.now();
|
|
181
|
+
const embeddings = [];
|
|
182
|
+
let cacheHits = 0;
|
|
183
|
+
for (const text of texts) {
|
|
184
|
+
const cached = this.cache.get(text);
|
|
185
|
+
if (cached) {
|
|
186
|
+
embeddings.push(cached);
|
|
187
|
+
cacheHits++;
|
|
188
|
+
this.emitEvent({ type: 'cache_hit', text });
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Check persistent cache
|
|
192
|
+
if (this.persistentCache) {
|
|
193
|
+
const persisted = await this.persistentCache.get(text);
|
|
194
|
+
if (persisted) {
|
|
195
|
+
this.cache.set(text, persisted);
|
|
196
|
+
embeddings.push(persisted);
|
|
197
|
+
cacheHits++;
|
|
198
|
+
this.emitEvent({ type: 'cache_hit', text });
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const embedding = this.generateHashEmbedding(text);
|
|
203
|
+
const normalized = this.applyNormalization(embedding);
|
|
204
|
+
this.cache.set(text, normalized);
|
|
205
|
+
if (this.persistentCache) {
|
|
206
|
+
await this.persistentCache.set(text, normalized);
|
|
207
|
+
}
|
|
208
|
+
embeddings.push(normalized);
|
|
209
|
+
}
|
|
210
|
+
const totalLatencyMs = performance.now() - startTime;
|
|
211
|
+
this.emitEvent({ type: 'batch_complete', count: texts.length, latencyMs: totalLatencyMs });
|
|
212
|
+
return {
|
|
213
|
+
embeddings,
|
|
214
|
+
totalLatencyMs,
|
|
215
|
+
avgLatencyMs: totalLatencyMs / texts.length,
|
|
216
|
+
cacheStats: {
|
|
217
|
+
hits: cacheHits,
|
|
218
|
+
misses: texts.length - cacheHits,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
clearCache() {
|
|
223
|
+
const size = this.cache.size;
|
|
224
|
+
this.cache.clear();
|
|
225
|
+
this.emitEvent({ type: 'cache_eviction', size });
|
|
226
|
+
}
|
|
227
|
+
getCacheStats() {
|
|
228
|
+
const stats = this.cache.getStats();
|
|
229
|
+
return {
|
|
230
|
+
size: stats.size,
|
|
231
|
+
maxSize: stats.maxSize,
|
|
232
|
+
hitRate: stats.hitRate,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async shutdown() {
|
|
236
|
+
this.clearCache();
|
|
237
|
+
this.embeddingListeners.clear();
|
|
238
|
+
if (this.persistentCache) {
|
|
239
|
+
await this.persistentCache.close();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// --------------------------------------------------------------------------
|
|
243
|
+
// Event System
|
|
244
|
+
// --------------------------------------------------------------------------
|
|
245
|
+
addEventListener(listener) {
|
|
246
|
+
this.embeddingListeners.add(listener);
|
|
247
|
+
}
|
|
248
|
+
removeEventListener(listener) {
|
|
249
|
+
this.embeddingListeners.delete(listener);
|
|
250
|
+
}
|
|
251
|
+
emitEvent(event) {
|
|
252
|
+
for (const listener of this.embeddingListeners) {
|
|
253
|
+
try {
|
|
254
|
+
listener(event);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
console.error('Error in embedding event listener:', error);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
this.emit(event.type, event);
|
|
261
|
+
}
|
|
262
|
+
// --------------------------------------------------------------------------
|
|
263
|
+
// Hash Embedding Generation
|
|
264
|
+
// --------------------------------------------------------------------------
|
|
265
|
+
/**
|
|
266
|
+
* Generate a deterministic embedding from text using FNV-1a hashing.
|
|
267
|
+
*
|
|
268
|
+
* Algorithm:
|
|
269
|
+
* 1. Compute a base FNV-1a hash of the full text.
|
|
270
|
+
* 2. For each dimension, derive a unique seed by mixing the base hash
|
|
271
|
+
* with the dimension index using the golden ratio constant.
|
|
272
|
+
* 3. Apply a sine-based pseudo-random transform to spread values.
|
|
273
|
+
* 4. L2-normalize the result to produce a unit vector.
|
|
274
|
+
*
|
|
275
|
+
* This is deterministic: the same text always yields the same vector.
|
|
276
|
+
*/
|
|
277
|
+
generateHashEmbedding(text) {
|
|
278
|
+
const embedding = new Float32Array(this.dimensions);
|
|
279
|
+
// Compute base FNV-1a hash of the full text
|
|
280
|
+
let baseHash = FNV_OFFSET_BASIS;
|
|
281
|
+
for (let i = 0; i < text.length; i++) {
|
|
282
|
+
baseHash ^= text.charCodeAt(i);
|
|
283
|
+
baseHash = Math.imul(baseHash, FNV_PRIME) >>> 0;
|
|
284
|
+
}
|
|
285
|
+
// Generate each dimension from a mixed seed
|
|
286
|
+
for (let i = 0; i < this.dimensions; i++) {
|
|
287
|
+
// Mix dimension index with the base hash using golden ratio constant
|
|
288
|
+
const seed = (baseHash + Math.imul(i, 0x9E3779B9)) >>> 0;
|
|
289
|
+
// Use sine for pseudo-random distribution in [-1, 1] range
|
|
290
|
+
const x = Math.sin(seed) * 43758.5453;
|
|
291
|
+
embedding[i] = x - Math.floor(x); // fractional part in [0, 1)
|
|
292
|
+
// Shift to [-0.5, 0.5) for zero-centered distribution
|
|
293
|
+
embedding[i] -= 0.5;
|
|
294
|
+
}
|
|
295
|
+
// L2 normalize to unit vector
|
|
296
|
+
let norm = 0;
|
|
297
|
+
for (let i = 0; i < this.dimensions; i++) {
|
|
298
|
+
norm += embedding[i] * embedding[i];
|
|
299
|
+
}
|
|
300
|
+
norm = Math.sqrt(norm);
|
|
301
|
+
if (norm > 0) {
|
|
302
|
+
for (let i = 0; i < this.dimensions; i++) {
|
|
303
|
+
embedding[i] /= norm;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return embedding;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Apply user-configured normalization if set.
|
|
310
|
+
*/
|
|
311
|
+
applyNormalization(embedding) {
|
|
312
|
+
if (this.normalizationType === 'none') {
|
|
313
|
+
return embedding;
|
|
314
|
+
}
|
|
315
|
+
return normalize(embedding, { type: this.normalizationType });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=rvf-embedding-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rvf-embedding-service.js","sourceRoot":"","sources":["../src/rvf-embedding-service.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* Supported embedding providers
|
|
16
16
|
*/
|
|
17
|
-
export type EmbeddingProvider = 'openai' | 'transformers' | 'mock' | 'agentic-flow';
|
|
17
|
+
export type EmbeddingProvider = 'openai' | 'transformers' | 'mock' | 'agentic-flow' | 'rvf';
|
|
18
18
|
/**
|
|
19
19
|
* Normalization type for embeddings
|
|
20
20
|
*/
|
|
@@ -110,10 +110,23 @@ export interface AgenticFlowEmbeddingConfig extends EmbeddingBaseConfig {
|
|
|
110
110
|
/** Auto-download model if not present */
|
|
111
111
|
autoDownload?: boolean;
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* RVF provider configuration
|
|
115
|
+
* Lightweight hash-based embeddings (no neural model, sub-ms latency)
|
|
116
|
+
*/
|
|
117
|
+
export interface RvfEmbeddingConfig extends EmbeddingBaseConfig {
|
|
118
|
+
provider: 'rvf';
|
|
119
|
+
/** Embedding dimensions (default: 384) */
|
|
120
|
+
dimensions?: number;
|
|
121
|
+
/** Path to binary cache file for persistent storage */
|
|
122
|
+
cachePath?: string;
|
|
123
|
+
/** Similarity metric preference (default: 'cosine') */
|
|
124
|
+
metric?: 'cosine' | 'l2' | 'dotproduct';
|
|
125
|
+
}
|
|
113
126
|
/**
|
|
114
127
|
* Union of all provider configs
|
|
115
128
|
*/
|
|
116
|
-
export type EmbeddingConfig = OpenAIEmbeddingConfig | TransformersEmbeddingConfig | MockEmbeddingConfig | AgenticFlowEmbeddingConfig;
|
|
129
|
+
export type EmbeddingConfig = OpenAIEmbeddingConfig | TransformersEmbeddingConfig | MockEmbeddingConfig | AgenticFlowEmbeddingConfig | RvfEmbeddingConfig;
|
|
117
130
|
/**
|
|
118
131
|
* Single embedding result
|
|
119
132
|
*/
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,cAAc,GAAG,MAAM,GAAG,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sparkleideas/embeddings",
|
|
3
|
-
"version": "3.0.0-alpha.12-patch.
|
|
3
|
+
"version": "3.0.0-alpha.12-patch.6",
|
|
4
4
|
"description": "V3 Embedding Service - OpenAI, Transformers.js, Agentic-Flow (ONNX), Mock providers with hyperbolic embeddings, normalization, and chunking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"vitest": "^4.0.16"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@sparkleideas/shared": "3.0.0-alpha.6-patch.
|
|
52
|
-
"@sparkleideas/agentic-flow": "2.0.2-alpha-patch.
|
|
51
|
+
"@sparkleideas/shared": "3.0.0-alpha.6-patch.6",
|
|
52
|
+
"@sparkleideas/agentic-flow": "2.0.2-alpha-patch.6"
|
|
53
53
|
},
|
|
54
54
|
"peerDependenciesMeta": {
|
|
55
55
|
"agentic-flow": {
|
package/src/embedding-service.ts
CHANGED
|
@@ -20,6 +20,7 @@ import type {
|
|
|
20
20
|
TransformersEmbeddingConfig,
|
|
21
21
|
MockEmbeddingConfig,
|
|
22
22
|
AgenticFlowEmbeddingConfig,
|
|
23
|
+
RvfEmbeddingConfig,
|
|
23
24
|
EmbeddingResult,
|
|
24
25
|
BatchEmbeddingResult,
|
|
25
26
|
IEmbeddingService,
|
|
@@ -32,6 +33,7 @@ import type {
|
|
|
32
33
|
} from './types.js';
|
|
33
34
|
import { normalize } from './normalization.js';
|
|
34
35
|
import { PersistentEmbeddingCache } from './persistent-cache.js';
|
|
36
|
+
import { RvfEmbeddingService } from './rvf-embedding-service.js';
|
|
35
37
|
|
|
36
38
|
// ============================================================================
|
|
37
39
|
// LRU Cache Implementation
|
|
@@ -874,6 +876,8 @@ export function createEmbeddingService(config: EmbeddingConfig): IEmbeddingServi
|
|
|
874
876
|
return new MockEmbeddingService(config as MockEmbeddingConfig);
|
|
875
877
|
case 'agentic-flow':
|
|
876
878
|
return new AgenticFlowEmbeddingService(config as AgenticFlowEmbeddingConfig);
|
|
879
|
+
case 'rvf':
|
|
880
|
+
return new RvfEmbeddingService(config as RvfEmbeddingConfig);
|
|
877
881
|
default:
|
|
878
882
|
console.warn(`Unknown provider, using mock`);
|
|
879
883
|
return new MockEmbeddingService({ provider: 'mock', dimensions: 384 });
|
|
@@ -927,7 +931,18 @@ export async function createEmbeddingServiceAsync(
|
|
|
927
931
|
|
|
928
932
|
// Auto provider selection
|
|
929
933
|
if (provider === 'auto') {
|
|
930
|
-
// Try
|
|
934
|
+
// Try RVF first (52KB, always available, fast hash embeddings)
|
|
935
|
+
try {
|
|
936
|
+
const service = new RvfEmbeddingService({
|
|
937
|
+
provider: 'rvf',
|
|
938
|
+
dimensions: rest.dimensions ?? 384,
|
|
939
|
+
cacheSize: rest.cacheSize,
|
|
940
|
+
});
|
|
941
|
+
await service.embed('test');
|
|
942
|
+
return service;
|
|
943
|
+
} catch { /* fall through */ }
|
|
944
|
+
|
|
945
|
+
// Try agentic-flow (fastest neural, ONNX-based)
|
|
931
946
|
let agenticFlowAvailable = await isAgenticFlowAvailable();
|
|
932
947
|
|
|
933
948
|
// Auto-install if not available and autoInstall is enabled
|
|
@@ -997,6 +1012,12 @@ export async function createEmbeddingServiceAsync(
|
|
|
997
1012
|
dimensions: rest.dimensions,
|
|
998
1013
|
cacheSize: rest.cacheSize,
|
|
999
1014
|
});
|
|
1015
|
+
case 'rvf':
|
|
1016
|
+
return new RvfEmbeddingService({
|
|
1017
|
+
provider: 'rvf',
|
|
1018
|
+
dimensions: rest.dimensions ?? 384,
|
|
1019
|
+
cacheSize: rest.cacheSize,
|
|
1020
|
+
});
|
|
1000
1021
|
case 'mock':
|
|
1001
1022
|
return new MockEmbeddingService({
|
|
1002
1023
|
dimensions: rest.dimensions ?? 384,
|
package/src/index.ts
CHANGED
|
@@ -37,6 +37,15 @@ export {
|
|
|
37
37
|
|
|
38
38
|
export type { AutoEmbeddingConfig } from './embedding-service.js';
|
|
39
39
|
|
|
40
|
+
// RVF embedding service (pure-TS hash-based embeddings)
|
|
41
|
+
export { RvfEmbeddingService } from './rvf-embedding-service.js';
|
|
42
|
+
|
|
43
|
+
// RVF embedding cache (binary file persistence)
|
|
44
|
+
export {
|
|
45
|
+
RvfEmbeddingCache,
|
|
46
|
+
type RvfEmbeddingCacheConfig,
|
|
47
|
+
} from './rvf-embedding-cache.js';
|
|
48
|
+
|
|
40
49
|
// Chunking utilities
|
|
41
50
|
export {
|
|
42
51
|
chunkText,
|
|
@@ -106,6 +115,7 @@ export type {
|
|
|
106
115
|
TransformersEmbeddingConfig,
|
|
107
116
|
MockEmbeddingConfig,
|
|
108
117
|
AgenticFlowEmbeddingConfig,
|
|
118
|
+
RvfEmbeddingConfig,
|
|
109
119
|
EmbeddingResult,
|
|
110
120
|
BatchEmbeddingResult,
|
|
111
121
|
IEmbeddingService,
|