causantic 0.7.2 → 0.8.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 +5 -4
- package/config.schema.json +46 -0
- package/dist/cli/commands/init/api-key.d.ts +2 -0
- package/dist/cli/commands/init/api-key.d.ts.map +1 -0
- package/dist/cli/commands/init/api-key.js +26 -0
- package/dist/cli/commands/init/api-key.js.map +1 -0
- package/dist/cli/commands/init/encryption.d.ts +2 -0
- package/dist/cli/commands/init/encryption.d.ts.map +1 -0
- package/dist/cli/commands/init/encryption.js +104 -0
- package/dist/cli/commands/init/encryption.js.map +1 -0
- package/dist/cli/commands/init/health.d.ts +2 -0
- package/dist/cli/commands/init/health.d.ts.map +1 -0
- package/dist/cli/commands/init/health.js +15 -0
- package/dist/cli/commands/init/health.js.map +1 -0
- package/dist/cli/commands/init/hooks.d.ts +2 -0
- package/dist/cli/commands/init/hooks.d.ts.map +1 -0
- package/dist/cli/commands/init/hooks.js +92 -0
- package/dist/cli/commands/init/hooks.js.map +1 -0
- package/dist/cli/commands/init/index.d.ts +3 -0
- package/dist/cli/commands/init/index.d.ts.map +1 -0
- package/dist/cli/commands/init/index.js +95 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/ingest.d.ts +2 -0
- package/dist/cli/commands/init/ingest.d.ts.map +1 -0
- package/dist/cli/commands/init/ingest.js +171 -0
- package/dist/cli/commands/init/ingest.js.map +1 -0
- package/dist/cli/commands/init/mcp-config.d.ts +9 -0
- package/dist/cli/commands/init/mcp-config.d.ts.map +1 -0
- package/dist/cli/commands/init/mcp-config.js +191 -0
- package/dist/cli/commands/init/mcp-config.js.map +1 -0
- package/dist/cli/commands/init/shared.d.ts +9 -0
- package/dist/cli/commands/init/shared.d.ts.map +1 -0
- package/dist/cli/commands/init/shared.js +58 -0
- package/dist/cli/commands/init/shared.js.map +1 -0
- package/dist/cli/commands/init/skills.d.ts +2 -0
- package/dist/cli/commands/init/skills.d.ts.map +1 -0
- package/dist/cli/commands/init/skills.js +68 -0
- package/dist/cli/commands/init/skills.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +8 -0
- package/dist/cli/commands/reindex.d.ts.map +1 -0
- package/dist/cli/commands/reindex.js +143 -0
- package/dist/cli/commands/reindex.js.map +1 -0
- package/dist/cli/index.js +4 -7
- package/dist/cli/index.js.map +1 -1
- package/dist/clusters/cluster-manager.d.ts +23 -0
- package/dist/clusters/cluster-manager.d.ts.map +1 -1
- package/dist/clusters/cluster-manager.js +134 -0
- package/dist/clusters/cluster-manager.js.map +1 -1
- package/dist/clusters/hdbscan-model-store.d.ts +37 -0
- package/dist/clusters/hdbscan-model-store.d.ts.map +1 -0
- package/dist/clusters/hdbscan-model-store.js +73 -0
- package/dist/clusters/hdbscan-model-store.js.map +1 -0
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +38 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/memory-config.d.ts +6 -0
- package/dist/config/memory-config.d.ts.map +1 -1
- package/dist/config/memory-config.js +6 -0
- package/dist/config/memory-config.js.map +1 -1
- package/dist/dashboard/client/assets/index-Bv5lFW-1.js +17 -0
- package/dist/dashboard/client/assets/index-DTriNsi9.css +1 -0
- package/dist/dashboard/client/index.html +2 -2
- package/dist/ingest/ingest-session.d.ts.map +1 -1
- package/dist/ingest/ingest-session.js +165 -217
- package/dist/ingest/ingest-session.js.map +1 -1
- package/dist/maintenance/scheduler.d.ts.map +1 -1
- package/dist/maintenance/scheduler.js +17 -6
- package/dist/maintenance/scheduler.js.map +1 -1
- package/dist/maintenance/tasks/update-clusters.d.ts +9 -0
- package/dist/maintenance/tasks/update-clusters.d.ts.map +1 -1
- package/dist/maintenance/tasks/update-clusters.js +26 -7
- package/dist/maintenance/tasks/update-clusters.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +1 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/services.d.ts +27 -0
- package/dist/mcp/services.d.ts.map +1 -0
- package/dist/mcp/services.js +99 -0
- package/dist/mcp/services.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +39 -102
- package/dist/mcp/tools.js.map +1 -1
- package/dist/models/embedder.d.ts.map +1 -1
- package/dist/models/embedder.js +2 -0
- package/dist/models/embedder.js.map +1 -1
- package/dist/retrieval/chain-assembler.js +2 -6
- package/dist/retrieval/chain-assembler.js.map +1 -1
- package/dist/retrieval/chain-walker.d.ts +12 -6
- package/dist/retrieval/chain-walker.d.ts.map +1 -1
- package/dist/retrieval/chain-walker.js +121 -84
- package/dist/retrieval/chain-walker.js.map +1 -1
- package/dist/retrieval/cluster-expander.d.ts +1 -1
- package/dist/retrieval/cluster-expander.d.ts.map +1 -1
- package/dist/retrieval/cluster-expander.js +13 -1
- package/dist/retrieval/cluster-expander.js.map +1 -1
- package/dist/retrieval/formatting.d.ts +13 -0
- package/dist/retrieval/formatting.d.ts.map +1 -0
- package/dist/retrieval/formatting.js +27 -0
- package/dist/retrieval/formatting.js.map +1 -0
- package/dist/retrieval/search-assembler.d.ts.map +1 -1
- package/dist/retrieval/search-assembler.js +21 -15
- package/dist/retrieval/search-assembler.js.map +1 -1
- package/dist/storage/feedback-store.d.ts +34 -0
- package/dist/storage/feedback-store.d.ts.map +1 -0
- package/dist/storage/feedback-store.js +67 -0
- package/dist/storage/feedback-store.js.map +1 -0
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +68 -0
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/schema.sql +24 -2
- package/dist/storage/vector-store.d.ts +20 -0
- package/dist/storage/vector-store.d.ts.map +1 -1
- package/dist/storage/vector-store.js +66 -26
- package/dist/storage/vector-store.js.map +1 -1
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +7 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +8 -7
- package/src/dashboard/client/package-lock.json +179 -880
- package/src/dashboard/client/package.json +3 -3
- package/dist/cli/commands/init.d.ts +0 -3
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -781
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/dashboard/client/assets/index-BmZeW-Jd.css +0 -1
- package/dist/dashboard/client/assets/index-Br0W1mEc.js +0 -166
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI command: re-embed all chunks with the configured embedding model.
|
|
3
|
+
*
|
|
4
|
+
* Usage: npx causantic reindex [--batch-size N] [--dry-run]
|
|
5
|
+
*/
|
|
6
|
+
import { getDb } from '../../storage/db.js';
|
|
7
|
+
import { Embedder } from '../../models/embedder.js';
|
|
8
|
+
import { getModel } from '../../models/model-registry.js';
|
|
9
|
+
import { loadConfig, toRuntimeConfig } from '../../config/loader.js';
|
|
10
|
+
import { serializeEmbedding } from '../../utils/embedding-utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get or create a progress tracking table and return the last completed batch.
|
|
13
|
+
*/
|
|
14
|
+
function getLastCompletedBatch(db, modelId) {
|
|
15
|
+
db.exec(`
|
|
16
|
+
CREATE TABLE IF NOT EXISTS reindex_progress (
|
|
17
|
+
model_id TEXT PRIMARY KEY,
|
|
18
|
+
last_batch INTEGER NOT NULL DEFAULT 0,
|
|
19
|
+
started_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
21
|
+
)
|
|
22
|
+
`);
|
|
23
|
+
const row = db
|
|
24
|
+
.prepare('SELECT last_batch FROM reindex_progress WHERE model_id = ?')
|
|
25
|
+
.get(modelId);
|
|
26
|
+
return row?.last_batch ?? 0;
|
|
27
|
+
}
|
|
28
|
+
function updateProgress(db, modelId, batch) {
|
|
29
|
+
db.prepare('INSERT OR REPLACE INTO reindex_progress (model_id, last_batch, updated_at) VALUES (?, ?, CURRENT_TIMESTAMP)').run(modelId, batch);
|
|
30
|
+
}
|
|
31
|
+
function clearProgress(db, modelId) {
|
|
32
|
+
db.prepare('DELETE FROM reindex_progress WHERE model_id = ?').run(modelId);
|
|
33
|
+
}
|
|
34
|
+
export const reindexCommand = {
|
|
35
|
+
name: 'reindex',
|
|
36
|
+
description: 'Re-embed all chunks with the configured embedding model',
|
|
37
|
+
usage: 'causantic reindex [--batch-size N] [--dry-run]',
|
|
38
|
+
handler: async (args) => {
|
|
39
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
40
|
+
console.log('Usage: causantic reindex [--batch-size N] [--dry-run]');
|
|
41
|
+
console.log('');
|
|
42
|
+
console.log('Re-embeds all chunks using the configured embedding model.');
|
|
43
|
+
console.log('Processes in batches with progress tracking for safe resumption.');
|
|
44
|
+
console.log('');
|
|
45
|
+
console.log('Options:');
|
|
46
|
+
console.log(' --batch-size N Chunks per batch (default: 100)');
|
|
47
|
+
console.log(' --dry-run Show what would be done without making changes');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const dryRun = args.includes('--dry-run');
|
|
51
|
+
let batchSize = 100;
|
|
52
|
+
const batchIdx = args.indexOf('--batch-size');
|
|
53
|
+
if (batchIdx !== -1 && args[batchIdx + 1]) {
|
|
54
|
+
batchSize = parseInt(args[batchIdx + 1], 10);
|
|
55
|
+
if (isNaN(batchSize) || batchSize < 1) {
|
|
56
|
+
console.error('Error: --batch-size must be a positive integer');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const config = toRuntimeConfig(loadConfig());
|
|
61
|
+
const targetModel = config.embeddingModel;
|
|
62
|
+
const modelConfig = getModel(targetModel);
|
|
63
|
+
console.log(`Reindex target: ${targetModel} (${modelConfig.dims}D)`);
|
|
64
|
+
const db = getDb();
|
|
65
|
+
// Count chunks that need re-embedding
|
|
66
|
+
const totalRow = db.prepare('SELECT COUNT(*) as count FROM chunks').get();
|
|
67
|
+
const totalChunks = totalRow.count;
|
|
68
|
+
if (totalChunks === 0) {
|
|
69
|
+
console.log('No chunks to reindex.');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Count existing vectors for the target model
|
|
73
|
+
const existingRow = db
|
|
74
|
+
.prepare('SELECT COUNT(*) as count FROM vectors WHERE model_id = ?')
|
|
75
|
+
.get(targetModel);
|
|
76
|
+
// Count vectors with different model
|
|
77
|
+
const otherModelRow = db
|
|
78
|
+
.prepare('SELECT COUNT(*) as count FROM vectors WHERE model_id != ?')
|
|
79
|
+
.get(targetModel);
|
|
80
|
+
console.log(`Chunks: ${totalChunks}`);
|
|
81
|
+
console.log(`Existing vectors (${targetModel}): ${existingRow.count}`);
|
|
82
|
+
if (otherModelRow.count > 0) {
|
|
83
|
+
console.log(`Vectors (other models): ${otherModelRow.count} (will be replaced)`);
|
|
84
|
+
}
|
|
85
|
+
const totalBatches = Math.ceil(totalChunks / batchSize);
|
|
86
|
+
const lastBatch = getLastCompletedBatch(db, targetModel);
|
|
87
|
+
if (lastBatch > 0) {
|
|
88
|
+
console.log(`Resuming from batch ${lastBatch + 1}/${totalBatches}`);
|
|
89
|
+
}
|
|
90
|
+
if (dryRun) {
|
|
91
|
+
console.log(`\nDry run: would process ${totalChunks} chunks in ${totalBatches} batches`);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Load the embedder
|
|
95
|
+
const embedder = new Embedder();
|
|
96
|
+
await embedder.load(modelConfig);
|
|
97
|
+
const insertStmt = db.prepare('INSERT OR REPLACE INTO vectors (id, embedding, orphaned_at, last_accessed, model_id) VALUES (?, ?, NULL, CURRENT_TIMESTAMP, ?)');
|
|
98
|
+
const deleteOldStmt = db.prepare('DELETE FROM vectors WHERE id = ? AND model_id != ?');
|
|
99
|
+
// Process in batches
|
|
100
|
+
const allChunks = db
|
|
101
|
+
.prepare('SELECT id, content FROM chunks ORDER BY created_at ASC')
|
|
102
|
+
.all();
|
|
103
|
+
let processed = lastBatch * batchSize;
|
|
104
|
+
const startTime = Date.now();
|
|
105
|
+
for (let batch = lastBatch; batch < totalBatches; batch++) {
|
|
106
|
+
const start = batch * batchSize;
|
|
107
|
+
const end = Math.min(start + batchSize, allChunks.length);
|
|
108
|
+
const batchChunks = allChunks.slice(start, end);
|
|
109
|
+
// Embed all chunks in this batch
|
|
110
|
+
const embeddings = [];
|
|
111
|
+
for (const chunk of batchChunks) {
|
|
112
|
+
const result = await embedder.embed(chunk.content, false);
|
|
113
|
+
embeddings.push({ id: chunk.id, embedding: result.embedding });
|
|
114
|
+
}
|
|
115
|
+
// Write to DB in a transaction
|
|
116
|
+
db.transaction(() => {
|
|
117
|
+
for (const { id, embedding } of embeddings) {
|
|
118
|
+
const blob = serializeEmbedding(embedding);
|
|
119
|
+
insertStmt.run(id, blob, targetModel);
|
|
120
|
+
// Remove old-model vectors for this chunk
|
|
121
|
+
deleteOldStmt.run(id, targetModel);
|
|
122
|
+
}
|
|
123
|
+
})();
|
|
124
|
+
processed += batchChunks.length;
|
|
125
|
+
updateProgress(db, targetModel, batch + 1);
|
|
126
|
+
const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
127
|
+
const pct = Math.round((processed / allChunks.length) * 100);
|
|
128
|
+
process.stdout.write(`\r [${pct}%] ${processed}/${allChunks.length} chunks (${elapsed}s)`);
|
|
129
|
+
}
|
|
130
|
+
console.log(''); // newline after progress
|
|
131
|
+
// Clean up progress tracker
|
|
132
|
+
clearProgress(db, targetModel);
|
|
133
|
+
// Clean up any remaining vectors from other models that don't correspond to chunks
|
|
134
|
+
const cleanedUp = db.prepare('DELETE FROM vectors WHERE model_id != ?').run(targetModel);
|
|
135
|
+
if (cleanedUp.changes > 0) {
|
|
136
|
+
console.log(`Cleaned up ${cleanedUp.changes} orphaned vectors from other models`);
|
|
137
|
+
}
|
|
138
|
+
await embedder.dispose();
|
|
139
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
140
|
+
console.log(`Reindex complete: ${processed} chunks re-embedded with ${targetModel} in ${duration}s`);
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=reindex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../../src/cli/commands/reindex.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Usage: npx causantic <command> [options]
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { fileURLToPath } from 'node:url';
|
|
10
|
-
import { initCommand } from './commands/init.js';
|
|
7
|
+
import { VERSION } from '../utils/version.js';
|
|
8
|
+
import { initCommand } from './commands/init/index.js';
|
|
11
9
|
import { serveCommand } from './commands/serve.js';
|
|
12
10
|
import { ingestCommand, batchIngestCommand } from './commands/ingest.js';
|
|
13
11
|
import { recallCommand } from './commands/search.js';
|
|
@@ -20,9 +18,7 @@ import { exportCommand, importCommand } from './commands/archive.js';
|
|
|
20
18
|
import { uninstallCommand } from './commands/uninstall.js';
|
|
21
19
|
import { dashboardCommand } from './commands/dashboard.js';
|
|
22
20
|
import { benchmarkCollectionCommand } from './commands/benchmark-collection.js';
|
|
23
|
-
|
|
24
|
-
const pkg = JSON.parse(readFileSync(resolve(__dirname, '../../package.json'), 'utf-8'));
|
|
25
|
-
const VERSION = pkg.version;
|
|
21
|
+
import { reindexCommand } from './commands/reindex.js';
|
|
26
22
|
const commands = [
|
|
27
23
|
initCommand,
|
|
28
24
|
serveCommand,
|
|
@@ -40,6 +36,7 @@ const commands = [
|
|
|
40
36
|
uninstallCommand,
|
|
41
37
|
dashboardCommand,
|
|
42
38
|
benchmarkCollectionCommand,
|
|
39
|
+
reindexCommand,
|
|
43
40
|
];
|
|
44
41
|
function showHelp() {
|
|
45
42
|
console.log('Causantic');
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,10 @@ export interface ClusteringOptions {
|
|
|
54
54
|
clusterThreshold?: number;
|
|
55
55
|
/** Clear existing clusters before reclustering. Default: true. */
|
|
56
56
|
clearExisting?: boolean;
|
|
57
|
+
/** Project ID for persisting HDBSCAN model (incremental clustering). */
|
|
58
|
+
projectId?: string;
|
|
59
|
+
/** Embedding model ID for model-aware persistence. Default: 'jina-small'. */
|
|
60
|
+
embeddingModel?: string;
|
|
57
61
|
}
|
|
58
62
|
/**
|
|
59
63
|
* Cluster manager for running HDBSCAN and managing cluster assignments.
|
|
@@ -64,6 +68,25 @@ export declare class ClusterManager {
|
|
|
64
68
|
* Run HDBSCAN on all chunks and create clusters.
|
|
65
69
|
*/
|
|
66
70
|
recluster(options?: ClusteringOptions): Promise<ClusteringResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Incrementally assign new chunks to existing clusters using a persisted HDBSCAN model.
|
|
73
|
+
*
|
|
74
|
+
* Falls back to full recluster if:
|
|
75
|
+
* - No persisted model exists
|
|
76
|
+
* - Embedding model has changed (model invalidation)
|
|
77
|
+
* - New chunk ratio exceeds incrementalClusterThreshold
|
|
78
|
+
*
|
|
79
|
+
* @returns Result from either incremental assignment or full recluster
|
|
80
|
+
*/
|
|
81
|
+
incrementalAssign(newChunkIds: string[], options: {
|
|
82
|
+
projectId: string;
|
|
83
|
+
embeddingModel?: string;
|
|
84
|
+
incrementalThreshold?: number;
|
|
85
|
+
}): Promise<{
|
|
86
|
+
assigned: number;
|
|
87
|
+
noise: number;
|
|
88
|
+
usedFullRecluster: boolean;
|
|
89
|
+
}>;
|
|
67
90
|
/**
|
|
68
91
|
* Assign a new chunk to existing clusters based on angular distance.
|
|
69
92
|
* Returns IDs of clusters the chunk was assigned to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-manager.d.ts","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"cluster-manager.d.ts","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ import { upsertCluster, assignChunksToClusters, getAllClusters, clearAllClusters
|
|
|
7
7
|
import { angularDistance } from '../utils/angular-distance.js';
|
|
8
8
|
import { getConfig } from '../config/memory-config.js';
|
|
9
9
|
import { generateId } from '../storage/db.js';
|
|
10
|
+
import { predictLabels } from './hdbscan/incremental.js';
|
|
11
|
+
import { saveModel, loadModel } from './hdbscan-model-store.js';
|
|
10
12
|
/**
|
|
11
13
|
* Match new clusters to old clusters by Jaccard overlap, returning
|
|
12
14
|
* a map of newClusterId → matched old snapshot. Uses greedy best-match
|
|
@@ -188,6 +190,12 @@ export class ClusterManager {
|
|
|
188
190
|
}
|
|
189
191
|
}
|
|
190
192
|
const noiseCount = rawNoiseCount - reassignedNoiseIds.size;
|
|
193
|
+
// Save the HDBSCAN model for incremental assignment
|
|
194
|
+
const hdbscanModel = hdbscan.getModel();
|
|
195
|
+
if (hdbscanModel && options.projectId) {
|
|
196
|
+
const embeddingModel = options.embeddingModel ?? 'jina-small';
|
|
197
|
+
saveModel(options.projectId, embeddingModel, hdbscanModel, vectors.length);
|
|
198
|
+
}
|
|
191
199
|
return {
|
|
192
200
|
numClusters: clusterMembers.size,
|
|
193
201
|
assignedChunks: assignments.length + noiseAssignments.length,
|
|
@@ -198,6 +206,132 @@ export class ClusterManager {
|
|
|
198
206
|
durationMs: Date.now() - startTime,
|
|
199
207
|
};
|
|
200
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Incrementally assign new chunks to existing clusters using a persisted HDBSCAN model.
|
|
211
|
+
*
|
|
212
|
+
* Falls back to full recluster if:
|
|
213
|
+
* - No persisted model exists
|
|
214
|
+
* - Embedding model has changed (model invalidation)
|
|
215
|
+
* - New chunk ratio exceeds incrementalClusterThreshold
|
|
216
|
+
*
|
|
217
|
+
* @returns Result from either incremental assignment or full recluster
|
|
218
|
+
*/
|
|
219
|
+
async incrementalAssign(newChunkIds, options) {
|
|
220
|
+
const embeddingModel = options.embeddingModel ?? 'jina-small';
|
|
221
|
+
const clusterThreshold = options.incrementalThreshold ?? this.config.clusterThreshold;
|
|
222
|
+
// Try to load persisted model
|
|
223
|
+
const stored = loadModel(options.projectId, embeddingModel);
|
|
224
|
+
if (!stored) {
|
|
225
|
+
// No model or model mismatch — full recluster
|
|
226
|
+
await this.recluster({
|
|
227
|
+
projectId: options.projectId,
|
|
228
|
+
embeddingModel,
|
|
229
|
+
});
|
|
230
|
+
return { assigned: newChunkIds.length, noise: 0, usedFullRecluster: true };
|
|
231
|
+
}
|
|
232
|
+
// Check if threshold exceeded: too many new chunks since last recluster
|
|
233
|
+
const currentCount = await vectorStore.count();
|
|
234
|
+
const newSinceRecluster = currentCount - stored.chunkCount;
|
|
235
|
+
const ratio = stored.chunkCount > 0 ? newSinceRecluster / stored.chunkCount : 1;
|
|
236
|
+
if (ratio > this.config.incrementalClusterThreshold) {
|
|
237
|
+
// Too many new chunks — full recluster
|
|
238
|
+
await this.recluster({
|
|
239
|
+
projectId: options.projectId,
|
|
240
|
+
embeddingModel,
|
|
241
|
+
});
|
|
242
|
+
return { assigned: newChunkIds.length, noise: 0, usedFullRecluster: true };
|
|
243
|
+
}
|
|
244
|
+
// Get embeddings for new chunks
|
|
245
|
+
const newEmbeddings = [];
|
|
246
|
+
const validChunkIds = [];
|
|
247
|
+
for (const id of newChunkIds) {
|
|
248
|
+
const embedding = await vectorStore.get(id);
|
|
249
|
+
if (embedding) {
|
|
250
|
+
newEmbeddings.push(embedding);
|
|
251
|
+
validChunkIds.push(id);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (newEmbeddings.length === 0) {
|
|
255
|
+
return { assigned: 0, noise: 0, usedFullRecluster: false };
|
|
256
|
+
}
|
|
257
|
+
// Load all embeddings for core distance computation
|
|
258
|
+
const allVectors = await vectorStore.getAllVectors();
|
|
259
|
+
const allEmbeddings = allVectors.map((v) => v.embedding);
|
|
260
|
+
// Reconstruct a full model with current embeddings for predictLabels
|
|
261
|
+
const fullModel = {
|
|
262
|
+
...stored.model,
|
|
263
|
+
embeddings: allEmbeddings,
|
|
264
|
+
};
|
|
265
|
+
// Run incremental assignment
|
|
266
|
+
const labels = predictLabels(newEmbeddings, fullModel, this.config.minClusterSize, 'angular');
|
|
267
|
+
// Process assignments
|
|
268
|
+
const assignments = [];
|
|
269
|
+
let noiseCount = 0;
|
|
270
|
+
for (let i = 0; i < labels.length; i++) {
|
|
271
|
+
const label = labels[i];
|
|
272
|
+
if (label >= 0) {
|
|
273
|
+
// Find the cluster with this label's centroid
|
|
274
|
+
const centroid = stored.model.centroids.get(label);
|
|
275
|
+
if (centroid) {
|
|
276
|
+
const distance = angularDistance(newEmbeddings[i], centroid);
|
|
277
|
+
// Find matching cluster by centroid distance
|
|
278
|
+
const clusters = getAllClusters();
|
|
279
|
+
let bestCluster = null;
|
|
280
|
+
let bestDist = Infinity;
|
|
281
|
+
for (const cluster of clusters) {
|
|
282
|
+
if (!cluster.centroid)
|
|
283
|
+
continue;
|
|
284
|
+
const d = angularDistance(centroid, cluster.centroid);
|
|
285
|
+
if (d < bestDist) {
|
|
286
|
+
bestDist = d;
|
|
287
|
+
bestCluster = cluster;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (bestCluster && bestDist < 0.1) {
|
|
291
|
+
assignments.push({
|
|
292
|
+
chunkId: validChunkIds[i],
|
|
293
|
+
clusterId: bestCluster.id,
|
|
294
|
+
distance,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
noiseCount++;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
noiseCount++;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
noiseCount++;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Assign noise points to nearest cluster (fallback)
|
|
310
|
+
if (noiseCount > 0) {
|
|
311
|
+
for (let i = 0; i < labels.length; i++) {
|
|
312
|
+
if (labels[i] >= 0)
|
|
313
|
+
continue; // Already assigned
|
|
314
|
+
// Check if already assigned via the block above
|
|
315
|
+
if (assignments.some((a) => a.chunkId === validChunkIds[i]))
|
|
316
|
+
continue;
|
|
317
|
+
const assigned = await this.assignChunkToClusters(validChunkIds[i], newEmbeddings[i], {
|
|
318
|
+
threshold: clusterThreshold,
|
|
319
|
+
});
|
|
320
|
+
if (assigned.length > 0) {
|
|
321
|
+
noiseCount--;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (assignments.length > 0) {
|
|
326
|
+
assignChunksToClusters(assignments);
|
|
327
|
+
await this.updateCentroids();
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
assigned: assignments.length + (validChunkIds.length - noiseCount - assignments.length),
|
|
331
|
+
noise: noiseCount,
|
|
332
|
+
usedFullRecluster: false,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
201
335
|
/**
|
|
202
336
|
* Assign a new chunk to existing clusters based on angular distance.
|
|
203
337
|
* Returns IDs of clusters the chunk was assigned to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-manager.js","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cluster-manager.js","sourceRoot":"","sources":["../../src/clusters/cluster-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence layer for HDBSCAN models.
|
|
3
|
+
*
|
|
4
|
+
* Serializes/deserializes HDBSCANModel to SQLite BLOB for incremental clustering.
|
|
5
|
+
* Maps are converted to [key, value][] arrays for JSON.stringify (bare stringify produces {}).
|
|
6
|
+
* Excludes model.embeddings from the blob — too large. Load from vector store on demand.
|
|
7
|
+
*/
|
|
8
|
+
import type { HDBSCANModel } from './hdbscan/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Serialize an HDBSCANModel to a JSON blob, excluding embeddings.
|
|
11
|
+
*/
|
|
12
|
+
declare function serializeModel(model: HDBSCANModel): Buffer;
|
|
13
|
+
/**
|
|
14
|
+
* Deserialize a JSON blob back to an HDBSCANModel (embeddings will be empty).
|
|
15
|
+
*/
|
|
16
|
+
declare function deserializeModel(blob: Buffer): Omit<HDBSCANModel, 'embeddings'>;
|
|
17
|
+
/**
|
|
18
|
+
* Save an HDBSCAN model for a project.
|
|
19
|
+
*/
|
|
20
|
+
export declare function saveModel(projectId: string, embeddingModel: string, model: HDBSCANModel, chunkCount: number): void;
|
|
21
|
+
/**
|
|
22
|
+
* Load an HDBSCAN model for a project.
|
|
23
|
+
*
|
|
24
|
+
* Returns null if:
|
|
25
|
+
* - No model exists for this project
|
|
26
|
+
* - Stored embedding_model doesn't match currentEmbeddingModel (model invalidation)
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadModel(projectId: string, currentEmbeddingModel: string): {
|
|
29
|
+
model: Omit<HDBSCANModel, 'embeddings'>;
|
|
30
|
+
chunkCount: number;
|
|
31
|
+
} | null;
|
|
32
|
+
/**
|
|
33
|
+
* Delete saved model for a project.
|
|
34
|
+
*/
|
|
35
|
+
export declare function deleteModel(projectId: string): void;
|
|
36
|
+
export { serializeModel as _serializeModel, deserializeModel as _deserializeModel };
|
|
37
|
+
//# sourceMappingURL=hdbscan-model-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdbscan-model-store.d.ts","sourceRoot":"","sources":["../../src/clusters/hdbscan-model-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAcvD;;GAEG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAUnD;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAUxE;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,GACjB,IAAI,CAQN;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,qBAAqB,EAAE,MAAM,GAC5B;IAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiBxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAGnD;AAGD,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence layer for HDBSCAN models.
|
|
3
|
+
*
|
|
4
|
+
* Serializes/deserializes HDBSCANModel to SQLite BLOB for incremental clustering.
|
|
5
|
+
* Maps are converted to [key, value][] arrays for JSON.stringify (bare stringify produces {}).
|
|
6
|
+
* Excludes model.embeddings from the blob — too large. Load from vector store on demand.
|
|
7
|
+
*/
|
|
8
|
+
import { getDb } from '../storage/db.js';
|
|
9
|
+
/**
|
|
10
|
+
* Serialize an HDBSCANModel to a JSON blob, excluding embeddings.
|
|
11
|
+
*/
|
|
12
|
+
function serializeModel(model) {
|
|
13
|
+
const serialized = {
|
|
14
|
+
coreDistances: model.coreDistances,
|
|
15
|
+
labels: model.labels,
|
|
16
|
+
centroids: Array.from(model.centroids.entries()),
|
|
17
|
+
exemplars: Array.from(model.exemplars.entries()),
|
|
18
|
+
lambdaValues: model.lambdaValues,
|
|
19
|
+
clusterMaxLambda: Array.from(model.clusterMaxLambda.entries()),
|
|
20
|
+
};
|
|
21
|
+
return Buffer.from(JSON.stringify(serialized));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deserialize a JSON blob back to an HDBSCANModel (embeddings will be empty).
|
|
25
|
+
*/
|
|
26
|
+
function deserializeModel(blob) {
|
|
27
|
+
const parsed = JSON.parse(blob.toString('utf-8'));
|
|
28
|
+
return {
|
|
29
|
+
coreDistances: parsed.coreDistances,
|
|
30
|
+
labels: parsed.labels,
|
|
31
|
+
centroids: new Map(parsed.centroids),
|
|
32
|
+
exemplars: new Map(parsed.exemplars),
|
|
33
|
+
lambdaValues: parsed.lambdaValues,
|
|
34
|
+
clusterMaxLambda: new Map(parsed.clusterMaxLambda),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Save an HDBSCAN model for a project.
|
|
39
|
+
*/
|
|
40
|
+
export function saveModel(projectId, embeddingModel, model, chunkCount) {
|
|
41
|
+
const db = getDb();
|
|
42
|
+
const blob = serializeModel(model);
|
|
43
|
+
db.prepare(`INSERT OR REPLACE INTO hdbscan_models (project_id, embedding_model, model_blob, chunk_count, created_at)
|
|
44
|
+
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)`).run(projectId, embeddingModel, blob, chunkCount);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load an HDBSCAN model for a project.
|
|
48
|
+
*
|
|
49
|
+
* Returns null if:
|
|
50
|
+
* - No model exists for this project
|
|
51
|
+
* - Stored embedding_model doesn't match currentEmbeddingModel (model invalidation)
|
|
52
|
+
*/
|
|
53
|
+
export function loadModel(projectId, currentEmbeddingModel) {
|
|
54
|
+
const db = getDb();
|
|
55
|
+
const row = db
|
|
56
|
+
.prepare('SELECT model_blob, embedding_model, chunk_count FROM hdbscan_models WHERE project_id = ? AND embedding_model = ?')
|
|
57
|
+
.get(projectId, currentEmbeddingModel);
|
|
58
|
+
if (!row) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const model = deserializeModel(row.model_blob);
|
|
62
|
+
return { model, chunkCount: row.chunk_count };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Delete saved model for a project.
|
|
66
|
+
*/
|
|
67
|
+
export function deleteModel(projectId) {
|
|
68
|
+
const db = getDb();
|
|
69
|
+
db.prepare('DELETE FROM hdbscan_models WHERE project_id = ?').run(projectId);
|
|
70
|
+
}
|
|
71
|
+
// Re-export for testing
|
|
72
|
+
export { serializeModel as _serializeModel, deserializeModel as _deserializeModel };
|
|
73
|
+
//# sourceMappingURL=hdbscan-model-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdbscan-model-store.js","sourceRoot":"","sources":["../../src/clusters/hdbscan-model-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAezC;;GAEG;AACH,SAAS,cAAc,CAAC,KAAmB;IACzC,MAAM,UAAU,GAAoB;QAClC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAChD,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAChD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KAC/D,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QACpC,SAAS,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,gBAAgB,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;KACnD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,cAAsB,EACtB,KAAmB,EACnB,UAAkB;IAElB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAEnC,EAAE,CAAC,OAAO,CACR;4CACwC,CACzC,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,qBAA6B;IAE7B,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN,kHAAkH,CACnH;SACA,GAAG,CAAC,SAAS,EAAE,qBAAqB,CAE1B,CAAC;IAEd,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED,wBAAwB;AACxB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,CAAC"}
|
package/dist/config/loader.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface ExternalConfig {
|
|
|
14
14
|
clustering?: {
|
|
15
15
|
threshold?: number;
|
|
16
16
|
minClusterSize?: number;
|
|
17
|
+
/** Ratio of new chunks (vs total) that triggers a full recluster. Default: 0.3. */
|
|
18
|
+
incrementalThreshold?: number;
|
|
17
19
|
};
|
|
18
20
|
traversal?: {
|
|
19
21
|
maxDepth?: number;
|
|
@@ -29,6 +31,8 @@ export interface ExternalConfig {
|
|
|
29
31
|
llm?: {
|
|
30
32
|
clusterRefreshModel?: string;
|
|
31
33
|
refreshRateLimitPerMin?: number;
|
|
34
|
+
/** Enable LLM-based cluster labelling. Requires Anthropic API key. Default: true. */
|
|
35
|
+
enableLabelling?: boolean;
|
|
32
36
|
};
|
|
33
37
|
encryption?: {
|
|
34
38
|
enabled?: boolean;
|
|
@@ -45,6 +49,8 @@ export interface ExternalConfig {
|
|
|
45
49
|
embedding?: {
|
|
46
50
|
/** Device for embedding inference: 'auto' | 'coreml' | 'cuda' | 'cpu' | 'wasm'. Default: 'auto'. */
|
|
47
51
|
device?: string;
|
|
52
|
+
/** Embedding model ID from model registry. Default: 'jina-small'. */
|
|
53
|
+
model?: string;
|
|
48
54
|
};
|
|
49
55
|
maintenance?: {
|
|
50
56
|
/** Hour of day (0-23) to run reclustering. Default: 2. */
|
|
@@ -53,6 +59,8 @@ export interface ExternalConfig {
|
|
|
53
59
|
retrieval?: {
|
|
54
60
|
/** MMR lambda: 0 = pure diversity, 1 = pure relevance. Default: 0.7 */
|
|
55
61
|
mmrLambda?: number;
|
|
62
|
+
/** Feedback weight for cluster expansion scoring. Default: 0.1 */
|
|
63
|
+
feedbackWeight?: number;
|
|
56
64
|
};
|
|
57
65
|
recency?: {
|
|
58
66
|
/** Amplitude of the time-decay boost (multiplied by exp decay). Default: 0.3 */
|