@sparkleideas/neural 3.5.2-patch.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +260 -0
- package/__tests__/README.md +235 -0
- package/__tests__/algorithms.test.ts +582 -0
- package/__tests__/patterns.test.ts +549 -0
- package/__tests__/sona.test.ts +445 -0
- package/docs/SONA_INTEGRATION.md +460 -0
- package/docs/SONA_QUICKSTART.md +168 -0
- package/examples/sona-usage.ts +318 -0
- package/package.json +23 -0
- package/src/algorithms/a2c.d.ts +86 -0
- package/src/algorithms/a2c.d.ts.map +1 -0
- package/src/algorithms/a2c.js +361 -0
- package/src/algorithms/a2c.js.map +1 -0
- package/src/algorithms/a2c.ts +478 -0
- package/src/algorithms/curiosity.d.ts +82 -0
- package/src/algorithms/curiosity.d.ts.map +1 -0
- package/src/algorithms/curiosity.js +392 -0
- package/src/algorithms/curiosity.js.map +1 -0
- package/src/algorithms/curiosity.ts +509 -0
- package/src/algorithms/decision-transformer.d.ts +82 -0
- package/src/algorithms/decision-transformer.d.ts.map +1 -0
- package/src/algorithms/decision-transformer.js +415 -0
- package/src/algorithms/decision-transformer.js.map +1 -0
- package/src/algorithms/decision-transformer.ts +521 -0
- package/src/algorithms/dqn.d.ts +72 -0
- package/src/algorithms/dqn.d.ts.map +1 -0
- package/src/algorithms/dqn.js +303 -0
- package/src/algorithms/dqn.js.map +1 -0
- package/src/algorithms/dqn.ts +382 -0
- package/src/algorithms/index.d.ts +32 -0
- package/src/algorithms/index.d.ts.map +1 -0
- package/src/algorithms/index.js +74 -0
- package/src/algorithms/index.js.map +1 -0
- package/src/algorithms/index.ts +122 -0
- package/src/algorithms/ppo.d.ts +72 -0
- package/src/algorithms/ppo.d.ts.map +1 -0
- package/src/algorithms/ppo.js +331 -0
- package/src/algorithms/ppo.js.map +1 -0
- package/src/algorithms/ppo.ts +429 -0
- package/src/algorithms/q-learning.d.ts +77 -0
- package/src/algorithms/q-learning.d.ts.map +1 -0
- package/src/algorithms/q-learning.js +259 -0
- package/src/algorithms/q-learning.js.map +1 -0
- package/src/algorithms/q-learning.ts +333 -0
- package/src/algorithms/sarsa.d.ts +82 -0
- package/src/algorithms/sarsa.d.ts.map +1 -0
- package/src/algorithms/sarsa.js +297 -0
- package/src/algorithms/sarsa.js.map +1 -0
- package/src/algorithms/sarsa.ts +383 -0
- package/src/algorithms/tmp.json +0 -0
- package/src/application/index.ts +11 -0
- package/src/application/services/neural-application-service.ts +217 -0
- package/src/domain/entities/pattern.ts +169 -0
- package/src/domain/index.ts +18 -0
- package/src/domain/services/learning-service.ts +256 -0
- package/src/index.d.ts +118 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +201 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +363 -0
- package/src/modes/balanced.d.ts +60 -0
- package/src/modes/balanced.d.ts.map +1 -0
- package/src/modes/balanced.js +234 -0
- package/src/modes/balanced.js.map +1 -0
- package/src/modes/balanced.ts +299 -0
- package/src/modes/base.ts +163 -0
- package/src/modes/batch.d.ts +82 -0
- package/src/modes/batch.d.ts.map +1 -0
- package/src/modes/batch.js +316 -0
- package/src/modes/batch.js.map +1 -0
- package/src/modes/batch.ts +434 -0
- package/src/modes/edge.d.ts +85 -0
- package/src/modes/edge.d.ts.map +1 -0
- package/src/modes/edge.js +310 -0
- package/src/modes/edge.js.map +1 -0
- package/src/modes/edge.ts +409 -0
- package/src/modes/index.d.ts +55 -0
- package/src/modes/index.d.ts.map +1 -0
- package/src/modes/index.js +83 -0
- package/src/modes/index.js.map +1 -0
- package/src/modes/index.ts +16 -0
- package/src/modes/real-time.d.ts +58 -0
- package/src/modes/real-time.d.ts.map +1 -0
- package/src/modes/real-time.js +196 -0
- package/src/modes/real-time.js.map +1 -0
- package/src/modes/real-time.ts +257 -0
- package/src/modes/research.d.ts +79 -0
- package/src/modes/research.d.ts.map +1 -0
- package/src/modes/research.js +389 -0
- package/src/modes/research.js.map +1 -0
- package/src/modes/research.ts +486 -0
- package/src/modes/tmp.json +0 -0
- package/src/pattern-learner.d.ts +117 -0
- package/src/pattern-learner.d.ts.map +1 -0
- package/src/pattern-learner.js +603 -0
- package/src/pattern-learner.js.map +1 -0
- package/src/pattern-learner.ts +757 -0
- package/src/reasoning-bank.d.ts +259 -0
- package/src/reasoning-bank.d.ts.map +1 -0
- package/src/reasoning-bank.js +993 -0
- package/src/reasoning-bank.js.map +1 -0
- package/src/reasoning-bank.ts +1279 -0
- package/src/reasoningbank-adapter.ts +697 -0
- package/src/sona-integration.d.ts +168 -0
- package/src/sona-integration.d.ts.map +1 -0
- package/src/sona-integration.js +316 -0
- package/src/sona-integration.js.map +1 -0
- package/src/sona-integration.ts +432 -0
- package/src/sona-manager.d.ts +147 -0
- package/src/sona-manager.d.ts.map +1 -0
- package/src/sona-manager.js +695 -0
- package/src/sona-manager.js.map +1 -0
- package/src/sona-manager.ts +835 -0
- package/src/tmp.json +0 -0
- package/src/types.d.ts +431 -0
- package/src/types.d.ts.map +1 -0
- package/src/types.js +11 -0
- package/src/types.js.map +1 -0
- package/src/types.ts +590 -0
- package/tmp.json +0 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +19 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SONA Integration for V3 Neural Module
|
|
3
|
+
*
|
|
4
|
+
* Wraps @ruvector/sona package for V3 usage with:
|
|
5
|
+
* - Trajectory tracking and verdict judgment
|
|
6
|
+
* - Pattern extraction and memory distillation
|
|
7
|
+
* - Sub-0.05ms learning performance target
|
|
8
|
+
* - Clean TypeScript API with proper types
|
|
9
|
+
*
|
|
10
|
+
* @module sona-integration
|
|
11
|
+
*/
|
|
12
|
+
import { type JsSonaConfig, type JsLearnedPattern } from '@ruvector/sona';
|
|
13
|
+
import type { Trajectory, SONAMode, SONAModeConfig } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Context for SONA learning adaptation
|
|
16
|
+
*/
|
|
17
|
+
export interface Context {
|
|
18
|
+
/** Task domain */
|
|
19
|
+
domain: 'code' | 'creative' | 'reasoning' | 'chat' | 'math' | 'general';
|
|
20
|
+
/** Current query embedding */
|
|
21
|
+
queryEmbedding: Float32Array;
|
|
22
|
+
/** Additional context metadata */
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Adapted behavior result from SONA
|
|
27
|
+
*/
|
|
28
|
+
export interface AdaptedBehavior {
|
|
29
|
+
/** Transformed query embedding after micro-LoRA */
|
|
30
|
+
transformedQuery: Float32Array;
|
|
31
|
+
/** Similar learned patterns */
|
|
32
|
+
patterns: JsLearnedPattern[];
|
|
33
|
+
/** Suggested route/model */
|
|
34
|
+
suggestedRoute?: string;
|
|
35
|
+
/** Confidence score */
|
|
36
|
+
confidence: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* SONA engine statistics
|
|
40
|
+
*/
|
|
41
|
+
export interface SONAStats {
|
|
42
|
+
/** Total trajectories recorded */
|
|
43
|
+
totalTrajectories: number;
|
|
44
|
+
/** Patterns learned */
|
|
45
|
+
patternsLearned: number;
|
|
46
|
+
/** Average quality */
|
|
47
|
+
avgQuality: number;
|
|
48
|
+
/** Last learning time (ms) */
|
|
49
|
+
lastLearningMs: number;
|
|
50
|
+
/** Engine enabled state */
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* SONA Learning Engine - wraps @ruvector/sona for V3 usage
|
|
55
|
+
*
|
|
56
|
+
* Performance targets:
|
|
57
|
+
* - learn(): <0.05ms
|
|
58
|
+
* - adapt(): <0.1ms
|
|
59
|
+
* - Full learning cycle: <10ms
|
|
60
|
+
*/
|
|
61
|
+
export declare class SONALearningEngine {
|
|
62
|
+
private engine;
|
|
63
|
+
private trajectoryMap;
|
|
64
|
+
private adaptationTimeMs;
|
|
65
|
+
private learningTimeMs;
|
|
66
|
+
private mode;
|
|
67
|
+
private modeConfig;
|
|
68
|
+
constructor(mode: SONAMode, modeConfig: SONAModeConfig);
|
|
69
|
+
/**
|
|
70
|
+
* Learn from a trajectory
|
|
71
|
+
*
|
|
72
|
+
* Performance target: <0.05ms
|
|
73
|
+
*
|
|
74
|
+
* @param trajectory - Trajectory to learn from
|
|
75
|
+
*/
|
|
76
|
+
learn(trajectory: Trajectory): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Adapt behavior based on context
|
|
79
|
+
*
|
|
80
|
+
* @param context - Current context for adaptation
|
|
81
|
+
* @returns Adapted behavior with transformed embeddings
|
|
82
|
+
*/
|
|
83
|
+
adapt(context: Context): Promise<AdaptedBehavior>;
|
|
84
|
+
/**
|
|
85
|
+
* Get last adaptation time
|
|
86
|
+
*
|
|
87
|
+
* @returns Adaptation time in milliseconds
|
|
88
|
+
*/
|
|
89
|
+
getAdaptationTime(): number;
|
|
90
|
+
/**
|
|
91
|
+
* Get last learning time
|
|
92
|
+
*
|
|
93
|
+
* @returns Learning time in milliseconds
|
|
94
|
+
*/
|
|
95
|
+
getLearningTime(): number;
|
|
96
|
+
/**
|
|
97
|
+
* Reset learning state
|
|
98
|
+
*/
|
|
99
|
+
resetLearning(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Force immediate learning cycle
|
|
102
|
+
*
|
|
103
|
+
* @returns Status message
|
|
104
|
+
*/
|
|
105
|
+
forceLearning(): string;
|
|
106
|
+
/**
|
|
107
|
+
* Tick background learning (call periodically)
|
|
108
|
+
*
|
|
109
|
+
* @returns Status message if learning occurred
|
|
110
|
+
*/
|
|
111
|
+
tick(): string | null;
|
|
112
|
+
/**
|
|
113
|
+
* Get engine statistics
|
|
114
|
+
*
|
|
115
|
+
* @returns SONA engine statistics
|
|
116
|
+
*/
|
|
117
|
+
getStats(): SONAStats;
|
|
118
|
+
/**
|
|
119
|
+
* Enable or disable the engine
|
|
120
|
+
*
|
|
121
|
+
* @param enabled - Whether to enable the engine
|
|
122
|
+
*/
|
|
123
|
+
setEnabled(enabled: boolean): void;
|
|
124
|
+
/**
|
|
125
|
+
* Check if engine is enabled
|
|
126
|
+
*
|
|
127
|
+
* @returns Whether the engine is enabled
|
|
128
|
+
*/
|
|
129
|
+
isEnabled(): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Find learned patterns similar to query
|
|
132
|
+
*
|
|
133
|
+
* @param queryEmbedding - Query embedding
|
|
134
|
+
* @param k - Number of patterns to return
|
|
135
|
+
* @returns Learned patterns
|
|
136
|
+
*/
|
|
137
|
+
findPatterns(queryEmbedding: Float32Array, k?: number): JsLearnedPattern[];
|
|
138
|
+
/**
|
|
139
|
+
* Convert trajectory to query embedding
|
|
140
|
+
*/
|
|
141
|
+
private trajectoryToQueryEmbedding;
|
|
142
|
+
/**
|
|
143
|
+
* Convert state embedding to activations
|
|
144
|
+
*/
|
|
145
|
+
private stateToActivations;
|
|
146
|
+
/**
|
|
147
|
+
* Convert state embedding to attention weights
|
|
148
|
+
*/
|
|
149
|
+
private stateToAttentionWeights;
|
|
150
|
+
/**
|
|
151
|
+
* Calculate quality score for trajectory
|
|
152
|
+
*/
|
|
153
|
+
private calculateQuality;
|
|
154
|
+
/**
|
|
155
|
+
* Infer suggested route from patterns and context
|
|
156
|
+
*/
|
|
157
|
+
private inferRoute;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create a SONA learning engine
|
|
161
|
+
*
|
|
162
|
+
* @param mode - SONA learning mode
|
|
163
|
+
* @param modeConfig - Mode configuration
|
|
164
|
+
* @returns SONA learning engine instance
|
|
165
|
+
*/
|
|
166
|
+
export declare function createSONALearningEngine(mode: SONAMode, modeConfig: SONAModeConfig): SONALearningEngine;
|
|
167
|
+
export type { JsLearnedPattern, JsSonaConfig };
|
|
168
|
+
//# sourceMappingURL=sona-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sona-integration.d.ts","sourceRoot":"","sources":["sona-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EACV,UAAU,EAIV,QAAQ,EACR,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,kBAAkB;IAClB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxE,8BAA8B;IAC9B,cAAc,EAAE,YAAY,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,gBAAgB,EAAE,YAAY,CAAC;IAC/B,+BAA+B;IAC/B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAiED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,UAAU,CAAiB;gBAEvB,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc;IAOtD;;;;;;OAMG;IACG,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyClD;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAgCvD;;;;OAIG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;;OAIG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,aAAa,IAAI,IAAI;IASrB;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;;;OAIG;IACH,QAAQ,IAAI,SAAS;IAarB;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;;OAMG;IACH,YAAY,CAAC,cAAc,EAAE,YAAY,EAAE,CAAC,GAAE,MAAU,GAAG,gBAAgB,EAAE;IAQ7E;;OAEG;IACH,OAAO,CAAC,0BAA0B;IASlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB;AAMD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,cAAc,GACzB,kBAAkB,CAEpB;AAMD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SONA Integration for V3 Neural Module
|
|
3
|
+
*
|
|
4
|
+
* Wraps @ruvector/sona package for V3 usage with:
|
|
5
|
+
* - Trajectory tracking and verdict judgment
|
|
6
|
+
* - Pattern extraction and memory distillation
|
|
7
|
+
* - Sub-0.05ms learning performance target
|
|
8
|
+
* - Clean TypeScript API with proper types
|
|
9
|
+
*
|
|
10
|
+
* @module sona-integration
|
|
11
|
+
*/
|
|
12
|
+
import { SonaEngine } from '@ruvector/sona';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Mode Configuration Mapping
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Convert V3 SONA mode to @ruvector/sona config
|
|
18
|
+
*/
|
|
19
|
+
function modeToConfig(mode, modeConfig) {
|
|
20
|
+
const baseConfig = {
|
|
21
|
+
hiddenDim: 768, // Standard transformer dimension
|
|
22
|
+
embeddingDim: 768,
|
|
23
|
+
microLoraRank: modeConfig.loraRank <= 2 ? modeConfig.loraRank : 1,
|
|
24
|
+
baseLoraRank: modeConfig.loraRank,
|
|
25
|
+
microLoraLr: modeConfig.learningRate,
|
|
26
|
+
baseLoraLr: modeConfig.learningRate * 0.1,
|
|
27
|
+
ewcLambda: modeConfig.ewcLambda,
|
|
28
|
+
patternClusters: modeConfig.patternClusters,
|
|
29
|
+
trajectoryCapacity: modeConfig.trajectoryCapacity,
|
|
30
|
+
qualityThreshold: modeConfig.qualityThreshold,
|
|
31
|
+
enableSimd: true,
|
|
32
|
+
};
|
|
33
|
+
// Mode-specific adjustments
|
|
34
|
+
switch (mode) {
|
|
35
|
+
case 'real-time':
|
|
36
|
+
return {
|
|
37
|
+
...baseConfig,
|
|
38
|
+
microLoraRank: 1,
|
|
39
|
+
backgroundIntervalMs: 60000, // 1 minute
|
|
40
|
+
};
|
|
41
|
+
case 'edge':
|
|
42
|
+
return {
|
|
43
|
+
...baseConfig,
|
|
44
|
+
hiddenDim: 384, // Smaller for edge devices
|
|
45
|
+
embeddingDim: 384,
|
|
46
|
+
microLoraRank: 1,
|
|
47
|
+
patternClusters: 25,
|
|
48
|
+
backgroundIntervalMs: 300000, // 5 minutes
|
|
49
|
+
};
|
|
50
|
+
case 'research':
|
|
51
|
+
return {
|
|
52
|
+
...baseConfig,
|
|
53
|
+
baseLoraRank: 16,
|
|
54
|
+
backgroundIntervalMs: 3600000, // 1 hour
|
|
55
|
+
};
|
|
56
|
+
case 'batch':
|
|
57
|
+
return {
|
|
58
|
+
...baseConfig,
|
|
59
|
+
backgroundIntervalMs: 7200000, // 2 hours
|
|
60
|
+
};
|
|
61
|
+
case 'balanced':
|
|
62
|
+
default:
|
|
63
|
+
return {
|
|
64
|
+
...baseConfig,
|
|
65
|
+
backgroundIntervalMs: 1800000, // 30 minutes
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// =============================================================================
|
|
70
|
+
// SONA Learning Engine
|
|
71
|
+
// =============================================================================
|
|
72
|
+
/**
|
|
73
|
+
* SONA Learning Engine - wraps @ruvector/sona for V3 usage
|
|
74
|
+
*
|
|
75
|
+
* Performance targets:
|
|
76
|
+
* - learn(): <0.05ms
|
|
77
|
+
* - adapt(): <0.1ms
|
|
78
|
+
* - Full learning cycle: <10ms
|
|
79
|
+
*/
|
|
80
|
+
export class SONALearningEngine {
|
|
81
|
+
engine;
|
|
82
|
+
trajectoryMap = new Map();
|
|
83
|
+
adaptationTimeMs = 0;
|
|
84
|
+
learningTimeMs = 0;
|
|
85
|
+
mode;
|
|
86
|
+
modeConfig;
|
|
87
|
+
constructor(mode, modeConfig) {
|
|
88
|
+
this.mode = mode;
|
|
89
|
+
this.modeConfig = modeConfig;
|
|
90
|
+
const config = modeToConfig(mode, modeConfig);
|
|
91
|
+
this.engine = SonaEngine.withConfig(config);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Learn from a trajectory
|
|
95
|
+
*
|
|
96
|
+
* Performance target: <0.05ms
|
|
97
|
+
*
|
|
98
|
+
* @param trajectory - Trajectory to learn from
|
|
99
|
+
*/
|
|
100
|
+
async learn(trajectory) {
|
|
101
|
+
const startTime = performance.now();
|
|
102
|
+
try {
|
|
103
|
+
// Begin trajectory recording
|
|
104
|
+
const queryEmbedding = this.trajectoryToQueryEmbedding(trajectory);
|
|
105
|
+
const trajectoryId = this.engine.beginTrajectory(Array.from(queryEmbedding));
|
|
106
|
+
// Add trajectory steps
|
|
107
|
+
for (const step of trajectory.steps) {
|
|
108
|
+
const activations = this.stateToActivations(step.stateBefore);
|
|
109
|
+
const attentionWeights = this.stateToAttentionWeights(step.stateAfter);
|
|
110
|
+
this.engine.addTrajectoryStep(trajectoryId, Array.from(activations), Array.from(attentionWeights), step.reward);
|
|
111
|
+
}
|
|
112
|
+
// Set context if available
|
|
113
|
+
if (trajectory.domain) {
|
|
114
|
+
this.engine.addTrajectoryContext(trajectoryId, trajectory.domain);
|
|
115
|
+
}
|
|
116
|
+
// Complete trajectory with quality score
|
|
117
|
+
const quality = this.calculateQuality(trajectory);
|
|
118
|
+
this.engine.endTrajectory(trajectoryId, quality);
|
|
119
|
+
// Flush instant updates
|
|
120
|
+
this.engine.flush();
|
|
121
|
+
this.learningTimeMs = performance.now() - startTime;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw new Error(`SONA learning failed: ${error}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Adapt behavior based on context
|
|
129
|
+
*
|
|
130
|
+
* @param context - Current context for adaptation
|
|
131
|
+
* @returns Adapted behavior with transformed embeddings
|
|
132
|
+
*/
|
|
133
|
+
async adapt(context) {
|
|
134
|
+
const startTime = performance.now();
|
|
135
|
+
try {
|
|
136
|
+
// Apply micro-LoRA transformation
|
|
137
|
+
const transformedQuery = this.engine.applyMicroLora(Array.from(context.queryEmbedding));
|
|
138
|
+
// Find similar patterns
|
|
139
|
+
const patterns = this.engine.findPatterns(Array.from(context.queryEmbedding), 5);
|
|
140
|
+
// Determine suggested route from patterns
|
|
141
|
+
const suggestedRoute = this.inferRoute(patterns, context);
|
|
142
|
+
const confidence = patterns.length > 0 ? patterns[0].avgQuality : 0.5;
|
|
143
|
+
this.adaptationTimeMs = performance.now() - startTime;
|
|
144
|
+
return {
|
|
145
|
+
transformedQuery: new Float32Array(transformedQuery),
|
|
146
|
+
patterns,
|
|
147
|
+
suggestedRoute,
|
|
148
|
+
confidence,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`SONA adaptation failed: ${error}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get last adaptation time
|
|
157
|
+
*
|
|
158
|
+
* @returns Adaptation time in milliseconds
|
|
159
|
+
*/
|
|
160
|
+
getAdaptationTime() {
|
|
161
|
+
return this.adaptationTimeMs;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get last learning time
|
|
165
|
+
*
|
|
166
|
+
* @returns Learning time in milliseconds
|
|
167
|
+
*/
|
|
168
|
+
getLearningTime() {
|
|
169
|
+
return this.learningTimeMs;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Reset learning state
|
|
173
|
+
*/
|
|
174
|
+
resetLearning() {
|
|
175
|
+
// Create a new engine with the same config
|
|
176
|
+
const config = modeToConfig(this.mode, this.modeConfig);
|
|
177
|
+
this.engine = SonaEngine.withConfig(config);
|
|
178
|
+
this.trajectoryMap.clear();
|
|
179
|
+
this.adaptationTimeMs = 0;
|
|
180
|
+
this.learningTimeMs = 0;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Force immediate learning cycle
|
|
184
|
+
*
|
|
185
|
+
* @returns Status message
|
|
186
|
+
*/
|
|
187
|
+
forceLearning() {
|
|
188
|
+
return this.engine.forceLearn();
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Tick background learning (call periodically)
|
|
192
|
+
*
|
|
193
|
+
* @returns Status message if learning occurred
|
|
194
|
+
*/
|
|
195
|
+
tick() {
|
|
196
|
+
return this.engine.tick();
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get engine statistics
|
|
200
|
+
*
|
|
201
|
+
* @returns SONA engine statistics
|
|
202
|
+
*/
|
|
203
|
+
getStats() {
|
|
204
|
+
const statsJson = this.engine.getStats();
|
|
205
|
+
const stats = JSON.parse(statsJson);
|
|
206
|
+
return {
|
|
207
|
+
totalTrajectories: stats.total_trajectories || 0,
|
|
208
|
+
patternsLearned: stats.patterns_learned || 0,
|
|
209
|
+
avgQuality: stats.avg_quality || 0,
|
|
210
|
+
lastLearningMs: this.learningTimeMs,
|
|
211
|
+
enabled: this.engine.isEnabled(),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Enable or disable the engine
|
|
216
|
+
*
|
|
217
|
+
* @param enabled - Whether to enable the engine
|
|
218
|
+
*/
|
|
219
|
+
setEnabled(enabled) {
|
|
220
|
+
this.engine.setEnabled(enabled);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Check if engine is enabled
|
|
224
|
+
*
|
|
225
|
+
* @returns Whether the engine is enabled
|
|
226
|
+
*/
|
|
227
|
+
isEnabled() {
|
|
228
|
+
return this.engine.isEnabled();
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Find learned patterns similar to query
|
|
232
|
+
*
|
|
233
|
+
* @param queryEmbedding - Query embedding
|
|
234
|
+
* @param k - Number of patterns to return
|
|
235
|
+
* @returns Learned patterns
|
|
236
|
+
*/
|
|
237
|
+
findPatterns(queryEmbedding, k = 5) {
|
|
238
|
+
return this.engine.findPatterns(Array.from(queryEmbedding), k);
|
|
239
|
+
}
|
|
240
|
+
// =============================================================================
|
|
241
|
+
// Private Helpers
|
|
242
|
+
// =============================================================================
|
|
243
|
+
/**
|
|
244
|
+
* Convert trajectory to query embedding
|
|
245
|
+
*/
|
|
246
|
+
trajectoryToQueryEmbedding(trajectory) {
|
|
247
|
+
// Use the first step's state as query
|
|
248
|
+
if (trajectory.steps.length > 0) {
|
|
249
|
+
return trajectory.steps[0].stateBefore;
|
|
250
|
+
}
|
|
251
|
+
// Fallback to zero embedding
|
|
252
|
+
return new Float32Array(768);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Convert state embedding to activations
|
|
256
|
+
*/
|
|
257
|
+
stateToActivations(state) {
|
|
258
|
+
// For now, use state directly as activations
|
|
259
|
+
// In a real implementation, this would extract layer activations
|
|
260
|
+
return state;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Convert state embedding to attention weights
|
|
264
|
+
*/
|
|
265
|
+
stateToAttentionWeights(state) {
|
|
266
|
+
// For now, use normalized state as attention weights
|
|
267
|
+
// In a real implementation, this would extract attention patterns
|
|
268
|
+
const sum = state.reduce((acc, val) => acc + Math.abs(val), 0);
|
|
269
|
+
if (sum === 0)
|
|
270
|
+
return state;
|
|
271
|
+
const weights = new Float32Array(state.length);
|
|
272
|
+
for (let i = 0; i < state.length; i++) {
|
|
273
|
+
weights[i] = Math.abs(state[i]) / sum;
|
|
274
|
+
}
|
|
275
|
+
return weights;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Calculate quality score for trajectory
|
|
279
|
+
*/
|
|
280
|
+
calculateQuality(trajectory) {
|
|
281
|
+
if (trajectory.qualityScore !== undefined) {
|
|
282
|
+
return trajectory.qualityScore;
|
|
283
|
+
}
|
|
284
|
+
// Calculate from steps
|
|
285
|
+
if (trajectory.steps.length === 0)
|
|
286
|
+
return 0.5;
|
|
287
|
+
const avgReward = trajectory.steps.reduce((sum, step) => sum + step.reward, 0) /
|
|
288
|
+
trajectory.steps.length;
|
|
289
|
+
// Normalize to [0, 1]
|
|
290
|
+
return Math.max(0, Math.min(1, (avgReward + 1) / 2));
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Infer suggested route from patterns and context
|
|
294
|
+
*/
|
|
295
|
+
inferRoute(patterns, context) {
|
|
296
|
+
if (patterns.length === 0)
|
|
297
|
+
return undefined;
|
|
298
|
+
// Use the highest quality pattern's type as route
|
|
299
|
+
const bestPattern = patterns.reduce((best, pattern) => pattern.avgQuality > best.avgQuality ? pattern : best);
|
|
300
|
+
return bestPattern.patternType || `${context.domain}-default`;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// =============================================================================
|
|
304
|
+
// Factory Functions
|
|
305
|
+
// =============================================================================
|
|
306
|
+
/**
|
|
307
|
+
* Create a SONA learning engine
|
|
308
|
+
*
|
|
309
|
+
* @param mode - SONA learning mode
|
|
310
|
+
* @param modeConfig - Mode configuration
|
|
311
|
+
* @returns SONA learning engine instance
|
|
312
|
+
*/
|
|
313
|
+
export function createSONALearningEngine(mode, modeConfig) {
|
|
314
|
+
return new SONALearningEngine(mode, modeConfig);
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=sona-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sona-integration.js","sourceRoot":"","sources":["sona-integration.ts"],"names":[],"mappings":"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"}
|