@nahisaho/musubix-neural-search 2.1.1 → 2.2.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.
Files changed (69) hide show
  1. package/dist/EnhancedNeuralSearchManager.d.ts +215 -0
  2. package/dist/EnhancedNeuralSearchManager.d.ts.map +1 -0
  3. package/dist/EnhancedNeuralSearchManager.js +307 -0
  4. package/dist/EnhancedNeuralSearchManager.js.map +1 -0
  5. package/dist/cache/EmbeddingCache.d.ts +93 -0
  6. package/dist/cache/EmbeddingCache.d.ts.map +1 -0
  7. package/dist/cache/EmbeddingCache.js +208 -0
  8. package/dist/cache/EmbeddingCache.js.map +1 -0
  9. package/dist/cache/index.d.ts +7 -0
  10. package/dist/cache/index.d.ts.map +1 -0
  11. package/dist/cache/index.js +6 -0
  12. package/dist/cache/index.js.map +1 -0
  13. package/dist/fusion/ModalFusion.d.ts +111 -0
  14. package/dist/fusion/ModalFusion.d.ts.map +1 -0
  15. package/dist/fusion/ModalFusion.js +127 -0
  16. package/dist/fusion/ModalFusion.js.map +1 -0
  17. package/dist/fusion/index.d.ts +6 -0
  18. package/dist/fusion/index.d.ts.map +1 -0
  19. package/dist/fusion/index.js +6 -0
  20. package/dist/fusion/index.js.map +1 -0
  21. package/dist/index.d.ts +14 -4
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +12 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/learning/OnlineModelUpdater.d.ts +195 -0
  26. package/dist/learning/OnlineModelUpdater.d.ts.map +1 -0
  27. package/dist/learning/OnlineModelUpdater.js +231 -0
  28. package/dist/learning/OnlineModelUpdater.js.map +1 -0
  29. package/dist/learning/__tests__/OnlineModelUpdater.test.d.ts +9 -0
  30. package/dist/learning/__tests__/OnlineModelUpdater.test.d.ts.map +1 -0
  31. package/dist/learning/__tests__/OnlineModelUpdater.test.js +174 -0
  32. package/dist/learning/__tests__/OnlineModelUpdater.test.js.map +1 -0
  33. package/dist/learning/index.d.ts +2 -0
  34. package/dist/learning/index.d.ts.map +1 -1
  35. package/dist/learning/index.js +2 -0
  36. package/dist/learning/index.js.map +1 -1
  37. package/dist/logging/TrajectoryLogger.d.ts +115 -0
  38. package/dist/logging/TrajectoryLogger.d.ts.map +1 -0
  39. package/dist/logging/TrajectoryLogger.js +128 -0
  40. package/dist/logging/TrajectoryLogger.js.map +1 -0
  41. package/dist/logging/index.d.ts +9 -0
  42. package/dist/logging/index.d.ts.map +1 -0
  43. package/dist/logging/index.js +8 -0
  44. package/dist/logging/index.js.map +1 -0
  45. package/dist/pruning/LearnedPruningPolicy.d.ts +129 -0
  46. package/dist/pruning/LearnedPruningPolicy.d.ts.map +1 -0
  47. package/dist/pruning/LearnedPruningPolicy.js +332 -0
  48. package/dist/pruning/LearnedPruningPolicy.js.map +1 -0
  49. package/dist/pruning/index.d.ts +6 -0
  50. package/dist/pruning/index.d.ts.map +1 -0
  51. package/dist/pruning/index.js +6 -0
  52. package/dist/pruning/index.js.map +1 -0
  53. package/dist/scorer/ContextAwareScorer.d.ts +126 -0
  54. package/dist/scorer/ContextAwareScorer.d.ts.map +1 -0
  55. package/dist/scorer/ContextAwareScorer.js +281 -0
  56. package/dist/scorer/ContextAwareScorer.js.map +1 -0
  57. package/dist/scorer/index.d.ts +2 -0
  58. package/dist/scorer/index.d.ts.map +1 -1
  59. package/dist/scorer/index.js +2 -0
  60. package/dist/scorer/index.js.map +1 -1
  61. package/dist/search/AdaptiveBeamSearch.d.ts +98 -0
  62. package/dist/search/AdaptiveBeamSearch.d.ts.map +1 -0
  63. package/dist/search/AdaptiveBeamSearch.js +240 -0
  64. package/dist/search/AdaptiveBeamSearch.js.map +1 -0
  65. package/dist/search/index.d.ts +2 -0
  66. package/dist/search/index.d.ts.map +1 -1
  67. package/dist/search/index.js +2 -0
  68. package/dist/search/index.js.map +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1,195 @@
1
+ /**
2
+ * OnlineModelUpdater - Online Model Updates from Feedback
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @see TSK-NS-104
5
+ * @see DES-NS-104
6
+ * @see REQ-NS-104 Online model updates within 3 feedback cycles
7
+ */
8
+ /**
9
+ * Feedback types
10
+ */
11
+ export type FeedbackType = 'accept' | 'reject' | 'modify';
12
+ /**
13
+ * OnlineModelUpdater configuration
14
+ */
15
+ export interface OnlineModelUpdaterConfig {
16
+ /** Number of feedbacks before update (default: 3) */
17
+ updateThreshold: number;
18
+ /** Learning rate for weight updates (default: 0.01) */
19
+ learningRate: number;
20
+ /** Auto-apply updates when threshold reached */
21
+ autoApply: boolean;
22
+ }
23
+ /**
24
+ * Feedback record
25
+ */
26
+ export interface FeedbackRecord {
27
+ /** Candidate ID that received feedback */
28
+ candidateId: string;
29
+ /** Feedback type */
30
+ type: FeedbackType;
31
+ /** Candidate score at time of feedback */
32
+ score?: number;
33
+ /** Reason for rejection/modification */
34
+ reason?: string;
35
+ /** Modification details */
36
+ modification?: string;
37
+ /** Additional context */
38
+ context?: Record<string, unknown>;
39
+ }
40
+ /**
41
+ * Feedback recording result
42
+ */
43
+ export interface FeedbackResult {
44
+ /** Success flag */
45
+ success: boolean;
46
+ /** Feedback ID */
47
+ feedbackId: string;
48
+ /** Error message if failed */
49
+ error?: string;
50
+ }
51
+ /**
52
+ * Update application result
53
+ */
54
+ export interface UpdateResult {
55
+ /** Whether updates were applied */
56
+ applied: boolean;
57
+ /** Number of updates applied */
58
+ updatesApplied: number;
59
+ /** New model version */
60
+ modelVersion: number;
61
+ }
62
+ /**
63
+ * Model weights
64
+ */
65
+ export interface ModelWeights {
66
+ /** Semantic similarity weight */
67
+ semanticWeight: number;
68
+ /** Context matching weight */
69
+ contextWeight: number;
70
+ /** Pattern matching weight */
71
+ patternWeight: number;
72
+ /** Recency weight */
73
+ recencyWeight: number;
74
+ }
75
+ /**
76
+ * Update statistics
77
+ */
78
+ export interface UpdateStatistics {
79
+ /** Total feedback received */
80
+ totalFeedback: number;
81
+ /** Accept count */
82
+ acceptCount: number;
83
+ /** Reject count */
84
+ rejectCount: number;
85
+ /** Modify count */
86
+ modifyCount: number;
87
+ /** Acceptance rate */
88
+ acceptanceRate: number;
89
+ /** Total updates applied */
90
+ totalUpdatesApplied: number;
91
+ }
92
+ /**
93
+ * OnlineModelUpdater interface
94
+ */
95
+ export interface OnlineModelUpdater {
96
+ /**
97
+ * Record feedback for a candidate
98
+ */
99
+ recordFeedback(feedback: FeedbackRecord): FeedbackResult;
100
+ /**
101
+ * Apply pending updates to model
102
+ */
103
+ applyUpdates(): Promise<UpdateResult>;
104
+ /**
105
+ * Get pending feedback count
106
+ */
107
+ getPendingCount(): number;
108
+ /**
109
+ * Get current model weights
110
+ */
111
+ getModelWeights(): ModelWeights;
112
+ /**
113
+ * Set model weights
114
+ */
115
+ setModelWeights(weights: Partial<ModelWeights>): void;
116
+ /**
117
+ * Get statistics
118
+ */
119
+ getStatistics(): UpdateStatistics;
120
+ /**
121
+ * Serialize to JSON
122
+ */
123
+ toJSON(): string;
124
+ /**
125
+ * Deserialize from JSON
126
+ */
127
+ fromJSON(json: string): void;
128
+ }
129
+ /**
130
+ * Default OnlineModelUpdater implementation
131
+ */
132
+ export declare class DefaultOnlineModelUpdater implements OnlineModelUpdater {
133
+ private config;
134
+ private pendingFeedback;
135
+ private weights;
136
+ private statistics;
137
+ private modelVersion;
138
+ private feedbackCounter;
139
+ constructor(config?: Partial<OnlineModelUpdaterConfig>);
140
+ /**
141
+ * Record feedback for a candidate
142
+ */
143
+ recordFeedback(feedback: FeedbackRecord): FeedbackResult;
144
+ /**
145
+ * Apply pending updates to model
146
+ */
147
+ applyUpdates(): Promise<UpdateResult>;
148
+ /**
149
+ * Analyze feedback patterns
150
+ */
151
+ private analyzeFeedback;
152
+ /**
153
+ * Adjust weights based on feedback analysis
154
+ */
155
+ private adjustWeights;
156
+ /**
157
+ * Normalize weights to sum to 1
158
+ */
159
+ private normalizeWeights;
160
+ /**
161
+ * Update statistics
162
+ */
163
+ private updateStatistics;
164
+ /**
165
+ * Get pending feedback count
166
+ */
167
+ getPendingCount(): number;
168
+ /**
169
+ * Get current model weights
170
+ */
171
+ getModelWeights(): ModelWeights;
172
+ /**
173
+ * Set model weights
174
+ */
175
+ setModelWeights(weights: Partial<ModelWeights>): void;
176
+ /**
177
+ * Get statistics
178
+ */
179
+ getStatistics(): UpdateStatistics;
180
+ /**
181
+ * Serialize to JSON
182
+ */
183
+ toJSON(): string;
184
+ /**
185
+ * Deserialize from JSON
186
+ */
187
+ fromJSON(json: string): void;
188
+ }
189
+ /**
190
+ * Create an OnlineModelUpdater instance
191
+ * @param config - Optional configuration
192
+ * @returns OnlineModelUpdater instance
193
+ */
194
+ export declare function createOnlineModelUpdater(config?: Partial<OnlineModelUpdaterConfig>): OnlineModelUpdater;
195
+ //# sourceMappingURL=OnlineModelUpdater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineModelUpdater.d.ts","sourceRoot":"","sources":["../../src/learning/OnlineModelUpdater.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAUD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAAC;IAEzD;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAEtC;;OAEG;IACH,eAAe,IAAI,MAAM,CAAC;IAE1B;;OAEG;IACH,eAAe,IAAI,YAAY,CAAC;IAEhC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAEtD;;OAEG;IACH,aAAa,IAAI,gBAAgB,CAAC;IAElC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD;;GAEG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC;IA4BtD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc;IA0BxD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IA8B3C;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAKrD;;OAEG;IACH,aAAa,IAAI,gBAAgB;IAIjC;;OAEG;IACH,MAAM,IAAI,MAAM;IAShB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAmB7B;AAiBD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACzC,kBAAkB,CAEpB"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * OnlineModelUpdater - Online Model Updates from Feedback
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @see TSK-NS-104
5
+ * @see DES-NS-104
6
+ * @see REQ-NS-104 Online model updates within 3 feedback cycles
7
+ */
8
+ // ============================================================================
9
+ // Default Implementation
10
+ // ============================================================================
11
+ /**
12
+ * Default OnlineModelUpdater implementation
13
+ */
14
+ export class DefaultOnlineModelUpdater {
15
+ config;
16
+ pendingFeedback;
17
+ weights;
18
+ statistics;
19
+ modelVersion;
20
+ feedbackCounter;
21
+ constructor(config) {
22
+ this.config = {
23
+ updateThreshold: config?.updateThreshold ?? 3,
24
+ learningRate: config?.learningRate ?? 0.01,
25
+ autoApply: config?.autoApply ?? false,
26
+ };
27
+ this.pendingFeedback = [];
28
+ this.weights = {
29
+ semanticWeight: 0.4,
30
+ contextWeight: 0.3,
31
+ patternWeight: 0.2,
32
+ recencyWeight: 0.1,
33
+ };
34
+ this.statistics = {
35
+ totalFeedback: 0,
36
+ acceptCount: 0,
37
+ rejectCount: 0,
38
+ modifyCount: 0,
39
+ acceptanceRate: 0,
40
+ totalUpdatesApplied: 0,
41
+ };
42
+ this.modelVersion = 1;
43
+ this.feedbackCounter = 0;
44
+ }
45
+ /**
46
+ * Record feedback for a candidate
47
+ */
48
+ recordFeedback(feedback) {
49
+ const feedbackId = `FB-${++this.feedbackCounter}-${Date.now()}`;
50
+ const entry = {
51
+ ...feedback,
52
+ feedbackId,
53
+ timestamp: new Date(),
54
+ };
55
+ this.pendingFeedback.push(entry);
56
+ this.updateStatistics(feedback.type);
57
+ // Check for auto-apply
58
+ if (this.config.autoApply &&
59
+ this.pendingFeedback.length >= this.config.updateThreshold) {
60
+ void this.applyUpdates();
61
+ }
62
+ return {
63
+ success: true,
64
+ feedbackId,
65
+ };
66
+ }
67
+ /**
68
+ * Apply pending updates to model
69
+ */
70
+ async applyUpdates() {
71
+ if (this.pendingFeedback.length < this.config.updateThreshold) {
72
+ return {
73
+ applied: false,
74
+ updatesApplied: 0,
75
+ modelVersion: this.modelVersion,
76
+ };
77
+ }
78
+ // Analyze feedback patterns
79
+ const analysis = this.analyzeFeedback();
80
+ // Update weights based on feedback
81
+ this.adjustWeights(analysis);
82
+ // Clear pending feedback
83
+ const updatesApplied = this.pendingFeedback.length;
84
+ this.pendingFeedback = [];
85
+ // Increment model version
86
+ this.modelVersion++;
87
+ this.statistics.totalUpdatesApplied++;
88
+ return {
89
+ applied: true,
90
+ updatesApplied,
91
+ modelVersion: this.modelVersion,
92
+ };
93
+ }
94
+ /**
95
+ * Analyze feedback patterns
96
+ */
97
+ analyzeFeedback() {
98
+ const accepts = this.pendingFeedback.filter((f) => f.type === 'accept');
99
+ const rejects = this.pendingFeedback.filter((f) => f.type === 'reject');
100
+ // Calculate average score for accepts vs rejects
101
+ const avgAcceptScore = accepts.length > 0
102
+ ? accepts.reduce((sum, f) => sum + (f.score ?? 0.5), 0) / accepts.length
103
+ : 0.5;
104
+ const avgRejectScore = rejects.length > 0
105
+ ? rejects.reduce((sum, f) => sum + (f.score ?? 0.5), 0) / rejects.length
106
+ : 0.5;
107
+ return {
108
+ acceptRate: accepts.length / this.pendingFeedback.length,
109
+ avgAcceptScore,
110
+ avgRejectScore,
111
+ scoreDelta: avgAcceptScore - avgRejectScore,
112
+ };
113
+ }
114
+ /**
115
+ * Adjust weights based on feedback analysis
116
+ */
117
+ adjustWeights(analysis) {
118
+ const lr = this.config.learningRate;
119
+ // If high accept rate, slightly increase semantic weight
120
+ if (analysis.acceptRate > 0.7) {
121
+ this.weights.semanticWeight = Math.min(0.6, this.weights.semanticWeight + lr);
122
+ }
123
+ // If low accept rate, increase context weight
124
+ if (analysis.acceptRate < 0.3) {
125
+ this.weights.contextWeight = Math.min(0.5, this.weights.contextWeight + lr);
126
+ }
127
+ // Normalize weights to sum to 1
128
+ this.normalizeWeights();
129
+ }
130
+ /**
131
+ * Normalize weights to sum to 1
132
+ */
133
+ normalizeWeights() {
134
+ const total = this.weights.semanticWeight +
135
+ this.weights.contextWeight +
136
+ this.weights.patternWeight +
137
+ this.weights.recencyWeight;
138
+ if (total > 0) {
139
+ this.weights.semanticWeight /= total;
140
+ this.weights.contextWeight /= total;
141
+ this.weights.patternWeight /= total;
142
+ this.weights.recencyWeight /= total;
143
+ }
144
+ }
145
+ /**
146
+ * Update statistics
147
+ */
148
+ updateStatistics(type) {
149
+ this.statistics.totalFeedback++;
150
+ switch (type) {
151
+ case 'accept':
152
+ this.statistics.acceptCount++;
153
+ break;
154
+ case 'reject':
155
+ this.statistics.rejectCount++;
156
+ break;
157
+ case 'modify':
158
+ this.statistics.modifyCount++;
159
+ break;
160
+ }
161
+ // Update acceptance rate
162
+ this.statistics.acceptanceRate =
163
+ this.statistics.acceptCount / this.statistics.totalFeedback;
164
+ }
165
+ /**
166
+ * Get pending feedback count
167
+ */
168
+ getPendingCount() {
169
+ return this.pendingFeedback.length;
170
+ }
171
+ /**
172
+ * Get current model weights
173
+ */
174
+ getModelWeights() {
175
+ return { ...this.weights };
176
+ }
177
+ /**
178
+ * Set model weights
179
+ */
180
+ setModelWeights(weights) {
181
+ this.weights = { ...this.weights, ...weights };
182
+ this.normalizeWeights();
183
+ }
184
+ /**
185
+ * Get statistics
186
+ */
187
+ getStatistics() {
188
+ return { ...this.statistics };
189
+ }
190
+ /**
191
+ * Serialize to JSON
192
+ */
193
+ toJSON() {
194
+ return JSON.stringify({
195
+ config: this.config,
196
+ weights: this.weights,
197
+ statistics: this.statistics,
198
+ modelVersion: this.modelVersion,
199
+ });
200
+ }
201
+ /**
202
+ * Deserialize from JSON
203
+ */
204
+ fromJSON(json) {
205
+ const data = JSON.parse(json);
206
+ if (data.config) {
207
+ this.config = { ...this.config, ...data.config };
208
+ }
209
+ if (data.weights) {
210
+ this.weights = { ...this.weights, ...data.weights };
211
+ }
212
+ if (data.statistics) {
213
+ this.statistics = { ...this.statistics, ...data.statistics };
214
+ }
215
+ if (data.modelVersion) {
216
+ this.modelVersion = data.modelVersion;
217
+ }
218
+ }
219
+ }
220
+ // ============================================================================
221
+ // Factory Function
222
+ // ============================================================================
223
+ /**
224
+ * Create an OnlineModelUpdater instance
225
+ * @param config - Optional configuration
226
+ * @returns OnlineModelUpdater instance
227
+ */
228
+ export function createOnlineModelUpdater(config) {
229
+ return new DefaultOnlineModelUpdater(config);
230
+ }
231
+ //# sourceMappingURL=OnlineModelUpdater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineModelUpdater.js","sourceRoot":"","sources":["../../src/learning/OnlineModelUpdater.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OnlineModelUpdater Tests
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @see TSK-NS-104
5
+ * @see DES-NS-104
6
+ * @see REQ-NS-104 Online model updates within 3 feedback cycles
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=OnlineModelUpdater.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineModelUpdater.test.d.ts","sourceRoot":"","sources":["../../../src/learning/__tests__/OnlineModelUpdater.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * OnlineModelUpdater Tests
3
+ * @module @nahisaho/musubix-neural-search
4
+ * @see TSK-NS-104
5
+ * @see DES-NS-104
6
+ * @see REQ-NS-104 Online model updates within 3 feedback cycles
7
+ */
8
+ import { describe, it, expect, beforeEach } from 'vitest';
9
+ import { createOnlineModelUpdater, } from '../OnlineModelUpdater.js';
10
+ describe('OnlineModelUpdater', () => {
11
+ let updater;
12
+ beforeEach(() => {
13
+ updater = createOnlineModelUpdater();
14
+ });
15
+ describe('Factory Function', () => {
16
+ it('should create an OnlineModelUpdater instance', () => {
17
+ const instance = createOnlineModelUpdater();
18
+ expect(instance).toBeDefined();
19
+ expect(typeof instance.recordFeedback).toBe('function');
20
+ });
21
+ it('should create with custom config', () => {
22
+ const instance = createOnlineModelUpdater({
23
+ updateThreshold: 5,
24
+ learningRate: 0.05,
25
+ });
26
+ expect(instance).toBeDefined();
27
+ });
28
+ });
29
+ describe('recordFeedback', () => {
30
+ it('should record accept feedback', () => {
31
+ const result = updater.recordFeedback({
32
+ candidateId: 'CAND-001',
33
+ type: 'accept',
34
+ context: { query: 'test' },
35
+ });
36
+ expect(result.success).toBe(true);
37
+ expect(result.feedbackId).toBeDefined();
38
+ });
39
+ it('should record reject feedback', () => {
40
+ const result = updater.recordFeedback({
41
+ candidateId: 'CAND-001',
42
+ type: 'reject',
43
+ reason: 'Not relevant',
44
+ });
45
+ expect(result.success).toBe(true);
46
+ });
47
+ it('should record modify feedback', () => {
48
+ const result = updater.recordFeedback({
49
+ candidateId: 'CAND-001',
50
+ type: 'modify',
51
+ modification: 'Changed parameter',
52
+ });
53
+ expect(result.success).toBe(true);
54
+ });
55
+ it('should track pending feedback count', () => {
56
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
57
+ updater.recordFeedback({ candidateId: 'CAND-002', type: 'accept' });
58
+ expect(updater.getPendingCount()).toBe(2);
59
+ });
60
+ });
61
+ describe('applyUpdates', () => {
62
+ it('should apply updates after threshold', async () => {
63
+ // Default threshold is 3
64
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
65
+ updater.recordFeedback({ candidateId: 'CAND-002', type: 'reject' });
66
+ updater.recordFeedback({ candidateId: 'CAND-003', type: 'accept' });
67
+ const result = await updater.applyUpdates();
68
+ expect(result.applied).toBe(true);
69
+ expect(result.updatesApplied).toBeGreaterThan(0);
70
+ });
71
+ it('should not apply if below threshold', async () => {
72
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
73
+ const result = await updater.applyUpdates();
74
+ // Should still succeed but no updates if below threshold
75
+ expect(result.applied).toBe(false);
76
+ });
77
+ it('should clear pending after apply', async () => {
78
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
79
+ updater.recordFeedback({ candidateId: 'CAND-002', type: 'reject' });
80
+ updater.recordFeedback({ candidateId: 'CAND-003', type: 'accept' });
81
+ await updater.applyUpdates();
82
+ expect(updater.getPendingCount()).toBe(0);
83
+ });
84
+ it('should update model weights based on feedback', async () => {
85
+ // Record multiple accept feedbacks
86
+ for (let i = 0; i < 5; i++) {
87
+ updater.recordFeedback({
88
+ candidateId: `CAND-${i}`,
89
+ type: 'accept',
90
+ score: 0.9,
91
+ });
92
+ }
93
+ await updater.applyUpdates();
94
+ const newWeights = updater.getModelWeights();
95
+ // Weights should have changed
96
+ expect(newWeights).toBeDefined();
97
+ });
98
+ });
99
+ describe('Auto Updates', () => {
100
+ it('should auto-apply after reaching threshold', async () => {
101
+ const autoUpdater = createOnlineModelUpdater({
102
+ updateThreshold: 3,
103
+ autoApply: true,
104
+ });
105
+ // Record 3 feedbacks to trigger auto-apply
106
+ autoUpdater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
107
+ autoUpdater.recordFeedback({ candidateId: 'CAND-002', type: 'accept' });
108
+ autoUpdater.recordFeedback({ candidateId: 'CAND-003', type: 'accept' });
109
+ // Wait for auto-apply
110
+ await new Promise((resolve) => setTimeout(resolve, 10));
111
+ const stats = autoUpdater.getStatistics();
112
+ expect(stats.totalUpdatesApplied).toBeGreaterThanOrEqual(1);
113
+ });
114
+ });
115
+ describe('Statistics', () => {
116
+ it('should track feedback statistics', () => {
117
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
118
+ updater.recordFeedback({ candidateId: 'CAND-002', type: 'reject' });
119
+ updater.recordFeedback({ candidateId: 'CAND-003', type: 'accept' });
120
+ const stats = updater.getStatistics();
121
+ expect(stats.totalFeedback).toBe(3);
122
+ expect(stats.acceptCount).toBe(2);
123
+ expect(stats.rejectCount).toBe(1);
124
+ });
125
+ it('should calculate acceptance rate', () => {
126
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
127
+ updater.recordFeedback({ candidateId: 'CAND-002', type: 'accept' });
128
+ updater.recordFeedback({ candidateId: 'CAND-003', type: 'reject' });
129
+ const stats = updater.getStatistics();
130
+ expect(stats.acceptanceRate).toBeCloseTo(0.667, 2);
131
+ });
132
+ });
133
+ describe('Model Weights', () => {
134
+ it('should get current model weights', () => {
135
+ const weights = updater.getModelWeights();
136
+ expect(weights).toBeDefined();
137
+ expect(typeof weights.semanticWeight).toBe('number');
138
+ expect(typeof weights.contextWeight).toBe('number');
139
+ });
140
+ it('should set model weights', () => {
141
+ // Set all weights to avoid normalization changing values
142
+ updater.setModelWeights({
143
+ semanticWeight: 0.5,
144
+ contextWeight: 0.3,
145
+ patternWeight: 0.15,
146
+ recencyWeight: 0.05,
147
+ });
148
+ const weights = updater.getModelWeights();
149
+ // After normalization, weights sum to 1.0
150
+ expect(weights.semanticWeight).toBe(0.5);
151
+ expect(weights.contextWeight).toBe(0.3);
152
+ });
153
+ });
154
+ describe('Serialization', () => {
155
+ it('should serialize to JSON', () => {
156
+ updater.recordFeedback({ candidateId: 'CAND-001', type: 'accept' });
157
+ const json = updater.toJSON();
158
+ expect(typeof json).toBe('string');
159
+ const parsed = JSON.parse(json);
160
+ expect(parsed.statistics).toBeDefined();
161
+ expect(parsed.weights).toBeDefined();
162
+ });
163
+ it('should deserialize from JSON', () => {
164
+ const json = JSON.stringify({
165
+ weights: { semanticWeight: 0.7, contextWeight: 0.3 },
166
+ statistics: { totalFeedback: 10, acceptCount: 8, rejectCount: 2 },
167
+ });
168
+ updater.fromJSON(json);
169
+ const weights = updater.getModelWeights();
170
+ expect(weights.semanticWeight).toBe(0.7);
171
+ });
172
+ });
173
+ });
174
+ //# sourceMappingURL=OnlineModelUpdater.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnlineModelUpdater.test.js","sourceRoot":"","sources":["../../../src/learning/__tests__/OnlineModelUpdater.test.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,6 @@ export { OnlineLearner } from './OnlineLearner.js';
7
7
  export type { OnlineLearnerConfig } from './OnlineLearner.js';
8
8
  export { ModelUpdater } from './ModelUpdater.js';
9
9
  export type { ModelUpdaterConfig } from './ModelUpdater.js';
10
+ export { createOnlineModelUpdater, DefaultOnlineModelUpdater, } from './OnlineModelUpdater.js';
11
+ export type { OnlineModelUpdater, OnlineModelUpdaterConfig, FeedbackType, FeedbackRecord, FeedbackResult, UpdateResult, ModelWeights, UpdateStatistics, } from './OnlineModelUpdater.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
@@ -5,4 +5,6 @@
5
5
  export { TrajectoryLog } from './TrajectoryLog.js';
6
6
  export { OnlineLearner } from './OnlineLearner.js';
7
7
  export { ModelUpdater } from './ModelUpdater.js';
8
+ // OnlineModelUpdater (v2.2.0 NEW!)
9
+ export { createOnlineModelUpdater, DefaultOnlineModelUpdater, } from './OnlineModelUpdater.js';
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/learning/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,mCAAmC;AACnC,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC"}