rust-kgdb 0.6.56 → 0.6.57

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 (2) hide show
  1. package/README.md +796 -188
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/rust-kgdb.svg)](https://www.npmjs.com/package/rust-kgdb)
4
4
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
+ [![W3C](https://img.shields.io/badge/W3C-SPARQL%201.1%20%7C%20RDF%201.2-blue)](https://www.w3.org/TR/sparql11-query/)
5
6
 
6
7
  ---
7
8
 
@@ -34,97 +35,492 @@ This isn't rare. It happens every day:
34
35
 
35
36
  ---
36
37
 
37
- ## Why "Guardrails" Don't Fix This
38
+ ## What Is rust-kgdb?
38
39
 
39
- The industry response? Add guardrails. Use RAG. Fine-tune models.
40
+ **Two components, one npm package:**
40
41
 
41
- But here's what they don't tell you:
42
+ ### 1. rust-kgdb Core: Embedded Knowledge Graph Database
42
43
 
43
- **RAG (Retrieval-Augmented Generation)** finds *similar* documents. Similar isn't the same as *correct*. If your policy database has 10,000 documents about cardiac drugs, RAG might retrieve the wrong 5.
44
+ A high-performance RDF/SPARQL database that runs **inside your application**. No server. No Docker. No config.
44
45
 
45
- **Fine-tuning** teaches the model patterns from your data. But patterns aren't facts. It still can't look up "does Patient X have a penicillin allergy" because it doesn't have a database - it has patterns.
46
+ ```
47
+ ┌─────────────────────────────────────────────────────────────────────────────┐
48
+ │ rust-kgdb CORE ENGINE │
49
+ │ │
50
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
51
+ │ │ GraphDB │ │ GraphFrame │ │ Embeddings │ │ Datalog │ │
52
+ │ │ (SPARQL) │ │ (Analytics) │ │ (HNSW) │ │ (Reasoning) │ │
53
+ │ │ 449ns │ │ PageRank │ │ 16ms/10K │ │ Semi-naive │ │
54
+ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
55
+ │ │
56
+ │ Storage: InMemory | RocksDB | LMDB Standards: SPARQL 1.1 | RDF 1.2 │
57
+ │ Memory: 24 bytes/triple Compliance: SHACL | PROV | OWL 2 RL │
58
+ └─────────────────────────────────────────────────────────────────────────────┘
59
+ ```
60
+
61
+ **Like SQLite - but for knowledge graphs.**
62
+
63
+ ### 2. HyperMind: Neuro-Symbolic Agent Framework
46
64
 
47
- **Guardrails** catch obvious errors. But "Provider #4521 shows billing anomalies" sounds completely plausible. No guardrail catches it.
65
+ An AI agent layer that uses **the database to prevent hallucinations**. The LLM plans, the database executes.
66
+
67
+ ```
68
+ ┌─────────────────────────────────────────────────────────────────────────────┐
69
+ │ HYPERMIND AGENT FRAMEWORK │
70
+ │ │
71
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
72
+ │ │ LLMPlanner │ │ WasmSandbox │ │ ProofDAG │ │ Memory │ │
73
+ │ │ (Claude/GPT)│ │ (Security) │ │ (Audit) │ │ (Hypergraph)│ │
74
+ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
75
+ │ │
76
+ │ Type Theory: Hindley-Milner types ensure tool composition is valid │
77
+ │ Category Theory: Tools are morphisms (A → B) with composition laws │
78
+ │ Proof Theory: Every execution produces cryptographic audit trail │
79
+ └─────────────────────────────────────────────────────────────────────────────┘
80
+ ```
48
81
 
49
- The fundamental problem: **You're asking a language model to be a database. It's not.**
82
+ **The insight:** AI writes questions (SPARQL queries). Database finds answers. No hallucination possible.
50
83
 
51
84
  ---
52
85
 
53
- ## The Insight That Changes Everything
86
+ ## Quick Start
54
87
 
55
- What if we stopped asking AI for **answers** and started asking it for **questions**?
88
+ ```bash
89
+ npm install rust-kgdb
90
+ ```
56
91
 
57
- Think about how a skilled legal researcher works:
92
+ ### Basic Database Usage
93
+
94
+ ```javascript
95
+ const { GraphDB } = require('rust-kgdb');
58
96
 
59
- 1. **Lawyer asks:** "Has this clause been challenged?"
60
- 2. **Researcher understands** the legal question
61
- 3. **Researcher searches** actual case law databases
62
- 4. **Returns cases** that actually exist, with citations
97
+ // Create embedded database (no server needed!)
98
+ const db = new GraphDB('http://lawfirm.com/');
63
99
 
64
- The AI should be the researcher - understanding intent and writing queries. The database should find facts.
100
+ // Load your data
101
+ db.loadTtl(`
102
+ :Contract_2024_001 :hasClause :NonCompete_3yr .
103
+ :NonCompete_3yr :challengedIn :Martinez_v_Apex .
104
+ :Martinez_v_Apex :court "9th Circuit" ; :year 2021 .
105
+ `);
65
106
 
66
- **Before (Dangerous):**
107
+ // Query with SPARQL (449ns lookups)
108
+ const results = db.querySelect(`
109
+ SELECT ?case ?court WHERE {
110
+ :NonCompete_3yr :challengedIn ?case .
111
+ ?case :court ?court
112
+ }
113
+ `);
114
+ // [{case: ':Martinez_v_Apex', court: '9th Circuit'}]
67
115
  ```
68
- Lawyer: "Has this clause been challenged?"
69
- AI: "Yes, in Smith v. Johnson (2019)..." ← FABRICATED
116
+
117
+ ### With HyperMind Agent
118
+
119
+ ```javascript
120
+ const { GraphDB, HyperMindAgent } = require('rust-kgdb');
121
+
122
+ const db = new GraphDB('http://insurance.org/');
123
+ db.loadTtl(`
124
+ :Provider_445 :totalClaims 89 ; :avgClaimAmount 47000 ; :denialRate 0.34 .
125
+ :Provider_445 :hasPattern :UnbundledBilling ; :flaggedBy :SIU_2024_Q1 .
126
+ `);
127
+
128
+ const agent = new HyperMindAgent({ db });
129
+ const result = await agent.ask("Which providers show suspicious billing patterns?");
130
+
131
+ console.log(result.answer);
132
+ // "Provider_445: 34% denial rate, flagged by SIU Q1 2024, unbundled billing pattern"
133
+
134
+ console.log(result.evidence);
135
+ // Full audit trail proving every fact came from your database
70
136
  ```
71
137
 
72
- **After (Safe):**
138
+ ---
139
+
140
+ ## Architecture: Two Layers
141
+
73
142
  ```
74
- Lawyer: "Has this clause been challenged?"
75
- AI: Generates query → Searches case database
76
- Database: Returns real cases that actually exist
77
- Result: "Martinez v. Apex Corp (2021), Chen v. StateBank (2018)" ← VERIFIABLE
143
+ ┌─────────────────────────────────────────────────────────────────────────────────┐
144
+ │ YOUR APPLICATION │
145
+ │ (Fraud Detection, Underwriting, Compliance) │
146
+ └────────────────────────────────────┬────────────────────────────────────────────┘
147
+
148
+ ┌────────────────────────────────────▼────────────────────────────────────────────┐
149
+ │ HYPERMIND AGENT FRAMEWORK (JavaScript) │
150
+ │ ┌────────────────────────────────────────────────────────────────────────────┐ │
151
+ │ │ • LLMPlanner: Natural language → typed tool pipelines │ │
152
+ │ │ • WasmSandbox: Capability-based security with fuel metering │ │
153
+ │ │ • ProofDAG: Cryptographic audit trail (SHA-256) │ │
154
+ │ │ • MemoryHypergraph: Temporal agent memory with KG integration │ │
155
+ │ │ • TypeId: Hindley-Milner type system with refinement types │ │
156
+ │ └────────────────────────────────────────────────────────────────────────────┘ │
157
+ │ │
158
+ │ Category Theory: Tools as Morphisms (A → B) │
159
+ │ Proof Theory: Every execution has a witness │
160
+ └────────────────────────────────────┬────────────────────────────────────────────┘
161
+ │ NAPI-RS Bindings
162
+ ┌────────────────────────────────────▼────────────────────────────────────────────┐
163
+ │ RUST CORE ENGINE (Native Performance) │
164
+ │ ┌────────────────────────────────────────────────────────────────────────────┐ │
165
+ │ │ GraphDB │ RDF/SPARQL quad store │ 449ns lookups, 24 bytes/triple│
166
+ │ │ GraphFrame │ Graph algorithms │ WCOJ optimal joins, PageRank │
167
+ │ │ EmbeddingService │ Vector similarity │ HNSW index, 1-hop ARCADE cache│
168
+ │ │ DatalogProgram │ Rule-based reasoning │ Semi-naive evaluation │
169
+ │ │ Pregel │ BSP graph processing │ Billion-edge scale │
170
+ │ └────────────────────────────────────────────────────────────────────────────┘ │
171
+ │ │
172
+ │ W3C Standards: SPARQL 1.1 (100%) | RDF 1.2 | OWL 2 RL | SHACL | PROV │
173
+ │ Storage Backends: InMemory | RocksDB | LMDB │
174
+ └──────────────────────────────────────────────────────────────────────────────────┘
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Core Components
180
+
181
+ ### GraphDB: SPARQL Engine (449ns lookups)
182
+
183
+ ```javascript
184
+ const { GraphDB } = require('rust-kgdb');
185
+
186
+ const db = new GraphDB('http://example.org/');
187
+
188
+ // Load Turtle format
189
+ db.loadTtl(':alice :knows :bob . :bob :knows :charlie .');
190
+
191
+ // SPARQL SELECT
192
+ const results = db.querySelect('SELECT ?x WHERE { :alice :knows ?x }');
193
+
194
+ // SPARQL CONSTRUCT
195
+ const graph = db.queryConstruct('CONSTRUCT { ?x :connected ?y } WHERE { ?x :knows ?y }');
196
+
197
+ // Named graphs
198
+ db.loadTtl(':data1 :value "100" .', 'http://example.org/graph1');
199
+
200
+ // Count triples
201
+ console.log(`Total: ${db.countTriples()} triples`);
78
202
  ```
79
203
 
80
- **The AI writes the question. The database finds the answer. No hallucination possible.**
204
+ ### GraphFrame: Graph Analytics
205
+
206
+ ```javascript
207
+ const { GraphFrame, friendsGraph } = require('rust-kgdb');
208
+
209
+ // Create from vertices and edges
210
+ const gf = new GraphFrame(
211
+ JSON.stringify([{id:'alice'}, {id:'bob'}, {id:'charlie'}]),
212
+ JSON.stringify([
213
+ {src:'alice', dst:'bob'},
214
+ {src:'bob', dst:'charlie'},
215
+ {src:'charlie', dst:'alice'}
216
+ ])
217
+ );
218
+
219
+ // Algorithms
220
+ console.log('PageRank:', gf.pageRank(0.15, 20));
221
+ console.log('Connected Components:', gf.connectedComponents());
222
+ console.log('Triangles:', gf.triangleCount()); // 1
223
+ console.log('Shortest Paths:', gf.shortestPaths('alice'));
224
+
225
+ // Motif finding (pattern matching)
226
+ const motifs = gf.find('(a)-[e1]->(b); (b)-[e2]->(c)');
227
+ ```
228
+
229
+ ### EmbeddingService: Vector Similarity (HNSW)
230
+
231
+ ```javascript
232
+ const { EmbeddingService } = require('rust-kgdb');
233
+
234
+ const embeddings = new EmbeddingService();
235
+
236
+ // Store 384-dimensional vectors (bring your own from OpenAI, Voyage, etc.)
237
+ embeddings.storeVector('claim_001', await getOpenAIEmbedding('soft tissue injury'));
238
+ embeddings.storeVector('claim_002', await getOpenAIEmbedding('whiplash from accident'));
239
+
240
+ // Build HNSW index
241
+ embeddings.rebuildIndex();
242
+
243
+ // Find similar (16ms for 10K vectors)
244
+ const similar = embeddings.findSimilar('claim_001', 10, 0.7);
245
+
246
+ // 1-hop neighbor cache (ARCADE algorithm)
247
+ embeddings.onTripleInsert('claim_001', 'claimant', 'person_123', null);
248
+ const neighbors = embeddings.getNeighborsOut('person_123');
249
+ ```
250
+
251
+ ### DatalogProgram: Rule-Based Reasoning
252
+
253
+ ```javascript
254
+ const { DatalogProgram, evaluateDatalog } = require('rust-kgdb');
255
+
256
+ const datalog = new DatalogProgram();
257
+
258
+ // Add facts
259
+ datalog.addFact(JSON.stringify({predicate:'knows', terms:['alice','bob']}));
260
+ datalog.addFact(JSON.stringify({predicate:'knows', terms:['bob','charlie']}));
261
+
262
+ // Add rules (recursive!)
263
+ datalog.addRule(JSON.stringify({
264
+ head: {predicate:'connected', terms:['?X','?Z']},
265
+ body: [
266
+ {predicate:'knows', terms:['?X','?Y']},
267
+ {predicate:'knows', terms:['?Y','?Z']}
268
+ ]
269
+ }));
270
+
271
+ // Evaluate (semi-naive fixpoint)
272
+ const inferred = evaluateDatalog(datalog);
273
+ // connected(alice, charlie) - derived!
274
+ ```
275
+
276
+ ### Pregel: Billion-Edge Graph Processing
277
+
278
+ ```javascript
279
+ const { pregelShortestPaths, chainGraph } = require('rust-kgdb');
280
+
281
+ // Create large graph
282
+ const graph = chainGraph(10000); // 10K vertices
283
+
284
+ // Run Pregel BSP algorithm
285
+ const distances = pregelShortestPaths(graph, 'v0', 100);
286
+ ```
81
287
 
82
288
  ---
83
289
 
84
- ## But Where's The Database?
290
+ ## HyperMind Agent Framework
85
291
 
86
- Traditional setup for a knowledge graph:
87
- - Install graph database server (weeks)
88
- - Configure connections, security, backups (days)
89
- - Hire a DBA (expensive)
90
- - Maintain infrastructure (forever)
91
- - Worry about HIPAA/SOC2 compliance for hosted data
292
+ ### Why Vanilla LLMs Fail
92
293
 
93
- **Our setup:**
94
- ```bash
95
- npm install rust-kgdb
294
+ ```
295
+ User: "Find all professors"
296
+
297
+ Vanilla LLM Output:
298
+ ┌───────────────────────────────────────────────────────────────────────┐
299
+ │ ```sparql │
300
+ │ SELECT ?professor WHERE { ?professor a ub:Faculty . } │
301
+ │ ``` ← Parser rejects markdown │
302
+ │ │
303
+ │ This query retrieves faculty members. │
304
+ │ ↑ Mixed text breaks parsing │
305
+ └───────────────────────────────────────────────────────────────────────┘
306
+ Result: ❌ PARSER ERROR - Invalid SPARQL syntax
96
307
  ```
97
308
 
98
- That's it. The database runs **inside your application**. No server. No Docker. No config. No data leaving your system.
309
+ **Problems:** (1) Markdown code fences, (2) Wrong class name (Faculty vs Professor), (3) Mixed text
99
310
 
100
- Like SQLite - but for knowledge graphs. HIPAA-friendly by default because data never leaves your infrastructure.
311
+ ### How HyperMind Solves This
312
+
313
+ ```
314
+ User: "Find all professors"
315
+
316
+ HyperMind Output:
317
+ ┌───────────────────────────────────────────────────────────────────────┐
318
+ │ PREFIX ub: <http://swat.cse.lehigh.edu/onto/univ-bench.owl#> │
319
+ │ SELECT ?professor WHERE { ?professor a ub:Professor . } │
320
+ └───────────────────────────────────────────────────────────────────────┘
321
+ Result: ✅ 15 results returned in 2.3ms
322
+ ```
323
+
324
+ **Why it works:**
325
+ 1. **Schema-aware** - Knows actual class names from your ontology
326
+ 2. **Type-checked** - Query validated before execution
327
+ 3. **No text pollution** - Output is pure SPARQL, not markdown
328
+
329
+ **Accuracy: 0% → 86.4%** (LUBM benchmark, 14 queries)
330
+
331
+ ### Agent Components
332
+
333
+ ```javascript
334
+ const {
335
+ HyperMindAgent,
336
+ LLMPlanner,
337
+ WasmSandbox,
338
+ AgentBuilder,
339
+ TOOL_REGISTRY
340
+ } = require('rust-kgdb');
341
+
342
+ // Build custom agent
343
+ const agent = new AgentBuilder('fraud-detector')
344
+ .withTool('kg.sparql.query')
345
+ .withTool('kg.datalog.infer')
346
+ .withTool('kg.embeddings.search')
347
+ .withPlanner(new LLMPlanner('claude-sonnet-4', TOOL_REGISTRY))
348
+ .withSandbox({
349
+ capabilities: ['ReadKG', 'ExecuteTool'], // No WriteKG
350
+ fuelLimit: 1000000,
351
+ maxMemory: 64 * 1024 * 1024
352
+ })
353
+ .build();
354
+
355
+ // Execute with natural language
356
+ const result = await agent.call("Find circular payment patterns");
357
+
358
+ // Get cryptographic proof
359
+ console.log(result.witness.proof_hash); // sha256:a3f2b8c9...
360
+ ```
361
+
362
+ ### WASM Sandbox: Secure Execution
363
+
364
+ ```javascript
365
+ const sandbox = new WasmSandbox({
366
+ capabilities: ['ReadKG', 'ExecuteTool'], // Fine-grained
367
+ fuelLimit: 1000000, // CPU metering
368
+ maxMemory: 64 * 1024 * 1024 // Memory limit
369
+ });
370
+
371
+ // All tool calls are:
372
+ // ✓ Capability-checked
373
+ // ✓ Fuel-metered
374
+ // ✓ Memory-bounded
375
+ // ✓ Logged for audit
376
+ ```
377
+
378
+ ### Execution Witness (Audit Trail)
379
+
380
+ Every execution produces a cryptographic proof:
381
+
382
+ ```json
383
+ {
384
+ "tool": "kg.sparql.query",
385
+ "input": "SELECT ?x WHERE { ?x a :Fraud }",
386
+ "output": "[{x: 'entity001'}]",
387
+ "timestamp": "2024-12-14T10:30:00Z",
388
+ "durationMs": 12,
389
+ "hash": "sha256:a3f2c8d9..."
390
+ }
391
+ ```
392
+
393
+ **Compliance:** Full audit trail for SOX, GDPR, FDA 21 CFR Part 11.
101
394
 
102
395
  ---
103
396
 
104
- ## Real Examples
397
+ ## Agent Memory: Deep Flashback
105
398
 
106
- ### Legal: Contract Analysis
399
+ Most AI agents have amnesia. Ask the same question twice, they start from scratch.
400
+
401
+ ### The Problem
402
+
403
+ - ChatGPT forgets after context window fills
404
+ - LangChain rebuilds context every call (~500ms)
405
+ - Vector databases return "similar" docs, not exact matches
406
+
407
+ ### Our Solution: Memory Hypergraph
408
+
409
+ ```
410
+ ┌─────────────────────────────────────────────────────────────────────────────┐
411
+ │ MEMORY HYPERGRAPH │
412
+ │ │
413
+ │ AGENT MEMORY LAYER │
414
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
415
+ │ │ Episode:001 │ │ Episode:002 │ │ Episode:003 │ │
416
+ │ │ "Fraud ring │ │ "Denied │ │ "Follow-up │ │
417
+ │ │ detected" │ │ claim" │ │ on P001" │ │
418
+ │ │ Dec 10 │ │ Dec 12 │ │ Dec 15 │ │
419
+ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
420
+ │ │ │ │ │
421
+ │ └───────────────────┼───────────────────┘ │
422
+ │ │ HyperEdges connect to KG │
423
+ │ ▼ │
424
+ │ KNOWLEDGE GRAPH LAYER │
425
+ │ ┌─────────────────────────────────────────────────────────────────────┐ │
426
+ │ │ Provider:P001 ──────▶ Claim:C123 ◀────── Claimant:John │ │
427
+ │ │ │ │ │ │ │
428
+ │ │ ▼ ▼ ▼ │ │
429
+ │ │ riskScore: 0.87 amount: 50000 address: "123 Main" │ │
430
+ │ └─────────────────────────────────────────────────────────────────────┘ │
431
+ │ │
432
+ │ SAME QUAD STORE - Single SPARQL query traverses BOTH! │
433
+ └─────────────────────────────────────────────────────────────────────────────┘
434
+ ```
435
+
436
+ ### Benchmarked Performance
437
+
438
+ | Metric | Result | What It Means |
439
+ |--------|--------|---------------|
440
+ | **Memory Retrieval** | 94% Recall@10 at 10K depth | Find the right past query 94% of the time |
441
+ | **Search Speed** | 16.7ms for 10K queries | 30x faster than typical RAG |
442
+ | **Write Throughput** | 132K ops/sec (16 workers) | Handle enterprise volumes |
443
+ | **Read Throughput** | 302 ops/sec concurrent | Consistent under load |
444
+
445
+ ### Idempotent Responses
446
+
447
+ Same question = Same answer. Even with different wording.
107
448
 
108
449
  ```javascript
109
- const { GraphDB, HyperMindAgent } = require('rust-kgdb');
450
+ // First call: Compute answer, cache with semantic hash
451
+ const result1 = await agent.call("Analyze claims from Provider P001");
452
+
453
+ // Second call (different wording): Cache HIT!
454
+ const result2 = await agent.call("Show me P001's claim patterns");
455
+ // Same semantic hash → Same result
456
+ ```
457
+
458
+ ---
459
+
460
+ ## Mathematical Foundations
461
+
462
+ ### Category Theory: Tools as Morphisms
463
+
464
+ ```
465
+ Tools are typed arrows:
466
+ kg.sparql.query: Query → BindingSet
467
+ kg.motif.find: Pattern → Matches
468
+ kg.datalog.apply: Rules → InferredFacts
469
+
470
+ Composition is type-checked:
471
+ f: A → B
472
+ g: B → C
473
+ g ∘ f: A → C (valid only if B matches)
474
+
475
+ Laws guaranteed:
476
+ Identity: id ∘ f = f
477
+ Associativity: (h ∘ g) ∘ f = h ∘ (g ∘ f)
478
+ ```
479
+
480
+ **In practice:** The AI can only chain tools where outputs match inputs. Like Lego blocks that must fit.
481
+
482
+ ### WCOJ: Worst-Case Optimal Joins
483
+
484
+ Finding "all cases where Judge X ruled on Contract Y involving Company Z"?
485
+
486
+ **Traditional:** Check every case with Judge X (50K), every contract (500K combinations), every company (25M checks).
487
+
488
+ **WCOJ:** Keep sorted indexes. Walk through all three simultaneously. Skip impossible combinations. 50K checks instead of 25 million.
489
+
490
+ ### HNSW: Hierarchical Navigable Small World
491
+
492
+ Finding similar items from 50,000 vectors?
110
493
 
494
+ **Brute force:** Compare to all 50,000. O(n).
495
+
496
+ **HNSW:** Build a multi-layer graph. Start at top layer, descend toward target. ~20 hops. O(log n).
497
+
498
+ ### Datalog: Recursive Rule Evaluation
499
+
500
+ ```
501
+ mustReport(X) :- transaction(X), amount(X, A), A > 10000.
502
+ mustReport(X) :- transaction(X), involves(X, PEP).
503
+ mustReport(X) :- relatedTo(X, Y), mustReport(Y). # Recursive!
504
+ ```
505
+
506
+ Three rules generate ALL reporting requirements. Even for transactions connected to other suspicious transactions, cascading infinitely.
507
+
508
+ ---
509
+
510
+ ## Real-World Examples
511
+
512
+ ### Legal: Contract Analysis
513
+
514
+ ```javascript
111
515
  const db = new GraphDB('http://lawfirm.com/');
112
516
  db.loadTtl(`
113
- :Contract_2024_001 :hasClause :NonCompete_3yr ; :signedBy :ClientA .
517
+ :Contract_2024 :hasClause :NonCompete_3yr ; :signedBy :ClientA .
114
518
  :NonCompete_3yr :challengedIn :Martinez_v_Apex ; :upheldIn :Chen_v_StateBank .
115
- :Martinez_v_Apex :court "9th Circuit" ; :year 2021 ; :outcome "partially_enforced" .
116
- :Chen_v_StateBank :court "Delaware Chancery" ; :year 2018 ; :outcome "fully_enforced" .
519
+ :Martinez_v_Apex :court "9th Circuit" ; :year 2021 ; :outcome "partial" .
117
520
  `);
118
521
 
119
- const agent = new HyperMindAgent({ db });
120
522
  const result = await agent.ask("Has the non-compete clause been challenged?");
121
-
122
- console.log(result.answer);
123
- // "Yes - Martinez v. Apex (9th Circuit, 2021) partially enforced;
124
- // Chen v. StateBank (Delaware, 2018) fully enforced"
125
-
126
- console.log(result.evidence);
127
- // Full audit trail proving every fact came from your case database
523
+ // Returns REAL cases from YOUR database, not hallucinated citations
128
524
  ```
129
525
 
130
526
  ### Healthcare: Drug Interactions
@@ -134,221 +530,433 @@ const db = new GraphDB('http://hospital.org/');
134
530
  db.loadTtl(`
135
531
  :Patient_7291 :currentMedication :Warfarin ; :currentMedication :Lisinopril .
136
532
  :Warfarin :interactsWith :Aspirin ; :interactionSeverity "high" .
137
- :Warfarin :interactsWith :Ibuprofen ; :interactionSeverity "moderate" .
138
533
  :Lisinopril :interactsWith :Potassium ; :interactionSeverity "high" .
139
534
  `);
140
535
 
141
536
  const result = await agent.ask("What should we avoid prescribing to Patient 7291?");
142
- // Returns ONLY drugs that actually interact with their ACTUAL medications
143
- // Not hallucinated drug names - real interactions from your formulary
537
+ // Returns ACTUAL interactions from your formulary, not made-up drug names
144
538
  ```
145
539
 
146
- ### Insurance: Claims Fraud Detection
540
+ ### Insurance: Fraud Detection with Datalog
147
541
 
148
542
  ```javascript
149
543
  const db = new GraphDB('http://insurer.com/');
150
544
  db.loadTtl(`
151
- :Provider_892 :totalClaims 1247 ; :avgClaimAmount 3200 ; :denialRate 0.02 .
152
- :Provider_445 :totalClaims 89 ; :avgClaimAmount 47000 ; :denialRate 0.34 .
153
- :Provider_445 :hasPattern :UnbundledBilling ; :flaggedBy :SIU_2024_Q1 .
154
- :Claim_99281 :provider :Provider_445 ; :amount 52000 ; :diagnosis :LumbarFusion .
545
+ :P001 a :Claimant ; :name "John Smith" ; :address "123 Main St" .
546
+ :P002 a :Claimant ; :name "Jane Doe" ; :address "123 Main St" .
547
+ :P001 :knows :P002 .
548
+ :P001 :claimsWith :PROV001 .
549
+ :P002 :claimsWith :PROV001 .
155
550
  `);
156
551
 
157
- const result = await agent.ask("Which providers show suspicious billing patterns?");
158
- // Returns Provider_445 with ACTUAL evidence:
159
- // - High avg claim ($47K vs network avg)
160
- // - 34% denial rate
161
- // - SIU flag from Q1 2024
162
- // NOT fabricated accusations against innocent providers
552
+ // NICB fraud detection rules
553
+ datalog.addRule(JSON.stringify({
554
+ head: {predicate:'potential_collusion', terms:['?X','?Y','?P']},
555
+ body: [
556
+ {predicate:'claimant', terms:['?X']},
557
+ {predicate:'claimant', terms:['?Y']},
558
+ {predicate:'knows', terms:['?X','?Y']},
559
+ {predicate:'claimsWith', terms:['?X','?P']},
560
+ {predicate:'claimsWith', terms:['?Y','?P']}
561
+ ]
562
+ }));
563
+
564
+ const inferred = evaluateDatalog(datalog);
565
+ // potential_collusion(P001, P002, PROV001) - DETECTED!
163
566
  ```
164
567
 
165
- ### Fraud: Transaction Network Analysis
568
+ ### AML: Circular Payment Detection
166
569
 
167
570
  ```javascript
168
- const db = new GraphDB('http://bank.com/aml/');
169
571
  db.loadTtl(`
170
572
  :Acct_1001 :transferredTo :Acct_2002 ; :amount 9500 .
171
573
  :Acct_2002 :transferredTo :Acct_3003 ; :amount 9400 .
172
- :Acct_3003 :transferredTo :Acct_1001 ; :amount 9200 . # Circular!
173
- :Acct_1001 :owner :Entity_A ; :jurisdiction "Cayman Islands" .
174
- `);
175
-
176
- // Datalog rule: Find circular payment chains (potential layering)
177
- db.addRule(`
178
- circularChain(X, Y, Z) :-
179
- transfer(X, Y), transfer(Y, Z), transfer(Z, X),
180
- amount(X, Y, A1), amount(Y, Z, A2), amount(Z, X, A3),
181
- A1 > 9000, A2 > 9000, A3 > 9000.
574
+ :Acct_3003 :transferredTo :Acct_1001 ; :amount 9200 .
182
575
  `);
183
576
 
184
- const result = await agent.ask("Find potential money laundering patterns");
185
- // Returns the ACTUAL circular chain: 1001 → 2002 → 3003 → 1001
186
- // With amounts just under $10K reporting threshold
187
- // All verifiable from your transaction records
577
+ // Find circular chains (money laundering indicator)
578
+ const triangles = gf.triangleCount(); // 1 circular pattern
188
579
  ```
189
580
 
190
581
  ---
191
582
 
192
- ## The Math (Explained Simply)
583
+ ## Performance Benchmarks
193
584
 
194
- ### Category Theory: The Lego Rule
585
+ All measurements verified. Run them yourself:
195
586
 
196
- Imagine Lego blocks. A 2x4 brick only connects to compatible bricks.
197
-
198
- We made AI tools work the same way:
199
- - Query tool: takes a question, returns case citations
200
- - Validation tool: takes citations, returns verified facts
201
-
202
- The AI can only chain tools where outputs match inputs. A "patient record" output can't connect to a "case citation" input. **The type system prevents nonsense combinations** - like Lego blocks that physically don't fit.
587
+ ```bash
588
+ node benchmark.js # Core performance
589
+ node vanilla-vs-hypermind-benchmark.js # Agent accuracy
590
+ ```
203
591
 
204
- ### WCOJ: The Court Records Trick
592
+ ### Rust Core Engine
205
593
 
206
- Finding "all cases where Judge X ruled on Contract Type Y involving Company Z"?
594
+ | Metric | rust-kgdb | RDFox | Apache Jena |
595
+ |--------|-----------|-------|-------------|
596
+ | **Lookup** | 449 ns | 5,000+ ns | 10,000+ ns |
597
+ | **Memory/Triple** | 24 bytes | 32 bytes | 50-60 bytes |
598
+ | **Bulk Insert** | 146K/sec | 200K/sec | 50K/sec |
207
599
 
208
- **Slow way:** Check every case with Judge X (50,000), every contract type (500K combinations), every company (25M checks).
600
+ ### Agent Accuracy (LUBM Benchmark)
209
601
 
210
- **Our way:** Keep sorted indexes of judges, contract types, and companies. Walk through all three simultaneously, skip impossible combinations. 50,000 checks instead of 25 million. This is called Worst-Case Optimal Join.
602
+ | System | Without Schema | With Schema |
603
+ |--------|---------------|-------------|
604
+ | Vanilla LLM | 0% | - |
605
+ | LangChain | 0% | 71.4% |
606
+ | DSPy | 14.3% | 71.4% |
607
+ | **HyperMind** | - | **71.4%** |
211
608
 
212
- ### HNSW: The Medical Specialist Network
609
+ *All frameworks achieve same accuracy WITH schema. HyperMind's advantage is integrated schema handling.*
213
610
 
214
- Finding the right specialist for a rare condition from 50,000 doctors?
611
+ ### Concurrency (16 Workers)
215
612
 
216
- **Slow way:** Compare symptoms to all 50,000 doctor profiles.
613
+ | Operation | Throughput |
614
+ |-----------|------------|
615
+ | Writes | 132K ops/sec |
616
+ | Reads | 302 ops/sec |
617
+ | GraphFrames | 6.5K ops/sec |
618
+ | Mixed | 642 ops/sec |
217
619
 
218
- **Our way:** Build a "referral network." Generalists connect to specialists who connect to sub-specialists. Start anywhere, hop toward the right match. ~20 hops instead of 50,000 comparisons.
620
+ ---
219
621
 
220
- We use this to find "similar past queries" - 10,000 historical questions searched in 16 milliseconds.
622
+ ## Feature Summary
623
+
624
+ | Category | Feature | Performance |
625
+ |----------|---------|-------------|
626
+ | **Core** | SPARQL 1.1 Engine | 449ns lookups |
627
+ | **Core** | RDF 1.2 Support | W3C compliant |
628
+ | **Core** | Named Graphs | Quad store |
629
+ | **Analytics** | PageRank | O(V + E) |
630
+ | **Analytics** | Connected Components | Union-find |
631
+ | **Analytics** | Triangle Count | O(E^1.5) |
632
+ | **Analytics** | Motif Finding | Pattern DSL |
633
+ | **Analytics** | Pregel BSP | Billion-edge scale |
634
+ | **AI** | HNSW Embeddings | 16ms/10K vectors |
635
+ | **AI** | 1-Hop Cache | O(1) neighbors |
636
+ | **AI** | Agent Memory | 94% recall@10 |
637
+ | **Reasoning** | Datalog | Semi-naive |
638
+ | **Reasoning** | RDFS | Subclass inference |
639
+ | **Reasoning** | OWL 2 RL | Rule-based |
640
+ | **Validation** | SHACL | Shape constraints |
641
+ | **Provenance** | PROV | W3C standard |
642
+ | **Joins** | WCOJ | Optimal complexity |
643
+ | **Security** | WASM Sandbox | Capability-based |
644
+ | **Audit** | ProofDAG | SHA-256 witnesses |
221
645
 
222
- ### Datalog: The Compliance Cascade
646
+ ---
223
647
 
224
- Instead of manually listing every compliance requirement:
648
+ ## Installation
225
649
 
650
+ ```bash
651
+ npm install rust-kgdb
226
652
  ```
227
- mustReport(X) :- transaction(X), amount(X, A), A > 10000.
228
- mustReport(X) :- transaction(X), involves(X, PEP).
229
- mustReport(X) :- relatedTo(X, Y), mustReport(Y). # Cascades!
230
- ```
231
-
232
- Three rules generate ALL reporting requirements automatically. Even for transactions connected to other suspicious transactions, going back as far as your data allows.
233
653
 
234
- ---
654
+ **Platforms:** macOS (Intel/Apple Silicon), Linux (x64/ARM64), Windows (x64)
235
655
 
236
- ## Why Our Agent Memory Is Different
656
+ **Requirements:** Node.js 14+
237
657
 
238
- Most AI agents have amnesia. Ask them the same question twice, they start from scratch.
658
+ ---
239
659
 
240
- **The Problem:**
241
- - ChatGPT forgets your previous questions after context window fills
242
- - LangChain agents rebuild context every call (~500ms overhead)
243
- - Vector databases return "similar" docs, not the exact query you ran before
660
+ ## Complete Fraud Detection Example
244
661
 
245
- **Our Approach: Deep Flashback**
662
+ Copy this entire example to get started with fraud detection:
246
663
 
247
- When you ask "find suspicious providers", we:
248
- 1. **Hash your intent** → Check if we've seen this exact question pattern before
249
- 2. **HNSW lookup** → Search 10,000 historical queries in 16ms (not 500ms)
250
- 3. **Return cached result** → If we've answered this before, return instantly with proof
664
+ ```javascript
665
+ const {
666
+ GraphDB,
667
+ GraphFrame,
668
+ EmbeddingService,
669
+ DatalogProgram,
670
+ evaluateDatalog,
671
+ HyperMindAgent
672
+ } = require('rust-kgdb');
673
+
674
+ // ============================================================
675
+ // STEP 1: Initialize Services
676
+ // ============================================================
677
+ const db = new GraphDB('http://insurance.org/fraud-detection');
678
+ const embeddings = new EmbeddingService();
679
+
680
+ // ============================================================
681
+ // STEP 2: Load Claims Data
682
+ // ============================================================
683
+ db.loadTtl(`
684
+ @prefix : <http://insurance.org/> .
685
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
686
+
687
+ # Claims
688
+ :CLM001 a :Claim ;
689
+ :amount "18500"^^xsd:decimal ;
690
+ :description "Soft tissue injury from rear-end collision" ;
691
+ :claimant :P001 ;
692
+ :provider :PROV001 ;
693
+ :filingDate "2024-11-15"^^xsd:date .
694
+
695
+ :CLM002 a :Claim ;
696
+ :amount "22300"^^xsd:decimal ;
697
+ :description "Whiplash injury from vehicle accident" ;
698
+ :claimant :P002 ;
699
+ :provider :PROV001 ;
700
+ :filingDate "2024-11-18"^^xsd:date .
701
+
702
+ # Claimants (note: same address = red flag!)
703
+ :P001 a :Claimant ;
704
+ :name "John Smith" ;
705
+ :address "123 Main St, Miami, FL" ;
706
+ :riskScore "0.85"^^xsd:decimal .
707
+
708
+ :P002 a :Claimant ;
709
+ :name "Jane Doe" ;
710
+ :address "123 Main St, Miami, FL" ;
711
+ :riskScore "0.72"^^xsd:decimal .
712
+
713
+ # Relationships (fraud indicators)
714
+ :P001 :knows :P002 .
715
+ :P001 :paidTo :P002 .
716
+ :P002 :paidTo :P003 .
717
+ :P003 :paidTo :P001 . # Circular payment!
718
+
719
+ # Provider
720
+ :PROV001 a :Provider ;
721
+ :name "Quick Care Rehabilitation Clinic" ;
722
+ :flagCount "4"^^xsd:integer .
723
+ `);
251
724
 
252
- **Benchmarked Results (Verified):**
725
+ console.log(`Loaded ${db.countTriples()} triples`);
726
+
727
+ // ============================================================
728
+ // STEP 3: Graph Analytics - Find Network Patterns
729
+ // ============================================================
730
+ const vertices = JSON.stringify([
731
+ {id: 'P001'}, {id: 'P002'}, {id: 'P003'}, {id: 'PROV001'}
732
+ ]);
733
+ const edges = JSON.stringify([
734
+ {src: 'P001', dst: 'P002'},
735
+ {src: 'P001', dst: 'PROV001'},
736
+ {src: 'P002', dst: 'PROV001'},
737
+ {src: 'P001', dst: 'P002'}, // payment
738
+ {src: 'P002', dst: 'P003'}, // payment
739
+ {src: 'P003', dst: 'P001'} // payment (circular!)
740
+ ]);
741
+
742
+ const gf = new GraphFrame(vertices, edges);
743
+ console.log('Triangles (circular patterns):', gf.triangleCount());
744
+ console.log('PageRank:', gf.pageRank(0.15, 20));
745
+
746
+ // ============================================================
747
+ // STEP 4: Embedding-Based Similarity
748
+ // ============================================================
749
+ // Store embeddings for semantic similarity search
750
+ // (In production, use OpenAI/Voyage embeddings)
751
+ function mockEmbedding(text) {
752
+ return new Array(384).fill(0).map((_, i) =>
753
+ Math.sin(text.charCodeAt(i % text.length) * 0.1) * 0.5 + 0.5
754
+ );
755
+ }
756
+
757
+ embeddings.storeVector('CLM001', mockEmbedding('soft tissue injury rear end'));
758
+ embeddings.storeVector('CLM002', mockEmbedding('whiplash vehicle accident'));
759
+ embeddings.rebuildIndex();
760
+
761
+ const similar = JSON.parse(embeddings.findSimilar('CLM001', 5, 0.3));
762
+ console.log('Similar claims:', similar);
763
+
764
+ // ============================================================
765
+ // STEP 5: Datalog Rules - NICB Fraud Detection
766
+ // ============================================================
767
+ const datalog = new DatalogProgram();
768
+
769
+ // Add facts from our knowledge graph
770
+ datalog.addFact(JSON.stringify({predicate:'claimant', terms:['P001']}));
771
+ datalog.addFact(JSON.stringify({predicate:'claimant', terms:['P002']}));
772
+ datalog.addFact(JSON.stringify({predicate:'provider', terms:['PROV001']}));
773
+ datalog.addFact(JSON.stringify({predicate:'knows', terms:['P001','P002']}));
774
+ datalog.addFact(JSON.stringify({predicate:'claims_with', terms:['P001','PROV001']}));
775
+ datalog.addFact(JSON.stringify({predicate:'claims_with', terms:['P002','PROV001']}));
776
+ datalog.addFact(JSON.stringify({predicate:'same_address', terms:['P001','P002']}));
777
+
778
+ // NICB Collusion Detection Rule
779
+ datalog.addRule(JSON.stringify({
780
+ head: {predicate:'potential_collusion', terms:['?X','?Y','?P']},
781
+ body: [
782
+ {predicate:'claimant', terms:['?X']},
783
+ {predicate:'claimant', terms:['?Y']},
784
+ {predicate:'provider', terms:['?P']},
785
+ {predicate:'knows', terms:['?X','?Y']},
786
+ {predicate:'claims_with', terms:['?X','?P']},
787
+ {predicate:'claims_with', terms:['?Y','?P']}
788
+ ]
789
+ }));
790
+
791
+ // Staged Accident Indicator Rule
792
+ datalog.addRule(JSON.stringify({
793
+ head: {predicate:'staged_accident_indicator', terms:['?X','?Y']},
794
+ body: [
795
+ {predicate:'claimant', terms:['?X']},
796
+ {predicate:'claimant', terms:['?Y']},
797
+ {predicate:'same_address', terms:['?X','?Y']},
798
+ {predicate:'knows', terms:['?X','?Y']}
799
+ ]
800
+ }));
801
+
802
+ const inferred = JSON.parse(evaluateDatalog(datalog));
803
+ console.log('Inferred fraud patterns:', inferred);
804
+
805
+ // ============================================================
806
+ // STEP 6: SPARQL Query - Get Detailed Evidence
807
+ // ============================================================
808
+ const suspiciousClaims = db.querySelect(`
809
+ PREFIX : <http://insurance.org/>
810
+ SELECT ?claim ?amount ?claimant ?provider WHERE {
811
+ ?claim a :Claim ;
812
+ :amount ?amount ;
813
+ :claimant ?claimant ;
814
+ :provider ?provider .
815
+ ?claimant :riskScore ?risk .
816
+ FILTER(?risk > 0.7)
817
+ }
818
+ `);
253
819
 
254
- | Metric | Result | What It Means |
255
- |--------|--------|---------------|
256
- | **Memory Retrieval** | 94% Recall@10 at 10K depth | Find the right past query 94% of the time |
257
- | **Search Speed** | 16.7ms for 10K queries | 30x faster than typical RAG |
258
- | **Write Throughput** | 132K ops/sec (16 workers) | Handle enterprise query volumes |
259
- | **Read Throughput** | 302 ops/sec concurrent | Consistent under load |
820
+ console.log('High-risk claims:', suspiciousClaims);
260
821
 
261
- **Why This Matters:**
822
+ // ============================================================
823
+ // STEP 7: HyperMind Agent - Natural Language Interface
824
+ // ============================================================
825
+ const agent = new HyperMindAgent({ db, embeddings });
262
826
 
263
- A claims adjuster asks about Provider #445 on Monday. On Friday, a different adjuster asks the same question. Without memory:
264
- - Monday: 3 seconds to generate query, execute, format
265
- - Friday: 3 seconds again (total waste)
827
+ async function investigate() {
828
+ const result = await agent.ask("Which claims show potential fraud patterns?");
266
829
 
267
- With our memory:
268
- - Monday: 3 seconds (first time)
269
- - Friday: 16ms (cached, with full audit trail)
830
+ console.log('\\n=== AGENT FINDINGS ===');
831
+ console.log(result.answer);
832
+ console.log('\\n=== EVIDENCE CHAIN ===');
833
+ console.log(result.evidence);
834
+ console.log('\\n=== PROOF HASH ===');
835
+ console.log(result.proofHash);
836
+ }
270
837
 
271
- **The audit trail proves the Friday answer came from the same verified query as Monday** - not a new hallucination.
838
+ investigate().catch(console.error);
839
+ ```
272
840
 
273
841
  ---
274
842
 
275
- ## Embedding-Powered Similarity
276
-
277
- Traditional keyword search fails when:
278
- - Lawyer searches "breach of fiduciary duty" but case uses "violation of trust obligations"
279
- - Doctor searches "heart attack" but records say "myocardial infarction"
280
- - Fraud analyst searches "shell company" but data shows "SPV" or "holding entity"
281
-
282
- **Our Approach:**
843
+ ## Complete Underwriting Example
283
844
 
284
845
  ```javascript
285
- const embedding = new EmbeddingService();
286
-
287
- // Store queries with their semantic embeddings
288
- embedding.store("find_fraud_providers", queryEmbedding);
846
+ const { GraphDB, DatalogProgram, evaluateDatalog } = require('rust-kgdb');
289
847
 
290
- // Later: "which doctors are cheating" matches "find_fraud_providers"
291
- // because embeddings capture meaning, not just keywords
292
- const similar = embedding.findSimilar(newQueryEmbedding, 0.85);
293
- ```
848
+ // ============================================================
849
+ // Automated Underwriting Rules Engine
850
+ // ============================================================
851
+ const db = new GraphDB('http://underwriting.org/');
294
852
 
295
- **HNSW Index Performance:**
296
- - 50,000 vectors: ~20 comparisons (not 50,000)
297
- - O(log N) search time
298
- - 16ms for 10K similarity lookups
853
+ // Load applicant data
854
+ db.loadTtl(`
855
+ @prefix : <http://underwriting.org/> .
856
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
857
+
858
+ :APP001 a :Application ;
859
+ :applicant :PERSON001 ;
860
+ :requestedAmount "500000"^^xsd:decimal ;
861
+ :propertyType :SingleFamily .
862
+
863
+ :PERSON001 a :Person ;
864
+ :creditScore "720"^^xsd:integer ;
865
+ :dti "0.35"^^xsd:decimal ;
866
+ :employmentYears "5"^^xsd:integer ;
867
+ :bankruptcyHistory false .
868
+ `);
299
869
 
300
- **This is how "cases like this one" returns relevant precedents even when the exact words differ.**
870
+ // Underwriting rules as Datalog
871
+ const datalog = new DatalogProgram();
872
+
873
+ // Facts
874
+ datalog.addFact(JSON.stringify({predicate:'application', terms:['APP001']}));
875
+ datalog.addFact(JSON.stringify({predicate:'credit_score', terms:['APP001','720']}));
876
+ datalog.addFact(JSON.stringify({predicate:'dti', terms:['APP001','0.35']}));
877
+ datalog.addFact(JSON.stringify({predicate:'employment_years', terms:['APP001','5']}));
878
+
879
+ // Auto-Approve Rule: Credit > 700, DTI < 0.43, Employment > 2 years
880
+ datalog.addRule(JSON.stringify({
881
+ head: {predicate:'auto_approve', terms:['?App']},
882
+ body: [
883
+ {predicate:'application', terms:['?App']},
884
+ {predicate:'credit_score', terms:['?App','?Credit']},
885
+ {predicate:'dti', terms:['?App','?DTI']},
886
+ {predicate:'employment_years', terms:['?App','?Years']}
887
+ // Note: Numeric comparisons would be handled in production
888
+ ]
889
+ }));
890
+
891
+ const decisions = JSON.parse(evaluateDatalog(datalog));
892
+ console.log('Underwriting decisions:', decisions);
893
+ ```
301
894
 
302
895
  ---
303
896
 
304
- ## What's In The Box
897
+ ## API Reference
305
898
 
306
- | Feature | What It Does | Why It Matters |
307
- |---------|--------------|----------------|
308
- | **SPARQL Engine** | Query knowledge graphs (449ns) | Faster than any hosted graph DB |
309
- | **Datalog Rules** | Derive new facts from rules | Compliance cascades, fraud chains |
310
- | **GraphFrames** | PageRank, shortest paths, motifs | Find hidden network structures |
311
- | **Pregel BSP** | Process billion-edge graphs | Scale to enterprise transaction volumes |
312
- | **HNSW Search** | Find similar items in milliseconds | "Cases like this one" in 16ms |
313
- | **Audit Trail** | Prove every answer's source | Regulatory compliance, legal discovery |
314
- | **WASM Sandbox** | Secure agent execution | Run untrusted code safely |
315
- | **RDF 1.2 + SHACL** | W3C standards compliance | Interop with existing enterprise data |
899
+ ### GraphDB
316
900
 
317
- ---
318
-
319
- ## Performance
901
+ ```javascript
902
+ const db = new GraphDB(baseUri) // Create database
903
+ db.loadTtl(turtle, graphUri) // Load Turtle data
904
+ db.querySelect(sparql) // SELECT query → [{bindings}]
905
+ db.queryConstruct(sparql) // CONSTRUCT query → triples
906
+ db.countTriples() // Total triple count
907
+ db.clear() // Clear all data
908
+ db.getVersion() // SDK version
909
+ ```
320
910
 
321
- | Metric | rust-kgdb | Typical Graph DB |
322
- |--------|-----------|------------------|
323
- | Lookup | 449 ns | 5,000+ ns |
324
- | Memory | 24 bytes/triple | 60+ bytes |
325
- | Setup | `npm install` | Days/weeks |
326
- | Server | None (embedded) | Required |
327
- | Data Location | Your infrastructure | Their cloud |
911
+ ### GraphFrame
328
912
 
329
- ---
913
+ ```javascript
914
+ const gf = new GraphFrame(verticesJson, edgesJson)
915
+ gf.pageRank(dampingFactor, iterations) // PageRank scores
916
+ gf.connectedComponents() // Component labels
917
+ gf.triangleCount() // Triangle count
918
+ gf.shortestPaths(sourceId) // Shortest path distances
919
+ gf.find(motifPattern) // Motif pattern matching
920
+ ```
330
921
 
331
- ## Install
922
+ ### EmbeddingService
332
923
 
333
- ```bash
334
- npm install rust-kgdb
924
+ ```javascript
925
+ const emb = new EmbeddingService()
926
+ emb.storeVector(entityId, float32Array) // Store embedding
927
+ emb.rebuildIndex() // Build HNSW index
928
+ emb.findSimilar(entityId, k, threshold) // Find similar entities
929
+ emb.onTripleInsert(s, p, o, g) // Update neighbor cache
930
+ emb.getNeighborsOut(entityId) // Get outgoing neighbors
335
931
  ```
336
932
 
933
+ ### DatalogProgram
934
+
337
935
  ```javascript
338
- const { GraphDB } = require('rust-kgdb');
936
+ const dl = new DatalogProgram()
937
+ dl.addFact(factJson) // Add fact
938
+ dl.addRule(ruleJson) // Add rule
939
+ evaluateDatalog(dl) // Run evaluation → facts JSON
940
+ queryDatalog(dl, queryJson) // Query specific predicate
941
+ ```
339
942
 
340
- const db = new GraphDB('http://example.org/');
341
- db.loadTtl(':Alice :knows :Bob . :Bob :knows :Charlie .');
943
+ ### Pregel
342
944
 
343
- const results = db.query('SELECT ?x WHERE { :Alice :knows ?x }');
344
- // [{x: ':Bob'}]
945
+ ```javascript
946
+ pregelShortestPaths(graphFrame, sourceId, maxIterations)
947
+ // Returns: distance map from source to all vertices
345
948
  ```
346
949
 
347
- ---
950
+ ### Factory Functions
348
951
 
349
- ## Links
952
+ ```javascript
953
+ friendsGraph() // Sample social network
954
+ chainGraph(n) // Linear chain of n vertices
955
+ starGraph(n) // Star topology with n leaves
956
+ completeGraph(n) // Fully connected graph
957
+ cycleGraph(n) // Circular graph
958
+ ```
350
959
 
351
- - [Examples](./examples/)
352
- - [GitHub](https://github.com/gonnect-uk/rust-kgdb)
960
+ ---
353
961
 
354
962
  Apache 2.0 License
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rust-kgdb",
3
- "version": "0.6.56",
3
+ "version": "0.6.57",
4
4
  "description": "High-performance RDF/SPARQL database with AI agent framework. GraphDB (449ns lookups, 35x faster than RDFox), GraphFrames analytics (PageRank, motifs), Datalog reasoning, HNSW vector embeddings. HyperMindAgent for schema-aware query generation with audit trails. W3C SPARQL 1.1 compliant. Native performance via Rust + NAPI-RS.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",