agentic-flow 3.5.0 → 3.5.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/CHANGELOG.md +10 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/config/claudeFlow.d.ts +1 -1
- package/dist/core/attention-native.d.ts +45 -28
- package/dist/core/attention-native.d.ts.map +1 -1
- package/dist/core/attention-native.js +131 -84
- package/dist/core/attention-native.js.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
- package/dist/mcp/claudeFlowSdkServer.js +2 -1
- package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +2 -1
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
- package/dist/mcp/fastmcp/servers/http-sse.d.ts.map +1 -1
- package/dist/mcp/fastmcp/servers/http-sse.js +2 -1
- package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js +2 -1
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
- package/dist/mcp/fastmcp/servers/stdio-full.js +2 -1
- package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
- package/dist/mcp/standalone-stdio.js +2 -1
- package/dist/mcp/standalone-stdio.js.map +1 -1
- package/dist/optimizations/configuration-tuning.d.ts +1 -1
- package/dist/utils/package-version.d.ts +2 -0
- package/dist/utils/package-version.d.ts.map +1 -1
- package/dist/utils/package-version.js +4 -0
- package/dist/utils/package-version.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/agentdb-wrapper.d.ts +0 -149
- package/dist/core/agentdb-wrapper.d.ts.map +0 -1
- package/dist/core/agentdb-wrapper.js +0 -394
- package/dist/core/agentdb-wrapper.js.map +0 -1
|
@@ -26,7 +26,7 @@ export declare function getMemoryConfig(agentName?: string): {
|
|
|
26
26
|
* Initialize swarm coordination for multi-agent tasks
|
|
27
27
|
*/
|
|
28
28
|
export declare function getSwarmConfig(topology?: ClaudeFlowConfig['coordinationTopology']): {
|
|
29
|
-
topology: "
|
|
29
|
+
topology: "hierarchical" | "mesh" | "ring" | "star";
|
|
30
30
|
maxAgents: number;
|
|
31
31
|
strategy: "balanced";
|
|
32
32
|
};
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Native Attention Wrappers
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes
|
|
5
|
+
* `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`
|
|
6
|
+
* and returns one Float32Array; the constructors take positional sizes
|
|
7
|
+
* (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).
|
|
6
8
|
*
|
|
7
|
-
* Note: @ruvector/attention is optional -
|
|
9
|
+
* Note: @ruvector/attention is optional - the classes throw a clear error
|
|
10
|
+
* when it is missing; use attention-fallbacks.ts for the JS versions.
|
|
8
11
|
*/
|
|
9
12
|
declare let attentionAvailable: boolean;
|
|
10
13
|
export { attentionAvailable };
|
|
@@ -13,12 +16,16 @@ export interface AttentionConfig {
|
|
|
13
16
|
numHeads?: number;
|
|
14
17
|
dropoutRate?: number;
|
|
15
18
|
useFlash?: boolean;
|
|
19
|
+
/** FlashAttention tile size (default 64) */
|
|
20
|
+
blockSize?: number;
|
|
21
|
+
/** LinearAttention random-feature count (default hiddenDim) */
|
|
22
|
+
numFeatures?: number;
|
|
23
|
+
/** HyperbolicAttention curvature (default 1.0) */
|
|
24
|
+
curvature?: number;
|
|
16
25
|
}
|
|
26
|
+
type Vec = number[] | Float32Array;
|
|
17
27
|
/**
|
|
18
|
-
* Native Multi-Head Attention
|
|
19
|
-
*
|
|
20
|
-
* This wrapper properly converts between JavaScript arrays and TypedArrays
|
|
21
|
-
* required by the native Rust implementation.
|
|
28
|
+
* Native Multi-Head Attention: one query attends over key/value rows.
|
|
22
29
|
*/
|
|
23
30
|
export declare class MultiHeadAttention {
|
|
24
31
|
private nativeInstance;
|
|
@@ -26,73 +33,83 @@ export declare class MultiHeadAttention {
|
|
|
26
33
|
private numHeads;
|
|
27
34
|
constructor(config: AttentionConfig);
|
|
28
35
|
/**
|
|
29
|
-
*
|
|
36
|
+
* @param query - one vector of hiddenDim
|
|
37
|
+
* @param key - one key vector or a list of key rows
|
|
38
|
+
* @param value - one value vector or a list of value rows (same count as keys)
|
|
39
|
+
* @param mask - optional per-key mask (0 drops the key)
|
|
30
40
|
*/
|
|
31
|
-
forward(query:
|
|
41
|
+
forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], mask?: Vec): {
|
|
32
42
|
output: number[];
|
|
33
43
|
attentionWeights: number[][];
|
|
34
44
|
};
|
|
35
|
-
/**
|
|
36
|
-
* Get dimensions
|
|
37
|
-
*/
|
|
38
45
|
get dim(): number;
|
|
39
46
|
get headDim(): number;
|
|
40
47
|
}
|
|
41
48
|
/**
|
|
42
|
-
* Native Flash Attention (
|
|
43
|
-
*
|
|
44
|
-
* Memory-efficient attention with tiling/chunking
|
|
49
|
+
* Native Flash Attention (tiled, memory-efficient)
|
|
45
50
|
*/
|
|
46
51
|
export declare class FlashAttention {
|
|
47
52
|
private nativeInstance;
|
|
48
53
|
private hiddenDim;
|
|
49
54
|
constructor(config: AttentionConfig);
|
|
50
55
|
/**
|
|
51
|
-
*
|
|
56
|
+
* @param query - query rows (or one query vector)
|
|
57
|
+
* @param key - key rows
|
|
58
|
+
* @param value - value rows
|
|
59
|
+
* @param _numHeads - unused (flash attention here is single-head)
|
|
52
60
|
*/
|
|
53
|
-
forward(query:
|
|
61
|
+
forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec, _numHeads?: number): {
|
|
54
62
|
output: number[][];
|
|
55
63
|
attentionScores: number[][];
|
|
56
64
|
};
|
|
57
65
|
}
|
|
58
66
|
/**
|
|
59
|
-
* Native Linear Attention (
|
|
60
|
-
*
|
|
61
|
-
* O(n) complexity approximation of attention
|
|
67
|
+
* Native Linear Attention: O(n) random-feature approximation
|
|
62
68
|
*/
|
|
63
69
|
export declare class LinearAttention {
|
|
64
70
|
private nativeInstance;
|
|
65
71
|
private hiddenDim;
|
|
66
72
|
constructor(config: AttentionConfig);
|
|
67
|
-
forward(query:
|
|
73
|
+
forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): {
|
|
68
74
|
output: number[][];
|
|
69
75
|
};
|
|
70
76
|
}
|
|
71
77
|
/**
|
|
72
|
-
* Native Hyperbolic Attention (
|
|
78
|
+
* Native Hyperbolic Attention (Poincare ball)
|
|
73
79
|
*/
|
|
74
80
|
export declare class HyperbolicAttention {
|
|
75
81
|
private nativeInstance;
|
|
76
82
|
private hiddenDim;
|
|
83
|
+
private curvature;
|
|
77
84
|
constructor(config: AttentionConfig);
|
|
78
|
-
|
|
85
|
+
/**
|
|
86
|
+
* @returns output, and `distance`: the hyperbolic distance from the query
|
|
87
|
+
* to its nearest key
|
|
88
|
+
*/
|
|
89
|
+
forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[]): {
|
|
79
90
|
output: number[];
|
|
80
91
|
distance: number;
|
|
81
92
|
};
|
|
82
93
|
}
|
|
83
94
|
/**
|
|
84
|
-
* Native MoE Attention
|
|
85
|
-
*
|
|
86
|
-
* Mixture of Experts with top-k routing
|
|
95
|
+
* Native MoE Attention: mixture of experts with top-k routing
|
|
87
96
|
*/
|
|
88
97
|
export declare class MoEAttention {
|
|
89
|
-
private
|
|
98
|
+
private instances;
|
|
90
99
|
private hiddenDim;
|
|
91
100
|
private numExperts;
|
|
101
|
+
private Ctor;
|
|
92
102
|
constructor(config: AttentionConfig & {
|
|
93
103
|
numExperts?: number;
|
|
104
|
+
topK?: number;
|
|
94
105
|
});
|
|
95
|
-
|
|
106
|
+
/** The native kernel fixes topK at construction; keep one per topK. */
|
|
107
|
+
private instance;
|
|
108
|
+
/**
|
|
109
|
+
* @returns output; `expertWeights` is empty (the native kernel does not
|
|
110
|
+
* expose its routing weights)
|
|
111
|
+
*/
|
|
112
|
+
forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], topK?: number): {
|
|
96
113
|
output: number[];
|
|
97
114
|
expertWeights: number[];
|
|
98
115
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention-native.d.ts","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attention-native.d.ts","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,41 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Native Attention Wrappers
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes
|
|
5
|
+
* `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`
|
|
6
|
+
* and returns one Float32Array; the constructors take positional sizes
|
|
7
|
+
* (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).
|
|
6
8
|
*
|
|
7
|
-
* Note: @ruvector/attention is optional -
|
|
9
|
+
* Note: @ruvector/attention is optional - the classes throw a clear error
|
|
10
|
+
* when it is missing; use attention-fallbacks.ts for the JS versions.
|
|
8
11
|
*/
|
|
9
12
|
let nativeAttention = null;
|
|
10
13
|
let attentionAvailable = false;
|
|
11
14
|
try {
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
const mod = await import('@ruvector/attention');
|
|
16
|
+
// The package is CommonJS; take the named exports, or the default object.
|
|
17
|
+
nativeAttention = mod?.MultiHeadAttention ? mod : mod?.default;
|
|
18
|
+
attentionAvailable = !!nativeAttention?.MultiHeadAttention;
|
|
14
19
|
}
|
|
15
20
|
catch {
|
|
16
21
|
console.warn('[attention-native] @ruvector/attention not available');
|
|
17
22
|
}
|
|
18
23
|
export { attentionAvailable };
|
|
19
|
-
/**
|
|
20
|
-
* Convert regular array to Float32Array if needed
|
|
21
|
-
*/
|
|
22
24
|
function toFloat32Array(input) {
|
|
23
|
-
|
|
24
|
-
return input;
|
|
25
|
-
}
|
|
26
|
-
return new Float32Array(input);
|
|
25
|
+
return input instanceof Float32Array ? input : new Float32Array(input);
|
|
27
26
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Convert Float32Array to regular array for JS compatibility
|
|
30
|
-
*/
|
|
31
27
|
function toArray(input) {
|
|
32
28
|
return Array.from(input);
|
|
33
29
|
}
|
|
30
|
+
/** One vector, or a list of vectors, as a list of Float32Array rows. */
|
|
31
|
+
function toRows(input) {
|
|
32
|
+
const list = input;
|
|
33
|
+
if (list.length > 0 && (Array.isArray(list[0]) || list[0] instanceof Float32Array)) {
|
|
34
|
+
return input.map(toFloat32Array);
|
|
35
|
+
}
|
|
36
|
+
return [toFloat32Array(input)];
|
|
37
|
+
}
|
|
38
|
+
function requireNative(name) {
|
|
39
|
+
const ctor = nativeAttention?.[name];
|
|
40
|
+
if (typeof ctor !== 'function') {
|
|
41
|
+
throw new Error(`Failed to initialize native ${name}: @ruvector/attention is not installed`);
|
|
42
|
+
}
|
|
43
|
+
return ctor;
|
|
44
|
+
}
|
|
45
|
+
function checkDim(dim, rows, what) {
|
|
46
|
+
for (const r of rows) {
|
|
47
|
+
if (r.length !== dim)
|
|
48
|
+
throw new Error(`${what} has dimension ${r.length}, expected ${dim}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
34
51
|
/**
|
|
35
|
-
* Native Multi-Head Attention
|
|
36
|
-
*
|
|
37
|
-
* This wrapper properly converts between JavaScript arrays and TypedArrays
|
|
38
|
-
* required by the native Rust implementation.
|
|
52
|
+
* Native Multi-Head Attention: one query attends over key/value rows.
|
|
39
53
|
*/
|
|
40
54
|
export class MultiHeadAttention {
|
|
41
55
|
nativeInstance;
|
|
@@ -44,39 +58,45 @@ export class MultiHeadAttention {
|
|
|
44
58
|
constructor(config) {
|
|
45
59
|
this.hiddenDim = config.hiddenDim;
|
|
46
60
|
this.numHeads = config.numHeads || 8;
|
|
61
|
+
const Ctor = requireNative('MultiHeadAttention');
|
|
47
62
|
try {
|
|
48
|
-
|
|
49
|
-
this.nativeInstance = new nativeAttention.MultiHeadAttention(this.hiddenDim, this.numHeads);
|
|
63
|
+
this.nativeInstance = new Ctor(this.hiddenDim, this.numHeads);
|
|
50
64
|
}
|
|
51
65
|
catch (error) {
|
|
52
66
|
throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);
|
|
53
67
|
}
|
|
54
68
|
}
|
|
55
69
|
/**
|
|
56
|
-
*
|
|
70
|
+
* @param query - one vector of hiddenDim
|
|
71
|
+
* @param key - one key vector or a list of key rows
|
|
72
|
+
* @param value - one value vector or a list of value rows (same count as keys)
|
|
73
|
+
* @param mask - optional per-key mask (0 drops the key)
|
|
57
74
|
*/
|
|
58
75
|
forward(query, key, value, mask) {
|
|
59
76
|
try {
|
|
60
|
-
// Convert to Float32Array for native code
|
|
61
77
|
const q = toFloat32Array(query);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
78
|
+
let k = toRows(key);
|
|
79
|
+
let v = toRows(value);
|
|
80
|
+
if (k.length !== v.length)
|
|
81
|
+
throw new Error(`${k.length} keys but ${v.length} values`);
|
|
82
|
+
if (mask) {
|
|
83
|
+
const keep = k.map((_, i) => mask[i] !== 0);
|
|
84
|
+
k = k.filter((_, i) => keep[i]);
|
|
85
|
+
v = v.filter((_, i) => keep[i]);
|
|
86
|
+
if (k.length === 0)
|
|
87
|
+
return { output: new Array(this.hiddenDim).fill(0), attentionWeights: [[]] };
|
|
88
|
+
}
|
|
89
|
+
checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
|
|
90
|
+
const result = this.nativeInstance.compute(q, k, v);
|
|
68
91
|
return {
|
|
69
92
|
output: toArray(result),
|
|
70
|
-
attentionWeights: [[]] //
|
|
93
|
+
attentionWeights: [[]], // the native kernel does not return weights
|
|
71
94
|
};
|
|
72
95
|
}
|
|
73
96
|
catch (error) {
|
|
74
97
|
throw new Error(`MultiHeadAttention forward failed: ${error.message}`);
|
|
75
98
|
}
|
|
76
99
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Get dimensions
|
|
79
|
-
*/
|
|
80
100
|
get dim() {
|
|
81
101
|
return this.nativeInstance.dim;
|
|
82
102
|
}
|
|
@@ -84,39 +104,41 @@ export class MultiHeadAttention {
|
|
|
84
104
|
return this.nativeInstance.headDim;
|
|
85
105
|
}
|
|
86
106
|
}
|
|
107
|
+
/** Shared batch form: every query row attends over the same key/value rows. */
|
|
108
|
+
function computeRows(instance, dim, query, key, value) {
|
|
109
|
+
const q = toRows(query);
|
|
110
|
+
const k = toRows(key);
|
|
111
|
+
const v = toRows(value);
|
|
112
|
+
if (k.length !== v.length)
|
|
113
|
+
throw new Error(`${k.length} keys but ${v.length} values`);
|
|
114
|
+
checkDim(dim, [...q, ...k, ...v], 'input');
|
|
115
|
+
return q.map((row) => toArray(instance.compute(row, k, v)));
|
|
116
|
+
}
|
|
87
117
|
/**
|
|
88
|
-
* Native Flash Attention (
|
|
89
|
-
*
|
|
90
|
-
* Memory-efficient attention with tiling/chunking
|
|
118
|
+
* Native Flash Attention (tiled, memory-efficient)
|
|
91
119
|
*/
|
|
92
120
|
export class FlashAttention {
|
|
93
121
|
nativeInstance;
|
|
94
122
|
hiddenDim;
|
|
95
123
|
constructor(config) {
|
|
96
124
|
this.hiddenDim = config.hiddenDim;
|
|
125
|
+
const Ctor = requireNative('FlashAttention');
|
|
97
126
|
try {
|
|
98
|
-
this.nativeInstance = new
|
|
127
|
+
this.nativeInstance = new Ctor(this.hiddenDim, config.blockSize ?? 64);
|
|
99
128
|
}
|
|
100
129
|
catch (error) {
|
|
101
130
|
throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);
|
|
102
131
|
}
|
|
103
132
|
}
|
|
104
133
|
/**
|
|
105
|
-
*
|
|
134
|
+
* @param query - query rows (or one query vector)
|
|
135
|
+
* @param key - key rows
|
|
136
|
+
* @param value - value rows
|
|
137
|
+
* @param _numHeads - unused (flash attention here is single-head)
|
|
106
138
|
*/
|
|
107
|
-
forward(query, key, value,
|
|
139
|
+
forward(query, key, value, _numHeads = 8) {
|
|
108
140
|
try {
|
|
109
|
-
|
|
110
|
-
const q = query.map(toFloat32Array);
|
|
111
|
-
const k = key.map(toFloat32Array);
|
|
112
|
-
const v = value.map(toFloat32Array);
|
|
113
|
-
// Call native compute
|
|
114
|
-
const result = this.nativeInstance.compute(q, k, v, numHeads);
|
|
115
|
-
// Convert result back
|
|
116
|
-
return {
|
|
117
|
-
output: result.map((r) => toArray(r)),
|
|
118
|
-
attentionScores: [[]]
|
|
119
|
-
};
|
|
141
|
+
return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value), attentionScores: [[]] };
|
|
120
142
|
}
|
|
121
143
|
catch (error) {
|
|
122
144
|
throw new Error(`FlashAttention forward failed: ${error.message}`);
|
|
@@ -124,19 +146,16 @@ export class FlashAttention {
|
|
|
124
146
|
}
|
|
125
147
|
}
|
|
126
148
|
/**
|
|
127
|
-
* Native Linear Attention (
|
|
128
|
-
*
|
|
129
|
-
* O(n) complexity approximation of attention
|
|
149
|
+
* Native Linear Attention: O(n) random-feature approximation
|
|
130
150
|
*/
|
|
131
151
|
export class LinearAttention {
|
|
132
152
|
nativeInstance;
|
|
133
153
|
hiddenDim;
|
|
134
154
|
constructor(config) {
|
|
135
155
|
this.hiddenDim = config.hiddenDim;
|
|
156
|
+
const Ctor = requireNative('LinearAttention');
|
|
136
157
|
try {
|
|
137
|
-
|
|
138
|
-
// We'll use hiddenDim for both since seqLen varies per forward call
|
|
139
|
-
this.nativeInstance = new nativeAttention.LinearAttention(this.hiddenDim, this.hiddenDim);
|
|
158
|
+
this.nativeInstance = new Ctor(this.hiddenDim, config.numFeatures ?? this.hiddenDim);
|
|
140
159
|
}
|
|
141
160
|
catch (error) {
|
|
142
161
|
throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);
|
|
@@ -144,44 +163,59 @@ export class LinearAttention {
|
|
|
144
163
|
}
|
|
145
164
|
forward(query, key, value) {
|
|
146
165
|
try {
|
|
147
|
-
|
|
148
|
-
const k = key.map(toFloat32Array);
|
|
149
|
-
const v = value.map(toFloat32Array);
|
|
150
|
-
const result = this.nativeInstance.compute(q, k, v);
|
|
151
|
-
return {
|
|
152
|
-
output: result.map((r) => toArray(r))
|
|
153
|
-
};
|
|
166
|
+
return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value) };
|
|
154
167
|
}
|
|
155
168
|
catch (error) {
|
|
156
169
|
throw new Error(`LinearAttention forward failed: ${error.message}`);
|
|
157
170
|
}
|
|
158
171
|
}
|
|
159
172
|
}
|
|
173
|
+
/** Poincare-ball distance for curvature c > 0. */
|
|
174
|
+
function poincareDistance(a, b, c) {
|
|
175
|
+
let diff = 0, na = 0, nb = 0;
|
|
176
|
+
for (let i = 0; i < a.length; i++) {
|
|
177
|
+
diff += (a[i] - b[i]) ** 2;
|
|
178
|
+
na += a[i] * a[i];
|
|
179
|
+
nb += b[i] * b[i];
|
|
180
|
+
}
|
|
181
|
+
const denom = (1 - c * na) * (1 - c * nb);
|
|
182
|
+
if (denom <= 0)
|
|
183
|
+
return Infinity; // a point on or outside the ball
|
|
184
|
+
return Math.acosh(1 + (2 * c * diff) / denom) / Math.sqrt(c);
|
|
185
|
+
}
|
|
160
186
|
/**
|
|
161
|
-
* Native Hyperbolic Attention (
|
|
187
|
+
* Native Hyperbolic Attention (Poincare ball)
|
|
162
188
|
*/
|
|
163
189
|
export class HyperbolicAttention {
|
|
164
190
|
nativeInstance;
|
|
165
191
|
hiddenDim;
|
|
192
|
+
curvature;
|
|
166
193
|
constructor(config) {
|
|
167
194
|
this.hiddenDim = config.hiddenDim;
|
|
195
|
+
this.curvature = config.curvature ?? 1.0;
|
|
196
|
+
const Ctor = requireNative('HyperbolicAttention');
|
|
168
197
|
try {
|
|
169
|
-
this.nativeInstance = new
|
|
198
|
+
this.nativeInstance = new Ctor(this.hiddenDim, this.curvature);
|
|
170
199
|
}
|
|
171
200
|
catch (error) {
|
|
172
201
|
throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);
|
|
173
202
|
}
|
|
174
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* @returns output, and `distance`: the hyperbolic distance from the query
|
|
206
|
+
* to its nearest key
|
|
207
|
+
*/
|
|
175
208
|
forward(query, key, value) {
|
|
176
209
|
try {
|
|
177
210
|
const q = toFloat32Array(query);
|
|
178
|
-
const k =
|
|
179
|
-
const v =
|
|
211
|
+
const k = toRows(key);
|
|
212
|
+
const v = toRows(value);
|
|
213
|
+
if (k.length !== v.length)
|
|
214
|
+
throw new Error(`${k.length} keys but ${v.length} values`);
|
|
215
|
+
checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
|
|
180
216
|
const result = this.nativeInstance.compute(q, k, v);
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
distance: result.distance
|
|
184
|
-
};
|
|
217
|
+
const distance = Math.min(...k.map((row) => poincareDistance(q, row, this.curvature)));
|
|
218
|
+
return { output: toArray(result), distance };
|
|
185
219
|
}
|
|
186
220
|
catch (error) {
|
|
187
221
|
throw new Error(`HyperbolicAttention forward failed: ${error.message}`);
|
|
@@ -189,35 +223,48 @@ export class HyperbolicAttention {
|
|
|
189
223
|
}
|
|
190
224
|
}
|
|
191
225
|
/**
|
|
192
|
-
* Native MoE Attention
|
|
193
|
-
*
|
|
194
|
-
* Mixture of Experts with top-k routing
|
|
226
|
+
* Native MoE Attention: mixture of experts with top-k routing
|
|
195
227
|
*/
|
|
196
228
|
export class MoEAttention {
|
|
197
|
-
|
|
229
|
+
instances = new Map();
|
|
198
230
|
hiddenDim;
|
|
199
231
|
numExperts;
|
|
232
|
+
Ctor;
|
|
200
233
|
constructor(config) {
|
|
201
234
|
this.hiddenDim = config.hiddenDim;
|
|
202
235
|
this.numExperts = config.numExperts || 4;
|
|
236
|
+
this.Ctor = requireNative('MoEAttention');
|
|
203
237
|
try {
|
|
204
|
-
|
|
205
|
-
this.nativeInstance = new nativeAttention.MoEAttention(this.hiddenDim);
|
|
238
|
+
this.instance(config.topK ?? 2);
|
|
206
239
|
}
|
|
207
240
|
catch (error) {
|
|
208
241
|
throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);
|
|
209
242
|
}
|
|
210
243
|
}
|
|
244
|
+
/** The native kernel fixes topK at construction; keep one per topK. */
|
|
245
|
+
instance(topK) {
|
|
246
|
+
const k = Math.max(1, Math.min(Math.floor(topK), this.numExperts));
|
|
247
|
+
let inst = this.instances.get(k);
|
|
248
|
+
if (!inst) {
|
|
249
|
+
inst = new this.Ctor({ dim: this.hiddenDim, numExperts: this.numExperts, topK: k });
|
|
250
|
+
this.instances.set(k, inst);
|
|
251
|
+
}
|
|
252
|
+
return inst;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* @returns output; `expertWeights` is empty (the native kernel does not
|
|
256
|
+
* expose its routing weights)
|
|
257
|
+
*/
|
|
211
258
|
forward(query, key, value, topK = 2) {
|
|
212
259
|
try {
|
|
213
260
|
const q = toFloat32Array(query);
|
|
214
|
-
const k =
|
|
215
|
-
const v =
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
};
|
|
261
|
+
const k = toRows(key);
|
|
262
|
+
const v = toRows(value);
|
|
263
|
+
if (k.length !== v.length)
|
|
264
|
+
throw new Error(`${k.length} keys but ${v.length} values`);
|
|
265
|
+
checkDim(this.hiddenDim, [q, ...k, ...v], 'input');
|
|
266
|
+
const result = this.instance(topK).compute(q, k, v);
|
|
267
|
+
return { output: toArray(result), expertWeights: [] };
|
|
221
268
|
}
|
|
222
269
|
catch (error) {
|
|
223
270
|
throw new Error(`MoEAttention forward failed: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attention-native.js","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Native Attention Wrappers\n *\n * Properly wraps @ruvector/attention native Rust implementations\n * with TypedArray conversions and proper error handling\n *\n * Note: @ruvector/attention is optional - falls back gracefully\n */\n\nlet nativeAttention: any = null;\nlet attentionAvailable = false;\n\ntry {\n nativeAttention = await import('@ruvector/attention');\n attentionAvailable = true;\n} catch {\n console.warn('[attention-native] @ruvector/attention not available');\n}\n\nexport { attentionAvailable };\n\nexport interface AttentionConfig {\n hiddenDim: number;\n numHeads?: number;\n dropoutRate?: number;\n useFlash?: boolean;\n}\n\n/**\n * Convert regular array to Float32Array if needed\n */\nfunction toFloat32Array(input: number[] | Float32Array): Float32Array {\n if (input instanceof Float32Array) {\n return input;\n }\n return new Float32Array(input);\n}\n\n/**\n * Convert Float32Array to regular array for JS compatibility\n */\nfunction toArray(input: Float32Array): number[] {\n return Array.from(input);\n}\n\n/**\n * Native Multi-Head Attention (uses Rust implementation)\n *\n * This wrapper properly converts between JavaScript arrays and TypedArrays\n * required by the native Rust implementation.\n */\nexport class MultiHeadAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numHeads: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.numHeads = config.numHeads || 8;\n\n try {\n // Create native Rust instance\n this.nativeInstance = new nativeAttention.MultiHeadAttention(\n this.hiddenDim,\n this.numHeads\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);\n }\n }\n\n /**\n * Forward pass using native Rust implementation\n */\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array,\n mask?: number[] | Float32Array\n ): { output: number[]; attentionWeights: number[][] } {\n try {\n // Convert to Float32Array for native code\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n const m = mask ? toFloat32Array(mask) : undefined;\n\n // Call native compute method\n const result = this.nativeInstance.compute(q, k, v, m);\n\n // Convert result back to regular arrays\n return {\n output: toArray(result),\n attentionWeights: [[]] // Native doesn't return weights separately\n };\n } catch (error: any) {\n throw new Error(`MultiHeadAttention forward failed: ${error.message}`);\n }\n }\n\n /**\n * Get dimensions\n */\n get dim(): number {\n return this.nativeInstance.dim;\n }\n\n get headDim(): number {\n return this.nativeInstance.headDim;\n }\n}\n\n/**\n * Native Flash Attention (uses Rust implementation)\n *\n * Memory-efficient attention with tiling/chunking\n */\nexport class FlashAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n this.nativeInstance = new nativeAttention.FlashAttention(this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);\n }\n }\n\n /**\n * Forward pass with batch support\n */\n forward(\n query: number[][] | Float32Array[],\n key: number[][] | Float32Array[],\n value: number[][] | Float32Array[],\n numHeads: number = 8\n ): { output: number[][]; attentionScores: number[][] } {\n try {\n // Convert batch to Float32Array\n const q = query.map(toFloat32Array);\n const k = key.map(toFloat32Array);\n const v = value.map(toFloat32Array);\n\n // Call native compute\n const result = this.nativeInstance.compute(q, k, v, numHeads);\n\n // Convert result back\n return {\n output: result.map((r: Float32Array) => toArray(r)),\n attentionScores: [[]]\n };\n } catch (error: any) {\n throw new Error(`FlashAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Linear Attention (uses Rust implementation)\n *\n * O(n) complexity approximation of attention\n */\nexport class LinearAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n // LinearAttention constructor: (hiddenDim, seqLen)\n // We'll use hiddenDim for both since seqLen varies per forward call\n this.nativeInstance = new nativeAttention.LinearAttention(\n this.hiddenDim,\n this.hiddenDim\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[][] | Float32Array[],\n key: number[][] | Float32Array[],\n value: number[][] | Float32Array[]\n ): { output: number[][] } {\n try {\n const q = query.map(toFloat32Array);\n const k = key.map(toFloat32Array);\n const v = value.map(toFloat32Array);\n\n const result = this.nativeInstance.compute(q, k, v);\n\n return {\n output: result.map((r: Float32Array) => toArray(r))\n };\n } catch (error: any) {\n throw new Error(`LinearAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Hyperbolic Attention (uses Rust implementation)\n */\nexport class HyperbolicAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n\n try {\n this.nativeInstance = new nativeAttention.HyperbolicAttention(this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array\n ): { output: number[]; distance: number } {\n try {\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n\n const result = this.nativeInstance.compute(q, k, v);\n\n return {\n output: toArray(result.output),\n distance: result.distance\n };\n } catch (error: any) {\n throw new Error(`HyperbolicAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native MoE Attention (uses Rust implementation)\n *\n * Mixture of Experts with top-k routing\n */\nexport class MoEAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numExperts: number;\n\n constructor(config: AttentionConfig & { numExperts?: number }) {\n this.hiddenDim = config.hiddenDim;\n this.numExperts = config.numExperts || 4;\n\n try {\n // MoEAttention constructor may have different signature in different versions\n this.nativeInstance = new (nativeAttention.MoEAttention as any)(\n this.hiddenDim\n );\n } catch (error: any) {\n throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);\n }\n }\n\n forward(\n query: number[] | Float32Array,\n key: number[] | Float32Array,\n value: number[] | Float32Array,\n topK: number = 2\n ): { output: number[]; expertWeights: number[] } {\n try {\n const q = toFloat32Array(query);\n const k = toFloat32Array(key);\n const v = toFloat32Array(value);\n\n const result = this.nativeInstance.compute(q, k, v, topK);\n\n return {\n output: toArray(result.output),\n expertWeights: toArray(result.expertWeights)\n };\n } catch (error: any) {\n throw new Error(`MoEAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Scaled Dot-Product Attention (pure JavaScript, always works)\n */\nexport function scaledDotProductAttention(\n query: number[],\n key: number[],\n value: number[],\n mask?: number[]\n): { output: number[]; weights: number[] } {\n const dk = query.length;\n\n // Compute attention scores: Q · K^T / sqrt(dk)\n let score = 0;\n for (let i = 0; i < dk; i++) {\n score += query[i] * key[i];\n }\n score /= Math.sqrt(dk);\n\n // Apply mask if provided\n if (mask && mask[0] === 0) {\n score = -Infinity;\n }\n\n // Softmax (single score version)\n const expScore = Math.exp(score);\n const weight = expScore;\n\n // Weighted value\n const output = value.map(v => v * weight);\n\n return { output, weights: [weight] };\n}\n\n/**\n * Check if native attention is available\n */\nexport function isNativeAttentionAvailable(): boolean {\n try {\n const test = new nativeAttention.MultiHeadAttention(128, 4);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Factory function to create appropriate attention module\n */\nexport function createAttention(\n type: 'multi-head' | 'flash' | 'linear' | 'hyperbolic' | 'moe',\n config: AttentionConfig\n): MultiHeadAttention | FlashAttention | LinearAttention | HyperbolicAttention | MoEAttention {\n switch (type) {\n case 'multi-head':\n return new MultiHeadAttention(config);\n case 'flash':\n return new FlashAttention(config);\n case 'linear':\n return new LinearAttention(config);\n case 'hyperbolic':\n return new HyperbolicAttention(config);\n case 'moe':\n return new MoEAttention(config);\n default:\n return new MultiHeadAttention(config);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"attention-native.js","sourceRoot":"","sources":["../../src/core/attention-native.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Native Attention Wrappers\n *\n * Wraps the @ruvector/attention 2.x NAPI classes. Every 2.x kernel takes\n * `compute(query: Float32Array, keys: Float32Array[], values: Float32Array[])`\n * and returns one Float32Array; the constructors take positional sizes\n * (MultiHead, Flash, Linear, Hyperbolic) or a config object (MoE).\n *\n * Note: @ruvector/attention is optional - the classes throw a clear error\n * when it is missing; use attention-fallbacks.ts for the JS versions.\n */\n\nlet nativeAttention: any = null;\nlet attentionAvailable = false;\n\ntry {\n const mod: any = await import('@ruvector/attention');\n // The package is CommonJS; take the named exports, or the default object.\n nativeAttention = mod?.MultiHeadAttention ? mod : mod?.default;\n attentionAvailable = !!nativeAttention?.MultiHeadAttention;\n} catch {\n console.warn('[attention-native] @ruvector/attention not available');\n}\n\nexport { attentionAvailable };\n\nexport interface AttentionConfig {\n hiddenDim: number;\n numHeads?: number;\n dropoutRate?: number;\n useFlash?: boolean;\n /** FlashAttention tile size (default 64) */\n blockSize?: number;\n /** LinearAttention random-feature count (default hiddenDim) */\n numFeatures?: number;\n /** HyperbolicAttention curvature (default 1.0) */\n curvature?: number;\n}\n\ntype Vec = number[] | Float32Array;\n\nfunction toFloat32Array(input: Vec): Float32Array {\n return input instanceof Float32Array ? input : new Float32Array(input);\n}\n\nfunction toArray(input: Float32Array): number[] {\n return Array.from(input);\n}\n\n/** One vector, or a list of vectors, as a list of Float32Array rows. */\nfunction toRows(input: Vec | Vec[]): Float32Array[] {\n const list = input as unknown[];\n if (list.length > 0 && (Array.isArray(list[0]) || list[0] instanceof Float32Array)) {\n return (input as Vec[]).map(toFloat32Array);\n }\n return [toFloat32Array(input as Vec)];\n}\n\nfunction requireNative(name: string): any {\n const ctor = nativeAttention?.[name];\n if (typeof ctor !== 'function') {\n throw new Error(`Failed to initialize native ${name}: @ruvector/attention is not installed`);\n }\n return ctor;\n}\n\nfunction checkDim(dim: number, rows: Float32Array[], what: string): void {\n for (const r of rows) {\n if (r.length !== dim) throw new Error(`${what} has dimension ${r.length}, expected ${dim}`);\n }\n}\n\n/**\n * Native Multi-Head Attention: one query attends over key/value rows.\n */\nexport class MultiHeadAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private numHeads: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.numHeads = config.numHeads || 8;\n const Ctor = requireNative('MultiHeadAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, this.numHeads);\n } catch (error: any) {\n throw new Error(`Failed to initialize native MultiHeadAttention: ${error.message}`);\n }\n }\n\n /**\n * @param query - one vector of hiddenDim\n * @param key - one key vector or a list of key rows\n * @param value - one value vector or a list of value rows (same count as keys)\n * @param mask - optional per-key mask (0 drops the key)\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], mask?: Vec): { output: number[]; attentionWeights: number[][] } {\n try {\n const q = toFloat32Array(query);\n let k = toRows(key);\n let v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n if (mask) {\n const keep = k.map((_, i) => mask[i] !== 0);\n k = k.filter((_, i) => keep[i]);\n v = v.filter((_, i) => keep[i]);\n if (k.length === 0) return { output: new Array(this.hiddenDim).fill(0), attentionWeights: [[]] };\n }\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.nativeInstance.compute(q, k, v);\n return {\n output: toArray(result),\n attentionWeights: [[]], // the native kernel does not return weights\n };\n } catch (error: any) {\n throw new Error(`MultiHeadAttention forward failed: ${error.message}`);\n }\n }\n\n get dim(): number {\n return this.nativeInstance.dim;\n }\n\n get headDim(): number {\n return this.nativeInstance.headDim;\n }\n}\n\n/** Shared batch form: every query row attends over the same key/value rows. */\nfunction computeRows(instance: any, dim: number, query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): number[][] {\n const q = toRows(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(dim, [...q, ...k, ...v], 'input');\n return q.map((row) => toArray(instance.compute(row, k, v)));\n}\n\n/**\n * Native Flash Attention (tiled, memory-efficient)\n */\nexport class FlashAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n const Ctor = requireNative('FlashAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, config.blockSize ?? 64);\n } catch (error: any) {\n throw new Error(`Failed to initialize native FlashAttention: ${error.message}`);\n }\n }\n\n /**\n * @param query - query rows (or one query vector)\n * @param key - key rows\n * @param value - value rows\n * @param _numHeads - unused (flash attention here is single-head)\n */\n forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec, _numHeads: number = 8): { output: number[][]; attentionScores: number[][] } {\n try {\n return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value), attentionScores: [[]] };\n } catch (error: any) {\n throw new Error(`FlashAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native Linear Attention: O(n) random-feature approximation\n */\nexport class LinearAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n const Ctor = requireNative('LinearAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, config.numFeatures ?? this.hiddenDim);\n } catch (error: any) {\n throw new Error(`Failed to initialize native LinearAttention: ${error.message}`);\n }\n }\n\n forward(query: Vec[] | Vec, key: Vec[] | Vec, value: Vec[] | Vec): { output: number[][] } {\n try {\n return { output: computeRows(this.nativeInstance, this.hiddenDim, query, key, value) };\n } catch (error: any) {\n throw new Error(`LinearAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/** Poincare-ball distance for curvature c > 0. */\nfunction poincareDistance(a: Float32Array, b: Float32Array, c: number): number {\n let diff = 0, na = 0, nb = 0;\n for (let i = 0; i < a.length; i++) {\n diff += (a[i] - b[i]) ** 2;\n na += a[i] * a[i];\n nb += b[i] * b[i];\n }\n const denom = (1 - c * na) * (1 - c * nb);\n if (denom <= 0) return Infinity; // a point on or outside the ball\n return Math.acosh(1 + (2 * c * diff) / denom) / Math.sqrt(c);\n}\n\n/**\n * Native Hyperbolic Attention (Poincare ball)\n */\nexport class HyperbolicAttention {\n private nativeInstance: any;\n private hiddenDim: number;\n private curvature: number;\n\n constructor(config: AttentionConfig) {\n this.hiddenDim = config.hiddenDim;\n this.curvature = config.curvature ?? 1.0;\n const Ctor = requireNative('HyperbolicAttention');\n try {\n this.nativeInstance = new Ctor(this.hiddenDim, this.curvature);\n } catch (error: any) {\n throw new Error(`Failed to initialize native HyperbolicAttention: ${error.message}`);\n }\n }\n\n /**\n * @returns output, and `distance`: the hyperbolic distance from the query\n * to its nearest key\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[]): { output: number[]; distance: number } {\n try {\n const q = toFloat32Array(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.nativeInstance.compute(q, k, v);\n const distance = Math.min(...k.map((row) => poincareDistance(q, row, this.curvature)));\n return { output: toArray(result), distance };\n } catch (error: any) {\n throw new Error(`HyperbolicAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Native MoE Attention: mixture of experts with top-k routing\n */\nexport class MoEAttention {\n private instances = new Map<number, any>();\n private hiddenDim: number;\n private numExperts: number;\n private Ctor: any;\n\n constructor(config: AttentionConfig & { numExperts?: number; topK?: number }) {\n this.hiddenDim = config.hiddenDim;\n this.numExperts = config.numExperts || 4;\n this.Ctor = requireNative('MoEAttention');\n try {\n this.instance(config.topK ?? 2);\n } catch (error: any) {\n throw new Error(`Failed to initialize native MoEAttention: ${error.message}`);\n }\n }\n\n /** The native kernel fixes topK at construction; keep one per topK. */\n private instance(topK: number): any {\n const k = Math.max(1, Math.min(Math.floor(topK), this.numExperts));\n let inst = this.instances.get(k);\n if (!inst) {\n inst = new this.Ctor({ dim: this.hiddenDim, numExperts: this.numExperts, topK: k });\n this.instances.set(k, inst);\n }\n return inst;\n }\n\n /**\n * @returns output; `expertWeights` is empty (the native kernel does not\n * expose its routing weights)\n */\n forward(query: Vec, key: Vec | Vec[], value: Vec | Vec[], topK: number = 2): { output: number[]; expertWeights: number[] } {\n try {\n const q = toFloat32Array(query);\n const k = toRows(key);\n const v = toRows(value);\n if (k.length !== v.length) throw new Error(`${k.length} keys but ${v.length} values`);\n checkDim(this.hiddenDim, [q, ...k, ...v], 'input');\n const result: Float32Array = this.instance(topK).compute(q, k, v);\n return { output: toArray(result), expertWeights: [] };\n } catch (error: any) {\n throw new Error(`MoEAttention forward failed: ${error.message}`);\n }\n }\n}\n\n/**\n * Scaled Dot-Product Attention (pure JavaScript, always works)\n */\nexport function scaledDotProductAttention(\n query: number[],\n key: number[],\n value: number[],\n mask?: number[]\n): { output: number[]; weights: number[] } {\n const dk = query.length;\n\n // Compute attention scores: Q · K^T / sqrt(dk)\n let score = 0;\n for (let i = 0; i < dk; i++) {\n score += query[i] * key[i];\n }\n score /= Math.sqrt(dk);\n\n // Apply mask if provided\n if (mask && mask[0] === 0) {\n score = -Infinity;\n }\n\n // Softmax (single score version)\n const expScore = Math.exp(score);\n const weight = expScore;\n\n // Weighted value\n const output = value.map(v => v * weight);\n\n return { output, weights: [weight] };\n}\n\n/**\n * Check if native attention is available\n */\nexport function isNativeAttentionAvailable(): boolean {\n try {\n const test = new nativeAttention.MultiHeadAttention(128, 4);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Factory function to create appropriate attention module\n */\nexport function createAttention(\n type: 'multi-head' | 'flash' | 'linear' | 'hyperbolic' | 'moe',\n config: AttentionConfig\n): MultiHeadAttention | FlashAttention | LinearAttention | HyperbolicAttention | MoEAttention {\n switch (type) {\n case 'multi-head':\n return new MultiHeadAttention(config);\n case 'flash':\n return new FlashAttention(config);\n case 'linear':\n return new LinearAttention(config);\n case 'hyperbolic':\n return new HyperbolicAttention(config);\n case 'moe':\n return new MoEAttention(config);\n default:\n return new MultiHeadAttention(config);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeFlowSdkServer.d.ts","sourceRoot":"","sources":["../../src/mcp/claudeFlowSdkServer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claudeFlowSdkServer.d.ts","sourceRoot":"","sources":["../../src/mcp/claudeFlowSdkServer.ts"],"names":[],"mappings":"AA0EA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yEAmc9B,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { resolveInsideCwd } from '../utils/path-safety.js';
|
|
|
7
7
|
import { logger } from '../utils/logger.js';
|
|
8
8
|
import { execMemoryStore, execMemoryRetrieve, execMemorySearch, execAgentSpawn, safeExecNpx, } from '../utils/safe-exec.js';
|
|
9
9
|
import { withPortableDescriptions } from './sdk-tool-schema.js';
|
|
10
|
+
import { mcpServerVersion } from '../utils/package-version.js';
|
|
10
11
|
const tool = (name, description, inputSchema, handler) => sdkTool(name, description, withPortableDescriptions(inputSchema), handler);
|
|
11
12
|
let _AgentBooster = null;
|
|
12
13
|
async function loadAgentBooster() {
|
|
@@ -52,7 +53,7 @@ function validateFilePath(filePath) {
|
|
|
52
53
|
*/
|
|
53
54
|
export const claudeFlowSdkServer = createSdkMcpServer({
|
|
54
55
|
name: 'claude-flow-sdk',
|
|
55
|
-
version:
|
|
56
|
+
version: mcpServerVersion(),
|
|
56
57
|
tools: [
|
|
57
58
|
// Memory storage tool
|
|
58
59
|
tool('memory_store', 'Store a value in persistent memory with optional namespace and TTL', {
|