voctar 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 (81) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +102 -0
  3. package/dist/index.d.ts +6 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +29 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/src/chunking/index.d.ts +48 -0
  8. package/dist/src/chunking/index.d.ts.map +1 -0
  9. package/dist/src/chunking/index.js +123 -0
  10. package/dist/src/chunking/index.js.map +1 -0
  11. package/dist/src/chunking/strategies/fixed.d.ts +14 -0
  12. package/dist/src/chunking/strategies/fixed.d.ts.map +1 -0
  13. package/dist/src/chunking/strategies/fixed.js +111 -0
  14. package/dist/src/chunking/strategies/fixed.js.map +1 -0
  15. package/dist/src/chunking/strategies/paragraph.d.ts +6 -0
  16. package/dist/src/chunking/strategies/paragraph.d.ts.map +1 -0
  17. package/dist/src/chunking/strategies/paragraph.js +84 -0
  18. package/dist/src/chunking/strategies/paragraph.js.map +1 -0
  19. package/dist/src/chunking/strategies/recursive.d.ts +17 -0
  20. package/dist/src/chunking/strategies/recursive.d.ts.map +1 -0
  21. package/dist/src/chunking/strategies/recursive.js +192 -0
  22. package/dist/src/chunking/strategies/recursive.js.map +1 -0
  23. package/dist/src/chunking/strategies/semantic.d.ts +96 -0
  24. package/dist/src/chunking/strategies/semantic.d.ts.map +1 -0
  25. package/dist/src/chunking/strategies/semantic.js +587 -0
  26. package/dist/src/chunking/strategies/semantic.js.map +1 -0
  27. package/dist/src/chunking/strategies/sentence.d.ts +7 -0
  28. package/dist/src/chunking/strategies/sentence.d.ts.map +1 -0
  29. package/dist/src/chunking/strategies/sentence.js +116 -0
  30. package/dist/src/chunking/strategies/sentence.js.map +1 -0
  31. package/dist/src/chunking/types.d.ts +45 -0
  32. package/dist/src/chunking/types.d.ts.map +1 -0
  33. package/dist/src/chunking/types.js +4 -0
  34. package/dist/src/chunking/types.js.map +1 -0
  35. package/dist/src/chunking/utils/tokenizer.d.ts +10 -0
  36. package/dist/src/chunking/utils/tokenizer.d.ts.map +1 -0
  37. package/dist/src/chunking/utils/tokenizer.js +50 -0
  38. package/dist/src/chunking/utils/tokenizer.js.map +1 -0
  39. package/dist/src/providers/embeddings/index.d.ts +3 -0
  40. package/dist/src/providers/embeddings/index.d.ts.map +1 -0
  41. package/dist/src/providers/embeddings/index.js +7 -0
  42. package/dist/src/providers/embeddings/index.js.map +1 -0
  43. package/dist/src/providers/embeddings/openai.d.ts +21 -0
  44. package/dist/src/providers/embeddings/openai.d.ts.map +1 -0
  45. package/dist/src/providers/embeddings/openai.js +86 -0
  46. package/dist/src/providers/embeddings/openai.js.map +1 -0
  47. package/dist/src/providers/index.d.ts +3 -0
  48. package/dist/src/providers/index.d.ts.map +1 -0
  49. package/dist/src/providers/index.js +20 -0
  50. package/dist/src/providers/index.js.map +1 -0
  51. package/dist/src/providers/stores/index.d.ts +6 -0
  52. package/dist/src/providers/stores/index.d.ts.map +1 -0
  53. package/dist/src/providers/stores/index.js +11 -0
  54. package/dist/src/providers/stores/index.js.map +1 -0
  55. package/dist/src/providers/stores/memory.d.ts +18 -0
  56. package/dist/src/providers/stores/memory.d.ts.map +1 -0
  57. package/dist/src/providers/stores/memory.js +169 -0
  58. package/dist/src/providers/stores/memory.js.map +1 -0
  59. package/dist/src/providers/stores/qdrant.d.ts +28 -0
  60. package/dist/src/providers/stores/qdrant.d.ts.map +1 -0
  61. package/dist/src/providers/stores/qdrant.js +223 -0
  62. package/dist/src/providers/stores/qdrant.js.map +1 -0
  63. package/dist/src/providers/stores/sqlite.d.ts +38 -0
  64. package/dist/src/providers/stores/sqlite.d.ts.map +1 -0
  65. package/dist/src/providers/stores/sqlite.js +306 -0
  66. package/dist/src/providers/stores/sqlite.js.map +1 -0
  67. package/dist/src/types.d.ts +111 -0
  68. package/dist/src/types.d.ts.map +1 -0
  69. package/dist/src/types.js +32 -0
  70. package/dist/src/types.js.map +1 -0
  71. package/dist/src/vector.d.ts +74 -0
  72. package/dist/src/vector.d.ts.map +1 -0
  73. package/dist/src/vector.js +505 -0
  74. package/dist/src/vector.js.map +1 -0
  75. package/docs/API.md +361 -0
  76. package/docs/CHUNKING.md +280 -0
  77. package/docs/CUSTOM_PROVIDERS.md +101 -0
  78. package/docs/README.md +11 -0
  79. package/docs/STORAGE_BACKENDS.md +189 -0
  80. package/docs/assets/vectar.png +0 -0
  81. package/package.json +46 -0
@@ -0,0 +1,505 @@
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.Vector = void 0;
37
+ // Vector embedding service - simple interface with automatic chunking
38
+ const uuid_1 = require("uuid");
39
+ const types_1 = require("./types");
40
+ const openai_1 = require("./providers/embeddings/openai");
41
+ const qdrant_1 = require("./providers/stores/qdrant");
42
+ const memory_1 = require("./providers/stores/memory");
43
+ const sqlite_1 = require("./providers/stores/sqlite");
44
+ const chunking_1 = require("./chunking");
45
+ class Vector {
46
+ constructor(config) {
47
+ // Initialize providers
48
+ this.embeddingProvider = this.resolveEmbeddingProvider(config);
49
+ this.vectorStoreProvider = this.resolveVectorStoreProvider(config);
50
+ // Initialize chunking defaults
51
+ this.defaultChunkSize = config?.defaultChunkSize ?? 1000;
52
+ this.defaultChunkStrategy = config?.defaultChunkStrategy ?? 'recursive';
53
+ this.defaultChunkOverlap = config?.defaultChunkOverlap ?? 200;
54
+ this.autoChunk = config?.autoChunk ?? true;
55
+ }
56
+ /**
57
+ * Embed text into a collection - automatically chunks if needed
58
+ * If documentId already exists, it will be overwritten (all old chunks deleted first)
59
+ * @returns Document ID and chunk IDs
60
+ */
61
+ async embed(collection, text, options) {
62
+ this.validateCollectionName(collection);
63
+ this.validateText(text);
64
+ const documentId = options?.documentId || (0, uuid_1.v4)();
65
+ const shouldChunk = options?.autoChunk ?? this.autoChunk;
66
+ const chunkSize = options?.chunkSize ?? this.defaultChunkSize;
67
+ // Ensure collection exists
68
+ const dimension = this.embeddingProvider.getDimension();
69
+ await this.vectorStoreProvider.ensureCollection(collection, dimension);
70
+ try {
71
+ // If documentId was provided, delete any existing chunks first
72
+ // This prevents orphaned chunks when re-embedding with different chunk counts
73
+ if (options?.documentId) {
74
+ try {
75
+ await this.delete(collection, documentId);
76
+ }
77
+ catch {
78
+ // Ignore errors if document doesn't exist
79
+ }
80
+ }
81
+ // Determine if chunking is needed based on token count
82
+ // Get token limit from embedding provider to ensure we don't exceed it
83
+ const tokenLimit = this.embeddingProvider.getTokenLimit();
84
+ const actualChunkSize = Math.min(chunkSize, tokenLimit); // Ensure chunk size doesn't exceed model limit
85
+ // Import token counter
86
+ const { countTokens } = await Promise.resolve().then(() => __importStar(require('./chunking/utils/tokenizer')));
87
+ const textTokens = countTokens(text);
88
+ const needsChunking = shouldChunk && textTokens > actualChunkSize;
89
+ if (needsChunking) {
90
+ // Chunk the document using token-based limits
91
+ const chunkOptions = {
92
+ strategy: options?.chunkStrategy ?? this.defaultChunkStrategy,
93
+ maxChunkSize: actualChunkSize, // Token limit, not character limit
94
+ overlap: options?.chunkOverlap ?? this.defaultChunkOverlap,
95
+ metadata: options?.metadata,
96
+ tokenLimit, // Pass token limit to strategies
97
+ };
98
+ // For semantic chunking, pass the embedding provider
99
+ if (chunkOptions.strategy === 'semantic') {
100
+ chunkOptions.embeddingProvider = this.embeddingProvider;
101
+ }
102
+ const chunkResult = chunking_1.chunking.chunkDocument(text, chunkOptions, documentId);
103
+ // Prepare documents for batch embedding with chunk IDs in format: documentId#chunkIndex
104
+ const createdAt = Date.now();
105
+ const documents = chunkResult.chunks.map(chunk => {
106
+ const chunkId = `${documentId}#${chunk.metadata.chunkIndex}`;
107
+ // Separate system metadata from user metadata
108
+ const systemMetadata = {
109
+ documentId: chunk.metadata.documentId,
110
+ chunkIndex: chunk.metadata.chunkIndex,
111
+ totalChunks: chunk.metadata.totalChunks,
112
+ startChar: chunk.metadata.startChar,
113
+ endChar: chunk.metadata.endChar,
114
+ createdAt,
115
+ _isChunk: true,
116
+ _documentId: documentId,
117
+ _chunkId: chunkId,
118
+ // Include semantic chunking system metadata if present
119
+ ...(chunk.metadata.header && { header: chunk.metadata.header }),
120
+ ...(chunk.metadata.dependsOn && { dependsOn: chunk.metadata.dependsOn }),
121
+ ...(chunk.metadata.topicVolatility && { topicVolatility: chunk.metadata.topicVolatility }),
122
+ ...(chunk.metadata.roles && { roles: chunk.metadata.roles }),
123
+ };
124
+ return {
125
+ id: chunkId,
126
+ text: chunk.text,
127
+ metadata: {
128
+ system: systemMetadata,
129
+ metadata: options?.metadata || {},
130
+ },
131
+ };
132
+ });
133
+ // Embed all chunks
134
+ const chunkIds = await this.embedBatch(collection, documents, options?.user_id);
135
+ return { documentId, chunkIds };
136
+ }
137
+ else {
138
+ // Single document, no chunking needed
139
+ // Verify it doesn't exceed token limit
140
+ const textTokens = countTokens(text);
141
+ const tokenLimit = this.embeddingProvider.getTokenLimit();
142
+ if (textTokens > tokenLimit) {
143
+ // Force chunking even if autoChunk is false when document exceeds limit
144
+ throw new types_1.VectorEmbeddingError(`Document exceeds token limit (${textTokens} > ${tokenLimit}). ` +
145
+ `Enable chunking or reduce document size.`);
146
+ }
147
+ const vector = await this.embeddingProvider.embed(text);
148
+ const createdAt = Date.now();
149
+ await this.vectorStoreProvider.upsert(collection, [
150
+ {
151
+ id: documentId,
152
+ vector,
153
+ payload: {
154
+ text,
155
+ system: {
156
+ _documentId: documentId,
157
+ _isChunk: false,
158
+ createdAt,
159
+ },
160
+ metadata: options?.metadata || {},
161
+ },
162
+ },
163
+ ]);
164
+ return { documentId, chunkIds: [documentId] };
165
+ }
166
+ }
167
+ catch (error) {
168
+ throw new types_1.VectorEmbeddingError(`Failed to embed document: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
169
+ }
170
+ }
171
+ /**
172
+ * Embed multiple documents in batch
173
+ */
174
+ async embedBatch(collection, documents, user_id) {
175
+ this.validateCollectionName(collection);
176
+ if (documents.length === 0) {
177
+ return [];
178
+ }
179
+ try {
180
+ // Ensure collection exists
181
+ const dimension = this.embeddingProvider.getDimension();
182
+ await this.vectorStoreProvider.ensureCollection(collection, dimension);
183
+ // Validate and re-chunk documents that exceed token limit
184
+ const tokenLimit = this.embeddingProvider.getTokenLimit();
185
+ const { countTokens } = await Promise.resolve().then(() => __importStar(require('./chunking/utils/tokenizer')));
186
+ const { chunking } = await Promise.resolve().then(() => __importStar(require('./chunking')));
187
+ const validDocuments = [];
188
+ const texts = [];
189
+ for (const doc of documents) {
190
+ this.validateText(doc.text);
191
+ const tokenCount = countTokens(doc.text);
192
+ if (tokenCount > tokenLimit) {
193
+ // Re-chunk this document using recursive strategy
194
+ console.warn(`Document ${doc.id} exceeds token limit (${tokenCount} > ${tokenLimit}). ` +
195
+ `Automatically re-chunking to preserve data.`);
196
+ // Extract parent document ID and chunk index from the chunk ID
197
+ // Format: documentId#chunkIndex
198
+ const parentDocId = doc.id.split('#')[0];
199
+ const parentChunkIndex = doc.id.includes('#') ? parseInt(doc.id.split('#')[1]) : undefined;
200
+ // Re-chunk with a smaller size (use 80% of token limit for safety)
201
+ const safeChunkSize = Math.floor(tokenLimit * 0.8);
202
+ const chunkOptions = {
203
+ strategy: 'recursive',
204
+ maxChunkSize: safeChunkSize,
205
+ overlap: Math.floor(safeChunkSize * 0.1), // 10% overlap
206
+ tokenLimit,
207
+ };
208
+ const chunkResult = chunking.chunkDocument(doc.text, chunkOptions, parentDocId);
209
+ // Create sub-chunks with proper IDs
210
+ for (let i = 0; i < chunkResult.chunks.length; i++) {
211
+ const subChunk = chunkResult.chunks[i];
212
+ // Create sub-chunk ID: parentChunkId#subIndex
213
+ const subChunkId = parentChunkIndex !== undefined
214
+ ? `${parentDocId}#${parentChunkIndex}.${i}`
215
+ : `${doc.id}.${i}`;
216
+ validDocuments.push({
217
+ id: subChunkId,
218
+ text: subChunk.text,
219
+ metadata: {
220
+ ...doc.metadata,
221
+ system: {
222
+ ...(doc.metadata?.system || {}),
223
+ _isSubChunk: true,
224
+ _parentChunkId: doc.id,
225
+ _subChunkIndex: i,
226
+ _totalSubChunks: chunkResult.chunks.length,
227
+ },
228
+ },
229
+ });
230
+ texts.push(subChunk.text);
231
+ }
232
+ }
233
+ else {
234
+ validDocuments.push(doc);
235
+ texts.push(doc.text);
236
+ }
237
+ }
238
+ if (texts.length === 0) {
239
+ throw new types_1.VectorEmbeddingError('All documents exceeded token limit and could not be re-chunked');
240
+ }
241
+ // Generate embeddings in batch
242
+ const vectors = await this.embeddingProvider.embedBatch(texts);
243
+ // Prepare points for upsert.
244
+ // Keep one payload schema across embed() and embedBatch():
245
+ // - system fields in payload.system
246
+ // - caller metadata in payload.metadata
247
+ const points = validDocuments.map((doc, index) => {
248
+ const rawMetadata = doc.metadata || {};
249
+ const rawSystem = rawMetadata.system && typeof rawMetadata.system === 'object'
250
+ ? rawMetadata.system
251
+ : undefined;
252
+ const nestedMetadata = rawMetadata.metadata && typeof rawMetadata.metadata === 'object'
253
+ ? rawMetadata.metadata
254
+ : undefined;
255
+ const extraMetadata = Object.fromEntries(Object.entries(rawMetadata).filter(([key]) => key !== 'system' && key !== 'metadata'));
256
+ return {
257
+ id: doc.id || (0, uuid_1.v4)(),
258
+ vector: vectors[index],
259
+ payload: {
260
+ text: doc.text,
261
+ ...(rawSystem ? { system: rawSystem } : {}),
262
+ metadata: {
263
+ ...(nestedMetadata || {}),
264
+ ...extraMetadata,
265
+ },
266
+ },
267
+ };
268
+ });
269
+ // Store in vector database
270
+ await this.vectorStoreProvider.upsert(collection, points);
271
+ // Usage tracking can be handled by host applications.
272
+ void user_id;
273
+ return points.map(p => p.id);
274
+ }
275
+ catch (error) {
276
+ throw new types_1.VectorEmbeddingError(`Failed to embed batch: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
277
+ }
278
+ }
279
+ /**
280
+ * Search for similar documents
281
+ */
282
+ async search(collection, query, options) {
283
+ this.validateCollectionName(collection);
284
+ this.validateText(query);
285
+ try {
286
+ // Generate query embedding
287
+ const vector = await this.embeddingProvider.embed(query);
288
+ // Search in vector database
289
+ await this.ensureCollection(collection);
290
+ const rawResults = await this.vectorStoreProvider.search(collection, vector, options ?? {});
291
+ // Separate system metadata from user metadata and extract createdAt
292
+ const includeSystem = options?.includeSystem ?? false;
293
+ return rawResults.map(result => {
294
+ const payload = result.metadata || {};
295
+ const system = payload.system || {};
296
+ // Convert timestamp to ISO string
297
+ const timestamp = system.createdAt || Date.now();
298
+ const createdAt = new Date(timestamp).toISOString();
299
+ const searchResult = {
300
+ id: result.id,
301
+ text: result.text,
302
+ score: result.score,
303
+ createdAt, // ISO 8601 datetime string
304
+ metadata: payload.metadata || {},
305
+ };
306
+ // Only include system metadata if explicitly requested
307
+ if (includeSystem) {
308
+ searchResult.system = system;
309
+ }
310
+ return searchResult;
311
+ });
312
+ }
313
+ catch (error) {
314
+ throw new types_1.VectorEmbeddingError(`Failed to search: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined, { query, options });
315
+ }
316
+ }
317
+ /**
318
+ * Update or insert a document (handles all chunks automatically)
319
+ */
320
+ async upsert(collection, documentId, text, options) {
321
+ this.validateCollectionName(collection);
322
+ this.validateText(text);
323
+ try {
324
+ // Delete existing document and all its chunks
325
+ await this.delete(collection, documentId);
326
+ // Re-embed with same document ID
327
+ await this.embed(collection, text, { ...options, documentId });
328
+ }
329
+ catch (error) {
330
+ throw new types_1.VectorEmbeddingError(`Failed to upsert document: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
331
+ }
332
+ }
333
+ /**
334
+ * Delete a document and all its chunks
335
+ * Uses metadata filtering to find and delete all chunks efficiently
336
+ */
337
+ async delete(collection, documentId) {
338
+ this.validateCollectionName(collection);
339
+ const documentIds = Array.isArray(documentId) ? documentId : [documentId];
340
+ if (documentIds.length === 0) {
341
+ return;
342
+ }
343
+ try {
344
+ const allIds = [];
345
+ for (const docId of documentIds) {
346
+ // Add the document ID itself (for non-chunked docs)
347
+ allIds.push(docId);
348
+ // Query for all chunks with this documentId using metadata filter
349
+ // Chunks have system._documentId metadata set to the parent document ID
350
+ const chunkIds = await this.vectorStoreProvider.getIdsByFilter(collection, { 'system._documentId': docId });
351
+ allIds.push(...chunkIds);
352
+ }
353
+ // Delete all IDs (only actual existing ones)
354
+ if (allIds.length > 0) {
355
+ await this.vectorStoreProvider.delete(collection, allIds);
356
+ }
357
+ }
358
+ catch (error) {
359
+ throw new types_1.VectorStoreError(`Failed to delete document(s): ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
360
+ }
361
+ }
362
+ /**
363
+ * Delete an entire collection
364
+ */
365
+ async deleteCollection(collection) {
366
+ this.validateCollectionName(collection);
367
+ try {
368
+ await this.vectorStoreProvider.deleteCollection(collection);
369
+ }
370
+ catch (error) {
371
+ throw new types_1.VectorStoreError(`Failed to delete collection: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
372
+ }
373
+ }
374
+ /**
375
+ * Ensure a collection exists with optional custom configuration
376
+ */
377
+ async ensureCollection(collection, config) {
378
+ this.validateCollectionName(collection);
379
+ try {
380
+ const dimension = config?.dimension ?? this.embeddingProvider.getDimension();
381
+ await this.vectorStoreProvider.ensureCollection(collection, dimension, config);
382
+ }
383
+ catch (error) {
384
+ throw new types_1.VectorStoreError(`Failed to ensure collection: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
385
+ }
386
+ }
387
+ /**
388
+ * Get the current embedding provider
389
+ */
390
+ getEmbeddingProvider() {
391
+ return this.embeddingProvider;
392
+ }
393
+ /**
394
+ * Get the current vector store provider
395
+ */
396
+ getVectorStoreProvider() {
397
+ return this.vectorStoreProvider;
398
+ }
399
+ /**
400
+ * Generate chunk ID from document ID and chunk index
401
+ */
402
+ static getChunkId(documentId, chunkIndex) {
403
+ return `${documentId}#${chunkIndex}`;
404
+ }
405
+ /**
406
+ * Parse chunk ID to extract document ID and chunk index
407
+ */
408
+ static parseChunkId(chunkId) {
409
+ const parts = chunkId.split('#');
410
+ if (parts.length !== 2) {
411
+ return null;
412
+ }
413
+ const chunkIndex = parseInt(parts[1], 10);
414
+ if (isNaN(chunkIndex)) {
415
+ return null;
416
+ }
417
+ return {
418
+ documentId: parts[0],
419
+ chunkIndex,
420
+ };
421
+ }
422
+ /**
423
+ * Check if an ID is a chunk ID (contains #)
424
+ */
425
+ static isChunkId(id) {
426
+ return id.includes('#');
427
+ }
428
+ // Private methods
429
+ resolveEmbeddingProvider(config) {
430
+ if (config?.embeddingProvider) {
431
+ return config.embeddingProvider;
432
+ }
433
+ const embedding = config?.embedding;
434
+ if (!embedding) {
435
+ throw new types_1.VectorEmbeddingError('No embedding provider configured. Pass `embedding` or `embeddingProvider`.');
436
+ }
437
+ return this.createEmbeddingProviderFromRuntime(embedding);
438
+ }
439
+ resolveVectorStoreProvider(config) {
440
+ if (config?.vectorStoreProvider) {
441
+ return config.vectorStoreProvider;
442
+ }
443
+ const store = config?.store;
444
+ if (!store) {
445
+ return new sqlite_1.SQLiteVectorStoreProvider({
446
+ path: './vector.db',
447
+ inMemory: false,
448
+ });
449
+ }
450
+ return this.createVectorStoreProviderFromRuntime(store);
451
+ }
452
+ createEmbeddingProviderFromRuntime(config) {
453
+ if (config.type === 'custom') {
454
+ return config.provider;
455
+ }
456
+ return new openai_1.OpenAIEmbeddingProvider({
457
+ apiKey: config.apiKey,
458
+ model: config.model || 'text-embedding-3-small',
459
+ dimension: config.dimension,
460
+ maxRetries: config.maxRetries,
461
+ });
462
+ }
463
+ createVectorStoreProviderFromRuntime(config) {
464
+ switch (config.type) {
465
+ case 'sqlite': {
466
+ const sqlitePath = config.path || './vector.db';
467
+ return new sqlite_1.SQLiteVectorStoreProvider({
468
+ path: sqlitePath,
469
+ inMemory: sqlitePath === ':memory:',
470
+ });
471
+ }
472
+ case 'qdrant':
473
+ return new qdrant_1.QdrantVectorStoreProvider({
474
+ url: config.url,
475
+ apiKey: config.apiKey,
476
+ port: config.port,
477
+ timeout: config.timeout,
478
+ checkCompatibility: config.checkCompatibility,
479
+ });
480
+ case 'memory':
481
+ return new memory_1.InMemoryVectorStoreProvider();
482
+ case 'custom':
483
+ return config.provider;
484
+ }
485
+ }
486
+ validateCollectionName(name) {
487
+ if (!name || typeof name !== 'string') {
488
+ throw new types_1.VectorStoreError('Collection name must be a non-empty string');
489
+ }
490
+ // Collection names should be alphanumeric with underscores and hyphens
491
+ if (!/^[a-zA-Z0-9_-]+$/.test(name)) {
492
+ throw new types_1.VectorStoreError('Collection name must contain only alphanumeric characters, underscores, and hyphens');
493
+ }
494
+ }
495
+ validateText(text) {
496
+ if (!text || typeof text !== 'string') {
497
+ throw new types_1.VectorEmbeddingError('Text must be a non-empty string');
498
+ }
499
+ if (text.trim().length === 0) {
500
+ throw new types_1.VectorEmbeddingError('Text cannot be empty or only whitespace');
501
+ }
502
+ }
503
+ }
504
+ exports.Vector = Vector;
505
+ //# sourceMappingURL=vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/vector.ts"],"names":[],"mappings":"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"}