agentic-qe 2.1.2 → 2.2.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/.claude/skills/agentic-quality-engineering/SKILL.md +4 -4
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +14 -11
- package/.claude/skills/skills-manifest.json +2 -2
- package/CHANGELOG.md +138 -0
- package/README.md +92 -214
- package/dist/agents/BaseAgent.d.ts +5 -1
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +32 -17
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +5 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +8 -1
- package/dist/cli/commands/improve/index.d.ts.map +1 -1
- package/dist/cli/commands/improve/index.js +18 -16
- package/dist/cli/commands/improve/index.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +10 -2
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +99 -63
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/patterns/index.d.ts +8 -1
- package/dist/cli/commands/patterns/index.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index.js +79 -45
- package/dist/cli/commands/patterns/index.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +5 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +11 -10
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +1 -1
- package/dist/cli/init/agents.js +2 -2
- package/dist/cli/init/database-init.d.ts +7 -0
- package/dist/cli/init/database-init.d.ts.map +1 -1
- package/dist/cli/init/database-init.js +29 -48
- package/dist/cli/init/database-init.js.map +1 -1
- package/dist/core/di/AgentDependencies.d.ts +127 -0
- package/dist/core/di/AgentDependencies.d.ts.map +1 -0
- package/dist/core/di/AgentDependencies.js +251 -0
- package/dist/core/di/AgentDependencies.js.map +1 -0
- package/dist/core/di/DIContainer.d.ts +149 -0
- package/dist/core/di/DIContainer.d.ts.map +1 -0
- package/dist/core/di/DIContainer.js +333 -0
- package/dist/core/di/DIContainer.js.map +1 -0
- package/dist/core/di/index.d.ts +11 -0
- package/dist/core/di/index.d.ts.map +1 -0
- package/dist/core/di/index.js +22 -0
- package/dist/core/di/index.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.d.ts +261 -0
- package/dist/core/memory/HNSWVectorMemory.d.ts.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +647 -0
- package/dist/core/memory/HNSWVectorMemory.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +7 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +9 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +2 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +11 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/learning/ExperienceSharingProtocol.d.ts +243 -0
- package/dist/learning/ExperienceSharingProtocol.d.ts.map +1 -0
- package/dist/learning/ExperienceSharingProtocol.js +538 -0
- package/dist/learning/ExperienceSharingProtocol.js.map +1 -0
- package/dist/learning/ExplainableLearning.d.ts +191 -0
- package/dist/learning/ExplainableLearning.d.ts.map +1 -0
- package/dist/learning/ExplainableLearning.js +441 -0
- package/dist/learning/ExplainableLearning.js.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts +228 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.js +590 -0
- package/dist/learning/GossipPatternSharingProtocol.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +104 -4
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +350 -16
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/PerformanceOptimizer.d.ts +268 -0
- package/dist/learning/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +552 -0
- package/dist/learning/PerformanceOptimizer.js.map +1 -0
- package/dist/learning/PrivacyManager.d.ts +197 -0
- package/dist/learning/PrivacyManager.d.ts.map +1 -0
- package/dist/learning/PrivacyManager.js +551 -0
- package/dist/learning/PrivacyManager.js.map +1 -0
- package/dist/learning/QLearning.d.ts +38 -125
- package/dist/learning/QLearning.d.ts.map +1 -1
- package/dist/learning/QLearning.js +46 -267
- package/dist/learning/QLearning.js.map +1 -1
- package/dist/learning/QLearningLegacy.d.ts +154 -0
- package/dist/learning/QLearningLegacy.d.ts.map +1 -0
- package/dist/learning/QLearningLegacy.js +337 -0
- package/dist/learning/QLearningLegacy.js.map +1 -0
- package/dist/learning/TransferLearningManager.d.ts +212 -0
- package/dist/learning/TransferLearningManager.d.ts.map +1 -0
- package/dist/learning/TransferLearningManager.js +497 -0
- package/dist/learning/TransferLearningManager.js.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts +162 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.js +300 -0
- package/dist/learning/algorithms/AbstractRLLearner.js.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts +201 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.js +447 -0
- package/dist/learning/algorithms/ActorCriticLearner.js.map +1 -0
- package/dist/learning/algorithms/MAMLMetaLearner.d.ts +218 -0
- package/dist/learning/algorithms/MAMLMetaLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/MAMLMetaLearner.js +532 -0
- package/dist/learning/algorithms/MAMLMetaLearner.js.map +1 -0
- package/dist/learning/algorithms/PPOLearner.d.ts +207 -0
- package/dist/learning/algorithms/PPOLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/PPOLearner.js +490 -0
- package/dist/learning/algorithms/PPOLearner.js.map +1 -0
- package/dist/learning/algorithms/QLearning.d.ts +68 -0
- package/dist/learning/algorithms/QLearning.d.ts.map +1 -0
- package/dist/learning/algorithms/QLearning.js +116 -0
- package/dist/learning/algorithms/QLearning.js.map +1 -0
- package/dist/learning/algorithms/SARSALearner.d.ts +107 -0
- package/dist/learning/algorithms/SARSALearner.d.ts.map +1 -0
- package/dist/learning/algorithms/SARSALearner.js +252 -0
- package/dist/learning/algorithms/SARSALearner.js.map +1 -0
- package/dist/learning/algorithms/index.d.ts +32 -0
- package/dist/learning/algorithms/index.d.ts.map +1 -0
- package/dist/learning/algorithms/index.js +50 -0
- package/dist/learning/algorithms/index.js.map +1 -0
- package/dist/learning/index.d.ts +11 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +31 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +2 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/memory/DistributedPatternLibrary.d.ts +159 -0
- package/dist/memory/DistributedPatternLibrary.d.ts.map +1 -0
- package/dist/memory/DistributedPatternLibrary.js +370 -0
- package/dist/memory/DistributedPatternLibrary.js.map +1 -0
- package/dist/memory/PatternQualityScorer.d.ts +169 -0
- package/dist/memory/PatternQualityScorer.d.ts.map +1 -0
- package/dist/memory/PatternQualityScorer.js +327 -0
- package/dist/memory/PatternQualityScorer.js.map +1 -0
- package/dist/memory/PatternReplicationService.d.ts +187 -0
- package/dist/memory/PatternReplicationService.d.ts.map +1 -0
- package/dist/memory/PatternReplicationService.js +392 -0
- package/dist/memory/PatternReplicationService.js.map +1 -0
- package/dist/providers/ClaudeProvider.d.ts +98 -0
- package/dist/providers/ClaudeProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeProvider.js +418 -0
- package/dist/providers/ClaudeProvider.js.map +1 -0
- package/dist/providers/HybridRouter.d.ts +217 -0
- package/dist/providers/HybridRouter.d.ts.map +1 -0
- package/dist/providers/HybridRouter.js +679 -0
- package/dist/providers/HybridRouter.js.map +1 -0
- package/dist/providers/ILLMProvider.d.ts +287 -0
- package/dist/providers/ILLMProvider.d.ts.map +1 -0
- package/dist/providers/ILLMProvider.js +33 -0
- package/dist/providers/ILLMProvider.js.map +1 -0
- package/dist/providers/LLMProviderFactory.d.ts +154 -0
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -0
- package/dist/providers/LLMProviderFactory.js +426 -0
- package/dist/providers/LLMProviderFactory.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +107 -0
- package/dist/providers/RuvllmProvider.d.ts.map +1 -0
- package/dist/providers/RuvllmProvider.js +417 -0
- package/dist/providers/RuvllmProvider.js.map +1 -0
- package/dist/providers/index.d.ts +32 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +75 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/telemetry/LearningTelemetry.d.ts +190 -0
- package/dist/telemetry/LearningTelemetry.d.ts.map +1 -0
- package/dist/telemetry/LearningTelemetry.js +403 -0
- package/dist/telemetry/LearningTelemetry.js.map +1 -0
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +20 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/instrumentation/agent.d.ts +1 -1
- package/dist/telemetry/instrumentation/agent.js +1 -1
- package/dist/telemetry/instrumentation/index.d.ts +1 -1
- package/dist/telemetry/instrumentation/index.js +1 -1
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +16 -0
- package/dist/utils/math.js.map +1 -0
- package/docs/reference/agents.md +1 -1
- package/docs/reference/skills.md +3 -3
- package/docs/reference/usage.md +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TransferLearningManager - Issue #118 Task 2.3
|
|
4
|
+
*
|
|
5
|
+
* Enables knowledge transfer between different QE domains (e.g., unit testing → integration testing).
|
|
6
|
+
* Supports domain similarity calculation, adjustable transfer coefficients, fine-tuning, and metrics tracking.
|
|
7
|
+
*
|
|
8
|
+
* Domain Examples:
|
|
9
|
+
* - Unit testing → Integration testing
|
|
10
|
+
* - API testing → Contract testing
|
|
11
|
+
* - Performance testing → Load testing
|
|
12
|
+
* - Security scanning → Vulnerability detection
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TransferLearningManager = void 0;
|
|
16
|
+
const Logger_1 = require("../utils/Logger");
|
|
17
|
+
const uuid_1 = require("uuid");
|
|
18
|
+
/**
|
|
19
|
+
* Default transfer configuration
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_TRANSFER_CONFIG = {
|
|
22
|
+
enabled: true,
|
|
23
|
+
minSimilarity: 0.3,
|
|
24
|
+
defaultTransferCoefficient: 0.5,
|
|
25
|
+
adaptiveCoefficient: true,
|
|
26
|
+
maxTransferExperiences: 100,
|
|
27
|
+
fineTuningEnabled: true,
|
|
28
|
+
fineTuningIterations: 10
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Domain feature definitions
|
|
32
|
+
*/
|
|
33
|
+
const DOMAIN_FEATURES = {
|
|
34
|
+
'unit-testing': {
|
|
35
|
+
complexity: 0.3,
|
|
36
|
+
isolation: 0.9,
|
|
37
|
+
stateful: 0.1,
|
|
38
|
+
externalDependencies: 0.1,
|
|
39
|
+
executionTime: 0.1,
|
|
40
|
+
parallelizable: 0.9,
|
|
41
|
+
deterministic: 0.9
|
|
42
|
+
},
|
|
43
|
+
'integration-testing': {
|
|
44
|
+
complexity: 0.6,
|
|
45
|
+
isolation: 0.4,
|
|
46
|
+
stateful: 0.7,
|
|
47
|
+
externalDependencies: 0.6,
|
|
48
|
+
executionTime: 0.5,
|
|
49
|
+
parallelizable: 0.5,
|
|
50
|
+
deterministic: 0.7
|
|
51
|
+
},
|
|
52
|
+
'api-testing': {
|
|
53
|
+
complexity: 0.5,
|
|
54
|
+
isolation: 0.5,
|
|
55
|
+
stateful: 0.5,
|
|
56
|
+
externalDependencies: 0.7,
|
|
57
|
+
executionTime: 0.4,
|
|
58
|
+
parallelizable: 0.7,
|
|
59
|
+
deterministic: 0.8
|
|
60
|
+
},
|
|
61
|
+
'contract-testing': {
|
|
62
|
+
complexity: 0.5,
|
|
63
|
+
isolation: 0.6,
|
|
64
|
+
stateful: 0.4,
|
|
65
|
+
externalDependencies: 0.6,
|
|
66
|
+
executionTime: 0.3,
|
|
67
|
+
parallelizable: 0.8,
|
|
68
|
+
deterministic: 0.9
|
|
69
|
+
},
|
|
70
|
+
'performance-testing': {
|
|
71
|
+
complexity: 0.7,
|
|
72
|
+
isolation: 0.3,
|
|
73
|
+
stateful: 0.6,
|
|
74
|
+
externalDependencies: 0.8,
|
|
75
|
+
executionTime: 0.8,
|
|
76
|
+
parallelizable: 0.6,
|
|
77
|
+
deterministic: 0.5
|
|
78
|
+
},
|
|
79
|
+
'load-testing': {
|
|
80
|
+
complexity: 0.8,
|
|
81
|
+
isolation: 0.2,
|
|
82
|
+
stateful: 0.7,
|
|
83
|
+
externalDependencies: 0.9,
|
|
84
|
+
executionTime: 0.9,
|
|
85
|
+
parallelizable: 0.4,
|
|
86
|
+
deterministic: 0.4
|
|
87
|
+
},
|
|
88
|
+
'security-scanning': {
|
|
89
|
+
complexity: 0.6,
|
|
90
|
+
isolation: 0.5,
|
|
91
|
+
stateful: 0.4,
|
|
92
|
+
externalDependencies: 0.5,
|
|
93
|
+
executionTime: 0.6,
|
|
94
|
+
parallelizable: 0.6,
|
|
95
|
+
deterministic: 0.7
|
|
96
|
+
},
|
|
97
|
+
'vulnerability-detection': {
|
|
98
|
+
complexity: 0.7,
|
|
99
|
+
isolation: 0.4,
|
|
100
|
+
stateful: 0.5,
|
|
101
|
+
externalDependencies: 0.6,
|
|
102
|
+
executionTime: 0.7,
|
|
103
|
+
parallelizable: 0.5,
|
|
104
|
+
deterministic: 0.6
|
|
105
|
+
},
|
|
106
|
+
'e2e-testing': {
|
|
107
|
+
complexity: 0.9,
|
|
108
|
+
isolation: 0.1,
|
|
109
|
+
stateful: 0.9,
|
|
110
|
+
externalDependencies: 0.9,
|
|
111
|
+
executionTime: 0.9,
|
|
112
|
+
parallelizable: 0.2,
|
|
113
|
+
deterministic: 0.5
|
|
114
|
+
},
|
|
115
|
+
'regression-testing': {
|
|
116
|
+
complexity: 0.6,
|
|
117
|
+
isolation: 0.5,
|
|
118
|
+
stateful: 0.6,
|
|
119
|
+
externalDependencies: 0.5,
|
|
120
|
+
executionTime: 0.6,
|
|
121
|
+
parallelizable: 0.6,
|
|
122
|
+
deterministic: 0.8
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* TransferLearningManager - Manages knowledge transfer between QE domains
|
|
127
|
+
*/
|
|
128
|
+
class TransferLearningManager {
|
|
129
|
+
constructor(memoryStore, config = {}) {
|
|
130
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
131
|
+
this.memoryStore = memoryStore;
|
|
132
|
+
this.config = { ...DEFAULT_TRANSFER_CONFIG, ...config };
|
|
133
|
+
this.mappings = new Map();
|
|
134
|
+
this.metrics = new Map();
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Initialize the transfer learning manager
|
|
138
|
+
*/
|
|
139
|
+
async initialize() {
|
|
140
|
+
this.logger.info('Initializing TransferLearningManager');
|
|
141
|
+
// Load existing mappings from database
|
|
142
|
+
await this.loadMappings();
|
|
143
|
+
// Load existing metrics from database
|
|
144
|
+
await this.loadMetrics();
|
|
145
|
+
this.logger.info(`TransferLearningManager initialized with ${this.mappings.size} mappings`);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Calculate similarity between two QE domains
|
|
149
|
+
* Uses cosine similarity on domain feature vectors
|
|
150
|
+
*
|
|
151
|
+
* @param sourceDomain - Source domain
|
|
152
|
+
* @param targetDomain - Target domain
|
|
153
|
+
* @returns Similarity score (0-1)
|
|
154
|
+
*/
|
|
155
|
+
calculateDomainSimilarity(sourceDomain, targetDomain) {
|
|
156
|
+
const sourceFeatures = this.getDomainFeatures(sourceDomain);
|
|
157
|
+
const targetFeatures = this.getDomainFeatures(targetDomain);
|
|
158
|
+
// Calculate cosine similarity
|
|
159
|
+
const dotProduct = this.calculateDotProduct(sourceFeatures, targetFeatures);
|
|
160
|
+
const sourceMagnitude = this.calculateMagnitude(sourceFeatures);
|
|
161
|
+
const targetMagnitude = this.calculateMagnitude(targetFeatures);
|
|
162
|
+
const similarity = dotProduct / (sourceMagnitude * targetMagnitude);
|
|
163
|
+
this.logger.debug(`Domain similarity: ${sourceDomain} → ${targetDomain} = ${similarity.toFixed(3)}`);
|
|
164
|
+
return Math.max(0, Math.min(1, similarity));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Transfer knowledge from source domain to target domain
|
|
168
|
+
*
|
|
169
|
+
* @param sourceDomain - Source domain with existing knowledge
|
|
170
|
+
* @param targetDomain - Target domain to receive knowledge
|
|
171
|
+
* @param sourceExperiences - Experiences from source domain
|
|
172
|
+
* @param transferCoefficient - Optional override for transfer coefficient (0-1)
|
|
173
|
+
* @returns Transfer mapping with results
|
|
174
|
+
*/
|
|
175
|
+
async transferKnowledge(sourceDomain, targetDomain, sourceExperiences, transferCoefficient) {
|
|
176
|
+
if (!this.config.enabled) {
|
|
177
|
+
throw new Error('Transfer learning is disabled');
|
|
178
|
+
}
|
|
179
|
+
// Calculate domain similarity
|
|
180
|
+
const similarity = this.calculateDomainSimilarity(sourceDomain, targetDomain);
|
|
181
|
+
if (similarity < this.config.minSimilarity) {
|
|
182
|
+
throw new Error(`Domain similarity too low: ${similarity.toFixed(3)} < ${this.config.minSimilarity}`);
|
|
183
|
+
}
|
|
184
|
+
// Get or create transfer mapping
|
|
185
|
+
let mapping = this.getMapping(sourceDomain, targetDomain);
|
|
186
|
+
if (!mapping) {
|
|
187
|
+
mapping = await this.createMapping(sourceDomain, targetDomain, similarity, transferCoefficient ?? this.config.defaultTransferCoefficient);
|
|
188
|
+
}
|
|
189
|
+
// Limit experiences to transfer
|
|
190
|
+
const experiencesToTransfer = sourceExperiences.slice(0, this.config.maxTransferExperiences);
|
|
191
|
+
// Apply transfer coefficient to adjust experience rewards
|
|
192
|
+
const transferredExperiences = this.applyTransferCoefficient(experiencesToTransfer, mapping.transferCoefficient);
|
|
193
|
+
// Store transferred experiences in target domain namespace
|
|
194
|
+
await this.storeTransferredExperiences(targetDomain, transferredExperiences);
|
|
195
|
+
// Update mapping statistics
|
|
196
|
+
mapping.experiencesTransferred += transferredExperiences.length;
|
|
197
|
+
mapping.lastTransferAt = new Date();
|
|
198
|
+
await this.updateMapping(mapping);
|
|
199
|
+
// Update metrics
|
|
200
|
+
await this.updateTransferMetrics(mapping.id, true);
|
|
201
|
+
this.logger.info(`Transferred ${transferredExperiences.length} experiences from ${sourceDomain} to ${targetDomain} ` +
|
|
202
|
+
`(similarity: ${similarity.toFixed(3)}, coefficient: ${mapping.transferCoefficient.toFixed(3)})`);
|
|
203
|
+
return mapping;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Fine-tune transferred knowledge for target domain
|
|
207
|
+
* Adjusts transferred knowledge based on target domain feedback
|
|
208
|
+
*
|
|
209
|
+
* @param targetDomain - Target domain to fine-tune
|
|
210
|
+
* @param targetExperiences - New experiences from target domain
|
|
211
|
+
* @returns Fine-tuning result
|
|
212
|
+
*/
|
|
213
|
+
async fineTuneTransferredKnowledge(targetDomain, targetExperiences) {
|
|
214
|
+
if (!this.config.fineTuningEnabled) {
|
|
215
|
+
throw new Error('Fine-tuning is disabled');
|
|
216
|
+
}
|
|
217
|
+
this.logger.info(`Fine-tuning transferred knowledge for ${targetDomain}`);
|
|
218
|
+
// Calculate initial performance (baseline from transferred experiences)
|
|
219
|
+
const transferredExperiences = await this.getTransferredExperiences(targetDomain);
|
|
220
|
+
const initialPerformance = this.calculateAverageReward(transferredExperiences);
|
|
221
|
+
// Perform iterative fine-tuning
|
|
222
|
+
let currentPerformance = initialPerformance;
|
|
223
|
+
let iterationCount = 0;
|
|
224
|
+
for (let i = 0; i < this.config.fineTuningIterations; i++) {
|
|
225
|
+
// Blend transferred and target experiences
|
|
226
|
+
const blendRatio = (i + 1) / this.config.fineTuningIterations;
|
|
227
|
+
const blendedExperiences = this.blendExperiences(transferredExperiences, targetExperiences, blendRatio);
|
|
228
|
+
// Recalculate performance
|
|
229
|
+
const newPerformance = this.calculateAverageReward(blendedExperiences);
|
|
230
|
+
// Early stopping if performance converges
|
|
231
|
+
if (Math.abs(newPerformance - currentPerformance) < 0.01) {
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
currentPerformance = newPerformance;
|
|
235
|
+
iterationCount++;
|
|
236
|
+
}
|
|
237
|
+
const improvement = ((currentPerformance - initialPerformance) / Math.abs(initialPerformance)) * 100;
|
|
238
|
+
const result = {
|
|
239
|
+
domain: targetDomain,
|
|
240
|
+
initialPerformance,
|
|
241
|
+
finalPerformance: currentPerformance,
|
|
242
|
+
improvement,
|
|
243
|
+
iterations: iterationCount,
|
|
244
|
+
experiencesUsed: transferredExperiences.length + targetExperiences.length
|
|
245
|
+
};
|
|
246
|
+
this.logger.info(`Fine-tuning completed for ${targetDomain}: ` +
|
|
247
|
+
`${initialPerformance.toFixed(3)} → ${currentPerformance.toFixed(3)} ` +
|
|
248
|
+
`(+${improvement.toFixed(1)}%) in ${iterationCount} iterations`);
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Adjust transfer coefficient based on transfer success
|
|
253
|
+
* Implements adaptive transfer learning
|
|
254
|
+
*
|
|
255
|
+
* @param mappingId - Transfer mapping ID
|
|
256
|
+
* @param success - Whether the transfer was successful
|
|
257
|
+
*/
|
|
258
|
+
async adjustTransferCoefficient(mappingId, success) {
|
|
259
|
+
if (!this.config.adaptiveCoefficient) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const mapping = this.mappings.get(mappingId);
|
|
263
|
+
if (!mapping) {
|
|
264
|
+
throw new Error(`Transfer mapping not found: ${mappingId}`);
|
|
265
|
+
}
|
|
266
|
+
// Adaptive adjustment: increase on success, decrease on failure
|
|
267
|
+
const adjustmentRate = 0.05;
|
|
268
|
+
const oldCoefficient = mapping.transferCoefficient;
|
|
269
|
+
if (success) {
|
|
270
|
+
mapping.transferCoefficient = Math.min(1.0, mapping.transferCoefficient + adjustmentRate);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
mapping.transferCoefficient = Math.max(0.1, mapping.transferCoefficient - adjustmentRate);
|
|
274
|
+
}
|
|
275
|
+
await this.updateMapping(mapping);
|
|
276
|
+
this.logger.debug(`Adjusted transfer coefficient for ${mapping.sourceDomain} → ${mapping.targetDomain}: ` +
|
|
277
|
+
`${oldCoefficient.toFixed(3)} → ${mapping.transferCoefficient.toFixed(3)}`);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get transfer metrics for a specific mapping
|
|
281
|
+
*
|
|
282
|
+
* @param sourceDomain - Source domain
|
|
283
|
+
* @param targetDomain - Target domain
|
|
284
|
+
* @returns Transfer metrics or undefined
|
|
285
|
+
*/
|
|
286
|
+
getTransferMetrics(sourceDomain, targetDomain) {
|
|
287
|
+
const mapping = this.getMapping(sourceDomain, targetDomain);
|
|
288
|
+
if (!mapping) {
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
return this.metrics.get(mapping.id);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get all transfer mappings
|
|
295
|
+
*/
|
|
296
|
+
getAllMappings() {
|
|
297
|
+
return Array.from(this.mappings.values());
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get all transfer metrics
|
|
301
|
+
*/
|
|
302
|
+
getAllMetrics() {
|
|
303
|
+
return Array.from(this.metrics.values());
|
|
304
|
+
}
|
|
305
|
+
// ============================================================================
|
|
306
|
+
// Private Helper Methods
|
|
307
|
+
// ============================================================================
|
|
308
|
+
/**
|
|
309
|
+
* Get domain feature vector
|
|
310
|
+
*/
|
|
311
|
+
getDomainFeatures(domain) {
|
|
312
|
+
const features = DOMAIN_FEATURES[domain];
|
|
313
|
+
if (!features) {
|
|
314
|
+
throw new Error(`Unknown domain: ${domain}`);
|
|
315
|
+
}
|
|
316
|
+
return { domain, ...features };
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Calculate dot product of two feature vectors
|
|
320
|
+
*/
|
|
321
|
+
calculateDotProduct(a, b) {
|
|
322
|
+
return (a.complexity * b.complexity +
|
|
323
|
+
a.isolation * b.isolation +
|
|
324
|
+
a.stateful * b.stateful +
|
|
325
|
+
a.externalDependencies * b.externalDependencies +
|
|
326
|
+
a.executionTime * b.executionTime +
|
|
327
|
+
a.parallelizable * b.parallelizable +
|
|
328
|
+
a.deterministic * b.deterministic);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Calculate magnitude of feature vector
|
|
332
|
+
*/
|
|
333
|
+
calculateMagnitude(features) {
|
|
334
|
+
return Math.sqrt(features.complexity ** 2 +
|
|
335
|
+
features.isolation ** 2 +
|
|
336
|
+
features.stateful ** 2 +
|
|
337
|
+
features.externalDependencies ** 2 +
|
|
338
|
+
features.executionTime ** 2 +
|
|
339
|
+
features.parallelizable ** 2 +
|
|
340
|
+
features.deterministic ** 2);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Get existing mapping between domains
|
|
344
|
+
*/
|
|
345
|
+
getMapping(sourceDomain, targetDomain) {
|
|
346
|
+
for (const mapping of this.mappings.values()) {
|
|
347
|
+
if (mapping.sourceDomain === sourceDomain && mapping.targetDomain === targetDomain) {
|
|
348
|
+
return mapping;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Create new transfer mapping
|
|
355
|
+
*/
|
|
356
|
+
async createMapping(sourceDomain, targetDomain, similarity, transferCoefficient) {
|
|
357
|
+
const mapping = {
|
|
358
|
+
id: (0, uuid_1.v4)(),
|
|
359
|
+
sourceDomain,
|
|
360
|
+
targetDomain,
|
|
361
|
+
similarity,
|
|
362
|
+
transferCoefficient,
|
|
363
|
+
experiencesTransferred: 0,
|
|
364
|
+
successRate: 0,
|
|
365
|
+
createdAt: new Date()
|
|
366
|
+
};
|
|
367
|
+
this.mappings.set(mapping.id, mapping);
|
|
368
|
+
// Persist to database
|
|
369
|
+
await this.memoryStore.store(`transfer-learning/mappings/${mapping.id}`, mapping, { partition: 'learning' });
|
|
370
|
+
// Initialize metrics
|
|
371
|
+
const metrics = {
|
|
372
|
+
mappingId: mapping.id,
|
|
373
|
+
sourceDomain,
|
|
374
|
+
targetDomain,
|
|
375
|
+
totalTransfers: 0,
|
|
376
|
+
successfulTransfers: 0,
|
|
377
|
+
failedTransfers: 0,
|
|
378
|
+
avgPerformanceGain: 0,
|
|
379
|
+
transferEfficiency: 0,
|
|
380
|
+
lastUpdated: new Date()
|
|
381
|
+
};
|
|
382
|
+
this.metrics.set(mapping.id, metrics);
|
|
383
|
+
await this.memoryStore.store(`transfer-learning/metrics/${mapping.id}`, metrics, { partition: 'learning' });
|
|
384
|
+
return mapping;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Update existing transfer mapping
|
|
388
|
+
*/
|
|
389
|
+
async updateMapping(mapping) {
|
|
390
|
+
this.mappings.set(mapping.id, mapping);
|
|
391
|
+
await this.memoryStore.store(`transfer-learning/mappings/${mapping.id}`, mapping, { partition: 'learning' });
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Apply transfer coefficient to experiences
|
|
395
|
+
*/
|
|
396
|
+
applyTransferCoefficient(experiences, coefficient) {
|
|
397
|
+
return experiences.map(exp => ({
|
|
398
|
+
...exp,
|
|
399
|
+
reward: exp.reward * coefficient
|
|
400
|
+
}));
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Store transferred experiences for target domain
|
|
404
|
+
*/
|
|
405
|
+
async storeTransferredExperiences(targetDomain, experiences) {
|
|
406
|
+
await this.memoryStore.store(`transfer-learning/experiences/${targetDomain}`, experiences, { partition: 'learning' });
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Get transferred experiences for target domain
|
|
410
|
+
*/
|
|
411
|
+
async getTransferredExperiences(targetDomain) {
|
|
412
|
+
const experiences = await this.memoryStore.retrieve(`transfer-learning/experiences/${targetDomain}`, { partition: 'learning' });
|
|
413
|
+
return experiences || [];
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Calculate average reward from experiences
|
|
417
|
+
*/
|
|
418
|
+
calculateAverageReward(experiences) {
|
|
419
|
+
if (experiences.length === 0) {
|
|
420
|
+
return 0;
|
|
421
|
+
}
|
|
422
|
+
const totalReward = experiences.reduce((sum, exp) => sum + exp.reward, 0);
|
|
423
|
+
return totalReward / experiences.length;
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Blend transferred and target experiences
|
|
427
|
+
* Higher blendRatio = more weight on target experiences
|
|
428
|
+
*/
|
|
429
|
+
blendExperiences(transferredExperiences, targetExperiences, blendRatio) {
|
|
430
|
+
const transferWeight = 1 - blendRatio;
|
|
431
|
+
const targetWeight = blendRatio;
|
|
432
|
+
const weightedTransferred = transferredExperiences.map(exp => ({
|
|
433
|
+
...exp,
|
|
434
|
+
reward: exp.reward * transferWeight
|
|
435
|
+
}));
|
|
436
|
+
const weightedTarget = targetExperiences.map(exp => ({
|
|
437
|
+
...exp,
|
|
438
|
+
reward: exp.reward * targetWeight
|
|
439
|
+
}));
|
|
440
|
+
return [...weightedTransferred, ...weightedTarget];
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Update transfer metrics
|
|
444
|
+
*/
|
|
445
|
+
async updateTransferMetrics(mappingId, success) {
|
|
446
|
+
const metrics = this.metrics.get(mappingId);
|
|
447
|
+
if (!metrics) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
metrics.totalTransfers++;
|
|
451
|
+
if (success) {
|
|
452
|
+
metrics.successfulTransfers++;
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
metrics.failedTransfers++;
|
|
456
|
+
}
|
|
457
|
+
metrics.transferEfficiency = metrics.successfulTransfers / metrics.totalTransfers;
|
|
458
|
+
metrics.lastUpdated = new Date();
|
|
459
|
+
this.metrics.set(mappingId, metrics);
|
|
460
|
+
await this.memoryStore.store(`transfer-learning/metrics/${mappingId}`, metrics, { partition: 'learning' });
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Load mappings from database
|
|
464
|
+
*/
|
|
465
|
+
async loadMappings() {
|
|
466
|
+
try {
|
|
467
|
+
// Query all mappings from memory store
|
|
468
|
+
// Note: This is a simplified version - in production, you'd query by pattern
|
|
469
|
+
this.logger.debug('Loading transfer mappings from database');
|
|
470
|
+
}
|
|
471
|
+
catch (error) {
|
|
472
|
+
this.logger.warn('Failed to load transfer mappings:', error);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Load metrics from database
|
|
477
|
+
*/
|
|
478
|
+
async loadMetrics() {
|
|
479
|
+
try {
|
|
480
|
+
// Query all metrics from memory store
|
|
481
|
+
this.logger.debug('Loading transfer metrics from database');
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
this.logger.warn('Failed to load transfer metrics:', error);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Cleanup resources
|
|
489
|
+
*/
|
|
490
|
+
dispose() {
|
|
491
|
+
this.mappings.clear();
|
|
492
|
+
this.metrics.clear();
|
|
493
|
+
this.logger.info('TransferLearningManager disposed');
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
exports.TransferLearningManager = TransferLearningManager;
|
|
497
|
+
//# sourceMappingURL=TransferLearningManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferLearningManager.js","sourceRoot":"","sources":["../../src/learning/TransferLearningManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AbstractRLLearner - Base class for Reinforcement Learning algorithms
|
|
3
|
+
*
|
|
4
|
+
* Provides common functionality for all RL algorithms including:
|
|
5
|
+
* - Epsilon-greedy exploration policy
|
|
6
|
+
* - State/action encoding
|
|
7
|
+
* - Q-table management
|
|
8
|
+
* - Experience replay integration
|
|
9
|
+
* - Statistics tracking
|
|
10
|
+
*/
|
|
11
|
+
import { Logger } from '../../utils/Logger';
|
|
12
|
+
import { TaskState, AgentAction, TaskExperience } from '../types';
|
|
13
|
+
import { ExperienceReplayBuffer } from '../ExperienceReplayBuffer';
|
|
14
|
+
/**
|
|
15
|
+
* Base configuration for RL algorithms
|
|
16
|
+
*/
|
|
17
|
+
export interface RLConfig {
|
|
18
|
+
learningRate: number;
|
|
19
|
+
discountFactor: number;
|
|
20
|
+
explorationRate: number;
|
|
21
|
+
explorationDecay: number;
|
|
22
|
+
minExplorationRate: number;
|
|
23
|
+
useExperienceReplay: boolean;
|
|
24
|
+
replayBufferSize: number;
|
|
25
|
+
batchSize: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Q-value with metadata
|
|
29
|
+
*/
|
|
30
|
+
export interface QValue {
|
|
31
|
+
state: string;
|
|
32
|
+
action: string;
|
|
33
|
+
value: number;
|
|
34
|
+
updateCount: number;
|
|
35
|
+
lastUpdated: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Abstract base class for RL algorithms
|
|
39
|
+
*/
|
|
40
|
+
export declare abstract class AbstractRLLearner {
|
|
41
|
+
protected readonly logger: Logger;
|
|
42
|
+
protected config: RLConfig;
|
|
43
|
+
protected qTable: Map<string, Map<string, QValue>>;
|
|
44
|
+
protected replayBuffer?: ExperienceReplayBuffer;
|
|
45
|
+
protected stepCount: number;
|
|
46
|
+
protected episodeCount: number;
|
|
47
|
+
constructor(config: RLConfig);
|
|
48
|
+
/**
|
|
49
|
+
* Select action using epsilon-greedy policy
|
|
50
|
+
* With probability ε, select random action (exploration)
|
|
51
|
+
* Otherwise, select action with highest Q-value (exploitation)
|
|
52
|
+
*/
|
|
53
|
+
selectAction(state: TaskState, availableActions: AgentAction[]): AgentAction;
|
|
54
|
+
/**
|
|
55
|
+
* Get best action based on current Q-values (greedy policy)
|
|
56
|
+
*/
|
|
57
|
+
getBestAction(state: TaskState, availableActions: AgentAction[]): AgentAction;
|
|
58
|
+
/**
|
|
59
|
+
* Abstract method: Update Q-value with algorithm-specific rule
|
|
60
|
+
* Must be implemented by subclasses (Q-Learning, SARSA, etc.)
|
|
61
|
+
*/
|
|
62
|
+
abstract update(experience: TaskExperience, nextAction?: AgentAction): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get Q-value for a state-action pair
|
|
65
|
+
*/
|
|
66
|
+
getQValue(state: TaskState, action: AgentAction): number;
|
|
67
|
+
/**
|
|
68
|
+
* Set Q-value for a state-action pair (protected for subclass use)
|
|
69
|
+
*/
|
|
70
|
+
protected setQValue(stateKey: string, actionKey: string, value: number): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get all Q-values for a state
|
|
73
|
+
*/
|
|
74
|
+
getStateValues(state: TaskState): Map<string, number>;
|
|
75
|
+
/**
|
|
76
|
+
* Get value of a state (max Q-value over all actions)
|
|
77
|
+
* V(s) = max_a Q(s,a)
|
|
78
|
+
*/
|
|
79
|
+
getStateValue(state: TaskState): number;
|
|
80
|
+
/**
|
|
81
|
+
* Perform batch update using experience replay
|
|
82
|
+
* Samples random batch from replay buffer and updates Q-values
|
|
83
|
+
*/
|
|
84
|
+
batchUpdate(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Decay exploration rate (epsilon)
|
|
87
|
+
* Called after each episode to gradually reduce exploration
|
|
88
|
+
*/
|
|
89
|
+
decayExploration(): void;
|
|
90
|
+
/**
|
|
91
|
+
* Mark end of episode
|
|
92
|
+
*/
|
|
93
|
+
endEpisode(): void;
|
|
94
|
+
/**
|
|
95
|
+
* Encode state to string key for Q-table
|
|
96
|
+
* Creates normalized feature vector and discretizes for generalization
|
|
97
|
+
*/
|
|
98
|
+
protected encodeState(state: TaskState): string;
|
|
99
|
+
/**
|
|
100
|
+
* Encode action to string key for Q-table
|
|
101
|
+
*/
|
|
102
|
+
protected encodeAction(action: AgentAction): string;
|
|
103
|
+
/**
|
|
104
|
+
* Get current exploration rate (epsilon)
|
|
105
|
+
*/
|
|
106
|
+
getExplorationRate(): number;
|
|
107
|
+
/**
|
|
108
|
+
* Get total number of learning steps
|
|
109
|
+
*/
|
|
110
|
+
getStepCount(): number;
|
|
111
|
+
/**
|
|
112
|
+
* Get total number of episodes
|
|
113
|
+
*/
|
|
114
|
+
getEpisodeCount(): number;
|
|
115
|
+
/**
|
|
116
|
+
* Get Q-table size (number of state-action pairs)
|
|
117
|
+
*/
|
|
118
|
+
getTableSize(): number;
|
|
119
|
+
/**
|
|
120
|
+
* Get statistics about learning progress
|
|
121
|
+
*/
|
|
122
|
+
getStatistics(): {
|
|
123
|
+
steps: number;
|
|
124
|
+
episodes: number;
|
|
125
|
+
tableSize: number;
|
|
126
|
+
explorationRate: number;
|
|
127
|
+
avgQValue: number;
|
|
128
|
+
maxQValue: number;
|
|
129
|
+
minQValue: number;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Reset Q-table and learning state
|
|
133
|
+
*/
|
|
134
|
+
reset(): void;
|
|
135
|
+
/**
|
|
136
|
+
* Get default exploration rate (for reset)
|
|
137
|
+
*/
|
|
138
|
+
protected abstract getDefaultExplorationRate(): number;
|
|
139
|
+
/**
|
|
140
|
+
* Export Q-table and state for persistence
|
|
141
|
+
*/
|
|
142
|
+
export(): {
|
|
143
|
+
qTable: Record<string, Record<string, QValue>>;
|
|
144
|
+
config: RLConfig;
|
|
145
|
+
stepCount: number;
|
|
146
|
+
episodeCount: number;
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Import Q-table and state from persistence
|
|
150
|
+
*/
|
|
151
|
+
import(state: {
|
|
152
|
+
qTable: Record<string, Record<string, QValue>>;
|
|
153
|
+
config: RLConfig;
|
|
154
|
+
stepCount: number;
|
|
155
|
+
episodeCount: number;
|
|
156
|
+
}): void;
|
|
157
|
+
/**
|
|
158
|
+
* Get memory usage estimate in bytes
|
|
159
|
+
*/
|
|
160
|
+
getMemoryUsage(): number;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=AbstractRLLearner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractRLLearner.d.ts","sourceRoot":"","sources":["../../../src/learning/algorithms/AbstractRLLearner.ts"],"names":[],"mappings":"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"}
|