cursor-recursive-rag 0.2.0-alpha.1
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/README.md +354 -0
- package/bin/cursor-rag.js +18 -0
- package/dist/adapters/embeddings/index.d.ts +5 -0
- package/dist/adapters/embeddings/index.d.ts.map +1 -0
- package/dist/adapters/embeddings/index.js +16 -0
- package/dist/adapters/embeddings/index.js.map +1 -0
- package/dist/adapters/embeddings/ollama.d.ts +11 -0
- package/dist/adapters/embeddings/ollama.d.ts.map +1 -0
- package/dist/adapters/embeddings/ollama.js +30 -0
- package/dist/adapters/embeddings/ollama.js.map +1 -0
- package/dist/adapters/embeddings/openai.d.ts +11 -0
- package/dist/adapters/embeddings/openai.d.ts.map +1 -0
- package/dist/adapters/embeddings/openai.js +28 -0
- package/dist/adapters/embeddings/openai.js.map +1 -0
- package/dist/adapters/embeddings/types.d.ts +6 -0
- package/dist/adapters/embeddings/types.d.ts.map +1 -0
- package/dist/adapters/embeddings/types.js +2 -0
- package/dist/adapters/embeddings/types.js.map +1 -0
- package/dist/adapters/embeddings/xenova.d.ts +11 -0
- package/dist/adapters/embeddings/xenova.d.ts.map +1 -0
- package/dist/adapters/embeddings/xenova.js +26 -0
- package/dist/adapters/embeddings/xenova.js.map +1 -0
- package/dist/adapters/vector/chroma.d.ts +23 -0
- package/dist/adapters/vector/chroma.d.ts.map +1 -0
- package/dist/adapters/vector/chroma.js +91 -0
- package/dist/adapters/vector/chroma.js.map +1 -0
- package/dist/adapters/vector/index.d.ts +5 -0
- package/dist/adapters/vector/index.d.ts.map +1 -0
- package/dist/adapters/vector/index.js +22 -0
- package/dist/adapters/vector/index.js.map +1 -0
- package/dist/adapters/vector/memory.d.ts +22 -0
- package/dist/adapters/vector/memory.d.ts.map +1 -0
- package/dist/adapters/vector/memory.js +105 -0
- package/dist/adapters/vector/memory.js.map +1 -0
- package/dist/adapters/vector/qdrant.d.ts +14 -0
- package/dist/adapters/vector/qdrant.d.ts.map +1 -0
- package/dist/adapters/vector/qdrant.js +120 -0
- package/dist/adapters/vector/qdrant.js.map +1 -0
- package/dist/adapters/vector/redis.d.ts +31 -0
- package/dist/adapters/vector/redis.d.ts.map +1 -0
- package/dist/adapters/vector/redis.js +164 -0
- package/dist/adapters/vector/redis.js.map +1 -0
- package/dist/adapters/vector/vectorize.d.ts +10 -0
- package/dist/adapters/vector/vectorize.d.ts.map +1 -0
- package/dist/adapters/vector/vectorize.js +22 -0
- package/dist/adapters/vector/vectorize.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +23 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/ingest.d.ts +3 -0
- package/dist/cli/commands/ingest.d.ts.map +1 -0
- package/dist/cli/commands/ingest.js +133 -0
- package/dist/cli/commands/ingest.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +39 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +3 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +311 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +39 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/public/index.html +819 -0
- package/dist/dashboard/server.d.ts +10 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +397 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/integrations/index.d.ts +3 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +3 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/mcp-gateway.d.ts +91 -0
- package/dist/integrations/mcp-gateway.d.ts.map +1 -0
- package/dist/integrations/mcp-gateway.js +128 -0
- package/dist/integrations/mcp-gateway.js.map +1 -0
- package/dist/integrations/openskills.d.ts +67 -0
- package/dist/integrations/openskills.d.ts.map +1 -0
- package/dist/integrations/openskills.js +223 -0
- package/dist/integrations/openskills.js.map +1 -0
- package/dist/proxy/index.d.ts +29 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +124 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +43 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tools/crawl.d.ts +15 -0
- package/dist/server/tools/crawl.d.ts.map +1 -0
- package/dist/server/tools/crawl.js +97 -0
- package/dist/server/tools/crawl.js.map +1 -0
- package/dist/server/tools/gateway.d.ts +27 -0
- package/dist/server/tools/gateway.d.ts.map +1 -0
- package/dist/server/tools/gateway.js +58 -0
- package/dist/server/tools/gateway.js.map +1 -0
- package/dist/server/tools/index.d.ts +10 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +302 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/ingest.d.ts +15 -0
- package/dist/server/tools/ingest.d.ts.map +1 -0
- package/dist/server/tools/ingest.js +84 -0
- package/dist/server/tools/ingest.js.map +1 -0
- package/dist/server/tools/list-sources.d.ts +9 -0
- package/dist/server/tools/list-sources.d.ts.map +1 -0
- package/dist/server/tools/list-sources.js +63 -0
- package/dist/server/tools/list-sources.js.map +1 -0
- package/dist/server/tools/recursive-query.d.ts +16 -0
- package/dist/server/tools/recursive-query.d.ts.map +1 -0
- package/dist/server/tools/recursive-query.js +65 -0
- package/dist/server/tools/recursive-query.js.map +1 -0
- package/dist/server/tools/search.d.ts +15 -0
- package/dist/server/tools/search.d.ts.map +1 -0
- package/dist/server/tools/search.js +20 -0
- package/dist/server/tools/search.js.map +1 -0
- package/dist/server/tools/skills.d.ts +30 -0
- package/dist/server/tools/skills.d.ts.map +1 -0
- package/dist/server/tools/skills.js +85 -0
- package/dist/server/tools/skills.js.map +1 -0
- package/dist/services/chunker.d.ts +3 -0
- package/dist/services/chunker.d.ts.map +1 -0
- package/dist/services/chunker.js +75 -0
- package/dist/services/chunker.js.map +1 -0
- package/dist/services/config.d.ts +8 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +66 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/query-decomposer.d.ts +44 -0
- package/dist/services/query-decomposer.d.ts.map +1 -0
- package/dist/services/query-decomposer.js +79 -0
- package/dist/services/query-decomposer.js.map +1 -0
- package/dist/types/index.d.ts +93 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { ChromaClient } from 'chromadb';
|
|
2
|
+
/**
|
|
3
|
+
* ChromaDB Adapter
|
|
4
|
+
*
|
|
5
|
+
* NOTE: ChromaDB JS client requires a running ChromaDB server.
|
|
6
|
+
* Start one with: docker run -p 8000:8000 chromadb/chroma
|
|
7
|
+
*
|
|
8
|
+
* For serverless local storage, use Qdrant instead.
|
|
9
|
+
*/
|
|
10
|
+
export class ChromaAdapter {
|
|
11
|
+
client;
|
|
12
|
+
collection;
|
|
13
|
+
collectionName = 'cursor-rag-knowledge-base';
|
|
14
|
+
serverUrl;
|
|
15
|
+
constructor(config) {
|
|
16
|
+
// ChromaDB requires a running server - default to localhost:8000
|
|
17
|
+
this.serverUrl = config.vectorStoreConfig?.chromaUrl || 'http://localhost:8000';
|
|
18
|
+
this.client = new ChromaClient({
|
|
19
|
+
path: this.serverUrl
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async initialize() {
|
|
23
|
+
if (!this.collection) {
|
|
24
|
+
try {
|
|
25
|
+
this.collection = await this.client.getOrCreateCollection({
|
|
26
|
+
name: this.collectionName,
|
|
27
|
+
metadata: { 'hnsw:space': 'cosine' }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const err = error;
|
|
32
|
+
if (err.message?.includes('Failed to parse URL') || err.message?.includes('ECONNREFUSED')) {
|
|
33
|
+
throw new Error(`ChromaDB server not running at ${this.serverUrl}. ` +
|
|
34
|
+
`Start it with: docker run -p 8000:8000 chromadb/chroma\n` +
|
|
35
|
+
`Or switch to Qdrant for serverless local storage: cursor-rag setup`);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async add(docs) {
|
|
42
|
+
await this.initialize();
|
|
43
|
+
const ids = docs.map(d => d.id);
|
|
44
|
+
const embeddings = docs.map(d => d.embedding);
|
|
45
|
+
const documents = docs.map(d => d.content);
|
|
46
|
+
const metadatas = docs.map(d => d.metadata);
|
|
47
|
+
await this.collection.add({
|
|
48
|
+
ids,
|
|
49
|
+
embeddings,
|
|
50
|
+
documents,
|
|
51
|
+
metadatas
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async search(embedding, options) {
|
|
55
|
+
await this.initialize();
|
|
56
|
+
const results = await this.collection.query({
|
|
57
|
+
queryEmbeddings: [embedding],
|
|
58
|
+
nResults: options.topK,
|
|
59
|
+
where: options.filter || undefined
|
|
60
|
+
});
|
|
61
|
+
// Transform Chroma results to our format
|
|
62
|
+
const searchResults = [];
|
|
63
|
+
if (results.ids && results.ids[0] && results.documents && results.documents[0]) {
|
|
64
|
+
const ids = results.ids[0];
|
|
65
|
+
const documents = results.documents[0];
|
|
66
|
+
const metadatas = results.metadatas?.[0] || [];
|
|
67
|
+
const distances = results.distances?.[0] || [];
|
|
68
|
+
for (let i = 0; i < ids.length; i++) {
|
|
69
|
+
// Convert distance to similarity score (1 - distance for cosine similarity)
|
|
70
|
+
const score = 1 - (distances[i] || 0);
|
|
71
|
+
searchResults.push({
|
|
72
|
+
id: ids[i],
|
|
73
|
+
content: documents[i],
|
|
74
|
+
metadata: metadatas[i] || {},
|
|
75
|
+
score
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return searchResults;
|
|
80
|
+
}
|
|
81
|
+
async delete(ids) {
|
|
82
|
+
await this.initialize();
|
|
83
|
+
await this.collection.delete({ ids });
|
|
84
|
+
}
|
|
85
|
+
async count() {
|
|
86
|
+
await this.initialize();
|
|
87
|
+
const count = await this.collection.count();
|
|
88
|
+
return count;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=chroma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chroma.js","sourceRoot":"","sources":["../../../src/adapters/vector/chroma.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC;;;;;;;GAOG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAe;IACrB,UAAU,CAAM;IAChB,cAAc,GAAG,2BAA2B,CAAC;IAC7C,SAAS,CAAS;IAE1B,YAAY,MAAiB;QAC3B,iEAAiE;QACjE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,iBAAiB,EAAE,SAAS,IAAI,uBAAuB,CAAC;QAChF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;oBACxD,IAAI,EAAE,IAAI,CAAC,cAAc;oBACzB,QAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE;iBACrC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAc,CAAC;gBAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC1F,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,CAAC,SAAS,IAAI;wBACpD,0DAA0D;wBAC1D,oEAAoE,CACrE,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAsB;QAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACxB,GAAG;YACH,UAAU;YACV,SAAS;YACT,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAmB,EAAE,OAAsB;QACtD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1C,eAAe,EAAE,CAAC,SAAS,CAAC;YAC5B,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;SACnC,CAAC,CAAC;QAEH,yCAAyC;QACzC,MAAM,aAAa,GAAmB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,4EAA4E;gBAC5E,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,aAAa,CAAC,IAAI,CAAC;oBACjB,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBACV,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBACrB,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;oBAC5B,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAa;QACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
export { VectorStore, VectorDocument, SearchResult, SearchOptions };
|
|
4
|
+
export declare function createVectorStore(type: string, config: RAGConfig): VectorStore;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,WAAW,CAe9E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ChromaAdapter } from './chroma.js';
|
|
2
|
+
import { QdrantAdapter } from './qdrant.js';
|
|
3
|
+
import { VectorizeAdapter } from './vectorize.js';
|
|
4
|
+
import { MemoryAdapter } from './memory.js';
|
|
5
|
+
import { RedisAdapter } from './redis.js';
|
|
6
|
+
export function createVectorStore(type, config) {
|
|
7
|
+
switch (type) {
|
|
8
|
+
case 'memory':
|
|
9
|
+
return new MemoryAdapter(config);
|
|
10
|
+
case 'chroma':
|
|
11
|
+
return new ChromaAdapter(config);
|
|
12
|
+
case 'qdrant':
|
|
13
|
+
return new QdrantAdapter(config);
|
|
14
|
+
case 'redis':
|
|
15
|
+
return new RedisAdapter(config);
|
|
16
|
+
case 'vectorize':
|
|
17
|
+
return new VectorizeAdapter(config);
|
|
18
|
+
default:
|
|
19
|
+
throw new Error(`Unknown vector store: ${type}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/vector/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,MAAiB;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Simple file-based vector store for local development and testing.
|
|
5
|
+
* No external dependencies required.
|
|
6
|
+
*
|
|
7
|
+
* Data is persisted to ~/.cursor-rag/memory-store.json
|
|
8
|
+
*/
|
|
9
|
+
export declare class MemoryAdapter implements VectorStore {
|
|
10
|
+
private documents;
|
|
11
|
+
private storagePath;
|
|
12
|
+
private loaded;
|
|
13
|
+
constructor(_config: RAGConfig);
|
|
14
|
+
private load;
|
|
15
|
+
private save;
|
|
16
|
+
add(docs: VectorDocument[]): Promise<void>;
|
|
17
|
+
search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
|
|
18
|
+
delete(ids: string[]): Promise<void>;
|
|
19
|
+
count(): Promise<number>;
|
|
20
|
+
private cosineSimilarity;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,SAAS;IAI9B,OAAO,CAAC,IAAI;IAeZ,OAAO,CAAC,IAAI;IAaN,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA8B5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,OAAO,CAAC,gBAAgB;CAoBzB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { CONFIG_DIR } from '../../services/config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Simple file-based vector store for local development and testing.
|
|
6
|
+
* No external dependencies required.
|
|
7
|
+
*
|
|
8
|
+
* Data is persisted to ~/.cursor-rag/memory-store.json
|
|
9
|
+
*/
|
|
10
|
+
export class MemoryAdapter {
|
|
11
|
+
documents = new Map();
|
|
12
|
+
storagePath;
|
|
13
|
+
loaded = false;
|
|
14
|
+
constructor(_config) {
|
|
15
|
+
this.storagePath = join(CONFIG_DIR, 'memory-store.json');
|
|
16
|
+
}
|
|
17
|
+
load() {
|
|
18
|
+
if (this.loaded)
|
|
19
|
+
return;
|
|
20
|
+
try {
|
|
21
|
+
if (existsSync(this.storagePath)) {
|
|
22
|
+
const data = JSON.parse(readFileSync(this.storagePath, 'utf-8'));
|
|
23
|
+
this.documents = new Map(Object.entries(data));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Start fresh if file is corrupted
|
|
28
|
+
this.documents = new Map();
|
|
29
|
+
}
|
|
30
|
+
this.loaded = true;
|
|
31
|
+
}
|
|
32
|
+
save() {
|
|
33
|
+
try {
|
|
34
|
+
const dir = dirname(this.storagePath);
|
|
35
|
+
if (!existsSync(dir)) {
|
|
36
|
+
mkdirSync(dir, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
const data = Object.fromEntries(this.documents);
|
|
39
|
+
writeFileSync(this.storagePath, JSON.stringify(data, null, 2));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('Failed to save memory store:', error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async add(docs) {
|
|
46
|
+
this.load();
|
|
47
|
+
for (const doc of docs) {
|
|
48
|
+
this.documents.set(doc.id, doc);
|
|
49
|
+
}
|
|
50
|
+
this.save();
|
|
51
|
+
}
|
|
52
|
+
async search(embedding, options) {
|
|
53
|
+
this.load();
|
|
54
|
+
const results = [];
|
|
55
|
+
for (const doc of this.documents.values()) {
|
|
56
|
+
// Apply source filter if provided
|
|
57
|
+
if (options.filter?.source) {
|
|
58
|
+
const filterSources = options.filter.source.$in || [options.filter.source];
|
|
59
|
+
if (!filterSources.includes(doc.metadata?.source)) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const score = this.cosineSimilarity(embedding, doc.embedding);
|
|
64
|
+
results.push({ doc, score });
|
|
65
|
+
}
|
|
66
|
+
// Sort by score descending and take top K
|
|
67
|
+
results.sort((a, b) => b.score - a.score);
|
|
68
|
+
const topK = results.slice(0, options.topK || 10);
|
|
69
|
+
return topK.map(r => ({
|
|
70
|
+
id: r.doc.id,
|
|
71
|
+
content: r.doc.content,
|
|
72
|
+
metadata: r.doc.metadata,
|
|
73
|
+
score: r.score
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
async delete(ids) {
|
|
77
|
+
this.load();
|
|
78
|
+
for (const id of ids) {
|
|
79
|
+
this.documents.delete(id);
|
|
80
|
+
}
|
|
81
|
+
this.save();
|
|
82
|
+
}
|
|
83
|
+
async count() {
|
|
84
|
+
this.load();
|
|
85
|
+
return this.documents.size;
|
|
86
|
+
}
|
|
87
|
+
cosineSimilarity(a, b) {
|
|
88
|
+
if (a.length !== b.length) {
|
|
89
|
+
throw new Error('Vectors must have the same length');
|
|
90
|
+
}
|
|
91
|
+
let dotProduct = 0;
|
|
92
|
+
let normA = 0;
|
|
93
|
+
let normB = 0;
|
|
94
|
+
for (let i = 0; i < a.length; i++) {
|
|
95
|
+
dotProduct += a[i] * b[i];
|
|
96
|
+
normA += a[i] * a[i];
|
|
97
|
+
normB += b[i] * b[i];
|
|
98
|
+
}
|
|
99
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
100
|
+
if (magnitude === 0)
|
|
101
|
+
return 0;
|
|
102
|
+
return dotProduct / magnitude;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/adapters/vector/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
export declare class QdrantAdapter implements VectorStore {
|
|
4
|
+
private client;
|
|
5
|
+
private collectionName;
|
|
6
|
+
private config;
|
|
7
|
+
constructor(config: RAGConfig);
|
|
8
|
+
initialize(vectorSize?: number): Promise<void>;
|
|
9
|
+
add(docs: VectorDocument[]): Promise<void>;
|
|
10
|
+
search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
|
|
11
|
+
delete(ids: string[]): Promise<void>;
|
|
12
|
+
count(): Promise<number>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=qdrant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/qdrant.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,EAAE,SAAS;IAWvB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9C,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+C5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAK/B"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { QdrantClient } from '@qdrant/js-client-rest';
|
|
2
|
+
export class QdrantAdapter {
|
|
3
|
+
client;
|
|
4
|
+
collectionName = 'cursor-rag-knowledge-base';
|
|
5
|
+
config;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
const url = config.apiKeys?.qdrant?.url || 'http://localhost:6333';
|
|
8
|
+
const apiKey = config.apiKeys?.qdrant?.apiKey;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.client = new QdrantClient({
|
|
11
|
+
url,
|
|
12
|
+
apiKey
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async initialize(vectorSize) {
|
|
16
|
+
// Check if collection exists, create if not
|
|
17
|
+
const collections = await this.client.getCollections();
|
|
18
|
+
const exists = collections.collections.some(c => c.name === this.collectionName);
|
|
19
|
+
if (!exists) {
|
|
20
|
+
// Use provided vector size, or infer from embeddings config
|
|
21
|
+
// Default dimensions per embedding type
|
|
22
|
+
let dimensions = vectorSize;
|
|
23
|
+
if (!dimensions) {
|
|
24
|
+
const embeddingType = this.config.embeddings;
|
|
25
|
+
switch (embeddingType) {
|
|
26
|
+
case 'xenova':
|
|
27
|
+
dimensions = 384; // all-MiniLM-L6-v2
|
|
28
|
+
break;
|
|
29
|
+
case 'openai':
|
|
30
|
+
dimensions = 1536; // text-embedding-3-small
|
|
31
|
+
break;
|
|
32
|
+
case 'ollama':
|
|
33
|
+
dimensions = 768; // nomic-embed-text default
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
dimensions = 384; // fallback
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
await this.client.createCollection(this.collectionName, {
|
|
40
|
+
vectors: {
|
|
41
|
+
size: dimensions,
|
|
42
|
+
distance: 'Cosine'
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async add(docs) {
|
|
48
|
+
// Infer vector size from first document if collection doesn't exist
|
|
49
|
+
const vectorSize = docs.length > 0 ? docs[0].embedding.length : undefined;
|
|
50
|
+
await this.initialize(vectorSize);
|
|
51
|
+
const points = docs.map(doc => ({
|
|
52
|
+
id: doc.id,
|
|
53
|
+
vector: doc.embedding,
|
|
54
|
+
payload: {
|
|
55
|
+
content: doc.content,
|
|
56
|
+
...doc.metadata
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
await this.client.upsert(this.collectionName, {
|
|
60
|
+
wait: true,
|
|
61
|
+
points
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async search(embedding, options) {
|
|
65
|
+
// Infer vector size from query embedding if collection doesn't exist
|
|
66
|
+
await this.initialize(embedding.length);
|
|
67
|
+
// Convert filter format from generic { source: { $in: [...] } } to Qdrant format
|
|
68
|
+
let qdrantFilter = undefined;
|
|
69
|
+
if (options.filter) {
|
|
70
|
+
const filterEntries = Object.entries(options.filter);
|
|
71
|
+
if (filterEntries.length > 0) {
|
|
72
|
+
qdrantFilter = {
|
|
73
|
+
must: filterEntries.map(([key, value]) => {
|
|
74
|
+
// Handle $in operator for arrays
|
|
75
|
+
if (value && typeof value === 'object' && '$in' in value && Array.isArray(value.$in)) {
|
|
76
|
+
return {
|
|
77
|
+
key: key,
|
|
78
|
+
match: {
|
|
79
|
+
any: value.$in
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Handle direct value match
|
|
84
|
+
return {
|
|
85
|
+
key: key,
|
|
86
|
+
match: { value: value }
|
|
87
|
+
};
|
|
88
|
+
})
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const response = await this.client.search(this.collectionName, {
|
|
93
|
+
vector: embedding,
|
|
94
|
+
limit: options.topK,
|
|
95
|
+
filter: qdrantFilter
|
|
96
|
+
});
|
|
97
|
+
return response.map(result => ({
|
|
98
|
+
id: result.id.toString(),
|
|
99
|
+
content: result.payload?.content || '',
|
|
100
|
+
metadata: {
|
|
101
|
+
...(result.payload || {}),
|
|
102
|
+
content: undefined // Remove content from metadata since it's in the main field
|
|
103
|
+
},
|
|
104
|
+
score: result.score || 0
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
async delete(ids) {
|
|
108
|
+
await this.initialize();
|
|
109
|
+
await this.client.delete(this.collectionName, {
|
|
110
|
+
wait: true,
|
|
111
|
+
points: ids
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async count() {
|
|
115
|
+
await this.initialize();
|
|
116
|
+
const info = await this.client.getCollection(this.collectionName);
|
|
117
|
+
return info.points_count || 0;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=qdrant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qdrant.js","sourceRoot":"","sources":["../../../src/adapters/vector/qdrant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Redis Vector Search Adapter
|
|
5
|
+
*
|
|
6
|
+
* Requires Redis Stack (includes RediSearch module) running locally or remotely.
|
|
7
|
+
* Start locally with: docker run -p 6379:6379 redis/redis-stack-server
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Persistent storage
|
|
11
|
+
* - HNSW index for fast approximate nearest neighbor search
|
|
12
|
+
* - Hybrid filtering (metadata + vector)
|
|
13
|
+
*/
|
|
14
|
+
export declare class RedisAdapter implements VectorStore {
|
|
15
|
+
private client;
|
|
16
|
+
private indexName;
|
|
17
|
+
private keyPrefix;
|
|
18
|
+
private vectorDim;
|
|
19
|
+
private isConnected;
|
|
20
|
+
private redisUrl;
|
|
21
|
+
constructor(config: RAGConfig);
|
|
22
|
+
initialize(): Promise<void>;
|
|
23
|
+
private createIndex;
|
|
24
|
+
private float32ToBuffer;
|
|
25
|
+
add(docs: VectorDocument[]): Promise<void>;
|
|
26
|
+
search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
|
|
27
|
+
delete(ids: string[]): Promise<void>;
|
|
28
|
+
count(): Promise<number>;
|
|
29
|
+
disconnect(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,SAAS;IAUvB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAwBnB,WAAW;IAiCzB,OAAO,CAAC,eAAe;IAIjB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoD5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAYxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAMlC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createClient, SchemaFieldTypes, VectorAlgorithms } from 'redis';
|
|
2
|
+
/**
|
|
3
|
+
* Redis Vector Search Adapter
|
|
4
|
+
*
|
|
5
|
+
* Requires Redis Stack (includes RediSearch module) running locally or remotely.
|
|
6
|
+
* Start locally with: docker run -p 6379:6379 redis/redis-stack-server
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Persistent storage
|
|
10
|
+
* - HNSW index for fast approximate nearest neighbor search
|
|
11
|
+
* - Hybrid filtering (metadata + vector)
|
|
12
|
+
*/
|
|
13
|
+
export class RedisAdapter {
|
|
14
|
+
client;
|
|
15
|
+
indexName = 'cursor-rag-idx';
|
|
16
|
+
keyPrefix = 'cursor-rag:doc:';
|
|
17
|
+
vectorDim;
|
|
18
|
+
isConnected = false;
|
|
19
|
+
redisUrl;
|
|
20
|
+
constructor(config) {
|
|
21
|
+
this.redisUrl = config.apiKeys?.redis?.url || config.vectorStoreConfig?.redisUrl || 'redis://localhost:6379';
|
|
22
|
+
this.vectorDim = config.vectorStoreConfig?.vectorDim || 384; // Default for all-MiniLM-L6-v2
|
|
23
|
+
this.client = createClient({ url: this.redisUrl });
|
|
24
|
+
this.client.on('error', (err) => {
|
|
25
|
+
console.error('Redis Client Error:', err.message);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
async initialize() {
|
|
29
|
+
if (!this.isConnected) {
|
|
30
|
+
try {
|
|
31
|
+
await this.client.connect();
|
|
32
|
+
this.isConnected = true;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const err = error;
|
|
36
|
+
throw new Error(`Failed to connect to Redis at ${this.redisUrl}. ` +
|
|
37
|
+
`Ensure Redis Stack is running: docker run -p 6379:6379 redis/redis-stack-server\n` +
|
|
38
|
+
`Error: ${err.message}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Create index if it doesn't exist
|
|
42
|
+
try {
|
|
43
|
+
await this.client.ft.info(this.indexName);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Index doesn't exist, create it
|
|
47
|
+
await this.createIndex();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async createIndex() {
|
|
51
|
+
try {
|
|
52
|
+
await this.client.ft.create(this.indexName, {
|
|
53
|
+
content: {
|
|
54
|
+
type: SchemaFieldTypes.TEXT,
|
|
55
|
+
SORTABLE: true
|
|
56
|
+
},
|
|
57
|
+
source: {
|
|
58
|
+
type: SchemaFieldTypes.TAG
|
|
59
|
+
},
|
|
60
|
+
embedding: {
|
|
61
|
+
type: SchemaFieldTypes.VECTOR,
|
|
62
|
+
TYPE: 'FLOAT32',
|
|
63
|
+
ALGORITHM: VectorAlgorithms.HNSW,
|
|
64
|
+
DISTANCE_METRIC: 'COSINE',
|
|
65
|
+
DIM: this.vectorDim
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
ON: 'HASH',
|
|
69
|
+
PREFIX: this.keyPrefix
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const err = error;
|
|
74
|
+
if (!err.message?.includes('Index already exists')) {
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
float32ToBuffer(arr) {
|
|
80
|
+
return Buffer.from(new Float32Array(arr).buffer);
|
|
81
|
+
}
|
|
82
|
+
async add(docs) {
|
|
83
|
+
await this.initialize();
|
|
84
|
+
for (const doc of docs) {
|
|
85
|
+
const key = `${this.keyPrefix}${doc.id}`;
|
|
86
|
+
const embeddingBuffer = this.float32ToBuffer(doc.embedding);
|
|
87
|
+
await this.client.hSet(key, {
|
|
88
|
+
id: doc.id,
|
|
89
|
+
content: doc.content,
|
|
90
|
+
source: doc.metadata?.source || 'unknown',
|
|
91
|
+
metadata: JSON.stringify(doc.metadata || {}),
|
|
92
|
+
embedding: embeddingBuffer
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async search(embedding, options) {
|
|
97
|
+
await this.initialize();
|
|
98
|
+
const topK = options.topK || 10;
|
|
99
|
+
const embeddingBuffer = this.float32ToBuffer(embedding);
|
|
100
|
+
// Build query with optional filters
|
|
101
|
+
let filterQuery = '*';
|
|
102
|
+
if (options.filter?.source) {
|
|
103
|
+
const sources = Array.isArray(options.filter.source.$in)
|
|
104
|
+
? options.filter.source.$in
|
|
105
|
+
: [options.filter.source];
|
|
106
|
+
filterQuery = `@source:{${sources.map((s) => s.replace(/[^a-zA-Z0-9]/g, '_')).join('|')}}`;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const results = await this.client.ft.search(this.indexName, `(${filterQuery})=>[KNN ${topK} @embedding $query_vec AS score]`, {
|
|
110
|
+
PARAMS: {
|
|
111
|
+
query_vec: embeddingBuffer
|
|
112
|
+
},
|
|
113
|
+
SORTBY: 'score',
|
|
114
|
+
DIALECT: 2,
|
|
115
|
+
RETURN: ['content', 'source', 'metadata', 'score']
|
|
116
|
+
});
|
|
117
|
+
return results.documents.map((doc) => {
|
|
118
|
+
const value = doc.value;
|
|
119
|
+
let metadata = { source: value.source };
|
|
120
|
+
try {
|
|
121
|
+
metadata = JSON.parse(value.metadata || '{}');
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Keep default metadata
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
id: doc.id.replace(this.keyPrefix, ''),
|
|
128
|
+
content: value.content || '',
|
|
129
|
+
metadata,
|
|
130
|
+
score: 1 - parseFloat(value.score || '0') // Convert distance to similarity
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
const err = error;
|
|
136
|
+
console.error('Redis search error:', err.message);
|
|
137
|
+
return [];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async delete(ids) {
|
|
141
|
+
await this.initialize();
|
|
142
|
+
for (const id of ids) {
|
|
143
|
+
await this.client.del(`${this.keyPrefix}${id}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async count() {
|
|
147
|
+
await this.initialize();
|
|
148
|
+
try {
|
|
149
|
+
const info = await this.client.ft.info(this.indexName);
|
|
150
|
+
const numDocs = info.numDocs;
|
|
151
|
+
return typeof numDocs === 'number' ? numDocs : parseInt(String(numDocs), 10) || 0;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async disconnect() {
|
|
158
|
+
if (this.isConnected) {
|
|
159
|
+
await this.client.quit();
|
|
160
|
+
this.isConnected = false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/adapters/vector/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VectorStore, VectorDocument, SearchResult, SearchOptions } from '../../types/index.js';
|
|
2
|
+
import type { RAGConfig } from '../../types/index.js';
|
|
3
|
+
export declare class VectorizeAdapter implements VectorStore {
|
|
4
|
+
constructor(config: RAGConfig);
|
|
5
|
+
add(docs: VectorDocument[]): Promise<void>;
|
|
6
|
+
search(embedding: number[], options: SearchOptions): Promise<SearchResult[]>;
|
|
7
|
+
delete(ids: string[]): Promise<void>;
|
|
8
|
+
count(): Promise<number>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=vectorize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vectorize.d.ts","sourceRoot":"","sources":["../../../src/adapters/vector/vectorize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,gBAAiB,YAAW,WAAW;gBAKtC,MAAM,EAAE,SAAS;IAKvB,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI5E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAG/B"}
|