O-Reasonable 🧠
A lightweight reasoning agent designed to mimic logical planning and problem-solving capabilities using cost-effective OpenAI models. It generates step-by-step plans, executes them sequentially, and synthesizes a final answer.
[
]
Features
- 🎯 Dynamic model selection with sensible defaults
- 📋 Structured step-by-step planning
- 🔄 Sequential execution of reasoning steps
- 🎨 Clean and informative console output
- ⚡ Built with TypeScript and Vite
Installation
npm install o-reasonable
Configuration
You'll need to set up your OpenAI API key as an environment variable:
export OPENAI_API_KEY=your-api-key-here
Or create a .env file in your project root:
OPENAI_API_KEY=your-api-key-here
Usage
import { runAgent } from 'o-reasonable';
const result = await runAgent("What would be the impact of implementing a four-day work week?");
const result = await runAgent("Analyze the pros and cons of remote work", {
model: "gpt-4o-mini",
enableLogs: false
});
console.log(result.steps);
console.log(result.finalQuestion);
console.log(result.finalAnswer);
Configuration Options
The runAgent function accepts a configuration object with the following options:
interface OReasonableConfig {
model?: string;
apiKey?: string;
baseURL?: string;
enableLogs?: boolean;
enableReflection?: boolean;
minConfidence?: number;
maxRetries?: number;
}
Enhanced Reasoning Features
O-Reasonable now includes advanced reasoning capabilities that significantly improve the quality and reliability of the generated responses:
🔍 Step Validation & Reflection
Each reasoning step is automatically validated for:
- Confidence: How certain the AI is about the step's accuracy
- Relevance: How well the step contributes to solving the original task
- Logical soundness: Whether the reasoning is well-founded
🧠 Smart Context Management
- Context Summarization: Automatically summarizes previous steps to maintain focus
- Conversation Threading: Builds coherent conversation history between steps
- Relevance Filtering: Keeps only the most important information for subsequent steps
🔄 Adaptive Execution
- Quality Thresholds: Automatically retries steps that don't meet confidence requirements
- Enhanced Planning: Uses proven reasoning frameworks (analytical, comparative, causal, creative)
- Self-Evaluation: Reflects on the overall reasoning process quality
📊 Confidence Tracking
- Individual step confidence scores
- Overall reasoning confidence
- Quality metrics for each step
const result = await runAgent("Analyze the impact of remote work on productivity", {
enableReflection: true,
minConfidence: 0.7,
maxRetries: 2,
enableLogs: true
});
console.log(result.steps);
console.log(result.overallConfidence);
console.log(result.reflections);
Step Result Structure
interface StepResult {
content: string;
confidence: number;
relevance: number;
isValid: boolean;
reasoning: string;
}
Using OpenAI-Compatible APIs
O-Reasonable supports any OpenAI-compatible API by specifying a custom baseURL. Here are some examples:
Local Models (Ollama, LM Studio, etc.)
import { runAgent } from 'o-reasonable';
const result = await runAgent("Explain quantum computing", {
baseURL: "http://localhost:11434/v1",
model: "llama2",
apiKey: "ollama"
});
const result = await runAgent("What are the benefits of TypeScript?", {
baseURL: "http://localhost:1234/v1",
model: "local-model",
apiKey: "lm-studio"
});
Azure OpenAI
const result = await runAgent("Analyze market trends", {
baseURL: "https://your-resource.openai.azure.com",
model: "gpt-35-turbo",
apiKey: process.env.AZURE_OPENAI_API_KEY
});
Other OpenAI-Compatible Providers
const result = await runAgent("Create a project plan", {
baseURL: "https://api.your-provider.com/v1",
model: "your-model-name",
apiKey: "your-api-key"
});
Return Type
The runAgent function returns a promise that resolves to an enhanced AgentResult:
interface AgentResult {
steps: StepResult[];
finalQuestion: string;
finalAnswer: string;
overallConfidence: number;
reflections: string[];
}
Examples
Quick Start
node quickstart.js
Comprehensive Examples
node example.js
npx ts-node example.ts
node examples/configurations.js
Basic Usage
import { runAgent } from 'o-reasonable';
const result = await runAgent("What are the key factors in choosing a programming language?");
console.log(result.finalAnswer);
console.log(`Confidence: ${result.overallConfidence.toFixed(2)}`);
Advanced Reasoning Configuration
const result = await runAgent("Design a sustainable urban transportation system", {
enableReflection: true,
minConfidence: 0.8,
maxRetries: 3,
enableLogs: true,
model: "gpt-4"
});
result.steps.forEach((step, i) => {
console.log(`Step ${i+1}: Confidence ${step.confidence.toFixed(2)}, Relevance ${step.relevance.toFixed(2)}`);
});
Debugging and Analysis
const result = await runAgent("Solve this complex business problem", {
enableLogs: true,
enableReflection: true
});
console.log("Reflections on reasoning quality:");
result.reflections.forEach(reflection => console.log(reflection));
Development
To set up the development environment:
git clone https://github.com/chihebnabil/o-reasonable.git
cd o-reasonable
npm install
npm run dev
Building
npm run build
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Credits
Created with ❤️ by Chiheb Nabil