@ruvector/ruvllm 3.0.0 → 4.0.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/GPU-LOOP.md +229 -0
- package/LICENSE +201 -0
- package/NOTICE +9 -0
- package/README.md +157 -362
- package/examples/gpu-loop.example.json +26 -0
- package/package.json +50 -121
- package/src/adapters-cli.mjs +23 -0
- package/src/adapters.mjs +91 -0
- package/src/cli.mjs +30 -0
- package/src/engine.mjs +238 -0
- package/src/fixture.mjs +38 -0
- package/src/gpu-host.mjs +47 -0
- package/src/gpu-loop-cli.mjs +67 -0
- package/src/gpu-loop.mjs +184 -0
- package/src/gpu-spool-adapter.mjs +80 -0
- package/src/vast-host-adapter.mjs +274 -0
- package/bin/cli.js +0 -1040
- package/dist/cjs/benchmarks/embedding-benchmark.d.ts +0 -102
- package/dist/cjs/benchmarks/embedding-benchmark.d.ts.map +0 -1
- package/dist/cjs/benchmarks/embedding-benchmark.js +0 -436
- package/dist/cjs/benchmarks/index.d.ts +0 -34
- package/dist/cjs/benchmarks/index.d.ts.map +0 -1
- package/dist/cjs/benchmarks/index.js +0 -132
- package/dist/cjs/benchmarks/model-comparison.d.ts +0 -71
- package/dist/cjs/benchmarks/model-comparison.d.ts.map +0 -1
- package/dist/cjs/benchmarks/model-comparison.js +0 -476
- package/dist/cjs/benchmarks/routing-benchmark.d.ts +0 -70
- package/dist/cjs/benchmarks/routing-benchmark.d.ts.map +0 -1
- package/dist/cjs/benchmarks/routing-benchmark.js +0 -289
- package/dist/cjs/contrastive.d.ts +0 -229
- package/dist/cjs/contrastive.d.ts.map +0 -1
- package/dist/cjs/contrastive.js +0 -589
- package/dist/cjs/engine.d.ts +0 -160
- package/dist/cjs/engine.d.ts.map +0 -1
- package/dist/cjs/engine.js +0 -552
- package/dist/cjs/export.d.ts +0 -182
- package/dist/cjs/export.d.ts.map +0 -1
- package/dist/cjs/export.js +0 -422
- package/dist/cjs/federated.d.ts +0 -233
- package/dist/cjs/federated.d.ts.map +0 -1
- package/dist/cjs/federated.js +0 -525
- package/dist/cjs/index.d.ts +0 -68
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -104
- package/dist/cjs/intelligence.d.ts +0 -136
- package/dist/cjs/intelligence.d.ts.map +0 -1
- package/dist/cjs/intelligence.js +0 -226
- package/dist/cjs/lora.d.ts +0 -251
- package/dist/cjs/lora.d.ts.map +0 -1
- package/dist/cjs/lora.js +0 -509
- package/dist/cjs/models.d.ts +0 -129
- package/dist/cjs/models.d.ts.map +0 -1
- package/dist/cjs/models.js +0 -323
- package/dist/cjs/native.d.ts +0 -140
- package/dist/cjs/native.d.ts.map +0 -1
- package/dist/cjs/native.js +0 -98
- package/dist/cjs/session.d.ts +0 -80
- package/dist/cjs/session.d.ts.map +0 -1
- package/dist/cjs/session.js +0 -203
- package/dist/cjs/simd.d.ts +0 -90
- package/dist/cjs/simd.d.ts.map +0 -1
- package/dist/cjs/simd.js +0 -209
- package/dist/cjs/sona.d.ts +0 -223
- package/dist/cjs/sona.d.ts.map +0 -1
- package/dist/cjs/sona.js +0 -562
- package/dist/cjs/streaming.d.ts +0 -55
- package/dist/cjs/streaming.d.ts.map +0 -1
- package/dist/cjs/streaming.js +0 -131
- package/dist/cjs/training.d.ts +0 -312
- package/dist/cjs/training.d.ts.map +0 -1
- package/dist/cjs/training.js +0 -610
- package/dist/cjs/types.d.ts +0 -696
- package/dist/cjs/types.d.ts.map +0 -1
- package/dist/cjs/types.js +0 -6
- package/dist/esm/benchmarks/embedding-benchmark.d.ts +0 -102
- package/dist/esm/benchmarks/embedding-benchmark.d.ts.map +0 -1
- package/dist/esm/benchmarks/embedding-benchmark.js +0 -427
- package/dist/esm/benchmarks/index.d.ts +0 -34
- package/dist/esm/benchmarks/index.d.ts.map +0 -1
- package/dist/esm/benchmarks/index.js +0 -110
- package/dist/esm/benchmarks/model-comparison.d.ts +0 -71
- package/dist/esm/benchmarks/model-comparison.d.ts.map +0 -1
- package/dist/esm/benchmarks/model-comparison.js +0 -434
- package/dist/esm/benchmarks/routing-benchmark.d.ts +0 -70
- package/dist/esm/benchmarks/routing-benchmark.d.ts.map +0 -1
- package/dist/esm/benchmarks/routing-benchmark.js +0 -283
- package/dist/esm/contrastive.d.ts +0 -229
- package/dist/esm/contrastive.d.ts.map +0 -1
- package/dist/esm/contrastive.js +0 -578
- package/dist/esm/engine.d.ts +0 -160
- package/dist/esm/engine.d.ts.map +0 -1
- package/dist/esm/engine.js +0 -548
- package/dist/esm/export.d.ts +0 -182
- package/dist/esm/export.d.ts.map +0 -1
- package/dist/esm/export.js +0 -414
- package/dist/esm/federated.d.ts +0 -233
- package/dist/esm/federated.d.ts.map +0 -1
- package/dist/esm/federated.js +0 -520
- package/dist/esm/index.d.ts +0 -68
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -84
- package/dist/esm/intelligence.d.ts +0 -136
- package/dist/esm/intelligence.d.ts.map +0 -1
- package/dist/esm/intelligence.js +0 -188
- package/dist/esm/lora.d.ts +0 -251
- package/dist/esm/lora.d.ts.map +0 -1
- package/dist/esm/lora.js +0 -504
- package/dist/esm/models.d.ts +0 -129
- package/dist/esm/models.d.ts.map +0 -1
- package/dist/esm/models.js +0 -282
- package/dist/esm/native.d.ts +0 -140
- package/dist/esm/native.d.ts.map +0 -1
- package/dist/esm/native.js +0 -93
- package/dist/esm/session.d.ts +0 -80
- package/dist/esm/session.d.ts.map +0 -1
- package/dist/esm/session.js +0 -199
- package/dist/esm/simd.d.ts +0 -90
- package/dist/esm/simd.d.ts.map +0 -1
- package/dist/esm/simd.js +0 -205
- package/dist/esm/sona.d.ts +0 -223
- package/dist/esm/sona.d.ts.map +0 -1
- package/dist/esm/sona.js +0 -556
- package/dist/esm/streaming.d.ts +0 -55
- package/dist/esm/streaming.d.ts.map +0 -1
- package/dist/esm/streaming.js +0 -126
- package/dist/esm/training.d.ts +0 -312
- package/dist/esm/training.d.ts.map +0 -1
- package/dist/esm/training.js +0 -603
- package/dist/esm/types.d.ts +0 -696
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js +0 -5
- package/scripts/ensemble-model-compare.js +0 -287
- package/scripts/fix-esm-extensions.mjs +0 -181
- package/scripts/huggingface/README.md +0 -537
- package/scripts/huggingface/publish.sh +0 -112
- package/scripts/hybrid-model-compare.js +0 -373
- package/scripts/improved-model-compare.js +0 -288
- package/scripts/optimized-model-compare.js +0 -364
- package/scripts/real-model-compare.js +0 -280
- package/scripts/smoke-esm.mjs +0 -82
- package/scripts/training/agentic-flow-capabilities.json +0 -329
- package/scripts/training/claude-code-synth.js +0 -505
- package/scripts/training/claude-flow-capabilities.json +0 -1322
- package/scripts/training/claude-hard-negatives.js +0 -222
- package/scripts/training/contrastive-finetune.js +0 -517
- package/scripts/training/ecosystem-triplets.jsonl +0 -1467
- package/scripts/training/generate-ecosystem-triplets.js +0 -1324
- package/scripts/training/routing-dataset.js +0 -634
- package/scripts/training/ruvector-capabilities.json +0 -798
- package/scripts/training/validate-ecosystem.js +0 -381
- package/scripts/training/validation-results.json +0 -23
package/dist/cjs/simd.js
DELETED
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* SIMD Operations for vector computations
|
|
4
|
-
*
|
|
5
|
-
* Uses native SIMD instructions (AVX2/AVX512/SSE4.1/NEON) when available,
|
|
6
|
-
* falls back to JavaScript implementations otherwise.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.SimdOps = void 0;
|
|
10
|
-
const native_1 = require("./native");
|
|
11
|
-
/**
|
|
12
|
-
* SIMD Operations class
|
|
13
|
-
*
|
|
14
|
-
* Provides hardware-accelerated vector operations when native module is available.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* import { SimdOps } from '@ruvector/ruvllm';
|
|
19
|
-
*
|
|
20
|
-
* const simd = new SimdOps();
|
|
21
|
-
*
|
|
22
|
-
* // Compute dot product
|
|
23
|
-
* const result = simd.dotProduct([1, 2, 3], [4, 5, 6]);
|
|
24
|
-
* console.log(result); // 32
|
|
25
|
-
*
|
|
26
|
-
* // Check capabilities
|
|
27
|
-
* console.log(simd.capabilities()); // ['AVX2', 'FMA']
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
class SimdOps {
|
|
31
|
-
constructor() {
|
|
32
|
-
this.native = null;
|
|
33
|
-
const mod = (0, native_1.getNativeModule)();
|
|
34
|
-
if (mod) {
|
|
35
|
-
try {
|
|
36
|
-
this.native = new mod.SimdOperations();
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Fall back to JS implementation
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Compute dot product of two vectors
|
|
45
|
-
*/
|
|
46
|
-
dotProduct(a, b) {
|
|
47
|
-
if (this.native) {
|
|
48
|
-
return this.native.dotProduct(a, b);
|
|
49
|
-
}
|
|
50
|
-
// JavaScript fallback
|
|
51
|
-
let sum = 0;
|
|
52
|
-
const len = Math.min(a.length, b.length);
|
|
53
|
-
for (let i = 0; i < len; i++) {
|
|
54
|
-
sum += a[i] * b[i];
|
|
55
|
-
}
|
|
56
|
-
return sum;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Compute cosine similarity between two vectors
|
|
60
|
-
*/
|
|
61
|
-
cosineSimilarity(a, b) {
|
|
62
|
-
if (this.native) {
|
|
63
|
-
return this.native.cosineSimilarity(a, b);
|
|
64
|
-
}
|
|
65
|
-
// JavaScript fallback
|
|
66
|
-
let dot = 0;
|
|
67
|
-
let normA = 0;
|
|
68
|
-
let normB = 0;
|
|
69
|
-
const len = Math.min(a.length, b.length);
|
|
70
|
-
for (let i = 0; i < len; i++) {
|
|
71
|
-
dot += a[i] * b[i];
|
|
72
|
-
normA += a[i] * a[i];
|
|
73
|
-
normB += b[i] * b[i];
|
|
74
|
-
}
|
|
75
|
-
const denom = Math.sqrt(normA) * Math.sqrt(normB);
|
|
76
|
-
return denom > 0 ? dot / denom : 0;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Compute L2 (Euclidean) distance between two vectors
|
|
80
|
-
*/
|
|
81
|
-
l2Distance(a, b) {
|
|
82
|
-
if (this.native) {
|
|
83
|
-
return this.native.l2Distance(a, b);
|
|
84
|
-
}
|
|
85
|
-
// JavaScript fallback
|
|
86
|
-
let sum = 0;
|
|
87
|
-
const len = Math.min(a.length, b.length);
|
|
88
|
-
for (let i = 0; i < len; i++) {
|
|
89
|
-
const diff = a[i] - b[i];
|
|
90
|
-
sum += diff * diff;
|
|
91
|
-
}
|
|
92
|
-
return Math.sqrt(sum);
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Matrix-vector multiplication
|
|
96
|
-
*/
|
|
97
|
-
matvec(matrix, vector) {
|
|
98
|
-
if (this.native) {
|
|
99
|
-
return this.native.matvec(matrix, vector);
|
|
100
|
-
}
|
|
101
|
-
// JavaScript fallback
|
|
102
|
-
return matrix.map(row => this.dotProduct(row, vector));
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Softmax activation function
|
|
106
|
-
*/
|
|
107
|
-
softmax(input) {
|
|
108
|
-
if (this.native) {
|
|
109
|
-
return this.native.softmax(input);
|
|
110
|
-
}
|
|
111
|
-
// JavaScript fallback
|
|
112
|
-
const max = Math.max(...input);
|
|
113
|
-
const exps = input.map(x => Math.exp(x - max));
|
|
114
|
-
const sum = exps.reduce((a, b) => a + b, 0);
|
|
115
|
-
return exps.map(x => x / sum);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Element-wise addition
|
|
119
|
-
*/
|
|
120
|
-
add(a, b) {
|
|
121
|
-
const len = Math.min(a.length, b.length);
|
|
122
|
-
const result = new Array(len);
|
|
123
|
-
for (let i = 0; i < len; i++) {
|
|
124
|
-
result[i] = a[i] + b[i];
|
|
125
|
-
}
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Element-wise multiplication
|
|
130
|
-
*/
|
|
131
|
-
mul(a, b) {
|
|
132
|
-
const len = Math.min(a.length, b.length);
|
|
133
|
-
const result = new Array(len);
|
|
134
|
-
for (let i = 0; i < len; i++) {
|
|
135
|
-
result[i] = a[i] * b[i];
|
|
136
|
-
}
|
|
137
|
-
return result;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Scale vector by scalar
|
|
141
|
-
*/
|
|
142
|
-
scale(a, scalar) {
|
|
143
|
-
return a.map(x => x * scalar);
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Normalize vector to unit length
|
|
147
|
-
*/
|
|
148
|
-
normalize(a) {
|
|
149
|
-
const norm = Math.sqrt(a.reduce((sum, x) => sum + x * x, 0));
|
|
150
|
-
return norm > 0 ? a.map(x => x / norm) : a;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* ReLU activation
|
|
154
|
-
*/
|
|
155
|
-
relu(input) {
|
|
156
|
-
return input.map(x => Math.max(0, x));
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* GELU activation (approximate)
|
|
160
|
-
*/
|
|
161
|
-
gelu(input) {
|
|
162
|
-
return input.map(x => {
|
|
163
|
-
return 0.5 * x * (1 + Math.tanh(Math.sqrt(2 / Math.PI) * (x + 0.044715 * x * x * x)));
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Sigmoid activation
|
|
168
|
-
*/
|
|
169
|
-
sigmoid(input) {
|
|
170
|
-
return input.map(x => 1 / (1 + Math.exp(-x)));
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Layer normalization
|
|
174
|
-
*/
|
|
175
|
-
layerNorm(input, eps = 1e-5) {
|
|
176
|
-
const mean = input.reduce((a, b) => a + b, 0) / input.length;
|
|
177
|
-
const variance = input.reduce((sum, x) => sum + (x - mean) ** 2, 0) / input.length;
|
|
178
|
-
const std = Math.sqrt(variance + eps);
|
|
179
|
-
return input.map(x => (x - mean) / std);
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Check if native SIMD is available
|
|
183
|
-
*/
|
|
184
|
-
isNative() {
|
|
185
|
-
return this.native !== null;
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Get available SIMD capabilities
|
|
189
|
-
*/
|
|
190
|
-
capabilities() {
|
|
191
|
-
if (!this.native) {
|
|
192
|
-
return ['JavaScript (scalar)'];
|
|
193
|
-
}
|
|
194
|
-
// The native module will report actual capabilities
|
|
195
|
-
const mod = (0, native_1.getNativeModule)();
|
|
196
|
-
if (mod) {
|
|
197
|
-
try {
|
|
198
|
-
const engine = new mod.RuvLLMEngine();
|
|
199
|
-
return engine.simdCapabilities();
|
|
200
|
-
}
|
|
201
|
-
catch {
|
|
202
|
-
return ['Native (unknown)'];
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return ['JavaScript (scalar)'];
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
exports.SimdOps = SimdOps;
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW1kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgscUNBQTBEO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLE9BQU87SUFHbEI7UUFGUSxXQUFNLEdBQXlCLElBQUksQ0FBQztRQUcxQyxNQUFNLEdBQUcsR0FBRyxJQUFBLHdCQUFlLEdBQUUsQ0FBQztRQUM5QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxpQ0FBaUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsQ0FBVyxFQUFFLENBQVc7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFB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QUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsTUFBTSxHQUFHLEdBQUcsSUFBQSx3QkFBZSxHQUFFLENBQUM7UUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBeE1ELDBCQXdNQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU0lNRCBPcGVyYXRpb25zIGZvciB2ZWN0b3IgY29tcHV0YXRpb25zXG4gKlxuICogVXNlcyBuYXRpdmUgU0lNRCBpbnN0cnVjdGlvbnMgKEFWWDIvQVZYNTEyL1NTRTQuMS9ORU9OKSB3aGVuIGF2YWlsYWJsZSxcbiAqIGZhbGxzIGJhY2sgdG8gSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbnMgb3RoZXJ3aXNlLlxuICovXG5cbmltcG9ydCB7IGdldE5hdGl2ZU1vZHVsZSwgTmF0aXZlU2ltZE9wcyB9IGZyb20gJy4vbmF0aXZlJztcblxuLyoqXG4gKiBTSU1EIE9wZXJhdGlvbnMgY2xhc3NcbiAqXG4gKiBQcm92aWRlcyBoYXJkd2FyZS1hY2NlbGVyYXRlZCB2ZWN0b3Igb3BlcmF0aW9ucyB3aGVuIG5hdGl2ZSBtb2R1bGUgaXMgYXZhaWxhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTaW1kT3BzIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogY29uc3Qgc2ltZCA9IG5ldyBTaW1kT3BzKCk7XG4gKlxuICogLy8gQ29tcHV0ZSBkb3QgcHJvZHVjdFxuICogY29uc3QgcmVzdWx0ID0gc2ltZC5kb3RQcm9kdWN0KFsxLCAyLCAzXSwgWzQsIDUsIDZdKTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdCk7IC8vIDMyXG4gKlxuICogLy8gQ2hlY2sgY2FwYWJpbGl0aWVzXG4gKiBjb25zb2xlLmxvZyhzaW1kLmNhcGFiaWxpdGllcygpKTsgLy8gWydBVlgyJywgJ0ZNQSddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbWRPcHMge1xuICBwcml2YXRlIG5hdGl2ZTogTmF0aXZlU2ltZE9wcyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG1vZCA9IGdldE5hdGl2ZU1vZHVsZSgpO1xuICAgIGlmIChtb2QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmV3IG1vZC5TaW1kT3BlcmF0aW9ucygpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBKUyBpbXBsZW1lbnRhdGlvblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzXG4gICAqL1xuICBkb3RQcm9kdWN0KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZG90UHJvZHVjdChhLCBiKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgY29uc3QgbGVuID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzdW0gKz0gYVtpXSAqIGJbaV07XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBjb3NpbmUgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byB2ZWN0b3JzXG4gICAqL1xuICBjb3NpbmVTaW1pbGFyaXR5KGE6IG51bWJlcltdLCBiOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY29zaW5lU2ltaWxhcml0eShhLCBiKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgbGV0IGRvdCA9IDA7XG4gICAgbGV0IG5vcm1BID0gMDtcbiAgICBsZXQgbm9ybUIgPSAwO1xuXG4gICAgY29uc3QgbGVuID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBkb3QgKz0gYVtpXSAqIGJbaV07XG4gICAgICBub3JtQSArPSBhW2ldICogYVtpXTtcbiAgICAgIG5vcm1CICs9IGJbaV0gKiBiW2ldO1xuICAgIH1cblxuICAgIGNvbnN0IGRlbm9tID0gTWF0aC5zcXJ0KG5vcm1BKSAqIE1hdGguc3FydChub3JtQik7XG4gICAgcmV0dXJuIGRlbm9tID4gMCA/IGRvdCAvIGRlbm9tIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIEwyIChFdWNsaWRlYW4pIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnNcbiAgICovXG4gIGwyRGlzdGFuY2UoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5uYXRpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5sMkRpc3RhbmNlKGEsIGIpO1xuICAgIH1cblxuICAgIC8vIEphdmFTY3JpcHQgZmFsbGJhY2tcbiAgICBsZXQgc3VtID0gMDtcbiAgICBjb25zdCBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGRpZmYgPSBhW2ldIC0gYltpXTtcbiAgICAgIHN1bSArPSBkaWZmICogZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hdHJpeC12ZWN0b3IgbXVsdGlwbGljYXRpb25cbiAgICovXG4gIG1hdHZlYyhtYXRyaXg6IG51bWJlcltdW10sIHZlY3RvcjogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUubWF0dmVjKG1hdHJpeCwgdmVjdG9yKTtcbiAgICB9XG5cbiAgICAvLyBKYXZhU2NyaXB0IGZhbGxiYWNrXG4gICAgcmV0dXJuIG1hdHJpeC5tYXAocm93ID0+IHRoaXMuZG90UHJvZHVjdChyb3csIHZlY3RvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvZnRtYXggYWN0aXZhdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgc29mdG1heChpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgaWYgKHRoaXMubmF0aXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuc29mdG1heChpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gSmF2YVNjcmlwdCBmYWxsYmFja1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmlucHV0KTtcbiAgICBjb25zdCBleHBzID0gaW5wdXQubWFwKHggPT4gTWF0aC5leHAoeCAtIG1heCkpO1xuICAgIGNvbnN0IHN1bSA9IGV4cHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgcmV0dXJuIGV4cHMubWFwKHggPT4geCAvIHN1bSk7XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudC13aXNlIGFkZGl0aW9uXG4gICAqL1xuICBhZGQoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYVtpXSArIGJbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRWxlbWVudC13aXNlIG11bHRpcGxpY2F0aW9uXG4gICAqL1xuICBtdWwoYTogbnVtYmVyW10sIGI6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IGxlbiA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gYVtpXSAqIGJbaV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2NhbGUgdmVjdG9yIGJ5IHNjYWxhclxuICAgKi9cbiAgc2NhbGUoYTogbnVtYmVyW10sIHNjYWxhcjogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBhLm1hcCh4ID0+IHggKiBzY2FsYXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB2ZWN0b3IgdG8gdW5pdCBsZW5ndGhcbiAgICovXG4gIG5vcm1hbGl6ZShhOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBub3JtID0gTWF0aC5zcXJ0KGEucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHggKiB4LCAwKSk7XG4gICAgcmV0dXJuIG5vcm0gPiAwID8gYS5tYXAoeCA9PiB4IC8gbm9ybSkgOiBhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlTFUgYWN0aXZhdGlvblxuICAgKi9cbiAgcmVsdShpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCh4ID0+IE1hdGgubWF4KDAsIHgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHRUxVIGFjdGl2YXRpb24gKGFwcHJveGltYXRlKVxuICAgKi9cbiAgZ2VsdShpbnB1dDogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIGlucHV0Lm1hcCh4ID0+IHtcbiAgICAgIHJldHVybiAwLjUgKiB4ICogKDEgKyBNYXRoLnRhbmgoTWF0aC5zcXJ0KDIgLyBNYXRoLlBJKSAqICh4ICsgMC4wNDQ3MTUgKiB4ICogeCAqIHgpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbW9pZCBhY3RpdmF0aW9uXG4gICAqL1xuICBzaWdtb2lkKGlucHV0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKHggPT4gMSAvICgxICsgTWF0aC5leHAoLXgpKSk7XG4gIH1cblxuICAvKipcbiAgICogTGF5ZXIgbm9ybWFsaXphdGlvblxuICAgKi9cbiAgbGF5ZXJOb3JtKGlucHV0OiBudW1iZXJbXSwgZXBzID0gMWUtNSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBtZWFuID0gaW5wdXQucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgLyBpbnB1dC5sZW5ndGg7XG4gICAgY29uc3QgdmFyaWFuY2UgPSBpbnB1dC5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgKHggLSBtZWFuKSAqKiAyLCAwKSAvIGlucHV0Lmxlbmd0aDtcbiAgICBjb25zdCBzdGQgPSBNYXRoLnNxcnQodmFyaWFuY2UgKyBlcHMpO1xuICAgIHJldHVybiBpbnB1dC5tYXAoeCA9PiAoeCAtIG1lYW4pIC8gc3RkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBuYXRpdmUgU0lNRCBpcyBhdmFpbGFibGVcbiAgICovXG4gIGlzTmF0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5hdGl2ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXZhaWxhYmxlIFNJTUQgY2FwYWJpbGl0aWVzXG4gICAqL1xuICBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5uYXRpdmUpIHtcbiAgICAgIHJldHVybiBbJ0phdmFTY3JpcHQgKHNjYWxhciknXTtcbiAgICB9XG5cbiAgICAvLyBUaGUgbmF0aXZlIG1vZHVsZSB3aWxsIHJlcG9ydCBhY3R1YWwgY2FwYWJpbGl0aWVzXG4gICAgY29uc3QgbW9kID0gZ2V0TmF0aXZlTW9kdWxlKCk7XG4gICAgaWYgKG1vZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZW5naW5lID0gbmV3IG1vZC5SdXZMTE1FbmdpbmUoKTtcbiAgICAgICAgcmV0dXJuIGVuZ2luZS5zaW1kQ2FwYWJpbGl0aWVzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFsnTmF0aXZlICh1bmtub3duKSddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbJ0phdmFTY3JpcHQgKHNjYWxhciknXTtcbiAgfVxufVxuIl19
|
package/dist/cjs/sona.d.ts
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SONA (Self-Optimizing Neural Architecture) Learning System
|
|
3
|
-
*
|
|
4
|
-
* Provides adaptive learning capabilities with trajectory tracking,
|
|
5
|
-
* pattern recognition, and memory protection (EWC++).
|
|
6
|
-
*/
|
|
7
|
-
import { SonaConfig, LearningSignal, QueryTrajectory, TrajectoryStep, TrajectoryOutcome, LearnedPattern, PatternType, EwcStats, Embedding } from './types';
|
|
8
|
-
/**
|
|
9
|
-
* Default SONA configuration
|
|
10
|
-
*/
|
|
11
|
-
declare const DEFAULT_SONA_CONFIG: Required<SonaConfig>;
|
|
12
|
-
/**
|
|
13
|
-
* Trajectory Builder for tracking query execution paths
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* const builder = new TrajectoryBuilder();
|
|
18
|
-
*
|
|
19
|
-
* builder.startStep('query', 'What is AI?');
|
|
20
|
-
* // ... processing ...
|
|
21
|
-
* builder.endStep('AI is artificial intelligence', 0.95);
|
|
22
|
-
*
|
|
23
|
-
* builder.startStep('memory', 'searching context');
|
|
24
|
-
* builder.endStep('found 3 relevant documents', 0.88);
|
|
25
|
-
*
|
|
26
|
-
* const trajectory = builder.complete('success');
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare class TrajectoryBuilder {
|
|
30
|
-
private id;
|
|
31
|
-
private steps;
|
|
32
|
-
private currentStep;
|
|
33
|
-
private stepStart;
|
|
34
|
-
private startTime;
|
|
35
|
-
constructor();
|
|
36
|
-
/**
|
|
37
|
-
* Start a new step in the trajectory
|
|
38
|
-
*/
|
|
39
|
-
startStep(type: TrajectoryStep['type'], input: string): this;
|
|
40
|
-
/**
|
|
41
|
-
* End current step with output
|
|
42
|
-
*/
|
|
43
|
-
endStep(output: string, confidence: number): this;
|
|
44
|
-
/**
|
|
45
|
-
* Complete trajectory with final outcome
|
|
46
|
-
*/
|
|
47
|
-
complete(outcome: TrajectoryOutcome): QueryTrajectory;
|
|
48
|
-
/**
|
|
49
|
-
* Get current trajectory ID
|
|
50
|
-
*/
|
|
51
|
-
getId(): string;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* ReasoningBank - Pattern storage and retrieval
|
|
55
|
-
*
|
|
56
|
-
* Stores learned patterns from successful interactions and
|
|
57
|
-
* enables pattern-based reasoning shortcuts.
|
|
58
|
-
*
|
|
59
|
-
* OPTIMIZED: Uses Float64Array for embeddings and partial sorting
|
|
60
|
-
*/
|
|
61
|
-
export declare class ReasoningBank {
|
|
62
|
-
private patterns;
|
|
63
|
-
private embeddings;
|
|
64
|
-
private embeddingNorms;
|
|
65
|
-
private threshold;
|
|
66
|
-
private _similarityResults;
|
|
67
|
-
constructor(threshold?: number);
|
|
68
|
-
/**
|
|
69
|
-
* Store a new pattern
|
|
70
|
-
*/
|
|
71
|
-
store(type: PatternType, embedding: Embedding, metadata?: Record<string, unknown>): string;
|
|
72
|
-
/**
|
|
73
|
-
* Find similar patterns
|
|
74
|
-
* OPTIMIZED: Uses typed arrays, pre-computed norms, and partial sorting
|
|
75
|
-
*/
|
|
76
|
-
findSimilar(embedding: Embedding, k?: number): LearnedPattern[];
|
|
77
|
-
/**
|
|
78
|
-
* Partial sort to get top k elements (faster than full sort)
|
|
79
|
-
*/
|
|
80
|
-
private partialSort;
|
|
81
|
-
/**
|
|
82
|
-
* Record pattern usage (success or failure)
|
|
83
|
-
*/
|
|
84
|
-
recordUsage(patternId: string, success: boolean): void;
|
|
85
|
-
/**
|
|
86
|
-
* Get pattern by ID
|
|
87
|
-
*/
|
|
88
|
-
get(patternId: string): LearnedPattern | undefined;
|
|
89
|
-
/**
|
|
90
|
-
* Get all patterns of a type
|
|
91
|
-
*/
|
|
92
|
-
getByType(type: PatternType): LearnedPattern[];
|
|
93
|
-
/**
|
|
94
|
-
* Prune low-performing patterns
|
|
95
|
-
*/
|
|
96
|
-
prune(minSuccessRate?: number, minUseCount?: number): number;
|
|
97
|
-
/**
|
|
98
|
-
* Get statistics
|
|
99
|
-
*/
|
|
100
|
-
stats(): {
|
|
101
|
-
totalPatterns: number;
|
|
102
|
-
avgSuccessRate: number;
|
|
103
|
-
byType: Record<string, number>;
|
|
104
|
-
};
|
|
105
|
-
private cosineSimilarity;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* EWC++ (Elastic Weight Consolidation) Manager
|
|
109
|
-
*
|
|
110
|
-
* Prevents catastrophic forgetting by protecting important weights.
|
|
111
|
-
* This is a simplified JS implementation of the concept.
|
|
112
|
-
*
|
|
113
|
-
* OPTIMIZED: Uses Float64Array for 5-10x faster penalty computation
|
|
114
|
-
*/
|
|
115
|
-
export declare class EwcManager {
|
|
116
|
-
private lambda;
|
|
117
|
-
private tasksLearned;
|
|
118
|
-
private fisherDiagonal;
|
|
119
|
-
private optimalWeights;
|
|
120
|
-
private _penaltyBuffer;
|
|
121
|
-
constructor(lambda?: number);
|
|
122
|
-
/**
|
|
123
|
-
* Register a new task (after successful learning)
|
|
124
|
-
*/
|
|
125
|
-
registerTask(taskId: string, weights: number[]): void;
|
|
126
|
-
/**
|
|
127
|
-
* Compute EWC penalty for weight update
|
|
128
|
-
* OPTIMIZED: Uses typed arrays and minimizes allocations
|
|
129
|
-
*/
|
|
130
|
-
computePenalty(currentWeights: number[]): number;
|
|
131
|
-
/**
|
|
132
|
-
* Get EWC statistics
|
|
133
|
-
*/
|
|
134
|
-
stats(): EwcStats;
|
|
135
|
-
private estimateForgettingRate;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* SONA Learning Coordinator
|
|
139
|
-
*
|
|
140
|
-
* Orchestrates the learning loops and components.
|
|
141
|
-
*/
|
|
142
|
-
export declare class SonaCoordinator {
|
|
143
|
-
private config;
|
|
144
|
-
private trajectoryBuffer;
|
|
145
|
-
private reasoningBank;
|
|
146
|
-
private ewcManager;
|
|
147
|
-
private signalBuffer;
|
|
148
|
-
private microLora;
|
|
149
|
-
private microLoraUpdates;
|
|
150
|
-
constructor(config?: SonaConfig);
|
|
151
|
-
/**
|
|
152
|
-
* Record a learning signal
|
|
153
|
-
*
|
|
154
|
-
* Every signal drives the instant loop: quality above 0.5 reinforces the
|
|
155
|
-
* signal's direction in the micro-LoRA, quality below 0.5 unlearns it
|
|
156
|
-
* (previously only quality >= 0.8 was processed, so negative feedback
|
|
157
|
-
* never adapted anything).
|
|
158
|
-
*/
|
|
159
|
-
recordSignal(signal: LearningSignal): void;
|
|
160
|
-
/**
|
|
161
|
-
* Record a completed trajectory
|
|
162
|
-
*/
|
|
163
|
-
recordTrajectory(trajectory: QueryTrajectory): void;
|
|
164
|
-
/**
|
|
165
|
-
* Run background learning loop
|
|
166
|
-
*/
|
|
167
|
-
runBackgroundLoop(): {
|
|
168
|
-
patternsLearned: number;
|
|
169
|
-
trajectoriesProcessed: number;
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* Get reasoning bank for pattern queries
|
|
173
|
-
*/
|
|
174
|
-
getReasoningBank(): ReasoningBank;
|
|
175
|
-
/**
|
|
176
|
-
* Get EWC manager
|
|
177
|
-
*/
|
|
178
|
-
getEwcManager(): EwcManager;
|
|
179
|
-
/**
|
|
180
|
-
* Get statistics
|
|
181
|
-
*/
|
|
182
|
-
stats(): {
|
|
183
|
-
signalsReceived: number;
|
|
184
|
-
trajectoriesBuffered: number;
|
|
185
|
-
patterns: ReturnType<ReasoningBank['stats']>;
|
|
186
|
-
ewc: EwcStats;
|
|
187
|
-
microLora: {
|
|
188
|
-
updates: number;
|
|
189
|
-
deltaNorm: number;
|
|
190
|
-
};
|
|
191
|
-
};
|
|
192
|
-
/**
|
|
193
|
-
* Apply the micro-LoRA transformation learned from feedback.
|
|
194
|
-
*
|
|
195
|
-
* Input is truncated/zero-padded to the adapter dimension; the residual
|
|
196
|
-
* connection means an untrained adapter returns the input unchanged.
|
|
197
|
-
*/
|
|
198
|
-
applyMicroLora(input: number[]): number[];
|
|
199
|
-
/**
|
|
200
|
-
* Frobenius norm of the micro-LoRA weight delta (scaling * A @ B).
|
|
201
|
-
*
|
|
202
|
-
* 0 means no adaptation has occurred (LoRA B is zero-initialized, so the
|
|
203
|
-
* delta is exactly zero until the first feedback update). Consumers can
|
|
204
|
-
* surface this directly (e.g. a statusline "delta LoRA" field) — see #553.
|
|
205
|
-
*/
|
|
206
|
-
microLoraDeltaNorm(): number;
|
|
207
|
-
/**
|
|
208
|
-
* Instant-loop learning: a single feedback signal produces a real
|
|
209
|
-
* micro-LoRA weight update (fixes #553 — this was a no-op stub, so
|
|
210
|
-
* learn-from-feedback never changed any weight).
|
|
211
|
-
*
|
|
212
|
-
* REINFORCE-style with a fixed 0.5 baseline: reward = quality - 0.5.
|
|
213
|
-
* The gradient pushes the adapter output toward the signal's embedding
|
|
214
|
-
* direction for positive reward and away from it for negative reward
|
|
215
|
-
* (backward() applies `weights -= lr * grad`, hence the negated sign).
|
|
216
|
-
*/
|
|
217
|
-
private processInstantLearning;
|
|
218
|
-
private extractPatterns;
|
|
219
|
-
private stepTypeToPatternType;
|
|
220
|
-
private createEmbedding;
|
|
221
|
-
}
|
|
222
|
-
export { DEFAULT_SONA_CONFIG, };
|
|
223
|
-
//# sourceMappingURL=sona.d.ts.map
|
package/dist/cjs/sona.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sona.d.ts","sourceRoot":"","sources":["../../src/sona.ts"],"names":[],"mappings":"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"}
|