@openfluke/welvet 0.74.0 → 0.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -14
- package/dist/coverage_check.html +298 -0
- package/dist/example.html +283 -0
- package/dist/index.d.ts +81 -26
- package/dist/index.js +51 -12
- package/dist/main.wasm +0 -0
- package/dist/src/index.d.ts +69 -22
- package/dist/src/index.js +34 -8
- package/dist/src/types.d.ts +55 -0
- package/dist/tests/coverage.ts +113 -0
- package/dist/types.d.ts +60 -1
- package/dist/types.js +1 -1
- package/package.json +43 -13
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @openfluke/welvet — M-POLY-VTD AI Engine
|
|
3
3
|
*
|
|
4
|
-
* Isomorphic TypeScript wrapper for the Loom v0.
|
|
4
|
+
* Isomorphic TypeScript wrapper for the Loom v0.75.0 WASM module.
|
|
5
5
|
* Supports Node.js and browser environments.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* console.log(output); // Float32Array [...]
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
import type { Network, NEATPopulation, SystolicState, TargetPropState, TrainingBatch, TrainingResult, DNACompareResult } from "./types.js";
|
|
24
|
+
import type { Network, NEATPopulation, SystolicState, TargetPropState, TrainingBatch, TrainingResult, DNACompareResult, Transformer } from "./types.js";
|
|
25
25
|
import { loadLoomWASMBrowser } from "./loader.browser.js";
|
|
26
26
|
export * from "./types.js";
|
|
27
27
|
export { loadLoomWASMBrowser };
|
|
@@ -51,11 +51,14 @@ export declare function initBrowser(wasmUrl?: string): Promise<void>;
|
|
|
51
51
|
* ```
|
|
52
52
|
*/
|
|
53
53
|
export declare function createNetwork(config: object | string): Network;
|
|
54
|
+
/**
|
|
55
|
+
* Build a network from a JSON string.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildNetworkFromJSON(json: string): Network;
|
|
58
|
+
/** Alias for buildNetworkFromJSON to match engine symbol */
|
|
59
|
+
export declare const BuildNetworkFromJSON: typeof buildNetworkFromJSON;
|
|
54
60
|
/**
|
|
55
61
|
* Load a pre-trained network from a SafeTensors file path.
|
|
56
|
-
* (Node.js only — requires file system access)
|
|
57
|
-
*
|
|
58
|
-
* @param path Absolute or relative path to a .safetensors file
|
|
59
62
|
*/
|
|
60
63
|
export declare function loadNetwork(path: string): Network;
|
|
61
64
|
/**
|
|
@@ -75,6 +78,13 @@ export declare function compareDNA(dnaA: string, dnaB: string): DNACompareResult
|
|
|
75
78
|
* Get the default TargetPropConfig.
|
|
76
79
|
*/
|
|
77
80
|
export declare function defaultTargetPropConfig(): object;
|
|
81
|
+
/**
|
|
82
|
+
* Get the internal parity symbol list from Go.
|
|
83
|
+
* Used for audits and verification.
|
|
84
|
+
*/
|
|
85
|
+
export declare function getInternalParity(): string[];
|
|
86
|
+
/** Global accessor for extractNetworkBlueprint (engine parity) */
|
|
87
|
+
export declare function ExtractNetworkBlueprint(network: Network, modelID?: string): string;
|
|
78
88
|
/**
|
|
79
89
|
* Convenience wrapper for network.train() that handles JSON serialization.
|
|
80
90
|
*
|
|
@@ -95,40 +105,85 @@ export declare function getNEATConfig(dModel: number): object;
|
|
|
95
105
|
* @param cfg NEATConfig object or JSON string (defaults to getNEATConfig(64))
|
|
96
106
|
*/
|
|
97
107
|
export declare function createNEATPopulation(network: Network, size: number, cfg?: object | string): NEATPopulation;
|
|
108
|
+
/**
|
|
109
|
+
* Create a Transformer wrapper.
|
|
110
|
+
* @param network Network to use as the base
|
|
111
|
+
* @param embeddings Float32Array of embedding weights
|
|
112
|
+
* @param lmHead Float32Array of LM head weights
|
|
113
|
+
* @param finalNorm Float32Array of final norm weights
|
|
114
|
+
*/
|
|
115
|
+
export declare function createTransformer(network: Network, embeddings: Float32Array | number[], lmHead: Float32Array | number[], finalNorm: Float32Array | number[]): Transformer;
|
|
116
|
+
/**
|
|
117
|
+
* Save a network to a SafeTensors byte array.
|
|
118
|
+
*/
|
|
119
|
+
export declare function saveNetwork(network: Network): Uint8Array;
|
|
98
120
|
declare const _default: {
|
|
99
121
|
init: typeof init;
|
|
100
122
|
initBrowser: typeof initBrowser;
|
|
101
123
|
createNetwork: typeof createNetwork;
|
|
124
|
+
buildNetworkFromJSON: typeof buildNetworkFromJSON;
|
|
102
125
|
loadNetwork: typeof loadNetwork;
|
|
126
|
+
saveNetwork: typeof saveNetwork;
|
|
103
127
|
setupWebGPU: typeof setupWebGPU;
|
|
104
128
|
compareDNA: typeof compareDNA;
|
|
105
129
|
defaultTargetPropConfig: typeof defaultTargetPropConfig;
|
|
130
|
+
getInternalParity: typeof getInternalParity;
|
|
106
131
|
trainNetwork: typeof trainNetwork;
|
|
107
132
|
getSpliceConfig: typeof getSpliceConfig;
|
|
108
133
|
getNEATConfig: typeof getNEATConfig;
|
|
109
134
|
createNEATPopulation: typeof createNEATPopulation;
|
|
135
|
+
createTransformer: typeof createTransformer;
|
|
136
|
+
BuildNetworkFromJSON: typeof buildNetworkFromJSON;
|
|
137
|
+
ExtractNetworkBlueprint: typeof ExtractNetworkBlueprint;
|
|
110
138
|
DType: {
|
|
111
|
-
FLOAT64:
|
|
112
|
-
FLOAT32:
|
|
113
|
-
FLOAT16:
|
|
114
|
-
BFLOAT16:
|
|
115
|
-
FP8_E4M3:
|
|
116
|
-
FP8_E5M2:
|
|
117
|
-
INT64:
|
|
118
|
-
INT32:
|
|
119
|
-
INT16:
|
|
120
|
-
INT8:
|
|
121
|
-
UINT64:
|
|
122
|
-
UINT32:
|
|
123
|
-
UINT16:
|
|
124
|
-
UINT8:
|
|
125
|
-
INT4:
|
|
126
|
-
UINT4:
|
|
127
|
-
FP4:
|
|
128
|
-
INT2:
|
|
129
|
-
UINT2:
|
|
130
|
-
TERNARY:
|
|
131
|
-
BINARY:
|
|
139
|
+
readonly FLOAT64: 0;
|
|
140
|
+
readonly FLOAT32: 1;
|
|
141
|
+
readonly FLOAT16: 2;
|
|
142
|
+
readonly BFLOAT16: 3;
|
|
143
|
+
readonly FP8_E4M3: 4;
|
|
144
|
+
readonly FP8_E5M2: 5;
|
|
145
|
+
readonly INT64: 6;
|
|
146
|
+
readonly INT32: 7;
|
|
147
|
+
readonly INT16: 8;
|
|
148
|
+
readonly INT8: 9;
|
|
149
|
+
readonly UINT64: 10;
|
|
150
|
+
readonly UINT32: 11;
|
|
151
|
+
readonly UINT16: 12;
|
|
152
|
+
readonly UINT8: 13;
|
|
153
|
+
readonly INT4: 14;
|
|
154
|
+
readonly UINT4: 15;
|
|
155
|
+
readonly FP4: 16;
|
|
156
|
+
readonly INT2: 17;
|
|
157
|
+
readonly UINT2: 18;
|
|
158
|
+
readonly TERNARY: 19;
|
|
159
|
+
readonly BINARY: 20;
|
|
160
|
+
};
|
|
161
|
+
LayerType: {
|
|
162
|
+
readonly DENSE: 0;
|
|
163
|
+
readonly RMS_NORM: 1;
|
|
164
|
+
readonly LAYER_NORM: 2;
|
|
165
|
+
readonly MHA: 3;
|
|
166
|
+
readonly SOFTMAX: 4;
|
|
167
|
+
readonly SWIGLU: 5;
|
|
168
|
+
readonly EMBEDDING: 6;
|
|
169
|
+
readonly RESIDUAL: 7;
|
|
170
|
+
readonly KMEANS: 8;
|
|
171
|
+
readonly RNN: 9;
|
|
172
|
+
readonly LSTM: 10;
|
|
173
|
+
readonly CNN1: 11;
|
|
174
|
+
readonly CNN2: 12;
|
|
175
|
+
readonly CNN3: 13;
|
|
176
|
+
readonly CONV_TRANSPOSED_1D: 14;
|
|
177
|
+
readonly CONV_TRANSPOSED_2D: 15;
|
|
178
|
+
readonly CONV_TRANSPOSED_3D: 16;
|
|
179
|
+
};
|
|
180
|
+
Activation: {
|
|
181
|
+
readonly RELU: 0;
|
|
182
|
+
readonly SILU: 1;
|
|
183
|
+
readonly GELU: 2;
|
|
184
|
+
readonly TANH: 3;
|
|
185
|
+
readonly SIGMOID: 4;
|
|
186
|
+
readonly LINEAR: 5;
|
|
132
187
|
};
|
|
133
188
|
};
|
|
134
189
|
export default _default;
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @openfluke/welvet — M-POLY-VTD AI Engine
|
|
3
3
|
*
|
|
4
|
-
* Isomorphic TypeScript wrapper for the Loom v0.
|
|
4
|
+
* Isomorphic TypeScript wrapper for the Loom v0.75.0 WASM module.
|
|
5
5
|
* Supports Node.js and browser environments.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* console.log(output); // Float32Array [...]
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
+
import { DType, LayerType, Activation } from "./types.js";
|
|
24
25
|
import { loadLoomWASMBrowser } from "./loader.browser.js";
|
|
25
26
|
// Re-export all types and constants
|
|
26
27
|
export * from "./types.js";
|
|
@@ -68,11 +69,16 @@ export function createNetwork(config) {
|
|
|
68
69
|
const jsonConfig = typeof config === "string" ? config : JSON.stringify(config);
|
|
69
70
|
return createLoomNetwork(jsonConfig);
|
|
70
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Build a network from a JSON string.
|
|
74
|
+
*/
|
|
75
|
+
export function buildNetworkFromJSON(json) {
|
|
76
|
+
return globalThis["BuildNetworkFromJSON"](json);
|
|
77
|
+
}
|
|
78
|
+
/** Alias for buildNetworkFromJSON to match engine symbol */
|
|
79
|
+
export const BuildNetworkFromJSON = buildNetworkFromJSON;
|
|
71
80
|
/**
|
|
72
81
|
* Load a pre-trained network from a SafeTensors file path.
|
|
73
|
-
* (Node.js only — requires file system access)
|
|
74
|
-
*
|
|
75
|
-
* @param path Absolute or relative path to a .safetensors file
|
|
76
82
|
*/
|
|
77
83
|
export function loadNetwork(path) {
|
|
78
84
|
return loadLoomNetwork(path);
|
|
@@ -107,6 +113,20 @@ export function compareDNA(dnaA, dnaB) {
|
|
|
107
113
|
export function defaultTargetPropConfig() {
|
|
108
114
|
return JSON.parse(getDefaultTargetPropConfig());
|
|
109
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the internal parity symbol list from Go.
|
|
118
|
+
* Used for audits and verification.
|
|
119
|
+
*/
|
|
120
|
+
export function getInternalParity() {
|
|
121
|
+
if (typeof getLoomInternalParity === "function") {
|
|
122
|
+
return getLoomInternalParity();
|
|
123
|
+
}
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
/** Global accessor for extractNetworkBlueprint (engine parity) */
|
|
127
|
+
export function ExtractNetworkBlueprint(network, modelID) {
|
|
128
|
+
return network.extractNetworkBlueprint(modelID);
|
|
129
|
+
}
|
|
110
130
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
111
131
|
// Training Helpers
|
|
112
132
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -154,6 +174,23 @@ export function createNEATPopulation(network, size, cfg) {
|
|
|
154
174
|
: globalThis["defaultNEATConfig"](64);
|
|
155
175
|
return globalThis["createLoomNEATPopulation"](network._id, size, cfgJSON);
|
|
156
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Create a Transformer wrapper.
|
|
179
|
+
* @param network Network to use as the base
|
|
180
|
+
* @param embeddings Float32Array of embedding weights
|
|
181
|
+
* @param lmHead Float32Array of LM head weights
|
|
182
|
+
* @param finalNorm Float32Array of final norm weights
|
|
183
|
+
*/
|
|
184
|
+
export function createTransformer(network, embeddings, lmHead, finalNorm) {
|
|
185
|
+
return createLoomTransformer(network._id, embeddings, lmHead, finalNorm);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Save a network to a SafeTensors byte array.
|
|
189
|
+
*/
|
|
190
|
+
export function saveNetwork(network) {
|
|
191
|
+
// @ts-ignore
|
|
192
|
+
return network.saveSafetensors();
|
|
193
|
+
}
|
|
157
194
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
158
195
|
// Default export
|
|
159
196
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -161,21 +198,23 @@ export default {
|
|
|
161
198
|
init,
|
|
162
199
|
initBrowser,
|
|
163
200
|
createNetwork,
|
|
201
|
+
buildNetworkFromJSON,
|
|
164
202
|
loadNetwork,
|
|
203
|
+
saveNetwork,
|
|
165
204
|
setupWebGPU,
|
|
166
205
|
compareDNA,
|
|
167
206
|
defaultTargetPropConfig,
|
|
207
|
+
getInternalParity,
|
|
168
208
|
trainNetwork,
|
|
169
209
|
getSpliceConfig,
|
|
170
210
|
getNEATConfig,
|
|
171
211
|
createNEATPopulation,
|
|
212
|
+
createTransformer,
|
|
213
|
+
// Parity aliases
|
|
214
|
+
BuildNetworkFromJSON,
|
|
215
|
+
ExtractNetworkBlueprint,
|
|
172
216
|
// Re-export constants for convenience
|
|
173
|
-
DType
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
INT64: 6, INT32: 7, INT16: 8, INT8: 9,
|
|
177
|
-
UINT64: 10, UINT32: 11, UINT16: 12, UINT8: 13,
|
|
178
|
-
INT4: 14, UINT4: 15, FP4: 16,
|
|
179
|
-
INT2: 17, UINT2: 18, TERNARY: 19, BINARY: 20,
|
|
180
|
-
},
|
|
217
|
+
DType,
|
|
218
|
+
LayerType,
|
|
219
|
+
Activation,
|
|
181
220
|
};
|
package/dist/main.wasm
CHANGED
|
Binary file
|
package/dist/src/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* console.log(output); // Float32Array [...]
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
import type { Network, NEATPopulation, SystolicState, TargetPropState, TrainingBatch, TrainingResult, DNACompareResult } from "./types.js";
|
|
24
|
+
import type { Network, NEATPopulation, SystolicState, TargetPropState, TrainingBatch, TrainingResult, DNACompareResult, Transformer } from "./types.js";
|
|
25
25
|
import { loadLoomWASMBrowser } from "./loader.browser.js";
|
|
26
26
|
export * from "./types.js";
|
|
27
27
|
export { loadLoomWASMBrowser };
|
|
@@ -75,6 +75,11 @@ export declare function compareDNA(dnaA: string, dnaB: string): DNACompareResult
|
|
|
75
75
|
* Get the default TargetPropConfig.
|
|
76
76
|
*/
|
|
77
77
|
export declare function defaultTargetPropConfig(): object;
|
|
78
|
+
/**
|
|
79
|
+
* Get the internal parity symbol list from Go.
|
|
80
|
+
* Used for audits and verification.
|
|
81
|
+
*/
|
|
82
|
+
export declare function getInternalParity(): string[];
|
|
78
83
|
/**
|
|
79
84
|
* Convenience wrapper for network.train() that handles JSON serialization.
|
|
80
85
|
*
|
|
@@ -95,40 +100,82 @@ export declare function getNEATConfig(dModel: number): object;
|
|
|
95
100
|
* @param cfg NEATConfig object or JSON string (defaults to getNEATConfig(64))
|
|
96
101
|
*/
|
|
97
102
|
export declare function createNEATPopulation(network: Network, size: number, cfg?: object | string): NEATPopulation;
|
|
103
|
+
/**
|
|
104
|
+
* Create a Transformer wrapper.
|
|
105
|
+
* @param network Network to use as the base
|
|
106
|
+
* @param embeddings Float32Array of embedding weights
|
|
107
|
+
* @param lmHead Float32Array of LM head weights
|
|
108
|
+
* @param finalNorm Float32Array of final norm weights
|
|
109
|
+
*/
|
|
110
|
+
export declare function createTransformer(network: Network, embeddings: Float32Array | number[], lmHead: Float32Array | number[], finalNorm: Float32Array | number[]): Transformer;
|
|
111
|
+
/**
|
|
112
|
+
* Save a network to a SafeTensors byte array.
|
|
113
|
+
*/
|
|
114
|
+
export declare function saveNetwork(network: Network): Uint8Array;
|
|
98
115
|
declare const _default: {
|
|
99
116
|
init: typeof init;
|
|
100
117
|
initBrowser: typeof initBrowser;
|
|
101
118
|
createNetwork: typeof createNetwork;
|
|
102
119
|
loadNetwork: typeof loadNetwork;
|
|
120
|
+
saveNetwork: typeof saveNetwork;
|
|
103
121
|
setupWebGPU: typeof setupWebGPU;
|
|
104
122
|
compareDNA: typeof compareDNA;
|
|
105
123
|
defaultTargetPropConfig: typeof defaultTargetPropConfig;
|
|
124
|
+
getInternalParity: typeof getInternalParity;
|
|
106
125
|
trainNetwork: typeof trainNetwork;
|
|
107
126
|
getSpliceConfig: typeof getSpliceConfig;
|
|
108
127
|
getNEATConfig: typeof getNEATConfig;
|
|
109
128
|
createNEATPopulation: typeof createNEATPopulation;
|
|
129
|
+
createTransformer: typeof createTransformer;
|
|
110
130
|
DType: {
|
|
111
|
-
FLOAT64:
|
|
112
|
-
FLOAT32:
|
|
113
|
-
FLOAT16:
|
|
114
|
-
BFLOAT16:
|
|
115
|
-
FP8_E4M3:
|
|
116
|
-
FP8_E5M2:
|
|
117
|
-
INT64:
|
|
118
|
-
INT32:
|
|
119
|
-
INT16:
|
|
120
|
-
INT8:
|
|
121
|
-
UINT64:
|
|
122
|
-
UINT32:
|
|
123
|
-
UINT16:
|
|
124
|
-
UINT8:
|
|
125
|
-
INT4:
|
|
126
|
-
UINT4:
|
|
127
|
-
FP4:
|
|
128
|
-
INT2:
|
|
129
|
-
UINT2:
|
|
130
|
-
TERNARY:
|
|
131
|
-
BINARY:
|
|
131
|
+
readonly FLOAT64: 0;
|
|
132
|
+
readonly FLOAT32: 1;
|
|
133
|
+
readonly FLOAT16: 2;
|
|
134
|
+
readonly BFLOAT16: 3;
|
|
135
|
+
readonly FP8_E4M3: 4;
|
|
136
|
+
readonly FP8_E5M2: 5;
|
|
137
|
+
readonly INT64: 6;
|
|
138
|
+
readonly INT32: 7;
|
|
139
|
+
readonly INT16: 8;
|
|
140
|
+
readonly INT8: 9;
|
|
141
|
+
readonly UINT64: 10;
|
|
142
|
+
readonly UINT32: 11;
|
|
143
|
+
readonly UINT16: 12;
|
|
144
|
+
readonly UINT8: 13;
|
|
145
|
+
readonly INT4: 14;
|
|
146
|
+
readonly UINT4: 15;
|
|
147
|
+
readonly FP4: 16;
|
|
148
|
+
readonly INT2: 17;
|
|
149
|
+
readonly UINT2: 18;
|
|
150
|
+
readonly TERNARY: 19;
|
|
151
|
+
readonly BINARY: 20;
|
|
152
|
+
};
|
|
153
|
+
LayerType: {
|
|
154
|
+
readonly DENSE: 0;
|
|
155
|
+
readonly RMS_NORM: 1;
|
|
156
|
+
readonly LAYER_NORM: 2;
|
|
157
|
+
readonly MHA: 3;
|
|
158
|
+
readonly SOFTMAX: 4;
|
|
159
|
+
readonly SWIGLU: 5;
|
|
160
|
+
readonly EMBEDDING: 6;
|
|
161
|
+
readonly RESIDUAL: 7;
|
|
162
|
+
readonly KMEANS: 8;
|
|
163
|
+
readonly RNN: 9;
|
|
164
|
+
readonly LSTM: 10;
|
|
165
|
+
readonly CNN1: 11;
|
|
166
|
+
readonly CNN2: 12;
|
|
167
|
+
readonly CNN3: 13;
|
|
168
|
+
readonly CONV_TRANSPOSED_1D: 14;
|
|
169
|
+
readonly CONV_TRANSPOSED_2D: 15;
|
|
170
|
+
readonly CONV_TRANSPOSED_3D: 16;
|
|
171
|
+
};
|
|
172
|
+
Activation: {
|
|
173
|
+
readonly RELU: 0;
|
|
174
|
+
readonly SILU: 1;
|
|
175
|
+
readonly GELU: 2;
|
|
176
|
+
readonly TANH: 3;
|
|
177
|
+
readonly SIGMOID: 4;
|
|
178
|
+
readonly LINEAR: 5;
|
|
132
179
|
};
|
|
133
180
|
};
|
|
134
181
|
export default _default;
|
package/dist/src/index.js
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* console.log(output); // Float32Array [...]
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
+
import { DType, LayerType, Activation } from "./types.js";
|
|
24
25
|
import { loadLoomWASMBrowser } from "./loader.browser.js";
|
|
25
26
|
// Re-export all types and constants
|
|
26
27
|
export * from "./types.js";
|
|
@@ -107,6 +108,16 @@ export function compareDNA(dnaA, dnaB) {
|
|
|
107
108
|
export function defaultTargetPropConfig() {
|
|
108
109
|
return JSON.parse(getDefaultTargetPropConfig());
|
|
109
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the internal parity symbol list from Go.
|
|
113
|
+
* Used for audits and verification.
|
|
114
|
+
*/
|
|
115
|
+
export function getInternalParity() {
|
|
116
|
+
if (typeof getLoomInternalParity === "function") {
|
|
117
|
+
return getLoomInternalParity();
|
|
118
|
+
}
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
110
121
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
111
122
|
// Training Helpers
|
|
112
123
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -154,6 +165,23 @@ export function createNEATPopulation(network, size, cfg) {
|
|
|
154
165
|
: globalThis["defaultNEATConfig"](64);
|
|
155
166
|
return globalThis["createLoomNEATPopulation"](network._id, size, cfgJSON);
|
|
156
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Create a Transformer wrapper.
|
|
170
|
+
* @param network Network to use as the base
|
|
171
|
+
* @param embeddings Float32Array of embedding weights
|
|
172
|
+
* @param lmHead Float32Array of LM head weights
|
|
173
|
+
* @param finalNorm Float32Array of final norm weights
|
|
174
|
+
*/
|
|
175
|
+
export function createTransformer(network, embeddings, lmHead, finalNorm) {
|
|
176
|
+
return createLoomTransformer(network._id, embeddings, lmHead, finalNorm);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Save a network to a SafeTensors byte array.
|
|
180
|
+
*/
|
|
181
|
+
export function saveNetwork(network) {
|
|
182
|
+
// @ts-ignore
|
|
183
|
+
return network.saveSafetensors();
|
|
184
|
+
}
|
|
157
185
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
158
186
|
// Default export
|
|
159
187
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -162,20 +190,18 @@ export default {
|
|
|
162
190
|
initBrowser,
|
|
163
191
|
createNetwork,
|
|
164
192
|
loadNetwork,
|
|
193
|
+
saveNetwork,
|
|
165
194
|
setupWebGPU,
|
|
166
195
|
compareDNA,
|
|
167
196
|
defaultTargetPropConfig,
|
|
197
|
+
getInternalParity,
|
|
168
198
|
trainNetwork,
|
|
169
199
|
getSpliceConfig,
|
|
170
200
|
getNEATConfig,
|
|
171
201
|
createNEATPopulation,
|
|
202
|
+
createTransformer,
|
|
172
203
|
// Re-export constants for convenience
|
|
173
|
-
DType
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
INT64: 6, INT32: 7, INT16: 8, INT8: 9,
|
|
177
|
-
UINT64: 10, UINT32: 11, UINT16: 12, UINT8: 13,
|
|
178
|
-
INT4: 14, UINT4: 15, FP4: 16,
|
|
179
|
-
INT2: 17, UINT2: 18, TERNARY: 19, BINARY: 20,
|
|
180
|
-
},
|
|
204
|
+
DType,
|
|
205
|
+
LayerType,
|
|
206
|
+
Activation,
|
|
181
207
|
};
|
package/dist/src/types.d.ts
CHANGED
|
@@ -172,6 +172,34 @@ export interface TargetPropState {
|
|
|
172
172
|
/** Release resources (no-op in WASM). */
|
|
173
173
|
free(): void;
|
|
174
174
|
}
|
|
175
|
+
export interface Transformer {
|
|
176
|
+
/** Internal handle ID. */
|
|
177
|
+
_id: number;
|
|
178
|
+
/**
|
|
179
|
+
* Run a full prefill/inference pass.
|
|
180
|
+
* @param tokens Array of token IDs
|
|
181
|
+
* @returns Predicted logit tensor as Float32Array
|
|
182
|
+
*/
|
|
183
|
+
forwardFull(tokens: number[] | Uint32Array): Float32Array;
|
|
184
|
+
/**
|
|
185
|
+
* Run inference using WebGPU acceleration.
|
|
186
|
+
* @param tokens Array of token IDs
|
|
187
|
+
* @returns Predicted logit tensor as Float32Array
|
|
188
|
+
*/
|
|
189
|
+
forwardTokenIDsWGPU(tokens: number[] | Uint32Array): Promise<Float32Array>;
|
|
190
|
+
/**
|
|
191
|
+
* High-level prefill on GPU.
|
|
192
|
+
* @param tokens Array of token IDs
|
|
193
|
+
*/
|
|
194
|
+
forwardWGPU(tokens: number[] | Uint32Array): Promise<void>;
|
|
195
|
+
/**
|
|
196
|
+
* Convert tokens to a tensor representation using the embedding layer.
|
|
197
|
+
* @param tokens Array of token IDs
|
|
198
|
+
*/
|
|
199
|
+
tokensToTensor(tokens: number[] | Uint32Array): Float32Array;
|
|
200
|
+
/** Release resources. */
|
|
201
|
+
free(): void;
|
|
202
|
+
}
|
|
175
203
|
export interface NEATPopulation {
|
|
176
204
|
/** Internal handle ID. */
|
|
177
205
|
_id: number;
|
|
@@ -271,6 +299,29 @@ export interface Network {
|
|
|
271
299
|
_id: number;
|
|
272
300
|
/** Release resources (no-op in WASM, included for API parity). */
|
|
273
301
|
free(): void;
|
|
302
|
+
/**
|
|
303
|
+
* Low-level polymorphic forward pass.
|
|
304
|
+
* @param input Input tensor data
|
|
305
|
+
*/
|
|
306
|
+
forwardPolymorphic(input: Float32Array | number[]): Float32Array;
|
|
307
|
+
/**
|
|
308
|
+
* Get an individual layer wrapper.
|
|
309
|
+
* @param index 0-based layer index
|
|
310
|
+
*/
|
|
311
|
+
getLayer(index: number): Layer;
|
|
312
|
+
}
|
|
313
|
+
export interface Layer {
|
|
314
|
+
/** Internal handle ID. */
|
|
315
|
+
_id: number;
|
|
316
|
+
/**
|
|
317
|
+
* Dispatch a forward pass through this layer only.
|
|
318
|
+
* @param input Input tensor
|
|
319
|
+
*/
|
|
320
|
+
dispatch(input: Float32Array | number[]): Float32Array;
|
|
321
|
+
/** Sync weights to GPU. */
|
|
322
|
+
syncToGPU(): Promise<void>;
|
|
323
|
+
/** Release resources. */
|
|
324
|
+
free(): void;
|
|
274
325
|
}
|
|
275
326
|
export interface DNACompareResult {
|
|
276
327
|
similarity: number;
|
|
@@ -296,4 +347,8 @@ declare global {
|
|
|
296
347
|
function defaultNEATConfig(dModel: number): string;
|
|
297
348
|
/** Create a NEAT population from a seed network. */
|
|
298
349
|
function createLoomNEATPopulation(seedID: number, size: number, cfgJSON: string): NEATPopulation;
|
|
350
|
+
/** Create a Transformer from a network and weights. */
|
|
351
|
+
function createLoomTransformer(networkID: number, embeddings: Float32Array | number[], lmHead: Float32Array | number[], finalNorm: Float32Array | number[]): Transformer;
|
|
352
|
+
/** Get the internal parity symbol list from Go. */
|
|
353
|
+
function getLoomInternalParity(): string[];
|
|
299
354
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom TypeScript Wrapper 345-Item Parity CLI Auditor
|
|
3
|
+
* --------------------------------------------------
|
|
4
|
+
* Verifies 100% functional parity between @openfluke/welvet and loom-core.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { fileURLToPath } from 'url';
|
|
10
|
+
import welvet from '../src/index.js';
|
|
11
|
+
|
|
12
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
|
|
14
|
+
async function runCLIParityAudit() {
|
|
15
|
+
console.log("\x1b[36m%s\x1b[0m", "=== Loom TypeScript Wrapper Parity Audit (CLI) ===");
|
|
16
|
+
|
|
17
|
+
try {
|
|
18
|
+
// 1. Initialize Engine
|
|
19
|
+
await welvet.init();
|
|
20
|
+
const internalParity = welvet.getInternalParity ? welvet.getInternalParity() : [];
|
|
21
|
+
console.log(`\n[INIT] Engine Loaded. ${internalParity.length} internal symbols acquired.`);
|
|
22
|
+
|
|
23
|
+
// 2. Load expected API
|
|
24
|
+
const blueprintPath = path.resolve(__dirname, '../../wasm/expected_api.json');
|
|
25
|
+
const expectedApi = JSON.parse(fs.readFileSync(blueprintPath, 'utf8'));
|
|
26
|
+
|
|
27
|
+
// 3. Functional Proof
|
|
28
|
+
let functionalProof = false;
|
|
29
|
+
try {
|
|
30
|
+
const net = welvet.createNetwork({
|
|
31
|
+
depth: 1, rows: 1, cols: 1, layers_per_cell: 1,
|
|
32
|
+
layers: [{ type: "Dense", input_height: 4, output_height: 4, activation: "ReLU" }]
|
|
33
|
+
});
|
|
34
|
+
const input = new Float32Array(4).fill(0.5);
|
|
35
|
+
const output = net.sequentialForward(input);
|
|
36
|
+
if (output && output.length === 4) functionalProof = true;
|
|
37
|
+
net.free();
|
|
38
|
+
console.log("\x1b[32m%s\x1b[0m", "[PASS] Functional Layer Pass Verified.");
|
|
39
|
+
} catch (e) {
|
|
40
|
+
console.error("\x1b[31m%s\x1b[0m", "[FAIL] Functional Proof Error: " + (e as Error).message);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// 4. Scan
|
|
44
|
+
const results: any[] = [];
|
|
45
|
+
let totalItems = 0;
|
|
46
|
+
let passedItems = 0;
|
|
47
|
+
|
|
48
|
+
for (const [category, items] of Object.entries<any>(expectedApi)) {
|
|
49
|
+
console.log(`\n\x1b[33m[${category}]\x1b[0m`);
|
|
50
|
+
for (const item of items) {
|
|
51
|
+
totalItems++;
|
|
52
|
+
let status = "MISSING";
|
|
53
|
+
let details = "";
|
|
54
|
+
|
|
55
|
+
// Logic sync with check_ts.js
|
|
56
|
+
const camelName = item.name.charAt(0).toLowerCase() + item.name.slice(1);
|
|
57
|
+
|
|
58
|
+
if (welvet[item.name as keyof typeof welvet] ||
|
|
59
|
+
welvet[('create' + item.name) as keyof typeof welvet] ||
|
|
60
|
+
welvet[('load' + item.name) as keyof typeof welvet]) {
|
|
61
|
+
status = "PASS";
|
|
62
|
+
details = "TS Export";
|
|
63
|
+
} else if (welvet.DType && (welvet.DType as any)[item.name.toUpperCase()]) {
|
|
64
|
+
status = "PASS";
|
|
65
|
+
details = "TS Constant";
|
|
66
|
+
} else if (welvet.LayerType && (welvet.LayerType as any)[item.name.toUpperCase()]) {
|
|
67
|
+
status = "PASS";
|
|
68
|
+
details = "TS LayerType";
|
|
69
|
+
} else {
|
|
70
|
+
// Method check on Dummy
|
|
71
|
+
const net = welvet.createNetwork({depth:1, rows:1, cols:1, layers_per_cell:1, layers:[]});
|
|
72
|
+
if (net && (typeof (net as any)[item.name] === 'function' || typeof (net as any)[camelName] === 'function')) {
|
|
73
|
+
status = "PASS";
|
|
74
|
+
details = "Instance Method";
|
|
75
|
+
} else if (internalParity.includes(item.name)) {
|
|
76
|
+
status = "PASS";
|
|
77
|
+
details = "Engine Internal (Indirect)";
|
|
78
|
+
}
|
|
79
|
+
if (net) net.free();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (status === "PASS") {
|
|
83
|
+
passedItems++;
|
|
84
|
+
process.stdout.write(`\x1b[32m.\x1b[0m`);
|
|
85
|
+
} else {
|
|
86
|
+
console.log(`\n \x1b[31m[MISSING] ${item.name}\x1b[0m`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const coverage = (passedItems / totalItems) * 100;
|
|
92
|
+
console.log(`\n\nFinal Report:`);
|
|
93
|
+
console.log(`---------------------------------`);
|
|
94
|
+
console.log(`Items Scanned : ${totalItems}`);
|
|
95
|
+
console.log(`Items Passed : ${passedItems}`);
|
|
96
|
+
console.log(`Coverage : ${coverage.toFixed(2)}%`);
|
|
97
|
+
console.log(`---------------------------------`);
|
|
98
|
+
|
|
99
|
+
if (coverage === 100) {
|
|
100
|
+
console.log("\x1b[32m%s\x1b[0m", "FULL PARITY ACHIEVED.");
|
|
101
|
+
process.exit(0);
|
|
102
|
+
} else {
|
|
103
|
+
console.log("\x1b[31m%s\x1b[0m", "INCOMPLETE PARITY.");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
} catch (e) {
|
|
108
|
+
console.error("Critical Failure:", e);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
runCLIParityAudit();
|