@vivantel/rag-core 1.1.3 → 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.
Files changed (61) hide show
  1. package/README.md +46 -26
  2. package/dist/bin/rag-update.d.ts +3 -0
  3. package/dist/bin/rag-update.d.ts.map +1 -0
  4. package/dist/bin/rag-update.js +116 -0
  5. package/dist/bin/rag-update.js.map +1 -0
  6. package/dist/cli/init.d.ts +9 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +305 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/validate.d.ts +2 -0
  11. package/dist/cli/validate.d.ts.map +1 -0
  12. package/dist/cli/validate.js +54 -0
  13. package/dist/cli/validate.js.map +1 -0
  14. package/dist/config-loader.d.ts.map +1 -1
  15. package/dist/config-loader.js +73 -5
  16. package/dist/config-loader.js.map +1 -1
  17. package/dist/core/chunk-processor.d.ts +1 -1
  18. package/dist/core/chunk-processor.d.ts.map +1 -1
  19. package/dist/core/chunk-processor.js +23 -1
  20. package/dist/core/chunk-processor.js.map +1 -1
  21. package/dist/core/embedder.d.ts +5 -1
  22. package/dist/core/embedder.d.ts.map +1 -1
  23. package/dist/core/embedder.js +33 -29
  24. package/dist/core/embedder.js.map +1 -1
  25. package/dist/core/errors.d.ts +16 -0
  26. package/dist/core/errors.d.ts.map +1 -0
  27. package/dist/core/errors.js +17 -0
  28. package/dist/core/errors.js.map +1 -0
  29. package/dist/core/orchestrator.d.ts +8 -0
  30. package/dist/core/orchestrator.d.ts.map +1 -1
  31. package/dist/core/orchestrator.js +134 -39
  32. package/dist/core/orchestrator.js.map +1 -1
  33. package/dist/core/plugin-discovery.d.ts +19 -0
  34. package/dist/core/plugin-discovery.d.ts.map +1 -0
  35. package/dist/core/plugin-discovery.js +47 -0
  36. package/dist/core/plugin-discovery.js.map +1 -0
  37. package/dist/core/telemetry.d.ts +61 -0
  38. package/dist/core/telemetry.d.ts.map +1 -0
  39. package/dist/core/telemetry.js +50 -0
  40. package/dist/core/telemetry.js.map +1 -0
  41. package/dist/core/uploader.d.ts +5 -1
  42. package/dist/core/uploader.d.ts.map +1 -1
  43. package/dist/core/uploader.js +11 -4
  44. package/dist/core/uploader.js.map +1 -1
  45. package/dist/core/utils.d.ts +7 -0
  46. package/dist/core/utils.d.ts.map +1 -1
  47. package/dist/core/utils.js +35 -0
  48. package/dist/core/utils.js.map +1 -1
  49. package/dist/helpers/create-chunker.d.ts +13 -4
  50. package/dist/helpers/create-chunker.d.ts.map +1 -1
  51. package/dist/helpers/create-chunker.js +13 -2
  52. package/dist/helpers/create-chunker.js.map +1 -1
  53. package/dist/index.d.ts +14 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +14 -2
  56. package/dist/index.js.map +1 -1
  57. package/dist/interfaces/embedder.d.ts +2 -0
  58. package/dist/interfaces/embedder.d.ts.map +1 -1
  59. package/dist/interfaces/vector-store.d.ts +2 -0
  60. package/dist/interfaces/vector-store.d.ts.map +1 -1
  61. package/package.json +8 -2
@@ -1,11 +1,79 @@
1
1
  import { pathToFileURL } from "url";
2
+ import { ConfigError } from "./core/errors.js";
3
+ function validateConfig(config) {
4
+ if (!config || typeof config !== "object") {
5
+ throw new ConfigError("Config must be a non-null object", {
6
+ suggestion: "Ensure your config file has a default export: `export default { chunkers, embedder, vectorStore }`.",
7
+ });
8
+ }
9
+ const c = config;
10
+ if (!Array.isArray(c.chunkers) || c.chunkers.length === 0) {
11
+ throw new ConfigError("config.chunkers must be a non-empty array", {
12
+ suggestion: "Add at least one chunker using createChunker() or implementing FileChunker.",
13
+ });
14
+ }
15
+ for (let i = 0; i < c.chunkers.length; i++) {
16
+ const chunker = c.chunkers[i];
17
+ if (typeof chunker.name !== "string" || !chunker.name) {
18
+ throw new ConfigError(`config.chunkers[${i}].name must be a non-empty string`);
19
+ }
20
+ if (!Array.isArray(chunker.patterns) || chunker.patterns.length === 0) {
21
+ throw new ConfigError(`config.chunkers[${i}] ("${chunker.name}") must have a non-empty patterns array`);
22
+ }
23
+ if (typeof chunker.chunk !== "function") {
24
+ throw new ConfigError(`config.chunkers[${i}] ("${chunker.name}") must implement chunk(filePath, commitHash)`);
25
+ }
26
+ }
27
+ if (!c.embedder || typeof c.embedder !== "object") {
28
+ throw new ConfigError("config.embedder is required", {
29
+ suggestion: "Provide an object implementing EmbeddingProvider with at least name, dimensions, and embed().",
30
+ });
31
+ }
32
+ const emb = c.embedder;
33
+ if (typeof emb.name !== "string") {
34
+ throw new ConfigError("config.embedder.name must be a string");
35
+ }
36
+ if (typeof emb.dimensions !== "number") {
37
+ throw new ConfigError("config.embedder.dimensions must be a number (the vector output size)");
38
+ }
39
+ if (typeof emb.embed !== "function") {
40
+ throw new ConfigError("config.embedder must implement embed(text: string): Promise<number[]>");
41
+ }
42
+ if (!c.vectorStore || typeof c.vectorStore !== "object") {
43
+ throw new ConfigError("config.vectorStore is required", {
44
+ suggestion: "Provide an object implementing VectorStore with initialize, upsert, deleteBySourceFile, getCurrentState, and search.",
45
+ });
46
+ }
47
+ const vs = c.vectorStore;
48
+ const required = [
49
+ "initialize",
50
+ "upsert",
51
+ "deleteBySourceFile",
52
+ "getCurrentState",
53
+ "search",
54
+ ];
55
+ for (const method of required) {
56
+ if (typeof vs[method] !== "function") {
57
+ throw new ConfigError(`config.vectorStore.${method} must be a function`, {
58
+ suggestion: `Implement ${method}() on your VectorStore object.`,
59
+ });
60
+ }
61
+ }
62
+ }
2
63
  export async function loadConfig(configPath) {
3
- const configUrl = pathToFileURL(configPath).href;
4
- const configModule = await import(configUrl);
5
- const config = configModule.default;
6
- if (!config.chunkers || !config.embedder || !config.vectorStore) {
7
- throw new Error("Invalid config: missing chunkers, embedder, or vectorStore");
64
+ let configModule;
65
+ try {
66
+ const configUrl = pathToFileURL(configPath).href;
67
+ configModule = await import(configUrl);
68
+ }
69
+ catch (err) {
70
+ throw new ConfigError(`Cannot load config file: ${configPath}`, {
71
+ suggestion: "Run `rag-update init` to generate a starter config, or check that the path is correct.",
72
+ cause: err,
73
+ });
8
74
  }
75
+ const config = configModule.default;
76
+ validateConfig(config);
9
77
  return config;
10
78
  }
11
79
  //# sourceMappingURL=config-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAkB;IAElB,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;IACjD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC;IAEpC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare class ChunkProcessor {
6
6
  processFiles(files: string[], fileState: Map<string, {
7
7
  commitHash: string;
8
8
  chunker: FileChunker;
9
- }>): Promise<Chunk[]>;
9
+ }>, existingChunks?: Chunk[]): Promise<Chunk[]>;
10
10
  saveChunksLocal(chunks: Chunk[], outputFile: string): Promise<void>;
11
11
  }
12
12
  //# sourceMappingURL=chunk-processor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-processor.d.ts","sourceRoot":"","sources":["../../src/core/chunk-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO5D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,QAAQ,EAAE,WAAW,EAAE;IAI7B,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,KAAK,EAAE,CAAC;IAYb,YAAY,CAChB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,GACnE,OAAO,CAAC,KAAK,EAAE,CAAC;IAyCb,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB1E"}
1
+ {"version":3,"file":"chunk-processor.d.ts","sourceRoot":"","sources":["../../src/core/chunk-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO5D,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA2B;gBAE/B,QAAQ,EAAE,WAAW,EAAE;IAI7B,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,KAAK,EAAE,CAAC;IAYb,YAAY,CAChB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC,EACpE,cAAc,GAAE,KAAK,EAAO,GAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;IAmEb,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB1E"}
@@ -16,9 +16,23 @@ export class ChunkProcessor {
16
16
  }
17
17
  return chunks;
18
18
  }
19
- async processFiles(files, fileState) {
19
+ async processFiles(files, fileState, existingChunks = []) {
20
20
  const allChunks = [];
21
21
  let errorCount = 0;
22
+ // Build resume cache: sourceFile → { commitHash, chunks }
23
+ const resumeCache = new Map();
24
+ for (const chunk of existingChunks) {
25
+ const entry = resumeCache.get(chunk.sourceFile);
26
+ if (!entry) {
27
+ resumeCache.set(chunk.sourceFile, {
28
+ commitHash: chunk.commitHash,
29
+ chunks: [chunk],
30
+ });
31
+ }
32
+ else {
33
+ entry.chunks.push(chunk);
34
+ }
35
+ }
22
36
  for (let i = 0; i < files.length; i++) {
23
37
  const filePath = files[i];
24
38
  const info = fileState.get(filePath);
@@ -26,6 +40,14 @@ export class ChunkProcessor {
26
40
  console.log(` ⚠️ No chunker for: ${filePath}`);
27
41
  continue;
28
42
  }
43
+ // Resume: reuse cached chunks when commitHash matches
44
+ const cached = resumeCache.get(filePath);
45
+ if (cached && cached.commitHash === info.commitHash) {
46
+ console.log(` [${i + 1}/${files.length}] ${filePath}`);
47
+ console.log(` ⏭️ Cached (${cached.chunks.length} chunk(s))`);
48
+ allChunks.push(...cached.chunks);
49
+ continue;
50
+ }
29
51
  console.log(` [${i + 1}/${files.length}] ${filePath}`);
30
52
  try {
31
53
  const chunks = await this.processFile(filePath, info.commitHash, info.chunker);
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-processor.js","sourceRoot":"","sources":["../../src/core/chunk-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunk-processor.js","sourceRoot":"","sources":["../../src/core/chunk-processor.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,17 @@
1
1
  import { EmbeddingProvider, EmbeddedChunk, Chunk } from "../interfaces/index.js";
2
+ import { RetryOptions } from "./utils.js";
2
3
  export declare class EmbedderProcessor {
3
4
  private provider;
4
5
  private rateLimitMs;
5
6
  private batchSize;
7
+ private retryOptions;
8
+ private concurrency;
6
9
  constructor(provider: EmbeddingProvider, options?: {
7
10
  rateLimitMs?: number;
8
11
  batchSize?: number;
12
+ retry?: RetryOptions;
13
+ concurrency?: number;
9
14
  });
10
- private sleep;
11
15
  embedChunk(chunk: Chunk): Promise<EmbeddedChunk>;
12
16
  embedBatch(chunks: Chunk[]): Promise<EmbeddedChunk[]>;
13
17
  getChunksToEmbed(chunksFile: string, force?: boolean): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,EACN,MAAM,wBAAwB,CAAC;AAUhC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAGxB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO;YAO9C,KAAK;IAIb,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAUhD,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA2CrD,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC;QACT,aAAa,EAAE,KAAK,EAAE,CAAC;KACxB,CAAC;IAmDI,cAAc,CAClB,aAAa,EAAE,aAAa,EAAE,EAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,IAAI,CAAC;IAoCV,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC;CAiB5B"}
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,EACN,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAqC,YAAY,EAAE,MAAM,YAAY,CAAC;AAO7E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;gBAG1B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACjB;IASF,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;IAahD,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+CrD,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC;QACT,aAAa,EAAE,KAAK,EAAE,CAAC;KACxB,CAAC;IAuDI,cAAc,CAClB,aAAa,EAAE,aAAa,EAAE,EAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,IAAI,CAAC;IAoCV,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC;CAiB5B"}
@@ -1,6 +1,8 @@
1
1
  import { readFile, writeFile, mkdir } from "fs/promises";
2
2
  import { dirname } from "path";
3
3
  import { createHash } from "crypto";
4
+ import { EmbedError } from "./errors.js";
5
+ import { sleep, withRetry, withConcurrency } from "./utils.js";
4
6
  function chunkContentHash(chunk) {
5
7
  if (chunk.contentHash)
6
8
  return chunk.contentHash;
@@ -10,16 +12,17 @@ export class EmbedderProcessor {
10
12
  provider;
11
13
  rateLimitMs;
12
14
  batchSize;
15
+ retryOptions;
16
+ concurrency;
13
17
  constructor(provider, options = {}) {
14
18
  this.provider = provider;
15
19
  this.rateLimitMs = options.rateLimitMs ?? 500;
16
20
  this.batchSize = options.batchSize ?? 10;
17
- }
18
- async sleep(ms) {
19
- return new Promise((resolve) => setTimeout(resolve, ms));
21
+ this.retryOptions = options.retry ?? {};
22
+ this.concurrency = options.concurrency ?? 1;
20
23
  }
21
24
  async embedChunk(chunk) {
22
- const embedding = await this.provider.embed(chunk.content);
25
+ const embedding = await withRetry(() => this.provider.embed(chunk.content), this.retryOptions);
23
26
  return {
24
27
  ...chunk,
25
28
  embedding,
@@ -27,37 +30,35 @@ export class EmbedderProcessor {
27
30
  };
28
31
  }
29
32
  async embedBatch(chunks) {
30
- const results = [];
31
33
  if (this.provider.embedBatch && chunks.length >= this.batchSize) {
32
34
  const texts = chunks.map((c) => c.content);
33
- const embeddings = await this.provider.embedBatch(texts);
35
+ const embeddings = await withRetry(() => this.provider.embedBatch(texts), this.retryOptions);
34
36
  if (embeddings.length !== chunks.length) {
35
- throw new Error(`embedBatch returned ${embeddings.length} embeddings for ${chunks.length} chunks`);
36
- }
37
- for (let i = 0; i < chunks.length; i++) {
38
- results.push({
39
- ...chunks[i],
40
- embedding: embeddings[i],
41
- embeddedAt: Date.now() / 1000,
37
+ throw new EmbedError(`embedBatch returned ${embeddings.length} embeddings for ${chunks.length} chunks`, {
38
+ suggestion: "Check that your EmbeddingProvider.embedBatch() returns one vector per input text.",
42
39
  });
43
40
  }
41
+ return chunks.map((chunk, i) => ({
42
+ ...chunk,
43
+ embedding: embeddings[i],
44
+ embeddedAt: Date.now() / 1000,
45
+ }));
44
46
  }
45
- else {
46
- for (let i = 0; i < chunks.length; i++) {
47
- const chunk = chunks[i];
48
- const eventType = chunk.metadata.event_type ||
49
- chunk.metadata.title ||
50
- chunk.sourceFile.split("/").pop() ||
51
- "unknown";
52
- console.log(` [${i + 1}/${chunks.length}] ${eventType}`);
53
- const embedded = await this.embedChunk(chunk);
54
- results.push(embedded);
55
- if (this.rateLimitMs > 0 && i < chunks.length - 1) {
56
- await this.sleep(this.rateLimitMs);
57
- }
47
+ let completed = 0;
48
+ const tasks = chunks.map((chunk) => async () => {
49
+ const label = chunk.metadata.event_type ||
50
+ chunk.metadata.title ||
51
+ chunk.sourceFile.split("/").pop() ||
52
+ "unknown";
53
+ const embedded = await this.embedChunk(chunk);
54
+ completed++;
55
+ console.log(` [${completed}/${chunks.length}] ${label}`);
56
+ if (this.rateLimitMs > 0) {
57
+ await sleep(this.rateLimitMs);
58
58
  }
59
- }
60
- return results;
59
+ return embedded;
60
+ });
61
+ return withConcurrency(tasks, this.concurrency);
61
62
  }
62
63
  async getChunksToEmbed(chunksFile, force = false) {
63
64
  let chunks;
@@ -70,7 +71,10 @@ export class EmbedderProcessor {
70
71
  chunks = parsed;
71
72
  }
72
73
  catch (err) {
73
- throw new Error(`Failed to load chunks from ${chunksFile}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
74
+ throw new EmbedError(`Failed to load chunks from ${chunksFile}: ${err instanceof Error ? err.message : String(err)}`, {
75
+ suggestion: "Run the pipeline without --skip-upload to regenerate chunks first.",
76
+ cause: err,
77
+ });
74
78
  }
75
79
  console.log(`📖 Loaded ${chunks.length} chunks from ${chunksFile}`);
76
80
  if (force) {
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/core/embedder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare class RagError extends Error {
2
+ suggestion?: string;
3
+ constructor(message: string, options?: {
4
+ suggestion?: string;
5
+ cause?: unknown;
6
+ });
7
+ }
8
+ export declare class ConfigError extends RagError {
9
+ }
10
+ export declare class ChunkError extends RagError {
11
+ }
12
+ export declare class EmbedError extends RagError {
13
+ }
14
+ export declare class UploadError extends RagError {
15
+ }
16
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CASrD;AAED,qBAAa,WAAY,SAAQ,QAAQ;CAAG;AAC5C,qBAAa,UAAW,SAAQ,QAAQ;CAAG;AAC3C,qBAAa,UAAW,SAAQ,QAAQ;CAAG;AAC3C,qBAAa,WAAY,SAAQ,QAAQ;CAAG"}
@@ -0,0 +1,17 @@
1
+ export class RagError extends Error {
2
+ suggestion;
3
+ constructor(message, options) {
4
+ super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
5
+ this.name = this.constructor.name;
6
+ this.suggestion = options?.suggestion;
7
+ }
8
+ }
9
+ export class ConfigError extends RagError {
10
+ }
11
+ export class ChunkError extends RagError {
12
+ }
13
+ export class EmbedError extends RagError {
14
+ }
15
+ export class UploadError extends RagError {
16
+ }
17
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,UAAU,CAAU;IAEpB,YACE,OAAe,EACf,OAAkD;QAElD,KAAK,CACH,OAAO,EACP,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CACpE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG;AAC5C,MAAM,OAAO,UAAW,SAAQ,QAAQ;CAAG;AAC3C,MAAM,OAAO,UAAW,SAAQ,QAAQ;CAAG;AAC3C,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG"}
@@ -1,4 +1,5 @@
1
1
  import { FileChunker, EmbeddingProvider, VectorStore } from "../interfaces/index.js";
2
+ import { RetryOptions } from "./utils.js";
2
3
  export interface RAGPipelineConfig {
3
4
  chunkers: FileChunker[];
4
5
  embedder: EmbeddingProvider;
@@ -8,8 +9,15 @@ export interface RAGPipelineConfig {
8
9
  embeddingsFile?: string;
9
10
  force?: boolean;
10
11
  skipUpload?: boolean;
12
+ dryRun?: boolean;
11
13
  rateLimitMs?: number;
12
14
  batchSize?: number;
15
+ retry?: RetryOptions;
16
+ concurrency?: number;
17
+ telemetry?: boolean;
18
+ notifications?: {
19
+ webhookUrl?: string;
20
+ };
13
21
  };
14
22
  }
15
23
  export declare class Orchestrator {
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAGhC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAqBD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,iBAAiB;IAO/B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+D3B"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,aAAa,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACzC,CAAC;CACH;AA+CD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,iBAAiB;IAO/B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+J3B"}
@@ -2,6 +2,7 @@ import { GitTracker } from "./git-tracker.js";
2
2
  import { ChunkProcessor } from "./chunk-processor.js";
3
3
  import { EmbedderProcessor } from "./embedder.js";
4
4
  import { Uploader } from "./uploader.js";
5
+ import { TelemetryCollector } from "./telemetry.js";
5
6
  import { readFile } from "fs/promises";
6
7
  async function loadPreviousState(chunksFile) {
7
8
  try {
@@ -21,6 +22,28 @@ async function loadPreviousState(chunksFile) {
21
22
  return new Map();
22
23
  }
23
24
  }
25
+ async function loadExistingChunks(chunksFile) {
26
+ try {
27
+ const content = await readFile(chunksFile, "utf-8");
28
+ const parsed = JSON.parse(content);
29
+ return Array.isArray(parsed) ? parsed : [];
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ async function notifyWebhook(url, status, payload) {
36
+ try {
37
+ await fetch(url, {
38
+ method: "POST",
39
+ headers: { "Content-Type": "application/json" },
40
+ body: JSON.stringify({ status, ...payload }),
41
+ });
42
+ }
43
+ catch {
44
+ // Notification failures are non-fatal
45
+ }
46
+ }
24
47
  export class Orchestrator {
25
48
  config;
26
49
  chunksFile;
@@ -32,47 +55,119 @@ export class Orchestrator {
32
55
  config.options?.embeddingsFile || "./docs/rag/embeddings.json";
33
56
  }
34
57
  async run() {
35
- console.log("🚀 Starting RAG pipeline...\n");
36
- console.log("📂 Step 1: Scanning for changes...");
37
- const gitTracker = new GitTracker(this.config.chunkers);
38
- const currentState = await gitTracker.getCurrentState();
39
- const previousState = this.config.options?.force
40
- ? new Map()
41
- : await loadPreviousState(this.chunksFile);
42
- const { toProcess, toDelete } = await gitTracker.getChangedFiles(previousState);
43
- if (toProcess.length === 0 &&
44
- toDelete.length === 0 &&
45
- !this.config.options?.force) {
46
- console.log("\n✨ No changes detected.");
47
- return;
48
- }
49
- console.log(`\n📊 Changes: ${toProcess.length} to process, ${toDelete.length} to delete\n`);
50
- console.log("🔪 Step 2: Generating chunks...");
51
- const chunkProcessor = new ChunkProcessor(this.config.chunkers);
52
- const fileState = new Map();
53
- for (const file of toProcess) {
54
- const info = currentState.get(file);
55
- if (info)
56
- fileState.set(file, info);
57
- }
58
- const chunks = await chunkProcessor.processFiles(toProcess, fileState);
59
- await chunkProcessor.saveChunksLocal(chunks, this.chunksFile);
60
- if (chunks.length === 0) {
61
- console.log("\n⚠️ No chunks generated. Exiting.");
62
- return;
58
+ const opts = this.config.options ?? {};
59
+ const telemetry = opts.telemetry ? new TelemetryCollector() : null;
60
+ telemetry?.start();
61
+ let uploadStats = { uploaded: 0, deleted: 0 };
62
+ try {
63
+ console.log("🚀 Starting RAG pipeline...\n");
64
+ // Step 1: Scan for changes
65
+ console.log("📂 Step 1: Scanning for changes...");
66
+ const t1 = Date.now();
67
+ const gitTracker = new GitTracker(this.config.chunkers);
68
+ const currentState = await gitTracker.getCurrentState();
69
+ const previousState = opts.force
70
+ ? new Map()
71
+ : await loadPreviousState(this.chunksFile);
72
+ const { toProcess, toDelete } = await gitTracker.getChangedFiles(previousState);
73
+ telemetry?.recordGitTracking({
74
+ durationMs: Date.now() - t1,
75
+ filesScanned: currentState.size,
76
+ toProcess: toProcess.length,
77
+ toDelete: toDelete.length,
78
+ });
79
+ if (toProcess.length === 0 && toDelete.length === 0 && !opts.force) {
80
+ console.log("\n✨ No changes detected.");
81
+ return;
82
+ }
83
+ console.log(`\n📊 Changes: ${toProcess.length} to process, ${toDelete.length} to delete\n`);
84
+ // Step 2: Generate chunks (with resume)
85
+ console.log("🔪 Step 2: Generating chunks...");
86
+ const t2 = Date.now();
87
+ const chunkProcessor = new ChunkProcessor(this.config.chunkers);
88
+ const fileState = new Map();
89
+ for (const file of toProcess) {
90
+ const info = currentState.get(file);
91
+ if (info)
92
+ fileState.set(file, info);
93
+ }
94
+ const existingChunks = opts.force
95
+ ? []
96
+ : await loadExistingChunks(this.chunksFile);
97
+ const chunks = await chunkProcessor.processFiles(toProcess, fileState, existingChunks);
98
+ await chunkProcessor.saveChunksLocal(chunks, this.chunksFile);
99
+ telemetry?.recordChunking({
100
+ durationMs: Date.now() - t2,
101
+ filesProcessed: toProcess.length,
102
+ chunksGenerated: chunks.length,
103
+ errors: 0,
104
+ });
105
+ if (chunks.length === 0) {
106
+ console.log("\n⚠️ No chunks generated. Exiting.");
107
+ return;
108
+ }
109
+ // Step 3: Generate embeddings
110
+ console.log("\n🔢 Step 3: Generating embeddings...");
111
+ const t3 = Date.now();
112
+ const embedder = new EmbedderProcessor(this.config.embedder, {
113
+ rateLimitMs: opts.rateLimitMs,
114
+ batchSize: opts.batchSize,
115
+ retry: opts.retry,
116
+ concurrency: opts.concurrency,
117
+ });
118
+ const newEmbeddings = await embedder.run(this.chunksFile, opts.force || false);
119
+ telemetry?.recordEmbedding({
120
+ durationMs: Date.now() - t3,
121
+ chunksEmbedded: newEmbeddings.length,
122
+ chunksSkipped: chunks.length - newEmbeddings.length,
123
+ });
124
+ // Step 4: Upload
125
+ if (opts.dryRun) {
126
+ const uploader = new Uploader(this.config.vectorStore);
127
+ const { toUpload: dryUpload, toDelete: dryDelete } = await uploader.getItemsToUpload(this.embeddingsFile, opts.force || false);
128
+ console.log("\n📤 Step 4: Upload (dry-run — no changes written)");
129
+ console.log(` Would upload: ${dryUpload.length} document(s)`);
130
+ console.log(` Would delete: ${dryDelete.length} source file(s)`);
131
+ }
132
+ else if (!opts.skipUpload) {
133
+ console.log("\n📤 Step 4: Uploading to vector store...");
134
+ const t4 = Date.now();
135
+ const uploader = new Uploader(this.config.vectorStore, {
136
+ retry: opts.retry,
137
+ });
138
+ uploadStats = await uploader.sync(this.embeddingsFile, opts.force || false);
139
+ telemetry?.recordUpload({
140
+ durationMs: Date.now() - t4,
141
+ uploaded: uploadStats.uploaded,
142
+ deleted: uploadStats.deleted,
143
+ });
144
+ }
145
+ console.log("\n✨ RAG pipeline complete!");
146
+ if (telemetry) {
147
+ telemetry.finish();
148
+ telemetry.printSummary();
149
+ const telemetryFile = this.chunksFile.replace("chunks.json", "telemetry.json");
150
+ await telemetry.save(telemetryFile);
151
+ }
152
+ if (opts.notifications?.webhookUrl) {
153
+ await notifyWebhook(opts.notifications.webhookUrl, "success", {
154
+ durationMs: telemetry?.getData().durationMs,
155
+ stages: telemetry?.getData().stages,
156
+ uploaded: uploadStats.uploaded,
157
+ deleted: uploadStats.deleted,
158
+ });
159
+ }
63
160
  }
64
- console.log("\n🔢 Step 3: Generating embeddings...");
65
- const embedder = new EmbedderProcessor(this.config.embedder, {
66
- rateLimitMs: this.config.options?.rateLimitMs,
67
- batchSize: this.config.options?.batchSize,
68
- });
69
- await embedder.run(this.chunksFile, this.config.options?.force || false);
70
- if (!this.config.options?.skipUpload) {
71
- console.log("\n📤 Step 4: Uploading to vector store...");
72
- const uploader = new Uploader(this.config.vectorStore);
73
- await uploader.sync(this.embeddingsFile, this.config.options?.force || false);
161
+ catch (err) {
162
+ telemetry?.finish();
163
+ if (opts.notifications?.webhookUrl) {
164
+ await notifyWebhook(opts.notifications.webhookUrl, "error", {
165
+ error: err instanceof Error ? err.message : String(err),
166
+ durationMs: telemetry?.getData().durationMs,
167
+ });
168
+ }
169
+ throw err;
74
170
  }
75
- console.log("\n✨ RAG pipeline complete!");
76
171
  }
77
172
  }
78
173
  //# sourceMappingURL=orchestrator.js.map