@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 CHANGED
@@ -15,34 +15,54 @@ npm install @vivantel/rag-core
15
15
 
16
16
  ## Quick Start
17
17
 
18
- ### 1. Create a config file (`rag.config.ts`)
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 { defineConfig, createChunker, tokenStrategy } from '@vivantel/rag-core';
22
- import { readFile } from 'fs/promises';
29
+ import {
30
+ RAGPipelineConfig,
31
+ createChunker,
32
+ markdownHeadersStrategy,
33
+ tokenStrategy,
34
+ } from '@vivantel/rag-core';
23
35
 
24
- export default defineConfig({
36
+ const config: RAGPipelineConfig = {
25
37
  chunkers: [
26
- createChunker({
27
- name: 'my-chunker',
28
- patterns: ['docs/**/*.md'],
29
- async process(content, filePath, commitHash) {
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
- ### 2. Run the pipeline
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
- ### Chunk Strategies
54
-
55
- - `tokenStrategy({ maxTokens, overlap })` - Split by approximate token count
56
- - `markdownHeadersStrategy()` - Split by Markdown headers (##, ###)
57
- - `semanticStrategy()` - Split by sentence boundaries
58
- - `wholeFileStrategy()` - One chunk per file
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
 
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAgOA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAqE7C"}
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
- const STRATEGY_INFO = {
5
- token: {
6
- fn: "tokenStrategy",
7
- description: "Token-based chunking (source code, structured text)",
8
- patterns: ["src/**/*.ts", "src/**/*.js"],
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
- markdown: {
11
- fn: "markdownHeadersStrategy",
12
- description: "Markdown header-aware chunking (documentation)",
13
- patterns: ["docs/**/*.md", "*.md"],
14
- },
15
- semantic: {
16
- fn: "semanticStrategy",
17
- description: "Semantic paragraph chunking (prose, articles)",
18
- patterns: ["**/*.txt"],
19
- },
20
- "whole-file": {
21
- fn: "wholeFileStrategy",
22
- description: "Treat each file as one chunk (small configs, YAML)",
23
- patterns: ["**/*.yaml", "**/*.yml"],
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(strategies) {
148
- if (strategies.length === 0) {
149
- strategies = ["token"];
179
+ function buildChunkersSection(groups) {
180
+ if (groups.length === 0) {
181
+ groups = [EXT_GROUPS.find((g) => g.name === "typescript")];
150
182
  }
151
- const entries = strategies.map((s) => {
152
- const info = STRATEGY_INFO[s];
153
- const patterns = JSON.stringify(info.patterns);
154
- return ` createChunker({
155
- name: '${s}',
156
- patterns: ${patterns},
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 selectedStrategies = answers.strategies.length > 0 ? answers.strategies : ["token"];
164
- const strategyFns = [
165
- ...new Set(selectedStrategies.map((s) => STRATEGY_INFO[s].fn)),
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(selectedStrategies);
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
- const strategies = await checkbox({
202
- message: "Which chunking strategies do you need?",
203
- choices: [
204
- { name: "Token (source code, structured text)", value: "token" },
205
- { name: "Markdown headers (documentation)", value: "markdown" },
206
- { name: "Semantic paragraphs (prose, articles)", value: "semantic" },
207
- { name: "Whole file (small configs, YAML)", value: "whole-file" },
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
- strategies,
293
+ groups: selectedGroups,
251
294
  embedder,
252
295
  vectorStore,
253
296
  outputPath,
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
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
- export interface CreateChunkerOptions {
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;AAE5D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CA0BxE"}
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: options.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 options.process(content, filePath, commitHash);
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":"AAaA,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,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,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vivantel/rag-core",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  "packages/*"