@eucoder/rag 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.
- package/README.md +384 -0
- package/dist/ab-testing.d.ts +52 -0
- package/dist/ab-testing.d.ts.map +1 -0
- package/dist/ab-testing.js +144 -0
- package/dist/ab-testing.js.map +1 -0
- package/dist/ab-testing.test.d.ts +2 -0
- package/dist/ab-testing.test.d.ts.map +1 -0
- package/dist/ab-testing.test.js +147 -0
- package/dist/ab-testing.test.js.map +1 -0
- package/dist/agentic-rag.d.ts +23 -0
- package/dist/agentic-rag.d.ts.map +1 -0
- package/dist/agentic-rag.js +170 -0
- package/dist/agentic-rag.js.map +1 -0
- package/dist/agentic-rag.test.d.ts +2 -0
- package/dist/agentic-rag.test.d.ts.map +1 -0
- package/dist/agentic-rag.test.js +174 -0
- package/dist/agentic-rag.test.js.map +1 -0
- package/dist/corrective-rag.d.ts +16 -0
- package/dist/corrective-rag.d.ts.map +1 -0
- package/dist/corrective-rag.js +85 -0
- package/dist/corrective-rag.js.map +1 -0
- package/dist/corrective-rag.test.d.ts +2 -0
- package/dist/corrective-rag.test.d.ts.map +1 -0
- package/dist/corrective-rag.test.js +140 -0
- package/dist/corrective-rag.test.js.map +1 -0
- package/dist/feedback.d.ts +77 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +44 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.test.d.ts +2 -0
- package/dist/feedback.test.d.ts.map +1 -0
- package/dist/feedback.test.js +202 -0
- package/dist/feedback.test.js.map +1 -0
- package/dist/hybrid-search.d.ts +14 -0
- package/dist/hybrid-search.d.ts.map +1 -0
- package/dist/hybrid-search.js +70 -0
- package/dist/hybrid-search.js.map +1 -0
- package/dist/hybrid-search.test.d.ts +2 -0
- package/dist/hybrid-search.test.d.ts.map +1 -0
- package/dist/hybrid-search.test.js +93 -0
- package/dist/hybrid-search.test.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge-graph.d.ts +24 -0
- package/dist/knowledge-graph.d.ts.map +1 -0
- package/dist/knowledge-graph.js +131 -0
- package/dist/knowledge-graph.js.map +1 -0
- package/dist/knowledge-graph.test.d.ts +2 -0
- package/dist/knowledge-graph.test.d.ts.map +1 -0
- package/dist/knowledge-graph.test.js +140 -0
- package/dist/knowledge-graph.test.js.map +1 -0
- package/dist/llm-grader.d.ts +19 -0
- package/dist/llm-grader.d.ts.map +1 -0
- package/dist/llm-grader.js +63 -0
- package/dist/llm-grader.js.map +1 -0
- package/dist/metrics.d.ts +26 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +100 -0
- package/dist/metrics.js.map +1 -0
- package/dist/optimizer.d.ts +52 -0
- package/dist/optimizer.d.ts.map +1 -0
- package/dist/optimizer.js +228 -0
- package/dist/optimizer.js.map +1 -0
- package/dist/optimizer.test.d.ts +2 -0
- package/dist/optimizer.test.d.ts.map +1 -0
- package/dist/optimizer.test.js +201 -0
- package/dist/optimizer.test.js.map +1 -0
- package/dist/self-improving.d.ts +85 -0
- package/dist/self-improving.d.ts.map +1 -0
- package/dist/self-improving.js +163 -0
- package/dist/self-improving.js.map +1 -0
- package/dist/self-improving.test.d.ts +2 -0
- package/dist/self-improving.test.d.ts.map +1 -0
- package/dist/self-improving.test.js +234 -0
- package/dist/self-improving.test.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
- package/src/ab-testing.test.ts +239 -0
- package/src/ab-testing.ts +214 -0
- package/src/agentic-rag.test.ts +201 -0
- package/src/agentic-rag.ts +220 -0
- package/src/corrective-rag.test.ts +166 -0
- package/src/corrective-rag.ts +115 -0
- package/src/feedback.test.ts +227 -0
- package/src/feedback.ts +118 -0
- package/src/hybrid-search.test.ts +107 -0
- package/src/hybrid-search.ts +86 -0
- package/src/index.ts +57 -0
- package/src/knowledge-graph.test.ts +170 -0
- package/src/knowledge-graph.ts +182 -0
- package/src/llm-grader.ts +69 -0
- package/src/metrics.ts +121 -0
- package/src/optimizer.test.ts +232 -0
- package/src/optimizer.ts +307 -0
- package/src/self-improving.test.ts +341 -0
- package/src/self-improving.ts +239 -0
- package/src/types.ts +139 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
|
+
import { ABTestFramework } from "./ab-testing.js";
|
|
3
|
+
import { InMemoryFeedbackStorage } from "./feedback.js";
|
|
4
|
+
describe("ABTestFramework", () => {
|
|
5
|
+
let framework;
|
|
6
|
+
let storage;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
storage = new InMemoryFeedbackStorage();
|
|
9
|
+
framework = new ABTestFramework(storage);
|
|
10
|
+
});
|
|
11
|
+
it("should register strategies", () => {
|
|
12
|
+
const config = {
|
|
13
|
+
name: "strategy-a",
|
|
14
|
+
type: "corrective",
|
|
15
|
+
params: { minGoodHits: 2 },
|
|
16
|
+
};
|
|
17
|
+
framework.registerStrategy(config);
|
|
18
|
+
// Strategy registered successfully
|
|
19
|
+
expect(true).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it("should select strategy randomly", () => {
|
|
22
|
+
const configA = {
|
|
23
|
+
name: "strategy-a",
|
|
24
|
+
type: "corrective",
|
|
25
|
+
params: {},
|
|
26
|
+
};
|
|
27
|
+
const configB = {
|
|
28
|
+
name: "strategy-b",
|
|
29
|
+
type: "hybrid",
|
|
30
|
+
params: {},
|
|
31
|
+
};
|
|
32
|
+
framework.registerStrategy(configA);
|
|
33
|
+
framework.registerStrategy(configB);
|
|
34
|
+
const selected = framework.selectStrategy();
|
|
35
|
+
expect(["strategy-a", "strategy-b"]).toContain(selected.name);
|
|
36
|
+
});
|
|
37
|
+
it("should throw error when no strategies registered", () => {
|
|
38
|
+
expect(() => framework.selectStrategy()).toThrow("No strategies registered");
|
|
39
|
+
});
|
|
40
|
+
it("should record feedback", async () => {
|
|
41
|
+
const config = {
|
|
42
|
+
name: "strategy-a",
|
|
43
|
+
type: "corrective",
|
|
44
|
+
params: {},
|
|
45
|
+
};
|
|
46
|
+
framework.registerStrategy(config);
|
|
47
|
+
await framework.recordFeedback("test query", { text: "test answer", citations: [], steps: [], rewrites: 0 }, 4, 0.8, 0.7, 0.9, "strategy-a");
|
|
48
|
+
const feedback = await storage.getFeedback("strategy-a");
|
|
49
|
+
expect(feedback).toHaveLength(1);
|
|
50
|
+
expect(feedback[0]?.rating).toBe(4);
|
|
51
|
+
});
|
|
52
|
+
it("should run A/B test with sufficient samples", async () => {
|
|
53
|
+
const configA = {
|
|
54
|
+
name: "strategy-a",
|
|
55
|
+
type: "corrective",
|
|
56
|
+
params: {},
|
|
57
|
+
};
|
|
58
|
+
const configB = {
|
|
59
|
+
name: "strategy-b",
|
|
60
|
+
type: "hybrid",
|
|
61
|
+
params: {},
|
|
62
|
+
};
|
|
63
|
+
framework.registerStrategy(configA);
|
|
64
|
+
framework.registerStrategy(configB);
|
|
65
|
+
// Add 30 samples for strategy A (lower quality)
|
|
66
|
+
for (let i = 0; i < 30; i++) {
|
|
67
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 3, 0.6, 0.5, 0.7, "strategy-a");
|
|
68
|
+
}
|
|
69
|
+
// Add 30 samples for strategy B (higher quality)
|
|
70
|
+
for (let i = 0; i < 30; i++) {
|
|
71
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 5, 0.9, 0.85, 0.95, "strategy-b");
|
|
72
|
+
}
|
|
73
|
+
const result = await framework.runABTest("strategy-a", "strategy-b", 20);
|
|
74
|
+
expect(result.strategyA).toBe("strategy-a");
|
|
75
|
+
expect(result.strategyB).toBe("strategy-b");
|
|
76
|
+
expect(result.winner).toBe("B");
|
|
77
|
+
expect(result.improvement).toBeGreaterThan(0);
|
|
78
|
+
expect(result.statisticalSignificance).toBeGreaterThan(0);
|
|
79
|
+
expect(result.recommendation).toContain("B");
|
|
80
|
+
});
|
|
81
|
+
it("should throw error with insufficient samples", async () => {
|
|
82
|
+
const configA = {
|
|
83
|
+
name: "strategy-a",
|
|
84
|
+
type: "corrective",
|
|
85
|
+
params: {},
|
|
86
|
+
};
|
|
87
|
+
const configB = {
|
|
88
|
+
name: "strategy-b",
|
|
89
|
+
type: "hybrid",
|
|
90
|
+
params: {},
|
|
91
|
+
};
|
|
92
|
+
framework.registerStrategy(configA);
|
|
93
|
+
framework.registerStrategy(configB);
|
|
94
|
+
// Add only 10 samples (not enough)
|
|
95
|
+
for (let i = 0; i < 10; i++) {
|
|
96
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 4, 0.8, 0.7, 0.9, "strategy-a");
|
|
97
|
+
}
|
|
98
|
+
await expect(framework.runABTest("strategy-a", "strategy-b", 20))
|
|
99
|
+
.rejects.toThrow("Insufficient samples");
|
|
100
|
+
});
|
|
101
|
+
it("should get strategy metrics", async () => {
|
|
102
|
+
const config = {
|
|
103
|
+
name: "strategy-a",
|
|
104
|
+
type: "corrective",
|
|
105
|
+
params: {},
|
|
106
|
+
};
|
|
107
|
+
framework.registerStrategy(config);
|
|
108
|
+
for (let i = 0; i < 5; i++) {
|
|
109
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 4, 0.8, 0.7, 0.9, "strategy-a");
|
|
110
|
+
}
|
|
111
|
+
const metrics = await framework.getStrategyMetrics("strategy-a");
|
|
112
|
+
expect(metrics).not.toBeNull();
|
|
113
|
+
expect(metrics?.totalQueries).toBe(5);
|
|
114
|
+
expect(metrics?.averageRating).toBe(4);
|
|
115
|
+
});
|
|
116
|
+
it("should return null for non-existent strategy metrics", async () => {
|
|
117
|
+
const metrics = await framework.getStrategyMetrics("non-existent");
|
|
118
|
+
expect(metrics).toBeNull();
|
|
119
|
+
});
|
|
120
|
+
it("should get all metrics sorted by score", async () => {
|
|
121
|
+
const configA = {
|
|
122
|
+
name: "strategy-a",
|
|
123
|
+
type: "corrective",
|
|
124
|
+
params: {},
|
|
125
|
+
};
|
|
126
|
+
const configB = {
|
|
127
|
+
name: "strategy-b",
|
|
128
|
+
type: "hybrid",
|
|
129
|
+
params: {},
|
|
130
|
+
};
|
|
131
|
+
framework.registerStrategy(configA);
|
|
132
|
+
framework.registerStrategy(configB);
|
|
133
|
+
// Strategy A: lower quality
|
|
134
|
+
for (let i = 0; i < 5; i++) {
|
|
135
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 3, 0.6, 0.5, 0.7, "strategy-a");
|
|
136
|
+
}
|
|
137
|
+
// Strategy B: higher quality
|
|
138
|
+
for (let i = 0; i < 5; i++) {
|
|
139
|
+
await framework.recordFeedback(`query ${i}`, { text: `answer ${i}`, citations: [], steps: [], rewrites: 0 }, 5, 0.9, 0.85, 0.95, "strategy-b");
|
|
140
|
+
}
|
|
141
|
+
const allMetrics = await framework.getAllMetrics();
|
|
142
|
+
expect(allMetrics).toHaveLength(2);
|
|
143
|
+
expect(allMetrics[0]?.strategy).toBe("strategy-b");
|
|
144
|
+
expect(allMetrics[0]?.overallScore).toBeGreaterThan(allMetrics[1]?.overallScore || 0);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=ab-testing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ab-testing.test.js","sourceRoot":"","sources":["../src/ab-testing.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AgenticRagOptions, AgenticRagResult } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Agentic RAG con Reasoning e Self-Reflection
|
|
4
|
+
*
|
|
5
|
+
* Implementa un ciclo di ragionamento:
|
|
6
|
+
* 1. Thought: Analizza la query e pianifica l'approccio
|
|
7
|
+
* 2. Action: Esegue retrieval e grading
|
|
8
|
+
* 3. Observation: Valuta i risultati
|
|
9
|
+
* 4. Self-Reflection: Valuta la qualità della risposta
|
|
10
|
+
* 5. Itera se necessario
|
|
11
|
+
*/
|
|
12
|
+
export declare class AgenticRag {
|
|
13
|
+
private options;
|
|
14
|
+
constructor(options: AgenticRagOptions);
|
|
15
|
+
search(query: string): Promise<AgenticRagResult>;
|
|
16
|
+
private generateThought;
|
|
17
|
+
private gradeHits;
|
|
18
|
+
private generateObservation;
|
|
19
|
+
private selfReflect;
|
|
20
|
+
private buildAnswer;
|
|
21
|
+
private finalReflection;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=agentic-rag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic-rag.d.ts","sourceRoot":"","sources":["../src/agentic-rag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,EAAE,iBAAiB;IAShC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiFtD,OAAO,CAAC,eAAe;YAQT,SAAS;IAavB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,eAAe;CAyBxB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic RAG con Reasoning e Self-Reflection
|
|
3
|
+
*
|
|
4
|
+
* Implementa un ciclo di ragionamento:
|
|
5
|
+
* 1. Thought: Analizza la query e pianifica l'approccio
|
|
6
|
+
* 2. Action: Esegue retrieval e grading
|
|
7
|
+
* 3. Observation: Valuta i risultati
|
|
8
|
+
* 4. Self-Reflection: Valuta la qualità della risposta
|
|
9
|
+
* 5. Itera se necessario
|
|
10
|
+
*/
|
|
11
|
+
export class AgenticRag {
|
|
12
|
+
options;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = {
|
|
15
|
+
maxIterations: options.maxIterations ?? 3,
|
|
16
|
+
enableSelfReflection: options.enableSelfReflection ?? true,
|
|
17
|
+
enableChainOfThought: options.enableChainOfThought ?? true,
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async search(query) {
|
|
22
|
+
const reasoningSteps = [];
|
|
23
|
+
let currentQuery = query;
|
|
24
|
+
let bestHits = [];
|
|
25
|
+
let bestScore = 0;
|
|
26
|
+
let iterations = 0;
|
|
27
|
+
// Ciclo di ragionamento
|
|
28
|
+
for (let i = 0; i < this.options.maxIterations; i++) {
|
|
29
|
+
iterations++;
|
|
30
|
+
// Step 1: Thought
|
|
31
|
+
const thought = this.generateThought(currentQuery, i);
|
|
32
|
+
// Step 2: Action - Retrieval
|
|
33
|
+
const hits = await this.options.retriever.search(currentQuery, 10);
|
|
34
|
+
// Step 3: Action - Grading
|
|
35
|
+
const gradedHits = await this.gradeHits(currentQuery, hits);
|
|
36
|
+
const avgScore = gradedHits.length > 0
|
|
37
|
+
? gradedHits.reduce((sum, h) => sum + h.score, 0) / gradedHits.length
|
|
38
|
+
: 0;
|
|
39
|
+
// Step 4: Observation
|
|
40
|
+
const observation = this.generateObservation(gradedHits, avgScore);
|
|
41
|
+
reasoningSteps.push({
|
|
42
|
+
thought,
|
|
43
|
+
action: `Retrieved ${hits.length} hits, graded ${gradedHits.length} as relevant`,
|
|
44
|
+
observation,
|
|
45
|
+
});
|
|
46
|
+
// Aggiorna best hits se migliori
|
|
47
|
+
if (avgScore > bestScore) {
|
|
48
|
+
bestScore = avgScore;
|
|
49
|
+
bestHits = gradedHits;
|
|
50
|
+
}
|
|
51
|
+
// Step 5: Self-Reflection (se abilitato)
|
|
52
|
+
if (this.options.enableSelfReflection && i < this.options.maxIterations - 1) {
|
|
53
|
+
const reflection = this.selfReflect(currentQuery, gradedHits, avgScore);
|
|
54
|
+
if (reflection.shouldRewrite) {
|
|
55
|
+
// Riscrivi la query
|
|
56
|
+
currentQuery = await this.options.rewriter.rewrite(currentQuery, gradedHits.map((h) => h.text).join("\n"));
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
else if (reflection.isSatisfied) {
|
|
60
|
+
break; // Risultati soddisfacenti
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (avgScore > 0.7) {
|
|
64
|
+
break; // Score足够高, termina
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Genera risposta finale
|
|
68
|
+
const answer = this.buildAnswer(query, bestHits, reasoningSteps);
|
|
69
|
+
const citations = bestHits.map((hit) => ({
|
|
70
|
+
path: hit.path,
|
|
71
|
+
startLine: hit.startLine,
|
|
72
|
+
endLine: hit.endLine,
|
|
73
|
+
text: hit.text,
|
|
74
|
+
}));
|
|
75
|
+
// Self-reflection finale
|
|
76
|
+
const selfReflection = this.options.enableSelfReflection
|
|
77
|
+
? this.finalReflection(query, bestHits, bestScore, iterations)
|
|
78
|
+
: undefined;
|
|
79
|
+
return {
|
|
80
|
+
answer,
|
|
81
|
+
citations,
|
|
82
|
+
reasoningSteps,
|
|
83
|
+
selfReflection,
|
|
84
|
+
iterations,
|
|
85
|
+
confidence: bestScore,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
generateThought(query, iteration) {
|
|
89
|
+
if (iteration === 0) {
|
|
90
|
+
return `Analizzo la query: "${query}". Cerco documenti rilevanti e valuto la loro pertinenza.`;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
return `Iterazione ${iteration + 1}. I risultati precedenti non erano sufficientemente pertinenti. Riscrivo la query per migliorare i risultati.`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async gradeHits(query, hits) {
|
|
97
|
+
const graded = await Promise.all(hits.map(async (hit) => {
|
|
98
|
+
const result = await this.options.grader.grade(query, hit);
|
|
99
|
+
return { ...hit, score: result.score };
|
|
100
|
+
}));
|
|
101
|
+
return graded
|
|
102
|
+
.filter((h) => h.score > 0.3)
|
|
103
|
+
.sort((a, b) => b.score - a.score);
|
|
104
|
+
}
|
|
105
|
+
generateObservation(hits, avgScore) {
|
|
106
|
+
if (hits.length === 0) {
|
|
107
|
+
return "Nessun documento rilevante trovato. Score medio: 0";
|
|
108
|
+
}
|
|
109
|
+
return `Trovati ${hits.length} documenti rilevanti. Score medio: ${avgScore.toFixed(2)}. Miglior documento: ${hits[0]?.path ?? "N/A"}`;
|
|
110
|
+
}
|
|
111
|
+
selfReflect(_query, hits, avgScore) {
|
|
112
|
+
// Se score è alto, siamo soddisfatti
|
|
113
|
+
if (avgScore > 0.7 && hits.length >= 3) {
|
|
114
|
+
return { shouldRewrite: false, isSatisfied: true };
|
|
115
|
+
}
|
|
116
|
+
// Se score è molto basso, riscrivi
|
|
117
|
+
if (avgScore < 0.4 || hits.length < 2) {
|
|
118
|
+
return { shouldRewrite: true, isSatisfied: false };
|
|
119
|
+
}
|
|
120
|
+
// Score medio, continua ma non riscrivere
|
|
121
|
+
return { shouldRewrite: false, isSatisfied: false };
|
|
122
|
+
}
|
|
123
|
+
buildAnswer(_query, hits, reasoningSteps) {
|
|
124
|
+
const parts = [];
|
|
125
|
+
// Chain of Thought (se abilitato)
|
|
126
|
+
if (this.options.enableChainOfThought && reasoningSteps.length > 0) {
|
|
127
|
+
parts.push(`## Processo di Ragionamento\n`);
|
|
128
|
+
reasoningSteps.forEach((step, i) => {
|
|
129
|
+
parts.push(`### Step ${i + 1}`);
|
|
130
|
+
parts.push(`**Thought:** ${step.thought}`);
|
|
131
|
+
parts.push(`**Action:** ${step.action}`);
|
|
132
|
+
parts.push(`**Observation:** ${step.observation}\n`);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Risposta finale
|
|
136
|
+
parts.push(`## Risposta\n`);
|
|
137
|
+
if (hits.length === 0) {
|
|
138
|
+
parts.push(`Non sono stati trovati documenti rilevanti per la query fornita.`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
parts.push(`Basato su ${hits.length} documenti pertinenti:\n`);
|
|
142
|
+
hits.slice(0, 5).forEach((hit, i) => {
|
|
143
|
+
parts.push(`### Fonte ${i + 1}: ${hit.path}`);
|
|
144
|
+
parts.push(`Righe ${hit.startLine}-${hit.endLine} (score: ${hit.score.toFixed(2)})\n`);
|
|
145
|
+
parts.push(`\`\`\`\n${hit.text}\n\`\`\`\n`);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return parts.join("\n");
|
|
149
|
+
}
|
|
150
|
+
finalReflection(query, hits, avgScore, iterations) {
|
|
151
|
+
const parts = [];
|
|
152
|
+
parts.push(`**Valutazione Finale:**`);
|
|
153
|
+
parts.push(`- Query: "${query}"`);
|
|
154
|
+
parts.push(`- Iterazioni: ${iterations}`);
|
|
155
|
+
parts.push(`- Documenti trovati: ${hits.length}`);
|
|
156
|
+
parts.push(`- Score medio: ${avgScore.toFixed(2)}`);
|
|
157
|
+
parts.push(`- Confidenza: ${avgScore > 0.7 ? "Alta" : avgScore > 0.4 ? "Media" : "Bassa"}`);
|
|
158
|
+
if (avgScore > 0.7) {
|
|
159
|
+
parts.push(`\n✅ I risultati sono altamente pertinenti alla query.`);
|
|
160
|
+
}
|
|
161
|
+
else if (avgScore > 0.4) {
|
|
162
|
+
parts.push(`\n⚠️ I risultati sono parzialmente pertinenti. Potrebbe essere necessario raffinare la query.`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
parts.push(`\n❌ I risultati non sono sufficientemente pertinenti. Considera di riformulare la query.`);
|
|
166
|
+
}
|
|
167
|
+
return parts.join("\n");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=agentic-rag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic-rag.js","sourceRoot":"","sources":["../src/agentic-rag.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic-rag.test.d.ts","sourceRoot":"","sources":["../src/agentic-rag.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { AgenticRag } from "./agentic-rag.js";
|
|
3
|
+
class MockRetriever {
|
|
4
|
+
callCount = 0;
|
|
5
|
+
async search(_query, topK) {
|
|
6
|
+
this.callCount++;
|
|
7
|
+
// First call returns poor results, second call returns good results
|
|
8
|
+
if (this.callCount === 1) {
|
|
9
|
+
return [
|
|
10
|
+
{
|
|
11
|
+
id: "hit-1",
|
|
12
|
+
path: "src/unrelated.ts",
|
|
13
|
+
startLine: 1,
|
|
14
|
+
endLine: 10,
|
|
15
|
+
text: "Unrelated content",
|
|
16
|
+
score: 0.3,
|
|
17
|
+
},
|
|
18
|
+
].slice(0, topK);
|
|
19
|
+
}
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
id: "hit-2",
|
|
23
|
+
path: "src/auth.ts",
|
|
24
|
+
startLine: 10,
|
|
25
|
+
endLine: 20,
|
|
26
|
+
text: "Authentication implementation",
|
|
27
|
+
score: 0.9,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "hit-3",
|
|
31
|
+
path: "src/login.ts",
|
|
32
|
+
startLine: 5,
|
|
33
|
+
endLine: 15,
|
|
34
|
+
text: "Login logic",
|
|
35
|
+
score: 0.85,
|
|
36
|
+
},
|
|
37
|
+
].slice(0, topK);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
class MockGrader {
|
|
41
|
+
async grade(_query, hit) {
|
|
42
|
+
return {
|
|
43
|
+
relevant: hit.score > 0.5,
|
|
44
|
+
score: hit.score,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
class MockRewriter {
|
|
49
|
+
async rewrite(query, _context) {
|
|
50
|
+
return `${query} (improved)`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
describe("AgenticRag", () => {
|
|
54
|
+
it("should perform iterative search with reasoning", async () => {
|
|
55
|
+
const agentic = new AgenticRag({
|
|
56
|
+
retriever: new MockRetriever(),
|
|
57
|
+
grader: new MockGrader(),
|
|
58
|
+
rewriter: new MockRewriter(),
|
|
59
|
+
maxIterations: 3,
|
|
60
|
+
enableSelfReflection: true,
|
|
61
|
+
enableChainOfThought: true,
|
|
62
|
+
});
|
|
63
|
+
const result = await agentic.search("authentication");
|
|
64
|
+
expect(result.iterations).toBeGreaterThan(0);
|
|
65
|
+
expect(result.reasoningSteps.length).toBeGreaterThan(0);
|
|
66
|
+
expect(result.answer).toContain("Processo di Ragionamento");
|
|
67
|
+
expect(result.citations.length).toBeGreaterThan(0);
|
|
68
|
+
});
|
|
69
|
+
it("should stop early when results are good enough", async () => {
|
|
70
|
+
const goodRetriever = {
|
|
71
|
+
async search(_query, topK) {
|
|
72
|
+
return [
|
|
73
|
+
{
|
|
74
|
+
id: "hit-1",
|
|
75
|
+
path: "src/auth.ts",
|
|
76
|
+
startLine: 10,
|
|
77
|
+
endLine: 20,
|
|
78
|
+
text: "Authentication implementation",
|
|
79
|
+
score: 0.9,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "hit-2",
|
|
83
|
+
path: "src/login.ts",
|
|
84
|
+
startLine: 5,
|
|
85
|
+
endLine: 15,
|
|
86
|
+
text: "Login logic",
|
|
87
|
+
score: 0.85,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "hit-3",
|
|
91
|
+
path: "src/session.ts",
|
|
92
|
+
startLine: 1,
|
|
93
|
+
endLine: 10,
|
|
94
|
+
text: "Session management",
|
|
95
|
+
score: 0.8,
|
|
96
|
+
},
|
|
97
|
+
].slice(0, topK);
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
const agentic = new AgenticRag({
|
|
101
|
+
retriever: goodRetriever,
|
|
102
|
+
grader: new MockGrader(),
|
|
103
|
+
rewriter: new MockRewriter(),
|
|
104
|
+
maxIterations: 5,
|
|
105
|
+
enableSelfReflection: true,
|
|
106
|
+
});
|
|
107
|
+
const result = await agentic.search("authentication");
|
|
108
|
+
// Should stop after 1 iteration because results are good
|
|
109
|
+
expect(result.iterations).toBe(1);
|
|
110
|
+
expect(result.confidence).toBeGreaterThan(0.7);
|
|
111
|
+
});
|
|
112
|
+
it("should rewrite query when results are poor", async () => {
|
|
113
|
+
const poorRetriever = {
|
|
114
|
+
async search(_query, topK) {
|
|
115
|
+
return [
|
|
116
|
+
{
|
|
117
|
+
id: "hit-1",
|
|
118
|
+
path: "src/unrelated.ts",
|
|
119
|
+
startLine: 1,
|
|
120
|
+
endLine: 10,
|
|
121
|
+
text: "Unrelated content",
|
|
122
|
+
score: 0.2,
|
|
123
|
+
},
|
|
124
|
+
].slice(0, topK);
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
const agentic = new AgenticRag({
|
|
128
|
+
retriever: poorRetriever,
|
|
129
|
+
grader: new MockGrader(),
|
|
130
|
+
rewriter: new MockRewriter(),
|
|
131
|
+
maxIterations: 3,
|
|
132
|
+
enableSelfReflection: true,
|
|
133
|
+
});
|
|
134
|
+
const result = await agentic.search("authentication");
|
|
135
|
+
// Should iterate multiple times trying to improve
|
|
136
|
+
expect(result.iterations).toBeGreaterThan(1);
|
|
137
|
+
expect(result.confidence).toBeLessThan(0.5);
|
|
138
|
+
});
|
|
139
|
+
it("should include self-reflection when enabled", async () => {
|
|
140
|
+
const agentic = new AgenticRag({
|
|
141
|
+
retriever: new MockRetriever(),
|
|
142
|
+
grader: new MockGrader(),
|
|
143
|
+
rewriter: new MockRewriter(),
|
|
144
|
+
maxIterations: 2,
|
|
145
|
+
enableSelfReflection: true,
|
|
146
|
+
});
|
|
147
|
+
const result = await agentic.search("authentication");
|
|
148
|
+
expect(result.selfReflection).toBeDefined();
|
|
149
|
+
expect(result.selfReflection).toContain("Valutazione Finale");
|
|
150
|
+
});
|
|
151
|
+
it("should skip self-reflection when disabled", async () => {
|
|
152
|
+
const agentic = new AgenticRag({
|
|
153
|
+
retriever: new MockRetriever(),
|
|
154
|
+
grader: new MockGrader(),
|
|
155
|
+
rewriter: new MockRewriter(),
|
|
156
|
+
maxIterations: 2,
|
|
157
|
+
enableSelfReflection: false,
|
|
158
|
+
});
|
|
159
|
+
const result = await agentic.search("authentication");
|
|
160
|
+
expect(result.selfReflection).toBeUndefined();
|
|
161
|
+
});
|
|
162
|
+
it("should skip chain of thought when disabled", async () => {
|
|
163
|
+
const agentic = new AgenticRag({
|
|
164
|
+
retriever: new MockRetriever(),
|
|
165
|
+
grader: new MockGrader(),
|
|
166
|
+
rewriter: new MockRewriter(),
|
|
167
|
+
maxIterations: 2,
|
|
168
|
+
enableChainOfThought: false,
|
|
169
|
+
});
|
|
170
|
+
const result = await agentic.search("authentication");
|
|
171
|
+
expect(result.answer).not.toContain("Processo di Ragionamento");
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=agentic-rag.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic-rag.test.js","sourceRoot":"","sources":["../src/agentic-rag.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CorrectiveRagOptions, RagAnswer } from "./types.js";
|
|
2
|
+
export declare class CorrectiveRag {
|
|
3
|
+
private retriever;
|
|
4
|
+
private grader;
|
|
5
|
+
private rewriter;
|
|
6
|
+
private maxRewrites;
|
|
7
|
+
private minGoodHits;
|
|
8
|
+
private minScore;
|
|
9
|
+
private webFallback?;
|
|
10
|
+
constructor(options: CorrectiveRagOptions);
|
|
11
|
+
answer(query: string): Promise<RagAnswer>;
|
|
12
|
+
private gradeHits;
|
|
13
|
+
private formatAnswer;
|
|
14
|
+
}
|
|
15
|
+
export declare function createCorrectiveRag(options: CorrectiveRagOptions): CorrectiveRag;
|
|
16
|
+
//# sourceMappingURL=corrective-rag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corrective-rag.d.ts","sourceRoot":"","sources":["../src/corrective-rag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EAKV,MAAM,YAAY,CAAC;AAOpB,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAoC;gBAE5C,OAAO,EAAE,oBAAoB;IAUnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YAoDjC,SAAS;IAavB,OAAO,CAAC,YAAY;CAYrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAEhF"}
|