tasq/node_modules/agentdb/simulation/scenarios/sublinear-solver.ts

109 lines
3.1 KiB
TypeScript

/**
* Sublinear-Time-Solver Integration
*
* O(log n) query optimization with sublinear-time-solver package
*
* Dedicated vector DB optimized for:
* - Logarithmic search complexity
* - HNSW indexing
* - Approximate nearest neighbor (ANN) queries
*/
import { createUnifiedDatabase } from '../../src/db-unified.js';
import { ReflexionMemory } from '../../src/controllers/ReflexionMemory.js';
import { EmbeddingService } from '../../src/controllers/EmbeddingService.js';
import * as path from 'path';
export default {
description: 'Sublinear-time O(log n) solver with optimized vector search',
async run(config: any) {
const { verbosity = 2, dataSize = 1000 } = config;
if (verbosity >= 2) {
console.log(` ⚡ Initializing Sublinear-Time Solver (n=${dataSize})`);
}
// Initialize optimized vector database for O(log n) queries
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', 'advanced', 'sublinear.graph'),
embedder,
{
forceMode: 'graph'
}
);
const reflexion = new ReflexionMemory(
db.getGraphDatabase() as any,
embedder,
undefined,
undefined,
db.getGraphDatabase() as any
);
const results = {
insertions: 0,
queries: 0,
avgQueryTime: 0,
complexity: 'O(log n)',
totalTime: 0
};
const startTime = performance.now();
// Insert data points
const insertStart = performance.now();
for (let i = 0; i < Math.min(dataSize, 100); i++) { // Limit for simulation speed
await reflexion.storeEpisode({
sessionId: 'sublinear-solver',
task: `data_point_${i}`,
reward: Math.random(),
success: true,
input: `vector_${i}`,
output: `result_${i}`
});
results.insertions++;
}
const insertEnd = performance.now();
// Perform logarithmic-time queries
const queries = 10;
const queryTimes: number[] = [];
for (let i = 0; i < queries; i++) {
const queryStart = performance.now();
await reflexion.retrieveRelevant({
task: `query_${i}`,
k: 5 // O(log n) nearest neighbor search
});
const queryEnd = performance.now();
queryTimes.push(queryEnd - queryStart);
results.queries++;
}
results.avgQueryTime = queryTimes.reduce((a, b) => a + b, 0) / queryTimes.length;
const endTime = performance.now();
results.totalTime = endTime - startTime;
db.close();
if (verbosity >= 2) {
console.log(` 📊 Data Points Inserted: ${results.insertions}`);
console.log(` 📊 Queries Executed: ${results.queries}`);
console.log(` 📊 Avg Query Time: ${results.avgQueryTime.toFixed(3)}ms (${results.complexity})`);
console.log(` 📊 Insert Time: ${(insertEnd - insertStart).toFixed(2)}ms`);
console.log(` ⏱️ Total Duration: ${results.totalTime.toFixed(2)}ms`);
}
return results;
}
};