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.
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/src/chunking/index.d.ts +48 -0
- package/dist/src/chunking/index.d.ts.map +1 -0
- package/dist/src/chunking/index.js +123 -0
- package/dist/src/chunking/index.js.map +1 -0
- package/dist/src/chunking/strategies/fixed.d.ts +14 -0
- package/dist/src/chunking/strategies/fixed.d.ts.map +1 -0
- package/dist/src/chunking/strategies/fixed.js +111 -0
- package/dist/src/chunking/strategies/fixed.js.map +1 -0
- package/dist/src/chunking/strategies/paragraph.d.ts +6 -0
- package/dist/src/chunking/strategies/paragraph.d.ts.map +1 -0
- package/dist/src/chunking/strategies/paragraph.js +84 -0
- package/dist/src/chunking/strategies/paragraph.js.map +1 -0
- package/dist/src/chunking/strategies/recursive.d.ts +17 -0
- package/dist/src/chunking/strategies/recursive.d.ts.map +1 -0
- package/dist/src/chunking/strategies/recursive.js +192 -0
- package/dist/src/chunking/strategies/recursive.js.map +1 -0
- package/dist/src/chunking/strategies/semantic.d.ts +96 -0
- package/dist/src/chunking/strategies/semantic.d.ts.map +1 -0
- package/dist/src/chunking/strategies/semantic.js +587 -0
- package/dist/src/chunking/strategies/semantic.js.map +1 -0
- package/dist/src/chunking/strategies/sentence.d.ts +7 -0
- package/dist/src/chunking/strategies/sentence.d.ts.map +1 -0
- package/dist/src/chunking/strategies/sentence.js +116 -0
- package/dist/src/chunking/strategies/sentence.js.map +1 -0
- package/dist/src/chunking/types.d.ts +45 -0
- package/dist/src/chunking/types.d.ts.map +1 -0
- package/dist/src/chunking/types.js +4 -0
- package/dist/src/chunking/types.js.map +1 -0
- package/dist/src/chunking/utils/tokenizer.d.ts +10 -0
- package/dist/src/chunking/utils/tokenizer.d.ts.map +1 -0
- package/dist/src/chunking/utils/tokenizer.js +50 -0
- package/dist/src/chunking/utils/tokenizer.js.map +1 -0
- package/dist/src/providers/embeddings/index.d.ts +3 -0
- package/dist/src/providers/embeddings/index.d.ts.map +1 -0
- package/dist/src/providers/embeddings/index.js +7 -0
- package/dist/src/providers/embeddings/index.js.map +1 -0
- package/dist/src/providers/embeddings/openai.d.ts +21 -0
- package/dist/src/providers/embeddings/openai.d.ts.map +1 -0
- package/dist/src/providers/embeddings/openai.js +86 -0
- package/dist/src/providers/embeddings/openai.js.map +1 -0
- package/dist/src/providers/index.d.ts +3 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +20 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/providers/stores/index.d.ts +6 -0
- package/dist/src/providers/stores/index.d.ts.map +1 -0
- package/dist/src/providers/stores/index.js +11 -0
- package/dist/src/providers/stores/index.js.map +1 -0
- package/dist/src/providers/stores/memory.d.ts +18 -0
- package/dist/src/providers/stores/memory.d.ts.map +1 -0
- package/dist/src/providers/stores/memory.js +169 -0
- package/dist/src/providers/stores/memory.js.map +1 -0
- package/dist/src/providers/stores/qdrant.d.ts +28 -0
- package/dist/src/providers/stores/qdrant.d.ts.map +1 -0
- package/dist/src/providers/stores/qdrant.js +223 -0
- package/dist/src/providers/stores/qdrant.js.map +1 -0
- package/dist/src/providers/stores/sqlite.d.ts +38 -0
- package/dist/src/providers/stores/sqlite.d.ts.map +1 -0
- package/dist/src/providers/stores/sqlite.js +306 -0
- package/dist/src/providers/stores/sqlite.js.map +1 -0
- package/dist/src/types.d.ts +111 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +32 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/vector.d.ts +74 -0
- package/dist/src/vector.d.ts.map +1 -0
- package/dist/src/vector.js +505 -0
- package/dist/src/vector.js.map +1 -0
- package/docs/API.md +361 -0
- package/docs/CHUNKING.md +280 -0
- package/docs/CUSTOM_PROVIDERS.md +101 -0
- package/docs/README.md +11 -0
- package/docs/STORAGE_BACKENDS.md +189 -0
- package/docs/assets/vectar.png +0 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/providers/stores/memory.ts"],"names":[],"mappings":";;;AAEA,uCAAkE;AAMlE,MAAa,2BAA2B;IAAxC;QACU,gBAAW,GAAG,IAAI,GAAG,EAAoC,CAAC;QAC1D,sBAAiB,GAAG,IAAI,GAAG,EAAmD,CAAC;IA8LzF,CAAC;IA5LC,KAAK,CAAC,gBAAgB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAAyB;QAC/E,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC/B,SAAS;gBACT,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,QAAQ;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,MAAqB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,wBAAgB,CAAC,eAAe,UAAU,kBAAkB,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;gBAClB,GAAG,KAAK;gBACR,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,MAAgB,EAAE,UAAyB,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,yBAAiB,CAAC,eAAe,UAAU,kBAAkB,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,yBAAiB,CAAC,oCAAoC,UAAU,GAAG,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;YAErD,sCAAsC;YACtC,MAAM,OAAO,GAAmB,EAAE,CAAC;YAEnC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1C,2BAA2B;gBAC3B,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzE,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAE9E,IAAI,KAAK,IAAI,cAAc,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;oBAEpC,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE;wBACF,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,KAAK;wBACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;wBACzC,QAAQ,EAAE,OAAO;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,yBAAiB,CACzB,mCAAmC,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC7G,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,GAAa;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,wBAAgB,CAAC,eAAe,UAAU,kBAAkB,CAAC,CAAC;QAC1E,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,MAA2B,EAAE,QAAgB,KAAK;QACzF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,wBAAgB,CAAC,eAAe,UAAU,kBAAkB,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,IAAI,KAAK;gBAAE,MAAM;YAE1B,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrB,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,mBAAmB,CAAC,IAAc,EAAE,IAAc,EAAE,QAAgB;QAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3C,KAAK,WAAW;gBACd,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACtD,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC;gBACE,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,IAAc,EAAE,IAAc;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,UAAU,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAEO,iBAAiB,CAAC,IAAc,EAAE,IAAc;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAEO,UAAU,CAAC,IAAc,EAAE,IAAc;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,aAAa,CAAC,OAAwC,EAAE,MAA2B;QACzF,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,OAAO,GAAQ,OAAO,CAAC;YAE3B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;oBAC3D,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,WAAW,CAAC,MAA2B;QAC7C,MAAM,OAAO,GAAQ,EAAE,CAAC;QAExB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,KAAK,MAAM;gBAAE,SAAS,CAAC,2CAA2C;YAEzE,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9D,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAhMD,kEAgMC"}
|
|
@@ -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":";;;AAAA,+BAA+B;AAC/B,2DAAsD;AACtD,+BAAoC;AAEpC,uCAAkE;AAElE,oEAAoE;AACpE,MAAM,cAAc,GAAG,sCAAsC,CAAC,CAAC,yBAAyB;AAUxF,MAAa,yBAAyB;IAIpC,YAAY,SAAuB,EAAE;QAF7B,oBAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAG1C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,6BAAY,CAAC;YAC7B,GAAG;YACH,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;SACvD,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,EAAU;QACnC,4CAA4C;QAC5C,MAAM,SAAS,GAAG,iEAAiE,CAAC;QACpF,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC,CAAC,qCAAqC;QAClD,CAAC;QAED,oDAAoD;QACpD,wDAAwD;QACxD,OAAO,IAAA,SAAM,EAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY,EAAE,SAAiB,EAAE,MAAyB;QAC/E,IAAI,CAAC;YACH,oBAAoB;YACpB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,6BAA6B;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;YAED,oBAAoB;YACpB,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBACvC,OAAO,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,MAAM,EAAE,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBACrD,MAAM,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;iBAChD;gBACD,iBAAiB,EAAE;oBACjB,sBAAsB,EAAE,CAAC;iBAC1B;gBACD,kBAAkB,EAAE,CAAC;aACtB,CAAC,CAAC;YAEH,8CAA8C;YAC9C,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBACzC,UAAU,EAAE,MAAM;gBAClB,YAAY,EAAE,SAAS;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,wBAAgB,CACxB,gCAAgC,IAAI,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EACpG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,MAAqB;QACpD,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAEnD,OAAO;oBACL,EAAE,EAAE,QAAQ;oBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE;wBAC/B,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,wCAAwC;wBAC/D,GAAG,KAAK,CAAC,OAAO;qBACjB;iBACF,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;gBACnC,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAgB,CACxB,0CAA0C,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EACpH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,MAAgB,EAAE,UAAyB,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;YAErD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxD,MAAM;gBACN,KAAK;gBACL,eAAe,EAAE,cAAc;gBAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBACrE,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAI,OAAO,CAAC,MAA8B,IAAI,EAAE,CAAC;gBAC7D,qEAAqE;gBACrE,MAAM,UAAU,GAAI,OAAO,CAAC,WAAsB,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAExE,oDAAoD;gBACpD,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;gBAEjD,OAAO;oBACL,EAAE,EAAE,UAAU;oBACd,IAAI,EAAG,OAAO,CAAC,IAAe,IAAI,EAAE;oBACpC,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;oBACzC,QAAQ,EAAE,YAAY;iBACvB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,yBAAiB,CACzB,mCAAmC,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC7G,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,GAAa;QAC5C,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,kDAAkD;YAClD,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;gBACnC,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAgB,CACxB,4CAA4C,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EACtH,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAgB,CACxB,gCAAgC,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC1G,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,MAA2B,EAAE,QAAgB,KAAK;QACzF,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,4DAA4D;YAC5D,0CAA0C;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;gBAClD,MAAM,EAAE,YAAY;gBACpB,KAAK;gBACL,YAAY,EAAE,IAAI;gBAClB,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,sEAAsE;YACtE,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;gBACpC,OAAQ,OAAO,CAAC,WAAsB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAgB,CACxB,gDAAgD,UAAU,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,EAC1H,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAA2B;QAC7C,MAAM,IAAI,GAAU,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,KAAK,MAAM;gBAAE,SAAS,CAAC,2CAA2C;YACzE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YAEpD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC;YAE9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC;wBACR,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;qBAC3B,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC;wBACR,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACxB,GAAG,EAAE,SAAS;4BACd,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;yBACpB,CAAC,CAAC;qBACJ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC;oBACR,GAAG,EAAE,SAAS;oBACd,KAAK,EAAE,EAAE,KAAK,EAAE;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAEO,eAAe,CAAC,OAAgC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAzPD,8DAyPC"}
|
|
@@ -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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"}
|