@mrc2204/agent-smart-memo 4.0.8 → 4.0.9
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/hooks/auto-capture.d.ts.map +1 -1
- package/dist/hooks/auto-capture.js +37 -3
- package/dist/hooks/auto-capture.js.map +1 -1
- package/dist/scripts/reembed-collection.d.ts +2 -0
- package/dist/scripts/reembed-collection.d.ts.map +1 -0
- package/dist/scripts/reembed-collection.js +165 -0
- package/dist/scripts/reembed-collection.js.map +1 -0
- package/dist/services/embedding.d.ts +26 -5
- package/dist/services/embedding.d.ts.map +1 -1
- package/dist/services/embedding.js +248 -65
- package/dist/services/embedding.js.map +1 -1
- package/dist/services/qdrant.d.ts +19 -18
- package/dist/services/qdrant.d.ts.map +1 -1
- package/dist/services/qdrant.js +82 -21
- package/dist/services/qdrant.js.map +1 -1
- package/dist/tools/memory_store.d.ts.map +1 -1
- package/dist/tools/memory_store.js +25 -4
- package/dist/tools/memory_store.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
class EmbeddingHttpError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
bodyPreview;
|
|
4
|
+
constructor(status, bodyPreview, message) {
|
|
5
|
+
super(message || `Embedding API error: ${status}`);
|
|
6
|
+
this.name = "EmbeddingHttpError";
|
|
7
|
+
this.status = status;
|
|
8
|
+
this.bodyPreview = bodyPreview;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
1
11
|
/**
|
|
2
|
-
* Embedding service client
|
|
12
|
+
* Embedding service client
|
|
3
13
|
*/
|
|
4
14
|
export class EmbeddingClient {
|
|
5
15
|
config;
|
|
6
16
|
logger;
|
|
7
17
|
dimensions;
|
|
18
|
+
// conservative model context windows
|
|
19
|
+
modelMaxTokens = {
|
|
20
|
+
"text-embedding-3-small": 8192,
|
|
21
|
+
"text-embedding-3-large": 8192,
|
|
22
|
+
"qwen3-embedding:0.6b": 8192,
|
|
23
|
+
};
|
|
8
24
|
constructor(config, logger) {
|
|
9
25
|
this.config = {
|
|
10
26
|
embeddingApiUrl: config.embeddingApiUrl || "http://localhost:11434",
|
|
@@ -17,18 +33,24 @@ export class EmbeddingClient {
|
|
|
17
33
|
resolveEmbeddingEndpoints(rawBaseUrl) {
|
|
18
34
|
const base = (rawBaseUrl || "").trim();
|
|
19
35
|
const normalizedBase = (base || "http://localhost:11434").replace(/\/+$/, "");
|
|
20
|
-
// If already a full embeddings path, use directly.
|
|
21
36
|
if (/(\/v1\/embeddings|\/api\/embeddings)\/?$/i.test(normalizedBase)) {
|
|
22
37
|
return [normalizedBase];
|
|
23
38
|
}
|
|
24
|
-
// Smart handling for base URL only:
|
|
25
|
-
// 1) Prefer OpenAI-compatible /v1/embeddings (for proxypal/openai-like services)
|
|
26
|
-
// 2) Fallback to Ollama /api/embeddings (for backward compatibility)
|
|
27
39
|
return [`${normalizedBase}/v1/embeddings`, `${normalizedBase}/api/embeddings`];
|
|
28
40
|
}
|
|
29
41
|
isOpenAIEmbeddingEndpoint(url) {
|
|
30
42
|
return /\/v1\/embeddings\/?$/i.test(url);
|
|
31
43
|
}
|
|
44
|
+
getModelMaxTokens() {
|
|
45
|
+
return this.modelMaxTokens[this.config.model] || 4096;
|
|
46
|
+
}
|
|
47
|
+
getSafeChunkTokens(maxTokens) {
|
|
48
|
+
return Math.max(256, Math.floor(maxTokens * 0.95));
|
|
49
|
+
}
|
|
50
|
+
// Approximation: ~4 chars/token for multilingual text (safe-enough fallback)
|
|
51
|
+
estimateTokens(text) {
|
|
52
|
+
return Math.max(1, Math.ceil(text.length / 4));
|
|
53
|
+
}
|
|
32
54
|
normalizeInput(input) {
|
|
33
55
|
if (Array.isArray(input)) {
|
|
34
56
|
return input
|
|
@@ -41,89 +63,241 @@ export class EmbeddingClient {
|
|
|
41
63
|
}
|
|
42
64
|
return [];
|
|
43
65
|
}
|
|
66
|
+
chunkTextBySafeTokens(text, safeChunkTokens) {
|
|
67
|
+
const maxChars = Math.max(1, safeChunkTokens * 4);
|
|
68
|
+
if (text.length <= maxChars)
|
|
69
|
+
return [text];
|
|
70
|
+
const chunks = [];
|
|
71
|
+
let cursor = 0;
|
|
72
|
+
while (cursor < text.length) {
|
|
73
|
+
const remaining = text.length - cursor;
|
|
74
|
+
if (remaining <= maxChars) {
|
|
75
|
+
chunks.push(text.slice(cursor).trim());
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
let end = cursor + maxChars;
|
|
79
|
+
const window = text.slice(cursor, end);
|
|
80
|
+
const lastBreak = Math.max(window.lastIndexOf("\n"), window.lastIndexOf(" "));
|
|
81
|
+
if (lastBreak > Math.floor(maxChars * 0.5)) {
|
|
82
|
+
end = cursor + lastBreak;
|
|
83
|
+
}
|
|
84
|
+
const chunk = text.slice(cursor, end).trim();
|
|
85
|
+
if (chunk.length > 0)
|
|
86
|
+
chunks.push(chunk);
|
|
87
|
+
cursor = Math.max(end, cursor + 1);
|
|
88
|
+
}
|
|
89
|
+
return chunks.filter((c) => c.length > 0);
|
|
90
|
+
}
|
|
91
|
+
l2Normalize(vector) {
|
|
92
|
+
const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
|
|
93
|
+
if (!Number.isFinite(norm) || norm === 0)
|
|
94
|
+
return vector;
|
|
95
|
+
return vector.map((v) => v / norm);
|
|
96
|
+
}
|
|
97
|
+
weightedAverage(vectors, weights) {
|
|
98
|
+
if (vectors.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const dim = vectors[0].length;
|
|
101
|
+
const out = new Array(dim).fill(0);
|
|
102
|
+
const weightSum = weights.reduce((a, b) => a + b, 0) || 1;
|
|
103
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
104
|
+
const vec = vectors[i];
|
|
105
|
+
const w = weights[i] || 1;
|
|
106
|
+
for (let d = 0; d < dim; d++) {
|
|
107
|
+
out[d] += vec[d] * w;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (let d = 0; d < dim; d++) {
|
|
111
|
+
out[d] /= weightSum;
|
|
112
|
+
}
|
|
113
|
+
return this.l2Normalize(out);
|
|
114
|
+
}
|
|
44
115
|
/**
|
|
45
|
-
*
|
|
46
|
-
* Fallback to hash-based embedding if API unavailable
|
|
116
|
+
* Backward-compatible method
|
|
47
117
|
*/
|
|
48
118
|
async embed(text) {
|
|
119
|
+
const result = await this.embedDetailed(text);
|
|
120
|
+
return result.vector;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* New method with chunking + metadata
|
|
124
|
+
*/
|
|
125
|
+
async embedDetailed(text) {
|
|
49
126
|
const normalizedInput = this.normalizeInput(text);
|
|
50
|
-
// Validate/filter empty input BEFORE calling embedding API
|
|
51
127
|
if (normalizedInput.length === 0) {
|
|
52
128
|
this.logger.warn("[Embedding] Skip API call: empty input after trim/filter");
|
|
53
|
-
return
|
|
129
|
+
return {
|
|
130
|
+
vector: this.embedFromHash(""),
|
|
131
|
+
metadata: {
|
|
132
|
+
embedding_chunked: false,
|
|
133
|
+
embedding_chunks_count: 0,
|
|
134
|
+
embedding_chunking_strategy: "array_batch_weighted_avg",
|
|
135
|
+
embedding_model: this.config.model,
|
|
136
|
+
embedding_max_tokens: this.getModelMaxTokens(),
|
|
137
|
+
embedding_safe_chunk_tokens: this.getSafeChunkTokens(this.getModelMaxTokens()),
|
|
138
|
+
},
|
|
139
|
+
};
|
|
54
140
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
141
|
+
const mergedText = normalizedInput.join("\n\n");
|
|
142
|
+
const maxTokens = this.getModelMaxTokens();
|
|
143
|
+
// Retry by shrinking chunk size for 400 context-length failures
|
|
144
|
+
const safetyMultipliers = [0.95, 0.85, 0.75, 0.6];
|
|
145
|
+
for (const mul of safetyMultipliers) {
|
|
146
|
+
const safeChunkTokens = Math.max(256, Math.floor(maxTokens * mul));
|
|
147
|
+
const chunks = this.chunkTextBySafeTokens(mergedText, safeChunkTokens);
|
|
148
|
+
const chunkWeights = chunks.map((c) => this.estimateTokens(c));
|
|
149
|
+
try {
|
|
150
|
+
const vectors = await this.embedChunksFromApi(chunks);
|
|
151
|
+
const vector = vectors.length === 1
|
|
152
|
+
? this.l2Normalize(vectors[0])
|
|
153
|
+
: this.weightedAverage(vectors, chunkWeights);
|
|
154
|
+
return {
|
|
155
|
+
vector,
|
|
156
|
+
metadata: {
|
|
157
|
+
embedding_chunked: chunks.length > 1,
|
|
158
|
+
embedding_chunks_count: chunks.length,
|
|
159
|
+
embedding_chunking_strategy: "array_batch_weighted_avg",
|
|
160
|
+
embedding_model: this.config.model,
|
|
161
|
+
embedding_max_tokens: maxTokens,
|
|
162
|
+
embedding_safe_chunk_tokens: safeChunkTokens,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
const isContextLength400 = error instanceof EmbeddingHttpError &&
|
|
168
|
+
error.status === 400 &&
|
|
169
|
+
/context length|maximum context|too many tokens|exceed/i.test(error.bodyPreview || "");
|
|
170
|
+
if (isContextLength400) {
|
|
171
|
+
this.logger.warn(`[Embedding] 400 context-length detected. Retry with smaller chunk size (safeChunkTokens=${safeChunkTokens})`);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
// non context-length error -> fallback hash immediately
|
|
175
|
+
this.logger.warn(`[Embedding] API failed, fallback to hash embedding: ${error.message}`);
|
|
176
|
+
return {
|
|
177
|
+
vector: this.embedFromHash(mergedText),
|
|
178
|
+
metadata: {
|
|
179
|
+
embedding_chunked: chunks.length > 1,
|
|
180
|
+
embedding_chunks_count: chunks.length,
|
|
181
|
+
embedding_chunking_strategy: "array_batch_weighted_avg",
|
|
182
|
+
embedding_model: this.config.model,
|
|
183
|
+
embedding_max_tokens: maxTokens,
|
|
184
|
+
embedding_safe_chunk_tokens: safeChunkTokens,
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
58
188
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
189
|
+
// Exhausted shrink retries -> fallback hash
|
|
190
|
+
this.logger.warn("[Embedding] Exhausted context-length retries, fallback to hash embedding");
|
|
191
|
+
return {
|
|
192
|
+
vector: this.embedFromHash(mergedText),
|
|
193
|
+
metadata: {
|
|
194
|
+
embedding_chunked: true,
|
|
195
|
+
embedding_chunks_count: Math.max(1, this.chunkTextBySafeTokens(mergedText, this.getSafeChunkTokens(maxTokens)).length),
|
|
196
|
+
embedding_chunking_strategy: "array_batch_weighted_avg",
|
|
197
|
+
embedding_model: this.config.model,
|
|
198
|
+
embedding_max_tokens: maxTokens,
|
|
199
|
+
embedding_safe_chunk_tokens: this.getSafeChunkTokens(maxTokens),
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
async embedChunksFromApi(chunks) {
|
|
204
|
+
if (chunks.length === 0) {
|
|
205
|
+
throw new Error("No chunks to embed");
|
|
206
|
+
}
|
|
207
|
+
const endpoints = this.resolveEmbeddingEndpoints(this.config.embeddingApiUrl);
|
|
208
|
+
let lastError = null;
|
|
209
|
+
for (const url of endpoints) {
|
|
210
|
+
const useOpenAiFormat = this.isOpenAIEmbeddingEndpoint(url);
|
|
211
|
+
try {
|
|
212
|
+
if (process.env.EMBEDDING_DEBUG === "1") {
|
|
213
|
+
this.logger.debug?.(`[Embedding] API request schema: ${JSON.stringify({
|
|
214
|
+
endpoint: url,
|
|
215
|
+
model: this.config.model,
|
|
216
|
+
chunksCount: chunks.length,
|
|
217
|
+
firstChunkChars: chunks[0]?.length || 0,
|
|
218
|
+
firstChunkTokensEst: this.estimateTokens(chunks[0] || ""),
|
|
219
|
+
format: useOpenAiFormat ? "openai" : "ollama",
|
|
220
|
+
})}`);
|
|
221
|
+
}
|
|
222
|
+
if (!useOpenAiFormat && chunks.length > 1) {
|
|
223
|
+
// Ollama /api/embeddings: no array batch support in one call (do sequential fallback)
|
|
224
|
+
const vectors = [];
|
|
225
|
+
for (const c of chunks) {
|
|
226
|
+
vectors.push(await this.embedSingle(url, false, c));
|
|
227
|
+
}
|
|
228
|
+
return vectors;
|
|
229
|
+
}
|
|
230
|
+
const vectors = await this.embedBatch(url, useOpenAiFormat, chunks);
|
|
231
|
+
if (vectors.length !== chunks.length) {
|
|
232
|
+
throw new Error(`Embedding vector count mismatch: expected=${chunks.length}, got=${vectors.length}`);
|
|
233
|
+
}
|
|
234
|
+
return vectors;
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
lastError = error;
|
|
238
|
+
if (error instanceof EmbeddingHttpError &&
|
|
239
|
+
error.status === 404 &&
|
|
240
|
+
endpoints.length > 1 &&
|
|
241
|
+
url !== endpoints[endpoints.length - 1]) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (error instanceof EmbeddingHttpError &&
|
|
245
|
+
error.status === 429) {
|
|
246
|
+
// endpoint is rate-limited; try next endpoint if any
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
// for other errors we still may try next endpoint
|
|
250
|
+
if (url !== endpoints[endpoints.length - 1]) {
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
62
254
|
}
|
|
255
|
+
throw lastError || new Error("Embedding API error: no endpoint succeeded");
|
|
63
256
|
}
|
|
64
|
-
|
|
65
|
-
* Get embedding from API
|
|
66
|
-
*/
|
|
67
|
-
async embedFromApi(input) {
|
|
68
|
-
this.logger.debug?.(`[Embedding] Calling API with inputCount=${input.length} firstItemLength=${input[0]?.length || 0} preview=${JSON.stringify((input[0] || "").slice(0, 80))}`);
|
|
257
|
+
async embedBatch(url, useOpenAiFormat, chunks) {
|
|
69
258
|
const controller = new AbortController();
|
|
70
259
|
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
71
260
|
try {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
for (
|
|
75
|
-
const useOpenAiFormat = this.isOpenAIEmbeddingEndpoint(url);
|
|
261
|
+
// 429 retry/backoff
|
|
262
|
+
const max429Retries = 4;
|
|
263
|
+
for (let attempt = 0; attempt <= max429Retries; attempt++) {
|
|
76
264
|
const response = await fetch(url, {
|
|
77
265
|
method: "POST",
|
|
78
|
-
headers: {
|
|
79
|
-
"Content-Type": "application/json",
|
|
80
|
-
},
|
|
266
|
+
headers: { "Content-Type": "application/json" },
|
|
81
267
|
body: JSON.stringify(useOpenAiFormat
|
|
82
|
-
? {
|
|
83
|
-
|
|
84
|
-
input,
|
|
85
|
-
}
|
|
86
|
-
: {
|
|
87
|
-
model: this.config.model,
|
|
88
|
-
prompt: input[0],
|
|
89
|
-
}),
|
|
268
|
+
? { model: this.config.model, input: chunks }
|
|
269
|
+
: { model: this.config.model, prompt: chunks[0] }),
|
|
90
270
|
signal: controller.signal,
|
|
91
271
|
});
|
|
272
|
+
if (response.status === 429 && attempt < max429Retries) {
|
|
273
|
+
const backoffMs = Math.min(8000, 500 * Math.pow(2, attempt));
|
|
274
|
+
this.logger.warn(`[Embedding] 429 rate limit. Retry in ${backoffMs}ms (attempt ${attempt + 1}/${max429Retries})`);
|
|
275
|
+
await new Promise((r) => setTimeout(r, backoffMs));
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
92
278
|
if (!response.ok) {
|
|
93
279
|
const errorText = await response.text().catch(() => "Unknown error");
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
model: this.config.model,
|
|
98
|
-
inputType: Array.isArray(input) ? "array" : typeof input,
|
|
99
|
-
inputLength: Array.isArray(input) ? input.length : 0,
|
|
100
|
-
firstItemLength: input[0]?.length || 0,
|
|
101
|
-
})}`);
|
|
102
|
-
}
|
|
103
|
-
// If this endpoint not found and we still have fallback endpoint, continue.
|
|
104
|
-
if (response.status === 404 && endpoints.length > 1 && url !== endpoints[endpoints.length - 1]) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
lastError = new Error(`Embedding API error: ${response.status}`);
|
|
108
|
-
break;
|
|
280
|
+
const preview = errorText.substring(0, 300);
|
|
281
|
+
this.logger.error(`[Embedding] HTTP ${response.status} @ ${url}: ${preview}`);
|
|
282
|
+
throw new EmbeddingHttpError(response.status, preview);
|
|
109
283
|
}
|
|
110
284
|
const data = await response.json();
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
285
|
+
if (!useOpenAiFormat) {
|
|
286
|
+
if (data.embedding && Array.isArray(data.embedding)) {
|
|
287
|
+
return [data.embedding];
|
|
288
|
+
}
|
|
289
|
+
throw new Error("Invalid Ollama embedding response format");
|
|
115
290
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
291
|
+
if (Array.isArray(data.data)) {
|
|
292
|
+
const vectors = data.data
|
|
293
|
+
.map((d) => d?.embedding)
|
|
294
|
+
.filter((v) => Array.isArray(v));
|
|
295
|
+
if (vectors.length > 0)
|
|
296
|
+
return vectors;
|
|
120
297
|
}
|
|
121
|
-
|
|
122
|
-
lastError = new Error("Invalid embedding response format");
|
|
123
|
-
break;
|
|
298
|
+
throw new Error("Invalid OpenAI embedding response format");
|
|
124
299
|
}
|
|
125
|
-
|
|
126
|
-
throw lastError || new Error("Embedding API error: no endpoint succeeded");
|
|
300
|
+
throw new Error("Embedding API 429 retries exhausted");
|
|
127
301
|
}
|
|
128
302
|
catch (error) {
|
|
129
303
|
if (error.name === "AbortError") {
|
|
@@ -131,12 +305,21 @@ export class EmbeddingClient {
|
|
|
131
305
|
}
|
|
132
306
|
throw error;
|
|
133
307
|
}
|
|
308
|
+
finally {
|
|
309
|
+
clearTimeout(timeoutId);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
async embedSingle(url, useOpenAiFormat, chunk) {
|
|
313
|
+
const vectors = await this.embedBatch(url, useOpenAiFormat, [chunk]);
|
|
314
|
+
if (!vectors[0])
|
|
315
|
+
throw new Error("No embedding vector returned");
|
|
316
|
+
return vectors[0];
|
|
134
317
|
}
|
|
135
318
|
/**
|
|
136
319
|
* Fallback: Generate embedding from text hash (deterministic)
|
|
137
320
|
*/
|
|
138
321
|
embedFromHash(text) {
|
|
139
|
-
const hash = text.split(
|
|
322
|
+
const hash = text.split("").reduce((a, b) => {
|
|
140
323
|
a = ((a << 5) - a) + b.charCodeAt(0);
|
|
141
324
|
return a & a;
|
|
142
325
|
}, 0);
|
|
@@ -144,7 +327,7 @@ export class EmbeddingClient {
|
|
|
144
327
|
for (let i = 0; i < this.dimensions; i++) {
|
|
145
328
|
embedding.push(Math.sin(hash + i) * 0.1);
|
|
146
329
|
}
|
|
147
|
-
return embedding;
|
|
330
|
+
return this.l2Normalize(embedding);
|
|
148
331
|
}
|
|
149
332
|
/**
|
|
150
333
|
* Calculate cosine similarity
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/services/embedding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/services/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,35 +15,36 @@ export declare class QdrantClient {
|
|
|
15
15
|
private config;
|
|
16
16
|
private logger;
|
|
17
17
|
constructor(config: QdrantConfig, logger?: any);
|
|
18
|
+
getCollectionName(): string;
|
|
18
19
|
private sleep;
|
|
19
20
|
/**
|
|
20
21
|
* Make request with retry
|
|
21
22
|
*/
|
|
22
23
|
private request;
|
|
23
24
|
private isRetryableError;
|
|
24
|
-
/**
|
|
25
|
-
* Check if collection exists
|
|
26
|
-
*/
|
|
27
25
|
collectionExists(): Promise<boolean>;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
*/
|
|
26
|
+
getCollectionInfo(): Promise<any>;
|
|
27
|
+
countPoints(exact?: boolean): Promise<number>;
|
|
31
28
|
createCollection(): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Create payload index for efficient filtering
|
|
34
|
-
*/
|
|
35
29
|
createPayloadIndex(fieldName: string, fieldType: "keyword" | "integer" | "float" | "bool"): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Upsert points
|
|
38
|
-
*/
|
|
39
30
|
upsert(points: Point[]): Promise<void>;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
updateVectors(points: Array<{
|
|
32
|
+
id: any;
|
|
33
|
+
vector: number[];
|
|
34
|
+
}>): Promise<void>;
|
|
35
|
+
setPayload(payloadById: Array<{
|
|
36
|
+
id: string;
|
|
37
|
+
payload: Record<string, any>;
|
|
38
|
+
}>): Promise<void>;
|
|
39
|
+
scroll(limit: number, offset?: any, withVector?: boolean): Promise<{
|
|
40
|
+
points: Array<{
|
|
41
|
+
id: string;
|
|
42
|
+
payload: Record<string, any>;
|
|
43
|
+
vector?: number[];
|
|
44
|
+
}>;
|
|
45
|
+
nextOffset?: any;
|
|
46
|
+
}>;
|
|
43
47
|
search(vector: number[], limit?: number, filter?: Record<string, any>): Promise<ScoredPoint[]>;
|
|
44
|
-
/**
|
|
45
|
-
* Delete points by filter
|
|
46
|
-
*/
|
|
47
48
|
deleteByFilter(filter: Record<string, any>): Promise<void>;
|
|
48
49
|
}
|
|
49
50
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/services/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../src/services/qdrant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAM;gBAER,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,GAAG;IAa9C,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,KAAK;IAIb;;OAEG;YACW,OAAO;IAwCrB,OAAO,CAAC,gBAAgB;IAOlB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAYpC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC;IAIjC,WAAW,CAAC,KAAK,UAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BjC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB1E,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3F,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAwCtK,MAAM,CACV,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,GAAE,MAAU,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBnB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjE"}
|
package/dist/services/qdrant.js
CHANGED
|
@@ -16,6 +16,9 @@ export class QdrantClient {
|
|
|
16
16
|
};
|
|
17
17
|
this.logger = logger || console;
|
|
18
18
|
}
|
|
19
|
+
getCollectionName() {
|
|
20
|
+
return this.config.collection;
|
|
21
|
+
}
|
|
19
22
|
sleep(ms) {
|
|
20
23
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
21
24
|
}
|
|
@@ -36,7 +39,6 @@ export class QdrantClient {
|
|
|
36
39
|
const text = await response.text().catch(() => "Unknown error");
|
|
37
40
|
throw new Error(`HTTP ${response.status}: ${text}`);
|
|
38
41
|
}
|
|
39
|
-
// Some endpoints return empty body
|
|
40
42
|
const contentType = response.headers.get("content-type");
|
|
41
43
|
if (contentType?.includes("application/json")) {
|
|
42
44
|
return await response.json();
|
|
@@ -59,9 +61,6 @@ export class QdrantClient {
|
|
|
59
61
|
error.message.includes("ECONNREFUSED") ||
|
|
60
62
|
error.name === "AbortError";
|
|
61
63
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Check if collection exists
|
|
64
|
-
*/
|
|
65
64
|
async collectionExists() {
|
|
66
65
|
try {
|
|
67
66
|
await this.request(`/collections/${this.config.collection}`, { method: "GET" });
|
|
@@ -74,9 +73,17 @@ export class QdrantClient {
|
|
|
74
73
|
throw error;
|
|
75
74
|
}
|
|
76
75
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
async getCollectionInfo() {
|
|
77
|
+
return this.request(`/collections/${this.config.collection}`, { method: "GET" });
|
|
78
|
+
}
|
|
79
|
+
async countPoints(exact = true) {
|
|
80
|
+
const res = await this.request(`/collections/${this.config.collection}/points/count`, {
|
|
81
|
+
method: "POST",
|
|
82
|
+
headers: { "Content-Type": "application/json" },
|
|
83
|
+
body: JSON.stringify({ exact }),
|
|
84
|
+
});
|
|
85
|
+
return Number(res?.result?.count || 0);
|
|
86
|
+
}
|
|
80
87
|
async createCollection() {
|
|
81
88
|
const exists = await this.collectionExists();
|
|
82
89
|
if (exists) {
|
|
@@ -98,15 +105,11 @@ export class QdrantClient {
|
|
|
98
105
|
}),
|
|
99
106
|
});
|
|
100
107
|
this.logger.info(`[Qdrant] Collection created successfully`);
|
|
101
|
-
// Create payload indexes for memory isolation
|
|
102
108
|
await this.createPayloadIndex("namespace", "keyword");
|
|
103
109
|
await this.createPayloadIndex("source_agent", "keyword");
|
|
104
110
|
await this.createPayloadIndex("source_type", "keyword");
|
|
105
111
|
await this.createPayloadIndex("userId", "keyword");
|
|
106
112
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Create payload index for efficient filtering
|
|
109
|
-
*/
|
|
110
113
|
async createPayloadIndex(fieldName, fieldType) {
|
|
111
114
|
try {
|
|
112
115
|
await this.request(`/collections/${this.config.collection}/index`, {
|
|
@@ -120,13 +123,9 @@ export class QdrantClient {
|
|
|
120
123
|
this.logger.info(`[Qdrant] Created payload index: ${fieldName}`);
|
|
121
124
|
}
|
|
122
125
|
catch (error) {
|
|
123
|
-
// Index may already exist, log but don't fail
|
|
124
126
|
this.logger.warn(`[Qdrant] Failed to create index ${fieldName}: ${error.message}`);
|
|
125
127
|
}
|
|
126
128
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Upsert points
|
|
129
|
-
*/
|
|
130
129
|
async upsert(points) {
|
|
131
130
|
await this.request(`/collections/${this.config.collection}/points`, {
|
|
132
131
|
method: "PUT",
|
|
@@ -134,9 +133,74 @@ export class QdrantClient {
|
|
|
134
133
|
body: JSON.stringify({ points }),
|
|
135
134
|
});
|
|
136
135
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
async updateVectors(points) {
|
|
137
|
+
if (points.length === 0)
|
|
138
|
+
return;
|
|
139
|
+
try {
|
|
140
|
+
// Preferred endpoint
|
|
141
|
+
await this.request(`/collections/${this.config.collection}/points/vectors`, {
|
|
142
|
+
method: "PUT",
|
|
143
|
+
headers: { "Content-Type": "application/json" },
|
|
144
|
+
body: JSON.stringify({ points }),
|
|
145
|
+
});
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
this.logger.warn(`[Qdrant] updateVectors endpoint failed, fallback to upsert /points: ${error.message}`);
|
|
150
|
+
}
|
|
151
|
+
// Fallback (payload must be preserved by caller using upsert payload)
|
|
152
|
+
throw new Error("updateVectors endpoint unsupported");
|
|
153
|
+
}
|
|
154
|
+
async setPayload(payloadById) {
|
|
155
|
+
if (payloadById.length === 0)
|
|
156
|
+
return;
|
|
157
|
+
// set_payload can set same payload for selected points; here we do per-point via upsert fallback pattern in caller.
|
|
158
|
+
// Keep method for future expansion.
|
|
159
|
+
for (const row of payloadById) {
|
|
160
|
+
await this.request(`/collections/${this.config.collection}/points/payload`, {
|
|
161
|
+
method: "POST",
|
|
162
|
+
headers: { "Content-Type": "application/json" },
|
|
163
|
+
body: JSON.stringify({
|
|
164
|
+
payload: row.payload,
|
|
165
|
+
points: [row.id],
|
|
166
|
+
}),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async scroll(limit, offset, withVector = false) {
|
|
171
|
+
const body = {
|
|
172
|
+
limit,
|
|
173
|
+
with_payload: true,
|
|
174
|
+
with_vector: withVector,
|
|
175
|
+
};
|
|
176
|
+
if (offset !== undefined && offset !== null) {
|
|
177
|
+
body.offset = offset;
|
|
178
|
+
}
|
|
179
|
+
const response = await this.request(`/collections/${this.config.collection}/points/scroll`, {
|
|
180
|
+
method: "POST",
|
|
181
|
+
headers: { "Content-Type": "application/json" },
|
|
182
|
+
body: JSON.stringify(body),
|
|
183
|
+
});
|
|
184
|
+
const points = (response?.result?.points || []).map((p) => {
|
|
185
|
+
let vector;
|
|
186
|
+
if (Array.isArray(p.vector))
|
|
187
|
+
vector = p.vector;
|
|
188
|
+
else if (p.vector && typeof p.vector === "object") {
|
|
189
|
+
const values = Object.values(p.vector);
|
|
190
|
+
if (Array.isArray(values[0]))
|
|
191
|
+
vector = values[0];
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
id: p.id,
|
|
195
|
+
payload: p.payload || {},
|
|
196
|
+
vector,
|
|
197
|
+
};
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
points,
|
|
201
|
+
nextOffset: response?.result?.next_page_offset,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
140
204
|
async search(vector, limit = 5, filter) {
|
|
141
205
|
const body = {
|
|
142
206
|
vector,
|
|
@@ -154,9 +218,6 @@ export class QdrantClient {
|
|
|
154
218
|
});
|
|
155
219
|
return response.result || [];
|
|
156
220
|
}
|
|
157
|
-
/**
|
|
158
|
-
* Delete points by filter
|
|
159
|
-
*/
|
|
160
221
|
async deleteByFilter(filter) {
|
|
161
222
|
await this.request(`/collections/${this.config.collection}/points/delete`, {
|
|
162
223
|
method: "POST",
|