@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.
Files changed (103) hide show
  1. package/README.md +384 -0
  2. package/dist/ab-testing.d.ts +52 -0
  3. package/dist/ab-testing.d.ts.map +1 -0
  4. package/dist/ab-testing.js +144 -0
  5. package/dist/ab-testing.js.map +1 -0
  6. package/dist/ab-testing.test.d.ts +2 -0
  7. package/dist/ab-testing.test.d.ts.map +1 -0
  8. package/dist/ab-testing.test.js +147 -0
  9. package/dist/ab-testing.test.js.map +1 -0
  10. package/dist/agentic-rag.d.ts +23 -0
  11. package/dist/agentic-rag.d.ts.map +1 -0
  12. package/dist/agentic-rag.js +170 -0
  13. package/dist/agentic-rag.js.map +1 -0
  14. package/dist/agentic-rag.test.d.ts +2 -0
  15. package/dist/agentic-rag.test.d.ts.map +1 -0
  16. package/dist/agentic-rag.test.js +174 -0
  17. package/dist/agentic-rag.test.js.map +1 -0
  18. package/dist/corrective-rag.d.ts +16 -0
  19. package/dist/corrective-rag.d.ts.map +1 -0
  20. package/dist/corrective-rag.js +85 -0
  21. package/dist/corrective-rag.js.map +1 -0
  22. package/dist/corrective-rag.test.d.ts +2 -0
  23. package/dist/corrective-rag.test.d.ts.map +1 -0
  24. package/dist/corrective-rag.test.js +140 -0
  25. package/dist/corrective-rag.test.js.map +1 -0
  26. package/dist/feedback.d.ts +77 -0
  27. package/dist/feedback.d.ts.map +1 -0
  28. package/dist/feedback.js +44 -0
  29. package/dist/feedback.js.map +1 -0
  30. package/dist/feedback.test.d.ts +2 -0
  31. package/dist/feedback.test.d.ts.map +1 -0
  32. package/dist/feedback.test.js +202 -0
  33. package/dist/feedback.test.js.map +1 -0
  34. package/dist/hybrid-search.d.ts +14 -0
  35. package/dist/hybrid-search.d.ts.map +1 -0
  36. package/dist/hybrid-search.js +70 -0
  37. package/dist/hybrid-search.js.map +1 -0
  38. package/dist/hybrid-search.test.d.ts +2 -0
  39. package/dist/hybrid-search.test.d.ts.map +1 -0
  40. package/dist/hybrid-search.test.js +93 -0
  41. package/dist/hybrid-search.test.js.map +1 -0
  42. package/dist/index.d.ts +17 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +12 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/knowledge-graph.d.ts +24 -0
  47. package/dist/knowledge-graph.d.ts.map +1 -0
  48. package/dist/knowledge-graph.js +131 -0
  49. package/dist/knowledge-graph.js.map +1 -0
  50. package/dist/knowledge-graph.test.d.ts +2 -0
  51. package/dist/knowledge-graph.test.d.ts.map +1 -0
  52. package/dist/knowledge-graph.test.js +140 -0
  53. package/dist/knowledge-graph.test.js.map +1 -0
  54. package/dist/llm-grader.d.ts +19 -0
  55. package/dist/llm-grader.d.ts.map +1 -0
  56. package/dist/llm-grader.js +63 -0
  57. package/dist/llm-grader.js.map +1 -0
  58. package/dist/metrics.d.ts +26 -0
  59. package/dist/metrics.d.ts.map +1 -0
  60. package/dist/metrics.js +100 -0
  61. package/dist/metrics.js.map +1 -0
  62. package/dist/optimizer.d.ts +52 -0
  63. package/dist/optimizer.d.ts.map +1 -0
  64. package/dist/optimizer.js +228 -0
  65. package/dist/optimizer.js.map +1 -0
  66. package/dist/optimizer.test.d.ts +2 -0
  67. package/dist/optimizer.test.d.ts.map +1 -0
  68. package/dist/optimizer.test.js +201 -0
  69. package/dist/optimizer.test.js.map +1 -0
  70. package/dist/self-improving.d.ts +85 -0
  71. package/dist/self-improving.d.ts.map +1 -0
  72. package/dist/self-improving.js +163 -0
  73. package/dist/self-improving.js.map +1 -0
  74. package/dist/self-improving.test.d.ts +2 -0
  75. package/dist/self-improving.test.d.ts.map +1 -0
  76. package/dist/self-improving.test.js +234 -0
  77. package/dist/self-improving.test.js.map +1 -0
  78. package/dist/types.d.ts +117 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +2 -0
  81. package/dist/types.js.map +1 -0
  82. package/package.json +42 -0
  83. package/src/ab-testing.test.ts +239 -0
  84. package/src/ab-testing.ts +214 -0
  85. package/src/agentic-rag.test.ts +201 -0
  86. package/src/agentic-rag.ts +220 -0
  87. package/src/corrective-rag.test.ts +166 -0
  88. package/src/corrective-rag.ts +115 -0
  89. package/src/feedback.test.ts +227 -0
  90. package/src/feedback.ts +118 -0
  91. package/src/hybrid-search.test.ts +107 -0
  92. package/src/hybrid-search.ts +86 -0
  93. package/src/index.ts +57 -0
  94. package/src/knowledge-graph.test.ts +170 -0
  95. package/src/knowledge-graph.ts +182 -0
  96. package/src/llm-grader.ts +69 -0
  97. package/src/metrics.ts +121 -0
  98. package/src/optimizer.test.ts +232 -0
  99. package/src/optimizer.ts +307 -0
  100. package/src/self-improving.test.ts +341 -0
  101. package/src/self-improving.ts +239 -0
  102. package/src/types.ts +139 -0
  103. package/tsconfig.json +9 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Hybrid Search RAG - Combina semantic search e keyword search usando RRF (Reciprocal Rank Fusion)
3
+ *
4
+ * RRF Formula: score(d) = Σ 1/(k + rank_i(d))
5
+ * dove k è una costante (tipicamente 60) e rank_i è la posizione del documento nella lista i
6
+ */
7
+ export class HybridSearchRag {
8
+ options;
9
+ constructor(options) {
10
+ this.options = {
11
+ semanticWeight: options.semanticWeight ?? 0.5,
12
+ keywordWeight: options.keywordWeight ?? 0.5,
13
+ rrfK: options.rrfK ?? 60,
14
+ topK: options.topK ?? 10,
15
+ ...options,
16
+ };
17
+ }
18
+ async search(query, topK) {
19
+ const limit = topK ?? this.options.topK;
20
+ // Esegui entrambe le ricerche in parallelo
21
+ const [semanticHits, keywordHits] = await Promise.all([
22
+ this.options.semanticRetriever.search(query, limit * 2),
23
+ this.options.keywordRetriever.search(query, limit * 2),
24
+ ]);
25
+ // Applica RRF fusion
26
+ const fusedHits = this.reciprocalRankFusion(semanticHits, keywordHits);
27
+ // Prendi i top K risultati
28
+ const finalHits = fusedHits.slice(0, limit);
29
+ return {
30
+ hits: finalHits,
31
+ fusionMethod: "rrf",
32
+ semanticCount: semanticHits.length,
33
+ keywordCount: keywordHits.length,
34
+ };
35
+ }
36
+ reciprocalRankFusion(semanticHits, keywordHits) {
37
+ const scoreMap = new Map();
38
+ const k = this.options.rrfK;
39
+ // Calcola RRF score per semantic hits
40
+ semanticHits.forEach((hit, index) => {
41
+ const key = `${hit.path}:${hit.startLine}`;
42
+ const rrfScore = 1 / (k + index + 1);
43
+ const existing = scoreMap.get(key);
44
+ if (existing) {
45
+ existing.score += rrfScore * this.options.semanticWeight;
46
+ }
47
+ else {
48
+ scoreMap.set(key, { hit, score: rrfScore * this.options.semanticWeight });
49
+ }
50
+ });
51
+ // Calcola RRF score per keyword hits
52
+ keywordHits.forEach((hit, index) => {
53
+ const key = `${hit.path}:${hit.startLine}`;
54
+ const rrfScore = 1 / (k + index + 1);
55
+ const existing = scoreMap.get(key);
56
+ if (existing) {
57
+ existing.score += rrfScore * this.options.keywordWeight;
58
+ }
59
+ else {
60
+ scoreMap.set(key, { hit, score: rrfScore * this.options.keywordWeight });
61
+ }
62
+ });
63
+ // Ordina per score decrescente
64
+ const sorted = Array.from(scoreMap.values())
65
+ .sort((a, b) => b.score - a.score)
66
+ .map(({ hit, score }) => ({ ...hit, score }));
67
+ return sorted;
68
+ }
69
+ }
70
+ //# sourceMappingURL=hybrid-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-search.js","sourceRoot":"","sources":["../src/hybrid-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hybrid-search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-search.test.d.ts","sourceRoot":"","sources":["../src/hybrid-search.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { HybridSearchRag } from "./hybrid-search.js";
3
+ class MockSemanticRetriever {
4
+ async search(_query, topK) {
5
+ return [
6
+ {
7
+ id: "hit-1",
8
+ path: "src/auth.ts",
9
+ startLine: 10,
10
+ endLine: 20,
11
+ text: "Authentication logic",
12
+ score: 0.9,
13
+ },
14
+ {
15
+ id: "hit-2",
16
+ path: "src/login.ts",
17
+ startLine: 5,
18
+ endLine: 15,
19
+ text: "Login implementation",
20
+ score: 0.8,
21
+ },
22
+ ].slice(0, topK);
23
+ }
24
+ }
25
+ class MockKeywordRetriever {
26
+ async search(_query, topK) {
27
+ return [
28
+ {
29
+ id: "hit-2",
30
+ path: "src/login.ts",
31
+ startLine: 5,
32
+ endLine: 15,
33
+ text: "Login implementation",
34
+ score: 0.85,
35
+ },
36
+ {
37
+ id: "hit-3",
38
+ path: "src/session.ts",
39
+ startLine: 1,
40
+ endLine: 10,
41
+ text: "Session management",
42
+ score: 0.7,
43
+ },
44
+ ].slice(0, topK);
45
+ }
46
+ }
47
+ describe("HybridSearchRag", () => {
48
+ it("should combine semantic and keyword results using RRF", async () => {
49
+ const hybrid = new HybridSearchRag({
50
+ semanticRetriever: new MockSemanticRetriever(),
51
+ keywordRetriever: new MockKeywordRetriever(),
52
+ topK: 5,
53
+ });
54
+ const result = await hybrid.search("authentication");
55
+ expect(result.hits.length).toBeGreaterThan(0);
56
+ expect(result.fusionMethod).toBe("rrf");
57
+ expect(result.semanticCount).toBe(2);
58
+ expect(result.keywordCount).toBe(2);
59
+ });
60
+ it("should rank overlapping results higher", async () => {
61
+ const hybrid = new HybridSearchRag({
62
+ semanticRetriever: new MockSemanticRetriever(),
63
+ keywordRetriever: new MockKeywordRetriever(),
64
+ topK: 5,
65
+ });
66
+ const result = await hybrid.search("login");
67
+ // src/login.ts appears in both, should be ranked higher
68
+ const loginHit = result.hits.find((h) => h.path === "src/login.ts");
69
+ expect(loginHit).toBeDefined();
70
+ expect(result.hits[0]?.path).toBe("src/login.ts");
71
+ });
72
+ it("should respect custom weights", async () => {
73
+ const hybridSemantic = new HybridSearchRag({
74
+ semanticRetriever: new MockSemanticRetriever(),
75
+ keywordRetriever: new MockKeywordRetriever(),
76
+ semanticWeight: 0.9,
77
+ keywordWeight: 0.1,
78
+ topK: 5,
79
+ });
80
+ const resultSemantic = await hybridSemantic.search("auth");
81
+ const hybridKeyword = new HybridSearchRag({
82
+ semanticRetriever: new MockSemanticRetriever(),
83
+ keywordRetriever: new MockKeywordRetriever(),
84
+ semanticWeight: 0.1,
85
+ keywordWeight: 0.9,
86
+ topK: 5,
87
+ });
88
+ const resultKeyword = await hybridKeyword.search("auth");
89
+ // Results should differ based on weights
90
+ expect(resultSemantic.hits[0]?.score).not.toBe(resultKeyword.hits[0]?.score);
91
+ });
92
+ });
93
+ //# sourceMappingURL=hybrid-search.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-search.test.js","sourceRoot":"","sources":["../src/hybrid-search.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { CorrectiveRag, createCorrectiveRag } from "./corrective-rag.js";
2
+ export { LlmGrader, LlmQueryRewriter } from "./llm-grader.js";
3
+ export { HybridSearchRag } from "./hybrid-search.js";
4
+ export { KnowledgeGraphRag, InMemoryKnowledgeGraph } from "./knowledge-graph.js";
5
+ export { AgenticRag } from "./agentic-rag.js";
6
+ export { InMemoryFeedbackStorage } from "./feedback.js";
7
+ export { MetricsCalculator } from "./metrics.js";
8
+ export { ABTestFramework } from "./ab-testing.js";
9
+ export { ParameterOptimizer } from "./optimizer.js";
10
+ export { SelfImprovingRag } from "./self-improving.js";
11
+ export type { LlmProvider } from "./llm-grader.js";
12
+ export type { Retriever, KeywordRetriever, Grader, GraderResult, QueryRewriter, CorrectiveRagOptions, RagAnswer, RagCitation, HybridSearchOptions, HybridSearchResult, Entity, Relation, KnowledgeGraph, EntityExtractor, RelationExtractor, KnowledgeGraphRagOptions, KnowledgeGraphRagResult, ReasoningStep, AgenticRagOptions, AgenticRagResult, } from "./types.js";
13
+ export type { RagFeedback, RagMetrics, ABTestResult, OptimizationSuggestion, FeedbackStorage, } from "./feedback.js";
14
+ export type { RagStrategyConfig, } from "./ab-testing.js";
15
+ export type { OptimizableParams, } from "./optimizer.js";
16
+ export type { SelfImprovingConfig, } from "./self-improving.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,QAAQ,EACR,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,mBAAmB,GACpB,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export { CorrectiveRag, createCorrectiveRag } from "./corrective-rag.js";
2
+ export { LlmGrader, LlmQueryRewriter } from "./llm-grader.js";
3
+ export { HybridSearchRag } from "./hybrid-search.js";
4
+ export { KnowledgeGraphRag, InMemoryKnowledgeGraph } from "./knowledge-graph.js";
5
+ export { AgenticRag } from "./agentic-rag.js";
6
+ // Fase 4: Self-Improving
7
+ export { InMemoryFeedbackStorage } from "./feedback.js";
8
+ export { MetricsCalculator } from "./metrics.js";
9
+ export { ABTestFramework } from "./ab-testing.js";
10
+ export { ParameterOptimizer } from "./optimizer.js";
11
+ export { SelfImprovingRag } from "./self-improving.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,yBAAyB;AACzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { Entity, Relation, KnowledgeGraph, KnowledgeGraphRagOptions, KnowledgeGraphRagResult } from "./types.js";
2
+ /**
3
+ * Implementazione base di Knowledge Graph in memoria
4
+ */
5
+ export declare class InMemoryKnowledgeGraph implements KnowledgeGraph {
6
+ entities: Map<string, Entity>;
7
+ relations: Relation[];
8
+ addEntity(entity: Entity): void;
9
+ addRelation(relation: Relation): void;
10
+ getEntity(id: string): Entity | undefined;
11
+ getRelations(entityId: string): Relation[];
12
+ getConnectedEntities(entityId: string, depth?: number): Entity[];
13
+ }
14
+ /**
15
+ * Knowledge Graph RAG - Arricchisce i risultati con contesto da un grafo di conoscenza
16
+ */
17
+ export declare class KnowledgeGraphRag {
18
+ private options;
19
+ constructor(options: KnowledgeGraphRagOptions);
20
+ search(query: string): Promise<KnowledgeGraphRagResult>;
21
+ private buildGraphContext;
22
+ private buildAnswer;
23
+ }
24
+ //# sourceMappingURL=knowledge-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,cAAc,EACd,wBAAwB,EACxB,uBAAuB,EAExB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC1C,SAAS,EAAE,QAAQ,EAAE,CAAM;IAE3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE;IAM1C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,EAAE;CAyBpE;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAqC;gBAExC,OAAO,EAAE,wBAAwB;IAQvC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAsC7D,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,WAAW;CAiCpB"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Implementazione base di Knowledge Graph in memoria
3
+ */
4
+ export class InMemoryKnowledgeGraph {
5
+ entities = new Map();
6
+ relations = [];
7
+ addEntity(entity) {
8
+ this.entities.set(entity.id, entity);
9
+ }
10
+ addRelation(relation) {
11
+ this.relations.push(relation);
12
+ }
13
+ getEntity(id) {
14
+ return this.entities.get(id);
15
+ }
16
+ getRelations(entityId) {
17
+ return this.relations.filter((r) => r.source === entityId || r.target === entityId);
18
+ }
19
+ getConnectedEntities(entityId, depth = 1) {
20
+ const visited = new Set();
21
+ const result = [];
22
+ const traverse = (currentId, currentDepth) => {
23
+ if (currentDepth > depth || visited.has(currentId))
24
+ return;
25
+ visited.add(currentId);
26
+ const entity = this.getEntity(currentId);
27
+ if (entity && currentId !== entityId) {
28
+ result.push(entity);
29
+ }
30
+ if (currentDepth < depth) {
31
+ const relations = this.getRelations(currentId);
32
+ for (const rel of relations) {
33
+ const nextId = rel.source === currentId ? rel.target : rel.source;
34
+ traverse(nextId, currentDepth + 1);
35
+ }
36
+ }
37
+ };
38
+ traverse(entityId, 0);
39
+ return result;
40
+ }
41
+ }
42
+ /**
43
+ * Knowledge Graph RAG - Arricchisce i risultati con contesto da un grafo di conoscenza
44
+ */
45
+ export class KnowledgeGraphRag {
46
+ options;
47
+ constructor(options) {
48
+ this.options = {
49
+ topK: options.topK ?? 10,
50
+ maxDepth: options.maxDepth ?? 2,
51
+ ...options,
52
+ };
53
+ }
54
+ async search(query) {
55
+ // 1. Recupera risultati dal retriever
56
+ const hits = await this.options.retriever.search(query, this.options.topK);
57
+ // 2. Estrai entità dai risultati
58
+ const allText = hits.map((h) => h.text).join("\n");
59
+ const entities = await this.options.entityExtractor.extract(allText);
60
+ // 3. Aggiungi entità al grafo
61
+ entities.forEach((e) => this.options.graph.addEntity(e));
62
+ // 4. Estrai relazioni
63
+ const relations = await this.options.relationExtractor.extract(allText, entities);
64
+ relations.forEach((r) => this.options.graph.addRelation(r));
65
+ // 5. Arricchisci con contesto del grafo
66
+ const graphContext = this.buildGraphContext(entities);
67
+ // 6. Genera citazioni
68
+ const citations = hits.map((hit) => ({
69
+ path: hit.path,
70
+ startLine: hit.startLine,
71
+ endLine: hit.endLine,
72
+ text: hit.text,
73
+ }));
74
+ // 7. Costruisci risposta
75
+ const answer = this.buildAnswer(query, hits, entities, relations, graphContext);
76
+ return {
77
+ answer,
78
+ citations,
79
+ entities,
80
+ relations,
81
+ graphContext,
82
+ };
83
+ }
84
+ buildGraphContext(entities) {
85
+ const contextParts = [];
86
+ for (const entity of entities) {
87
+ const connected = this.options.graph.getConnectedEntities(entity.id, this.options.maxDepth);
88
+ const relations = this.options.graph.getRelations(entity.id);
89
+ if (connected.length > 0 || relations.length > 0) {
90
+ let part = `**${entity.name}** (${entity.type})`;
91
+ if (relations.length > 0) {
92
+ const relDescs = relations.map((r) => {
93
+ const otherId = r.source === entity.id ? r.target : r.source;
94
+ const other = this.options.graph.getEntity(otherId);
95
+ return `${r.type} → ${other?.name ?? otherId}`;
96
+ });
97
+ part += `\n Relazioni: ${relDescs.join(", ")}`;
98
+ }
99
+ if (connected.length > 0) {
100
+ const connNames = connected.map((e) => e.name).join(", ");
101
+ part += `\n Connesso a: ${connNames}`;
102
+ }
103
+ contextParts.push(part);
104
+ }
105
+ }
106
+ return contextParts.join("\n\n");
107
+ }
108
+ buildAnswer(_query, hits, entities, _relations, graphContext) {
109
+ const parts = [];
110
+ parts.push(`## Risposta\n`);
111
+ parts.push(`Basato sull'analisi di ${hits.length} documenti e ${entities.length} entità identificate:\n`);
112
+ if (graphContext) {
113
+ parts.push(`### Contesto dal Knowledge Graph\n${graphContext}\n`);
114
+ }
115
+ if (hits.length > 0) {
116
+ parts.push(`### Fonti Principali\n`);
117
+ hits.slice(0, 3).forEach((hit, i) => {
118
+ parts.push(`${i + 1}. **${hit.path}** (righe ${hit.startLine}-${hit.endLine})`);
119
+ parts.push(` ${hit.text.slice(0, 200)}...\n`);
120
+ });
121
+ }
122
+ if (entities.length > 0) {
123
+ parts.push(`### Entità Identificate\n`);
124
+ entities.slice(0, 5).forEach((e) => {
125
+ parts.push(`- **${e.name}** (${e.type})`);
126
+ });
127
+ }
128
+ return parts.join("\n");
129
+ }
130
+ }
131
+ //# sourceMappingURL=knowledge-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../src/knowledge-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=knowledge-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.test.d.ts","sourceRoot":"","sources":["../src/knowledge-graph.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,140 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { KnowledgeGraphRag, InMemoryKnowledgeGraph } from "./knowledge-graph.js";
3
+ class MockRetriever {
4
+ async search(_query, topK) {
5
+ return [
6
+ {
7
+ id: "hit-1",
8
+ path: "src/user.ts",
9
+ startLine: 1,
10
+ endLine: 10,
11
+ text: "User class with authentication",
12
+ score: 0.9,
13
+ },
14
+ {
15
+ id: "hit-2",
16
+ path: "src/auth.ts",
17
+ startLine: 5,
18
+ endLine: 15,
19
+ text: "Authentication service",
20
+ score: 0.85,
21
+ },
22
+ ].slice(0, topK);
23
+ }
24
+ }
25
+ class MockEntityExtractor {
26
+ async extract(_text) {
27
+ return [
28
+ {
29
+ id: "user",
30
+ name: "User",
31
+ type: "class",
32
+ properties: {},
33
+ },
34
+ {
35
+ id: "auth",
36
+ name: "Authentication",
37
+ type: "service",
38
+ properties: {},
39
+ },
40
+ ];
41
+ }
42
+ }
43
+ class MockRelationExtractor {
44
+ async extract(_text, _entities) {
45
+ return [
46
+ {
47
+ id: "user-auth",
48
+ source: "user",
49
+ target: "auth",
50
+ type: "uses",
51
+ properties: {},
52
+ },
53
+ ];
54
+ }
55
+ }
56
+ describe("KnowledgeGraphRag", () => {
57
+ it("should extract entities and relations from search results", async () => {
58
+ const graph = new InMemoryKnowledgeGraph();
59
+ const kgRag = new KnowledgeGraphRag({
60
+ retriever: new MockRetriever(),
61
+ entityExtractor: new MockEntityExtractor(),
62
+ relationExtractor: new MockRelationExtractor(),
63
+ graph,
64
+ });
65
+ const result = await kgRag.search("authentication");
66
+ expect(result.entities.length).toBe(2);
67
+ expect(result.relations.length).toBe(1);
68
+ expect(result.citations.length).toBe(2);
69
+ expect(result.answer).toContain("Knowledge Graph");
70
+ });
71
+ it("should build graph context with connected entities", async () => {
72
+ const graph = new InMemoryKnowledgeGraph();
73
+ const kgRag = new KnowledgeGraphRag({
74
+ retriever: new MockRetriever(),
75
+ entityExtractor: new MockEntityExtractor(),
76
+ relationExtractor: new MockRelationExtractor(),
77
+ graph,
78
+ maxDepth: 2,
79
+ });
80
+ const result = await kgRag.search("user authentication");
81
+ expect(result.graphContext).toContain("User");
82
+ expect(result.graphContext).toContain("Authentication");
83
+ expect(result.graphContext).toContain("uses");
84
+ });
85
+ it("should persist entities in the graph across searches", async () => {
86
+ const graph = new InMemoryKnowledgeGraph();
87
+ const kgRag = new KnowledgeGraphRag({
88
+ retriever: new MockRetriever(),
89
+ entityExtractor: new MockEntityExtractor(),
90
+ relationExtractor: new MockRelationExtractor(),
91
+ graph,
92
+ });
93
+ await kgRag.search("first query");
94
+ await kgRag.search("second query");
95
+ expect(graph.entities.size).toBe(2);
96
+ expect(graph.relations.length).toBe(2);
97
+ });
98
+ });
99
+ describe("InMemoryKnowledgeGraph", () => {
100
+ it("should add and retrieve entities", () => {
101
+ const graph = new InMemoryKnowledgeGraph();
102
+ const entity = {
103
+ id: "test",
104
+ name: "Test",
105
+ type: "class",
106
+ properties: {},
107
+ };
108
+ graph.addEntity(entity);
109
+ const retrieved = graph.getEntity("test");
110
+ expect(retrieved).toEqual(entity);
111
+ });
112
+ it("should add and retrieve relations", () => {
113
+ const graph = new InMemoryKnowledgeGraph();
114
+ const relation = {
115
+ id: "rel1",
116
+ source: "a",
117
+ target: "b",
118
+ type: "uses",
119
+ properties: {},
120
+ };
121
+ graph.addRelation(relation);
122
+ const relations = graph.getRelations("a");
123
+ expect(relations.length).toBe(1);
124
+ expect(relations[0]).toEqual(relation);
125
+ });
126
+ it("should find connected entities", () => {
127
+ const graph = new InMemoryKnowledgeGraph();
128
+ graph.addEntity({ id: "a", name: "A", type: "class", properties: {} });
129
+ graph.addEntity({ id: "b", name: "B", type: "class", properties: {} });
130
+ graph.addEntity({ id: "c", name: "C", type: "class", properties: {} });
131
+ graph.addRelation({ id: "r1", source: "a", target: "b", type: "uses", properties: {} });
132
+ graph.addRelation({ id: "r2", source: "b", target: "c", type: "uses", properties: {} });
133
+ const connected = graph.getConnectedEntities("a", 1);
134
+ expect(connected.length).toBe(1);
135
+ expect(connected[0]?.id).toBe("b");
136
+ const connectedDeep = graph.getConnectedEntities("a", 2);
137
+ expect(connectedDeep.length).toBe(2);
138
+ });
139
+ });
140
+ //# sourceMappingURL=knowledge-graph.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-graph.test.js","sourceRoot":"","sources":["../src/knowledge-graph.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { SearchHit } from "@eucode/indexer";
2
+ import type { Grader, GraderResult, QueryRewriter } from "./types.js";
3
+ export interface LlmProvider {
4
+ chat(messages: Array<{
5
+ role: string;
6
+ content: string;
7
+ }>): Promise<string>;
8
+ }
9
+ export declare class LlmGrader implements Grader {
10
+ private llm;
11
+ constructor(llm: LlmProvider);
12
+ grade(query: string, hit: SearchHit): Promise<GraderResult>;
13
+ }
14
+ export declare class LlmQueryRewriter implements QueryRewriter {
15
+ private llm;
16
+ constructor(llm: LlmProvider);
17
+ rewrite(query: string, context: string): Promise<string>;
18
+ }
19
+ //# sourceMappingURL=llm-grader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-grader.d.ts","sourceRoot":"","sources":["../src/llm-grader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3E;AAED,qBAAa,SAAU,YAAW,MAAM;IAC1B,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,WAAW;IAE9B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;CAgClE;AAED,qBAAa,gBAAiB,YAAW,aAAa;IACxC,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,WAAW;IAE9B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqB/D"}
@@ -0,0 +1,63 @@
1
+ export class LlmGrader {
2
+ llm;
3
+ constructor(llm) {
4
+ this.llm = llm;
5
+ }
6
+ async grade(query, hit) {
7
+ const prompt = `Rate the relevance of this code snippet to the query.
8
+
9
+ Query: ${query}
10
+
11
+ Code snippet from ${hit.path}:${hit.startLine}-${hit.endLine}:
12
+ \`\`\`
13
+ ${hit.text.slice(0, 500)}
14
+ \`\`\`
15
+
16
+ Respond with JSON only: {"relevant": true/false, "score": 0.0-1.0}`;
17
+ try {
18
+ const response = await this.llm.chat([
19
+ { role: "system", content: "You are a code relevance grader. Respond only with valid JSON." },
20
+ { role: "user", content: prompt },
21
+ ]);
22
+ const match = response.match(/\{[\s\S]*\}/);
23
+ if (!match) {
24
+ return { relevant: false, score: 0 };
25
+ }
26
+ const parsed = JSON.parse(match[0]);
27
+ return {
28
+ relevant: Boolean(parsed.relevant),
29
+ score: Number(parsed.score) || 0,
30
+ };
31
+ }
32
+ catch {
33
+ return { relevant: false, score: 0 };
34
+ }
35
+ }
36
+ }
37
+ export class LlmQueryRewriter {
38
+ llm;
39
+ constructor(llm) {
40
+ this.llm = llm;
41
+ }
42
+ async rewrite(query, context) {
43
+ const prompt = `The original query didn't find enough relevant results. Rewrite it to be more specific and effective.
44
+
45
+ Original query: ${query}
46
+
47
+ Context from partial results:
48
+ ${context.slice(0, 300)}
49
+
50
+ Provide a rewritten query that will find better results. Respond with the query only, no explanation.`;
51
+ try {
52
+ const response = await this.llm.chat([
53
+ { role: "system", content: "You are a search query rewriter. Respond with the rewritten query only." },
54
+ { role: "user", content: prompt },
55
+ ]);
56
+ return response.trim();
57
+ }
58
+ catch {
59
+ return query;
60
+ }
61
+ }
62
+ }
63
+ //# sourceMappingURL=llm-grader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-grader.js","sourceRoot":"","sources":["../src/llm-grader.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,GAAgB;QAAhB,QAAG,GAAH,GAAG,CAAa;IAAG,CAAC;IAExC,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,GAAc;QACvC,MAAM,MAAM,GAAG;;SAEV,KAAK;;oBAEM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO;;EAE1D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;;;mEAG2C,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gEAAgE,EAAE;gBAC7F,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACvC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO;gBACL,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;aACjC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IACP;IAApB,YAAoB,GAAgB;QAAhB,QAAG,GAAH,GAAG,CAAa;IAAG,CAAC;IAExC,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,OAAe;QAC1C,MAAM,MAAM,GAAG;;kBAED,KAAK;;;EAGrB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;;sGAE+E,CAAC;QAEnG,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;gBACnC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,yEAAyE,EAAE;gBACtG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}