@ariaflowagents/rag 0.4.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/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @ariaflowagents/rag
2
+
3
+ RAG primitives for AriaFlow (sources, chunkers, retrievers).
4
+
5
+ Guides: `packages/ariaflow-rag/guides/`
@@ -0,0 +1,4 @@
1
+ import type { Chunker, ChunkOptions } from './types.js';
2
+ export declare function createMarkdownChunker(defaultOptions?: ChunkOptions): Chunker;
3
+ export declare function createRecursiveChunker(defaultOptions?: ChunkOptions): Chunker;
4
+ //# sourceMappingURL=chunkers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkers.d.ts","sourceRoot":"","sources":["../src/chunkers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC;AAExE,wBAAgB,qBAAqB,CAAC,cAAc,GAAE,YAAiB,GAAG,OAAO,CA0BhF;AAED,wBAAgB,sBAAsB,CAAC,cAAc,GAAE,YAAiB,GAAG,OAAO,CAQjF"}
@@ -0,0 +1,77 @@
1
+ export function createMarkdownChunker(defaultOptions = {}) {
2
+ return {
3
+ chunk(text, options) {
4
+ const merged = { ...defaultOptions, ...options };
5
+ const sections = parseMarkdownSections(text);
6
+ const chunks = [];
7
+ const seen = new Map();
8
+ for (const section of sections) {
9
+ const baseId = section.id;
10
+ const count = (seen.get(baseId) ?? 0) + 1;
11
+ seen.set(baseId, count);
12
+ const id = count > 1 ? `${baseId} (${count})` : baseId;
13
+ const parts = splitByMaxChars(section.text, merged.maxChars, merged.overlapChars);
14
+ if (parts.length === 1) {
15
+ chunks.push({ id, text: parts[0] });
16
+ continue;
17
+ }
18
+ for (let i = 0; i < parts.length; i++) {
19
+ chunks.push({ id: `${id}#${i + 1}`, text: parts[i] });
20
+ }
21
+ }
22
+ return chunks;
23
+ },
24
+ };
25
+ }
26
+ export function createRecursiveChunker(defaultOptions = {}) {
27
+ return {
28
+ chunk(text, options) {
29
+ const merged = { ...defaultOptions, ...options };
30
+ const parts = splitByMaxChars(text, merged.maxChars, merged.overlapChars);
31
+ return parts.map((part, index) => ({ id: `chunk-${index + 1}`, text: part }));
32
+ },
33
+ };
34
+ }
35
+ function parseMarkdownSections(content) {
36
+ const lines = content.split(/\r?\n/);
37
+ const sections = [];
38
+ let currentId = null;
39
+ let buffer = [];
40
+ let firstHeadingUsed = false;
41
+ for (const line of lines) {
42
+ const h1 = line.match(/^#\s+(.+)$/);
43
+ const hN = line.match(/^#{2,6}\s+(.+)$/);
44
+ if (h1 && !firstHeadingUsed && buffer.length === 0 && !currentId) {
45
+ firstHeadingUsed = true;
46
+ continue;
47
+ }
48
+ if (hN) {
49
+ if (currentId || buffer.length > 0) {
50
+ sections.push({ id: currentId ?? 'section', text: buffer.join('\n').trim() });
51
+ }
52
+ currentId = hN[1].trim();
53
+ buffer = [];
54
+ continue;
55
+ }
56
+ buffer.push(line);
57
+ }
58
+ if (currentId || buffer.length > 0) {
59
+ sections.push({ id: currentId ?? 'section', text: buffer.join('\n').trim() });
60
+ }
61
+ return sections.filter(section => section.text.length > 0);
62
+ }
63
+ function splitByMaxChars(text, maxChars, overlapChars = 0) {
64
+ if (!maxChars || text.length <= maxChars) {
65
+ return [text];
66
+ }
67
+ const step = Math.max(1, maxChars - overlapChars);
68
+ const parts = [];
69
+ for (let start = 0; start < text.length; start += step) {
70
+ const end = Math.min(text.length, start + maxChars);
71
+ parts.push(text.slice(start, end));
72
+ if (end === text.length)
73
+ break;
74
+ }
75
+ return parts;
76
+ }
77
+ //# sourceMappingURL=chunkers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunkers.js","sourceRoot":"","sources":["../src/chunkers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { KnowledgeChunk, KnowledgeSource, Chunker, ChunkOptions, RetrievalHit, KnowledgeRetriever, LLMRetrieverOptions, } from './types.js';
2
+ export { createMarkdownChunker, createRecursiveChunker } from './chunkers.js';
3
+ export { createStaticKnowledgeSource } from './source.js';
4
+ export { createLLMRetriever } from './llmRetriever.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,eAAe,EACf,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createMarkdownChunker, createRecursiveChunker } from './chunkers.js';
2
+ export { createStaticKnowledgeSource } from './source.js';
3
+ export { createLLMRetriever } from './llmRetriever.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { KnowledgeRetriever, LLMRetrieverOptions } from './types.js';
2
+ export declare function createLLMRetriever(options: LLMRetrieverOptions): KnowledgeRetriever;
3
+ //# sourceMappingURL=llmRetriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmRetriever.d.ts","sourceRoot":"","sources":["../src/llmRetriever.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAmB,mBAAmB,EAAgB,MAAM,YAAY,CAAC;AAYzG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA4BnF"}
@@ -0,0 +1,88 @@
1
+ import { generateText, Output } from 'ai';
2
+ import { z } from 'zod';
3
+ const outputSchema = z.object({
4
+ ranked: z.array(z.object({
5
+ sourceId: z.string(),
6
+ chunkId: z.string(),
7
+ reason: z.string(),
8
+ })),
9
+ });
10
+ export function createLLMRetriever(options) {
11
+ const { model, topK = 4, includeReasons = true, candidateMaxChars = 1500 } = options;
12
+ return {
13
+ async retrieve(query, sources, opts) {
14
+ const k = Math.max(1, opts?.topK ?? topK);
15
+ const candidates = flattenCandidates(sources);
16
+ if (candidates.length === 0)
17
+ return [];
18
+ const prompt = buildPrompt({
19
+ query,
20
+ hint: opts?.hint,
21
+ candidates,
22
+ candidateMaxChars,
23
+ topK: k,
24
+ });
25
+ const { output } = await generateText({
26
+ model,
27
+ system: 'You are a retrieval ranker. Only select from provided chunk IDs.',
28
+ prompt,
29
+ output: Output.object({ schema: outputSchema }),
30
+ });
31
+ const ranked = output.ranked ?? [];
32
+ return coerceHits(ranked, candidates, k, includeReasons);
33
+ },
34
+ };
35
+ }
36
+ function flattenCandidates(sources) {
37
+ const candidates = [];
38
+ for (const source of sources) {
39
+ const chunks = source.getChunks();
40
+ for (const chunk of chunks) {
41
+ candidates.push({
42
+ sourceId: source.id,
43
+ chunkId: chunk.id,
44
+ text: chunk.text,
45
+ sourceName: source.name,
46
+ });
47
+ }
48
+ }
49
+ return candidates;
50
+ }
51
+ function buildPrompt(input) {
52
+ const header = [
53
+ `Query: ${input.query}`,
54
+ input.hint ? `Hint: ${input.hint}` : null,
55
+ `Return top ${input.topK} chunk IDs with short reasons.`,
56
+ 'Only use provided sourceId + chunkId pairs.',
57
+ ]
58
+ .filter(Boolean)
59
+ .join('\n');
60
+ const chunks = input.candidates
61
+ .map(candidate => {
62
+ const body = candidate.text.slice(0, input.candidateMaxChars);
63
+ return `sourceId: ${candidate.sourceId}\nchunkId: ${candidate.chunkId}\nsourceName: ${candidate.sourceName}\n${body}`;
64
+ })
65
+ .join('\n\n---\n\n');
66
+ return `${header}\n\nChunks:\n${chunks}`;
67
+ }
68
+ function coerceHits(ranked, candidates, topK, includeReasons) {
69
+ const candidateSet = new Set(candidates.map(c => `${c.sourceId}::${c.chunkId}`));
70
+ const hits = [];
71
+ for (const entry of ranked) {
72
+ const key = `${entry.sourceId}::${entry.chunkId}`;
73
+ if (!candidateSet.has(key))
74
+ continue;
75
+ if (hits.find(hit => hit.sourceId === entry.sourceId && hit.chunkId === entry.chunkId))
76
+ continue;
77
+ hits.push({
78
+ sourceId: entry.sourceId,
79
+ chunkId: entry.chunkId,
80
+ rank: hits.length + 1,
81
+ reason: includeReasons ? entry.reason ?? '' : undefined,
82
+ });
83
+ if (hits.length >= topK)
84
+ break;
85
+ }
86
+ return hits;
87
+ }
88
+ //# sourceMappingURL=llmRetriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llmRetriever.js","sourceRoot":"","sources":["../src/llmRetriever.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Chunker, KnowledgeSource } from './types.js';
2
+ export declare function createStaticKnowledgeSource(input: {
3
+ id: string;
4
+ name: string;
5
+ description?: string;
6
+ content: string;
7
+ chunker?: Chunker;
8
+ chunkOptions?: {
9
+ maxChars?: number;
10
+ overlapChars?: number;
11
+ };
12
+ }): KnowledgeSource;
13
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAG3E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7D,GAAG,eAAe,CAelB"}
package/dist/source.js ADDED
@@ -0,0 +1,17 @@
1
+ import { createMarkdownChunker } from './chunkers.js';
2
+ export function createStaticKnowledgeSource(input) {
3
+ const chunker = input.chunker ?? createMarkdownChunker(input.chunkOptions);
4
+ const chunks = chunker.chunk(input.content, input.chunkOptions);
5
+ return {
6
+ id: input.id,
7
+ name: input.name,
8
+ description: input.description,
9
+ getChunks() {
10
+ return chunks;
11
+ },
12
+ dumpContent() {
13
+ return input.content;
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,2BAA2B,CAAC,KAO3C;IACC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhE,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS;YACP,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,WAAW;YACT,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { LanguageModel } from 'ai';
2
+ export type KnowledgeChunk = {
3
+ id: string;
4
+ text: string;
5
+ meta?: Record<string, unknown>;
6
+ };
7
+ export interface KnowledgeSource {
8
+ id: string;
9
+ name: string;
10
+ description?: string;
11
+ getChunks(): KnowledgeChunk[];
12
+ dumpContent?(): string;
13
+ }
14
+ export interface Chunker {
15
+ chunk(text: string, options?: ChunkOptions): KnowledgeChunk[];
16
+ }
17
+ export type ChunkOptions = {
18
+ maxChars?: number;
19
+ overlapChars?: number;
20
+ };
21
+ export type RetrievalHit = {
22
+ sourceId: string;
23
+ chunkId: string;
24
+ rank: number;
25
+ score?: number;
26
+ reason?: string;
27
+ };
28
+ export interface KnowledgeRetriever {
29
+ retrieve(query: string, sources: KnowledgeSource[], options?: {
30
+ topK?: number;
31
+ hint?: string;
32
+ }): Promise<RetrievalHit[]>;
33
+ }
34
+ export type LLMRetrieverOptions = {
35
+ model: LanguageModel;
36
+ topK?: number;
37
+ includeReasons?: boolean;
38
+ candidateMaxChars?: number;
39
+ };
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,IAAI,cAAc,EAAE,CAAC;IAC9B,WAAW,CAAC,IAAI,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,EAAE,CAAC;CAC/D;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@ariaflowagents/rag",
3
+ "version": "0.4.3",
4
+ "description": "RAG primitives for AriaFlow",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "peerDependencies": {
15
+ "ai": "^6.0.0",
16
+ "zod": "^3.0.0"
17
+ },
18
+ "devDependencies": {
19
+ "@types/node": "^20.11.0",
20
+ "ai": "^6.0.0",
21
+ "typescript": "^5.3.0",
22
+ "zod": "^3.23.0"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "clean": "rm -rf dist",
27
+ "prepublishOnly": "npm run build"
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md"
35
+ ]
36
+ }