@vivantel/rag-core 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -26
- package/dist/cli/init.d.ts +7 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +92 -49
- package/dist/cli/init.js.map +1 -1
- package/dist/helpers/create-chunker.d.ts +13 -4
- package/dist/helpers/create-chunker.d.ts.map +1 -1
- package/dist/helpers/create-chunker.js +13 -2
- package/dist/helpers/create-chunker.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,34 +15,54 @@ npm install @vivantel/rag-core
|
|
|
15
15
|
|
|
16
16
|
## Quick Start
|
|
17
17
|
|
|
18
|
-
### 1.
|
|
18
|
+
### 1. Generate a config (recommended)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
rag-update init
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Scans your project for known file types and generates a `rag.config.ts` with the right strategy per pattern. You then fill in your embedding provider and vector store.
|
|
25
|
+
|
|
26
|
+
### 2. Or write a config manually (`rag.config.ts`)
|
|
19
27
|
|
|
20
28
|
```typescript
|
|
21
|
-
import {
|
|
22
|
-
|
|
29
|
+
import {
|
|
30
|
+
RAGPipelineConfig,
|
|
31
|
+
createChunker,
|
|
32
|
+
markdownHeadersStrategy,
|
|
33
|
+
tokenStrategy,
|
|
34
|
+
} from '@vivantel/rag-core';
|
|
23
35
|
|
|
24
|
-
|
|
36
|
+
const config: RAGPipelineConfig = {
|
|
25
37
|
chunkers: [
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return [{
|
|
31
|
-
content,
|
|
32
|
-
metadata: { type: 'doc', file: filePath },
|
|
33
|
-
sourceFile: filePath,
|
|
34
|
-
commitHash
|
|
35
|
-
}];
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
+
// Different directories can use different strategies
|
|
39
|
+
createChunker({ patterns: ['docs/**/*.md'], strategy: markdownHeadersStrategy() }),
|
|
40
|
+
createChunker({ patterns: ['rules/**/*.md'], strategy: wholeFileStrategy() }),
|
|
41
|
+
createChunker({ patterns: ['src/**/*.ts', 'src/**/*.tsx'], strategy: tokenStrategy() }),
|
|
38
42
|
],
|
|
39
|
-
|
|
40
43
|
embedder: new MyEmbedderProvider({ apiKey: process.env.API_KEY }),
|
|
41
|
-
vectorStore: new MyVectorStore({ url: process.env.DB_URL })
|
|
42
|
-
}
|
|
44
|
+
vectorStore: new MyVectorStore({ url: process.env.DB_URL }),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default config;
|
|
43
48
|
```
|
|
44
49
|
|
|
45
|
-
|
|
50
|
+
For custom chunking logic, use the `process` callback instead of `strategy`:
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
createChunker({
|
|
54
|
+
name: 'custom',
|
|
55
|
+
patterns: ['**/*.txt'],
|
|
56
|
+
process: async (content, filePath, commitHash) => [{
|
|
57
|
+
content,
|
|
58
|
+
metadata: { file: filePath },
|
|
59
|
+
sourceFile: filePath,
|
|
60
|
+
commitHash,
|
|
61
|
+
}],
|
|
62
|
+
})
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Run the pipeline
|
|
46
66
|
|
|
47
67
|
```bash
|
|
48
68
|
rag-update --config rag.config.ts
|
|
@@ -50,12 +70,12 @@ rag-update --config rag.config.ts
|
|
|
50
70
|
|
|
51
71
|
## Built-in Strategies
|
|
52
72
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
73
|
+
| Factory | Best for |
|
|
74
|
+
|---------|----------|
|
|
75
|
+
| `tokenStrategy({ maxTokens?, overlap? })` | Source code, structured text |
|
|
76
|
+
| `markdownHeadersStrategy()` | Markdown documentation |
|
|
77
|
+
| `semanticStrategy()` | Prose, articles |
|
|
78
|
+
| `wholeFileStrategy()` | Small configs, rule files, YAML |
|
|
59
79
|
|
|
60
80
|
## License
|
|
61
81
|
|
package/dist/cli/init.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
+
interface ExtGroup {
|
|
2
|
+
exts: string[];
|
|
3
|
+
strategyFn: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function detectFileExtensions(cwd: string): Promise<ExtGroup[]>;
|
|
1
7
|
export declare function runInit(): Promise<void>;
|
|
8
|
+
export {};
|
|
2
9
|
//# sourceMappingURL=init.d.ts.map
|
package/dist/cli/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAMA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAoDD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI3E;AA4LD,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAsF7C"}
|
package/dist/cli/init.js
CHANGED
|
@@ -1,28 +1,60 @@
|
|
|
1
1
|
import { checkbox, select, input } from "@inquirer/prompts";
|
|
2
2
|
import { writeFile } from "fs/promises";
|
|
3
3
|
import { existsSync } from "fs";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { readdir } from "fs/promises";
|
|
5
|
+
import { join, extname } from "path";
|
|
6
|
+
const EXT_GROUPS = [
|
|
7
|
+
{
|
|
8
|
+
exts: [".md", ".mdx"],
|
|
9
|
+
strategyFn: "markdownHeadersStrategy",
|
|
10
|
+
name: "markdown",
|
|
9
11
|
},
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
12
|
+
{ exts: [".ts", ".tsx"], strategyFn: "tokenStrategy", name: "typescript" },
|
|
13
|
+
{ exts: [".js", ".jsx"], strategyFn: "tokenStrategy", name: "javascript" },
|
|
14
|
+
{ exts: [".py"], strategyFn: "tokenStrategy", name: "python" },
|
|
15
|
+
{ exts: [".go"], strategyFn: "tokenStrategy", name: "go" },
|
|
16
|
+
{ exts: [".cs"], strategyFn: "tokenStrategy", name: "csharp" },
|
|
17
|
+
{ exts: [".java"], strategyFn: "tokenStrategy", name: "java" },
|
|
18
|
+
{ exts: [".yaml", ".yml"], strategyFn: "wholeFileStrategy", name: "yaml" },
|
|
19
|
+
{ exts: [".txt"], strategyFn: "semanticStrategy", name: "text" },
|
|
20
|
+
];
|
|
21
|
+
const IGNORED_DIRS = new Set([
|
|
22
|
+
"node_modules",
|
|
23
|
+
".git",
|
|
24
|
+
"dist",
|
|
25
|
+
"build",
|
|
26
|
+
"coverage",
|
|
27
|
+
".cache",
|
|
28
|
+
".next",
|
|
29
|
+
"out",
|
|
30
|
+
".turbo",
|
|
31
|
+
]);
|
|
32
|
+
async function collectExtensions(dir, found) {
|
|
33
|
+
let entries;
|
|
34
|
+
try {
|
|
35
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
for (const entry of entries) {
|
|
41
|
+
if (entry.isDirectory()) {
|
|
42
|
+
if (!IGNORED_DIRS.has(entry.name)) {
|
|
43
|
+
await collectExtensions(join(dir, entry.name), found);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const ext = extname(entry.name).toLowerCase();
|
|
48
|
+
if (ext)
|
|
49
|
+
found.add(ext);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function detectFileExtensions(cwd) {
|
|
54
|
+
const found = new Set();
|
|
55
|
+
await collectExtensions(cwd, found);
|
|
56
|
+
return EXT_GROUPS.filter((g) => g.exts.some((e) => found.has(e)));
|
|
57
|
+
}
|
|
26
58
|
function buildEmbedderSection(provider) {
|
|
27
59
|
switch (provider) {
|
|
28
60
|
case "openai":
|
|
@@ -144,26 +176,21 @@ const vectorStore: VectorStore = {
|
|
|
144
176
|
};`;
|
|
145
177
|
}
|
|
146
178
|
}
|
|
147
|
-
function buildChunkersSection(
|
|
148
|
-
if (
|
|
149
|
-
|
|
179
|
+
function buildChunkersSection(groups) {
|
|
180
|
+
if (groups.length === 0) {
|
|
181
|
+
groups = [EXT_GROUPS.find((g) => g.name === "typescript")];
|
|
150
182
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const patterns = JSON.stringify(
|
|
154
|
-
return ` createChunker({
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
process: async (content) => ${info.fn}()(content),
|
|
158
|
-
}),`;
|
|
159
|
-
});
|
|
160
|
-
return entries.join("\n");
|
|
183
|
+
return groups
|
|
184
|
+
.map((g) => {
|
|
185
|
+
const patterns = JSON.stringify(g.exts.map((e) => `**/*${e}`));
|
|
186
|
+
return ` createChunker({ patterns: ${patterns}, strategy: ${g.strategyFn}() }),`;
|
|
187
|
+
})
|
|
188
|
+
.join("\n");
|
|
161
189
|
}
|
|
162
190
|
function generateConfig(answers) {
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
];
|
|
191
|
+
const strategyFns = [...new Set(answers.groups.map((g) => g.strategyFn))];
|
|
192
|
+
if (strategyFns.length === 0)
|
|
193
|
+
strategyFns.push("tokenStrategy");
|
|
167
194
|
const imports = [
|
|
168
195
|
"RAGPipelineConfig",
|
|
169
196
|
"EmbeddingProvider",
|
|
@@ -174,7 +201,7 @@ function generateConfig(answers) {
|
|
|
174
201
|
].join(", ");
|
|
175
202
|
const embedderSection = buildEmbedderSection(answers.embedder);
|
|
176
203
|
const vectorStoreSection = buildVectorStoreSection(answers.vectorStore);
|
|
177
|
-
const chunkersSection = buildChunkersSection(
|
|
204
|
+
const chunkersSection = buildChunkersSection(answers.groups);
|
|
178
205
|
return `import { ${imports} } from '@vivantel/rag-core';
|
|
179
206
|
|
|
180
207
|
${embedderSection}
|
|
@@ -198,15 +225,31 @@ export default config;
|
|
|
198
225
|
}
|
|
199
226
|
export async function runInit() {
|
|
200
227
|
console.log("\n🚀 RAG Config Generator\n");
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
228
|
+
console.log("Scanning project for file types...");
|
|
229
|
+
const detectedGroups = await detectFileExtensions(process.cwd());
|
|
230
|
+
let selectedGroups;
|
|
231
|
+
if (detectedGroups.length > 0) {
|
|
232
|
+
const confirmed = await checkbox({
|
|
233
|
+
message: "Detected file types — select which to index:",
|
|
234
|
+
choices: detectedGroups.map((g) => ({
|
|
235
|
+
name: `${g.name} (${g.exts.join(", ")}) → ${g.strategyFn}`,
|
|
236
|
+
value: g,
|
|
237
|
+
checked: true,
|
|
238
|
+
})),
|
|
239
|
+
});
|
|
240
|
+
selectedGroups = confirmed;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.log("No known file types detected. Choose strategies manually:");
|
|
244
|
+
const strategyNames = await checkbox({
|
|
245
|
+
message: "Which chunking strategies do you need?",
|
|
246
|
+
choices: EXT_GROUPS.map((g) => ({
|
|
247
|
+
name: `${g.name} (${g.strategyFn})`,
|
|
248
|
+
value: g,
|
|
249
|
+
})),
|
|
250
|
+
});
|
|
251
|
+
selectedGroups = strategyNames;
|
|
252
|
+
}
|
|
210
253
|
const embedder = await select({
|
|
211
254
|
message: "Which embedding provider?",
|
|
212
255
|
choices: [
|
|
@@ -247,7 +290,7 @@ export async function runInit() {
|
|
|
247
290
|
}
|
|
248
291
|
}
|
|
249
292
|
const config = generateConfig({
|
|
250
|
-
|
|
293
|
+
groups: selectedGroups,
|
|
251
294
|
embedder,
|
|
252
295
|
vectorStore,
|
|
253
296
|
outputPath,
|
package/dist/cli/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import { FileChunker, Chunk } from "../interfaces/index.js";
|
|
2
|
-
|
|
1
|
+
import { FileChunker, ChunkStrategy, Chunk } from "../interfaces/index.js";
|
|
2
|
+
type WithStrategy = {
|
|
3
|
+
strategy: ChunkStrategy;
|
|
4
|
+
process?: never;
|
|
5
|
+
name?: string;
|
|
6
|
+
};
|
|
7
|
+
type WithProcess = {
|
|
8
|
+
process: (content: string, filePath: string, commitHash: string) => Promise<Chunk[]>;
|
|
9
|
+
strategy?: never;
|
|
3
10
|
name: string;
|
|
11
|
+
};
|
|
12
|
+
export type CreateChunkerOptions = {
|
|
4
13
|
patterns: string[];
|
|
5
|
-
process: (content: string, filePath: string, commitHash: string) => Promise<Chunk[]>;
|
|
6
14
|
canProcess?: (filePath: string, content?: string) => Promise<boolean>;
|
|
7
|
-
}
|
|
15
|
+
} & (WithStrategy | WithProcess);
|
|
8
16
|
export declare function createChunker(options: CreateChunkerOptions): FileChunker;
|
|
17
|
+
export {};
|
|
9
18
|
//# sourceMappingURL=create-chunker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-chunker.d.ts","sourceRoot":"","sources":["../../src/helpers/create-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-chunker.d.ts","sourceRoot":"","sources":["../../src/helpers/create-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE3E,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;AAEjC,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CA0CxE"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
export function createChunker(options) {
|
|
2
|
+
let name;
|
|
3
|
+
let processContent;
|
|
4
|
+
if (options.strategy != null) {
|
|
5
|
+
name = options.name ?? `${options.strategy.name}:${options.patterns[0]}`;
|
|
6
|
+
const strategy = options.strategy;
|
|
7
|
+
processContent = (content, filePath) => strategy.chunk(content, filePath);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
name = options.name;
|
|
11
|
+
processContent = options.process;
|
|
12
|
+
}
|
|
2
13
|
return {
|
|
3
|
-
name
|
|
14
|
+
name,
|
|
4
15
|
patterns: options.patterns,
|
|
5
16
|
async chunk(filePath, commitHash) {
|
|
6
17
|
const { readFile } = await import("fs/promises");
|
|
@@ -11,7 +22,7 @@ export function createChunker(options) {
|
|
|
11
22
|
return [];
|
|
12
23
|
}
|
|
13
24
|
}
|
|
14
|
-
return
|
|
25
|
+
return processContent(content, filePath, commitHash);
|
|
15
26
|
},
|
|
16
27
|
async canProcess(filePath, content) {
|
|
17
28
|
if (options.canProcess) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-chunker.js","sourceRoot":"","sources":["../../src/helpers/create-chunker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-chunker.js","sourceRoot":"","sources":["../../src/helpers/create-chunker.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,IAAI,IAAY,CAAC;IACjB,IAAI,cAIiB,CAAC;IAEtB,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACpB,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IAED,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAE1B,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,UAAkB;YAC9C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAElD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,OAAgB;YACjD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|