@pleaseai/context-please-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +287 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/context.d.ts +276 -0
  5. package/dist/context.d.ts.map +1 -0
  6. package/dist/context.js +1072 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/embedding/base-embedding.d.ts +51 -0
  9. package/dist/embedding/base-embedding.d.ts.map +1 -0
  10. package/dist/embedding/base-embedding.js +36 -0
  11. package/dist/embedding/base-embedding.js.map +1 -0
  12. package/dist/embedding/gemini-embedding.d.ts +53 -0
  13. package/dist/embedding/gemini-embedding.d.ts.map +1 -0
  14. package/dist/embedding/gemini-embedding.js +152 -0
  15. package/dist/embedding/gemini-embedding.js.map +1 -0
  16. package/dist/embedding/index.d.ts +6 -0
  17. package/dist/embedding/index.d.ts.map +1 -0
  18. package/dist/embedding/index.js +24 -0
  19. package/dist/embedding/index.js.map +1 -0
  20. package/dist/embedding/ollama-embedding.d.ts +55 -0
  21. package/dist/embedding/ollama-embedding.d.ts.map +1 -0
  22. package/dist/embedding/ollama-embedding.js +192 -0
  23. package/dist/embedding/ollama-embedding.js.map +1 -0
  24. package/dist/embedding/openai-embedding.d.ts +36 -0
  25. package/dist/embedding/openai-embedding.d.ts.map +1 -0
  26. package/dist/embedding/openai-embedding.js +159 -0
  27. package/dist/embedding/openai-embedding.js.map +1 -0
  28. package/dist/embedding/voyageai-embedding.d.ts +44 -0
  29. package/dist/embedding/voyageai-embedding.d.ts.map +1 -0
  30. package/dist/embedding/voyageai-embedding.js +227 -0
  31. package/dist/embedding/voyageai-embedding.js.map +1 -0
  32. package/dist/index.d.ts +8 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +24 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/splitter/ast-splitter.d.ts +22 -0
  37. package/dist/splitter/ast-splitter.d.ts.map +1 -0
  38. package/dist/splitter/ast-splitter.js +234 -0
  39. package/dist/splitter/ast-splitter.js.map +1 -0
  40. package/dist/splitter/index.d.ts +41 -0
  41. package/dist/splitter/index.d.ts.map +1 -0
  42. package/dist/splitter/index.js +27 -0
  43. package/dist/splitter/index.js.map +1 -0
  44. package/dist/splitter/langchain-splitter.d.ts +13 -0
  45. package/dist/splitter/langchain-splitter.d.ts.map +1 -0
  46. package/dist/splitter/langchain-splitter.js +118 -0
  47. package/dist/splitter/langchain-splitter.js.map +1 -0
  48. package/dist/sync/merkle.d.ts +26 -0
  49. package/dist/sync/merkle.d.ts.map +1 -0
  50. package/dist/sync/merkle.js +112 -0
  51. package/dist/sync/merkle.js.map +1 -0
  52. package/dist/sync/synchronizer.d.ts +30 -0
  53. package/dist/sync/synchronizer.d.ts.map +1 -0
  54. package/dist/sync/synchronizer.js +339 -0
  55. package/dist/sync/synchronizer.js.map +1 -0
  56. package/dist/types.d.ts +14 -0
  57. package/dist/types.d.ts.map +1 -0
  58. package/dist/types.js +3 -0
  59. package/dist/types.js.map +1 -0
  60. package/dist/utils/env-manager.d.ts +19 -0
  61. package/dist/utils/env-manager.d.ts.map +1 -0
  62. package/dist/utils/env-manager.js +125 -0
  63. package/dist/utils/env-manager.js.map +1 -0
  64. package/dist/utils/index.d.ts +2 -0
  65. package/dist/utils/index.d.ts.map +1 -0
  66. package/dist/utils/index.js +7 -0
  67. package/dist/utils/index.js.map +1 -0
  68. package/dist/vectordb/base/base-vector-database.d.ts +58 -0
  69. package/dist/vectordb/base/base-vector-database.d.ts.map +1 -0
  70. package/dist/vectordb/base/base-vector-database.js +32 -0
  71. package/dist/vectordb/base/base-vector-database.js.map +1 -0
  72. package/dist/vectordb/factory.d.ts +80 -0
  73. package/dist/vectordb/factory.d.ts.map +1 -0
  74. package/dist/vectordb/factory.js +89 -0
  75. package/dist/vectordb/factory.js.map +1 -0
  76. package/dist/vectordb/index.d.ts +12 -0
  77. package/dist/vectordb/index.d.ts.map +1 -0
  78. package/dist/vectordb/index.js +27 -0
  79. package/dist/vectordb/index.js.map +1 -0
  80. package/dist/vectordb/milvus-restful-vectordb.d.ts +75 -0
  81. package/dist/vectordb/milvus-restful-vectordb.d.ts.map +1 -0
  82. package/dist/vectordb/milvus-restful-vectordb.js +707 -0
  83. package/dist/vectordb/milvus-restful-vectordb.js.map +1 -0
  84. package/dist/vectordb/milvus-vectordb.d.ts +59 -0
  85. package/dist/vectordb/milvus-vectordb.d.ts.map +1 -0
  86. package/dist/vectordb/milvus-vectordb.js +641 -0
  87. package/dist/vectordb/milvus-vectordb.js.map +1 -0
  88. package/dist/vectordb/qdrant-vectordb.d.ts +124 -0
  89. package/dist/vectordb/qdrant-vectordb.d.ts.map +1 -0
  90. package/dist/vectordb/qdrant-vectordb.js +582 -0
  91. package/dist/vectordb/qdrant-vectordb.js.map +1 -0
  92. package/dist/vectordb/sparse/index.d.ts +4 -0
  93. package/dist/vectordb/sparse/index.d.ts.map +1 -0
  94. package/dist/vectordb/sparse/index.js +23 -0
  95. package/dist/vectordb/sparse/index.js.map +1 -0
  96. package/dist/vectordb/sparse/simple-bm25.d.ts +104 -0
  97. package/dist/vectordb/sparse/simple-bm25.d.ts.map +1 -0
  98. package/dist/vectordb/sparse/simple-bm25.js +189 -0
  99. package/dist/vectordb/sparse/simple-bm25.js.map +1 -0
  100. package/dist/vectordb/sparse/sparse-vector-generator.d.ts +54 -0
  101. package/dist/vectordb/sparse/sparse-vector-generator.d.ts.map +1 -0
  102. package/dist/vectordb/sparse/sparse-vector-generator.js +3 -0
  103. package/dist/vectordb/sparse/sparse-vector-generator.js.map +1 -0
  104. package/dist/vectordb/sparse/types.d.ts +38 -0
  105. package/dist/vectordb/sparse/types.d.ts.map +1 -0
  106. package/dist/vectordb/sparse/types.js +3 -0
  107. package/dist/vectordb/sparse/types.js.map +1 -0
  108. package/dist/vectordb/types.d.ts +120 -0
  109. package/dist/vectordb/types.d.ts.map +1 -0
  110. package/dist/vectordb/types.js +9 -0
  111. package/dist/vectordb/types.js.map +1 -0
  112. package/dist/vectordb/zilliz-utils.d.ts +135 -0
  113. package/dist/vectordb/zilliz-utils.d.ts.map +1 -0
  114. package/dist/vectordb/zilliz-utils.js +192 -0
  115. package/dist/vectordb/zilliz-utils.js.map +1 -0
  116. package/package.json +61 -0
@@ -0,0 +1,582 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QdrantVectorDatabase = void 0;
4
+ const js_client_grpc_1 = require("@qdrant/js-client-grpc");
5
+ const base_vector_database_1 = require("./base/base-vector-database");
6
+ const simple_bm25_1 = require("./sparse/simple-bm25");
7
+ /**
8
+ * Qdrant Vector Database implementation using gRPC client
9
+ *
10
+ * Features:
11
+ * - Named vectors (dense + sparse)
12
+ * - Hybrid search with RRF fusion
13
+ * - BM25 sparse vector generation
14
+ * - Self-hosted and cloud support
15
+ *
16
+ * Architecture:
17
+ * - Dense vectors: From embedding providers (OpenAI, VoyageAI, etc.)
18
+ * - Sparse vectors: Generated using SimpleBM25 for keyword matching
19
+ * - Hybrid search: Combines both using Qdrant's prefetch + RRF
20
+ */
21
+ class QdrantVectorDatabase extends base_vector_database_1.BaseVectorDatabase {
22
+ constructor(config) {
23
+ super(config);
24
+ this.client = null;
25
+ // Named vector configurations
26
+ this.DENSE_VECTOR_NAME = 'dense';
27
+ this.SPARSE_VECTOR_NAME = 'sparse';
28
+ this.bm25Generator = new simple_bm25_1.SimpleBM25(config.bm25Config);
29
+ }
30
+ /**
31
+ * Initialize Qdrant client connection
32
+ */
33
+ async initialize() {
34
+ const resolvedAddress = await this.resolveAddress();
35
+ await this.initializeClient(resolvedAddress);
36
+ }
37
+ /**
38
+ * Create Qdrant client instance
39
+ */
40
+ async initializeClient(address) {
41
+ console.log('[QdrantDB] 🔌 Connecting to Qdrant at:', address);
42
+ // Parse address to extract host and port
43
+ const url = new URL(address.startsWith('http') ? address : `http://${address}`);
44
+ const host = url.hostname;
45
+ const port = url.port ? parseInt(url.port) : 6334;
46
+ this.client = new js_client_grpc_1.QdrantClient({
47
+ host,
48
+ port,
49
+ apiKey: this.config.apiKey,
50
+ timeout: this.config.timeout || 10000,
51
+ });
52
+ console.log('[QdrantDB] ✅ Connected to Qdrant successfully');
53
+ }
54
+ /**
55
+ * Resolve address from config
56
+ * Unlike Milvus, Qdrant doesn't have auto-provisioning
57
+ */
58
+ async resolveAddress() {
59
+ if (!this.config.address) {
60
+ throw new Error('Qdrant address is required. Set QDRANT_URL environment variable.');
61
+ }
62
+ return this.config.address;
63
+ }
64
+ /**
65
+ * Override to add client null check
66
+ */
67
+ async ensureInitialized() {
68
+ await super.ensureInitialized();
69
+ if (!this.client) {
70
+ throw new Error('QdrantClient is not initialized');
71
+ }
72
+ }
73
+ /**
74
+ * Qdrant doesn't require explicit collection loading
75
+ * Collections are loaded on-demand automatically
76
+ */
77
+ async ensureLoaded(collectionName) {
78
+ // No-op for Qdrant - collections are loaded automatically
79
+ return Promise.resolve();
80
+ }
81
+ /**
82
+ * Create collection with dense vectors only
83
+ */
84
+ async createCollection(collectionName, dimension, description) {
85
+ await this.ensureInitialized();
86
+ console.log('[QdrantDB] 🔧 Creating collection:', collectionName);
87
+ console.log('[QdrantDB] 📏 Vector dimension:', dimension);
88
+ await this.client.api('collections').create({
89
+ collectionName,
90
+ vectorsConfig: {
91
+ config: {
92
+ case: 'paramsMap',
93
+ value: {
94
+ map: {
95
+ [this.DENSE_VECTOR_NAME]: {
96
+ size: BigInt(dimension),
97
+ distance: 1, // Cosine = 1
98
+ },
99
+ },
100
+ },
101
+ },
102
+ },
103
+ });
104
+ console.log('[QdrantDB] ✅ Collection created successfully');
105
+ }
106
+ /**
107
+ * Create collection with hybrid search support (dense + sparse vectors)
108
+ */
109
+ async createHybridCollection(collectionName, dimension, description) {
110
+ await this.ensureInitialized();
111
+ console.log('[QdrantDB] 🔧 Creating hybrid collection:', collectionName);
112
+ console.log('[QdrantDB] 📏 Dense vector dimension:', dimension);
113
+ await this.client.api('collections').create({
114
+ collectionName,
115
+ vectorsConfig: {
116
+ config: {
117
+ case: 'paramsMap',
118
+ value: {
119
+ map: {
120
+ [this.DENSE_VECTOR_NAME]: {
121
+ size: BigInt(dimension),
122
+ distance: 1, // Cosine = 1
123
+ },
124
+ },
125
+ },
126
+ },
127
+ },
128
+ sparseVectorsConfig: {
129
+ map: {
130
+ [this.SPARSE_VECTOR_NAME]: {
131
+ modifier: js_client_grpc_1.Modifier.Idf,
132
+ },
133
+ },
134
+ },
135
+ });
136
+ console.log('[QdrantDB] ✅ Hybrid collection created successfully');
137
+ }
138
+ /**
139
+ * Drop collection
140
+ */
141
+ async dropCollection(collectionName) {
142
+ await this.ensureInitialized();
143
+ console.log('[QdrantDB] 🗑️ Dropping collection:', collectionName);
144
+ await this.client.api('collections').delete({
145
+ collectionName,
146
+ });
147
+ console.log('[QdrantDB] ✅ Collection dropped successfully');
148
+ }
149
+ /**
150
+ * Check if collection exists
151
+ */
152
+ async hasCollection(collectionName) {
153
+ await this.ensureInitialized();
154
+ try {
155
+ const response = await this.client.api('collections').get({
156
+ collectionName,
157
+ });
158
+ return response.result !== undefined;
159
+ }
160
+ catch (error) {
161
+ if (error.message?.includes('not found') || error.message?.includes('does not exist')) {
162
+ return false;
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ /**
168
+ * List all collections
169
+ */
170
+ async listCollections() {
171
+ await this.ensureInitialized();
172
+ const response = await this.client.api('collections').list({});
173
+ return response.collections.map((c) => c.name);
174
+ }
175
+ /**
176
+ * Insert documents with dense vectors only
177
+ */
178
+ async insert(collectionName, documents) {
179
+ await this.ensureInitialized();
180
+ await this.ensureLoaded(collectionName);
181
+ console.log('[QdrantDB] 📝 Inserting', documents.length, 'documents into:', collectionName);
182
+ const points = documents.map(doc => ({
183
+ id: {
184
+ pointIdOptions: {
185
+ case: 'uuid',
186
+ value: doc.id,
187
+ },
188
+ },
189
+ vectors: {
190
+ vectorsOptions: {
191
+ case: 'vectors',
192
+ value: {
193
+ vectors: {
194
+ [this.DENSE_VECTOR_NAME]: {
195
+ vector: {
196
+ case: 'dense',
197
+ value: {
198
+ data: doc.vector,
199
+ },
200
+ },
201
+ },
202
+ },
203
+ },
204
+ },
205
+ },
206
+ payload: {
207
+ content: { kind: { case: 'stringValue', value: doc.content } },
208
+ relativePath: { kind: { case: 'stringValue', value: doc.relativePath } },
209
+ startLine: { kind: { case: 'integerValue', value: BigInt(doc.startLine) } },
210
+ endLine: { kind: { case: 'integerValue', value: BigInt(doc.endLine) } },
211
+ fileExtension: { kind: { case: 'stringValue', value: doc.fileExtension } },
212
+ metadata: { kind: { case: 'stringValue', value: JSON.stringify(doc.metadata) } },
213
+ },
214
+ }));
215
+ await this.client.api('points').upsert({
216
+ collectionName,
217
+ wait: true,
218
+ points,
219
+ });
220
+ console.log('[QdrantDB] ✅ Documents inserted successfully');
221
+ }
222
+ /**
223
+ * Insert documents with hybrid vectors (dense + sparse)
224
+ */
225
+ async insertHybrid(collectionName, documents) {
226
+ await this.ensureInitialized();
227
+ await this.ensureLoaded(collectionName);
228
+ console.log('[QdrantDB] 📝 Inserting', documents.length, 'hybrid documents into:', collectionName);
229
+ // Ensure BM25 is trained before insertion
230
+ if (!this.bm25Generator.isTrained()) {
231
+ // The BM25 model must be trained on the full corpus before insertion for accurate sparse vectors.
232
+ // Training on a single batch leads to incorrect IDF scores and poor search quality.
233
+ throw new Error('BM25 generator is not trained. The caller must explicitly train it via `getBM25Generator().learn(corpus)` before calling `insertHybrid`.');
234
+ }
235
+ // Generate sparse vectors for all documents
236
+ const sparseVectors = documents.map(doc => this.bm25Generator.generate(doc.content));
237
+ const points = documents.map((doc, index) => ({
238
+ id: {
239
+ pointIdOptions: {
240
+ case: 'uuid',
241
+ value: doc.id,
242
+ },
243
+ },
244
+ vectors: {
245
+ vectorsOptions: {
246
+ case: 'vectors',
247
+ value: {
248
+ vectors: {
249
+ [this.DENSE_VECTOR_NAME]: {
250
+ vector: {
251
+ case: 'dense',
252
+ value: {
253
+ data: doc.vector,
254
+ },
255
+ },
256
+ },
257
+ [this.SPARSE_VECTOR_NAME]: {
258
+ vector: {
259
+ case: 'sparse',
260
+ value: {
261
+ indices: sparseVectors[index].indices,
262
+ values: sparseVectors[index].values,
263
+ },
264
+ },
265
+ },
266
+ },
267
+ },
268
+ },
269
+ },
270
+ payload: {
271
+ content: { kind: { case: 'stringValue', value: doc.content } },
272
+ relativePath: { kind: { case: 'stringValue', value: doc.relativePath } },
273
+ startLine: { kind: { case: 'integerValue', value: BigInt(doc.startLine) } },
274
+ endLine: { kind: { case: 'integerValue', value: BigInt(doc.endLine) } },
275
+ fileExtension: { kind: { case: 'stringValue', value: doc.fileExtension } },
276
+ metadata: { kind: { case: 'stringValue', value: JSON.stringify(doc.metadata) } },
277
+ },
278
+ }));
279
+ await this.client.api('points').upsert({
280
+ collectionName,
281
+ wait: true,
282
+ points,
283
+ });
284
+ console.log('[QdrantDB] ✅ Hybrid documents inserted successfully');
285
+ }
286
+ /**
287
+ * Search with dense vectors only
288
+ */
289
+ async search(collectionName, queryVector, options) {
290
+ await this.ensureInitialized();
291
+ await this.ensureLoaded(collectionName);
292
+ console.log('[QdrantDB] 🔍 Searching in collection:', collectionName);
293
+ const searchParams = {
294
+ collectionName,
295
+ vector: {
296
+ name: this.DENSE_VECTOR_NAME,
297
+ data: queryVector,
298
+ },
299
+ limit: BigInt(options?.topK || 10),
300
+ withPayload: { enable: true },
301
+ };
302
+ // Apply filter if provided
303
+ if (options?.filterExpr && options.filterExpr.trim().length > 0) {
304
+ searchParams.filter = this.parseFilterExpression(options.filterExpr);
305
+ }
306
+ const results = await this.client.api('points').search(searchParams);
307
+ return results.result.map((result) => ({
308
+ document: {
309
+ id: result.id?.str || result.id?.num?.toString() || '',
310
+ vector: queryVector,
311
+ content: result.payload?.content?.stringValue || '',
312
+ relativePath: result.payload?.relativePath?.stringValue || '',
313
+ startLine: Number(result.payload?.startLine?.integerValue || 0),
314
+ endLine: Number(result.payload?.endLine?.integerValue || 0),
315
+ fileExtension: result.payload?.fileExtension?.stringValue || '',
316
+ metadata: JSON.parse(result.payload?.metadata?.stringValue || '{}'),
317
+ },
318
+ score: result.score,
319
+ }));
320
+ }
321
+ /**
322
+ * Hybrid search with dense + sparse vectors using RRF fusion
323
+ */
324
+ async hybridSearch(collectionName, searchRequests, options) {
325
+ await this.ensureInitialized();
326
+ await this.ensureLoaded(collectionName);
327
+ console.log('[QdrantDB] 🔍 Performing hybrid search in collection:', collectionName);
328
+ // Extract dense vector and query text from search requests by inspecting data types
329
+ const denseQueryReq = searchRequests.find(req => Array.isArray(req.data));
330
+ const textQueryReq = searchRequests.find(req => typeof req.data === 'string');
331
+ if (!denseQueryReq || !textQueryReq) {
332
+ throw new Error('Hybrid search requires one dense vector request (number[] data) and one text request (string data).');
333
+ }
334
+ const denseQuery = denseQueryReq.data;
335
+ const textQuery = textQueryReq.data;
336
+ // Generate sparse vector using BM25
337
+ if (!this.bm25Generator.isTrained()) {
338
+ console.warn('[QdrantDB] ⚠️ BM25 generator not trained. Hybrid search may have reduced quality.');
339
+ }
340
+ const sparseQuery = this.bm25Generator.isTrained()
341
+ ? this.bm25Generator.generate(textQuery)
342
+ : { indices: [], values: [] };
343
+ console.log('[QdrantDB] 🔍 Dense query vector length:', denseQuery.length);
344
+ console.log('[QdrantDB] 🔍 Sparse query terms:', sparseQuery.indices.length);
345
+ // Qdrant query API with prefetch for hybrid search
346
+ const queryParams = {
347
+ collectionName,
348
+ prefetch: [
349
+ {
350
+ query: {
351
+ query: {
352
+ case: 'sparseIndices',
353
+ value: {
354
+ indices: {
355
+ data: sparseQuery.indices.map(i => BigInt(i)),
356
+ },
357
+ values: {
358
+ data: sparseQuery.values,
359
+ },
360
+ },
361
+ },
362
+ },
363
+ using: this.SPARSE_VECTOR_NAME,
364
+ limit: BigInt(textQueryReq.limit || 20),
365
+ },
366
+ {
367
+ query: {
368
+ query: {
369
+ case: 'nearest',
370
+ value: {
371
+ vector: {
372
+ data: denseQuery,
373
+ },
374
+ },
375
+ },
376
+ },
377
+ using: this.DENSE_VECTOR_NAME,
378
+ limit: BigInt(denseQueryReq.limit || 20),
379
+ },
380
+ ],
381
+ query: {
382
+ query: {
383
+ case: 'fusion',
384
+ value: 1, // RRF = 1
385
+ },
386
+ },
387
+ limit: BigInt(options?.limit || 10),
388
+ withPayload: { enable: true },
389
+ };
390
+ // Apply filter if provided
391
+ if (options?.filterExpr && options.filterExpr.trim().length > 0) {
392
+ queryParams.filter = this.parseFilterExpression(options.filterExpr);
393
+ }
394
+ const results = await this.client.api('points').query(queryParams);
395
+ console.log('[QdrantDB] ✅ Found', results.result.length, 'results from hybrid search');
396
+ return results.result.map((result) => ({
397
+ document: {
398
+ id: result.id?.str || result.id?.num?.toString() || '',
399
+ content: result.payload?.content?.stringValue || '',
400
+ vector: [],
401
+ relativePath: result.payload?.relativePath?.stringValue || '',
402
+ startLine: Number(result.payload?.startLine?.integerValue || 0),
403
+ endLine: Number(result.payload?.endLine?.integerValue || 0),
404
+ fileExtension: result.payload?.fileExtension?.stringValue || '',
405
+ metadata: JSON.parse(result.payload?.metadata?.stringValue || '{}'),
406
+ },
407
+ score: result.score,
408
+ }));
409
+ }
410
+ /**
411
+ * Delete documents by IDs
412
+ */
413
+ async delete(collectionName, ids) {
414
+ await this.ensureInitialized();
415
+ await this.ensureLoaded(collectionName);
416
+ console.log('[QdrantDB] 🗑️ Deleting', ids.length, 'documents from:', collectionName);
417
+ await this.client.api('points').delete({
418
+ collectionName,
419
+ wait: true,
420
+ points: {
421
+ pointsSelectorOneOf: {
422
+ case: 'points',
423
+ value: {
424
+ ids: ids.map(id => ({
425
+ pointIdOptions: {
426
+ case: 'uuid',
427
+ value: id,
428
+ },
429
+ })),
430
+ },
431
+ },
432
+ },
433
+ });
434
+ console.log('[QdrantDB] ✅ Documents deleted successfully');
435
+ }
436
+ /**
437
+ * Query documents with filter conditions
438
+ */
439
+ async query(collectionName, filter, outputFields, limit) {
440
+ await this.ensureInitialized();
441
+ await this.ensureLoaded(collectionName);
442
+ console.log('[QdrantDB] 📋 Querying collection:', collectionName);
443
+ const scrollParams = {
444
+ collectionName,
445
+ limit: limit || 100,
446
+ // Use outputFields to specify which payload fields to retrieve
447
+ withPayload: outputFields.length > 0
448
+ ? { include: { fields: outputFields } }
449
+ : { enable: true },
450
+ withVectors: { enable: false },
451
+ };
452
+ // Parse filter expression if provided
453
+ if (filter && filter.trim().length > 0) {
454
+ scrollParams.filter = this.parseFilterExpression(filter);
455
+ }
456
+ const results = await this.client.api('points').scroll(scrollParams);
457
+ // Dynamically map results based on requested outputFields
458
+ return results.result.map((point) => {
459
+ const result = {
460
+ id: point.id?.str || point.id?.num?.toString() || '',
461
+ };
462
+ // If no specific fields requested, return all known fields
463
+ if (outputFields.length === 0) {
464
+ result.content = point.payload?.content?.stringValue;
465
+ result.relativePath = point.payload?.relativePath?.stringValue;
466
+ result.startLine = Number(point.payload?.startLine?.integerValue || 0);
467
+ result.endLine = Number(point.payload?.endLine?.integerValue || 0);
468
+ result.fileExtension = point.payload?.fileExtension?.stringValue;
469
+ result.metadata = JSON.parse(point.payload?.metadata?.stringValue || '{}');
470
+ }
471
+ else {
472
+ // Only include requested fields
473
+ for (const field of outputFields) {
474
+ if (point.payload?.[field]) {
475
+ const value = point.payload[field];
476
+ // Handle different value types
477
+ if (value.stringValue !== undefined) {
478
+ result[field] = field === 'metadata'
479
+ ? JSON.parse(value.stringValue || '{}')
480
+ : value.stringValue;
481
+ }
482
+ else if (value.integerValue !== undefined) {
483
+ result[field] = Number(value.integerValue);
484
+ }
485
+ else if (value.doubleValue !== undefined) {
486
+ result[field] = value.doubleValue;
487
+ }
488
+ else if (value.boolValue !== undefined) {
489
+ result[field] = value.boolValue;
490
+ }
491
+ }
492
+ }
493
+ }
494
+ return result;
495
+ });
496
+ }
497
+ /**
498
+ * Check collection limit
499
+ * Qdrant doesn't have hard collection limits like Zilliz Cloud
500
+ */
501
+ async checkCollectionLimit() {
502
+ // Qdrant (self-hosted or cloud) doesn't have hard collection limits
503
+ return Promise.resolve(true);
504
+ }
505
+ /**
506
+ * Parse Milvus-style filter expression to Qdrant filter format
507
+ *
508
+ * Example:
509
+ * - "fileExtension == '.ts'" -> { must: [{ key: 'fileExtension', match: { value: '.ts' } }] }
510
+ * - "fileExtension in ['.ts', '.js']" -> { must: [{ key: 'fileExtension', match: { any: ['.ts', '.js'] } }] }
511
+ */
512
+ parseFilterExpression(expr) {
513
+ // Simple parser for common filter patterns
514
+ // Format: "field == 'value'" or "field in ['val1', 'val2']"
515
+ if (expr.includes(' in ')) {
516
+ // Handle "field in [...]" pattern
517
+ const match = expr.match(/(\w+)\s+in\s+\[(.*)\]/);
518
+ if (match) {
519
+ const field = match[1];
520
+ const values = match[2]
521
+ .split(',')
522
+ .map(v => v.trim().replace(/['"]/g, ''));
523
+ // For "IN" operator, use a "must" clause with "any" match for better performance
524
+ return {
525
+ must: [{
526
+ conditionOneOf: {
527
+ case: 'field',
528
+ value: {
529
+ key: field,
530
+ match: {
531
+ matchValue: {
532
+ case: 'any',
533
+ value: {
534
+ values: values.map(value => ({ kind: { case: 'stringValue', value } }))
535
+ }
536
+ }
537
+ }
538
+ }
539
+ }
540
+ }]
541
+ };
542
+ }
543
+ }
544
+ else if (expr.includes('==')) {
545
+ // Handle "field == value" pattern
546
+ const match = expr.match(/(\w+)\s*==\s*['"]?([^'"]+)['"]?/);
547
+ if (match) {
548
+ const field = match[1];
549
+ const value = match[2].trim();
550
+ return {
551
+ must: [
552
+ {
553
+ conditionOneOf: {
554
+ case: 'field',
555
+ value: {
556
+ key: field,
557
+ match: {
558
+ matchValue: {
559
+ case: 'keyword',
560
+ value: value
561
+ }
562
+ }
563
+ }
564
+ }
565
+ },
566
+ ],
567
+ };
568
+ }
569
+ }
570
+ // If parsing fails, return undefined (no filtering)
571
+ console.warn('[QdrantDB] ⚠️ Could not parse filter expression:', expr);
572
+ return undefined;
573
+ }
574
+ /**
575
+ * Get BM25 generator (for testing/debugging)
576
+ */
577
+ getBM25Generator() {
578
+ return this.bm25Generator;
579
+ }
580
+ }
581
+ exports.QdrantVectorDatabase = QdrantVectorDatabase;
582
+ //# sourceMappingURL=qdrant-vectordb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant-vectordb.js","sourceRoot":"","sources":["../../src/vectordb/qdrant-vectordb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './sparse-vector-generator';
3
+ export * from './simple-bm25';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vectordb/sparse/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,2BAA2B,CAAC;AAG1C,cAAc,eAAe,CAAC"}
@@ -0,0 +1,23 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // Types
18
+ __exportStar(require("./types"), exports);
19
+ // Interface
20
+ __exportStar(require("./sparse-vector-generator"), exports);
21
+ // Implementations
22
+ __exportStar(require("./simple-bm25"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vectordb/sparse/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,QAAQ;AACR,0CAAwB;AAExB,YAAY;AACZ,4DAA0C;AAE1C,kBAAkB;AAClB,gDAA8B"}