@mcampa/ai-context-core 0.0.1 → 0.0.2-beta.2250c7e
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 +55 -47
- package/dist/.tsbuildinfo +1 -1
- package/dist/context.d.ts +30 -5
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +160 -16
- package/dist/context.js.map +1 -1
- package/dist/embedding/base-embedding.d.ts.map +1 -1
- package/dist/embedding/base-embedding.js +4 -0
- package/dist/embedding/base-embedding.js.map +1 -1
- package/dist/embedding/gemini-embedding.d.ts +43 -1
- package/dist/embedding/gemini-embedding.d.ts.map +1 -1
- package/dist/embedding/gemini-embedding.js +164 -26
- package/dist/embedding/gemini-embedding.js.map +1 -1
- package/dist/embedding/huggingface-embedding.d.ts +70 -0
- package/dist/embedding/huggingface-embedding.d.ts.map +1 -0
- package/dist/embedding/huggingface-embedding.js +270 -0
- package/dist/embedding/huggingface-embedding.js.map +1 -0
- package/dist/embedding/index.d.ts +3 -2
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +3 -2
- package/dist/embedding/index.js.map +1 -1
- package/dist/embedding/ollama-embedding.d.ts +2 -1
- package/dist/embedding/ollama-embedding.d.ts.map +1 -1
- package/dist/embedding/ollama-embedding.js +2 -3
- package/dist/embedding/ollama-embedding.js.map +1 -1
- package/dist/embedding/openai-embedding.d.ts +2 -1
- package/dist/embedding/openai-embedding.d.ts.map +1 -1
- package/dist/embedding/openai-embedding.js +3 -3
- package/dist/embedding/openai-embedding.js.map +1 -1
- package/dist/embedding/voyageai-embedding.d.ts +2 -1
- package/dist/embedding/voyageai-embedding.d.ts.map +1 -1
- package/dist/embedding/voyageai-embedding.js +2 -2
- package/dist/embedding/voyageai-embedding.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/splitter/ast-splitter.d.ts +1 -1
- package/dist/splitter/ast-splitter.d.ts.map +1 -1
- package/dist/splitter/ast-splitter.js +7 -7
- package/dist/splitter/ast-splitter.js.map +1 -1
- package/dist/splitter/index.d.ts +4 -4
- package/dist/splitter/index.d.ts.map +1 -1
- package/dist/splitter/index.js +1 -1
- package/dist/splitter/index.js.map +1 -1
- package/dist/splitter/langchain-splitter.d.ts +1 -1
- package/dist/splitter/langchain-splitter.d.ts.map +1 -1
- package/dist/splitter/langchain-splitter.js +2 -2
- package/dist/splitter/langchain-splitter.js.map +1 -1
- package/dist/sync/merkle.js +1 -1
- package/dist/sync/merkle.js.map +1 -1
- package/dist/sync/synchronizer.js +6 -6
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/utils/env-manager.js +4 -4
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/vectordb/base/base-vector-database.d.ts +58 -0
- package/dist/vectordb/base/base-vector-database.d.ts.map +1 -0
- package/dist/vectordb/base/base-vector-database.js +32 -0
- package/dist/vectordb/base/base-vector-database.js.map +1 -0
- package/dist/vectordb/factory.d.ts +113 -0
- package/dist/vectordb/factory.d.ts.map +1 -0
- package/dist/vectordb/factory.js +170 -0
- package/dist/vectordb/factory.js.map +1 -0
- package/dist/vectordb/faiss-vectordb.d.ts +162 -0
- package/dist/vectordb/faiss-vectordb.d.ts.map +1 -0
- package/dist/vectordb/faiss-vectordb.js +777 -0
- package/dist/vectordb/faiss-vectordb.js.map +1 -0
- package/dist/vectordb/index.d.ts +13 -4
- package/dist/vectordb/index.d.ts.map +1 -1
- package/dist/vectordb/index.js +39 -5
- package/dist/vectordb/index.js.map +1 -1
- package/dist/vectordb/libsql-vectordb.d.ts +170 -0
- package/dist/vectordb/libsql-vectordb.d.ts.map +1 -0
- package/dist/vectordb/libsql-vectordb.js +837 -0
- package/dist/vectordb/libsql-vectordb.js.map +1 -0
- package/dist/vectordb/milvus-restful-vectordb.d.ts +12 -11
- package/dist/vectordb/milvus-restful-vectordb.d.ts.map +1 -1
- package/dist/vectordb/milvus-restful-vectordb.js +29 -31
- package/dist/vectordb/milvus-restful-vectordb.js.map +1 -1
- package/dist/vectordb/milvus-vectordb.d.ts +12 -12
- package/dist/vectordb/milvus-vectordb.d.ts.map +1 -1
- package/dist/vectordb/milvus-vectordb.js +31 -28
- package/dist/vectordb/milvus-vectordb.js.map +1 -1
- package/dist/vectordb/qdrant-vectordb.d.ts +149 -0
- package/dist/vectordb/qdrant-vectordb.d.ts.map +1 -0
- package/dist/vectordb/qdrant-vectordb.js +856 -0
- package/dist/vectordb/qdrant-vectordb.js.map +1 -0
- package/dist/vectordb/sparse/index.d.ts +4 -0
- package/dist/vectordb/sparse/index.d.ts.map +1 -0
- package/dist/vectordb/sparse/index.js +23 -0
- package/dist/vectordb/sparse/index.js.map +1 -0
- package/dist/vectordb/sparse/simple-bm25.d.ts +115 -0
- package/dist/vectordb/sparse/simple-bm25.d.ts.map +1 -0
- package/dist/vectordb/sparse/simple-bm25.js +249 -0
- package/dist/vectordb/sparse/simple-bm25.js.map +1 -0
- package/dist/vectordb/sparse/sparse-vector-generator.d.ts +54 -0
- package/dist/vectordb/sparse/sparse-vector-generator.d.ts.map +1 -0
- package/dist/vectordb/sparse/sparse-vector-generator.js +3 -0
- package/dist/vectordb/sparse/sparse-vector-generator.js.map +1 -0
- package/dist/vectordb/sparse/types.d.ts +38 -0
- package/dist/vectordb/sparse/types.d.ts.map +1 -0
- package/dist/vectordb/sparse/types.js +3 -0
- package/dist/vectordb/sparse/types.js.map +1 -0
- package/dist/vectordb/types.d.ts +16 -16
- package/dist/vectordb/types.d.ts.map +1 -1
- package/dist/vectordb/types.js.map +1 -1
- package/dist/vectordb/zilliz-utils.js +3 -3
- package/dist/vectordb/zilliz-utils.js.map +1 -1
- package/package.json +32 -22
|
@@ -9,6 +9,8 @@ class GeminiEmbedding extends base_embedding_1.Embedding {
|
|
|
9
9
|
this.dimension = 3072; // Default dimension for gemini-embedding-001
|
|
10
10
|
this.maxTokens = 2048; // Maximum tokens for Gemini embedding models
|
|
11
11
|
this.config = config;
|
|
12
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
13
|
+
this.baseDelay = config.baseDelay ?? 1000;
|
|
12
14
|
this.client = new genai_1.GoogleGenAI({
|
|
13
15
|
apiKey: config.apiKey,
|
|
14
16
|
...(config.baseURL && {
|
|
@@ -37,6 +39,91 @@ class GeminiEmbedding extends base_embedding_1.Embedding {
|
|
|
37
39
|
this.maxTokens = 2048;
|
|
38
40
|
}
|
|
39
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Determine if an error is retryable
|
|
44
|
+
* @param error Error object to check
|
|
45
|
+
* @returns True if error is retryable
|
|
46
|
+
*/
|
|
47
|
+
isRetryableError(error) {
|
|
48
|
+
if (typeof error !== "object" || error === null) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// Network errors
|
|
52
|
+
const networkErrorCodes = [
|
|
53
|
+
"ECONNREFUSED",
|
|
54
|
+
"ETIMEDOUT",
|
|
55
|
+
"ENOTFOUND",
|
|
56
|
+
"EAI_AGAIN",
|
|
57
|
+
];
|
|
58
|
+
if ("code" in error &&
|
|
59
|
+
typeof error.code === "string" &&
|
|
60
|
+
networkErrorCodes.includes(error.code)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
// HTTP status codes
|
|
64
|
+
const retryableStatusCodes = [429, 500, 502, 503, 504];
|
|
65
|
+
if ("status" in error &&
|
|
66
|
+
typeof error.status === "number" &&
|
|
67
|
+
retryableStatusCodes.includes(error.status)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
// Error message patterns
|
|
71
|
+
const errorMessage = "message" in error && typeof error.message === "string"
|
|
72
|
+
? error.message.toLowerCase()
|
|
73
|
+
: "";
|
|
74
|
+
const retryablePatterns = [
|
|
75
|
+
"rate limit",
|
|
76
|
+
"quota exceeded",
|
|
77
|
+
"service unavailable",
|
|
78
|
+
"timeout",
|
|
79
|
+
"connection",
|
|
80
|
+
];
|
|
81
|
+
return retryablePatterns.some((pattern) => errorMessage.includes(pattern));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sleep for specified milliseconds
|
|
85
|
+
* @param ms Milliseconds to sleep
|
|
86
|
+
*/
|
|
87
|
+
async sleep(ms) {
|
|
88
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Execute operation with retry logic
|
|
92
|
+
* Only retries on retryable errors (network errors, rate limits, server errors)
|
|
93
|
+
* @param operation Operation to execute
|
|
94
|
+
* @param context Context string for error messages
|
|
95
|
+
* @returns Operation result
|
|
96
|
+
*/
|
|
97
|
+
async executeWithRetry(operation, context) {
|
|
98
|
+
let lastError;
|
|
99
|
+
for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
|
|
100
|
+
try {
|
|
101
|
+
return await operation();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
lastError = error;
|
|
105
|
+
// If error is not retryable, fail immediately
|
|
106
|
+
if (!this.isRetryableError(error)) {
|
|
107
|
+
const err = new Error(`${context}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
108
|
+
err.cause = error;
|
|
109
|
+
throw err;
|
|
110
|
+
}
|
|
111
|
+
// If we've exhausted all retries, throw the error
|
|
112
|
+
if (attempt === this.maxRetries) {
|
|
113
|
+
const err = new Error(`${context}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
114
|
+
err.cause = error;
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
// Calculate delay with exponential backoff (capped at 10s)
|
|
118
|
+
const delay = Math.min(this.baseDelay * 2 ** attempt, 10000);
|
|
119
|
+
await this.sleep(delay);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// This should never be reached, but TypeScript needs it
|
|
123
|
+
const err = new Error(`${context}: ${lastError instanceof Error ? lastError.message : "Unknown error"}`);
|
|
124
|
+
err.cause = lastError;
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
40
127
|
async detectDimension() {
|
|
41
128
|
// Gemini doesn't need dynamic detection, return configured dimension
|
|
42
129
|
return this.dimension;
|
|
@@ -44,9 +131,9 @@ class GeminiEmbedding extends base_embedding_1.Embedding {
|
|
|
44
131
|
async embed(text) {
|
|
45
132
|
const processedText = this.preprocessText(text);
|
|
46
133
|
const model = this.config.model || "gemini-embedding-001";
|
|
47
|
-
|
|
134
|
+
return this.executeWithRetry(async () => {
|
|
48
135
|
const response = await this.client.models.embedContent({
|
|
49
|
-
model
|
|
136
|
+
model,
|
|
50
137
|
contents: processedText,
|
|
51
138
|
config: {
|
|
52
139
|
outputDimensionality: this.config.outputDimensionality || this.dimension,
|
|
@@ -61,37 +148,58 @@ class GeminiEmbedding extends base_embedding_1.Embedding {
|
|
|
61
148
|
vector: response.embeddings[0].values,
|
|
62
149
|
dimension: response.embeddings[0].values.length,
|
|
63
150
|
};
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
throw new Error(`Gemini embedding failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
67
|
-
}
|
|
151
|
+
}, "Gemini embedding failed");
|
|
68
152
|
}
|
|
69
153
|
async embedBatch(texts) {
|
|
70
154
|
const processedTexts = this.preprocessTexts(texts);
|
|
71
155
|
const model = this.config.model || "gemini-embedding-001";
|
|
156
|
+
// Try batch processing with retry logic
|
|
72
157
|
try {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return response.embeddings.map((embedding) => {
|
|
84
|
-
if (!embedding.values) {
|
|
85
|
-
throw new Error("Gemini API returned invalid embedding data");
|
|
158
|
+
return await this.executeWithRetry(async () => {
|
|
159
|
+
const response = await this.client.models.embedContent({
|
|
160
|
+
model,
|
|
161
|
+
contents: processedTexts,
|
|
162
|
+
config: {
|
|
163
|
+
outputDimensionality: this.config.outputDimensionality || this.dimension,
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
if (!response.embeddings) {
|
|
167
|
+
throw new Error("Gemini API returned invalid response");
|
|
86
168
|
}
|
|
87
|
-
return {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
169
|
+
return response.embeddings.map((embedding) => {
|
|
170
|
+
if (!embedding.values) {
|
|
171
|
+
throw new Error("Gemini API returned invalid embedding data");
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
vector: embedding.values,
|
|
175
|
+
dimension: embedding.values.length,
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
}, "Gemini batch embedding failed");
|
|
92
179
|
}
|
|
93
|
-
catch
|
|
94
|
-
|
|
180
|
+
catch {
|
|
181
|
+
// Fallback: Process individually if batch fails after all retries
|
|
182
|
+
// Add delay between requests to avoid rate limiting
|
|
183
|
+
const results = [];
|
|
184
|
+
const FALLBACK_DELAY_MS = 100; // Delay between individual requests
|
|
185
|
+
for (let i = 0; i < processedTexts.length; i++) {
|
|
186
|
+
const text = processedTexts[i];
|
|
187
|
+
try {
|
|
188
|
+
// Add delay between requests (except for first)
|
|
189
|
+
if (i > 0) {
|
|
190
|
+
await new Promise((resolve) => setTimeout(resolve, FALLBACK_DELAY_MS));
|
|
191
|
+
}
|
|
192
|
+
const result = await this.embed(text);
|
|
193
|
+
results.push(result);
|
|
194
|
+
}
|
|
195
|
+
catch (individualError) {
|
|
196
|
+
// If individual request also fails, re-throw the error with cause
|
|
197
|
+
const error = new Error("Gemini batch embedding failed (both batch and individual attempts failed)");
|
|
198
|
+
error.cause = individualError;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return results;
|
|
95
203
|
}
|
|
96
204
|
}
|
|
97
205
|
getDimension() {
|
|
@@ -149,6 +257,36 @@ class GeminiEmbedding extends base_embedding_1.Embedding {
|
|
|
149
257
|
const supportedDimensions = this.getSupportedDimensions();
|
|
150
258
|
return supportedDimensions.includes(dimension);
|
|
151
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Get current retry configuration
|
|
262
|
+
* @returns Object containing maxRetries and baseDelay
|
|
263
|
+
*/
|
|
264
|
+
getRetryConfig() {
|
|
265
|
+
return {
|
|
266
|
+
maxRetries: this.maxRetries,
|
|
267
|
+
baseDelay: this.baseDelay,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Set maximum number of retry attempts
|
|
272
|
+
* @param maxRetries Maximum retry attempts
|
|
273
|
+
*/
|
|
274
|
+
setMaxRetries(maxRetries) {
|
|
275
|
+
if (maxRetries < 0) {
|
|
276
|
+
throw new Error("maxRetries must be non-negative");
|
|
277
|
+
}
|
|
278
|
+
this.maxRetries = maxRetries;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Set base delay for exponential backoff
|
|
282
|
+
* @param baseDelay Base delay in milliseconds
|
|
283
|
+
*/
|
|
284
|
+
setBaseDelay(baseDelay) {
|
|
285
|
+
if (baseDelay <= 0) {
|
|
286
|
+
throw new Error("baseDelay must be positive");
|
|
287
|
+
}
|
|
288
|
+
this.baseDelay = baseDelay;
|
|
289
|
+
}
|
|
152
290
|
}
|
|
153
291
|
exports.GeminiEmbedding = GeminiEmbedding;
|
|
154
292
|
//# sourceMappingURL=gemini-embedding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-embedding.js","sourceRoot":"","sources":["../../src/embedding/gemini-embedding.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"gemini-embedding.js","sourceRoot":"","sources":["../../src/embedding/gemini-embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { EmbeddingVector } from "./base-embedding";
|
|
2
|
+
import { Embedding } from "./base-embedding";
|
|
3
|
+
export type HuggingFaceDtype = "fp32" | "fp16" | "q8" | "q4" | "q4f16";
|
|
4
|
+
export interface HuggingFaceEmbeddingConfig {
|
|
5
|
+
model?: string;
|
|
6
|
+
dtype?: HuggingFaceDtype;
|
|
7
|
+
queryPrefix?: string;
|
|
8
|
+
cacheDir?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class HuggingFaceEmbedding extends Embedding {
|
|
11
|
+
protected maxTokens: number;
|
|
12
|
+
private model;
|
|
13
|
+
private tokenizer;
|
|
14
|
+
private dimension;
|
|
15
|
+
private config;
|
|
16
|
+
private modelLoading;
|
|
17
|
+
private transformersModule;
|
|
18
|
+
constructor(config?: HuggingFaceEmbeddingConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Get list of supported LEAF models
|
|
21
|
+
*/
|
|
22
|
+
static getSupportedModels(): Record<string, {
|
|
23
|
+
dimension: number;
|
|
24
|
+
maxTokens: number;
|
|
25
|
+
description: string;
|
|
26
|
+
queryPrefix?: string;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Lazy load transformers module
|
|
30
|
+
*/
|
|
31
|
+
private getTransformersModule;
|
|
32
|
+
/**
|
|
33
|
+
* Lazy load model and tokenizer on first use
|
|
34
|
+
*/
|
|
35
|
+
private ensureModel;
|
|
36
|
+
/**
|
|
37
|
+
* Actually load the model and tokenizer
|
|
38
|
+
*/
|
|
39
|
+
private loadModel;
|
|
40
|
+
/**
|
|
41
|
+
* Apply query prefix if configured (for IR models)
|
|
42
|
+
*/
|
|
43
|
+
private applyQueryPrefix;
|
|
44
|
+
detectDimension(): Promise<number>;
|
|
45
|
+
embed(text: string): Promise<EmbeddingVector>;
|
|
46
|
+
embedBatch(texts: string[]): Promise<EmbeddingVector[]>;
|
|
47
|
+
getDimension(): number;
|
|
48
|
+
getProvider(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Get the current model ID
|
|
51
|
+
*/
|
|
52
|
+
getModel(): string;
|
|
53
|
+
/**
|
|
54
|
+
* Get the current dtype setting
|
|
55
|
+
*/
|
|
56
|
+
getDtype(): HuggingFaceDtype;
|
|
57
|
+
/**
|
|
58
|
+
* Get the query prefix (if any)
|
|
59
|
+
*/
|
|
60
|
+
getQueryPrefix(): string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Check if model is loaded
|
|
63
|
+
*/
|
|
64
|
+
isModelLoaded(): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Preload the model (optional, for eager loading)
|
|
67
|
+
*/
|
|
68
|
+
preload(): Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=huggingface-embedding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huggingface-embedding.d.ts","sourceRoot":"","sources":["../../src/embedding/huggingface-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,SAAS,CAAC,SAAS,EAAE,MAAM,CAAO;IAClC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,kBAAkB,CAAmC;gBAEjD,MAAM,GAAE,0BAA+B;IAsBnD;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,CACjC,MAAM,EACN;QACE,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CACF;IAoBD;;OAEG;YACW,qBAAqB;IAYnC;;OAEG;YACW,WAAW;IAiBzB;;OAEG;YACW,SAAS;IAiCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOlB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKlC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA0C7C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA2D7D,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,QAAQ,IAAI,gBAAgB;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.HuggingFaceEmbedding = void 0;
|
|
37
|
+
const base_embedding_1 = require("./base-embedding");
|
|
38
|
+
class HuggingFaceEmbedding extends base_embedding_1.Embedding {
|
|
39
|
+
constructor(config = {}) {
|
|
40
|
+
super();
|
|
41
|
+
this.maxTokens = 512;
|
|
42
|
+
this.model = null;
|
|
43
|
+
this.tokenizer = null;
|
|
44
|
+
this.dimension = 768;
|
|
45
|
+
this.modelLoading = null;
|
|
46
|
+
this.transformersModule = null;
|
|
47
|
+
this.config = {
|
|
48
|
+
model: config.model ?? "MongoDB/mdbr-leaf-ir",
|
|
49
|
+
dtype: config.dtype ?? "fp32",
|
|
50
|
+
queryPrefix: config.queryPrefix,
|
|
51
|
+
cacheDir: config.cacheDir,
|
|
52
|
+
};
|
|
53
|
+
// Set dimension and query prefix based on model
|
|
54
|
+
const modelId = this.config.model ?? "MongoDB/mdbr-leaf-ir";
|
|
55
|
+
const modelInfo = HuggingFaceEmbedding.getSupportedModels()[modelId];
|
|
56
|
+
if (modelInfo) {
|
|
57
|
+
this.dimension = modelInfo.dimension;
|
|
58
|
+
this.maxTokens = modelInfo.maxTokens;
|
|
59
|
+
// Use model-specific query prefix if not overridden
|
|
60
|
+
if (this.config.queryPrefix === undefined) {
|
|
61
|
+
this.config.queryPrefix = modelInfo.queryPrefix;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get list of supported LEAF models
|
|
67
|
+
*/
|
|
68
|
+
static getSupportedModels() {
|
|
69
|
+
return {
|
|
70
|
+
"MongoDB/mdbr-leaf-ir": {
|
|
71
|
+
dimension: 768,
|
|
72
|
+
maxTokens: 512,
|
|
73
|
+
description: "LEAF model optimized for information retrieval and semantic search (DEFAULT)",
|
|
74
|
+
queryPrefix: "Represent this sentence for searching relevant passages: ",
|
|
75
|
+
},
|
|
76
|
+
"MongoDB/mdbr-leaf-mt": {
|
|
77
|
+
dimension: 768,
|
|
78
|
+
maxTokens: 512,
|
|
79
|
+
description: "LEAF multi-task model for classification, clustering, and sentence similarity",
|
|
80
|
+
queryPrefix: undefined, // MT model doesn't use query prefix
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Lazy load transformers module
|
|
86
|
+
*/
|
|
87
|
+
async getTransformersModule() {
|
|
88
|
+
if (!this.transformersModule) {
|
|
89
|
+
this.transformersModule = await Promise.resolve().then(() => __importStar(require("@huggingface/transformers")));
|
|
90
|
+
// Configure cache directory if specified
|
|
91
|
+
if (this.config.cacheDir) {
|
|
92
|
+
this.transformersModule.env.cacheDir = this.config.cacheDir;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return this.transformersModule;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Lazy load model and tokenizer on first use
|
|
99
|
+
*/
|
|
100
|
+
async ensureModel() {
|
|
101
|
+
// If already loaded, return immediately
|
|
102
|
+
if (this.model && this.tokenizer) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// If loading is in progress, wait for it
|
|
106
|
+
if (this.modelLoading) {
|
|
107
|
+
await this.modelLoading;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Start loading
|
|
111
|
+
this.modelLoading = this.loadModel();
|
|
112
|
+
await this.modelLoading;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Actually load the model and tokenizer
|
|
116
|
+
*/
|
|
117
|
+
async loadModel() {
|
|
118
|
+
try {
|
|
119
|
+
const transformers = await this.getTransformersModule();
|
|
120
|
+
const modelId = this.config.model ?? "MongoDB/mdbr-leaf-ir";
|
|
121
|
+
console.log(`[HuggingFace] Loading model: ${modelId} (dtype: ${this.config.dtype})`);
|
|
122
|
+
// Load tokenizer and model in parallel
|
|
123
|
+
const [tokenizer, model] = await Promise.all([
|
|
124
|
+
transformers.AutoTokenizer.from_pretrained(modelId),
|
|
125
|
+
transformers.AutoModel.from_pretrained(modelId, {
|
|
126
|
+
dtype: this.config.dtype,
|
|
127
|
+
}),
|
|
128
|
+
]);
|
|
129
|
+
this.tokenizer = tokenizer;
|
|
130
|
+
this.model = model;
|
|
131
|
+
console.log(`[HuggingFace] Model loaded successfully: ${modelId}`);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
this.modelLoading = null; // Reset so it can be retried
|
|
135
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
136
|
+
const err = new Error(`Failed to load HuggingFace model ${this.config.model}: ${errorMessage}`);
|
|
137
|
+
err.cause = error;
|
|
138
|
+
throw err;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Apply query prefix if configured (for IR models)
|
|
143
|
+
*/
|
|
144
|
+
applyQueryPrefix(text) {
|
|
145
|
+
if (this.config.queryPrefix) {
|
|
146
|
+
return this.config.queryPrefix + text;
|
|
147
|
+
}
|
|
148
|
+
return text;
|
|
149
|
+
}
|
|
150
|
+
async detectDimension() {
|
|
151
|
+
// LEAF models have fixed dimensions, no dynamic detection needed
|
|
152
|
+
return this.dimension;
|
|
153
|
+
}
|
|
154
|
+
async embed(text) {
|
|
155
|
+
await this.ensureModel();
|
|
156
|
+
if (!this.model || !this.tokenizer) {
|
|
157
|
+
throw new Error("Model or tokenizer failed to initialize");
|
|
158
|
+
}
|
|
159
|
+
const processedText = this.preprocessText(text);
|
|
160
|
+
const prefixedText = this.applyQueryPrefix(processedText);
|
|
161
|
+
try {
|
|
162
|
+
// Tokenize with truncation to handle texts longer than maxTokens
|
|
163
|
+
const inputs = await this.tokenizer([prefixedText], {
|
|
164
|
+
padding: true,
|
|
165
|
+
truncation: true,
|
|
166
|
+
max_length: this.maxTokens,
|
|
167
|
+
});
|
|
168
|
+
// Get embeddings
|
|
169
|
+
const outputs = await this.model(inputs);
|
|
170
|
+
// Extract sentence embedding
|
|
171
|
+
if (!outputs.sentence_embedding) {
|
|
172
|
+
throw new Error("Model did not return sentence_embedding");
|
|
173
|
+
}
|
|
174
|
+
// Convert tensor to array
|
|
175
|
+
const embedding = outputs.sentence_embedding.tolist()[0];
|
|
176
|
+
return {
|
|
177
|
+
vector: embedding,
|
|
178
|
+
dimension: embedding.length,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
183
|
+
const err = new Error(`HuggingFace embedding failed: ${errorMessage}`);
|
|
184
|
+
err.cause = error;
|
|
185
|
+
throw err;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async embedBatch(texts) {
|
|
189
|
+
if (texts.length === 0) {
|
|
190
|
+
return [];
|
|
191
|
+
}
|
|
192
|
+
await this.ensureModel();
|
|
193
|
+
if (!this.model || !this.tokenizer) {
|
|
194
|
+
throw new Error("Model or tokenizer failed to initialize");
|
|
195
|
+
}
|
|
196
|
+
const processedTexts = this.preprocessTexts(texts);
|
|
197
|
+
const prefixedTexts = processedTexts.map((text) => this.applyQueryPrefix(text));
|
|
198
|
+
try {
|
|
199
|
+
// Tokenize batch with truncation to handle texts longer than maxTokens
|
|
200
|
+
const inputs = await this.tokenizer(prefixedTexts, {
|
|
201
|
+
padding: true,
|
|
202
|
+
truncation: true,
|
|
203
|
+
max_length: this.maxTokens,
|
|
204
|
+
});
|
|
205
|
+
// Get embeddings
|
|
206
|
+
const outputs = await this.model(inputs);
|
|
207
|
+
// Extract sentence embeddings
|
|
208
|
+
if (!outputs.sentence_embedding) {
|
|
209
|
+
throw new Error("Model did not return sentence_embedding");
|
|
210
|
+
}
|
|
211
|
+
// Convert tensor to array
|
|
212
|
+
const embeddings = outputs.sentence_embedding.tolist();
|
|
213
|
+
return embeddings.map((embedding) => ({
|
|
214
|
+
vector: embedding,
|
|
215
|
+
dimension: embedding.length,
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
// Fallback: process individually in parallel if batch fails
|
|
220
|
+
const batchErrorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
221
|
+
console.warn(`[HuggingFace] Batch embedding failed: ${batchErrorMessage}, falling back to parallel individual processing`);
|
|
222
|
+
try {
|
|
223
|
+
return await Promise.all(texts.map((text) => this.embed(text)));
|
|
224
|
+
}
|
|
225
|
+
catch (individualError) {
|
|
226
|
+
const err = new Error(`HuggingFace batch embedding failed (both batch and individual attempts failed): ${batchErrorMessage}`);
|
|
227
|
+
err.cause = individualError;
|
|
228
|
+
throw err;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
getDimension() {
|
|
233
|
+
return this.dimension;
|
|
234
|
+
}
|
|
235
|
+
getProvider() {
|
|
236
|
+
return "HuggingFace";
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get the current model ID
|
|
240
|
+
*/
|
|
241
|
+
getModel() {
|
|
242
|
+
return this.config.model ?? "MongoDB/mdbr-leaf-ir";
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get the current dtype setting
|
|
246
|
+
*/
|
|
247
|
+
getDtype() {
|
|
248
|
+
return this.config.dtype ?? "fp32";
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get the query prefix (if any)
|
|
252
|
+
*/
|
|
253
|
+
getQueryPrefix() {
|
|
254
|
+
return this.config.queryPrefix;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if model is loaded
|
|
258
|
+
*/
|
|
259
|
+
isModelLoaded() {
|
|
260
|
+
return this.model !== null && this.tokenizer !== null;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Preload the model (optional, for eager loading)
|
|
264
|
+
*/
|
|
265
|
+
async preload() {
|
|
266
|
+
await this.ensureModel();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
exports.HuggingFaceEmbedding = HuggingFaceEmbedding;
|
|
270
|
+
//# sourceMappingURL=huggingface-embedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"huggingface-embedding.js","sourceRoot":"","sources":["../../src/embedding/huggingface-embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./base-embedding";
|
|
2
|
+
export * from "./gemini-embedding";
|
|
3
|
+
export * from "./huggingface-embedding";
|
|
4
|
+
export * from "./ollama-embedding";
|
|
2
5
|
export * from "./openai-embedding";
|
|
3
6
|
export * from "./voyageai-embedding";
|
|
4
|
-
export * from "./ollama-embedding";
|
|
5
|
-
export * from "./gemini-embedding";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAEjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
|
package/dist/embedding/index.js
CHANGED
|
@@ -16,9 +16,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
// Export base classes and interfaces
|
|
18
18
|
__exportStar(require("./base-embedding"), exports);
|
|
19
|
+
__exportStar(require("./gemini-embedding"), exports);
|
|
20
|
+
__exportStar(require("./huggingface-embedding"), exports);
|
|
21
|
+
__exportStar(require("./ollama-embedding"), exports);
|
|
19
22
|
// Implementation class exports
|
|
20
23
|
__exportStar(require("./openai-embedding"), exports);
|
|
21
24
|
__exportStar(require("./voyageai-embedding"), exports);
|
|
22
|
-
__exportStar(require("./ollama-embedding"), exports);
|
|
23
|
-
__exportStar(require("./gemini-embedding"), exports);
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAqC;AACrC,mDAAiC;AAEjC,+BAA+B;AAC/B,qDAAmC;AACnC,uDAAqC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAAqC;AACrC,mDAAiC;AAEjC,qDAAmC;AACnC,0DAAwC;AACxC,qDAAmC;AACnC,+BAA+B;AAC/B,qDAAmC;AACnC,uDAAqC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { EmbeddingVector } from "./base-embedding";
|
|
1
2
|
import { Ollama } from "ollama";
|
|
2
|
-
import { Embedding
|
|
3
|
+
import { Embedding } from "./base-embedding";
|
|
3
4
|
export interface OllamaEmbeddingConfig {
|
|
4
5
|
model: string;
|
|
5
6
|
host?: string;
|