@aionlabsai/aion 0.2.11 → 0.2.13
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/dist/cli/commands/eval.d.ts +3 -0
- package/dist/cli/commands/eval.d.ts.map +1 -0
- package/dist/cli/commands/eval.js +160 -0
- package/dist/cli/commands/eval.js.map +1 -0
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +79 -26
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/infra/bm25.d.ts +13 -0
- package/dist/infra/bm25.d.ts.map +1 -1
- package/dist/infra/bm25.js +18 -0
- package/dist/infra/bm25.js.map +1 -1
- package/dist/infra/embeddings.d.ts +4 -0
- package/dist/infra/embeddings.d.ts.map +1 -1
- package/dist/infra/embeddings.js +80 -7
- package/dist/infra/embeddings.js.map +1 -1
- package/dist/infra/knowledge.js +3 -3
- package/dist/infra/knowledge.js.map +1 -1
- package/dist/infra/reranker.d.ts +21 -0
- package/dist/infra/reranker.d.ts.map +1 -0
- package/dist/infra/reranker.js +68 -0
- package/dist/infra/reranker.js.map +1 -0
- package/dist/infra/vector-store.d.ts +37 -0
- package/dist/infra/vector-store.d.ts.map +1 -0
- package/dist/infra/vector-store.js +126 -0
- package/dist/infra/vector-store.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4JnD"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { embedTextRemote, embedText } from '../../infra/embeddings.js';
|
|
6
|
+
import { createVectorStore } from '../../infra/vector-store.js';
|
|
7
|
+
import { rerankWithLLM, rerankLocal } from '../../infra/reranker.js';
|
|
8
|
+
import { BM25Index, rrfScore } from '../../infra/bm25.js';
|
|
9
|
+
function loadGoldenSet(path) {
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function scaffoldGoldenSet(path) {
|
|
18
|
+
mkdirSync(join(path, '..'), { recursive: true });
|
|
19
|
+
const example = {
|
|
20
|
+
queries: [
|
|
21
|
+
{ query: 'embedding vector similarity', expected: ['src/infra/embeddings.ts'], note: 'example — edit expected files' },
|
|
22
|
+
{ query: 'BM25 ranking score', expected: ['src/infra/bm25.ts'] },
|
|
23
|
+
{ query: 'audit pipeline scanner agents', expected: ['src/core/pipelines/audit-pipeline.ts'] },
|
|
24
|
+
],
|
|
25
|
+
};
|
|
26
|
+
writeFileSync(path, JSON.stringify(example, null, 2), 'utf8');
|
|
27
|
+
}
|
|
28
|
+
export function registerEval(program) {
|
|
29
|
+
const evalCmd = program
|
|
30
|
+
.command('eval')
|
|
31
|
+
.description('Evaluate retrieval quality and agent output quality');
|
|
32
|
+
// ── aion eval retrieval ───────────────────────────────────────────────────
|
|
33
|
+
evalCmd
|
|
34
|
+
.command('retrieval')
|
|
35
|
+
.description('Measure recall@3, recall@5, MRR of memory search against a golden set')
|
|
36
|
+
.option('--rerank <mode>', 'none | local | llm — apply re-ranking after retrieval (default: none)', 'none')
|
|
37
|
+
.option('--top-k <n>', 'candidates to retrieve before re-ranking', '10')
|
|
38
|
+
.option('--scaffold', 'create example golden set at .ai-memory/eval/retrieval.json and exit')
|
|
39
|
+
.option('--json', 'output results as JSON')
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
const cwd = process.cwd();
|
|
42
|
+
const goldenPath = join(cwd, '.ai-memory', 'eval', 'retrieval.json');
|
|
43
|
+
if (options.scaffold) {
|
|
44
|
+
scaffoldGoldenSet(goldenPath);
|
|
45
|
+
console.log(chalk.green(`Created: ${goldenPath}`));
|
|
46
|
+
console.log(chalk.gray('Edit the file with your project-specific queries and expected files, then run `aion eval retrieval`.'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (!existsSync(goldenPath)) {
|
|
50
|
+
console.error(chalk.yellow(`No golden set found at ${goldenPath}`));
|
|
51
|
+
console.error(chalk.gray('Run `aion eval retrieval --scaffold` to create an example.'));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
const golden = loadGoldenSet(goldenPath);
|
|
55
|
+
if (!golden || golden.queries.length === 0) {
|
|
56
|
+
console.error(chalk.red('Golden set is empty or invalid.'));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const topK = Math.max(5, parseInt(options.topK, 10) || 10);
|
|
60
|
+
const spinner = ora(`Evaluating ${golden.queries.length} queries (rerank: ${options.rerank})...`).start();
|
|
61
|
+
const vectorStore = createVectorStore(cwd);
|
|
62
|
+
if (vectorStore.size() === 0) {
|
|
63
|
+
spinner.fail(chalk.yellow('No vector index. Run `aion memory build` first.'));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const results = [];
|
|
67
|
+
for (const { query, expected } of golden.queries) {
|
|
68
|
+
// 1. Embed query
|
|
69
|
+
const remote = await embedTextRemote(query);
|
|
70
|
+
const queryVec = remote ? remote : Array.from(embedText(query, 500));
|
|
71
|
+
// 2. Vector search → top-K candidates
|
|
72
|
+
const vecResults = await vectorStore.search(queryVec, topK);
|
|
73
|
+
// 3. BM25 over the same candidates (in-memory)
|
|
74
|
+
const bm25 = new BM25Index();
|
|
75
|
+
for (const r of vecResults) {
|
|
76
|
+
bm25.add(r.id, String(r.payload['preview'] ?? r.id));
|
|
77
|
+
}
|
|
78
|
+
const bm25Results = bm25.score(query);
|
|
79
|
+
// 4. RRF fusion
|
|
80
|
+
const fused = rrfScore(vecResults.map((r, i) => ({ id: r.id, score: vecResults.length - i })), bm25Results);
|
|
81
|
+
// 5. Optional re-ranking
|
|
82
|
+
let finalIds;
|
|
83
|
+
if (options.rerank === 'llm') {
|
|
84
|
+
const candidates = fused.slice(0, topK).map((r) => {
|
|
85
|
+
const hit = vecResults.find((v) => v.id === r.id);
|
|
86
|
+
return { id: r.id, content: String(hit?.payload['preview'] ?? r.id) };
|
|
87
|
+
});
|
|
88
|
+
const reranked = await rerankWithLLM(query, candidates, 5);
|
|
89
|
+
finalIds = reranked.map((r) => r.id);
|
|
90
|
+
}
|
|
91
|
+
else if (options.rerank === 'local') {
|
|
92
|
+
const candidates = fused.slice(0, topK).map((r) => {
|
|
93
|
+
const hit = vecResults.find((v) => v.id === r.id);
|
|
94
|
+
return { id: r.id, content: String(hit?.payload['preview'] ?? r.id) };
|
|
95
|
+
});
|
|
96
|
+
finalIds = rerankLocal(query, candidates, 5).map((r) => r.id);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
finalIds = fused.slice(0, 5).map((r) => r.id);
|
|
100
|
+
}
|
|
101
|
+
// 6. Score: match by file path substring
|
|
102
|
+
const matchesExpected = (id) => expected.some((exp) => id.includes(exp) || exp.includes(id.split(':')[0] ?? ''));
|
|
103
|
+
const rankOfFirst = finalIds.findIndex(matchesExpected);
|
|
104
|
+
results.push({
|
|
105
|
+
query,
|
|
106
|
+
expected,
|
|
107
|
+
retrieved: finalIds,
|
|
108
|
+
hitAt3: rankOfFirst >= 0 && rankOfFirst < 3,
|
|
109
|
+
hitAt5: rankOfFirst >= 0 && rankOfFirst < 5,
|
|
110
|
+
rr: rankOfFirst >= 0 ? 1 / (rankOfFirst + 1) : 0,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
spinner.stop();
|
|
114
|
+
const n = results.length;
|
|
115
|
+
const recall3 = results.filter((r) => r.hitAt3).length / n;
|
|
116
|
+
const recall5 = results.filter((r) => r.hitAt5).length / n;
|
|
117
|
+
const mrr = results.reduce((s, r) => s + r.rr, 0) / n;
|
|
118
|
+
const { embeddingProvider } = await import('../../infra/embeddings.js');
|
|
119
|
+
const { vectorStoreBackend } = await import('../../infra/vector-store.js');
|
|
120
|
+
const report = {
|
|
121
|
+
provider: embeddingProvider(),
|
|
122
|
+
backend: vectorStoreBackend(),
|
|
123
|
+
rerankMode: options.rerank,
|
|
124
|
+
queries: n,
|
|
125
|
+
recall3: Math.round(recall3 * 1000) / 1000,
|
|
126
|
+
recall5: Math.round(recall5 * 1000) / 1000,
|
|
127
|
+
mrr: Math.round(mrr * 1000) / 1000,
|
|
128
|
+
results,
|
|
129
|
+
ranAt: new Date().toISOString(),
|
|
130
|
+
};
|
|
131
|
+
if (options.json) {
|
|
132
|
+
console.log(JSON.stringify(report, null, 2));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Human-readable output
|
|
136
|
+
console.log(chalk.bold(`\nRetrieval Evaluation — ${n} queries\n`));
|
|
137
|
+
console.log(` Provider: ${chalk.cyan(report.provider)}`);
|
|
138
|
+
console.log(` Backend: ${chalk.cyan(report.backend)}`);
|
|
139
|
+
console.log(` Re-rank: ${chalk.cyan(options.rerank)}\n`);
|
|
140
|
+
const pct = (v) => chalk.bold(`${(v * 100).toFixed(1)}%`);
|
|
141
|
+
console.log(` recall@3 ${pct(recall3)}`);
|
|
142
|
+
console.log(` recall@5 ${pct(recall5)}`);
|
|
143
|
+
console.log(` MRR ${pct(mrr)}\n`);
|
|
144
|
+
for (const r of results) {
|
|
145
|
+
const status = r.hitAt3 ? chalk.green('✓') : r.hitAt5 ? chalk.yellow('~') : chalk.red('✗');
|
|
146
|
+
console.log(` ${status} ${chalk.gray(r.query.slice(0, 60))}`);
|
|
147
|
+
if (!r.hitAt5) {
|
|
148
|
+
console.log(chalk.gray(` expected: ${r.expected.join(', ')}`));
|
|
149
|
+
console.log(chalk.gray(` got: ${r.retrieved.slice(0, 3).join(', ')}`));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Save report
|
|
153
|
+
const outDir = join(cwd, '.ai-runtime', 'eval');
|
|
154
|
+
mkdirSync(outDir, { recursive: true });
|
|
155
|
+
const outPath = join(outDir, `retrieval-${Date.now()}.json`);
|
|
156
|
+
writeFileSync(outPath, JSON.stringify(report, null, 2), 'utf8');
|
|
157
|
+
console.log(chalk.gray(`\n Report saved: ${outPath}`));
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuPrD"}
|
|
@@ -4,6 +4,8 @@ import { writeFileSync, mkdirSync } from 'fs';
|
|
|
4
4
|
import { join, relative } from 'path';
|
|
5
5
|
import { KnowledgeStore } from '../../infra/knowledge.js';
|
|
6
6
|
import { chunkFile } from '../../infra/chunker.js';
|
|
7
|
+
import { embedBatch, embeddingProvider } from '../../infra/embeddings.js';
|
|
8
|
+
import { createVectorStore, vectorStoreBackend } from '../../infra/vector-store.js';
|
|
7
9
|
import { buildDepGraph, formatDepReport } from '../../infra/dep-graph.js';
|
|
8
10
|
import { buildRepoIndex, writeRepoIndex } from '../../infra/repo-index.js';
|
|
9
11
|
import { formatRepoQuery, loadRepoIndex, queryRepoIndex } from '../../infra/repo-query.js';
|
|
@@ -21,38 +23,60 @@ export function registerMemory(program) {
|
|
|
21
23
|
.action(async (options) => {
|
|
22
24
|
const cwd = process.cwd();
|
|
23
25
|
const store = new KnowledgeStore(cwd);
|
|
24
|
-
const
|
|
26
|
+
const provider = embeddingProvider();
|
|
27
|
+
const backend = vectorStoreBackend();
|
|
28
|
+
const spinner = ora(`Building index [${provider}] → ${backend}`).start();
|
|
25
29
|
try {
|
|
26
|
-
// 1. Index .ai-memory/ entries
|
|
30
|
+
// 1. Index .ai-memory/ markdown entries
|
|
27
31
|
const knowledgeCount = await store.embeddings.buildIndex([
|
|
28
32
|
'architecture', 'bugs', 'features', 'decisions', 'patterns',
|
|
29
33
|
]);
|
|
30
34
|
let srcCount = 0;
|
|
31
35
|
if (options.src !== false) {
|
|
32
|
-
// 2.
|
|
36
|
+
// 2. Chunk source files and embed into VectorStore (separate from .ai-memory/)
|
|
33
37
|
const srcTarget = options.srcDir ?? '.';
|
|
34
38
|
const stats = collectAuditStats(cwd, srcTarget);
|
|
35
39
|
const files = stats.auditFiles.map((f) => join(cwd, f));
|
|
36
40
|
spinner.text = `Chunking ${files.length} source files...`;
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
// Collect all chunks first for batch embedding
|
|
42
|
+
const allChunks = [];
|
|
39
43
|
for (const file of files) {
|
|
40
44
|
const chunks = await chunkFile(file, 1200);
|
|
45
|
+
const relPath = relative(cwd, file);
|
|
41
46
|
for (const chunk of chunks) {
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
const outPath = join(srcMemoryDir, `src__${slug}.md`);
|
|
46
|
-
writeFileSync(outPath, `# ${chunk.name} (${relPath}:${chunk.startLine})\n\n${content}\n`, 'utf8');
|
|
47
|
-
srcCount++;
|
|
47
|
+
const id = `${relPath}:${chunk.startLine}:${chunk.name}`;
|
|
48
|
+
const content = `// ${relPath}:${chunk.startLine}-${chunk.endLine} [${chunk.type}: ${chunk.name}]\n${chunk.text}`;
|
|
49
|
+
allChunks.push({ id, content, file: relPath, name: chunk.name, startLine: chunk.startLine, endLine: chunk.endLine });
|
|
48
50
|
}
|
|
49
|
-
spinner.text = `Chunked ${srcCount} chunks from ${files.indexOf(file) + 1}/${files.length} files...`;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
srcCount = allChunks.length;
|
|
53
|
+
spinner.text = `Embedding ${srcCount} chunks via ${provider}...`;
|
|
54
|
+
// Batch embed all chunks (efficient: one API call per 128 chunks for Voyage)
|
|
55
|
+
const vectorStore = createVectorStore(cwd);
|
|
56
|
+
const texts = allChunks.map((c) => c.content);
|
|
57
|
+
const vectors = await embedBatch(texts);
|
|
58
|
+
spinner.text = `Saving ${srcCount} chunks to ${backend}...`;
|
|
59
|
+
for (let i = 0; i < allChunks.length; i++) {
|
|
60
|
+
const c = allChunks[i];
|
|
61
|
+
await vectorStore.upsert(c.id, vectors[i], {
|
|
62
|
+
file: c.file, name: c.name, startLine: c.startLine, endLine: c.endLine,
|
|
63
|
+
preview: c.content.slice(0, 200),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Also write chunks to .ai-memory/architecture/ for backward compat with EmbeddingStore
|
|
67
|
+
const srcMemoryDir = join(cwd, '.ai-memory', 'architecture');
|
|
68
|
+
mkdirSync(srcMemoryDir, { recursive: true });
|
|
69
|
+
for (const chunk of allChunks) {
|
|
70
|
+
const slug = `${chunk.file.replace(/[/\\]/g, '__')}__${chunk.name}`.replace(/[^a-z0-9_-]/gi, '_').slice(0, 80);
|
|
71
|
+
const outPath = join(srcMemoryDir, `src__${slug}.md`);
|
|
72
|
+
writeFileSync(outPath, `# ${chunk.name} (${chunk.file}:${chunk.startLine})\n\n\`\`\`\n${chunk.content}\n\`\`\`\n`, 'utf8');
|
|
73
|
+
}
|
|
52
74
|
await store.embeddings.buildIndex(['architecture']);
|
|
53
75
|
}
|
|
54
76
|
spinner.succeed(chalk.green(`Indexed ${knowledgeCount} knowledge entries + ${srcCount} source chunks`));
|
|
55
|
-
console.log(chalk.gray(
|
|
77
|
+
console.log(chalk.gray(` Provider: ${provider}`));
|
|
78
|
+
console.log(chalk.gray(` Backend: ${backend}`));
|
|
79
|
+
console.log(chalk.gray(' Run `aion memory search "<query>"` to test retrieval.'));
|
|
56
80
|
}
|
|
57
81
|
catch (err) {
|
|
58
82
|
spinner.fail(chalk.red('Build failed: ' + String(err)));
|
|
@@ -62,28 +86,57 @@ export function registerMemory(program) {
|
|
|
62
86
|
// ── ai memory search ──────────────────────────────────────────────────────
|
|
63
87
|
memory
|
|
64
88
|
.command('search <query>')
|
|
65
|
-
.description('Semantic search over
|
|
89
|
+
.description('Semantic search over source code chunks and .ai-memory knowledge base')
|
|
66
90
|
.option('-k, --top-k <n>', 'number of results', '5')
|
|
91
|
+
.option('--knowledge', 'search .ai-memory/ markdown only (skip source code chunks)')
|
|
67
92
|
.action(async (query, options) => {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
process.exit(1);
|
|
72
|
-
}
|
|
93
|
+
const cwd = process.cwd();
|
|
94
|
+
const store = new KnowledgeStore(cwd);
|
|
95
|
+
const topK = Math.max(1, parseInt(options.topK, 10) || 5);
|
|
73
96
|
const spinner = ora('Searching...').start();
|
|
74
97
|
try {
|
|
75
|
-
|
|
76
|
-
|
|
98
|
+
if (options.knowledge) {
|
|
99
|
+
// Knowledge-only: search .ai-memory/ markdown entries
|
|
100
|
+
if (!store.embeddings.hasIndex()) {
|
|
101
|
+
spinner.fail(chalk.yellow('No embedding index. Run `aion memory build` first.'));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const results = await store.embeddings.query(query, topK);
|
|
105
|
+
spinner.stop();
|
|
106
|
+
if (results.length === 0) {
|
|
107
|
+
console.log(chalk.gray('No results.'));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
console.log(chalk.bold(`\nTop ${results.length} results for: "${query}"\n`));
|
|
111
|
+
for (const r of results) {
|
|
112
|
+
console.log(`${chalk.cyan(`${(r.score * 100).toFixed(1)}%`)} ${chalk.bold(r.category + '/' + r.filename)}`);
|
|
113
|
+
console.log(chalk.gray(' ' + r.text.split('\n')[0]?.slice(0, 100)));
|
|
114
|
+
console.log();
|
|
115
|
+
}
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Default: search VectorStore (source code chunks) using real embeddings
|
|
119
|
+
const { embedTextRemote, embedText } = await import('../../infra/embeddings.js');
|
|
120
|
+
const { createVectorStore: cvs } = await import('../../infra/vector-store.js');
|
|
121
|
+
const vectorStore = cvs(cwd);
|
|
122
|
+
if (vectorStore.size() === 0) {
|
|
123
|
+
spinner.fail(chalk.yellow('No source code index. Run `aion memory build` first.'));
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const remote = await embedTextRemote(query);
|
|
127
|
+
const queryVec = remote ? remote : Array.from(embedText(query, 500));
|
|
128
|
+
const results = await vectorStore.search(queryVec, topK);
|
|
77
129
|
spinner.stop();
|
|
78
130
|
if (results.length === 0) {
|
|
79
|
-
console.log(chalk.gray('No results
|
|
131
|
+
console.log(chalk.gray('No results.'));
|
|
80
132
|
return;
|
|
81
133
|
}
|
|
82
|
-
console.log(chalk.bold(`\nTop ${results.length}
|
|
134
|
+
console.log(chalk.bold(`\nTop ${results.length} source chunks for: "${query}"\n`));
|
|
83
135
|
for (const r of results) {
|
|
84
136
|
const score = chalk.cyan(`${(r.score * 100).toFixed(1)}%`);
|
|
85
|
-
|
|
86
|
-
console.log(chalk.
|
|
137
|
+
const loc = `${r.payload['file']}:${r.payload['startLine']}`;
|
|
138
|
+
console.log(`${score} ${chalk.bold(String(r.payload['name']))} ${chalk.gray(loc)}`);
|
|
139
|
+
console.log(chalk.gray(' ' + String(r.payload['preview'] ?? '').split('\n')[1]?.slice(0, 100)));
|
|
87
140
|
console.log();
|
|
88
141
|
}
|
|
89
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/cli/commands/memory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/cli/commands/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,7 @@ import { registerSearch } from './cli/commands/search.js';
|
|
|
25
25
|
import { registerTree } from './cli/commands/tree.js';
|
|
26
26
|
import { registerNext } from './cli/commands/next.js';
|
|
27
27
|
import { registerCi } from './cli/commands/ci.js';
|
|
28
|
+
import { registerEval } from './cli/commands/eval.js';
|
|
28
29
|
import { runNaturalLanguage } from './cli/interactive.js';
|
|
29
30
|
import { runMenu } from './cli/menu.js';
|
|
30
31
|
runMigrations();
|
|
@@ -84,6 +85,7 @@ registerSearch(program);
|
|
|
84
85
|
registerTree(program);
|
|
85
86
|
registerNext(program);
|
|
86
87
|
registerCi(program);
|
|
88
|
+
registerEval(program);
|
|
87
89
|
// Explicit menu command
|
|
88
90
|
program
|
|
89
91
|
.command('menu')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAkB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,aAAa,EAAE,CAAC;AAChB,MAAM,cAAc,EAAE,CAAC;AAEvB,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,MAAM,CAAC,kBAAkB,EAAE,mDAAmD,CAAC;KAC/E,QAAQ,CAAC,cAAc,EAAE,0DAA0D,CAAC;KACpF,MAAM,CAAC,KAAK,EAAE,YAAsB,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAsB,CAAC;IAChD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,mEAAmE;QACnE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAsB,CAAC;IACpD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAkB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,aAAa,EAAE,CAAC;AAChB,MAAM,cAAc,EAAE,CAAC;AAEvB,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,MAAM,CAAC,kBAAkB,EAAE,mDAAmD,CAAC;KAC/E,QAAQ,CAAC,cAAc,EAAE,0DAA0D,CAAC;KACpF,MAAM,CAAC,KAAK,EAAE,YAAsB,EAAE,EAAE;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAsB,CAAC;IAChD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,mEAAmE;QACnE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAsB,CAAC;IACpD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,YAAY,CAAC,OAAO,CAAC,CAAC;AAEtB,wBAAwB;AACxB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/infra/bm25.d.ts
CHANGED
|
@@ -27,4 +27,17 @@ export declare function hybridScore(bm25Scores: Array<{
|
|
|
27
27
|
id: string;
|
|
28
28
|
score: number;
|
|
29
29
|
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Reciprocal Rank Fusion — more robust than weighted sum.
|
|
32
|
+
* Works regardless of score scale differences between BM25 and vector scores.
|
|
33
|
+
* Each result at rank i contributes 1/(k+i+1) to its final score.
|
|
34
|
+
* k=60 is the standard constant from the original RRF paper (Cormack 2009).
|
|
35
|
+
*/
|
|
36
|
+
export declare function rrfScore(...rankings: Array<Array<{
|
|
37
|
+
id: string;
|
|
38
|
+
score: number;
|
|
39
|
+
}>>): Array<{
|
|
40
|
+
id: string;
|
|
41
|
+
score: number;
|
|
42
|
+
}>;
|
|
30
43
|
//# sourceMappingURL=bm25.d.ts.map
|
package/dist/infra/bm25.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/infra/bm25.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAK;IAEnB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAcnC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAoB3D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,YAAY,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,SAAM,GACV,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBtC"}
|
|
1
|
+
{"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/infra/bm25.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,MAAM,CAAK;IAEnB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAcnC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAoB3D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,YAAY,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAClD,KAAK,SAAM,GACV,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBtC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,GAAG,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,GACvD,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAWtC"}
|
package/dist/infra/bm25.js
CHANGED
|
@@ -66,4 +66,22 @@ export function hybridScore(bm25Scores, vectorScores, alpha = 0.5) {
|
|
|
66
66
|
}
|
|
67
67
|
return combined.sort((a, b) => b.score - a.score);
|
|
68
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Reciprocal Rank Fusion — more robust than weighted sum.
|
|
71
|
+
* Works regardless of score scale differences between BM25 and vector scores.
|
|
72
|
+
* Each result at rank i contributes 1/(k+i+1) to its final score.
|
|
73
|
+
* k=60 is the standard constant from the original RRF paper (Cormack 2009).
|
|
74
|
+
*/
|
|
75
|
+
export function rrfScore(...rankings) {
|
|
76
|
+
const K = 60;
|
|
77
|
+
const scores = new Map();
|
|
78
|
+
for (const ranking of rankings) {
|
|
79
|
+
ranking.forEach((r, i) => {
|
|
80
|
+
scores.set(r.id, (scores.get(r.id) ?? 0) + 1 / (K + i + 1));
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return [...scores.entries()]
|
|
84
|
+
.map(([id, score]) => ({ id, score }))
|
|
85
|
+
.sort((a, b) => b.score - a.score);
|
|
86
|
+
}
|
|
69
87
|
//# sourceMappingURL=bm25.js.map
|
package/dist/infra/bm25.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../src/infra/bm25.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../src/infra/bm25.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare function embedText(text: string, maxChars: number): Float32Array;
|
|
2
|
+
export declare function embeddingProvider(): string;
|
|
3
|
+
export declare function embedTextRemote(text: string): Promise<number[] | null>;
|
|
4
|
+
export declare function embedBatch(texts: string[]): Promise<number[][]>;
|
|
2
5
|
export declare function cosineSimilarity(a: Float32Array, b: Float32Array): number;
|
|
3
6
|
export interface EmbeddedEntry {
|
|
4
7
|
category: string;
|
|
@@ -18,4 +21,5 @@ export declare class EmbeddingStore {
|
|
|
18
21
|
hasIndex(): boolean;
|
|
19
22
|
query(queryText: string, topK?: number): Promise<EmbeddedEntry[]>;
|
|
20
23
|
}
|
|
24
|
+
export declare function stringToUUID(str: string): string;
|
|
21
25
|
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/infra/embeddings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/infra/embeddings.ts"],"names":[],"mappings":"AAgBA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAqBtE;AAID,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAGD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAG5E;AAGD,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAIrE;AAsCD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAUzE;AAID,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AASD,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,aAAa,EAAE,MAAM;IAIlD,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,SAAS;IAIX,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBjG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBvD,QAAQ,IAAI,OAAO;IAIb,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAiCnE;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhD"}
|
package/dist/infra/embeddings.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
+
import { createHash } from 'crypto';
|
|
3
4
|
const VECTOR_DIMENSIONS = 384;
|
|
4
5
|
function hashToken(token) {
|
|
5
6
|
let hash = 2166136261;
|
|
@@ -9,6 +10,7 @@ function hashToken(token) {
|
|
|
9
10
|
}
|
|
10
11
|
return hash >>> 0;
|
|
11
12
|
}
|
|
13
|
+
// Local hash-based embedding — deterministic, zero cost, not semantic
|
|
12
14
|
export function embedText(text, maxChars) {
|
|
13
15
|
const vector = new Float32Array(VECTOR_DIMENSIONS);
|
|
14
16
|
const tokens = text
|
|
@@ -31,10 +33,66 @@ export function embedText(text, maxChars) {
|
|
|
31
33
|
vector[i] *= scale;
|
|
32
34
|
return vector;
|
|
33
35
|
}
|
|
36
|
+
// ── Real Embedding API ────────────────────────────────────────────────────────
|
|
37
|
+
export function embeddingProvider() {
|
|
38
|
+
if (process.env.VOYAGE_API_KEY)
|
|
39
|
+
return 'voyage-code-3 (1024d)';
|
|
40
|
+
if (process.env.OPENAI_API_KEY)
|
|
41
|
+
return 'text-embedding-3-small (1536d)';
|
|
42
|
+
return 'hash-384d (local, no API key)';
|
|
43
|
+
}
|
|
44
|
+
// Single text — returns null if no API key configured
|
|
45
|
+
export async function embedTextRemote(text) {
|
|
46
|
+
const batch = await embedBatch([text]);
|
|
47
|
+
return batch[0] ?? null;
|
|
48
|
+
}
|
|
49
|
+
// Batch embed — falls back to local hash when no API key
|
|
50
|
+
export async function embedBatch(texts) {
|
|
51
|
+
if (process.env.VOYAGE_API_KEY)
|
|
52
|
+
return callVoyage(texts);
|
|
53
|
+
if (process.env.OPENAI_API_KEY)
|
|
54
|
+
return callOpenAI(texts);
|
|
55
|
+
return texts.map((t) => Array.from(embedText(t, 2000)));
|
|
56
|
+
}
|
|
57
|
+
async function callVoyage(texts) {
|
|
58
|
+
const results = [];
|
|
59
|
+
// Voyage accepts up to 128 inputs per request
|
|
60
|
+
for (let i = 0; i < texts.length; i += 128) {
|
|
61
|
+
const batch = texts.slice(i, i + 128);
|
|
62
|
+
const res = await fetch('https://api.voyageai.com/v1/embeddings', {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.VOYAGE_API_KEY}` },
|
|
65
|
+
body: JSON.stringify({ input: batch, model: 'voyage-code-3' }),
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok)
|
|
68
|
+
throw new Error(`Voyage API ${res.status}: ${await res.text()}`);
|
|
69
|
+
const json = await res.json();
|
|
70
|
+
results.push(...json.data.map((d) => d.embedding));
|
|
71
|
+
}
|
|
72
|
+
return results;
|
|
73
|
+
}
|
|
74
|
+
async function callOpenAI(texts) {
|
|
75
|
+
const results = [];
|
|
76
|
+
// OpenAI accepts up to 100 inputs per request
|
|
77
|
+
for (let i = 0; i < texts.length; i += 100) {
|
|
78
|
+
const batch = texts.slice(i, i + 100);
|
|
79
|
+
const res = await fetch('https://api.openai.com/v1/embeddings', {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
|
|
82
|
+
body: JSON.stringify({ input: batch, model: 'text-embedding-3-small' }),
|
|
83
|
+
});
|
|
84
|
+
if (!res.ok)
|
|
85
|
+
throw new Error(`OpenAI API ${res.status}: ${await res.text()}`);
|
|
86
|
+
const json = await res.json();
|
|
87
|
+
results.push(...json.data.map((d) => d.embedding));
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
// ── Similarity ────────────────────────────────────────────────────────────────
|
|
34
92
|
export function cosineSimilarity(a, b) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let normB = 0;
|
|
93
|
+
if (a.length !== b.length)
|
|
94
|
+
return 0;
|
|
95
|
+
let dot = 0, normA = 0, normB = 0;
|
|
38
96
|
for (let i = 0; i < a.length; i++) {
|
|
39
97
|
dot += a[i] * b[i];
|
|
40
98
|
normA += a[i] * a[i];
|
|
@@ -67,12 +125,21 @@ export class EmbeddingStore {
|
|
|
67
125
|
writeFileSync(this.cacheFile(category, filename), JSON.stringify(cache), 'utf8');
|
|
68
126
|
}
|
|
69
127
|
async embedFile(category, filename, text, mtime) {
|
|
128
|
+
const provider = embeddingProvider();
|
|
70
129
|
const cached = this.loadCache(category, filename);
|
|
71
|
-
|
|
130
|
+
// Cache hit: same mtime AND same provider (dimension may differ between providers)
|
|
131
|
+
if (cached && cached.mtime === mtime && cached.provider === provider) {
|
|
72
132
|
return new Float32Array(cached.vector);
|
|
73
133
|
}
|
|
74
|
-
|
|
75
|
-
|
|
134
|
+
let vector;
|
|
135
|
+
const remote = await embedTextRemote(text.slice(0, 4000));
|
|
136
|
+
if (remote) {
|
|
137
|
+
vector = remote;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
vector = Array.from(embedText(text, 2000));
|
|
141
|
+
}
|
|
142
|
+
this.saveCache(category, filename, { vector, mtime, text: text.slice(0, 500), provider });
|
|
76
143
|
return new Float32Array(vector);
|
|
77
144
|
}
|
|
78
145
|
async buildIndex(categories) {
|
|
@@ -97,7 +164,8 @@ export class EmbeddingStore {
|
|
|
97
164
|
return existsSync(this.indexDir);
|
|
98
165
|
}
|
|
99
166
|
async query(queryText, topK = 5) {
|
|
100
|
-
const
|
|
167
|
+
const remote = await embedTextRemote(queryText);
|
|
168
|
+
const queryVec = remote ? new Float32Array(remote) : embedText(queryText, 500);
|
|
101
169
|
const results = [];
|
|
102
170
|
if (!existsSync(this.indexDir))
|
|
103
171
|
return results;
|
|
@@ -125,4 +193,9 @@ export class EmbeddingStore {
|
|
|
125
193
|
.slice(0, topK);
|
|
126
194
|
}
|
|
127
195
|
}
|
|
196
|
+
// ── Deterministic UUID from string (for vector store IDs) ────────────────────
|
|
197
|
+
export function stringToUUID(str) {
|
|
198
|
+
const h = createHash('sha256').update(str).digest('hex');
|
|
199
|
+
return `${h.slice(0, 8)}-${h.slice(8, 12)}-4${h.slice(13, 16)}-${h.slice(16, 20)}-${h.slice(20, 32)}`;
|
|
200
|
+
}
|
|
128
201
|
//# sourceMappingURL=embeddings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/infra/embeddings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/infra/embeddings.ts"],"names":[],"mappings":"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"}
|
package/dist/infra/knowledge.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from 'path';
|
|
2
2
|
import { mkdirSync, readdirSync, readFileSync, writeFileSync, existsSync } from 'fs';
|
|
3
3
|
import { EmbeddingStore } from './embeddings.js';
|
|
4
|
-
import { BM25Index,
|
|
4
|
+
import { BM25Index, rrfScore } from './bm25.js';
|
|
5
5
|
const CATEGORIES = [
|
|
6
6
|
'architecture',
|
|
7
7
|
'bugs',
|
|
@@ -108,10 +108,10 @@ export class KnowledgeStore {
|
|
|
108
108
|
.filter(Boolean)
|
|
109
109
|
.join('\n\n');
|
|
110
110
|
}
|
|
111
|
-
// Hybrid: BM25 + vector
|
|
111
|
+
// Hybrid: BM25 + vector via Reciprocal Rank Fusion (no alpha tuning needed)
|
|
112
112
|
const vectorResults = await this.embeddings.query(query, topK * 2);
|
|
113
113
|
const vecScores = vectorResults.map((r) => ({ id: `${r.category}/${r.filename}`, score: r.score }));
|
|
114
|
-
const hybrid =
|
|
114
|
+
const hybrid = rrfScore(bm25Results, vecScores).slice(0, topK);
|
|
115
115
|
return hybrid
|
|
116
116
|
.map(({ id }) => {
|
|
117
117
|
const e = allEntries.find((x) => `${x.category}/${x.filename}` === id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/infra/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/infra/knowledge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface RerankCandidate {
|
|
2
|
+
id: string;
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RerankResult {
|
|
6
|
+
id: string;
|
|
7
|
+
rank: number;
|
|
8
|
+
reason?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Re-rank candidates using Claude as a cross-encoder.
|
|
12
|
+
* Retrieves top-20, re-ranks to top-K. Cost: ~500 tokens per call.
|
|
13
|
+
* Falls back to original order if API unavailable.
|
|
14
|
+
*/
|
|
15
|
+
export declare function rerankWithLLM(query: string, candidates: RerankCandidate[], topK?: number): Promise<RerankResult[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Lightweight re-rank using keyword overlap score — zero cost, no API.
|
|
18
|
+
* Useful as fallback or for testing without spending tokens.
|
|
19
|
+
*/
|
|
20
|
+
export declare function rerankLocal(query: string, candidates: RerankCandidate[], topK?: number): RerankResult[];
|
|
21
|
+
//# sourceMappingURL=reranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/infra/reranker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAAE,EAC7B,IAAI,SAAI,GACP,OAAO,CAAC,YAAY,EAAE,CAAC,CAgDzB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAAE,EAC7B,IAAI,SAAI,GACP,YAAY,EAAE,CAahB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Re-rank candidates using Claude as a cross-encoder.
|
|
4
|
+
* Retrieves top-20, re-ranks to top-K. Cost: ~500 tokens per call.
|
|
5
|
+
* Falls back to original order if API unavailable.
|
|
6
|
+
*/
|
|
7
|
+
export async function rerankWithLLM(query, candidates, topK = 5) {
|
|
8
|
+
if (candidates.length <= 1) {
|
|
9
|
+
return candidates.slice(0, topK).map((c, i) => ({ id: c.id, rank: i }));
|
|
10
|
+
}
|
|
11
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
return candidates.slice(0, topK).map((c, i) => ({ id: c.id, rank: i }));
|
|
14
|
+
}
|
|
15
|
+
const numbered = candidates
|
|
16
|
+
.slice(0, 20) // re-rank at most 20 candidates
|
|
17
|
+
.map((c, i) => `[${i + 1}] ${c.content.slice(0, 300)}`)
|
|
18
|
+
.join('\n\n');
|
|
19
|
+
const prompt = `You are a code search relevance judge.
|
|
20
|
+
|
|
21
|
+
Query: "${query}"
|
|
22
|
+
|
|
23
|
+
Rank these code chunks from most to least relevant. Return ONLY a JSON array of numbers representing the ranking (1-indexed), most relevant first.
|
|
24
|
+
Example: [3, 1, 7, 2, 5] means chunk 3 is most relevant, then 1, then 7, etc.
|
|
25
|
+
|
|
26
|
+
Chunks:
|
|
27
|
+
${numbered}
|
|
28
|
+
|
|
29
|
+
JSON array (top ${topK} only):`;
|
|
30
|
+
try {
|
|
31
|
+
const client = new Anthropic({ apiKey });
|
|
32
|
+
const response = await client.messages.create({
|
|
33
|
+
model: 'claude-haiku-4-5-20251001',
|
|
34
|
+
max_tokens: 100,
|
|
35
|
+
messages: [{ role: 'user', content: prompt }],
|
|
36
|
+
});
|
|
37
|
+
const text = response.content[0]?.type === 'text' ? response.content[0].text.trim() : '';
|
|
38
|
+
const match = /\[[\d,\s]+\]/.exec(text);
|
|
39
|
+
if (!match)
|
|
40
|
+
throw new Error('No JSON array in response');
|
|
41
|
+
const ranks = JSON.parse(match[0]);
|
|
42
|
+
return ranks
|
|
43
|
+
.filter((r) => r >= 1 && r <= candidates.length)
|
|
44
|
+
.slice(0, topK)
|
|
45
|
+
.map((r, i) => ({ id: candidates[r - 1].id, rank: i }));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Fallback: return original order
|
|
49
|
+
return candidates.slice(0, topK).map((c, i) => ({ id: c.id, rank: i }));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Lightweight re-rank using keyword overlap score — zero cost, no API.
|
|
54
|
+
* Useful as fallback or for testing without spending tokens.
|
|
55
|
+
*/
|
|
56
|
+
export function rerankLocal(query, candidates, topK = 5) {
|
|
57
|
+
const queryTerms = query.toLowerCase().match(/[a-z0-9_]{2,}/g) ?? [];
|
|
58
|
+
const scored = candidates.map((c, i) => {
|
|
59
|
+
const text = c.content.toLowerCase();
|
|
60
|
+
const score = queryTerms.reduce((s, t) => s + (text.includes(t) ? 1 : 0), 0);
|
|
61
|
+
return { id: c.id, originalRank: i, score };
|
|
62
|
+
});
|
|
63
|
+
return scored
|
|
64
|
+
.sort((a, b) => b.score - a.score || a.originalRank - b.originalRank)
|
|
65
|
+
.slice(0, topK)
|
|
66
|
+
.map((r, i) => ({ id: r.id, rank: i }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/infra/reranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface VectorResult {
|
|
2
|
+
id: string;
|
|
3
|
+
score: number;
|
|
4
|
+
payload: Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export interface VectorStore {
|
|
7
|
+
upsert(id: string, vector: number[], payload: Record<string, unknown>): Promise<void>;
|
|
8
|
+
search(vector: number[], topK: number): Promise<VectorResult[]>;
|
|
9
|
+
clear(): Promise<void>;
|
|
10
|
+
size(): number;
|
|
11
|
+
}
|
|
12
|
+
export declare class JsonFileStore implements VectorStore {
|
|
13
|
+
private readonly filePath;
|
|
14
|
+
private entries;
|
|
15
|
+
constructor(filePath: string);
|
|
16
|
+
private load;
|
|
17
|
+
private save;
|
|
18
|
+
upsert(id: string, vector: number[], payload: Record<string, unknown>): Promise<void>;
|
|
19
|
+
search(queryVec: number[], topK: number): Promise<VectorResult[]>;
|
|
20
|
+
clear(): Promise<void>;
|
|
21
|
+
size(): number;
|
|
22
|
+
}
|
|
23
|
+
export declare class QdrantStore implements VectorStore {
|
|
24
|
+
private readonly url;
|
|
25
|
+
private readonly collection;
|
|
26
|
+
private _size;
|
|
27
|
+
private initialized;
|
|
28
|
+
constructor(url: string, collection: string);
|
|
29
|
+
private ensureCollection;
|
|
30
|
+
upsert(id: string, vector: number[], payload: Record<string, unknown>): Promise<void>;
|
|
31
|
+
search(vector: number[], topK: number): Promise<VectorResult[]>;
|
|
32
|
+
clear(): Promise<void>;
|
|
33
|
+
size(): number;
|
|
34
|
+
}
|
|
35
|
+
export declare function createVectorStore(cwd: string): VectorStore;
|
|
36
|
+
export declare function vectorStoreBackend(): string;
|
|
37
|
+
//# sourceMappingURL=vector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/infra/vector-store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,MAAM,CAAC;CAChB;AAUD,qBAAa,aAAc,YAAW,WAAW;IAGnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,OAAO,CAAqF;gBAEvE,QAAQ,EAAE,MAAM;IAI7C,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,IAAI;IAQN,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAQjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,IAAI,IAAI,MAAM;CACf;AAMD,qBAAa,WAAY,YAAW,WAAW;IAK3C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,WAAW,CAAS;gBAGT,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM;YAGvB,gBAAgB;IAgBxB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAarF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgB/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,IAAI,IAAI,MAAM;CACf;AAID,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAO1D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { cosineSimilarity, stringToUUID } from './embeddings.js';
|
|
4
|
+
export class JsonFileStore {
|
|
5
|
+
filePath;
|
|
6
|
+
entries = [];
|
|
7
|
+
constructor(filePath) {
|
|
8
|
+
this.filePath = filePath;
|
|
9
|
+
this.load();
|
|
10
|
+
}
|
|
11
|
+
load() {
|
|
12
|
+
try {
|
|
13
|
+
const raw = JSON.parse(readFileSync(this.filePath, 'utf8'));
|
|
14
|
+
this.entries = raw.map((e) => ({ id: e.id, vector: new Float32Array(e.vector), payload: e.payload }));
|
|
15
|
+
}
|
|
16
|
+
catch { /* fresh store */ }
|
|
17
|
+
}
|
|
18
|
+
save() {
|
|
19
|
+
mkdirSync(dirname(this.filePath), { recursive: true });
|
|
20
|
+
const raw = this.entries.map((e) => ({
|
|
21
|
+
id: e.id, vector: Array.from(e.vector), payload: e.payload,
|
|
22
|
+
}));
|
|
23
|
+
writeFileSync(this.filePath, JSON.stringify(raw), 'utf8');
|
|
24
|
+
}
|
|
25
|
+
async upsert(id, vector, payload) {
|
|
26
|
+
const idx = this.entries.findIndex((e) => e.id === id);
|
|
27
|
+
const entry = { id, vector: new Float32Array(vector), payload };
|
|
28
|
+
if (idx >= 0)
|
|
29
|
+
this.entries[idx] = entry;
|
|
30
|
+
else
|
|
31
|
+
this.entries.push(entry);
|
|
32
|
+
this.save();
|
|
33
|
+
}
|
|
34
|
+
async search(queryVec, topK) {
|
|
35
|
+
const q = new Float32Array(queryVec);
|
|
36
|
+
return this.entries
|
|
37
|
+
.map((e) => ({ id: e.id, score: cosineSimilarity(q, e.vector), payload: e.payload }))
|
|
38
|
+
.sort((a, b) => b.score - a.score)
|
|
39
|
+
.slice(0, topK);
|
|
40
|
+
}
|
|
41
|
+
async clear() {
|
|
42
|
+
this.entries = [];
|
|
43
|
+
this.save();
|
|
44
|
+
}
|
|
45
|
+
size() { return this.entries.length; }
|
|
46
|
+
}
|
|
47
|
+
// ── QdrantStore — production-ready, requires Qdrant instance ─────────────────
|
|
48
|
+
// Start locally: docker run -p 6333:6333 qdrant/qdrant
|
|
49
|
+
// Or use Qdrant Cloud (free tier available at cloud.qdrant.io)
|
|
50
|
+
export class QdrantStore {
|
|
51
|
+
url;
|
|
52
|
+
collection;
|
|
53
|
+
_size = 0;
|
|
54
|
+
initialized = false;
|
|
55
|
+
constructor(url, collection) {
|
|
56
|
+
this.url = url;
|
|
57
|
+
this.collection = collection;
|
|
58
|
+
}
|
|
59
|
+
async ensureCollection(dimension) {
|
|
60
|
+
if (this.initialized)
|
|
61
|
+
return;
|
|
62
|
+
// Check if collection exists
|
|
63
|
+
const check = await fetch(`${this.url}/collections/${this.collection}`);
|
|
64
|
+
if (check.ok) {
|
|
65
|
+
this.initialized = true;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Create collection with cosine distance
|
|
69
|
+
const res = await fetch(`${this.url}/collections/${this.collection}`, {
|
|
70
|
+
method: 'PUT',
|
|
71
|
+
headers: { 'Content-Type': 'application/json' },
|
|
72
|
+
body: JSON.stringify({ vectors: { size: dimension, distance: 'Cosine' } }),
|
|
73
|
+
});
|
|
74
|
+
if (!res.ok)
|
|
75
|
+
throw new Error(`Qdrant create collection: ${res.status} ${await res.text()}`);
|
|
76
|
+
this.initialized = true;
|
|
77
|
+
}
|
|
78
|
+
async upsert(id, vector, payload) {
|
|
79
|
+
await this.ensureCollection(vector.length);
|
|
80
|
+
const res = await fetch(`${this.url}/collections/${this.collection}/points`, {
|
|
81
|
+
method: 'PUT',
|
|
82
|
+
headers: { 'Content-Type': 'application/json' },
|
|
83
|
+
body: JSON.stringify({
|
|
84
|
+
points: [{ id: stringToUUID(id), vector, payload: { ...payload, _id: id } }],
|
|
85
|
+
}),
|
|
86
|
+
});
|
|
87
|
+
if (!res.ok)
|
|
88
|
+
throw new Error(`Qdrant upsert: ${res.status} ${await res.text()}`);
|
|
89
|
+
this._size++;
|
|
90
|
+
}
|
|
91
|
+
async search(vector, topK) {
|
|
92
|
+
await this.ensureCollection(vector.length);
|
|
93
|
+
const res = await fetch(`${this.url}/collections/${this.collection}/points/search`, {
|
|
94
|
+
method: 'POST',
|
|
95
|
+
headers: { 'Content-Type': 'application/json' },
|
|
96
|
+
body: JSON.stringify({ vector, limit: topK, with_payload: true }),
|
|
97
|
+
});
|
|
98
|
+
if (!res.ok)
|
|
99
|
+
throw new Error(`Qdrant search: ${res.status} ${await res.text()}`);
|
|
100
|
+
const json = await res.json();
|
|
101
|
+
return json.result.map((r) => ({
|
|
102
|
+
id: String(r.payload['_id'] ?? ''),
|
|
103
|
+
score: r.score,
|
|
104
|
+
payload: r.payload,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
async clear() {
|
|
108
|
+
await fetch(`${this.url}/collections/${this.collection}`, { method: 'DELETE' });
|
|
109
|
+
this.initialized = false;
|
|
110
|
+
this._size = 0;
|
|
111
|
+
}
|
|
112
|
+
size() { return this._size; }
|
|
113
|
+
}
|
|
114
|
+
// ── Factory ───────────────────────────────────────────────────────────────────
|
|
115
|
+
export function createVectorStore(cwd) {
|
|
116
|
+
if (process.env.QDRANT_URL) {
|
|
117
|
+
// Derive collection name from project path (last segment, safe chars)
|
|
118
|
+
const projectSlug = cwd.split('/').filter(Boolean).pop()?.replace(/[^a-z0-9-]/gi, '-').toLowerCase() ?? 'project';
|
|
119
|
+
return new QdrantStore(process.env.QDRANT_URL, `aion-${projectSlug}`);
|
|
120
|
+
}
|
|
121
|
+
return new JsonFileStore(join(cwd, '.ai-runtime', 'vectors.json'));
|
|
122
|
+
}
|
|
123
|
+
export function vectorStoreBackend() {
|
|
124
|
+
return process.env.QDRANT_URL ? `Qdrant (${process.env.QDRANT_URL})` : 'JSON file (.ai-runtime/vectors.json)';
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=vector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/infra/vector-store.ts"],"names":[],"mappings":"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"}
|