@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.
- package/dist/chunkers/create-chunker.d.ts +3 -0
- package/dist/chunkers/create-chunker.d.ts.map +1 -0
- package/dist/chunkers/create-chunker.js +28 -0
- package/dist/chunkers/create-chunker.js.map +1 -0
- package/dist/chunkers/fixed-chunker.d.ts +12 -0
- package/dist/chunkers/fixed-chunker.d.ts.map +1 -0
- package/dist/chunkers/fixed-chunker.js +31 -0
- package/dist/chunkers/fixed-chunker.js.map +1 -0
- package/dist/chunkers/index.d.ts +5 -0
- package/dist/chunkers/index.d.ts.map +1 -0
- package/dist/chunkers/index.js +5 -0
- package/dist/chunkers/index.js.map +1 -0
- package/dist/chunkers/recursive-chunker.d.ts +18 -0
- package/dist/chunkers/recursive-chunker.d.ts.map +1 -0
- package/dist/chunkers/recursive-chunker.js +152 -0
- package/dist/chunkers/recursive-chunker.js.map +1 -0
- package/dist/chunkers/semantic-chunker.d.ts +19 -0
- package/dist/chunkers/semantic-chunker.d.ts.map +1 -0
- package/dist/chunkers/semantic-chunker.js +175 -0
- package/dist/chunkers/semantic-chunker.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/csv-loader.d.ts +16 -0
- package/dist/loaders/csv-loader.d.ts.map +1 -0
- package/dist/loaders/csv-loader.js +57 -0
- package/dist/loaders/csv-loader.js.map +1 -0
- package/dist/loaders/html-loader.d.ts +12 -0
- package/dist/loaders/html-loader.d.ts.map +1 -0
- package/dist/loaders/html-loader.js +40 -0
- package/dist/loaders/html-loader.js.map +1 -0
- package/dist/loaders/index.d.ts +14 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +8 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/loaders/json-loader.d.ts +16 -0
- package/dist/loaders/json-loader.d.ts.map +1 -0
- package/dist/loaders/json-loader.js +55 -0
- package/dist/loaders/json-loader.js.map +1 -0
- package/dist/loaders/markdown-loader.d.ts +14 -0
- package/dist/loaders/markdown-loader.d.ts.map +1 -0
- package/dist/loaders/markdown-loader.js +65 -0
- package/dist/loaders/markdown-loader.js.map +1 -0
- package/dist/loaders/pdf-loader.d.ts +14 -0
- package/dist/loaders/pdf-loader.d.ts.map +1 -0
- package/dist/loaders/pdf-loader.js +72 -0
- package/dist/loaders/pdf-loader.js.map +1 -0
- package/dist/loaders/text-loader.d.ts +8 -0
- package/dist/loaders/text-loader.d.ts.map +1 -0
- package/dist/loaders/text-loader.js +40 -0
- package/dist/loaders/text-loader.js.map +1 -0
- package/dist/loaders/web-loader.d.ts +13 -0
- package/dist/loaders/web-loader.d.ts.map +1 -0
- package/dist/loaders/web-loader.js +23 -0
- package/dist/loaders/web-loader.js.map +1 -0
- package/dist/rag-builder.d.ts +22 -0
- package/dist/rag-builder.d.ts.map +1 -0
- package/dist/rag-builder.js +74 -0
- package/dist/rag-builder.js.map +1 -0
- package/dist/rag-pipeline.d.ts +28 -0
- package/dist/rag-pipeline.d.ts.map +1 -0
- package/dist/rag-pipeline.js +59 -0
- package/dist/rag-pipeline.js.map +1 -0
- package/dist/rerankers/cohere-reranker.d.ts +12 -0
- package/dist/rerankers/cohere-reranker.d.ts.map +1 -0
- package/dist/rerankers/cohere-reranker.js +37 -0
- package/dist/rerankers/cohere-reranker.js.map +1 -0
- package/dist/rerankers/index.d.ts +3 -0
- package/dist/rerankers/index.d.ts.map +1 -0
- package/dist/rerankers/index.js +3 -0
- package/dist/rerankers/index.js.map +1 -0
- package/dist/rerankers/llm-reranker.d.ts +12 -0
- package/dist/rerankers/llm-reranker.d.ts.map +1 -0
- package/dist/rerankers/llm-reranker.js +54 -0
- package/dist/rerankers/llm-reranker.js.map +1 -0
- package/dist/retrievers/create-retriever.d.ts +37 -0
- package/dist/retrievers/create-retriever.d.ts.map +1 -0
- package/dist/retrievers/create-retriever.js +37 -0
- package/dist/retrievers/create-retriever.js.map +1 -0
- package/dist/retrievers/hybrid-retriever.d.ts +18 -0
- package/dist/retrievers/hybrid-retriever.d.ts.map +1 -0
- package/dist/retrievers/hybrid-retriever.js +43 -0
- package/dist/retrievers/hybrid-retriever.js.map +1 -0
- package/dist/retrievers/index.d.ts +11 -0
- package/dist/retrievers/index.d.ts.map +1 -0
- package/dist/retrievers/index.js +6 -0
- package/dist/retrievers/index.js.map +1 -0
- package/dist/retrievers/mmr-retriever.d.ts +20 -0
- package/dist/retrievers/mmr-retriever.d.ts.map +1 -0
- package/dist/retrievers/mmr-retriever.js +89 -0
- package/dist/retrievers/mmr-retriever.js.map +1 -0
- package/dist/retrievers/multi-query-retriever.d.ts +14 -0
- package/dist/retrievers/multi-query-retriever.d.ts.map +1 -0
- package/dist/retrievers/multi-query-retriever.js +29 -0
- package/dist/retrievers/multi-query-retriever.js.map +1 -0
- package/dist/retrievers/similarity-retriever.d.ts +17 -0
- package/dist/retrievers/similarity-retriever.d.ts.map +1 -0
- package/dist/retrievers/similarity-retriever.js +39 -0
- package/dist/retrievers/similarity-retriever.js.map +1 -0
- package/dist/schema.d.ts +70 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +27 -0
- package/dist/schema.js.map +1 -0
- package/dist/tools.d.ts +23 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +45 -0
- package/dist/tools.js.map +1 -0
- package/package.json +1 -1
|
@@ -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 @@
|
|
|
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":"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"}
|
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|