@vivantel/rag-core 2.0.0 → 2.1.1

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;AAsLD,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,38 +176,27 @@ 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
- ];
167
- const imports = [
168
- "RAGPipelineConfig",
169
- "EmbeddingProvider",
170
- "VectorStore",
171
- "VectorSearchResult",
172
- "createChunker",
173
- ...strategyFns,
174
- ].join(", ");
191
+ const strategyFns = [...new Set(answers.groups.map((g) => g.strategyFn))];
192
+ if (strategyFns.length === 0)
193
+ strategyFns.push("tokenStrategy");
194
+ const valueImports = ["createChunker", ...strategyFns].join(", ");
175
195
  const embedderSection = buildEmbedderSection(answers.embedder);
176
196
  const vectorStoreSection = buildVectorStoreSection(answers.vectorStore);
177
- const chunkersSection = buildChunkersSection(selectedStrategies);
178
- return `import { ${imports} } from '@vivantel/rag-core';
197
+ const chunkersSection = buildChunkersSection(answers.groups);
198
+ return `import type { RAGPipelineConfig, EmbeddingProvider, VectorStore, VectorSearchResult } from '@vivantel/rag-core';
199
+ import { ${valueImports} } from '@vivantel/rag-core';
179
200
 
180
201
  ${embedderSection}
181
202
 
@@ -198,15 +219,31 @@ export default config;
198
219
  }
199
220
  export async function runInit() {
200
221
  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
- });
222
+ console.log("Scanning project for file types...");
223
+ const detectedGroups = await detectFileExtensions(process.cwd());
224
+ let selectedGroups;
225
+ if (detectedGroups.length > 0) {
226
+ const confirmed = await checkbox({
227
+ message: "Detected file types select which to index:",
228
+ choices: detectedGroups.map((g) => ({
229
+ name: `${g.name} (${g.exts.join(", ")}) → ${g.strategyFn}`,
230
+ value: g,
231
+ checked: true,
232
+ })),
233
+ });
234
+ selectedGroups = confirmed;
235
+ }
236
+ else {
237
+ console.log("No known file types detected. Choose strategies manually:");
238
+ const strategyNames = await checkbox({
239
+ message: "Which chunking strategies do you need?",
240
+ choices: EXT_GROUPS.map((g) => ({
241
+ name: `${g.name} (${g.strategyFn})`,
242
+ value: g,
243
+ })),
244
+ });
245
+ selectedGroups = strategyNames;
246
+ }
210
247
  const embedder = await select({
211
248
  message: "Which embedding provider?",
212
249
  choices: [
@@ -247,7 +284,7 @@ export async function runInit() {
247
284
  }
248
285
  }
249
286
  const config = generateConfig({
250
- strategies,
287
+ groups: selectedGroups,
251
288
  embedder,
252
289
  vectorStore,
253
290
  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.1",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  "packages/*"