codebase-context 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/analyzers/angular/index.d.ts +44 -0
- package/dist/analyzers/angular/index.d.ts.map +1 -0
- package/dist/analyzers/angular/index.js +922 -0
- package/dist/analyzers/angular/index.js.map +1 -0
- package/dist/analyzers/generic/index.d.ts +23 -0
- package/dist/analyzers/generic/index.d.ts.map +1 -0
- package/dist/analyzers/generic/index.js +354 -0
- package/dist/analyzers/generic/index.js.map +1 -0
- package/dist/core/analyzer-registry.d.ts +36 -0
- package/dist/core/analyzer-registry.d.ts.map +1 -0
- package/dist/core/analyzer-registry.js +78 -0
- package/dist/core/analyzer-registry.js.map +1 -0
- package/dist/core/file-watcher.d.ts +63 -0
- package/dist/core/file-watcher.d.ts.map +1 -0
- package/dist/core/file-watcher.js +210 -0
- package/dist/core/file-watcher.js.map +1 -0
- package/dist/core/indexer.d.ts +29 -0
- package/dist/core/indexer.d.ts.map +1 -0
- package/dist/core/indexer.js +507 -0
- package/dist/core/indexer.js.map +1 -0
- package/dist/core/search.d.ts +31 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +307 -0
- package/dist/core/search.js.map +1 -0
- package/dist/embeddings/index.d.ts +5 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +33 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/openai.d.ts +19 -0
- package/dist/embeddings/openai.d.ts.map +1 -0
- package/dist/embeddings/openai.js +59 -0
- package/dist/embeddings/openai.js.map +1 -0
- package/dist/embeddings/transformers.d.ts +17 -0
- package/dist/embeddings/transformers.d.ts.map +1 -0
- package/dist/embeddings/transformers.js +83 -0
- package/dist/embeddings/transformers.js.map +1 -0
- package/dist/embeddings/types.d.ts +20 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +9 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +790 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +58 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +81 -0
- package/dist/lib.js.map +1 -0
- package/dist/storage/index.d.ts +12 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +18 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/lancedb.d.ts +24 -0
- package/dist/storage/lancedb.d.ts.map +1 -0
- package/dist/storage/lancedb.js +197 -0
- package/dist/storage/lancedb.js.map +1 -0
- package/dist/storage/types.d.ts +45 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +8 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/types/index.d.ts +367 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/chunking.d.ts +23 -0
- package/dist/utils/chunking.d.ts.map +1 -0
- package/dist/utils/chunking.js +226 -0
- package/dist/utils/chunking.js.map +1 -0
- package/dist/utils/language-detection.d.ts +29 -0
- package/dist/utils/language-detection.d.ts.map +1 -0
- package/dist/utils/language-detection.js +127 -0
- package/dist/utils/language-detection.js.map +1 -0
- package/dist/utils/pattern-detector.d.ts +41 -0
- package/dist/utils/pattern-detector.d.ts.map +1 -0
- package/dist/utils/pattern-detector.js +101 -0
- package/dist/utils/pattern-detector.js.map +1 -0
- package/dist/utils/usage-tracker.d.ts +120 -0
- package/dist/utils/usage-tracker.d.ts.map +1 -0
- package/dist/utils/usage-tracker.js +336 -0
- package/dist/utils/usage-tracker.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid search combining semantic vector search with keyword matching
|
|
3
|
+
*/
|
|
4
|
+
import Fuse from "fuse.js";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { promises as fs } from "fs";
|
|
7
|
+
import { getEmbeddingProvider, } from "../embeddings/index.js";
|
|
8
|
+
import { getStorageProvider } from "../storage/index.js";
|
|
9
|
+
import { analyzerRegistry } from "./analyzer-registry.js";
|
|
10
|
+
const DEFAULT_SEARCH_OPTIONS = {
|
|
11
|
+
useSemanticSearch: true,
|
|
12
|
+
useKeywordSearch: true,
|
|
13
|
+
semanticWeight: 0.7,
|
|
14
|
+
keywordWeight: 0.3,
|
|
15
|
+
};
|
|
16
|
+
export class CodebaseSearcher {
|
|
17
|
+
rootPath;
|
|
18
|
+
storagePath;
|
|
19
|
+
fuseIndex = null;
|
|
20
|
+
chunks = [];
|
|
21
|
+
embeddingProvider = null;
|
|
22
|
+
storageProvider = null;
|
|
23
|
+
initialized = false;
|
|
24
|
+
constructor(rootPath) {
|
|
25
|
+
this.rootPath = rootPath;
|
|
26
|
+
this.storagePath = path.join(rootPath, ".codebase-index");
|
|
27
|
+
}
|
|
28
|
+
async initialize() {
|
|
29
|
+
if (this.initialized)
|
|
30
|
+
return;
|
|
31
|
+
try {
|
|
32
|
+
await this.loadKeywordIndex();
|
|
33
|
+
this.embeddingProvider = await getEmbeddingProvider();
|
|
34
|
+
this.storageProvider = await getStorageProvider({
|
|
35
|
+
path: this.storagePath,
|
|
36
|
+
});
|
|
37
|
+
this.initialized = true;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.warn("Partial initialization (keyword search only):", error);
|
|
41
|
+
this.initialized = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async loadKeywordIndex() {
|
|
45
|
+
try {
|
|
46
|
+
const indexPath = path.join(this.rootPath, ".codebase-index.json");
|
|
47
|
+
const content = await fs.readFile(indexPath, "utf-8");
|
|
48
|
+
this.chunks = JSON.parse(content);
|
|
49
|
+
this.fuseIndex = new Fuse(this.chunks, {
|
|
50
|
+
keys: [
|
|
51
|
+
{ name: "content", weight: 0.4 },
|
|
52
|
+
{ name: "metadata.componentName", weight: 0.25 },
|
|
53
|
+
{ name: "filePath", weight: 0.15 },
|
|
54
|
+
{ name: "relativePath", weight: 0.15 },
|
|
55
|
+
{ name: "componentType", weight: 0.15 },
|
|
56
|
+
{ name: "layer", weight: 0.1 },
|
|
57
|
+
{ name: "tags", weight: 0.15 },
|
|
58
|
+
],
|
|
59
|
+
includeScore: true,
|
|
60
|
+
threshold: 0.4,
|
|
61
|
+
useExtendedSearch: true,
|
|
62
|
+
ignoreLocation: true,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.warn("Keyword index load failed:", error);
|
|
67
|
+
this.chunks = [];
|
|
68
|
+
this.fuseIndex = null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async search(query, limit = 5, filters, options = DEFAULT_SEARCH_OPTIONS) {
|
|
72
|
+
if (!this.initialized) {
|
|
73
|
+
await this.initialize();
|
|
74
|
+
}
|
|
75
|
+
const { useSemanticSearch, useKeywordSearch, semanticWeight, keywordWeight, } = {
|
|
76
|
+
...DEFAULT_SEARCH_OPTIONS,
|
|
77
|
+
...options,
|
|
78
|
+
};
|
|
79
|
+
const results = new Map();
|
|
80
|
+
if (useSemanticSearch && this.embeddingProvider && this.storageProvider) {
|
|
81
|
+
try {
|
|
82
|
+
const vectorResults = await this.semanticSearch(query, limit * 2, filters);
|
|
83
|
+
vectorResults.forEach((result) => {
|
|
84
|
+
const id = result.chunk.id;
|
|
85
|
+
const existing = results.get(id);
|
|
86
|
+
if (existing) {
|
|
87
|
+
existing.scores.push(result.score * (semanticWeight || 0.7));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
results.set(id, {
|
|
91
|
+
chunk: result.chunk,
|
|
92
|
+
scores: [result.score * (semanticWeight || 0.7)],
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.warn("Semantic search failed:", error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (useKeywordSearch && this.fuseIndex) {
|
|
102
|
+
try {
|
|
103
|
+
const keywordResults = await this.keywordSearch(query, limit * 2, filters);
|
|
104
|
+
keywordResults.forEach((result) => {
|
|
105
|
+
const id = result.chunk.id;
|
|
106
|
+
const existing = results.get(id);
|
|
107
|
+
if (existing) {
|
|
108
|
+
existing.scores.push(result.score * (keywordWeight || 0.3));
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
results.set(id, {
|
|
112
|
+
chunk: result.chunk,
|
|
113
|
+
scores: [result.score * (keywordWeight || 0.3)],
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.warn("Keyword search failed:", error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const combinedResults = Array.from(results.entries())
|
|
123
|
+
.map(([id, { chunk, scores }]) => {
|
|
124
|
+
// Calculate base combined score
|
|
125
|
+
let combinedScore = scores.reduce((sum, score) => sum + score, 0);
|
|
126
|
+
// Normalize to 0-1 range (scores are already weighted)
|
|
127
|
+
// If both semantic and keyword matched, max possible is ~1.0
|
|
128
|
+
combinedScore = Math.min(1.0, combinedScore);
|
|
129
|
+
// Boost scores for Angular components with proper detection
|
|
130
|
+
if (chunk.componentType && chunk.framework === "angular") {
|
|
131
|
+
combinedScore = Math.min(1.0, combinedScore * 1.3);
|
|
132
|
+
}
|
|
133
|
+
// Boost if layer is detected
|
|
134
|
+
if (chunk.layer && chunk.layer !== "unknown") {
|
|
135
|
+
combinedScore = Math.min(1.0, combinedScore * 1.1);
|
|
136
|
+
}
|
|
137
|
+
const summary = this.generateSummary(chunk);
|
|
138
|
+
const snippet = this.generateSnippet(chunk.content);
|
|
139
|
+
return {
|
|
140
|
+
summary,
|
|
141
|
+
snippet,
|
|
142
|
+
filePath: chunk.filePath,
|
|
143
|
+
startLine: chunk.startLine,
|
|
144
|
+
endLine: chunk.endLine,
|
|
145
|
+
score: combinedScore,
|
|
146
|
+
relevanceReason: this.generateRelevanceReason(chunk, query),
|
|
147
|
+
language: chunk.language,
|
|
148
|
+
framework: chunk.framework,
|
|
149
|
+
componentType: chunk.componentType,
|
|
150
|
+
layer: chunk.layer,
|
|
151
|
+
metadata: chunk.metadata,
|
|
152
|
+
};
|
|
153
|
+
})
|
|
154
|
+
.sort((a, b) => b.score - a.score)
|
|
155
|
+
.slice(0, limit);
|
|
156
|
+
return combinedResults;
|
|
157
|
+
}
|
|
158
|
+
generateSummary(chunk) {
|
|
159
|
+
const analyzer = chunk.framework
|
|
160
|
+
? analyzerRegistry.get(chunk.framework)
|
|
161
|
+
: null;
|
|
162
|
+
if (analyzer && analyzer.summarize) {
|
|
163
|
+
try {
|
|
164
|
+
const summary = analyzer.summarize(chunk);
|
|
165
|
+
// Only use analyzer summary if it's meaningful (not the generic fallback)
|
|
166
|
+
if (summary &&
|
|
167
|
+
!summary.startsWith("Code in ") &&
|
|
168
|
+
!summary.includes(": lines ")) {
|
|
169
|
+
return summary;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.warn("Analyzer summary failed:", error);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Enhanced generic summary
|
|
177
|
+
const fileName = path.basename(chunk.filePath);
|
|
178
|
+
const componentName = chunk.metadata?.componentName;
|
|
179
|
+
const componentType = chunk.componentType;
|
|
180
|
+
// Try to extract a meaningful name from content
|
|
181
|
+
const classMatch = chunk.content.match(/(?:export\s+)?(?:class|interface|type|enum|function)\s+(\w+)/);
|
|
182
|
+
const name = componentName || (classMatch ? classMatch[1] : null);
|
|
183
|
+
if (name && componentType) {
|
|
184
|
+
return `${componentType.charAt(0).toUpperCase() + componentType.slice(1)} '${name}' in ${fileName}.`;
|
|
185
|
+
}
|
|
186
|
+
else if (name) {
|
|
187
|
+
return `'${name}' defined in ${fileName}.`;
|
|
188
|
+
}
|
|
189
|
+
else if (componentType) {
|
|
190
|
+
return `${componentType.charAt(0).toUpperCase() + componentType.slice(1)} in ${fileName}.`;
|
|
191
|
+
}
|
|
192
|
+
// Last resort: describe the file type
|
|
193
|
+
const ext = path.extname(fileName).slice(1);
|
|
194
|
+
const langMap = {
|
|
195
|
+
ts: "TypeScript",
|
|
196
|
+
js: "JavaScript",
|
|
197
|
+
html: "HTML template",
|
|
198
|
+
scss: "SCSS styles",
|
|
199
|
+
css: "CSS styles",
|
|
200
|
+
json: "JSON config",
|
|
201
|
+
};
|
|
202
|
+
return `${langMap[ext] || ext.toUpperCase()} in ${fileName}.`;
|
|
203
|
+
}
|
|
204
|
+
generateSnippet(content, maxLines = 100) {
|
|
205
|
+
const lines = content.split("\n");
|
|
206
|
+
if (lines.length <= maxLines) {
|
|
207
|
+
return content;
|
|
208
|
+
}
|
|
209
|
+
const snippet = lines.slice(0, maxLines).join("\n");
|
|
210
|
+
const remaining = lines.length - maxLines;
|
|
211
|
+
return `${snippet}\n\n... [${remaining} more lines]`;
|
|
212
|
+
}
|
|
213
|
+
async semanticSearch(query, limit, filters) {
|
|
214
|
+
if (!this.embeddingProvider || !this.storageProvider) {
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
const queryVector = await this.embeddingProvider.embed(query);
|
|
218
|
+
const results = await this.storageProvider.search(queryVector, limit, filters);
|
|
219
|
+
return results.map((r) => ({
|
|
220
|
+
chunk: r.chunk,
|
|
221
|
+
score: r.score,
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
async keywordSearch(query, limit, filters) {
|
|
225
|
+
if (!this.fuseIndex || this.chunks.length === 0) {
|
|
226
|
+
return [];
|
|
227
|
+
}
|
|
228
|
+
let fuseResults = this.fuseIndex.search(query);
|
|
229
|
+
if (filters) {
|
|
230
|
+
fuseResults = fuseResults.filter((r) => {
|
|
231
|
+
const chunk = r.item;
|
|
232
|
+
if (filters.componentType &&
|
|
233
|
+
chunk.componentType !== filters.componentType) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
if (filters.layer && chunk.layer !== filters.layer) {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
if (filters.framework && chunk.framework !== filters.framework) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
if (filters.language && chunk.language !== filters.language) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
if (filters.tags && filters.tags.length > 0) {
|
|
246
|
+
const chunkTags = chunk.tags || [];
|
|
247
|
+
if (!filters.tags.some((tag) => chunkTags.includes(tag))) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return true;
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
return fuseResults.slice(0, limit).map((r) => {
|
|
255
|
+
const chunk = r.item;
|
|
256
|
+
let score = 1 - (r.score || 0);
|
|
257
|
+
// Boost exact matches on class name or file path
|
|
258
|
+
const queryLower = query.toLowerCase();
|
|
259
|
+
const fileName = path.basename(chunk.filePath).toLowerCase();
|
|
260
|
+
const relativePathLower = chunk.relativePath.toLowerCase();
|
|
261
|
+
const componentName = chunk.metadata?.componentName?.toLowerCase() || "";
|
|
262
|
+
// Exact class name match
|
|
263
|
+
if (componentName && queryLower === componentName) {
|
|
264
|
+
score = Math.min(1.0, score + 0.3);
|
|
265
|
+
}
|
|
266
|
+
// Exact file name match
|
|
267
|
+
if (fileName === queryLower ||
|
|
268
|
+
fileName.replace(/\.ts$/, "") === queryLower.replace(/\.ts$/, "")) {
|
|
269
|
+
score = Math.min(1.0, score + 0.2);
|
|
270
|
+
}
|
|
271
|
+
// File path contains query
|
|
272
|
+
if (chunk.filePath.toLowerCase().includes(queryLower) ||
|
|
273
|
+
relativePathLower.includes(queryLower)) {
|
|
274
|
+
score = Math.min(1.0, score + 0.1);
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
chunk,
|
|
278
|
+
score,
|
|
279
|
+
};
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
generateRelevanceReason(chunk, query) {
|
|
283
|
+
const reasons = [];
|
|
284
|
+
if (chunk.componentType) {
|
|
285
|
+
reasons.push(`${chunk.componentType}`);
|
|
286
|
+
}
|
|
287
|
+
if (chunk.layer) {
|
|
288
|
+
reasons.push(`${chunk.layer} layer`);
|
|
289
|
+
}
|
|
290
|
+
const queryLower = query.toLowerCase();
|
|
291
|
+
const matchingTags = (chunk.tags || []).filter((tag) => queryLower.includes(tag.toLowerCase()));
|
|
292
|
+
if (matchingTags.length > 0) {
|
|
293
|
+
reasons.push(`tags: ${matchingTags.join(", ")}`);
|
|
294
|
+
}
|
|
295
|
+
return reasons.length > 0 ? reasons.join("; ") : "content match";
|
|
296
|
+
}
|
|
297
|
+
async getChunkCount() {
|
|
298
|
+
if (this.storageProvider) {
|
|
299
|
+
return await this.storageProvider.count();
|
|
300
|
+
}
|
|
301
|
+
return this.chunks.length;
|
|
302
|
+
}
|
|
303
|
+
isReady() {
|
|
304
|
+
return this.initialized;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/core/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './transformers.js';
|
|
3
|
+
import { EmbeddingProvider, EmbeddingConfig } from './types.js';
|
|
4
|
+
export declare function getEmbeddingProvider(config?: Partial<EmbeddingConfig>): Promise<EmbeddingProvider>;
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAA4B,MAAM,YAAY,CAAC;AAM1F,wBAAsB,oBAAoB,CACxC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAmC5B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './transformers.js';
|
|
3
|
+
import { DEFAULT_EMBEDDING_CONFIG } from './types.js';
|
|
4
|
+
import { TransformersEmbeddingProvider } from './transformers.js';
|
|
5
|
+
let cachedProvider = null;
|
|
6
|
+
let cachedProviderType = null;
|
|
7
|
+
export async function getEmbeddingProvider(config = {}) {
|
|
8
|
+
const mergedConfig = { ...DEFAULT_EMBEDDING_CONFIG, ...config };
|
|
9
|
+
const providerKey = `${mergedConfig.provider}:${mergedConfig.model}`;
|
|
10
|
+
if (cachedProvider && cachedProviderType === providerKey) {
|
|
11
|
+
return cachedProvider;
|
|
12
|
+
}
|
|
13
|
+
if (mergedConfig.provider === 'openai') {
|
|
14
|
+
const { OpenAIEmbeddingProvider } = await import('./openai.js');
|
|
15
|
+
const provider = new OpenAIEmbeddingProvider(mergedConfig.model || 'text-embedding-3-small', mergedConfig.apiKey, mergedConfig.apiEndpoint);
|
|
16
|
+
await provider.initialize();
|
|
17
|
+
cachedProvider = provider;
|
|
18
|
+
cachedProviderType = providerKey;
|
|
19
|
+
return provider;
|
|
20
|
+
}
|
|
21
|
+
if (mergedConfig.provider === 'custom') {
|
|
22
|
+
throw new Error("Custom provider not implemented. Use 'openai' or 'transformers'.");
|
|
23
|
+
}
|
|
24
|
+
if (mergedConfig.provider === 'ollama') {
|
|
25
|
+
console.warn('Ollama provider not yet implemented, falling back to Transformers.js');
|
|
26
|
+
}
|
|
27
|
+
const provider = new TransformersEmbeddingProvider(mergedConfig.model);
|
|
28
|
+
await provider.initialize();
|
|
29
|
+
cachedProvider = provider;
|
|
30
|
+
cachedProviderType = providerKey;
|
|
31
|
+
return provider;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAsC,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAElE,IAAI,cAAc,GAA6B,IAAI,CAAC;AACpD,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;IAErE,IAAI,cAAc,IAAI,kBAAkB,KAAK,WAAW,EAAE,CAAC;QACzD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC1C,YAAY,CAAC,KAAK,IAAI,wBAAwB,EAC9C,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,WAAW,CACzB,CAAC;QACF,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,cAAc,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,GAAG,WAAW,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5B,cAAc,GAAG,QAAQ,CAAC;IAC1B,kBAAkB,GAAG,WAAW,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EmbeddingProvider } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Embedding Provider
|
|
4
|
+
* Uses native fetch to avoid adding the heavy openai npm package dependency.
|
|
5
|
+
* Minimal implementation focusing on high ROI and low bloat.
|
|
6
|
+
*/
|
|
7
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
8
|
+
readonly modelName: string;
|
|
9
|
+
private apiKey?;
|
|
10
|
+
private apiEndpoint;
|
|
11
|
+
readonly name = "openai";
|
|
12
|
+
readonly dimensions = 1536;
|
|
13
|
+
constructor(modelName?: string, apiKey?: string | undefined, apiEndpoint?: string);
|
|
14
|
+
initialize(): Promise<void>;
|
|
15
|
+
isReady(): boolean;
|
|
16
|
+
embed(text: string): Promise<number[]>;
|
|
17
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAKzD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,WAAW;IANvB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,UAAU,QAAQ;gBAGd,SAAS,GAAE,MAAiC,EAC7C,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,WAAW,GAAE,MAAoC;IAGvD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,IAAI,OAAO;IAIZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA+BzD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Embedding Provider
|
|
3
|
+
* Uses native fetch to avoid adding the heavy openai npm package dependency.
|
|
4
|
+
* Minimal implementation focusing on high ROI and low bloat.
|
|
5
|
+
*/
|
|
6
|
+
export class OpenAIEmbeddingProvider {
|
|
7
|
+
modelName;
|
|
8
|
+
apiKey;
|
|
9
|
+
apiEndpoint;
|
|
10
|
+
name = 'openai';
|
|
11
|
+
dimensions = 1536; // Default for text-embedding-3-small
|
|
12
|
+
constructor(modelName = 'text-embedding-3-small', apiKey, apiEndpoint = 'https://api.openai.com/v1') {
|
|
13
|
+
this.modelName = modelName;
|
|
14
|
+
this.apiKey = apiKey;
|
|
15
|
+
this.apiEndpoint = apiEndpoint;
|
|
16
|
+
}
|
|
17
|
+
async initialize() {
|
|
18
|
+
if (!this.apiKey) {
|
|
19
|
+
throw new Error('OpenAI API key is missing. Set OPENAI_API_KEY environment variable or configure it in the MCP settings.');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
isReady() {
|
|
23
|
+
return !!this.apiKey;
|
|
24
|
+
}
|
|
25
|
+
async embed(text) {
|
|
26
|
+
const batch = await this.embedBatch([text]);
|
|
27
|
+
return batch[0];
|
|
28
|
+
}
|
|
29
|
+
async embedBatch(texts) {
|
|
30
|
+
if (!texts.length)
|
|
31
|
+
return [];
|
|
32
|
+
try {
|
|
33
|
+
const response = await fetch(`${this.apiEndpoint}/embeddings`, {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
'Authorization': `Bearer ${this.apiKey}`
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
model: this.modelName,
|
|
41
|
+
input: texts,
|
|
42
|
+
encoding_format: 'float'
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const error = await response.text();
|
|
47
|
+
throw new Error(`OpenAI API Error ${response.status}: ${error}`);
|
|
48
|
+
}
|
|
49
|
+
const data = await response.json();
|
|
50
|
+
// OpenAI guarantees order matches input
|
|
51
|
+
return data.data.map((item) => item.embedding);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error('OpenAI Embedding Failed:', error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAKnB;IACD;IACA;IANH,IAAI,GAAG,QAAQ,CAAC;IAChB,UAAU,GAAG,IAAI,CAAC,CAAC,qCAAqC;IAEjE,YACa,YAAoB,wBAAwB,EAC7C,MAAe,EACf,cAAsB,2BAA2B;QAFhD,cAAS,GAAT,SAAS,CAAmC;QAC7C,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAsC;IACzD,CAAC;IAEL,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,yGAAyG,CAC5G,CAAC;QACN,CAAC;IACL,CAAC;IAED,OAAO;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,aAAa,EAAE;gBAC3D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBAC3C;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjB,KAAK,EAAE,IAAI,CAAC,SAAS;oBACrB,KAAK,EAAE,KAAK;oBACZ,eAAe,EAAE,OAAO;iBAC3B,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;YAE1C,wCAAwC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EmbeddingProvider } from "./types.js";
|
|
2
|
+
export declare class TransformersEmbeddingProvider implements EmbeddingProvider {
|
|
3
|
+
readonly name = "transformers";
|
|
4
|
+
readonly modelName: string;
|
|
5
|
+
readonly dimensions: number;
|
|
6
|
+
private pipeline;
|
|
7
|
+
private ready;
|
|
8
|
+
private initPromise;
|
|
9
|
+
constructor(modelName?: string);
|
|
10
|
+
initialize(): Promise<void>;
|
|
11
|
+
private _initialize;
|
|
12
|
+
embed(text: string): Promise<number[]>;
|
|
13
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
14
|
+
isReady(): boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function createEmbeddingProvider(modelName?: string): Promise<EmbeddingProvider>;
|
|
17
|
+
//# sourceMappingURL=transformers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAQ9D,qBAAa,6BAA8B,YAAW,iBAAiB;IACrE,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAA8B;gBAErC,SAAS,GAAE,MAAsB;IAKvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAQnB,WAAW;IAmBnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0BtD,OAAO,IAAI,OAAO;CAGnB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAI5B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { DEFAULT_MODEL } from "./types.js";
|
|
2
|
+
const MODEL_CONFIGS = {
|
|
3
|
+
"Xenova/bge-small-en-v1.5": { dimensions: 384 },
|
|
4
|
+
"Xenova/all-MiniLM-L6-v2": { dimensions: 384 },
|
|
5
|
+
"Xenova/bge-base-en-v1.5": { dimensions: 768 },
|
|
6
|
+
};
|
|
7
|
+
export class TransformersEmbeddingProvider {
|
|
8
|
+
name = "transformers";
|
|
9
|
+
modelName;
|
|
10
|
+
dimensions;
|
|
11
|
+
pipeline = null;
|
|
12
|
+
ready = false;
|
|
13
|
+
initPromise = null;
|
|
14
|
+
constructor(modelName = DEFAULT_MODEL) {
|
|
15
|
+
this.modelName = modelName;
|
|
16
|
+
this.dimensions = MODEL_CONFIGS[modelName]?.dimensions || 384;
|
|
17
|
+
}
|
|
18
|
+
async initialize() {
|
|
19
|
+
if (this.ready)
|
|
20
|
+
return;
|
|
21
|
+
if (this.initPromise)
|
|
22
|
+
return this.initPromise;
|
|
23
|
+
this.initPromise = this._initialize();
|
|
24
|
+
return this.initPromise;
|
|
25
|
+
}
|
|
26
|
+
async _initialize() {
|
|
27
|
+
try {
|
|
28
|
+
console.error(`Loading embedding model: ${this.modelName}`);
|
|
29
|
+
console.error("(First run will download ~130MB model)");
|
|
30
|
+
const { pipeline } = await import("@xenova/transformers");
|
|
31
|
+
this.pipeline = await pipeline("feature-extraction", this.modelName, {
|
|
32
|
+
quantized: true,
|
|
33
|
+
});
|
|
34
|
+
this.ready = true;
|
|
35
|
+
console.error(`Model loaded successfully: ${this.modelName}`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error("Failed to initialize embedding model:", error);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async embed(text) {
|
|
43
|
+
if (!this.ready) {
|
|
44
|
+
await this.initialize();
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const output = await this.pipeline(text, {
|
|
48
|
+
pooling: "mean",
|
|
49
|
+
normalize: true,
|
|
50
|
+
});
|
|
51
|
+
return Array.from(output.data);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
console.error("Failed to generate embedding:", error);
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async embedBatch(texts) {
|
|
59
|
+
if (!this.ready) {
|
|
60
|
+
await this.initialize();
|
|
61
|
+
}
|
|
62
|
+
const embeddings = [];
|
|
63
|
+
const batchSize = 32;
|
|
64
|
+
for (let i = 0; i < texts.length; i += batchSize) {
|
|
65
|
+
const batch = texts.slice(i, i + batchSize);
|
|
66
|
+
const batchEmbeddings = await Promise.all(batch.map((text) => this.embed(text)));
|
|
67
|
+
embeddings.push(...batchEmbeddings);
|
|
68
|
+
if (texts.length > 100 && (i + batchSize) % 100 === 0) {
|
|
69
|
+
console.error(`Embedded ${Math.min(i + batchSize, texts.length)}/${texts.length} chunks`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return embeddings;
|
|
73
|
+
}
|
|
74
|
+
isReady() {
|
|
75
|
+
return this.ready;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function createEmbeddingProvider(modelName = DEFAULT_MODEL) {
|
|
79
|
+
const provider = new TransformersEmbeddingProvider(modelName);
|
|
80
|
+
await provider.initialize();
|
|
81
|
+
return provider;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=transformers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface EmbeddingProvider {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly modelName: string;
|
|
4
|
+
readonly dimensions: number;
|
|
5
|
+
initialize(): Promise<void>;
|
|
6
|
+
embed(text: string): Promise<number[]>;
|
|
7
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
8
|
+
isReady(): boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface EmbeddingConfig {
|
|
11
|
+
provider: "transformers" | "ollama" | "openai" | "custom";
|
|
12
|
+
model?: string;
|
|
13
|
+
batchSize?: number;
|
|
14
|
+
maxRetries?: number;
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
apiEndpoint?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const DEFAULT_MODEL: string;
|
|
19
|
+
export declare const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig;
|
|
20
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,aAAa,QAA4D,CAAC;AAEvF,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const DEFAULT_MODEL = process.env.EMBEDDING_MODEL || "Xenova/bge-small-en-v1.5";
|
|
2
|
+
export const DEFAULT_EMBEDDING_CONFIG = {
|
|
3
|
+
provider: process.env.EMBEDDING_PROVIDER || "transformers",
|
|
4
|
+
model: DEFAULT_MODEL,
|
|
5
|
+
batchSize: 32,
|
|
6
|
+
maxRetries: 3,
|
|
7
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAoBA,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,0BAA0B,CAAC;AAEvF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,kBAA0B,IAAI,cAAc;IACnE,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;CACnC,CAAC"}
|