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 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/providers/stores/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { VectorStoreProvider, VectorPoint, SearchOptions, SearchResult, CollectionConfig } from '../../types';
2
+ export interface QdrantConfig {
3
+ url?: string;
4
+ port?: number;
5
+ apiKey?: string;
6
+ timeout?: number;
7
+ checkCompatibility?: boolean;
8
+ }
9
+ export declare class QdrantVectorStoreProvider implements VectorStoreProvider {
10
+ private client;
11
+ private collectionCache;
12
+ constructor(config?: QdrantConfig);
13
+ /**
14
+ * Convert a string ID to a valid Qdrant point ID
15
+ * Qdrant accepts valid UUIDs (string format) or uint64 integers
16
+ * Since chunk IDs like "uuid#0" aren't valid UUIDs, we convert them to UUID v5 (deterministic)
17
+ */
18
+ private stringIdToQdrantId;
19
+ ensureCollection(name: string, dimension: number, config?: CollectionConfig): Promise<void>;
20
+ upsert(collection: string, points: VectorPoint[]): Promise<void>;
21
+ search(collection: string, vector: number[], options?: SearchOptions): Promise<SearchResult[]>;
22
+ delete(collection: string, ids: string[]): Promise<void>;
23
+ deleteCollection(collection: string): Promise<void>;
24
+ getIdsByFilter(collection: string, filter: Record<string, any>, limit?: number): Promise<string[]>;
25
+ private buildFilter;
26
+ private extractMetadata;
27
+ }
28
+ //# sourceMappingURL=qdrant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../../../src/providers/stores/qdrant.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMnH,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAqB;gBAEhC,MAAM,GAAE,YAAiB;IAWrC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAYpB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsClG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8B/G,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,eAAe;CAIxB"}
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QdrantVectorStoreProvider = void 0;
4
+ // Qdrant vector store provider
5
+ const js_client_rest_1 = require("@qdrant/js-client-rest");
6
+ const uuid_1 = require("uuid");
7
+ const types_1 = require("../../types");
8
+ // UUID namespace for generating deterministic UUIDs from string IDs
9
+ const UUID_NAMESPACE = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // Standard DNS namespace
10
+ class QdrantVectorStoreProvider {
11
+ constructor(config = {}) {
12
+ this.collectionCache = new Set();
13
+ const url = config.url || ':memory:';
14
+ this.client = new js_client_rest_1.QdrantClient({
15
+ url,
16
+ port: config.port ?? 6333,
17
+ apiKey: config.apiKey,
18
+ timeout: config.timeout ?? 30000,
19
+ checkCompatibility: config.checkCompatibility ?? false,
20
+ });
21
+ }
22
+ /**
23
+ * Convert a string ID to a valid Qdrant point ID
24
+ * Qdrant accepts valid UUIDs (string format) or uint64 integers
25
+ * Since chunk IDs like "uuid#0" aren't valid UUIDs, we convert them to UUID v5 (deterministic)
26
+ */
27
+ stringIdToQdrantId(id) {
28
+ // Check if it's already a valid UUID format
29
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
30
+ if (uuidRegex.test(id)) {
31
+ return id; // Already a valid UUID, return as-is
32
+ }
33
+ // Convert non-UUID strings to deterministic UUID v5
34
+ // This ensures the same ID always maps to the same UUID
35
+ return (0, uuid_1.v5)(id, UUID_NAMESPACE);
36
+ }
37
+ async ensureCollection(name, dimension, config) {
38
+ try {
39
+ // Check cache first
40
+ if (this.collectionCache.has(name)) {
41
+ return;
42
+ }
43
+ // Check if collection exists
44
+ try {
45
+ await this.client.getCollection(name);
46
+ this.collectionCache.add(name);
47
+ return;
48
+ }
49
+ catch {
50
+ // Collection doesn't exist, create it
51
+ }
52
+ // Create collection
53
+ await this.client.createCollection(name, {
54
+ vectors: {
55
+ size: dimension,
56
+ distance: config?.distance === 'euclidean' ? 'Euclid' :
57
+ config?.distance === 'dot' ? 'Dot' : 'Cosine',
58
+ },
59
+ optimizers_config: {
60
+ default_segment_number: 2,
61
+ },
62
+ replication_factor: 1,
63
+ });
64
+ // Create payload index for metadata filtering
65
+ await this.client.createPayloadIndex(name, {
66
+ field_name: 'text',
67
+ field_schema: 'keyword',
68
+ });
69
+ this.collectionCache.add(name);
70
+ }
71
+ catch (error) {
72
+ console.error("[_ensureCollection] error", error);
73
+ throw new types_1.VectorStoreError(`Failed to ensure collection '${name}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
74
+ }
75
+ }
76
+ async upsert(collection, points) {
77
+ try {
78
+ if (points.length === 0) {
79
+ return;
80
+ }
81
+ const qdrantPoints = points.map(point => {
82
+ const qdrantId = this.stringIdToQdrantId(point.id);
83
+ return {
84
+ id: qdrantId,
85
+ vector: point.vector,
86
+ payload: {
87
+ text: point.payload?.text || '',
88
+ _originalId: point.id, // Store original ID for later retrieval
89
+ ...point.payload,
90
+ },
91
+ };
92
+ });
93
+ await this.client.upsert(collection, {
94
+ wait: true,
95
+ points: qdrantPoints,
96
+ });
97
+ }
98
+ catch (error) {
99
+ throw new types_1.VectorStoreError(`Failed to upsert points to collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
100
+ }
101
+ }
102
+ async search(collection, vector, options = {}) {
103
+ try {
104
+ const limit = options.limit ?? 10;
105
+ const scoreThreshold = options.scoreThreshold ?? 0.0;
106
+ const searchResult = await this.client.search(collection, {
107
+ vector,
108
+ limit,
109
+ score_threshold: scoreThreshold,
110
+ filter: options.filter ? this.buildFilter(options.filter) : undefined,
111
+ with_payload: true,
112
+ });
113
+ return searchResult.map(result => {
114
+ const payload = result.payload || {};
115
+ const system = payload.system || {};
116
+ // Use original ID from payload if available, otherwise use Qdrant ID
117
+ const originalId = payload._originalId || String(result.id);
118
+ // Remove _originalId from metadata before returning
119
+ const { _originalId, ...cleanPayload } = payload;
120
+ return {
121
+ id: originalId,
122
+ text: payload.text || '',
123
+ score: result.score,
124
+ createdAt: system.createdAt || Date.now(),
125
+ metadata: cleanPayload,
126
+ };
127
+ });
128
+ }
129
+ catch (error) {
130
+ throw new types_1.VectorSearchError(`Failed to search in collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
131
+ }
132
+ }
133
+ async delete(collection, ids) {
134
+ try {
135
+ if (ids.length === 0) {
136
+ return;
137
+ }
138
+ // Convert original IDs to Qdrant IDs for deletion
139
+ const qdrantIds = ids.map(id => this.stringIdToQdrantId(id));
140
+ await this.client.delete(collection, {
141
+ wait: true,
142
+ points: qdrantIds,
143
+ });
144
+ }
145
+ catch (error) {
146
+ throw new types_1.VectorStoreError(`Failed to delete points from collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
147
+ }
148
+ }
149
+ async deleteCollection(collection) {
150
+ try {
151
+ await this.client.deleteCollection(collection);
152
+ this.collectionCache.delete(collection);
153
+ }
154
+ catch (error) {
155
+ throw new types_1.VectorStoreError(`Failed to delete collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
156
+ }
157
+ }
158
+ async getIdsByFilter(collection, filter, limit = 10000) {
159
+ try {
160
+ const qdrantFilter = this.buildFilter(filter);
161
+ if (!qdrantFilter) {
162
+ return [];
163
+ }
164
+ // Use scroll API to get all matching point IDs with payload
165
+ // We need payload to get the original IDs
166
+ const result = await this.client.scroll(collection, {
167
+ filter: qdrantFilter,
168
+ limit,
169
+ with_payload: true,
170
+ with_vector: false,
171
+ });
172
+ // Return original IDs from payload if available, otherwise Qdrant IDs
173
+ return result.points.map(point => {
174
+ const payload = point.payload || {};
175
+ return payload._originalId || String(point.id);
176
+ });
177
+ }
178
+ catch (error) {
179
+ throw new types_1.VectorStoreError(`Failed to get IDs by filter from collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
180
+ }
181
+ }
182
+ buildFilter(filter) {
183
+ const must = [];
184
+ for (const [key, value] of Object.entries(filter)) {
185
+ if (key === 'text')
186
+ continue; // Skip text field as it's the main content
187
+ if (value === undefined || value === null)
188
+ continue;
189
+ const parsedKey = key.includes('.') ? key : `metadata.${key}`;
190
+ if (Array.isArray(value)) {
191
+ if (value.length === 0)
192
+ continue;
193
+ if (value.length === 1) {
194
+ must.push({
195
+ key: parsedKey,
196
+ match: { value: value[0] },
197
+ });
198
+ }
199
+ else {
200
+ must.push({
201
+ should: value.map((v) => ({
202
+ key: parsedKey,
203
+ match: { value: v },
204
+ })),
205
+ });
206
+ }
207
+ }
208
+ else {
209
+ must.push({
210
+ key: parsedKey,
211
+ match: { value },
212
+ });
213
+ }
214
+ }
215
+ return must.length > 0 ? { must } : undefined;
216
+ }
217
+ extractMetadata(payload) {
218
+ const { text, ...metadata } = payload;
219
+ return metadata;
220
+ }
221
+ }
222
+ exports.QdrantVectorStoreProvider = QdrantVectorStoreProvider;
223
+ //# sourceMappingURL=qdrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../../../src/providers/stores/qdrant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { VectorStoreProvider, VectorPoint, SearchOptions, SearchResult, CollectionConfig } from '../../types';
2
+ export interface SQLiteConfig {
3
+ path?: string;
4
+ inMemory?: boolean;
5
+ }
6
+ export declare class SQLiteVectorStoreProvider implements VectorStoreProvider {
7
+ private db;
8
+ private collections;
9
+ constructor(config?: SQLiteConfig);
10
+ private initializeSchema;
11
+ ensureCollection(name: string, dimension: number, config?: CollectionConfig): Promise<void>;
12
+ upsert(collection: string, points: VectorPoint[]): Promise<void>;
13
+ search(collection: string, vector: number[], options?: SearchOptions): Promise<SearchResult[]>;
14
+ delete(collection: string, ids: string[]): Promise<void>;
15
+ deleteCollection(collection: string): Promise<void>;
16
+ getIdsByFilter(collection: string, filter: Record<string, any>, limit?: number): Promise<string[]>;
17
+ /**
18
+ * Close the database connection
19
+ */
20
+ close(): void;
21
+ /**
22
+ * Get database statistics
23
+ */
24
+ getStats(collection?: string): {
25
+ collections: number;
26
+ vectors: number;
27
+ };
28
+ private vectorToBlob;
29
+ private blobToVector;
30
+ private calculateSimilarity;
31
+ private cosineSimilarity;
32
+ private euclideanDistance;
33
+ private dotProduct;
34
+ private matchesFilter;
35
+ private buildFilter;
36
+ private extractMetadata;
37
+ }
38
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../../src/providers/stores/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKnH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,GAAE,YAAiB;IAgBrC,OAAO,CAAC,gBAAgB;IA0BlB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoChE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiElG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6B/G;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAcvE,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,eAAe;CAIxB"}
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SQLiteVectorStoreProvider = void 0;
7
+ // SQLite vector store provider with cosine similarity search
8
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
9
+ const types_1 = require("../../types");
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ class SQLiteVectorStoreProvider {
13
+ constructor(config = {}) {
14
+ this.collections = new Set();
15
+ const dbPath = config.inMemory ? ':memory:' : (config.path || 'data/vector.db');
16
+ // Ensure directory exists if using file storage
17
+ if (!config.inMemory && dbPath !== ':memory:') {
18
+ const dir = (0, path_1.dirname)(dbPath);
19
+ if (dir && dir !== '.' && !(0, fs_1.existsSync)(dir)) {
20
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
21
+ }
22
+ }
23
+ this.db = new better_sqlite3_1.default(dbPath);
24
+ this.db.pragma('journal_mode = WAL');
25
+ this.initializeSchema();
26
+ }
27
+ initializeSchema() {
28
+ // Create tables if they don't exist
29
+ this.db.exec(`
30
+ CREATE TABLE IF NOT EXISTS collections (
31
+ name TEXT PRIMARY KEY,
32
+ dimension INTEGER NOT NULL,
33
+ distance TEXT NOT NULL DEFAULT 'cosine',
34
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
35
+ );
36
+
37
+ CREATE TABLE IF NOT EXISTS vectors (
38
+ id TEXT NOT NULL,
39
+ collection TEXT NOT NULL,
40
+ vector BLOB NOT NULL,
41
+ payload TEXT NOT NULL,
42
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
43
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
44
+ PRIMARY KEY (collection, id),
45
+ FOREIGN KEY (collection) REFERENCES collections(name) ON DELETE CASCADE
46
+ );
47
+
48
+ CREATE INDEX IF NOT EXISTS idx_vectors_collection ON vectors(collection);
49
+ CREATE INDEX IF NOT EXISTS idx_vectors_id ON vectors(id);
50
+ `);
51
+ }
52
+ async ensureCollection(name, dimension, config) {
53
+ try {
54
+ if (this.collections.has(name)) {
55
+ return;
56
+ }
57
+ const distance = config?.distance || 'cosine';
58
+ // Check if collection exists
59
+ const existing = this.db.prepare('SELECT name FROM collections WHERE name = ?').get(name);
60
+ if (!existing) {
61
+ // Create collection
62
+ this.db.prepare(`
63
+ INSERT INTO collections (name, dimension, distance)
64
+ VALUES (?, ?, ?)
65
+ `).run(name, dimension, distance);
66
+ }
67
+ this.collections.add(name);
68
+ }
69
+ catch (error) {
70
+ throw new types_1.VectorStoreError(`Failed to ensure collection '${name}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
71
+ }
72
+ }
73
+ async upsert(collection, points) {
74
+ try {
75
+ if (points.length === 0) {
76
+ return;
77
+ }
78
+ const stmt = this.db.prepare(`
79
+ INSERT INTO vectors (id, collection, vector, payload)
80
+ VALUES (?, ?, ?, ?)
81
+ ON CONFLICT(collection, id) DO UPDATE SET
82
+ vector = excluded.vector,
83
+ payload = excluded.payload,
84
+ updated_at = strftime('%s', 'now')
85
+ `);
86
+ const insertMany = this.db.transaction((points) => {
87
+ for (const point of points) {
88
+ const vectorBlob = this.vectorToBlob(point.vector);
89
+ const payloadJson = JSON.stringify({
90
+ text: point.payload?.text || '',
91
+ ...point.payload,
92
+ });
93
+ stmt.run(point.id, collection, vectorBlob, payloadJson);
94
+ }
95
+ });
96
+ insertMany(points);
97
+ }
98
+ catch (error) {
99
+ throw new types_1.VectorStoreError(`Failed to upsert points to collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
100
+ }
101
+ }
102
+ async search(collection, vector, options = {}) {
103
+ try {
104
+ const limit = options.limit ?? 10;
105
+ const scoreThreshold = options.scoreThreshold ?? 0.0;
106
+ // Get collection info
107
+ const collectionInfo = this.db.prepare('SELECT dimension, distance FROM collections WHERE name = ?').get(collection);
108
+ if (!collectionInfo) {
109
+ return [];
110
+ }
111
+ // Get all vectors from collection
112
+ const rows = this.db.prepare(`
113
+ SELECT id, vector, payload
114
+ FROM vectors
115
+ WHERE collection = ?
116
+ `).all(collection);
117
+ // Calculate similarities
118
+ const results = [];
119
+ for (const row of rows) {
120
+ const storedVector = this.blobToVector(row.vector);
121
+ const payload = JSON.parse(row.payload);
122
+ // Apply filter if provided
123
+ if (options.filter && !this.matchesFilter(payload, options.filter)) {
124
+ continue;
125
+ }
126
+ const score = this.calculateSimilarity(vector, storedVector, collectionInfo.distance);
127
+ if (score >= scoreThreshold) {
128
+ results.push({
129
+ id: row.id,
130
+ score,
131
+ payload,
132
+ });
133
+ }
134
+ }
135
+ // Sort by score descending and limit
136
+ results.sort((a, b) => b.score - a.score);
137
+ const limited = results.slice(0, limit);
138
+ return limited.map(result => {
139
+ const system = result.payload.system || {};
140
+ return {
141
+ id: result.id,
142
+ text: result.payload.text || '',
143
+ score: result.score,
144
+ createdAt: system.createdAt || Date.now(),
145
+ metadata: result.payload,
146
+ };
147
+ });
148
+ }
149
+ catch (error) {
150
+ throw new types_1.VectorSearchError(`Failed to search in collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
151
+ }
152
+ }
153
+ async delete(collection, ids) {
154
+ try {
155
+ if (ids.length === 0) {
156
+ return;
157
+ }
158
+ const stmt = this.db.prepare(`
159
+ DELETE FROM vectors
160
+ WHERE collection = ? AND id = ?
161
+ `);
162
+ const deleteMany = this.db.transaction((ids) => {
163
+ for (const id of ids) {
164
+ stmt.run(collection, id);
165
+ }
166
+ });
167
+ deleteMany(ids);
168
+ }
169
+ catch (error) {
170
+ throw new types_1.VectorStoreError(`Failed to delete points from collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
171
+ }
172
+ }
173
+ async deleteCollection(collection) {
174
+ try {
175
+ // Delete all vectors first
176
+ this.db.prepare('DELETE FROM vectors WHERE collection = ?').run(collection);
177
+ // Delete collection
178
+ this.db.prepare('DELETE FROM collections WHERE name = ?').run(collection);
179
+ this.collections.delete(collection);
180
+ }
181
+ catch (error) {
182
+ throw new types_1.VectorStoreError(`Failed to delete collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
183
+ }
184
+ }
185
+ async getIdsByFilter(collection, filter, limit = 10000) {
186
+ try {
187
+ // Get all vectors from collection
188
+ const rows = this.db.prepare(`
189
+ SELECT id, payload
190
+ FROM vectors
191
+ WHERE collection = ?
192
+ LIMIT ?
193
+ `).all(collection, limit);
194
+ // Filter by matching payload
195
+ const matchingIds = [];
196
+ for (const row of rows) {
197
+ const payload = JSON.parse(row.payload);
198
+ if (this.matchesFilter(payload, filter)) {
199
+ matchingIds.push(row.id);
200
+ }
201
+ }
202
+ return matchingIds;
203
+ }
204
+ catch (error) {
205
+ throw new types_1.VectorStoreError(`Failed to get IDs by filter from collection '${collection}': ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
206
+ }
207
+ }
208
+ /**
209
+ * Close the database connection
210
+ */
211
+ close() {
212
+ this.db.close();
213
+ }
214
+ /**
215
+ * Get database statistics
216
+ */
217
+ getStats(collection) {
218
+ if (collection) {
219
+ const result = this.db.prepare('SELECT COUNT(*) as count FROM vectors WHERE collection = ?').get(collection);
220
+ return { collections: 1, vectors: result.count };
221
+ }
222
+ const collections = this.db.prepare('SELECT COUNT(*) as count FROM collections').get();
223
+ const vectors = this.db.prepare('SELECT COUNT(*) as count FROM vectors').get();
224
+ return { collections: collections.count, vectors: vectors.count };
225
+ }
226
+ // Private helper methods
227
+ vectorToBlob(vector) {
228
+ // Store as Float32Array for efficient storage
229
+ const float32 = new Float32Array(vector);
230
+ return Buffer.from(float32.buffer);
231
+ }
232
+ blobToVector(blob) {
233
+ const float32 = new Float32Array(blob.buffer, blob.byteOffset, blob.length / 4);
234
+ return Array.from(float32);
235
+ }
236
+ calculateSimilarity(vec1, vec2, distance) {
237
+ if (vec1.length !== vec2.length) {
238
+ throw new Error('Vector dimensions do not match');
239
+ }
240
+ switch (distance) {
241
+ case 'cosine':
242
+ return this.cosineSimilarity(vec1, vec2);
243
+ case 'euclidean':
244
+ return 1 / (1 + this.euclideanDistance(vec1, vec2));
245
+ case 'dot':
246
+ return this.dotProduct(vec1, vec2);
247
+ default:
248
+ return this.cosineSimilarity(vec1, vec2);
249
+ }
250
+ }
251
+ cosineSimilarity(vec1, vec2) {
252
+ const dotProduct = vec1.reduce((sum, val, i) => sum + val * vec2[i], 0);
253
+ const mag1 = Math.sqrt(vec1.reduce((sum, val) => sum + val * val, 0));
254
+ const mag2 = Math.sqrt(vec2.reduce((sum, val) => sum + val * val, 0));
255
+ return dotProduct / (mag1 * mag2);
256
+ }
257
+ euclideanDistance(vec1, vec2) {
258
+ return Math.sqrt(vec1.reduce((sum, val, i) => sum + Math.pow(val - vec2[i], 2), 0));
259
+ }
260
+ dotProduct(vec1, vec2) {
261
+ return vec1.reduce((sum, val, i) => sum + val * vec2[i], 0);
262
+ }
263
+ matchesFilter(payload, filter) {
264
+ const _filter = this.buildFilter(filter);
265
+ for (const [key, value] of Object.entries(_filter)) {
266
+ const keys = key.split('.');
267
+ let current = payload;
268
+ for (const k of keys) {
269
+ if (current && typeof current === 'object' && k in current) {
270
+ current = current[k];
271
+ }
272
+ else {
273
+ return false;
274
+ }
275
+ }
276
+ if (Array.isArray(value)) {
277
+ if (value.length === 0) {
278
+ continue;
279
+ }
280
+ if (!value.includes(current)) {
281
+ return false;
282
+ }
283
+ }
284
+ else if (current !== value) {
285
+ return false;
286
+ }
287
+ }
288
+ return true;
289
+ }
290
+ buildFilter(filter) {
291
+ const _filter = {};
292
+ for (const [key, value] of Object.entries(filter)) {
293
+ if (key === 'text')
294
+ continue; // Skip text field as it's the main content
295
+ const parsedKey = key.includes('.') ? key : `metadata.${key}`;
296
+ _filter[parsedKey] = value;
297
+ }
298
+ return _filter;
299
+ }
300
+ extractMetadata(payload) {
301
+ const { text, ...metadata } = payload;
302
+ return metadata;
303
+ }
304
+ }
305
+ exports.SQLiteVectorStoreProvider = SQLiteVectorStoreProvider;
306
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../../src/providers/stores/sqlite.ts"],"names":[],"mappings":"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"}