tasq/node_modules/agentdb/simulation/scenarios/skill-evolution.ts

136 lines
3.7 KiB
TypeScript

/**
* Skill Evolution Simulation
*
* Tests SkillLibrary with skill creation, evolution, and composition
*/
import { createUnifiedDatabase } from '../../src/db-unified.js';
import { SkillLibrary } from '../../src/controllers/SkillLibrary.js';
import { EmbeddingService } from '../../src/controllers/EmbeddingService.js';
import * as path from 'path';
export default {
description: 'Skill library evolution with composition and refinement',
async run(config: any) {
const { verbosity = 2 } = config;
if (verbosity >= 2) {
console.log(' 🛠️ Initializing Skill Evolution Simulation');
}
// Initialize AgentDB
const embedder = new EmbeddingService({
model: 'Xenova/all-MiniLM-L6-v2',
dimension: 384,
provider: 'transformers'
});
await embedder.initialize();
const db = await createUnifiedDatabase(
path.join(process.cwd(), 'simulation', 'data', 'skills.graph'),
embedder,
{ forceMode: 'graph' }
);
const skills = new SkillLibrary(
db.getGraphDatabase() as any,
embedder,
undefined, // vectorBackend
db.getGraphDatabase() as any // graphBackend
);
// Simulate skill creation and evolution
const skillTemplates = [
{
name: 'jwt_authentication',
description: 'Generate and verify JWT tokens',
code: 'function generateJWT(payload) { return jwt.sign(payload, SECRET); }',
successRate: 0.95
},
{
name: 'database_query_optimizer',
description: 'Optimize database queries with batch loading',
code: 'function batchLoad(ids) { return DataLoader.load(ids); }',
successRate: 0.88
},
{
name: 'error_handler',
description: 'Comprehensive error handling middleware',
code: 'function errorHandler(err, req, res, next) { /* ... */ }',
successRate: 0.92
},
{
name: 'cache_manager',
description: 'Redis-based caching with TTL',
code: 'function cacheSet(key, val, ttl) { return redis.setex(key, ttl, val); }',
successRate: 0.90
},
{
name: 'validation_schema',
description: 'Request validation with Zod schemas',
code: 'const schema = z.object({ email: z.string().email() });',
successRate: 0.93
}
];
const results = {
created: 0,
searched: 0,
avgSuccessRate: 0,
totalTime: 0
};
const startTime = performance.now();
// Create skills
for (const template of skillTemplates) {
await skills.createSkill(template);
results.created++;
results.avgSuccessRate += template.successRate;
if (verbosity >= 3) {
console.log(` ✅ Created skill: ${template.name}`);
}
}
// Search for skills
const searchQueries = [
'authentication',
'database optimization',
'error handling',
'caching',
'validation'
];
for (const query of searchQueries) {
const found = await skills.searchSkills({
query,
k: 3,
minSuccessRate: 0.8
});
results.searched += found.length;
if (verbosity >= 3) {
console.log(` 🔍 Found ${found.length} skills for: ${query}`);
}
}
const endTime = performance.now();
results.totalTime = endTime - startTime;
results.avgSuccessRate /= skillTemplates.length;
db.close();
if (verbosity >= 2) {
console.log(` 📊 Created: ${results.created} skills`);
console.log(` 📊 Searched: ${results.searched} results`);
console.log(` 📊 Avg Success Rate: ${(results.avgSuccessRate * 100).toFixed(1)}%`);
console.log(` ⏱️ Duration: ${results.totalTime.toFixed(2)}ms`);
}
return results;
}
};