@cogitator-ai/rag 0.1.0 → 0.1.3

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 (109) hide show
  1. package/dist/chunkers/create-chunker.d.ts +3 -0
  2. package/dist/chunkers/create-chunker.d.ts.map +1 -0
  3. package/dist/chunkers/create-chunker.js +28 -0
  4. package/dist/chunkers/create-chunker.js.map +1 -0
  5. package/dist/chunkers/fixed-chunker.d.ts +12 -0
  6. package/dist/chunkers/fixed-chunker.d.ts.map +1 -0
  7. package/dist/chunkers/fixed-chunker.js +31 -0
  8. package/dist/chunkers/fixed-chunker.js.map +1 -0
  9. package/dist/chunkers/index.d.ts +5 -0
  10. package/dist/chunkers/index.d.ts.map +1 -0
  11. package/dist/chunkers/index.js +5 -0
  12. package/dist/chunkers/index.js.map +1 -0
  13. package/dist/chunkers/recursive-chunker.d.ts +18 -0
  14. package/dist/chunkers/recursive-chunker.d.ts.map +1 -0
  15. package/dist/chunkers/recursive-chunker.js +152 -0
  16. package/dist/chunkers/recursive-chunker.js.map +1 -0
  17. package/dist/chunkers/semantic-chunker.d.ts +19 -0
  18. package/dist/chunkers/semantic-chunker.d.ts.map +1 -0
  19. package/dist/chunkers/semantic-chunker.js +175 -0
  20. package/dist/chunkers/semantic-chunker.js.map +1 -0
  21. package/dist/index.d.ts +11 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +10 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/loaders/csv-loader.d.ts +16 -0
  26. package/dist/loaders/csv-loader.d.ts.map +1 -0
  27. package/dist/loaders/csv-loader.js +57 -0
  28. package/dist/loaders/csv-loader.js.map +1 -0
  29. package/dist/loaders/html-loader.d.ts +12 -0
  30. package/dist/loaders/html-loader.d.ts.map +1 -0
  31. package/dist/loaders/html-loader.js +40 -0
  32. package/dist/loaders/html-loader.js.map +1 -0
  33. package/dist/loaders/index.d.ts +14 -0
  34. package/dist/loaders/index.d.ts.map +1 -0
  35. package/dist/loaders/index.js +8 -0
  36. package/dist/loaders/index.js.map +1 -0
  37. package/dist/loaders/json-loader.d.ts +16 -0
  38. package/dist/loaders/json-loader.d.ts.map +1 -0
  39. package/dist/loaders/json-loader.js +55 -0
  40. package/dist/loaders/json-loader.js.map +1 -0
  41. package/dist/loaders/markdown-loader.d.ts +14 -0
  42. package/dist/loaders/markdown-loader.d.ts.map +1 -0
  43. package/dist/loaders/markdown-loader.js +65 -0
  44. package/dist/loaders/markdown-loader.js.map +1 -0
  45. package/dist/loaders/pdf-loader.d.ts +14 -0
  46. package/dist/loaders/pdf-loader.d.ts.map +1 -0
  47. package/dist/loaders/pdf-loader.js +72 -0
  48. package/dist/loaders/pdf-loader.js.map +1 -0
  49. package/dist/loaders/text-loader.d.ts +8 -0
  50. package/dist/loaders/text-loader.d.ts.map +1 -0
  51. package/dist/loaders/text-loader.js +40 -0
  52. package/dist/loaders/text-loader.js.map +1 -0
  53. package/dist/loaders/web-loader.d.ts +13 -0
  54. package/dist/loaders/web-loader.d.ts.map +1 -0
  55. package/dist/loaders/web-loader.js +23 -0
  56. package/dist/loaders/web-loader.js.map +1 -0
  57. package/dist/rag-builder.d.ts +22 -0
  58. package/dist/rag-builder.d.ts.map +1 -0
  59. package/dist/rag-builder.js +74 -0
  60. package/dist/rag-builder.js.map +1 -0
  61. package/dist/rag-pipeline.d.ts +28 -0
  62. package/dist/rag-pipeline.d.ts.map +1 -0
  63. package/dist/rag-pipeline.js +59 -0
  64. package/dist/rag-pipeline.js.map +1 -0
  65. package/dist/rerankers/cohere-reranker.d.ts +12 -0
  66. package/dist/rerankers/cohere-reranker.d.ts.map +1 -0
  67. package/dist/rerankers/cohere-reranker.js +37 -0
  68. package/dist/rerankers/cohere-reranker.js.map +1 -0
  69. package/dist/rerankers/index.d.ts +3 -0
  70. package/dist/rerankers/index.d.ts.map +1 -0
  71. package/dist/rerankers/index.js +3 -0
  72. package/dist/rerankers/index.js.map +1 -0
  73. package/dist/rerankers/llm-reranker.d.ts +12 -0
  74. package/dist/rerankers/llm-reranker.d.ts.map +1 -0
  75. package/dist/rerankers/llm-reranker.js +54 -0
  76. package/dist/rerankers/llm-reranker.js.map +1 -0
  77. package/dist/retrievers/create-retriever.d.ts +37 -0
  78. package/dist/retrievers/create-retriever.d.ts.map +1 -0
  79. package/dist/retrievers/create-retriever.js +37 -0
  80. package/dist/retrievers/create-retriever.js.map +1 -0
  81. package/dist/retrievers/hybrid-retriever.d.ts +18 -0
  82. package/dist/retrievers/hybrid-retriever.d.ts.map +1 -0
  83. package/dist/retrievers/hybrid-retriever.js +43 -0
  84. package/dist/retrievers/hybrid-retriever.js.map +1 -0
  85. package/dist/retrievers/index.d.ts +11 -0
  86. package/dist/retrievers/index.d.ts.map +1 -0
  87. package/dist/retrievers/index.js +6 -0
  88. package/dist/retrievers/index.js.map +1 -0
  89. package/dist/retrievers/mmr-retriever.d.ts +20 -0
  90. package/dist/retrievers/mmr-retriever.d.ts.map +1 -0
  91. package/dist/retrievers/mmr-retriever.js +89 -0
  92. package/dist/retrievers/mmr-retriever.js.map +1 -0
  93. package/dist/retrievers/multi-query-retriever.d.ts +14 -0
  94. package/dist/retrievers/multi-query-retriever.d.ts.map +1 -0
  95. package/dist/retrievers/multi-query-retriever.js +29 -0
  96. package/dist/retrievers/multi-query-retriever.js.map +1 -0
  97. package/dist/retrievers/similarity-retriever.d.ts +17 -0
  98. package/dist/retrievers/similarity-retriever.d.ts.map +1 -0
  99. package/dist/retrievers/similarity-retriever.js +39 -0
  100. package/dist/retrievers/similarity-retriever.js.map +1 -0
  101. package/dist/schema.d.ts +70 -0
  102. package/dist/schema.d.ts.map +1 -0
  103. package/dist/schema.js +27 -0
  104. package/dist/schema.js.map +1 -0
  105. package/dist/tools.d.ts +23 -0
  106. package/dist/tools.d.ts.map +1 -0
  107. package/dist/tools.js +45 -0
  108. package/dist/tools.js.map +1 -0
  109. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import type { ChunkingConfig, Chunker, AsyncChunker, EmbeddingService } from '@cogitator-ai/types';
2
+ export declare function createChunker(config: ChunkingConfig, embeddingService?: EmbeddingService): Chunker | AsyncChunker;
3
+ //# sourceMappingURL=create-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-chunker.d.ts","sourceRoot":"","sources":["../../src/chunkers/create-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKnG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,GAAG,YAAY,CAyBxB"}
@@ -0,0 +1,28 @@
1
+ import { FixedSizeChunker } from './fixed-chunker';
2
+ import { RecursiveChunker } from './recursive-chunker';
3
+ import { SemanticChunker } from './semantic-chunker';
4
+ export function createChunker(config, embeddingService) {
5
+ switch (config.strategy) {
6
+ case 'fixed':
7
+ return new FixedSizeChunker({
8
+ chunkSize: config.chunkSize,
9
+ chunkOverlap: config.chunkOverlap,
10
+ });
11
+ case 'recursive':
12
+ return new RecursiveChunker({
13
+ chunkSize: config.chunkSize,
14
+ chunkOverlap: config.chunkOverlap,
15
+ separators: config.separators,
16
+ });
17
+ case 'semantic': {
18
+ if (!embeddingService) {
19
+ throw new Error('embeddingService is required for semantic chunking strategy');
20
+ }
21
+ return new SemanticChunker({
22
+ embeddingService,
23
+ maxChunkSize: config.chunkSize,
24
+ });
25
+ }
26
+ }
27
+ }
28
+ //# sourceMappingURL=create-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-chunker.js","sourceRoot":"","sources":["../../src/chunkers/create-chunker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,UAAU,aAAa,CAC3B,MAAsB,EACtB,gBAAmC;IAEnC,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,OAAO;YACV,OAAO,IAAI,gBAAgB,CAAC;gBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;QAEL,KAAK,WAAW;YACd,OAAO,IAAI,gBAAgB,CAAC;gBAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC,CAAC;QAEL,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,IAAI,eAAe,CAAC;gBACzB,gBAAgB;gBAChB,YAAY,EAAE,MAAM,CAAC,SAAS;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Chunker, DocumentChunk } from '@cogitator-ai/types';
2
+ export interface FixedSizeChunkerOptions {
3
+ chunkSize: number;
4
+ chunkOverlap: number;
5
+ }
6
+ export declare class FixedSizeChunker implements Chunker {
7
+ private readonly chunkSize;
8
+ private readonly chunkOverlap;
9
+ constructor(options: FixedSizeChunkerOptions);
10
+ chunk(text: string, documentId: string): DocumentChunk[];
11
+ }
12
+ //# sourceMappingURL=fixed-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-chunker.d.ts","sourceRoot":"","sources":["../../src/chunkers/fixed-chunker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,EAAE,uBAAuB;IAK5C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE;CAuBzD"}
@@ -0,0 +1,31 @@
1
+ import { nanoid } from 'nanoid';
2
+ export class FixedSizeChunker {
3
+ chunkSize;
4
+ chunkOverlap;
5
+ constructor(options) {
6
+ this.chunkSize = options.chunkSize;
7
+ this.chunkOverlap = options.chunkOverlap;
8
+ }
9
+ chunk(text, documentId) {
10
+ if (text.length === 0)
11
+ return [];
12
+ const step = this.chunkSize - this.chunkOverlap;
13
+ const chunks = [];
14
+ let order = 0;
15
+ for (let start = 0; start < text.length; start += step) {
16
+ const end = Math.min(start + this.chunkSize, text.length);
17
+ chunks.push({
18
+ id: nanoid(),
19
+ documentId,
20
+ content: text.slice(start, end),
21
+ startOffset: start,
22
+ endOffset: end,
23
+ order: order++,
24
+ });
25
+ if (end === text.length)
26
+ break;
27
+ }
28
+ return chunks;
29
+ }
30
+ }
31
+ //# sourceMappingURL=fixed-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixed-chunker.js","sourceRoot":"","sources":["../../src/chunkers/fixed-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,MAAM,OAAO,gBAAgB;IACV,SAAS,CAAS;IAClB,YAAY,CAAS;IAEtC,YAAY,OAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,UAAkB;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QAChD,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,EAAE;gBACZ,UAAU;gBACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC/B,WAAW,EAAE,KAAK;gBAClB,SAAS,EAAE,GAAG;gBACd,KAAK,EAAE,KAAK,EAAE;aACf,CAAC,CAAC;YAEH,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;gBAAE,MAAM;QACjC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { FixedSizeChunker, type FixedSizeChunkerOptions } from './fixed-chunker';
2
+ export { RecursiveChunker, type RecursiveChunkerOptions } from './recursive-chunker';
3
+ export { SemanticChunker, type SemanticChunkerOptions } from './semantic-chunker';
4
+ export { createChunker } from './create-chunker';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chunkers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { FixedSizeChunker } from './fixed-chunker';
2
+ export { RecursiveChunker } from './recursive-chunker';
3
+ export { SemanticChunker } from './semantic-chunker';
4
+ export { createChunker } from './create-chunker';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chunkers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAgC,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,eAAe,EAA+B,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Chunker, DocumentChunk } from '@cogitator-ai/types';
2
+ export interface RecursiveChunkerOptions {
3
+ chunkSize: number;
4
+ chunkOverlap: number;
5
+ separators?: string[];
6
+ }
7
+ export declare class RecursiveChunker implements Chunker {
8
+ private readonly chunkSize;
9
+ private readonly chunkOverlap;
10
+ private readonly separators;
11
+ constructor(options: RecursiveChunkerOptions);
12
+ chunk(text: string, documentId: string): DocumentChunk[];
13
+ private splitText;
14
+ private charSplit;
15
+ private mergeWithOverlap;
16
+ private mergeWithOverlapSimple;
17
+ }
18
+ //# sourceMappingURL=recursive-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recursive-chunker.d.ts","sourceRoot":"","sources":["../../src/chunkers/recursive-chunker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIlE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,OAAO,EAAE,uBAAuB;IAM5C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE;IAOxD,OAAO,CAAC,SAAS;IA+CjB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,gBAAgB;IAwFxB,OAAO,CAAC,sBAAsB;CAwB/B"}
@@ -0,0 +1,152 @@
1
+ import { nanoid } from 'nanoid';
2
+ const DEFAULT_SEPARATORS = ['\n\n', '\n', '. ', ' ', ''];
3
+ export class RecursiveChunker {
4
+ chunkSize;
5
+ chunkOverlap;
6
+ separators;
7
+ constructor(options) {
8
+ this.chunkSize = options.chunkSize;
9
+ this.chunkOverlap = options.chunkOverlap;
10
+ this.separators = options.separators ?? DEFAULT_SEPARATORS;
11
+ }
12
+ chunk(text, documentId) {
13
+ if (text.length === 0)
14
+ return [];
15
+ const texts = this.splitText(text, 0);
16
+ return this.mergeWithOverlap(texts, documentId);
17
+ }
18
+ splitText(text, separatorIndex) {
19
+ if (text.length <= this.chunkSize)
20
+ return [text];
21
+ if (separatorIndex >= this.separators.length) {
22
+ return this.charSplit(text);
23
+ }
24
+ const separator = this.separators[separatorIndex];
25
+ if (separator === '') {
26
+ return this.charSplit(text);
27
+ }
28
+ const parts = text.split(separator);
29
+ if (parts.length === 1) {
30
+ return this.splitText(text, separatorIndex + 1);
31
+ }
32
+ const merged = [];
33
+ let current = '';
34
+ for (const part of parts) {
35
+ if (part.length === 0)
36
+ continue;
37
+ const candidate = current ? current + separator + part : part;
38
+ if (candidate.length <= this.chunkSize) {
39
+ current = candidate;
40
+ }
41
+ else {
42
+ if (current)
43
+ merged.push(current);
44
+ if (part.length > this.chunkSize) {
45
+ const subParts = this.splitText(part, separatorIndex + 1);
46
+ merged.push(...subParts);
47
+ current = '';
48
+ }
49
+ else {
50
+ current = part;
51
+ }
52
+ }
53
+ }
54
+ if (current)
55
+ merged.push(current);
56
+ return merged;
57
+ }
58
+ charSplit(text) {
59
+ const result = [];
60
+ for (let i = 0; i < text.length; i += this.chunkSize) {
61
+ result.push(text.slice(i, i + this.chunkSize));
62
+ }
63
+ return result;
64
+ }
65
+ mergeWithOverlap(texts, documentId) {
66
+ if (this.chunkOverlap === 0) {
67
+ let offset = 0;
68
+ return texts.map((content, i) => {
69
+ const chunk = {
70
+ id: nanoid(),
71
+ documentId,
72
+ content,
73
+ startOffset: offset,
74
+ endOffset: offset + content.length,
75
+ order: i,
76
+ };
77
+ offset += content.length;
78
+ return chunk;
79
+ });
80
+ }
81
+ const joined = texts.join('');
82
+ const chunks = [];
83
+ let order = 0;
84
+ let textIndex = 0;
85
+ let i = 0;
86
+ while (i < texts.length) {
87
+ let content = texts[i];
88
+ let consumed = 1;
89
+ while (i + consumed < texts.length) {
90
+ const next = content + texts[i + consumed];
91
+ if (next.length <= this.chunkSize) {
92
+ content = next;
93
+ consumed++;
94
+ }
95
+ else {
96
+ break;
97
+ }
98
+ }
99
+ const startOffset = joined.indexOf(content, textIndex > 0 ? Math.max(0, textIndex - this.chunkOverlap) : 0);
100
+ chunks.push({
101
+ id: nanoid(),
102
+ documentId,
103
+ content,
104
+ startOffset: startOffset >= 0 ? startOffset : textIndex,
105
+ endOffset: (startOffset >= 0 ? startOffset : textIndex) + content.length,
106
+ order: order++,
107
+ });
108
+ textIndex += content.length;
109
+ const overlapChars = Math.min(this.chunkOverlap, content.length);
110
+ const overlapText = content.slice(content.length - overlapChars);
111
+ i += consumed;
112
+ if (i < texts.length) {
113
+ const remaining = texts.slice(i);
114
+ const withOverlap = overlapText + remaining.join('');
115
+ if (withOverlap.length <= this.chunkSize) {
116
+ chunks.push({
117
+ id: nanoid(),
118
+ documentId,
119
+ content: withOverlap,
120
+ startOffset: textIndex - overlapChars,
121
+ endOffset: textIndex - overlapChars + withOverlap.length,
122
+ order: order++,
123
+ });
124
+ break;
125
+ }
126
+ const reSplit = this.splitText(withOverlap, 0);
127
+ const subChunks = this.mergeWithOverlapSimple(reSplit, documentId, textIndex - overlapChars, order);
128
+ chunks.push(...subChunks);
129
+ break;
130
+ }
131
+ }
132
+ return chunks;
133
+ }
134
+ mergeWithOverlapSimple(texts, documentId, baseOffset, startOrder) {
135
+ const chunks = [];
136
+ let offset = baseOffset;
137
+ let order = startOrder;
138
+ for (const content of texts) {
139
+ chunks.push({
140
+ id: nanoid(),
141
+ documentId,
142
+ content,
143
+ startOffset: offset,
144
+ endOffset: offset + content.length,
145
+ order: order++,
146
+ });
147
+ offset += content.length;
148
+ }
149
+ return chunks;
150
+ }
151
+ }
152
+ //# sourceMappingURL=recursive-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recursive-chunker.js","sourceRoot":"","sources":["../../src/chunkers/recursive-chunker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AAQzD,MAAM,OAAO,gBAAgB;IACV,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,UAAU,CAAW;IAEtC,YAAY,OAAgC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,UAAkB;QACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAEO,SAAS,CAAC,IAAY,EAAE,cAAsB;QACpD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAElD,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEhC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAE9D,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,OAAO,GAAG,SAAS,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO;oBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAElC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;oBACzB,OAAO,GAAG,EAAE,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,IAAY;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAC,KAAe,EAAE,UAAkB;QAC1D,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;gBAC9B,MAAM,KAAK,GAAkB;oBAC3B,EAAE,EAAE,MAAM,EAAE;oBACZ,UAAU;oBACV,OAAO;oBACP,WAAW,EAAE,MAAM;oBACnB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM;oBAClC,KAAK,EAAE,CAAC;iBACT,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,OAAO,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAClC,OAAO,GAAG,IAAI,CAAC;oBACf,QAAQ,EAAE,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,MAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAChC,OAAO,EACP,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;YACF,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,EAAE;gBACZ,UAAU;gBACV,OAAO;gBACP,WAAW,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;gBACvD,SAAS,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM;gBACxE,KAAK,EAAE,KAAK,EAAE;aACf,CAAC,CAAC;YAEH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;YAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;YAEjE,CAAC,IAAI,QAAQ,CAAC;YAEd,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAErD,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzC,MAAM,CAAC,IAAI,CAAC;wBACV,EAAE,EAAE,MAAM,EAAE;wBACZ,UAAU;wBACV,OAAO,EAAE,WAAW;wBACpB,WAAW,EAAE,SAAS,GAAG,YAAY;wBACrC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC,MAAM;wBACxD,KAAK,EAAE,KAAK,EAAE;qBACf,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAC3C,OAAO,EACP,UAAU,EACV,SAAS,GAAG,YAAY,EACxB,KAAK,CACN,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,sBAAsB,CAC5B,KAAe,EACf,UAAkB,EAClB,UAAkB,EAClB,UAAkB;QAElB,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,IAAI,MAAM,GAAG,UAAU,CAAC;QACxB,IAAI,KAAK,GAAG,UAAU,CAAC;QAEvB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,MAAM,EAAE;gBACZ,UAAU;gBACV,OAAO;gBACP,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM;gBAClC,KAAK,EAAE,KAAK,EAAE;aACf,CAAC,CAAC;YACH,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { AsyncChunker, DocumentChunk, EmbeddingService } from '@cogitator-ai/types';
2
+ export interface SemanticChunkerOptions {
3
+ embeddingService: EmbeddingService;
4
+ breakpointThreshold?: number;
5
+ minChunkSize?: number;
6
+ maxChunkSize?: number;
7
+ }
8
+ export declare class SemanticChunker implements AsyncChunker {
9
+ private readonly embeddingService;
10
+ private readonly breakpointThreshold;
11
+ private readonly minChunkSize;
12
+ private readonly maxChunkSize;
13
+ constructor(options: SemanticChunkerOptions);
14
+ chunk(text: string, documentId: string): Promise<DocumentChunk[]>;
15
+ private mergeSmallGroups;
16
+ private buildChunks;
17
+ private splitLargeGroup;
18
+ }
19
+ //# sourceMappingURL=semantic-chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-chunker.d.ts","sourceRoot":"","sources":["../../src/chunkers/semantic-chunker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzF,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,EAAE,sBAAsB;IAOrC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAkCvE,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,eAAe;CA8DxB"}
@@ -0,0 +1,175 @@
1
+ import { nanoid } from 'nanoid';
2
+ function cosineSimilarity(a, b) {
3
+ let dot = 0;
4
+ let normA = 0;
5
+ let normB = 0;
6
+ for (let i = 0; i < a.length; i++) {
7
+ dot += a[i] * b[i];
8
+ normA += a[i] * a[i];
9
+ normB += b[i] * b[i];
10
+ }
11
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
12
+ return denom === 0 ? 0 : dot / denom;
13
+ }
14
+ const SENTENCE_SPLIT_RE = /(?<=[.?!])\s+/;
15
+ function splitSentences(text) {
16
+ return text
17
+ .split(SENTENCE_SPLIT_RE)
18
+ .map((s) => s.trim())
19
+ .filter((s) => s.length > 0);
20
+ }
21
+ export class SemanticChunker {
22
+ embeddingService;
23
+ breakpointThreshold;
24
+ minChunkSize;
25
+ maxChunkSize;
26
+ constructor(options) {
27
+ this.embeddingService = options.embeddingService;
28
+ this.breakpointThreshold = options.breakpointThreshold ?? 0.5;
29
+ this.minChunkSize = options.minChunkSize ?? 100;
30
+ this.maxChunkSize = options.maxChunkSize ?? 2000;
31
+ }
32
+ async chunk(text, documentId) {
33
+ if (!text || text.trim().length === 0)
34
+ return [];
35
+ const sentences = splitSentences(text);
36
+ if (sentences.length === 0)
37
+ return [];
38
+ if (sentences.length === 1) {
39
+ return this.buildChunks([sentences], text, documentId);
40
+ }
41
+ const embeddings = await this.embeddingService.embedBatch(sentences);
42
+ const similarities = [];
43
+ for (let i = 0; i < embeddings.length - 1; i++) {
44
+ similarities.push(cosineSimilarity(embeddings[i], embeddings[i + 1]));
45
+ }
46
+ const groups = [];
47
+ let currentGroup = [sentences[0]];
48
+ for (let i = 0; i < similarities.length; i++) {
49
+ if (similarities[i] < this.breakpointThreshold) {
50
+ groups.push(currentGroup);
51
+ currentGroup = [sentences[i + 1]];
52
+ }
53
+ else {
54
+ currentGroup.push(sentences[i + 1]);
55
+ }
56
+ }
57
+ groups.push(currentGroup);
58
+ const merged = this.mergeSmallGroups(groups);
59
+ return this.buildChunks(merged, text, documentId);
60
+ }
61
+ mergeSmallGroups(groups) {
62
+ if (groups.length <= 1)
63
+ return groups;
64
+ const result = [];
65
+ let current = groups[0];
66
+ for (let i = 1; i < groups.length; i++) {
67
+ const currentText = current.join(' ');
68
+ const nextText = groups[i].join(' ');
69
+ const combinedLength = currentText.length + 1 + nextText.length;
70
+ if (currentText.length < this.minChunkSize && combinedLength <= this.maxChunkSize) {
71
+ current = [...current, ...groups[i]];
72
+ }
73
+ else {
74
+ result.push(current);
75
+ current = groups[i];
76
+ }
77
+ }
78
+ if (current.length > 0) {
79
+ const currentText = current.join(' ');
80
+ if (currentText.length < this.minChunkSize && result.length > 0) {
81
+ const last = result[result.length - 1];
82
+ const lastText = last.join(' ');
83
+ if (lastText.length + 1 + currentText.length <= this.maxChunkSize) {
84
+ result[result.length - 1] = [...last, ...current];
85
+ }
86
+ else {
87
+ result.push(current);
88
+ }
89
+ }
90
+ else {
91
+ result.push(current);
92
+ }
93
+ }
94
+ return result;
95
+ }
96
+ buildChunks(groups, originalText, documentId) {
97
+ const chunks = [];
98
+ let searchFrom = 0;
99
+ for (let i = 0; i < groups.length; i++) {
100
+ const content = groups[i].join(' ');
101
+ if (content.length <= this.maxChunkSize) {
102
+ const startOffset = originalText.indexOf(groups[i][0], searchFrom);
103
+ const lastSentence = groups[i][groups[i].length - 1];
104
+ const lastStart = originalText.indexOf(lastSentence, startOffset >= 0 ? startOffset : 0);
105
+ const endOffset = lastStart >= 0 ? lastStart + lastSentence.length : startOffset + content.length;
106
+ chunks.push({
107
+ id: nanoid(),
108
+ documentId,
109
+ content,
110
+ startOffset: Math.max(0, startOffset),
111
+ endOffset,
112
+ order: chunks.length,
113
+ });
114
+ searchFrom = endOffset;
115
+ }
116
+ else {
117
+ const subChunks = this.splitLargeGroup(groups[i], originalText, documentId, searchFrom, chunks.length);
118
+ chunks.push(...subChunks);
119
+ if (subChunks.length > 0) {
120
+ searchFrom = subChunks[subChunks.length - 1].endOffset;
121
+ }
122
+ }
123
+ }
124
+ return chunks;
125
+ }
126
+ splitLargeGroup(sentences, originalText, documentId, searchFrom, startOrder) {
127
+ const chunks = [];
128
+ let currentSentences = [];
129
+ let currentLength = 0;
130
+ let order = startOrder;
131
+ let offset = searchFrom;
132
+ for (const sentence of sentences) {
133
+ const newLength = currentLength + (currentSentences.length > 0 ? 1 : 0) + sentence.length;
134
+ if (newLength > this.maxChunkSize && currentSentences.length > 0) {
135
+ const content = currentSentences.join(' ');
136
+ const startOffset = originalText.indexOf(currentSentences[0], offset);
137
+ const lastSentence = currentSentences[currentSentences.length - 1];
138
+ const lastStart = originalText.indexOf(lastSentence, startOffset >= 0 ? startOffset : 0);
139
+ const endOffset = lastStart >= 0 ? lastStart + lastSentence.length : startOffset + content.length;
140
+ chunks.push({
141
+ id: nanoid(),
142
+ documentId,
143
+ content,
144
+ startOffset: Math.max(0, startOffset),
145
+ endOffset,
146
+ order: order++,
147
+ });
148
+ offset = endOffset;
149
+ currentSentences = [sentence];
150
+ currentLength = sentence.length;
151
+ }
152
+ else {
153
+ currentSentences.push(sentence);
154
+ currentLength = newLength;
155
+ }
156
+ }
157
+ if (currentSentences.length > 0) {
158
+ const content = currentSentences.join(' ');
159
+ const startOffset = originalText.indexOf(currentSentences[0], offset);
160
+ const lastSentence = currentSentences[currentSentences.length - 1];
161
+ const lastStart = originalText.indexOf(lastSentence, startOffset >= 0 ? startOffset : 0);
162
+ const endOffset = lastStart >= 0 ? lastStart + lastSentence.length : startOffset + content.length;
163
+ chunks.push({
164
+ id: nanoid(),
165
+ documentId,
166
+ content,
167
+ startOffset: Math.max(0, startOffset),
168
+ endOffset,
169
+ order: order++,
170
+ });
171
+ }
172
+ return chunks;
173
+ }
174
+ }
175
+ //# sourceMappingURL=semantic-chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-chunker.js","sourceRoot":"","sources":["../../src/chunkers/semantic-chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const VERSION = "0.1.0";
2
+ export { RAGPipeline, type RAGPipelineDeps } from './rag-pipeline';
3
+ export { RAGPipelineBuilder } from './rag-builder';
4
+ export * from './loaders';
5
+ export * from './chunkers';
6
+ export * from './retrievers';
7
+ export * from './rerankers';
8
+ export * from './schema';
9
+ export { createSearchTool, createIngestTool, ragTools, type RAGTool } from './tools';
10
+ export type { RAGDocument, DocumentChunk, DocumentLoader, Chunker, AsyncChunker, ChunkingConfig, ChunkingStrategy, Retriever, RetrievalConfig, RetrievalStrategy, RetrievalResult, Reranker, RAGPipelineConfig, EmbeddingService, EmbeddingAdapter, } from '@cogitator-ai/types';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAErF,YAAY,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,OAAO,EACP,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export const VERSION = '0.1.0';
2
+ export { RAGPipeline } from './rag-pipeline';
3
+ export { RAGPipelineBuilder } from './rag-builder';
4
+ export * from './loaders';
5
+ export * from './chunkers';
6
+ export * from './retrievers';
7
+ export * from './rerankers';
8
+ export * from './schema';
9
+ export { createSearchTool, createIngestTool, ragTools } from './tools';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,cAAc,UAAU,CAAC;AAEzB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DocumentLoader, RAGDocument } from '@cogitator-ai/types';
2
+ export interface CSVLoaderOptions {
3
+ contentColumn?: string;
4
+ metadataColumns?: string[];
5
+ delimiter?: string;
6
+ }
7
+ export declare class CSVLoader implements DocumentLoader {
8
+ readonly supportedTypes: string[];
9
+ private readonly contentColumn?;
10
+ private readonly metadataColumns?;
11
+ private readonly delimiter?;
12
+ constructor(options?: CSVLoaderOptions);
13
+ load(source: string): Promise<RAGDocument[]>;
14
+ private extractMetadata;
15
+ }
16
+ //# sourceMappingURL=csv-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/csv-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAUvE,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,cAAc,WAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAExB,OAAO,CAAC,EAAE,gBAAgB;IAMhC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4BlD,OAAO,CAAC,eAAe;CAWxB"}
@@ -0,0 +1,57 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ import { nanoid } from 'nanoid';
4
+ async function loadPapaparse() {
5
+ try {
6
+ return await import('papaparse');
7
+ }
8
+ catch {
9
+ throw new Error('papaparse is required for CSVLoader. Install it: pnpm add papaparse');
10
+ }
11
+ }
12
+ export class CSVLoader {
13
+ supportedTypes = ['csv'];
14
+ contentColumn;
15
+ metadataColumns;
16
+ delimiter;
17
+ constructor(options) {
18
+ this.contentColumn = options?.contentColumn;
19
+ this.metadataColumns = options?.metadataColumns;
20
+ this.delimiter = options?.delimiter;
21
+ }
22
+ async load(source) {
23
+ const Papa = await loadPapaparse();
24
+ const filePath = resolve(source);
25
+ const raw = await readFile(filePath, 'utf-8');
26
+ const result = Papa.parse(raw, {
27
+ header: true,
28
+ skipEmptyLines: true,
29
+ delimiter: this.delimiter,
30
+ });
31
+ const headers = result.meta.fields ?? [];
32
+ const contentCol = this.contentColumn ?? headers[0];
33
+ return result.data.map((row) => {
34
+ const content = row[contentCol] ?? '';
35
+ const metadata = this.extractMetadata(row);
36
+ return {
37
+ id: nanoid(),
38
+ content,
39
+ source: filePath,
40
+ sourceType: 'csv',
41
+ ...(metadata && Object.keys(metadata).length > 0 && { metadata }),
42
+ };
43
+ });
44
+ }
45
+ extractMetadata(row) {
46
+ if (!this.metadataColumns)
47
+ return undefined;
48
+ const metadata = {};
49
+ for (const col of this.metadataColumns) {
50
+ if (col in row) {
51
+ metadata[col] = row[col];
52
+ }
53
+ }
54
+ return metadata;
55
+ }
56
+ }
57
+ //# sourceMappingURL=csv-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-loader.js","sourceRoot":"","sources":["../../src/loaders/csv-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAQD,MAAM,OAAO,SAAS;IACX,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;IACjB,aAAa,CAAU;IACvB,eAAe,CAAY;IAC3B,SAAS,CAAU;IAEpC,YAAY,OAA0B;QACpC,IAAI,CAAC,aAAa,GAAG,OAAO,EAAE,aAAa,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAyB,GAAG,EAAE;YACrD,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QAEpD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE3C,OAAO;gBACL,EAAE,EAAE,MAAM,EAAE;gBACZ,OAAO;gBACP,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,KAAc;gBAC1B,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;aAClE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,GAA2B;QACjD,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,SAAS,CAAC;QAE5C,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACf,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}