@cogitator-ai/rag 0.1.9 → 0.2.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 (95) hide show
  1. package/README.md +66 -31
  2. package/dist/chunkers/create-chunker.js.map +1 -1
  3. package/dist/chunkers/index.d.ts.map +1 -1
  4. package/dist/chunkers/index.js.map +1 -1
  5. package/dist/chunkers/recursive-chunker.d.ts +2 -3
  6. package/dist/chunkers/recursive-chunker.d.ts.map +1 -1
  7. package/dist/chunkers/recursive-chunker.js +89 -118
  8. package/dist/chunkers/recursive-chunker.js.map +1 -1
  9. package/dist/chunkers/semantic-chunker.d.ts +2 -0
  10. package/dist/chunkers/semantic-chunker.d.ts.map +1 -1
  11. package/dist/chunkers/semantic-chunker.js +72 -38
  12. package/dist/chunkers/semantic-chunker.js.map +1 -1
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +4 -2
  16. package/dist/index.js.map +1 -1
  17. package/dist/loaders/csv-loader.d.ts.map +1 -1
  18. package/dist/loaders/csv-loader.js +12 -4
  19. package/dist/loaders/csv-loader.js.map +1 -1
  20. package/dist/loaders/html-loader.d.ts +4 -0
  21. package/dist/loaders/html-loader.d.ts.map +1 -1
  22. package/dist/loaders/html-loader.js +26 -2
  23. package/dist/loaders/html-loader.js.map +1 -1
  24. package/dist/loaders/index.d.ts.map +1 -1
  25. package/dist/loaders/index.js.map +1 -1
  26. package/dist/loaders/json-loader.d.ts +1 -0
  27. package/dist/loaders/json-loader.d.ts.map +1 -1
  28. package/dist/loaders/json-loader.js +15 -3
  29. package/dist/loaders/json-loader.js.map +1 -1
  30. package/dist/loaders/markdown-loader.d.ts.map +1 -1
  31. package/dist/loaders/markdown-loader.js +8 -4
  32. package/dist/loaders/markdown-loader.js.map +1 -1
  33. package/dist/loaders/pdf-loader.d.ts +1 -0
  34. package/dist/loaders/pdf-loader.d.ts.map +1 -1
  35. package/dist/loaders/pdf-loader.js +22 -3
  36. package/dist/loaders/pdf-loader.js.map +1 -1
  37. package/dist/loaders/text-loader.js +1 -1
  38. package/dist/loaders/text-loader.js.map +1 -1
  39. package/dist/loaders/web-loader.d.ts +33 -0
  40. package/dist/loaders/web-loader.d.ts.map +1 -1
  41. package/dist/loaders/web-loader.js +262 -8
  42. package/dist/loaders/web-loader.js.map +1 -1
  43. package/dist/rag-builder.d.ts +10 -1
  44. package/dist/rag-builder.d.ts.map +1 -1
  45. package/dist/rag-builder.js +71 -6
  46. package/dist/rag-builder.js.map +1 -1
  47. package/dist/rag-pipeline.d.ts +2 -1
  48. package/dist/rag-pipeline.d.ts.map +1 -1
  49. package/dist/rag-pipeline.js +58 -23
  50. package/dist/rag-pipeline.js.map +1 -1
  51. package/dist/rerankers/cohere-reranker.d.ts +2 -2
  52. package/dist/rerankers/cohere-reranker.d.ts.map +1 -1
  53. package/dist/rerankers/cohere-reranker.js +5 -0
  54. package/dist/rerankers/cohere-reranker.js.map +1 -1
  55. package/dist/rerankers/index.d.ts.map +1 -1
  56. package/dist/rerankers/index.js.map +1 -1
  57. package/dist/rerankers/llm-reranker.d.ts +1 -1
  58. package/dist/rerankers/llm-reranker.d.ts.map +1 -1
  59. package/dist/rerankers/llm-reranker.js +26 -13
  60. package/dist/rerankers/llm-reranker.js.map +1 -1
  61. package/dist/retrievers/chunk-indexer.d.ts +19 -0
  62. package/dist/retrievers/chunk-indexer.d.ts.map +1 -0
  63. package/dist/retrievers/chunk-indexer.js +8 -0
  64. package/dist/retrievers/chunk-indexer.js.map +1 -0
  65. package/dist/retrievers/create-retriever.d.ts +2 -0
  66. package/dist/retrievers/create-retriever.d.ts.map +1 -1
  67. package/dist/retrievers/create-retriever.js +6 -0
  68. package/dist/retrievers/create-retriever.js.map +1 -1
  69. package/dist/retrievers/hybrid-retriever.d.ts +8 -1
  70. package/dist/retrievers/hybrid-retriever.d.ts.map +1 -1
  71. package/dist/retrievers/hybrid-retriever.js +18 -5
  72. package/dist/retrievers/hybrid-retriever.js.map +1 -1
  73. package/dist/retrievers/index.d.ts +2 -0
  74. package/dist/retrievers/index.d.ts.map +1 -1
  75. package/dist/retrievers/index.js +1 -0
  76. package/dist/retrievers/index.js.map +1 -1
  77. package/dist/retrievers/mmr-retriever.d.ts +5 -0
  78. package/dist/retrievers/mmr-retriever.d.ts.map +1 -1
  79. package/dist/retrievers/mmr-retriever.js +34 -8
  80. package/dist/retrievers/mmr-retriever.js.map +1 -1
  81. package/dist/retrievers/multi-query-retriever.d.ts +14 -1
  82. package/dist/retrievers/multi-query-retriever.d.ts.map +1 -1
  83. package/dist/retrievers/multi-query-retriever.js +50 -6
  84. package/dist/retrievers/multi-query-retriever.js.map +1 -1
  85. package/dist/retrievers/similarity-retriever.d.ts.map +1 -1
  86. package/dist/retrievers/similarity-retriever.js +2 -1
  87. package/dist/retrievers/similarity-retriever.js.map +1 -1
  88. package/dist/schema.d.ts.map +1 -1
  89. package/dist/schema.js +16 -2
  90. package/dist/schema.js.map +1 -1
  91. package/dist/tools.d.ts +11 -2
  92. package/dist/tools.d.ts.map +1 -1
  93. package/dist/tools.js +43 -9
  94. package/dist/tools.js.map +1 -1
  95. package/package.json +5 -5
@@ -22,7 +22,7 @@ export class TextLoader {
22
22
  };
23
23
  }
24
24
  async loadDirectory(dirPath) {
25
- const entries = await readdir(dirPath);
25
+ const entries = (await readdir(dirPath)).sort();
26
26
  const docs = [];
27
27
  for (const entry of entries) {
28
28
  const ext = entry.split('.').pop()?.toLowerCase() ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"text-loader.js","sourceRoot":"","sources":["../../src/loaders/text-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"text-loader.js","sourceRoot":"","sources":["../../src/loaders/text-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,MAAM,OAAO,UAAU;IACZ,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1C,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO;YACL,EAAE,EAAE,MAAM,EAAE;YACZ,OAAO;YACP,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,MAAM;SACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAe;QACzC,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAkB,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,13 +1,46 @@
1
+ import { type LookupAddress, type LookupOptions } from 'node:dns';
1
2
  import type { DocumentLoader, RAGDocument } from '@cogitator-ai/types';
3
+ /**
4
+ * Whether an IP address points to a loopback, private, link-local, CGNAT, multicast or
5
+ * otherwise non-public network (including IPv4-mapped / NAT64 IPv6 forms).
6
+ */
7
+ export declare function isBlockedAddress(address: string): boolean;
8
+ type LookupCallback = (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family?: number) => void;
9
+ type Resolver = (hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void) => void;
10
+ /**
11
+ * DNS lookup for `http.request` that rejects private addresses at connect time,
12
+ * which also defeats DNS-rebinding between validation and connection.
13
+ */
14
+ export declare function createGuardedLookup(resolver?: Resolver): (hostname: string, options: LookupOptions, callback: LookupCallback) => void;
2
15
  export interface WebLoaderOptions {
3
16
  selector?: string;
4
17
  headers?: Record<string, string>;
18
+ timeoutMs?: number;
19
+ maxResponseBytes?: number;
20
+ /**
21
+ * Allow fetching loopback / private-network hosts (e.g. an intranet wiki).
22
+ * Disabled by default to prevent SSRF when URLs come from untrusted input.
23
+ */
24
+ allowPrivateNetwork?: boolean;
5
25
  }
26
+ /**
27
+ * Loads a web page over http(s). HTML is converted to text (scripts and styles removed);
28
+ * plain-text and JSON responses are kept as-is. Redirects are followed (max 5) and every
29
+ * hop — including DNS resolution at connect time — is checked against private networks.
30
+ */
6
31
  export declare class WebLoader implements DocumentLoader {
7
32
  readonly supportedTypes: string[];
8
33
  private readonly htmlLoader;
9
34
  private readonly headers?;
35
+ private readonly timeoutMs;
36
+ private readonly maxResponseBytes;
37
+ private readonly allowPrivateNetwork;
38
+ private readonly lookup;
10
39
  constructor(options?: WebLoaderOptions);
11
40
  load(source: string): Promise<RAGDocument[]>;
41
+ private fetchPage;
42
+ private request;
43
+ private readBody;
12
44
  }
45
+ export {};
13
46
  //# sourceMappingURL=web-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,cAAc,WAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;gBAEtC,OAAO,CAAC,EAAE,gBAAgB;IAKhC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAcnD"}
1
+ {"version":3,"file":"web-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAMvF,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAqDvE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUzD;AAED,KAAK,cAAc,GAAG,CACpB,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EACjC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,EACjC,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;AAEV,KAAK,QAAQ,GAAG,CACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,IAAI,KAC9E,IAAI,CAAC;AAMV;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,QAAyB,IAC7D,UAAU,MAAM,EAAE,SAAS,aAAa,EAAE,UAAU,cAAc,KAAG,IAAI,CAsClF;AA2DD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD;;;;GAIG;AACH,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,cAAc,WAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,OAAO,CAAC,EAAE,gBAAgB;IAQhC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YA0BpC,SAAS;IAkCvB,OAAO,CAAC,OAAO;IA4Bf,OAAO,CAAC,QAAQ;CA4BjB"}
@@ -1,22 +1,276 @@
1
+ import { lookup as dnsLookup } from 'node:dns';
2
+ import http from 'node:http';
3
+ import https from 'node:https';
4
+ import { BlockList, isIP } from 'node:net';
5
+ import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
6
+ import { nanoid } from 'nanoid';
1
7
  import { HTMLLoader } from './html-loader.js';
8
+ const MAX_REDIRECTS = 5;
9
+ const DEFAULT_TIMEOUT_MS = 30_000;
10
+ const DEFAULT_MAX_RESPONSE_BYTES = 50 * 1024 * 1024;
11
+ const BLOCKED_HOSTNAMES = new Set(['localhost', 'metadata.google.internal', 'metadata']);
12
+ const PRIVATE_RANGES = new BlockList();
13
+ for (const [network, prefix] of [
14
+ ['0.0.0.0', 8],
15
+ ['10.0.0.0', 8],
16
+ ['100.64.0.0', 10],
17
+ ['127.0.0.0', 8],
18
+ ['169.254.0.0', 16],
19
+ ['172.16.0.0', 12],
20
+ ['192.0.0.0', 24],
21
+ ['192.168.0.0', 16],
22
+ ['198.18.0.0', 15],
23
+ ['224.0.0.0', 4],
24
+ ['240.0.0.0', 4],
25
+ ]) {
26
+ PRIVATE_RANGES.addSubnet(network, prefix, 'ipv4');
27
+ }
28
+ for (const [network, prefix] of [
29
+ ['::', 128],
30
+ ['::1', 128],
31
+ ['fc00::', 7],
32
+ ['fe80::', 10],
33
+ ['ff00::', 8],
34
+ ]) {
35
+ PRIVATE_RANGES.addSubnet(network, prefix, 'ipv6');
36
+ }
37
+ function embeddedIPv4(ipv6) {
38
+ const lower = ipv6.toLowerCase();
39
+ const prefixes = ['::ffff:', '64:ff9b::', '::'];
40
+ for (const prefix of prefixes) {
41
+ if (!lower.startsWith(prefix))
42
+ continue;
43
+ const rest = lower.slice(prefix.length);
44
+ if (isIP(rest) === 4)
45
+ return rest;
46
+ const hex = /^([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(rest);
47
+ if (hex) {
48
+ const high = parseInt(hex[1], 16);
49
+ const low = parseInt(hex[2], 16);
50
+ return [high >> 8, high & 0xff, low >> 8, low & 0xff].join('.');
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Whether an IP address points to a loopback, private, link-local, CGNAT, multicast or
57
+ * otherwise non-public network (including IPv4-mapped / NAT64 IPv6 forms).
58
+ */
59
+ export function isBlockedAddress(address) {
60
+ const ip = address.replace(/^\[|\]$/g, '');
61
+ const family = isIP(ip);
62
+ if (family === 4)
63
+ return PRIVATE_RANGES.check(ip, 'ipv4');
64
+ if (family === 6) {
65
+ const v4 = embeddedIPv4(ip);
66
+ if (v4)
67
+ return PRIVATE_RANGES.check(v4, 'ipv4');
68
+ return PRIVATE_RANGES.check(ip, 'ipv6');
69
+ }
70
+ return false;
71
+ }
72
+ const systemResolver = (hostname, callback) => {
73
+ dnsLookup(hostname, { all: true, verbatim: true }, callback);
74
+ };
75
+ /**
76
+ * DNS lookup for `http.request` that rejects private addresses at connect time,
77
+ * which also defeats DNS-rebinding between validation and connection.
78
+ */
79
+ export function createGuardedLookup(resolver = systemResolver) {
80
+ return (hostname, options, callback) => {
81
+ resolver(hostname, (err, addresses) => {
82
+ if (err) {
83
+ callback(err, []);
84
+ return;
85
+ }
86
+ const candidates = addresses.filter((entry) => !options.family || entry.family === options.family);
87
+ const blocked = candidates.find((entry) => isBlockedAddress(entry.address));
88
+ if (blocked) {
89
+ callback(Object.assign(new Error(`WebLoader: "${hostname}" resolves to private IP ${blocked.address} — blocked`), { code: 'EBLOCKED' }), []);
90
+ return;
91
+ }
92
+ if (candidates.length === 0) {
93
+ callback(Object.assign(new Error(`WebLoader: no addresses found for "${hostname}"`), {
94
+ code: 'ENOTFOUND',
95
+ }), []);
96
+ return;
97
+ }
98
+ if (options.all) {
99
+ callback(null, candidates);
100
+ }
101
+ else {
102
+ callback(null, candidates[0].address, candidates[0].family);
103
+ }
104
+ });
105
+ };
106
+ }
107
+ function parseUrl(urlString, allowPrivateNetwork) {
108
+ let url;
109
+ try {
110
+ url = new URL(urlString);
111
+ }
112
+ catch {
113
+ throw new Error(`WebLoader: invalid URL: ${urlString}`);
114
+ }
115
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
116
+ throw new Error(`WebLoader: unsupported protocol "${url.protocol}" — only http and https are allowed`);
117
+ }
118
+ if (allowPrivateNetwork)
119
+ return url;
120
+ const hostname = url.hostname
121
+ .toLowerCase()
122
+ .replace(/^\[|\]$/g, '')
123
+ .replace(/\.$/, '');
124
+ if (BLOCKED_HOSTNAMES.has(hostname) || hostname.endsWith('.localhost')) {
125
+ throw new Error(`WebLoader: access to "${hostname}" is blocked (loopback / metadata endpoint)`);
126
+ }
127
+ if (isIP(hostname) && isBlockedAddress(hostname)) {
128
+ throw new Error(`WebLoader: access to private IP "${hostname}" is blocked`);
129
+ }
130
+ return url;
131
+ }
132
+ function decodeBody(body, contentType) {
133
+ const charset = /charset\s*=\s*"?([\w.:-]+)"?/i.exec(contentType)?.[1];
134
+ if (charset) {
135
+ try {
136
+ return new TextDecoder(charset).decode(body);
137
+ }
138
+ catch {
139
+ return new TextDecoder('utf-8').decode(body);
140
+ }
141
+ }
142
+ return new TextDecoder('utf-8').decode(body);
143
+ }
144
+ function decompress(response) {
145
+ const encoding = (response.headers['content-encoding'] ?? '').toLowerCase().trim();
146
+ switch (encoding) {
147
+ case 'gzip':
148
+ case 'x-gzip':
149
+ return response.pipe(createGunzip());
150
+ case 'deflate':
151
+ return response.pipe(createInflate());
152
+ case 'br':
153
+ return response.pipe(createBrotliDecompress());
154
+ default:
155
+ return response;
156
+ }
157
+ }
158
+ /**
159
+ * Loads a web page over http(s). HTML is converted to text (scripts and styles removed);
160
+ * plain-text and JSON responses are kept as-is. Redirects are followed (max 5) and every
161
+ * hop — including DNS resolution at connect time — is checked against private networks.
162
+ */
2
163
  export class WebLoader {
3
164
  supportedTypes = ['http', 'https'];
4
165
  htmlLoader;
5
166
  headers;
167
+ timeoutMs;
168
+ maxResponseBytes;
169
+ allowPrivateNetwork;
170
+ lookup = createGuardedLookup();
6
171
  constructor(options) {
7
172
  this.htmlLoader = new HTMLLoader({ selector: options?.selector });
8
173
  this.headers = options?.headers;
174
+ this.timeoutMs = options?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
175
+ this.maxResponseBytes = options?.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
176
+ this.allowPrivateNetwork = options?.allowPrivateNetwork ?? false;
9
177
  }
10
178
  async load(source) {
11
- const response = await fetch(source, {
12
- headers: this.headers ?? {},
13
- });
14
- if (!response.ok) {
15
- throw new Error(`Failed to fetch ${source}: ${response.status} ${response.statusText}`);
179
+ const page = await this.fetchPage(source);
180
+ const mime = page.contentType.split(';')[0].trim().toLowerCase();
181
+ if (mime === '' || mime.includes('html') || mime.endsWith('/xml') || mime.endsWith('+xml')) {
182
+ const doc = await this.htmlLoader.parseHTML(page.body, source, 'web');
183
+ return [
184
+ { ...doc, metadata: { ...doc.metadata, url: page.url, contentType: mime || 'text/html' } },
185
+ ];
16
186
  }
17
- const html = await response.text();
18
- const doc = await this.htmlLoader.parseHTML(html, source, 'web');
19
- return [doc];
187
+ if (mime.startsWith('text/') || mime === 'application/json' || mime.endsWith('+json')) {
188
+ return [
189
+ {
190
+ id: nanoid(),
191
+ content: page.body,
192
+ source,
193
+ sourceType: 'web',
194
+ metadata: { url: page.url, contentType: mime },
195
+ },
196
+ ];
197
+ }
198
+ throw new Error(`WebLoader: unsupported content type "${mime}" from ${page.url}`);
199
+ }
200
+ async fetchPage(source) {
201
+ let current = parseUrl(source, this.allowPrivateNetwork);
202
+ for (let redirects = 0; redirects <= MAX_REDIRECTS; redirects++) {
203
+ const response = await this.request(current);
204
+ const status = response.statusCode ?? 0;
205
+ if (status >= 300 && status < 400) {
206
+ response.resume();
207
+ const location = response.headers.location;
208
+ if (!location) {
209
+ throw new Error(`WebLoader: redirect ${status} without Location header from ${current.href}`);
210
+ }
211
+ current = parseUrl(new URL(location, current).href, this.allowPrivateNetwork);
212
+ continue;
213
+ }
214
+ if (status < 200 || status >= 300) {
215
+ response.resume();
216
+ throw new Error(`WebLoader: failed to fetch ${current.href}: ${status} ${response.statusMessage ?? ''}`.trim());
217
+ }
218
+ const contentType = response.headers['content-type'] ?? '';
219
+ const body = await this.readBody(response, current.href);
220
+ return { url: current.href, contentType, body: decodeBody(body, contentType) };
221
+ }
222
+ throw new Error(`WebLoader: too many redirects (max ${MAX_REDIRECTS}) for ${source}`);
223
+ }
224
+ request(url) {
225
+ const transport = url.protocol === 'https:' ? https : http;
226
+ return new Promise((resolve, reject) => {
227
+ const req = transport.get(url, {
228
+ headers: {
229
+ 'user-agent': 'cogitator-rag-webloader',
230
+ accept: 'text/html,application/xhtml+xml,text/plain;q=0.9,*/*;q=0.5',
231
+ 'accept-encoding': 'gzip, deflate, br',
232
+ ...this.headers,
233
+ },
234
+ signal: AbortSignal.timeout(this.timeoutMs),
235
+ ...(!this.allowPrivateNetwork && { lookup: this.lookup }),
236
+ });
237
+ req.once('response', resolve);
238
+ req.once('error', (err) => {
239
+ if (err.message.startsWith('WebLoader:')) {
240
+ reject(err);
241
+ }
242
+ else if (err.name === 'AbortError' || err.code === 'ABORT_ERR') {
243
+ reject(new Error(`WebLoader: request to ${url.href} timed out after ${this.timeoutMs}ms`));
244
+ }
245
+ else {
246
+ reject(new Error(`WebLoader: request to ${url.href} failed: ${err.message}`));
247
+ }
248
+ });
249
+ });
250
+ }
251
+ readBody(response, url) {
252
+ const stream = decompress(response);
253
+ return new Promise((resolve, reject) => {
254
+ const chunks = [];
255
+ let total = 0;
256
+ stream.on('data', (chunk) => {
257
+ total += chunk.length;
258
+ if (total > this.maxResponseBytes) {
259
+ response.destroy();
260
+ stream.destroy();
261
+ reject(new Error(`WebLoader: response from ${url} exceeds ${this.maxResponseBytes} bytes limit`));
262
+ return;
263
+ }
264
+ chunks.push(chunk);
265
+ });
266
+ stream.once('end', () => resolve(Buffer.concat(chunks)));
267
+ stream.once('error', (err) => {
268
+ reject(new Error(`WebLoader: failed to read response from ${url}: ${err.message}`));
269
+ });
270
+ response.once('error', (err) => {
271
+ reject(new Error(`WebLoader: failed to read response from ${url}: ${err.message}`));
272
+ });
273
+ });
20
274
  }
21
275
  }
22
276
  //# sourceMappingURL=web-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-loader.js","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,MAAM,OAAO,SAAS;IACX,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,UAAU,CAAa;IACvB,OAAO,CAA0B;IAElD,YAAY,OAA0B;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"web-loader.js","sourceRoot":"","sources":["../../src/loaders/web-loader.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { DocumentLoader, Chunker, AsyncChunker, EmbeddingService, EmbeddingAdapter, Retriever, Reranker } from '@cogitator-ai/types';
1
+ import type { DocumentLoader, Chunker, AsyncChunker, EmbeddingService, EmbeddingAdapter, Retriever, Reranker, HybridSearchWeights } from '@cogitator-ai/types';
2
+ import type { HybridSearch } from '@cogitator-ai/memory';
2
3
  import { type RAGPipelineConfigInput } from './schema.js';
3
4
  import { RAGPipeline } from './rag-pipeline.js';
4
5
  export declare class RAGPipelineBuilder {
@@ -9,14 +10,22 @@ export declare class RAGPipelineBuilder {
9
10
  private retriever?;
10
11
  private reranker?;
11
12
  private configInput?;
13
+ private hybridSearch?;
14
+ private hybridWeights?;
15
+ private queryExpander?;
12
16
  withLoader(loader: DocumentLoader): this;
13
17
  withChunker(chunker: Chunker | AsyncChunker): this;
14
18
  withEmbeddingService(service: EmbeddingService): this;
15
19
  withEmbeddingAdapter(adapter: EmbeddingAdapter): this;
16
20
  withRetriever(retriever: Retriever): this;
17
21
  withReranker(reranker: Reranker): this;
22
+ /** HybridSearch used by the `hybrid` strategy (and as the multi-query base when set). */
23
+ withHybridSearch(hybridSearch: HybridSearch, weights?: HybridSearchWeights): this;
24
+ /** Query expansion function used by the `multi-query` strategy. */
25
+ withQueryExpander(expandQuery: (query: string) => Promise<string[]>): this;
18
26
  withConfig(config: RAGPipelineConfigInput): this;
19
27
  build(): RAGPipeline;
28
+ private createRetriever;
20
29
  private resolveConfig;
21
30
  }
22
31
  //# sourceMappingURL=rag-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rag-builder.d.ts","sourceRoot":"","sources":["../src/rag-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EAET,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAyB;IAE7C,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAKxC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAKlD,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAKrD,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAKrD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKzC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKtC,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAKhD,KAAK,IAAI,WAAW;IA8BpB,OAAO,CAAC,aAAa;CAMtB"}
1
+ {"version":3,"file":"rag-builder.d.ts","sourceRoot":"","sources":["../src/rag-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EAER,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA2B,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAyB;IAC7C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,aAAa,CAAC,CAAsB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAuC;IAE7D,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAKxC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI;IAKlD,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAKrD,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAKrD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKzC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKtC,yFAAyF;IACzF,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAMjF,mEAAmE;IACnE,iBAAiB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;IAK1E,UAAU,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAKhD,KAAK,IAAI,WAAW;IA8BpB,OAAO,CAAC,eAAe;IAmEvB,OAAO,CAAC,aAAa;CAMtB"}
@@ -2,6 +2,9 @@ import { RAGPipelineConfigSchema } from './schema.js';
2
2
  import { RAGPipeline } from './rag-pipeline.js';
3
3
  import { createChunker } from './chunkers/create-chunker.js';
4
4
  import { SimilarityRetriever } from './retrievers/similarity-retriever.js';
5
+ import { MMRRetriever } from './retrievers/mmr-retriever.js';
6
+ import { HybridRetriever } from './retrievers/hybrid-retriever.js';
7
+ import { MultiQueryRetriever } from './retrievers/multi-query-retriever.js';
5
8
  export class RAGPipelineBuilder {
6
9
  loader;
7
10
  chunker;
@@ -10,6 +13,9 @@ export class RAGPipelineBuilder {
10
13
  retriever;
11
14
  reranker;
12
15
  configInput;
16
+ hybridSearch;
17
+ hybridWeights;
18
+ queryExpander;
13
19
  withLoader(loader) {
14
20
  this.loader = loader;
15
21
  return this;
@@ -34,6 +40,17 @@ export class RAGPipelineBuilder {
34
40
  this.reranker = reranker;
35
41
  return this;
36
42
  }
43
+ /** HybridSearch used by the `hybrid` strategy (and as the multi-query base when set). */
44
+ withHybridSearch(hybridSearch, weights) {
45
+ this.hybridSearch = hybridSearch;
46
+ this.hybridWeights = weights;
47
+ return this;
48
+ }
49
+ /** Query expansion function used by the `multi-query` strategy. */
50
+ withQueryExpander(expandQuery) {
51
+ this.queryExpander = expandQuery;
52
+ return this;
53
+ }
37
54
  withConfig(config) {
38
55
  this.configInput = config;
39
56
  return this;
@@ -50,11 +67,7 @@ export class RAGPipelineBuilder {
50
67
  }
51
68
  const config = this.resolveConfig();
52
69
  const chunker = this.chunker ?? createChunker(config.chunking, this.embeddingService);
53
- const retriever = this.retriever ??
54
- new SimilarityRetriever({
55
- embeddingAdapter: this.embeddingAdapter,
56
- embeddingService: this.embeddingService,
57
- });
70
+ const retriever = this.retriever ?? this.createRetriever(config, this.embeddingService, this.embeddingAdapter);
58
71
  return new RAGPipeline(config, {
59
72
  loader: this.loader,
60
73
  chunker,
@@ -62,7 +75,59 @@ export class RAGPipelineBuilder {
62
75
  embeddingAdapter: this.embeddingAdapter,
63
76
  retriever,
64
77
  reranker: this.reranker,
65
- });
78
+ }, true);
79
+ }
80
+ createRetriever(config, embeddingService, embeddingAdapter) {
81
+ const { retrieval } = config;
82
+ const vectorRetriever = () => this.hybridSearch
83
+ ? new HybridRetriever({
84
+ hybridSearch: this.hybridSearch,
85
+ defaultWeights: this.hybridWeights,
86
+ defaultTopK: retrieval.topK,
87
+ defaultThreshold: retrieval.threshold,
88
+ })
89
+ : new SimilarityRetriever({
90
+ embeddingAdapter,
91
+ embeddingService,
92
+ defaultTopK: retrieval.topK,
93
+ defaultThreshold: retrieval.threshold,
94
+ });
95
+ switch (retrieval.strategy) {
96
+ case 'similarity':
97
+ return new SimilarityRetriever({
98
+ embeddingAdapter,
99
+ embeddingService,
100
+ defaultTopK: retrieval.topK,
101
+ defaultThreshold: retrieval.threshold,
102
+ });
103
+ case 'mmr':
104
+ return new MMRRetriever({
105
+ embeddingAdapter,
106
+ embeddingService,
107
+ defaultLambda: retrieval.mmrLambda,
108
+ defaultTopK: retrieval.topK,
109
+ defaultThreshold: retrieval.threshold,
110
+ });
111
+ case 'hybrid':
112
+ if (!this.hybridSearch) {
113
+ throw new Error('retrieval strategy "hybrid" requires withHybridSearch() (or a custom withRetriever())');
114
+ }
115
+ return vectorRetriever();
116
+ case 'multi-query':
117
+ if (!this.queryExpander) {
118
+ throw new Error('retrieval strategy "multi-query" requires withQueryExpander() (or a custom withRetriever())');
119
+ }
120
+ return new MultiQueryRetriever({
121
+ baseRetriever: vectorRetriever(),
122
+ expandQuery: this.queryExpander,
123
+ defaultTopK: retrieval.topK,
124
+ defaultMaxQueries: retrieval.multiQueryCount,
125
+ });
126
+ default: {
127
+ const exhaustive = retrieval.strategy;
128
+ throw new Error(`Unknown retrieval strategy: ${String(exhaustive)}`);
129
+ }
130
+ }
66
131
  }
67
132
  resolveConfig() {
68
133
  if (!this.configInput) {
@@ -1 +1 @@
1
- {"version":3,"file":"rag-builder.js","sourceRoot":"","sources":["../src/rag-builder.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAA+B,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAkB;IACxB,OAAO,CAA0B;IACjC,gBAAgB,CAAoB;IACpC,gBAAgB,CAAoB;IACpC,SAAS,CAAa;IACtB,QAAQ,CAAY;IACpB,WAAW,CAA0B;IAE7C,UAAU,CAAC,MAAsB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,OAAyB;QAC5C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,OAAyB;QAC5C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAoB;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAkB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,MAA8B;QACvC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtF,MAAM,SAAS,GACb,IAAI,CAAC,SAAS;YACd,IAAI,mBAAmB,CAAC;gBACtB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC,CAAC;QAEL,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO;YACP,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;CACF"}
1
+ {"version":3,"file":"rag-builder.js","sourceRoot":"","sources":["../src/rag-builder.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export declare class RAGPipeline {
11
11
  private readonly config;
12
12
  private readonly deps;
13
13
  private stats;
14
- constructor(config: RAGPipelineConfig, deps: RAGPipelineDeps);
14
+ constructor(config: RAGPipelineConfig, deps: RAGPipelineDeps, alreadyParsed?: boolean);
15
15
  ingest(source: string): Promise<{
16
16
  documents: number;
17
17
  chunks: number;
@@ -23,6 +23,7 @@ export declare class RAGPipeline {
23
23
  queriesProcessed: number;
24
24
  };
25
25
  private chunkDocument;
26
+ private storeChunks;
26
27
  private storeChunk;
27
28
  }
28
29
  //# sourceMappingURL=rag-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rag-pipeline.d.ts","sourceRoot":"","sources":["../src/rag-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,KAAK,CAAkE;gBAEnE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe;IAKtD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA8BtE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWzF,QAAQ;;;;;YAIM,aAAa;YAIb,UAAU;CAkBzB"}
1
+ {"version":3,"file":"rag-pipeline.d.ts","sourceRoot":"","sources":["../src/rag-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EAGhB,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AASD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,KAAK,CAAkE;gBAEnE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,UAAQ;IAK7E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA2BtE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAezF,QAAQ;;;;;YAIM,aAAa;YAKb,WAAW;YAiBX,UAAU;CAkCzB"}