@claude-flow/plugin-hyperbolic-reasoning 3.0.0-alpha.1
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 +318 -0
- package/dist/bridges/gnn-bridge.d.ts +127 -0
- package/dist/bridges/gnn-bridge.d.ts.map +1 -0
- package/dist/bridges/gnn-bridge.js +423 -0
- package/dist/bridges/gnn-bridge.js.map +1 -0
- package/dist/bridges/hyperbolic-bridge.d.ts +73 -0
- package/dist/bridges/hyperbolic-bridge.d.ts.map +1 -0
- package/dist/bridges/hyperbolic-bridge.js +451 -0
- package/dist/bridges/hyperbolic-bridge.js.map +1 -0
- package/dist/bridges/index.d.ts +10 -0
- package/dist/bridges/index.d.ts.map +1 -0
- package/dist/bridges/index.js +8 -0
- package/dist/bridges/index.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-tools.d.ts +34 -0
- package/dist/mcp-tools.d.ts.map +1 -0
- package/dist/mcp-tools.js +740 -0
- package/dist/mcp-tools.js.map +1 -0
- package/dist/types.d.ts +1013 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +199 -0
- package/dist/types.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GNN Bridge - Graph Neural Network Operations
|
|
3
|
+
*
|
|
4
|
+
* Bridge to @ruvector/gnn-wasm for graph-based reasoning,
|
|
5
|
+
* node classification, link prediction, and graph embeddings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default GNN configuration
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_GNN_CONFIG = {
|
|
11
|
+
inputDim: 128,
|
|
12
|
+
hiddenDim: 256,
|
|
13
|
+
outputDim: 128,
|
|
14
|
+
numLayers: 3,
|
|
15
|
+
aggregation: 'mean',
|
|
16
|
+
dropout: 0.1,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Graph Neural Network Bridge
|
|
20
|
+
*/
|
|
21
|
+
export class GnnBridge {
|
|
22
|
+
name = 'hyperbolic-gnn-bridge';
|
|
23
|
+
version = '0.1.0';
|
|
24
|
+
_status = 'unloaded';
|
|
25
|
+
_module = null;
|
|
26
|
+
_config;
|
|
27
|
+
constructor(config = {}) {
|
|
28
|
+
this._config = { ...DEFAULT_GNN_CONFIG, ...config };
|
|
29
|
+
}
|
|
30
|
+
get status() {
|
|
31
|
+
return this._status;
|
|
32
|
+
}
|
|
33
|
+
get initialized() {
|
|
34
|
+
return this._status === 'ready';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Initialize the WASM module
|
|
38
|
+
*/
|
|
39
|
+
async initialize() {
|
|
40
|
+
if (this._status === 'ready')
|
|
41
|
+
return;
|
|
42
|
+
if (this._status === 'loading')
|
|
43
|
+
return;
|
|
44
|
+
this._status = 'loading';
|
|
45
|
+
try {
|
|
46
|
+
// Dynamic import - module may not be installed
|
|
47
|
+
const wasmModule = await import(/* webpackIgnore: true */ '@ruvector/gnn-wasm').catch(() => null);
|
|
48
|
+
if (wasmModule) {
|
|
49
|
+
this._module = wasmModule;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this._module = this.createMockModule();
|
|
53
|
+
}
|
|
54
|
+
this._status = 'ready';
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
this._status = 'error';
|
|
58
|
+
throw new Error(`Failed to initialize GnnBridge: ${error instanceof Error ? error.message : String(error)}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Dispose of resources
|
|
63
|
+
*/
|
|
64
|
+
async dispose() {
|
|
65
|
+
this._module = null;
|
|
66
|
+
this._status = 'unloaded';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Forward pass through GNN
|
|
70
|
+
*/
|
|
71
|
+
forward(graph, config = {}) {
|
|
72
|
+
if (!this._module) {
|
|
73
|
+
throw new Error('GnnBridge not initialized');
|
|
74
|
+
}
|
|
75
|
+
const mergedConfig = { ...this._config, ...config };
|
|
76
|
+
// Message passing layers
|
|
77
|
+
let embeddings = graph.nodeFeatures.map(f => new Float32Array(f));
|
|
78
|
+
for (let layer = 0; layer < mergedConfig.numLayers; layer++) {
|
|
79
|
+
const newEmbeddings = embeddings.map(emb => new Float32Array(mergedConfig.hiddenDim).fill(0));
|
|
80
|
+
// Aggregate neighbor messages
|
|
81
|
+
for (const [src, tgt] of graph.edges) {
|
|
82
|
+
const srcEmb = embeddings[src];
|
|
83
|
+
const weight = graph.edgeWeights?.[graph.edges.indexOf([src, tgt])] ?? 1;
|
|
84
|
+
if (srcEmb) {
|
|
85
|
+
for (let i = 0; i < Math.min(srcEmb.length, mergedConfig.hiddenDim); i++) {
|
|
86
|
+
newEmbeddings[tgt][i] += srcEmb[i] * weight;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Normalize based on aggregation type
|
|
91
|
+
const degrees = new Array(graph.nodeFeatures.length).fill(0);
|
|
92
|
+
for (const [, tgt] of graph.edges) {
|
|
93
|
+
degrees[tgt]++;
|
|
94
|
+
}
|
|
95
|
+
for (let i = 0; i < newEmbeddings.length; i++) {
|
|
96
|
+
if (mergedConfig.aggregation === 'mean' && degrees[i] > 0) {
|
|
97
|
+
for (let j = 0; j < newEmbeddings[i].length; j++) {
|
|
98
|
+
newEmbeddings[i][j] /= degrees[i];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Add self-loop
|
|
102
|
+
for (let j = 0; j < Math.min(embeddings[i].length, mergedConfig.hiddenDim); j++) {
|
|
103
|
+
newEmbeddings[i][j] += embeddings[i][j];
|
|
104
|
+
}
|
|
105
|
+
// ReLU activation
|
|
106
|
+
for (let j = 0; j < newEmbeddings[i].length; j++) {
|
|
107
|
+
newEmbeddings[i][j] = Math.max(0, newEmbeddings[i][j]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
embeddings = newEmbeddings;
|
|
111
|
+
}
|
|
112
|
+
// Compute graph-level embedding via readout
|
|
113
|
+
const graphEmbedding = new Float32Array(mergedConfig.outputDim).fill(0);
|
|
114
|
+
for (const emb of embeddings) {
|
|
115
|
+
for (let i = 0; i < Math.min(emb.length, mergedConfig.outputDim); i++) {
|
|
116
|
+
graphEmbedding[i] += emb[i] / embeddings.length;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
nodeEmbeddings: embeddings,
|
|
121
|
+
graphEmbedding,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Predict links between nodes
|
|
126
|
+
*/
|
|
127
|
+
predictLinks(graph, sourceNodes, targetNodes) {
|
|
128
|
+
const result = this.forward(graph);
|
|
129
|
+
const predictions = new Float32Array(sourceNodes.length);
|
|
130
|
+
for (let i = 0; i < sourceNodes.length; i++) {
|
|
131
|
+
const srcEmb = result.nodeEmbeddings[sourceNodes[i]];
|
|
132
|
+
const tgtEmb = result.nodeEmbeddings[targetNodes[i]];
|
|
133
|
+
if (srcEmb && tgtEmb) {
|
|
134
|
+
// Dot product similarity
|
|
135
|
+
let dot = 0;
|
|
136
|
+
for (let j = 0; j < Math.min(srcEmb.length, tgtEmb.length); j++) {
|
|
137
|
+
dot += srcEmb[j] * tgtEmb[j];
|
|
138
|
+
}
|
|
139
|
+
predictions[i] = 1 / (1 + Math.exp(-dot)); // Sigmoid
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return predictions;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Build entailment graph from concepts using GNN
|
|
146
|
+
*/
|
|
147
|
+
async buildEntailmentGraph(concepts, threshold = 0.7) {
|
|
148
|
+
// Create initial embeddings from concept text
|
|
149
|
+
const nodeFeatures = concepts.map(c => {
|
|
150
|
+
const emb = new Float32Array(this._config.inputDim);
|
|
151
|
+
// Simple text embedding via character hashing
|
|
152
|
+
for (let i = 0; i < c.text.length; i++) {
|
|
153
|
+
const idx = c.text.charCodeAt(i) % this._config.inputDim;
|
|
154
|
+
emb[idx] += 1;
|
|
155
|
+
}
|
|
156
|
+
// Normalize
|
|
157
|
+
const norm = Math.sqrt(emb.reduce((s, v) => s + v * v, 0));
|
|
158
|
+
for (let i = 0; i < emb.length; i++) {
|
|
159
|
+
emb[i] /= norm + 1e-10;
|
|
160
|
+
}
|
|
161
|
+
return emb;
|
|
162
|
+
});
|
|
163
|
+
// Initial fully connected graph for message passing
|
|
164
|
+
const edges = [];
|
|
165
|
+
for (let i = 0; i < concepts.length; i++) {
|
|
166
|
+
for (let j = 0; j < concepts.length; j++) {
|
|
167
|
+
if (i !== j) {
|
|
168
|
+
edges.push([i, j]);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const graph = {
|
|
173
|
+
nodeFeatures,
|
|
174
|
+
edges,
|
|
175
|
+
};
|
|
176
|
+
// Get embeddings
|
|
177
|
+
const result = this.forward(graph);
|
|
178
|
+
// Predict entailment relations
|
|
179
|
+
const relations = [];
|
|
180
|
+
for (let i = 0; i < concepts.length; i++) {
|
|
181
|
+
for (let j = 0; j < concepts.length; j++) {
|
|
182
|
+
if (i === j)
|
|
183
|
+
continue;
|
|
184
|
+
const srcEmb = result.nodeEmbeddings[i];
|
|
185
|
+
const tgtEmb = result.nodeEmbeddings[j];
|
|
186
|
+
// Asymmetric entailment score
|
|
187
|
+
const entailmentScore = this.computeEntailmentScore(srcEmb, tgtEmb);
|
|
188
|
+
if (entailmentScore.entailmentProb > threshold) {
|
|
189
|
+
relations.push({
|
|
190
|
+
premise: concepts[i].id,
|
|
191
|
+
hypothesis: concepts[j].id,
|
|
192
|
+
confidence: entailmentScore.entailmentProb,
|
|
193
|
+
type: 'entails',
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
else if (entailmentScore.contradictionProb > threshold) {
|
|
197
|
+
relations.push({
|
|
198
|
+
premise: concepts[i].id,
|
|
199
|
+
hypothesis: concepts[j].id,
|
|
200
|
+
confidence: entailmentScore.contradictionProb,
|
|
201
|
+
type: 'contradicts',
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Compute graph statistics
|
|
207
|
+
const nodeCount = concepts.length;
|
|
208
|
+
const edgeCount = relations.length;
|
|
209
|
+
const maxPossibleEdges = nodeCount * (nodeCount - 1);
|
|
210
|
+
const density = maxPossibleEdges > 0 ? edgeCount / maxPossibleEdges : 0;
|
|
211
|
+
// Compute max depth via BFS from each node
|
|
212
|
+
let maxDepth = 0;
|
|
213
|
+
for (const concept of concepts) {
|
|
214
|
+
const depth = this.computeMaxDepth(concept.id, relations, new Set());
|
|
215
|
+
maxDepth = Math.max(maxDepth, depth);
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
concepts: concepts,
|
|
219
|
+
relations,
|
|
220
|
+
transitiveClosure: false,
|
|
221
|
+
stats: {
|
|
222
|
+
nodeCount,
|
|
223
|
+
edgeCount,
|
|
224
|
+
density,
|
|
225
|
+
maxDepth,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Predict entailment between two concepts
|
|
231
|
+
*/
|
|
232
|
+
predictEntailment(premiseEmb, hypothesisEmb) {
|
|
233
|
+
const score = this.computeEntailmentScore(premiseEmb, hypothesisEmb);
|
|
234
|
+
let relation;
|
|
235
|
+
if (score.entailmentProb > score.contradictionProb && score.entailmentProb > score.neutralProb) {
|
|
236
|
+
relation = 'entails';
|
|
237
|
+
}
|
|
238
|
+
else if (score.contradictionProb > score.neutralProb) {
|
|
239
|
+
relation = 'contradicts';
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
relation = 'neutral';
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
premise: '',
|
|
246
|
+
hypothesis: '',
|
|
247
|
+
entailmentProb: score.entailmentProb,
|
|
248
|
+
contradictionProb: score.contradictionProb,
|
|
249
|
+
neutralProb: score.neutralProb,
|
|
250
|
+
relation,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Compute transitive closure of entailment graph
|
|
255
|
+
*/
|
|
256
|
+
computeTransitiveClosure(graph) {
|
|
257
|
+
const relations = [...graph.relations];
|
|
258
|
+
const conceptIds = new Set(graph.concepts.map(c => c.id));
|
|
259
|
+
// Floyd-Warshall style transitive closure
|
|
260
|
+
let changed = true;
|
|
261
|
+
while (changed) {
|
|
262
|
+
changed = false;
|
|
263
|
+
for (const r1 of relations) {
|
|
264
|
+
for (const r2 of relations) {
|
|
265
|
+
if (r1.hypothesis === r2.premise && r1.type === 'entails' && r2.type === 'entails') {
|
|
266
|
+
// Check if transitive relation exists
|
|
267
|
+
const exists = relations.some(r => r.premise === r1.premise && r.hypothesis === r2.hypothesis);
|
|
268
|
+
if (!exists && conceptIds.has(r1.premise) && conceptIds.has(r2.hypothesis)) {
|
|
269
|
+
relations.push({
|
|
270
|
+
premise: r1.premise,
|
|
271
|
+
hypothesis: r2.hypothesis,
|
|
272
|
+
confidence: r1.confidence * r2.confidence,
|
|
273
|
+
type: 'entails',
|
|
274
|
+
});
|
|
275
|
+
changed = true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
...graph,
|
|
283
|
+
relations,
|
|
284
|
+
transitiveClosure: true,
|
|
285
|
+
stats: {
|
|
286
|
+
...graph.stats,
|
|
287
|
+
edgeCount: relations.length,
|
|
288
|
+
density: relations.length / (graph.concepts.length * (graph.concepts.length - 1)),
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Prune entailment graph using transitive reduction
|
|
294
|
+
*/
|
|
295
|
+
transitiveReduction(graph) {
|
|
296
|
+
const relations = [...graph.relations];
|
|
297
|
+
const toRemove = new Set();
|
|
298
|
+
// For each edge, check if it can be inferred transitively
|
|
299
|
+
for (let i = 0; i < relations.length; i++) {
|
|
300
|
+
const r = relations[i];
|
|
301
|
+
if (r.type !== 'entails')
|
|
302
|
+
continue;
|
|
303
|
+
// Check if there's an indirect path
|
|
304
|
+
const visited = new Set();
|
|
305
|
+
const hasIndirectPath = (current, target) => {
|
|
306
|
+
if (current === target)
|
|
307
|
+
return true;
|
|
308
|
+
if (visited.has(current))
|
|
309
|
+
return false;
|
|
310
|
+
visited.add(current);
|
|
311
|
+
for (let j = 0; j < relations.length; j++) {
|
|
312
|
+
if (i === j)
|
|
313
|
+
continue;
|
|
314
|
+
const other = relations[j];
|
|
315
|
+
if (other.type !== 'entails')
|
|
316
|
+
continue;
|
|
317
|
+
if (other.premise === current && other.hypothesis !== target) {
|
|
318
|
+
if (hasIndirectPath(other.hypothesis, target)) {
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return false;
|
|
324
|
+
};
|
|
325
|
+
// Check if there's a path from premise to hypothesis not using this edge
|
|
326
|
+
visited.clear();
|
|
327
|
+
for (let j = 0; j < relations.length; j++) {
|
|
328
|
+
if (i === j)
|
|
329
|
+
continue;
|
|
330
|
+
const other = relations[j];
|
|
331
|
+
if (other.type !== 'entails')
|
|
332
|
+
continue;
|
|
333
|
+
if (other.premise === r.premise && hasIndirectPath(other.hypothesis, r.hypothesis)) {
|
|
334
|
+
toRemove.add(i);
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
const prunedRelations = relations.filter((_, i) => !toRemove.has(i));
|
|
340
|
+
return {
|
|
341
|
+
...graph,
|
|
342
|
+
relations: prunedRelations,
|
|
343
|
+
stats: {
|
|
344
|
+
...graph.stats,
|
|
345
|
+
edgeCount: prunedRelations.length,
|
|
346
|
+
density: prunedRelations.length / (graph.concepts.length * (graph.concepts.length - 1)),
|
|
347
|
+
},
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
// ============================================================================
|
|
351
|
+
// Private Helper Methods
|
|
352
|
+
// ============================================================================
|
|
353
|
+
computeEntailmentScore(premiseEmb, hypothesisEmb) {
|
|
354
|
+
// Asymmetric entailment using inclusion heuristic
|
|
355
|
+
// Premise should "include" hypothesis for entailment
|
|
356
|
+
// Compute norms
|
|
357
|
+
const normP = Math.sqrt(premiseEmb.reduce((s, v) => s + v * v, 0));
|
|
358
|
+
const normH = Math.sqrt(hypothesisEmb.reduce((s, v) => s + v * v, 0));
|
|
359
|
+
// Dot product
|
|
360
|
+
let dot = 0;
|
|
361
|
+
for (let i = 0; i < Math.min(premiseEmb.length, hypothesisEmb.length); i++) {
|
|
362
|
+
dot += premiseEmb[i] * hypothesisEmb[i];
|
|
363
|
+
}
|
|
364
|
+
const cosine = dot / (normP * normH + 1e-10);
|
|
365
|
+
// Asymmetric features
|
|
366
|
+
const normRatio = normH / (normP + 1e-10);
|
|
367
|
+
// Difference features
|
|
368
|
+
let diffNorm = 0;
|
|
369
|
+
for (let i = 0; i < Math.min(premiseEmb.length, hypothesisEmb.length); i++) {
|
|
370
|
+
diffNorm += Math.pow(premiseEmb[i] - hypothesisEmb[i], 2);
|
|
371
|
+
}
|
|
372
|
+
diffNorm = Math.sqrt(diffNorm);
|
|
373
|
+
// Simple scoring model
|
|
374
|
+
const entailmentScore = (1 + cosine) / 2 * (1 - normRatio * 0.5);
|
|
375
|
+
const contradictionScore = (1 - cosine) / 2 * (diffNorm > 1 ? 0.8 : 0.2);
|
|
376
|
+
const neutralScore = 1 - entailmentScore - contradictionScore;
|
|
377
|
+
// Softmax normalization
|
|
378
|
+
const maxScore = Math.max(entailmentScore, contradictionScore, neutralScore);
|
|
379
|
+
const expE = Math.exp(entailmentScore - maxScore);
|
|
380
|
+
const expC = Math.exp(contradictionScore - maxScore);
|
|
381
|
+
const expN = Math.exp(neutralScore - maxScore);
|
|
382
|
+
const sumExp = expE + expC + expN;
|
|
383
|
+
return {
|
|
384
|
+
entailmentProb: expE / sumExp,
|
|
385
|
+
contradictionProb: expC / sumExp,
|
|
386
|
+
neutralProb: expN / sumExp,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
computeMaxDepth(nodeId, relations, visited) {
|
|
390
|
+
if (visited.has(nodeId))
|
|
391
|
+
return 0;
|
|
392
|
+
visited.add(nodeId);
|
|
393
|
+
let maxChildDepth = 0;
|
|
394
|
+
for (const r of relations) {
|
|
395
|
+
if (r.premise === nodeId && r.type === 'entails') {
|
|
396
|
+
const childDepth = this.computeMaxDepth(r.hypothesis, relations, visited);
|
|
397
|
+
maxChildDepth = Math.max(maxChildDepth, childDepth + 1);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
visited.delete(nodeId);
|
|
401
|
+
return maxChildDepth;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Create mock module for development
|
|
405
|
+
*/
|
|
406
|
+
createMockModule() {
|
|
407
|
+
return {
|
|
408
|
+
forward: () => new Float32Array(0),
|
|
409
|
+
node_classification: () => new Float32Array(0),
|
|
410
|
+
link_prediction: () => new Float32Array(0),
|
|
411
|
+
alloc: () => 0,
|
|
412
|
+
dealloc: () => undefined,
|
|
413
|
+
memory: new WebAssembly.Memory({ initial: 1 }),
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Create a new GnnBridge instance
|
|
419
|
+
*/
|
|
420
|
+
export function createGnnBridge(config) {
|
|
421
|
+
return new GnnBridge(config);
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=gnn-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gnn-bridge.js","sourceRoot":"","sources":["../../src/bridges/gnn-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hyperbolic Bridge - Poincare Ball and Lorentz Model Operations
|
|
3
|
+
*
|
|
4
|
+
* Bridge to @ruvector/hyperbolic-hnsw-wasm for hyperbolic geometry operations
|
|
5
|
+
* including embeddings, distance computation, and hierarchical search.
|
|
6
|
+
*/
|
|
7
|
+
import type { HyperbolicPoint, Hierarchy, EmbeddedHierarchy, SearchResult, EmbedHierarchyInput } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* WASM module status
|
|
10
|
+
*/
|
|
11
|
+
export type WasmModuleStatus = 'unloaded' | 'loading' | 'ready' | 'error';
|
|
12
|
+
/**
|
|
13
|
+
* Hyperbolic Embeddings Bridge
|
|
14
|
+
*/
|
|
15
|
+
export declare class HyperbolicBridge {
|
|
16
|
+
readonly name = "hyperbolic-reasoning-bridge";
|
|
17
|
+
readonly version = "0.1.0";
|
|
18
|
+
private _status;
|
|
19
|
+
private _module;
|
|
20
|
+
private _indices;
|
|
21
|
+
get status(): WasmModuleStatus;
|
|
22
|
+
get initialized(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Initialize the WASM module
|
|
25
|
+
*/
|
|
26
|
+
initialize(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Dispose of resources
|
|
29
|
+
*/
|
|
30
|
+
dispose(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Embed a hierarchy into hyperbolic space
|
|
33
|
+
*/
|
|
34
|
+
embedHierarchy(hierarchy: Hierarchy, config?: Partial<EmbedHierarchyInput['parameters']>): Promise<EmbeddedHierarchy>;
|
|
35
|
+
/**
|
|
36
|
+
* Compute hyperbolic distance between two points
|
|
37
|
+
*/
|
|
38
|
+
distance(a: HyperbolicPoint, b: HyperbolicPoint): number;
|
|
39
|
+
/**
|
|
40
|
+
* Check if one point is ancestor of another (closer to origin)
|
|
41
|
+
*/
|
|
42
|
+
isAncestor(parent: HyperbolicPoint, child: HyperbolicPoint, threshold?: number): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Get hierarchy depth from hyperbolic point
|
|
45
|
+
*/
|
|
46
|
+
hierarchyDepth(point: HyperbolicPoint): number;
|
|
47
|
+
/**
|
|
48
|
+
* Create or get an index
|
|
49
|
+
*/
|
|
50
|
+
createIndex(id: string, dimension: number, curvature: number): void;
|
|
51
|
+
/**
|
|
52
|
+
* Add point to index
|
|
53
|
+
*/
|
|
54
|
+
addToIndex(indexId: string, nodeId: string, point: HyperbolicPoint): void;
|
|
55
|
+
/**
|
|
56
|
+
* Search in hyperbolic space
|
|
57
|
+
*/
|
|
58
|
+
search(query: HyperbolicPoint, indexId: string, k: number, mode?: 'nearest' | 'subtree' | 'ancestors' | 'siblings' | 'cone'): Promise<SearchResult>;
|
|
59
|
+
private validateHierarchy;
|
|
60
|
+
private computeDistanceGradient;
|
|
61
|
+
private estimateCurvatureGradient;
|
|
62
|
+
private computeEmbeddingMetrics;
|
|
63
|
+
private inCone;
|
|
64
|
+
/**
|
|
65
|
+
* Create mock module for development
|
|
66
|
+
*/
|
|
67
|
+
private createMockModule;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a new HyperbolicBridge instance
|
|
71
|
+
*/
|
|
72
|
+
export declare function createHyperbolicBridge(): HyperbolicBridge;
|
|
73
|
+
//# sourceMappingURL=hyperbolic-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperbolic-bridge.d.ts","sourceRoot":"","sources":["../../src/bridges/hyperbolic-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EAEf,SAAS,EAET,iBAAiB,EACjB,YAAY,EAEZ,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAUrB;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAsD1E;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,iCAAiC;IAC9C,QAAQ,CAAC,OAAO,WAAW;IAE3B,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,QAAQ,CAA2C;IAE3D,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,SAAS,EACpB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAM,GACtD,OAAO,CAAC,iBAAiB,CAAC;IAmI7B;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,MAAM;IAOxD;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,SAAM,GAAG,OAAO;IAMrF;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM;IAK9C;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAanE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IASzE;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,CAAC,EAAE,MAAM,EACT,IAAI,GAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAkB,GAC1E,OAAO,CAAC,YAAY,CAAC;IA+DxB,OAAO,CAAC,iBAAiB;IAkEzB,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,uBAAuB;IAoD/B,OAAO,CAAC,MAAM;IAcd;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAqBzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|