diff --git a/README.md b/README.md index 46b40f3..121f378 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,19 @@ ![License: MIT](https://img.shields.io/badge/License-MIT-green.svg) ![Node Version](https://img.shields.io/badge/node-%3E%3D%2014.0.0-brightgreen) +## Table of Contents +- [Overview](#overview) +- [Installation](#installation) +- [Quick Start](#quick-start) +- [Core Components](#core-components) +- [Complete Example](#complete-example) +- [API Reference](#api-reference) +- [State Management](#state-management) +- [LLM Integration](#llm-integration) +- [Error Handling](#error-handling) +- [Contributing](#contributing) +- [License](#license) + ## Overview `workflow-function-manifold` enables you to create dynamic workflows that: @@ -241,6 +254,46 @@ class CustomLLMService { } ``` +#### **Error Handling** + +This library includes basic error handling to ensure workflows continue running smoothly, even when unexpected issues arise. + +#### **Navigation Errors** + +If a prompt doesn't match a valid adjacent region, the system will: +- Log a warning: `No valid region found for prompt: ""` +- Continue without changing the current region. + +#### **Operator Execution Errors** + +If no matching operator is found for a prompt, or an operator encounters an error during execution: +- Log a warning: `No matching operator found for intent: ` +- Log an error if execution fails: `Error during workflow execution for prompt "": ` + +#### **LLM Query Errors** + +In case of issues querying the LLM service: +- Log an error: `Error during navigation for prompt "": ` + +#### **Example Error Logging** + +```javascript +const manifold = new WorkflowFunctionManifold(new DummyLlmService()); + +try { + await manifold.navigate('unknown command'); +} catch (error) { + console.error('Critical navigation error:', error); +} + +try { + await manifold.executeWorkflow('perform unknown action'); +} catch (error) { + console.error('Critical execution error:', error); +} +``` + + ## Contributing 1. Fork the repository diff --git a/index.js b/index.js index 9a7ace5..3b86dfb 100644 --- a/index.js +++ b/index.js @@ -66,31 +66,44 @@ class WorkflowFunctionManifold { } async navigate(prompt) { - const intent = await this.llmService.query(prompt); + try { + const intent = await this.llmService.query(prompt); - // Find best region based on intent - const nextRegion = Array.from(this.currentRegion.adjacentRegions) - .find(region => region.name.toLowerCase().includes(intent.action)); + // 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; + 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; } - return false; } async executeWorkflow(prompt) { - const operators = await this.currentRegion.getValidOperators(this.state); - const intent = await this.llmService.query(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)); + const matchedOperator = operators.find(op => op.name.toLowerCase().includes(intent.action)); - if (matchedOperator) { - this.state = await matchedOperator.execute(this.state); - return true; + 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; } - return false; } } diff --git a/package.json b/package.json index ff5675d..6bb123a 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "manifold", + "name": "workflow-function-manifold", "version": "1.0.0", - "description": "", + "description": "for building dynamic, LLM-driven workflows using a region-based execution model", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", - "license": "ISC" + "license": "MIT" }