Updated project name and description in package.json for clearer purpose. Enhanced README with a detailed table of contents and error handling section. Improved error handling in index.js with comprehensive logging for various failure scenarios.
166 lines
5.1 KiB
JavaScript
166 lines
5.1 KiB
JavaScript
// Simulated LLM Service
|
|
class DummyLlmService {
|
|
async query(prompt) {
|
|
// Simulate LLM response with basic intent matching
|
|
const intents = {
|
|
'analyze': { confidence: 0.9, action: 'analysis' },
|
|
'process': { confidence: 0.8, action: 'processing' },
|
|
'transform': { confidence: 0.7, action: 'transformation' }
|
|
};
|
|
|
|
const matchedIntent = Object.entries(intents)
|
|
.find(([key]) => prompt.toLowerCase().includes(key));
|
|
|
|
return matchedIntent ? matchedIntent[1] : { confidence: 0.1, action: 'unknown' };
|
|
}
|
|
}
|
|
|
|
// Interface for workflow operators
|
|
class WorkflowOperator {
|
|
constructor(name, operation) {
|
|
this.name = name;
|
|
this.operation = operation;
|
|
}
|
|
|
|
async execute(state) {
|
|
return await this.operation(state);
|
|
}
|
|
}
|
|
|
|
// Interface for manifold regions
|
|
class ManifoldRegion {
|
|
constructor(name, operators = []) {
|
|
this.name = name;
|
|
this.operators = operators;
|
|
this.adjacentRegions = new Set();
|
|
}
|
|
|
|
addOperator(operator) {
|
|
this.operators.push(operator);
|
|
}
|
|
|
|
connectTo(region) {
|
|
this.adjacentRegions.add(region);
|
|
region.adjacentRegions.add(this);
|
|
}
|
|
|
|
async getValidOperators(state) {
|
|
return this.operators;
|
|
}
|
|
}
|
|
|
|
// Main manifold implementation
|
|
class WorkflowFunctionManifold {
|
|
constructor(llmService) {
|
|
this.llmService = llmService;
|
|
this.regions = new Map();
|
|
this.currentRegion = null;
|
|
this.state = {};
|
|
}
|
|
|
|
addRegion(region) {
|
|
this.regions.set(region.name, region);
|
|
if (!this.currentRegion) {
|
|
this.currentRegion = region;
|
|
}
|
|
}
|
|
|
|
async navigate(prompt) {
|
|
try {
|
|
const intent = await this.llmService.query(prompt);
|
|
|
|
// Find the best matching adjacent region
|
|
const nextRegion = Array.from(this.currentRegion.adjacentRegions)
|
|
.find(region => region.name.toLowerCase().includes(intent.action));
|
|
|
|
if (nextRegion && intent.confidence > 0.5) {
|
|
this.currentRegion = nextRegion;
|
|
return true;
|
|
} else {
|
|
console.warn(`No valid region found for prompt: "${prompt}"`);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error during navigation for prompt "${prompt}":`, error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async executeWorkflow(prompt) {
|
|
try {
|
|
const operators = await this.currentRegion.getValidOperators(this.state);
|
|
const intent = await this.llmService.query(prompt);
|
|
|
|
const matchedOperator = operators.find(op => op.name.toLowerCase().includes(intent.action));
|
|
|
|
if (matchedOperator) {
|
|
this.state = await matchedOperator.execute(this.state);
|
|
return true;
|
|
} else {
|
|
console.warn(`No matching operator found for intent: ${intent.action}`);
|
|
return false;
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error during workflow execution for prompt "${prompt}":`, error);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Usage Example
|
|
async function demonstrateManifold() {
|
|
// Initialize services and manifold
|
|
const llm = new DummyLlmService();
|
|
const manifold = new WorkflowFunctionManifold(llm);
|
|
|
|
// Create operators
|
|
const dataAnalysisOp = new WorkflowOperator('analysis', async (state) => {
|
|
console.log('Performing data analysis...');
|
|
return { ...state, analyzed: true };
|
|
});
|
|
|
|
const dataProcessingOp = new WorkflowOperator('processing', async (state) => {
|
|
console.log('Processing data...');
|
|
return { ...state, processed: true };
|
|
});
|
|
|
|
const dataTransformOp = new WorkflowOperator('transformation', async (state) => {
|
|
console.log('Transforming data...');
|
|
return { ...state, transformed: true };
|
|
});
|
|
|
|
// Create regions
|
|
const analysisRegion = new ManifoldRegion('analysis', [dataAnalysisOp]);
|
|
const processingRegion = new ManifoldRegion('processing', [dataProcessingOp]);
|
|
const transformationRegion = new ManifoldRegion('transformation', [dataTransformOp]);
|
|
|
|
// Connect regions
|
|
analysisRegion.connectTo(processingRegion);
|
|
processingRegion.connectTo(transformationRegion);
|
|
|
|
// Add regions to manifold
|
|
manifold.addRegion(analysisRegion);
|
|
manifold.addRegion(processingRegion);
|
|
manifold.addRegion(transformationRegion);
|
|
|
|
// Demonstrate workflow execution
|
|
console.log('Starting workflow demonstration...');
|
|
|
|
const prompts = [
|
|
'analyze the data',
|
|
'process the results',
|
|
'transform the output'
|
|
];
|
|
|
|
for (const prompt of prompts) {
|
|
console.log(`\nExecuting prompt: "${prompt}"`);
|
|
await manifold.navigate(prompt);
|
|
const executed = await manifold.executeWorkflow(prompt);
|
|
console.log(`Current state:`, manifold.state);
|
|
console.log(`Current region: ${manifold.currentRegion.name}`);
|
|
console.log(`Operation executed: ${executed}`);
|
|
}
|
|
}
|
|
|
|
// Run the demonstration
|
|
demonstrateManifold().catch(console.error); |