mcard-js 2.0.0 → 2.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/README.md +91 -3
- package/dist/model/ContentTypeInterpreter.d.ts +16 -0
- package/dist/model/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/ContentTypeInterpreter.js +78 -0
- package/dist/model/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/GTime.d.ts +15 -0
- package/dist/model/GTime.d.ts.map +1 -1
- package/dist/model/GTime.js +44 -2
- package/dist/model/GTime.js.map +1 -1
- package/dist/model/detectors/BaseDetector.d.ts +26 -0
- package/dist/model/detectors/BaseDetector.d.ts.map +1 -0
- package/dist/model/detectors/BaseDetector.js +5 -0
- package/dist/model/detectors/BaseDetector.js.map +1 -0
- package/dist/model/detectors/BinaryDetector.d.ts +12 -0
- package/dist/model/detectors/BinaryDetector.d.ts.map +1 -0
- package/dist/model/detectors/BinaryDetector.js +82 -0
- package/dist/model/detectors/BinaryDetector.js.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts +29 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.js +223 -0
- package/dist/model/detectors/DataFormatDetectors.js.map +1 -0
- package/dist/model/detectors/LanguageDetector.d.ts +11 -0
- package/dist/model/detectors/LanguageDetector.d.ts.map +1 -0
- package/dist/model/detectors/LanguageDetector.js +148 -0
- package/dist/model/detectors/LanguageDetector.js.map +1 -0
- package/dist/model/detectors/MarkupDetectors.d.ts +22 -0
- package/dist/model/detectors/MarkupDetectors.d.ts.map +1 -0
- package/dist/model/detectors/MarkupDetectors.js +132 -0
- package/dist/model/detectors/MarkupDetectors.js.map +1 -0
- package/dist/model/detectors/OBJDetector.d.ts +8 -0
- package/dist/model/detectors/OBJDetector.d.ts.map +1 -0
- package/dist/model/detectors/OBJDetector.js +48 -0
- package/dist/model/detectors/OBJDetector.js.map +1 -0
- package/dist/model/detectors/registry.d.ts +13 -0
- package/dist/model/detectors/registry.d.ts.map +1 -0
- package/dist/model/detectors/registry.js +67 -0
- package/dist/model/detectors/registry.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts +20 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js +42 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js.map +1 -0
- package/dist/ptr/node/CLMLoader.d.ts.map +1 -1
- package/dist/ptr/node/CLMLoader.js +8 -0
- package/dist/ptr/node/CLMLoader.js.map +1 -1
- package/dist/ptr/node/CLMRunner.d.ts.map +1 -1
- package/dist/ptr/node/CLMRunner.js +4 -3
- package/dist/ptr/node/CLMRunner.js.map +1 -1
- package/dist/ptr/node/Runtimes.d.ts +7 -0
- package/dist/ptr/node/Runtimes.d.ts.map +1 -1
- package/dist/ptr/node/Runtimes.js +94 -3
- package/dist/ptr/node/Runtimes.js.map +1 -1
- package/dist/rag/HandleVectorStore.d.ts +201 -0
- package/dist/rag/HandleVectorStore.d.ts.map +1 -0
- package/dist/rag/HandleVectorStore.js +527 -0
- package/dist/rag/HandleVectorStore.js.map +1 -0
- package/dist/rag/PersistentIndexer.d.ts +144 -0
- package/dist/rag/PersistentIndexer.d.ts.map +1 -0
- package/dist/rag/PersistentIndexer.js +275 -0
- package/dist/rag/PersistentIndexer.js.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts +87 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js +164 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js.map +1 -0
- package/dist/rag/graph/community.d.ts +56 -0
- package/dist/rag/graph/community.d.ts.map +1 -0
- package/dist/rag/graph/community.js +247 -0
- package/dist/rag/graph/community.js.map +1 -0
- package/dist/rag/graph/extractor.d.ts +99 -0
- package/dist/rag/graph/extractor.d.ts.map +1 -0
- package/dist/rag/graph/extractor.js +210 -0
- package/dist/rag/graph/extractor.js.map +1 -0
- package/dist/rag/graph/store.d.ts +176 -0
- package/dist/rag/graph/store.d.ts.map +1 -0
- package/dist/rag/graph/store.js +504 -0
- package/dist/rag/graph/store.js.map +1 -0
- package/dist/rag/index.d.ts +19 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +24 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/semanticVersioning.d.ts +187 -0
- package/dist/rag/semanticVersioning.d.ts.map +1 -0
- package/dist/rag/semanticVersioning.js +253 -0
- package/dist/rag/semanticVersioning.js.map +1 -0
- package/dist/storage/IndexedDBEngine.d.ts.map +1 -1
- package/dist/storage/IndexedDBEngine.js +9 -1
- package/dist/storage/IndexedDBEngine.js.map +1 -1
- package/dist/storage/SqliteNodeEngine.d.ts.map +1 -1
- package/dist/storage/SqliteNodeEngine.js +26 -4
- package/dist/storage/SqliteNodeEngine.js.map +1 -1
- package/dist/storage/SqliteWasmEngine.d.ts.map +1 -1
- package/dist/storage/SqliteWasmEngine.js +9 -1
- package/dist/storage/SqliteWasmEngine.js.map +1 -1
- package/dist/storage/StorageAdapter.d.ts +2 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -1
- package/dist/storage/VectorStore.d.ts +28 -5
- package/dist/storage/VectorStore.d.ts.map +1 -1
- package/dist/storage/VectorStore.js +110 -50
- package/dist/storage/VectorStore.js.map +1 -1
- package/dist/storage/schema.d.ts +123 -80
- package/dist/storage/schema.d.ts.map +1 -1
- package/dist/storage/schema.js +305 -217
- package/dist/storage/schema.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PersistentIndexer - Auto-indexing MCards for semantic search
|
|
3
|
+
*
|
|
4
|
+
* Manages automatic indexing of MCards into the vector store,
|
|
5
|
+
* with persistent storage alongside the main MCard database.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors Python: mcard/rag/indexer.py
|
|
8
|
+
*/
|
|
9
|
+
import { MCard } from '../model/MCard';
|
|
10
|
+
import { CardCollection } from '../model/CardCollection';
|
|
11
|
+
import { VectorStoreConfig } from '../storage/VectorStore';
|
|
12
|
+
export interface IndexerConfig extends VectorStoreConfig {
|
|
13
|
+
autoIndex?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface IndexStats {
|
|
16
|
+
indexed: number;
|
|
17
|
+
skipped: number;
|
|
18
|
+
failed: number;
|
|
19
|
+
total: number;
|
|
20
|
+
status?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface IndexerStats {
|
|
23
|
+
vectorDbPath: string;
|
|
24
|
+
embeddingModel: string;
|
|
25
|
+
dimensions: number;
|
|
26
|
+
indexedCount: number;
|
|
27
|
+
vectorCount: number;
|
|
28
|
+
uniqueMCards: number;
|
|
29
|
+
hasVecExtension: boolean;
|
|
30
|
+
hybridSearchEnabled: boolean;
|
|
31
|
+
indexingInProgress: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Manages persistent vector indexing for MCard collections.
|
|
35
|
+
*
|
|
36
|
+
* Features:
|
|
37
|
+
* - Automatic indexing when MCards are added
|
|
38
|
+
* - Persistent vector database alongside MCard database
|
|
39
|
+
* - Background indexing for large collections
|
|
40
|
+
* - Index status tracking
|
|
41
|
+
*
|
|
42
|
+
* Usage:
|
|
43
|
+
* import { PersistentIndexer } from './rag/PersistentIndexer';
|
|
44
|
+
*
|
|
45
|
+
* const indexer = new PersistentIndexer();
|
|
46
|
+
*
|
|
47
|
+
* // Index all existing content
|
|
48
|
+
* const stats = await indexer.indexAll();
|
|
49
|
+
*
|
|
50
|
+
* // Search
|
|
51
|
+
* const results = await indexer.search("query");
|
|
52
|
+
*/
|
|
53
|
+
export declare class PersistentIndexer {
|
|
54
|
+
private static instance;
|
|
55
|
+
private collection;
|
|
56
|
+
private config;
|
|
57
|
+
private vectorDbPath;
|
|
58
|
+
private embedder;
|
|
59
|
+
private vectorStore;
|
|
60
|
+
private autoIndex;
|
|
61
|
+
private indexingInProgress;
|
|
62
|
+
private indexedHashes;
|
|
63
|
+
private initialized;
|
|
64
|
+
/**
|
|
65
|
+
* Get singleton instance of PersistentIndexer
|
|
66
|
+
*/
|
|
67
|
+
static getInstance(collection?: CardCollection, config?: IndexerConfig, vectorDbPath?: string): PersistentIndexer;
|
|
68
|
+
/**
|
|
69
|
+
* Reset singleton instance (for testing)
|
|
70
|
+
*/
|
|
71
|
+
static resetInstance(): void;
|
|
72
|
+
private constructor();
|
|
73
|
+
/**
|
|
74
|
+
* Set the collection to index from
|
|
75
|
+
*/
|
|
76
|
+
setCollection(collection: CardCollection): void;
|
|
77
|
+
/**
|
|
78
|
+
* Load already-indexed hashes from the vector store
|
|
79
|
+
*/
|
|
80
|
+
private loadIndexedHashes;
|
|
81
|
+
/**
|
|
82
|
+
* Check if an MCard is already indexed
|
|
83
|
+
*/
|
|
84
|
+
isIndexed(hash: string): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Index a single MCard
|
|
87
|
+
*
|
|
88
|
+
* @param mcard - MCard to index
|
|
89
|
+
* @param force - Re-index even if already indexed
|
|
90
|
+
* @returns True if indexed successfully
|
|
91
|
+
*/
|
|
92
|
+
indexMCard(mcard: MCard, force?: boolean): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Index all MCards in the collection
|
|
95
|
+
*
|
|
96
|
+
* @param force - Re-index even if already indexed
|
|
97
|
+
* @param progressCallback - Optional callback(current, total)
|
|
98
|
+
* @param batchSize - Number of cards to process at once
|
|
99
|
+
* @returns Statistics about the indexing operation
|
|
100
|
+
*/
|
|
101
|
+
indexAll(force?: boolean, progressCallback?: (current: number, total: number) => void, batchSize?: number): Promise<IndexStats>;
|
|
102
|
+
/**
|
|
103
|
+
* Search for similar MCards
|
|
104
|
+
*
|
|
105
|
+
* @param query - Search query
|
|
106
|
+
* @param k - Number of results
|
|
107
|
+
* @param hybrid - Use hybrid (vector + FTS) search
|
|
108
|
+
* @returns List of search results
|
|
109
|
+
*/
|
|
110
|
+
search(query: string, k?: number, hybrid?: boolean): Promise<any[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Delete an MCard from the index
|
|
113
|
+
*/
|
|
114
|
+
delete(hash: string): Promise<boolean>;
|
|
115
|
+
/**
|
|
116
|
+
* Clear the entire vector index
|
|
117
|
+
*/
|
|
118
|
+
clear(): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Get indexer statistics
|
|
121
|
+
*/
|
|
122
|
+
getStats(): IndexerStats;
|
|
123
|
+
/**
|
|
124
|
+
* Close the indexer
|
|
125
|
+
*/
|
|
126
|
+
close(): void;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get or create the default persistent indexer
|
|
130
|
+
*/
|
|
131
|
+
export declare function getIndexer(collection?: CardCollection, config?: IndexerConfig): PersistentIndexer;
|
|
132
|
+
/**
|
|
133
|
+
* Convenience function for semantic search
|
|
134
|
+
*/
|
|
135
|
+
export declare function semanticSearch(query: string, k?: number): Promise<any[]>;
|
|
136
|
+
/**
|
|
137
|
+
* Convenience function to index an MCard
|
|
138
|
+
*/
|
|
139
|
+
export declare function indexMCard(mcard: MCard, force?: boolean): Promise<boolean>;
|
|
140
|
+
/**
|
|
141
|
+
* Reset the default indexer (for testing)
|
|
142
|
+
*/
|
|
143
|
+
export declare function resetIndexer(): void;
|
|
144
|
+
//# sourceMappingURL=PersistentIndexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistentIndexer.d.ts","sourceRoot":"","sources":["../../src/rag/PersistentIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PersistentIndexer - Auto-indexing MCards for semantic search
|
|
3
|
+
*
|
|
4
|
+
* Manages automatic indexing of MCards into the vector store,
|
|
5
|
+
* with persistent storage alongside the main MCard database.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors Python: mcard/rag/indexer.py
|
|
8
|
+
*/
|
|
9
|
+
import { MCardVectorStore, DEFAULT_VECTOR_CONFIG } from '../storage/VectorStore';
|
|
10
|
+
import { OllamaEmbeddingProvider } from '../ptr/llm/providers/OllamaEmbeddingProvider';
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
// PersistentIndexer Class
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
/**
|
|
15
|
+
* Manages persistent vector indexing for MCard collections.
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Automatic indexing when MCards are added
|
|
19
|
+
* - Persistent vector database alongside MCard database
|
|
20
|
+
* - Background indexing for large collections
|
|
21
|
+
* - Index status tracking
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* import { PersistentIndexer } from './rag/PersistentIndexer';
|
|
25
|
+
*
|
|
26
|
+
* const indexer = new PersistentIndexer();
|
|
27
|
+
*
|
|
28
|
+
* // Index all existing content
|
|
29
|
+
* const stats = await indexer.indexAll();
|
|
30
|
+
*
|
|
31
|
+
* // Search
|
|
32
|
+
* const results = await indexer.search("query");
|
|
33
|
+
*/
|
|
34
|
+
export class PersistentIndexer {
|
|
35
|
+
static instance = null;
|
|
36
|
+
collection;
|
|
37
|
+
config;
|
|
38
|
+
vectorDbPath;
|
|
39
|
+
embedder;
|
|
40
|
+
vectorStore;
|
|
41
|
+
autoIndex;
|
|
42
|
+
indexingInProgress = false;
|
|
43
|
+
indexedHashes = new Set();
|
|
44
|
+
initialized = false;
|
|
45
|
+
/**
|
|
46
|
+
* Get singleton instance of PersistentIndexer
|
|
47
|
+
*/
|
|
48
|
+
static getInstance(collection, config, vectorDbPath) {
|
|
49
|
+
if (!PersistentIndexer.instance) {
|
|
50
|
+
PersistentIndexer.instance = new PersistentIndexer(collection, config, vectorDbPath);
|
|
51
|
+
}
|
|
52
|
+
return PersistentIndexer.instance;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reset singleton instance (for testing)
|
|
56
|
+
*/
|
|
57
|
+
static resetInstance() {
|
|
58
|
+
PersistentIndexer.instance = null;
|
|
59
|
+
}
|
|
60
|
+
constructor(collection, config, vectorDbPath) {
|
|
61
|
+
this.config = config || { ...DEFAULT_VECTOR_CONFIG, autoIndex: false };
|
|
62
|
+
this.autoIndex = this.config.autoIndex ?? false;
|
|
63
|
+
// Vector DB path - default to memory
|
|
64
|
+
this.vectorDbPath = vectorDbPath || ':memory:';
|
|
65
|
+
// Initialize embedding provider
|
|
66
|
+
this.embedder = new OllamaEmbeddingProvider(this.config.embeddingModel || DEFAULT_VECTOR_CONFIG.embeddingModel, this.config.ollamaBaseUrl || 'http://localhost:11434');
|
|
67
|
+
// Initialize vector store
|
|
68
|
+
this.vectorStore = new MCardVectorStore(this.vectorDbPath, this.config);
|
|
69
|
+
// Collection will be set later if not provided
|
|
70
|
+
this.collection = collection;
|
|
71
|
+
this.initialized = true;
|
|
72
|
+
console.debug(`PersistentIndexer initialized: ${this.vectorDbPath}`);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Set the collection to index from
|
|
76
|
+
*/
|
|
77
|
+
setCollection(collection) {
|
|
78
|
+
this.collection = collection;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Load already-indexed hashes from the vector store
|
|
82
|
+
*/
|
|
83
|
+
async loadIndexedHashes() {
|
|
84
|
+
try {
|
|
85
|
+
// Query for distinct hashes from metadata table
|
|
86
|
+
const hashes = await this.vectorStore.getIndexedHashes();
|
|
87
|
+
this.indexedHashes = new Set(hashes);
|
|
88
|
+
console.debug(`Loaded ${this.indexedHashes.size} indexed hashes`);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.warn(`Failed to load indexed hashes: ${error}`);
|
|
92
|
+
this.indexedHashes = new Set();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Check if an MCard is already indexed
|
|
97
|
+
*/
|
|
98
|
+
isIndexed(hash) {
|
|
99
|
+
return this.indexedHashes.has(hash);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Index a single MCard
|
|
103
|
+
*
|
|
104
|
+
* @param mcard - MCard to index
|
|
105
|
+
* @param force - Re-index even if already indexed
|
|
106
|
+
* @returns True if indexed successfully
|
|
107
|
+
*/
|
|
108
|
+
async indexMCard(mcard, force = false) {
|
|
109
|
+
if (!force && this.isIndexed(mcard.hash)) {
|
|
110
|
+
console.debug(`MCard ${mcard.hash.slice(0, 8)} already indexed, skipping`);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const content = mcard.getContentAsText();
|
|
115
|
+
const count = await this.vectorStore.index(mcard.hash, content);
|
|
116
|
+
if (count > 0) {
|
|
117
|
+
this.indexedHashes.add(mcard.hash);
|
|
118
|
+
console.debug(`Indexed MCard ${mcard.hash.slice(0, 8)} (${count} vectors)`);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(`Failed to index MCard ${mcard.hash.slice(0, 8)}: ${error}`);
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Index all MCards in the collection
|
|
130
|
+
*
|
|
131
|
+
* @param force - Re-index even if already indexed
|
|
132
|
+
* @param progressCallback - Optional callback(current, total)
|
|
133
|
+
* @param batchSize - Number of cards to process at once
|
|
134
|
+
* @returns Statistics about the indexing operation
|
|
135
|
+
*/
|
|
136
|
+
async indexAll(force = false, progressCallback, batchSize = 50) {
|
|
137
|
+
if (this.indexingInProgress) {
|
|
138
|
+
console.warn('Indexing already in progress');
|
|
139
|
+
return { indexed: 0, skipped: 0, failed: 0, total: 0, status: 'busy' };
|
|
140
|
+
}
|
|
141
|
+
if (!this.collection) {
|
|
142
|
+
throw new Error('No collection set for indexer');
|
|
143
|
+
}
|
|
144
|
+
this.indexingInProgress = true;
|
|
145
|
+
const stats = { indexed: 0, skipped: 0, failed: 0, total: 0 };
|
|
146
|
+
try {
|
|
147
|
+
// Get all cards through pagination
|
|
148
|
+
let pageNumber = 1;
|
|
149
|
+
const pageSize = batchSize;
|
|
150
|
+
let allCards = [];
|
|
151
|
+
while (true) {
|
|
152
|
+
const page = await this.collection.getPage(pageNumber, pageSize);
|
|
153
|
+
allCards.push(...page.items);
|
|
154
|
+
if (!page.hasNext)
|
|
155
|
+
break;
|
|
156
|
+
pageNumber++;
|
|
157
|
+
}
|
|
158
|
+
stats.total = allCards.length;
|
|
159
|
+
for (let i = 0; i < allCards.length; i++) {
|
|
160
|
+
const mcard = allCards[i];
|
|
161
|
+
if (!force && this.isIndexed(mcard.hash)) {
|
|
162
|
+
stats.skipped++;
|
|
163
|
+
}
|
|
164
|
+
else if (await this.indexMCard(mcard, force)) {
|
|
165
|
+
stats.indexed++;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
stats.failed++;
|
|
169
|
+
}
|
|
170
|
+
// Progress callback
|
|
171
|
+
if (progressCallback && (i + 1) % 10 === 0) {
|
|
172
|
+
progressCallback(i + 1, stats.total);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
console.info(`Indexing complete: ${JSON.stringify(stats)}`);
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
this.indexingInProgress = false;
|
|
179
|
+
}
|
|
180
|
+
return stats;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Search for similar MCards
|
|
184
|
+
*
|
|
185
|
+
* @param query - Search query
|
|
186
|
+
* @param k - Number of results
|
|
187
|
+
* @param hybrid - Use hybrid (vector + FTS) search
|
|
188
|
+
* @returns List of search results
|
|
189
|
+
*/
|
|
190
|
+
async search(query, k = 5, hybrid = true) {
|
|
191
|
+
if (hybrid && this.config.enableHybridSearch) {
|
|
192
|
+
return this.vectorStore.hybridSearch(query, k);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
return this.vectorStore.search(query, k);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Delete an MCard from the index
|
|
200
|
+
*/
|
|
201
|
+
async delete(hash) {
|
|
202
|
+
const count = await this.vectorStore.delete(hash);
|
|
203
|
+
if (count > 0) {
|
|
204
|
+
this.indexedHashes.delete(hash);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Clear the entire vector index
|
|
211
|
+
*/
|
|
212
|
+
async clear() {
|
|
213
|
+
await this.vectorStore.clear();
|
|
214
|
+
this.indexedHashes.clear();
|
|
215
|
+
console.info('Vector index cleared');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get indexer statistics
|
|
219
|
+
*/
|
|
220
|
+
getStats() {
|
|
221
|
+
return {
|
|
222
|
+
vectorDbPath: this.vectorDbPath,
|
|
223
|
+
embeddingModel: this.config.embeddingModel || DEFAULT_VECTOR_CONFIG.embeddingModel,
|
|
224
|
+
dimensions: this.config.dimensions || DEFAULT_VECTOR_CONFIG.dimensions,
|
|
225
|
+
indexedCount: this.indexedHashes.size,
|
|
226
|
+
vectorCount: this.vectorStore.count(),
|
|
227
|
+
uniqueMCards: this.vectorStore.countUnique ? this.vectorStore.countUnique() : this.indexedHashes.size,
|
|
228
|
+
hasVecExtension: this.vectorStore.hasVectorExtension(),
|
|
229
|
+
hybridSearchEnabled: this.config.enableHybridSearch ?? false,
|
|
230
|
+
indexingInProgress: this.indexingInProgress,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Close the indexer
|
|
235
|
+
*/
|
|
236
|
+
close() {
|
|
237
|
+
this.vectorStore.close();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
241
|
+
// Global Convenience Functions
|
|
242
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
243
|
+
let defaultIndexer = null;
|
|
244
|
+
/**
|
|
245
|
+
* Get or create the default persistent indexer
|
|
246
|
+
*/
|
|
247
|
+
export function getIndexer(collection, config) {
|
|
248
|
+
if (!defaultIndexer) {
|
|
249
|
+
defaultIndexer = PersistentIndexer.getInstance(collection, config);
|
|
250
|
+
}
|
|
251
|
+
return defaultIndexer;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Convenience function for semantic search
|
|
255
|
+
*/
|
|
256
|
+
export async function semanticSearch(query, k = 5) {
|
|
257
|
+
return getIndexer().search(query, k);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Convenience function to index an MCard
|
|
261
|
+
*/
|
|
262
|
+
export async function indexMCard(mcard, force = false) {
|
|
263
|
+
return getIndexer().indexMCard(mcard, force);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Reset the default indexer (for testing)
|
|
267
|
+
*/
|
|
268
|
+
export function resetIndexer() {
|
|
269
|
+
if (defaultIndexer) {
|
|
270
|
+
defaultIndexer.close();
|
|
271
|
+
defaultIndexer = null;
|
|
272
|
+
}
|
|
273
|
+
PersistentIndexer.resetInstance();
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=PersistentIndexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistentIndexer.js","sourceRoot":"","sources":["../../src/rag/PersistentIndexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vision Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Multimodal embedding provider that uses vision models to describe images,
|
|
5
|
+
* then embeds the descriptions for vector search.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors Python: mcard/rag/embeddings/vision.py
|
|
8
|
+
*/
|
|
9
|
+
import { EmbeddingProvider } from '../../storage/VectorStore';
|
|
10
|
+
export interface VisionProviderConfig {
|
|
11
|
+
visionModel?: string;
|
|
12
|
+
embeddingModel?: string;
|
|
13
|
+
ollamaBaseUrl?: string;
|
|
14
|
+
descriptionPrompt?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const VISION_MODELS: {
|
|
17
|
+
moondream: {
|
|
18
|
+
description: string;
|
|
19
|
+
size: string;
|
|
20
|
+
};
|
|
21
|
+
'llama3.2-vision': {
|
|
22
|
+
description: string;
|
|
23
|
+
size: string;
|
|
24
|
+
};
|
|
25
|
+
llava: {
|
|
26
|
+
description: string;
|
|
27
|
+
size: string;
|
|
28
|
+
};
|
|
29
|
+
'minicpm-v': {
|
|
30
|
+
description: string;
|
|
31
|
+
size: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Multimodal embedding provider for images.
|
|
36
|
+
*
|
|
37
|
+
* Uses a two-stage approach:
|
|
38
|
+
* 1. Vision model generates a text description of the image
|
|
39
|
+
* 2. Text embedding model converts description to vector
|
|
40
|
+
*
|
|
41
|
+
* This enables semantic search over images using existing vector infrastructure.
|
|
42
|
+
*
|
|
43
|
+
* Usage:
|
|
44
|
+
* const provider = new VisionEmbeddingProvider();
|
|
45
|
+
*
|
|
46
|
+
* // Embed an image (path, bytes, or base64)
|
|
47
|
+
* const embedding = await provider.embedImage("path/to/image.jpg");
|
|
48
|
+
*/
|
|
49
|
+
export declare class VisionEmbeddingProvider implements EmbeddingProvider {
|
|
50
|
+
private visionModel;
|
|
51
|
+
private baseUrl;
|
|
52
|
+
private descriptionPrompt;
|
|
53
|
+
private textEmbedder;
|
|
54
|
+
constructor(config?: VisionProviderConfig);
|
|
55
|
+
get modelName(): string;
|
|
56
|
+
get providerName(): string;
|
|
57
|
+
get dimensions(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Generate text description of an image.
|
|
60
|
+
*
|
|
61
|
+
* @param imageData - Image as base64 string or Uint8Array
|
|
62
|
+
* @param prompt - Optional custom prompt
|
|
63
|
+
*/
|
|
64
|
+
describeImage(imageData: string | Uint8Array, prompt?: string): Promise<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Generate embedding for an image.
|
|
67
|
+
*/
|
|
68
|
+
embedImage(imageData: string | Uint8Array, prompt?: string): Promise<number[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Generate embedding and return description.
|
|
71
|
+
*/
|
|
72
|
+
embedImageWithDescription(imageData: string | Uint8Array, prompt?: string): Promise<{
|
|
73
|
+
embedding: number[];
|
|
74
|
+
description: string;
|
|
75
|
+
}>;
|
|
76
|
+
embed(text: string): Promise<number[]>;
|
|
77
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
78
|
+
/**
|
|
79
|
+
* Convert Uint8Array to base64 string
|
|
80
|
+
*/
|
|
81
|
+
private arrayBufferToBase64;
|
|
82
|
+
/**
|
|
83
|
+
* Get provider information
|
|
84
|
+
*/
|
|
85
|
+
getInfo(): any;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=VisionEmbeddingProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisionEmbeddingProvider.d.ts","sourceRoot":"","sources":["../../../src/rag/embeddings/VisionEmbeddingProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAO9D,MAAM,WAAW,oBAAoB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAkBF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAA0B;gBAElC,MAAM,GAAE,oBAAyB;IAW7C,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCrF;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWpF;;OAEG;IACG,yBAAyB,CAC3B,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAUlD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAItC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQtD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,IAAI,GAAG;CAQjB"}
|