rust-kgdb 0.6.6 → 0.6.7
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/hypermind-agent.js +249 -1
- package/index.js +14 -0
- package/package.json +1 -1
package/hypermind-agent.js
CHANGED
|
@@ -62,6 +62,250 @@ const TypeId = {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// TOOL REGISTRY - All available tools as typed morphisms (Category Theory)
|
|
67
|
+
// ============================================================================
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* TOOL_REGISTRY - All available tools as typed morphisms
|
|
71
|
+
* Each tool is an arrow: Input Type → Output Type
|
|
72
|
+
*/
|
|
73
|
+
const TOOL_REGISTRY = {
|
|
74
|
+
'kg.sparql.query': {
|
|
75
|
+
name: 'kg.sparql.query',
|
|
76
|
+
input: 'Query',
|
|
77
|
+
output: 'BindingSet',
|
|
78
|
+
description: 'Execute SPARQL query on knowledge graph',
|
|
79
|
+
domain: 'kg',
|
|
80
|
+
patterns: {
|
|
81
|
+
select: 'SELECT ?var WHERE { ... }',
|
|
82
|
+
construct: 'CONSTRUCT { ... } WHERE { ... }',
|
|
83
|
+
ask: 'ASK WHERE { ... }'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
'kg.sparql.update': {
|
|
87
|
+
name: 'kg.sparql.update',
|
|
88
|
+
input: 'UpdateQuery',
|
|
89
|
+
output: 'Unit',
|
|
90
|
+
description: 'Execute SPARQL update (INSERT/DELETE)',
|
|
91
|
+
domain: 'kg'
|
|
92
|
+
},
|
|
93
|
+
'kg.motif.find': {
|
|
94
|
+
name: 'kg.motif.find',
|
|
95
|
+
input: 'MotifPattern',
|
|
96
|
+
output: 'PatternSet',
|
|
97
|
+
description: 'Find graph motif patterns',
|
|
98
|
+
domain: 'kg',
|
|
99
|
+
patterns: {
|
|
100
|
+
triangle: '(a)-[]->(b); (b)-[]->(c); (c)-[]->(a)',
|
|
101
|
+
star: '(center)-[]->(n1); (center)-[]->(n2); (center)-[]->(n3)',
|
|
102
|
+
path: '(a)-[]->(b); (b)-[]->(c)'
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
'kg.datalog.apply': {
|
|
106
|
+
name: 'kg.datalog.apply',
|
|
107
|
+
input: 'DatalogRules',
|
|
108
|
+
output: 'InferredFacts',
|
|
109
|
+
description: 'Apply Datalog rules for logical inference',
|
|
110
|
+
domain: 'kg',
|
|
111
|
+
prebuiltRules: {
|
|
112
|
+
transitivity: 'reachable(X,Z) :- edge(X,Y), reachable(Y,Z)',
|
|
113
|
+
circular_payment: 'circular(A,B,C) :- transfers(A,B), transfers(B,C), transfers(C,A)'
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
'kg.datalog.infer': {
|
|
117
|
+
name: 'kg.datalog.infer',
|
|
118
|
+
input: 'InferenceRequest',
|
|
119
|
+
output: 'InferredFacts',
|
|
120
|
+
description: 'Run semi-naive Datalog inference',
|
|
121
|
+
domain: 'kg'
|
|
122
|
+
},
|
|
123
|
+
'kg.embeddings.search': {
|
|
124
|
+
name: 'kg.embeddings.search',
|
|
125
|
+
input: 'Entity',
|
|
126
|
+
output: 'SimilarEntities',
|
|
127
|
+
description: 'Find semantically similar entities via HNSW',
|
|
128
|
+
domain: 'kg',
|
|
129
|
+
constraints: { k: 'Int64', threshold: 'Float64' }
|
|
130
|
+
},
|
|
131
|
+
'kg.graphframes.pagerank': {
|
|
132
|
+
name: 'kg.graphframes.pagerank',
|
|
133
|
+
input: 'Graph',
|
|
134
|
+
output: 'Rankings',
|
|
135
|
+
description: 'Compute PageRank on graph',
|
|
136
|
+
domain: 'kg',
|
|
137
|
+
constraints: { dampingFactor: 0.85, maxIterations: 20 }
|
|
138
|
+
},
|
|
139
|
+
'kg.graphframes.connected_components': {
|
|
140
|
+
name: 'kg.graphframes.connected_components',
|
|
141
|
+
input: 'Graph',
|
|
142
|
+
output: 'Components',
|
|
143
|
+
description: 'Find connected components in graph',
|
|
144
|
+
domain: 'kg'
|
|
145
|
+
},
|
|
146
|
+
'kg.graphframes.shortest_paths': {
|
|
147
|
+
name: 'kg.graphframes.shortest_paths',
|
|
148
|
+
input: 'Graph',
|
|
149
|
+
output: 'Distances',
|
|
150
|
+
description: 'Compute shortest paths from landmarks',
|
|
151
|
+
domain: 'kg'
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// LLM PLANNER - Natural language to typed tool pipelines
|
|
157
|
+
// ============================================================================
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* LLMPlanner - Converts natural language prompts into validated execution plans
|
|
161
|
+
* Uses type checking (Curry-Howard correspondence) to ensure correctness
|
|
162
|
+
*/
|
|
163
|
+
class LLMPlanner {
|
|
164
|
+
constructor(model, tools = TOOL_REGISTRY) {
|
|
165
|
+
this.model = model
|
|
166
|
+
this.tools = tools
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Generate execution plan from natural language
|
|
171
|
+
* @param {string} prompt - Natural language query
|
|
172
|
+
* @param {Object} context - Optional context for planning
|
|
173
|
+
* @returns {Promise<Object>} - Execution plan with typed steps
|
|
174
|
+
*/
|
|
175
|
+
async plan(prompt, context = {}) {
|
|
176
|
+
const planId = `plan-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`
|
|
177
|
+
|
|
178
|
+
// Analyze prompt to determine intent and required tools
|
|
179
|
+
const intent = this._analyzeIntent(prompt)
|
|
180
|
+
|
|
181
|
+
// Generate typed steps based on intent
|
|
182
|
+
const steps = this._generateSteps(intent, context)
|
|
183
|
+
|
|
184
|
+
// Build type chain for composition validation
|
|
185
|
+
const typeChain = this._buildTypeChain(steps)
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
id: planId,
|
|
189
|
+
prompt,
|
|
190
|
+
intent,
|
|
191
|
+
steps,
|
|
192
|
+
type_chain: typeChain,
|
|
193
|
+
confidence: this._calculateConfidence(steps, intent),
|
|
194
|
+
explanation: this._generateExplanation(steps, intent)
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
_analyzeIntent(prompt) {
|
|
199
|
+
const lowerPrompt = prompt.toLowerCase()
|
|
200
|
+
|
|
201
|
+
// Intent detection based on keywords
|
|
202
|
+
const intents = {
|
|
203
|
+
query: ['find', 'search', 'list', 'show', 'get', 'select'],
|
|
204
|
+
infer: ['infer', 'deduce', 'derive', 'reason', 'conclude'],
|
|
205
|
+
similar: ['similar', 'like', 'related', 'nearest', 'closest'],
|
|
206
|
+
pattern: ['pattern', 'motif', 'circular', 'cycle', 'ring'],
|
|
207
|
+
rank: ['rank', 'important', 'pagerank', 'score'],
|
|
208
|
+
compliance: ['compliance', 'check', 'validate', 'verify']
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const detected = {}
|
|
212
|
+
for (const [intentType, keywords] of Object.entries(intents)) {
|
|
213
|
+
detected[intentType] = keywords.some(k => lowerPrompt.includes(k))
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return detected
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
_generateSteps(intent, context) {
|
|
220
|
+
const steps = []
|
|
221
|
+
let stepId = 1
|
|
222
|
+
|
|
223
|
+
// Add SPARQL query step if query intent detected
|
|
224
|
+
if (intent.query || intent.compliance) {
|
|
225
|
+
steps.push({
|
|
226
|
+
id: stepId++,
|
|
227
|
+
tool: 'kg.sparql.query',
|
|
228
|
+
input_type: 'Query',
|
|
229
|
+
output_type: 'BindingSet',
|
|
230
|
+
args: { sparql: context.sparql || 'SELECT * WHERE { ?s ?p ?o } LIMIT 100' }
|
|
231
|
+
})
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Add pattern finding if pattern intent detected
|
|
235
|
+
if (intent.pattern) {
|
|
236
|
+
steps.push({
|
|
237
|
+
id: stepId++,
|
|
238
|
+
tool: 'kg.motif.find',
|
|
239
|
+
input_type: 'MotifPattern',
|
|
240
|
+
output_type: 'PatternSet',
|
|
241
|
+
args: { pattern: context.pattern || '(a)-[]->(b); (b)-[]->(c); (c)-[]->(a)' }
|
|
242
|
+
})
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Add inference if infer intent detected
|
|
246
|
+
if (intent.infer) {
|
|
247
|
+
steps.push({
|
|
248
|
+
id: stepId++,
|
|
249
|
+
tool: 'kg.datalog.apply',
|
|
250
|
+
input_type: 'DatalogRules',
|
|
251
|
+
output_type: 'InferredFacts',
|
|
252
|
+
args: { rules: context.rules || [] }
|
|
253
|
+
})
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Add similarity search if similar intent detected
|
|
257
|
+
if (intent.similar) {
|
|
258
|
+
steps.push({
|
|
259
|
+
id: stepId++,
|
|
260
|
+
tool: 'kg.embeddings.search',
|
|
261
|
+
input_type: 'Entity',
|
|
262
|
+
output_type: 'SimilarEntities',
|
|
263
|
+
args: { k: 10, threshold: 0.7 }
|
|
264
|
+
})
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// Add ranking if rank intent detected
|
|
268
|
+
if (intent.rank) {
|
|
269
|
+
steps.push({
|
|
270
|
+
id: stepId++,
|
|
271
|
+
tool: 'kg.graphframes.pagerank',
|
|
272
|
+
input_type: 'Graph',
|
|
273
|
+
output_type: 'Rankings',
|
|
274
|
+
args: { dampingFactor: 0.85, maxIterations: 20 }
|
|
275
|
+
})
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Default to SPARQL query if no specific intent detected
|
|
279
|
+
if (steps.length === 0) {
|
|
280
|
+
steps.push({
|
|
281
|
+
id: stepId++,
|
|
282
|
+
tool: 'kg.sparql.query',
|
|
283
|
+
input_type: 'Query',
|
|
284
|
+
output_type: 'BindingSet',
|
|
285
|
+
args: { sparql: 'SELECT * WHERE { ?s ?p ?o } LIMIT 100' }
|
|
286
|
+
})
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return steps
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
_buildTypeChain(steps) {
|
|
293
|
+
return steps.map(s => `${s.input_type} → ${s.output_type}`).join(' ; ')
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
_calculateConfidence(steps, intent) {
|
|
297
|
+
// Higher confidence if intent matches tool selection
|
|
298
|
+
const matchedIntents = Object.values(intent).filter(v => v).length
|
|
299
|
+
return Math.min(0.95, 0.7 + (matchedIntents * 0.05))
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
_generateExplanation(steps, intent) {
|
|
303
|
+
const toolNames = steps.map(s => s.tool).join(', ')
|
|
304
|
+
return `Plan uses ${steps.length} tool(s): ${toolNames}. ` +
|
|
305
|
+
`Detected intents: ${Object.entries(intent).filter(([_, v]) => v).map(([k]) => k).join(', ') || 'general query'}.`
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
65
309
|
// ============================================================================
|
|
66
310
|
// PROOF NODE (Explainable AI - No Hallucination)
|
|
67
311
|
// ============================================================================
|
|
@@ -1627,10 +1871,14 @@ module.exports = {
|
|
|
1627
1871
|
// Main Agent
|
|
1628
1872
|
HyperMindAgent,
|
|
1629
1873
|
|
|
1630
|
-
// Builder Pattern
|
|
1874
|
+
// Builder Pattern (v0.6.5+) - Fluent Agent Composition
|
|
1631
1875
|
AgentBuilder,
|
|
1632
1876
|
ComposedAgent,
|
|
1633
1877
|
|
|
1878
|
+
// LLM Planning (v0.6.7+) - Natural Language to Typed Tools
|
|
1879
|
+
LLMPlanner,
|
|
1880
|
+
TOOL_REGISTRY,
|
|
1881
|
+
|
|
1634
1882
|
// Supporting Classes
|
|
1635
1883
|
MemoryManager,
|
|
1636
1884
|
DatalogRuleSet,
|
package/index.js
CHANGED
|
@@ -64,6 +64,11 @@ const {
|
|
|
64
64
|
// Builder Pattern (v0.6.5+) - Fluent Agent Composition
|
|
65
65
|
AgentBuilder,
|
|
66
66
|
ComposedAgent,
|
|
67
|
+
// LLM Planning (v0.6.7+) - Natural Language to Typed Tools
|
|
68
|
+
LLMPlanner,
|
|
69
|
+
TOOL_REGISTRY,
|
|
70
|
+
// Type System (v0.6.7+)
|
|
71
|
+
TypeId,
|
|
67
72
|
// Memory Layer (v0.5.13+) - GraphDB-Powered Agent Memory
|
|
68
73
|
AgentState,
|
|
69
74
|
AgentRuntime,
|
|
@@ -76,6 +81,8 @@ const {
|
|
|
76
81
|
GovernanceEngine,
|
|
77
82
|
// Scope Layer (v0.5.13+)
|
|
78
83
|
AgentScope,
|
|
84
|
+
// Sandbox Layer (v0.6.7+)
|
|
85
|
+
WasmSandbox,
|
|
79
86
|
} = require('./hypermind-agent')
|
|
80
87
|
|
|
81
88
|
module.exports = {
|
|
@@ -109,6 +116,11 @@ module.exports = {
|
|
|
109
116
|
// Builder Pattern (v0.6.5+) - Fluent Agent Composition
|
|
110
117
|
AgentBuilder,
|
|
111
118
|
ComposedAgent,
|
|
119
|
+
// LLM Planning (v0.6.7+) - Natural Language to Typed Tools
|
|
120
|
+
LLMPlanner,
|
|
121
|
+
TOOL_REGISTRY,
|
|
122
|
+
// Type System (v0.6.7+)
|
|
123
|
+
TypeId,
|
|
112
124
|
// Memory Layer (v0.5.13+) - GraphDB-Powered Agent Memory
|
|
113
125
|
AgentState,
|
|
114
126
|
AgentRuntime,
|
|
@@ -121,4 +133,6 @@ module.exports = {
|
|
|
121
133
|
GovernanceEngine,
|
|
122
134
|
// Scope Layer (v0.5.13+)
|
|
123
135
|
AgentScope,
|
|
136
|
+
// Sandbox Layer (v0.6.7+)
|
|
137
|
+
WasmSandbox,
|
|
124
138
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rust-kgdb",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.7",
|
|
4
4
|
"description": "Production-grade Neuro-Symbolic AI Framework with Memory Hypergraph: +86.4% accuracy improvement over vanilla LLMs. High-performance knowledge graph (2.78µs lookups, 35x faster than RDFox). Features Memory Hypergraph (temporal scoring, rolling context window, idempotent responses), fraud detection, underwriting agents, WASM sandbox, type/category/proof theory, and W3C SPARQL 1.1 compliance.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|