@eucoder/rag 0.2.0 → 0.3.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 CHANGED
@@ -98,20 +98,100 @@ console.log(result.graphContext); // Contesto formattato dal grafo
98
98
  - Contesto arricchito con entità connesse
99
99
  - Citazioni con path e line numbers
100
100
 
101
- **Implementazione custom del grafo:**
101
+ #### Knowledge Graph Persistente con Neo4j
102
+
103
+ Per uso in produzione, è disponibile un'implementazione persistente basata su Neo4j:
104
+
102
105
  ```typescript
103
- import type { KnowledgeGraph, Entity, Relation } from "@eucode/rag";
106
+ import { Neo4jKnowledgeGraph } from "@eucode/rag";
104
107
 
105
- class MyCustomGraph implements KnowledgeGraph {
106
- entities: Map<string, Entity> = new Map();
107
- relations: Relation[] = [];
108
+ const graph = new Neo4jKnowledgeGraph({
109
+ uri: "bolt://localhost:7687",
110
+ username: "neo4j",
111
+ password: "your-password",
112
+ database: "neo4j", // opzionale, default "neo4j"
113
+ });
108
114
 
109
- addEntity(entity: Entity): void { /* ... */ }
110
- addRelation(relation: Relation): void { /* ... */ }
111
- getEntity(id: string): Entity | undefined { /* ... */ }
112
- getRelations(entityId: string): Relation[] { /* ... */ }
113
- getConnectedEntities(entityId: string, depth?: number): Entity[] { /* ... */ }
115
+ // Verifica connessione
116
+ const connected = await graph.verifyConnectivity();
117
+ if (!connected) {
118
+ throw new Error("Neo4j non raggiungibile");
114
119
  }
120
+
121
+ // Inizializza schema (indici e vincoli)
122
+ await graph.initializeSchema();
123
+
124
+ // Aggiungi entità
125
+ await graph.addEntity({
126
+ id: "user-1",
127
+ name: "Alice",
128
+ type: "User",
129
+ properties: { age: 30, role: "developer" },
130
+ });
131
+
132
+ // Aggiungi relazione
133
+ await graph.addRelation({
134
+ id: "rel-1",
135
+ source: "user-1",
136
+ target: "user-2",
137
+ type: "KNOWS",
138
+ properties: { since: 2020 },
139
+ });
140
+
141
+ // Recupera entità
142
+ const user = await graph.getEntity("user-1");
143
+
144
+ // Recupera relazioni
145
+ const relations = await graph.getRelations("user-1");
146
+
147
+ // Recupera entità connesse (fino a profondità 2)
148
+ const connected = await graph.getConnectedEntities("user-1", 2);
149
+
150
+ // Cerca entità
151
+ const users = await graph.searchEntities({ type: "User" });
152
+ const alices = await graph.searchEntities({ name: "Alice" });
153
+
154
+ // Statistiche del grafo
155
+ const stats = await graph.getStats();
156
+ console.log(`Entities: ${stats.entityCount}, Relations: ${stats.relationCount}`);
157
+
158
+ // Elimina entità (e tutte le sue relazioni)
159
+ await graph.deleteEntity("user-1");
160
+
161
+ // Elimina relazione
162
+ await graph.deleteRelation("rel-1");
163
+
164
+ // Pulisci completamente il grafo
165
+ await graph.clear();
166
+
167
+ // Chiudi connessione
168
+ await graph.close();
169
+ ```
170
+
171
+ **Caratteristiche Neo4j:**
172
+ - Persistenza su database Neo4j
173
+ - Indici automatici per query veloci
174
+ - Supporto transazioni
175
+ - Query Cypher per operazioni complesse
176
+ - Scalabilità orizzontale
177
+ - Backup e recovery integrati
178
+
179
+ **Requisiti:**
180
+ - Neo4j 5.x o superiore
181
+ - Driver `neo4j-driver` (incluso nelle dipendenze)
182
+
183
+ **Setup Neo4j:**
184
+ ```bash
185
+ # Docker
186
+ docker run -d \
187
+ --name neo4j \
188
+ -p 7474:7474 -p 7687:7687 \
189
+ -e NEO4J_AUTH=neo4j/your-password \
190
+ -e NEO4J_PLUGINS='["apoc"]' \
191
+ neo4j:latest
192
+
193
+ # Verifica connessione
194
+ curl http://localhost:7474
115
195
  ```
116
196
 
117
197
  ### 4. Agentic RAG
package/dist/index.d.ts CHANGED
@@ -8,8 +8,10 @@ export { MetricsCalculator } from "./metrics.js";
8
8
  export { ABTestFramework } from "./ab-testing.js";
9
9
  export { ParameterOptimizer } from "./optimizer.js";
10
10
  export { SelfImprovingRag } from "./self-improving.js";
11
+ export { Neo4jKnowledgeGraph } from "./neo4j-knowledge-graph.js";
12
+ export type { Neo4jConfig } from "./neo4j-knowledge-graph.js";
11
13
  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";
14
+ export type { Retriever, KeywordRetriever, Grader, GraderResult, QueryRewriter, CorrectiveRagOptions, RagAnswer, RagCitation, HybridSearchOptions, HybridSearchResult, Entity, Relation, KnowledgeGraph, AsyncKnowledgeGraph, EntityExtractor, RelationExtractor, KnowledgeGraphRagOptions, KnowledgeGraphRagResult, ReasoningStep, AgenticRagOptions, AgenticRagResult, } from "./types.js";
13
15
  export type { RagFeedback, RagMetrics, ABTestResult, OptimizationSuggestion, FeedbackStorage, } from "./feedback.js";
14
16
  export type { RagStrategyConfig, } from "./ab-testing.js";
15
17
  export type { OptimizableParams, } from "./optimizer.js";
@@ -1 +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"}
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;AAGvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,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,mBAAmB,EACnB,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 CHANGED
@@ -9,4 +9,6 @@ export { MetricsCalculator } from "./metrics.js";
9
9
  export { ABTestFramework } from "./ab-testing.js";
10
10
  export { ParameterOptimizer } from "./optimizer.js";
11
11
  export { SelfImprovingRag } from "./self-improving.js";
12
+ // Fase 5: Knowledge Graph Persistente
13
+ export { Neo4jKnowledgeGraph } from "./neo4j-knowledge-graph.js";
12
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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"}
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;AAEvD,sCAAsC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { Entity, Relation, AsyncKnowledgeGraph } from "./types.js";
2
+ export interface Neo4jConfig {
3
+ uri: string;
4
+ username: string;
5
+ password: string;
6
+ database?: string;
7
+ }
8
+ /**
9
+ * Knowledge Graph persistente con Neo4j
10
+ *
11
+ * Implementa un grafo di conoscenza persistente usando Neo4j come database.
12
+ * Supporta operazioni CRUD per entità e relazioni, query per trovare entità connesse,
13
+ * e gestione delle transazioni.
14
+ */
15
+ export declare class Neo4jKnowledgeGraph implements AsyncKnowledgeGraph {
16
+ private driver;
17
+ private database;
18
+ constructor(config: Neo4jConfig);
19
+ /**
20
+ * Chiude la connessione al database
21
+ */
22
+ close(): Promise<void>;
23
+ /**
24
+ * Verifica la connessione al database
25
+ */
26
+ verifyConnectivity(): Promise<boolean>;
27
+ /**
28
+ * Inizializza gli indici e i vincoli del database
29
+ */
30
+ initializeSchema(): Promise<void>;
31
+ /**
32
+ * Aggiunge un'entità al grafo
33
+ */
34
+ addEntity(entity: Entity): Promise<void>;
35
+ /**
36
+ * Aggiunge una relazione al grafo
37
+ */
38
+ addRelation(relation: Relation): Promise<void>;
39
+ /**
40
+ * Recupera un'entità per ID
41
+ */
42
+ getEntity(id: string): Promise<Entity | undefined>;
43
+ /**
44
+ * Recupera tutte le relazioni di un'entità
45
+ */
46
+ getRelations(entityId: string): Promise<Relation[]>;
47
+ /**
48
+ * Recupera tutte le entità connesse a un'entità fino a una certa profondità
49
+ */
50
+ getConnectedEntities(entityId: string, depth?: number): Promise<Entity[]>;
51
+ /**
52
+ * Cerca entità per nome o tipo
53
+ */
54
+ searchEntities(query: {
55
+ name?: string;
56
+ type?: string;
57
+ }): Promise<Entity[]>;
58
+ /**
59
+ * Elimina un'entità e tutte le sue relazioni
60
+ */
61
+ deleteEntity(entityId: string): Promise<void>;
62
+ /**
63
+ * Elimina una relazione per ID
64
+ */
65
+ deleteRelation(relationId: string): Promise<void>;
66
+ /**
67
+ * Recupera statistiche del grafo
68
+ */
69
+ getStats(): Promise<{
70
+ entityCount: number;
71
+ relationCount: number;
72
+ }>;
73
+ /**
74
+ * Pulisce completamente il grafo (elimina tutte le entità e relazioni)
75
+ */
76
+ clear(): Promise<void>;
77
+ }
78
+ //# sourceMappingURL=neo4j-knowledge-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-knowledge-graph.d.ts","sourceRoot":"","sources":["../src/neo4j-knowledge-graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,mBAAoB,YAAW,mBAAmB;IAC7D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,WAAW;IAQ/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU5C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BvC;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9C;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BpD;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA6BxD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA6BzD;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BlF;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyChF;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnD;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBzE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
@@ -0,0 +1,307 @@
1
+ import neo4j from "neo4j-driver";
2
+ /**
3
+ * Knowledge Graph persistente con Neo4j
4
+ *
5
+ * Implementa un grafo di conoscenza persistente usando Neo4j come database.
6
+ * Supporta operazioni CRUD per entità e relazioni, query per trovare entità connesse,
7
+ * e gestione delle transazioni.
8
+ */
9
+ export class Neo4jKnowledgeGraph {
10
+ driver;
11
+ database;
12
+ constructor(config) {
13
+ this.driver = neo4j.driver(config.uri, neo4j.auth.basic(config.username, config.password));
14
+ this.database = config.database || "neo4j";
15
+ }
16
+ /**
17
+ * Chiude la connessione al database
18
+ */
19
+ async close() {
20
+ await this.driver.close();
21
+ }
22
+ /**
23
+ * Verifica la connessione al database
24
+ */
25
+ async verifyConnectivity() {
26
+ try {
27
+ await this.driver.verifyConnectivity();
28
+ return true;
29
+ }
30
+ catch (error) {
31
+ console.error("Neo4j connectivity check failed:", error);
32
+ return false;
33
+ }
34
+ }
35
+ /**
36
+ * Inizializza gli indici e i vincoli del database
37
+ */
38
+ async initializeSchema() {
39
+ const session = this.driver.session({ database: this.database });
40
+ try {
41
+ // Crea indice univoco per Entity.id
42
+ await session.executeWrite(async (tx) => {
43
+ await tx.run(`
44
+ CREATE INDEX entity_id_index IF NOT EXISTS
45
+ FOR (e:Entity) ON (e.id)
46
+ `);
47
+ });
48
+ // Crea indice per Entity.type
49
+ await session.executeWrite(async (tx) => {
50
+ await tx.run(`
51
+ CREATE INDEX entity_type_index IF NOT EXISTS
52
+ FOR (e:Entity) ON (e.type)
53
+ `);
54
+ });
55
+ // Crea indice per Relation.type
56
+ await session.executeWrite(async (tx) => {
57
+ await tx.run(`
58
+ CREATE INDEX relation_type_index IF NOT EXISTS
59
+ FOR ()-[r:RELATES_TO]-() ON (r.type)
60
+ `);
61
+ });
62
+ }
63
+ finally {
64
+ await session.close();
65
+ }
66
+ }
67
+ /**
68
+ * Aggiunge un'entità al grafo
69
+ */
70
+ async addEntity(entity) {
71
+ const session = this.driver.session({ database: this.database });
72
+ try {
73
+ await session.executeWrite(async (tx) => {
74
+ await tx.run(`
75
+ MERGE (e:Entity {id: $id})
76
+ SET e.name = $name,
77
+ e.type = $type,
78
+ e.properties = $properties,
79
+ e.updatedAt = datetime()
80
+ `, {
81
+ id: entity.id,
82
+ name: entity.name,
83
+ type: entity.type,
84
+ properties: JSON.stringify(entity.properties || {}),
85
+ });
86
+ });
87
+ }
88
+ finally {
89
+ await session.close();
90
+ }
91
+ }
92
+ /**
93
+ * Aggiunge una relazione al grafo
94
+ */
95
+ async addRelation(relation) {
96
+ const session = this.driver.session({ database: this.database });
97
+ try {
98
+ await session.executeWrite(async (tx) => {
99
+ await tx.run(`
100
+ MATCH (source:Entity {id: $sourceId})
101
+ MATCH (target:Entity {id: $targetId})
102
+ MERGE (source)-[r:RELATES_TO {id: $id}]->(target)
103
+ SET r.type = $type,
104
+ r.properties = $properties,
105
+ r.updatedAt = datetime()
106
+ `, {
107
+ id: relation.id,
108
+ sourceId: relation.source,
109
+ targetId: relation.target,
110
+ type: relation.type,
111
+ properties: JSON.stringify(relation.properties || {}),
112
+ });
113
+ });
114
+ }
115
+ finally {
116
+ await session.close();
117
+ }
118
+ }
119
+ /**
120
+ * Recupera un'entità per ID
121
+ */
122
+ async getEntity(id) {
123
+ const session = this.driver.session({ database: this.database });
124
+ try {
125
+ const result = await session.executeRead(async (tx) => {
126
+ return await tx.run(`
127
+ MATCH (e:Entity {id: $id})
128
+ RETURN e.id AS id, e.name AS name, e.type AS type, e.properties AS properties
129
+ `, { id });
130
+ });
131
+ if (result.records.length === 0) {
132
+ return undefined;
133
+ }
134
+ const record = result.records[0];
135
+ return {
136
+ id: record.get("id"),
137
+ name: record.get("name"),
138
+ type: record.get("type"),
139
+ properties: JSON.parse(record.get("properties") || "{}"),
140
+ };
141
+ }
142
+ finally {
143
+ await session.close();
144
+ }
145
+ }
146
+ /**
147
+ * Recupera tutte le relazioni di un'entità
148
+ */
149
+ async getRelations(entityId) {
150
+ const session = this.driver.session({ database: this.database });
151
+ try {
152
+ const result = await session.executeRead(async (tx) => {
153
+ return await tx.run(`
154
+ MATCH (e:Entity {id: $entityId})-[r:RELATES_TO]-(other:Entity)
155
+ RETURN r.id AS id,
156
+ r.type AS type,
157
+ r.properties AS properties,
158
+ startNode(r).id AS source,
159
+ endNode(r).id AS target
160
+ `, { entityId });
161
+ });
162
+ return result.records.map((record) => ({
163
+ id: record.get("id"),
164
+ type: record.get("type"),
165
+ properties: JSON.parse(record.get("properties") || "{}"),
166
+ source: record.get("source"),
167
+ target: record.get("target"),
168
+ }));
169
+ }
170
+ finally {
171
+ await session.close();
172
+ }
173
+ }
174
+ /**
175
+ * Recupera tutte le entità connesse a un'entità fino a una certa profondità
176
+ */
177
+ async getConnectedEntities(entityId, depth = 1) {
178
+ const session = this.driver.session({ database: this.database });
179
+ try {
180
+ const result = await session.executeRead(async (tx) => {
181
+ return await tx.run(`
182
+ MATCH path = (start:Entity {id: $entityId})-[:RELATES_TO*1..${depth}]-(connected:Entity)
183
+ WHERE connected.id <> $entityId
184
+ RETURN DISTINCT connected.id AS id,
185
+ connected.name AS name,
186
+ connected.type AS type,
187
+ connected.properties AS properties
188
+ `, { entityId });
189
+ });
190
+ return result.records.map((record) => ({
191
+ id: record.get("id"),
192
+ name: record.get("name"),
193
+ type: record.get("type"),
194
+ properties: JSON.parse(record.get("properties") || "{}"),
195
+ }));
196
+ }
197
+ finally {
198
+ await session.close();
199
+ }
200
+ }
201
+ /**
202
+ * Cerca entità per nome o tipo
203
+ */
204
+ async searchEntities(query) {
205
+ const session = this.driver.session({ database: this.database });
206
+ try {
207
+ const conditions = [];
208
+ const params = {};
209
+ if (query.name) {
210
+ conditions.push("e.name CONTAINS $name");
211
+ params.name = query.name;
212
+ }
213
+ if (query.type) {
214
+ conditions.push("e.type = $type");
215
+ params.type = query.type;
216
+ }
217
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
218
+ const result = await session.executeRead(async (tx) => {
219
+ return await tx.run(`
220
+ MATCH (e:Entity)
221
+ ${whereClause}
222
+ RETURN e.id AS id, e.name AS name, e.type AS type, e.properties AS properties
223
+ LIMIT 100
224
+ `, params);
225
+ });
226
+ return result.records.map((record) => ({
227
+ id: record.get("id"),
228
+ name: record.get("name"),
229
+ type: record.get("type"),
230
+ properties: JSON.parse(record.get("properties") || "{}"),
231
+ }));
232
+ }
233
+ finally {
234
+ await session.close();
235
+ }
236
+ }
237
+ /**
238
+ * Elimina un'entità e tutte le sue relazioni
239
+ */
240
+ async deleteEntity(entityId) {
241
+ const session = this.driver.session({ database: this.database });
242
+ try {
243
+ await session.executeWrite(async (tx) => {
244
+ await tx.run(`
245
+ MATCH (e:Entity {id: $entityId})
246
+ DETACH DELETE e
247
+ `, { entityId });
248
+ });
249
+ }
250
+ finally {
251
+ await session.close();
252
+ }
253
+ }
254
+ /**
255
+ * Elimina una relazione per ID
256
+ */
257
+ async deleteRelation(relationId) {
258
+ const session = this.driver.session({ database: this.database });
259
+ try {
260
+ await session.executeWrite(async (tx) => {
261
+ await tx.run(`
262
+ MATCH ()-[r:RELATES_TO {id: $relationId}]-()
263
+ DELETE r
264
+ `, { relationId });
265
+ });
266
+ }
267
+ finally {
268
+ await session.close();
269
+ }
270
+ }
271
+ /**
272
+ * Recupera statistiche del grafo
273
+ */
274
+ async getStats() {
275
+ const session = this.driver.session({ database: this.database });
276
+ try {
277
+ const entityResult = await session.executeRead(async (tx) => {
278
+ return await tx.run(`MATCH (e:Entity) RETURN count(e) AS count`);
279
+ });
280
+ const relationResult = await session.executeRead(async (tx) => {
281
+ return await tx.run(`MATCH ()-[r:RELATES_TO]-() RETURN count(r) AS count`);
282
+ });
283
+ return {
284
+ entityCount: entityResult.records[0].get("count").toNumber(),
285
+ relationCount: relationResult.records[0].get("count").toNumber(),
286
+ };
287
+ }
288
+ finally {
289
+ await session.close();
290
+ }
291
+ }
292
+ /**
293
+ * Pulisce completamente il grafo (elimina tutte le entità e relazioni)
294
+ */
295
+ async clear() {
296
+ const session = this.driver.session({ database: this.database });
297
+ try {
298
+ await session.executeWrite(async (tx) => {
299
+ await tx.run(`MATCH (n) DETACH DELETE n`);
300
+ });
301
+ }
302
+ finally {
303
+ await session.close();
304
+ }
305
+ }
306
+ }
307
+ //# sourceMappingURL=neo4j-knowledge-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-knowledge-graph.js","sourceRoot":"","sources":["../src/neo4j-knowledge-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=neo4j-knowledge-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-knowledge-graph.test.d.ts","sourceRoot":"","sources":["../src/neo4j-knowledge-graph.test.ts"],"names":[],"mappings":""}