Releases: Ammar-Alnagar/Helios-Engine
0.5.5
What's Changed
- adding candle backend by @Ammar-Alnagar in #16
- adding candle backend by @Ammar-Alnagar in #17
Full Changelog: 0.5.0...0.5.5
0.5.0
0.4.5
The "rebuild" branch introduces a significant new feature called ReAct mode (Reasoning and Acting) to the Helios Engine, updating the crate version from 0.4.4 to 0.4.5.
Key Changes:
ReAct Mode Feature:
Added a simple .react() method to the agent builder pattern
Enables agents to reason about tasks before taking actions
Implements a two-phase approach: Reasoning → Action
Provides transparent reasoning output with the prefix "💭 ReAct Reasoning:"
Works seamlessly with all existing tools
Documentation Updates:
Created comprehensive docs/REACT.md documentation
Updated README.md to highlight the new feature
Added ReAct information to docs/FEATURES.md
Updated documentation index in docs/README.md
Code Implementation:
Added react_mode flag to the Agent struct
Implemented generate_reasoning() function
Integrated ReAct logic into chat execution methods
Added builder method for enabling ReAct
Examples and Tests:
Created examples/react_agent.rs with complete ReAct demonstration
Added comprehensive test suite in tests/react_tests.rs
Updated integration tests with ReAct-specific tests
The ReAct feature allows developers to create agents that think before they act, which is particularly useful for complex multi-step tasks requiring planning and coordination, while maintaining the existing functionality for simpler use cases.
0.4.4
What's Changed
- Jules PR by @google-labs-jules[bot] in #13
New Contributors
- @google-labs-jules[bot] made their first contribution in #13
Full Changelog: 0.4.3...0.4.4
0.4.3
🆕 New Features
1. Multiple Tools in Single Call
Before:
let agent = Agent::builder("MyAgent")
.tool(Box::new(CalculatorTool))
.tool(Box::new(EchoTool))
.tool(Box::new(FileSearchTool))
.tool(Box::new(FileReadTool))
.build()
.await?;After:
let agent = Agent::builder("MyAgent")
.tools(vec![
Box::new(CalculatorTool),
Box::new(EchoTool),
Box::new(FileSearchTool),
Box::new(FileReadTool),
])
.build()
.await?;Benefits:
- ✅ More readable and cleaner code
- ✅ Easier to manage large lists of tools
- ✅ Backward compatible - old syntax still works
- ✅ Can organize tools into groups
2. Multiple Agents in Single Call (ForestBuilder)
Before:
let forest = ForestBuilder::new()
.agent("coordinator".to_string(), Agent::builder("coordinator"))
.agent("worker1".to_string(), Agent::builder("worker1"))
.agent("worker2".to_string(), Agent::builder("worker2"))
.build()
.await?;After:
let forest = ForestBuilder::new()
.agents(vec![
("coordinator".to_string(), Agent::builder("coordinator")),
("worker1".to_string(), Agent::builder("worker1")),
("worker2".to_string(), Agent::builder("worker2")),
])
.build()
.await?;Benefits:
- ✅ Much cleaner for forests with many agents
- ✅ Easier to see the full agent structure at a glance
- ✅ Backward compatible - old syntax still works
- ✅ Can organize agents into logical groups
📚 Documentation Improvements
Consolidation Results
Before: 24 documentation files
After: 10 documentation files
Reduction: 58% (14 files removed)
New Documentation Structure
Core Guides (New/Enhanced)
-
GETTING_STARTED.md (NEW) - Comprehensive starter guide
- Installation
- Quick start
- Basic usage
- Building agents
- Tools overview
- Forest overview
- CLI reference
-
FOREST.md (NEW) - Complete Forest of Agents guide
- Basic usage
- Coordinator-based planning
- Agent communication
- Advanced patterns
- Best practices
- Multiple examples
-
TOOLS.md (Enhanced) - Complete tools guide
- All built-in tools
- Custom tool creation
- Tool builder patterns
- Advanced patterns
- Best practices
Reference Documentation (Kept)
- API.md - Complete API reference
- RAG.md - RAG implementation guide
- CONFIGURATION.md - Configuration options
- ARCHITECTURE.md - System architecture
- FEATURES.md - Feature overview
- USING_AS_CRATE.md - Library usage
- README.md - Documentation index
Files Removed (Content Consolidated)
| Removed File | Consolidated Into |
|---|---|
| FOREST_COORDINATOR_PLANNING.md | FOREST.md |
| FOREST_ENHANCEMENT_SUMMARY.md | FOREST.md |
| FOREST_OF_AGENTS_UPDATES.md | FOREST.md |
| QUICKSTART.md | GETTING_STARTED.md |
| QUICKREF.md | GETTING_STARTED.md |
| TUTORIAL.md | GETTING_STARTED.md |
| USAGE.md | GETTING_STARTED.md |
| INSTALLATION.md | GETTING_STARTED.md |
| TOOL_CREATION_SIMPLE.md | TOOLS.md |
| STREAMING.md | FEATURES.md |
| ADVANCED.md | Multiple files |
| PROJECT_OVERVIEW.md | README.md + ARCHITECTURE.md |
| FOLDER_STRUCTURE.md | ARCHITECTURE.md |
| IMPLEMENTATION_SUMMARY.md | Removed (outdated) |
Benefits of Documentation Consolidation
- ✅ Easier Navigation - Fewer files to search through
- ✅ Better Organization - Related content grouped together
- ✅ Reduced Redundancy - No duplicate information
- ✅ Clearer Structure - Logical progression for learning
- ✅ Easier Maintenance - Fewer files to keep updated
- ✅ Comprehensive Guides - Each file covers its topic completely
🔄 Updated Examples
The following examples now use the new improved syntax:
- examples/agent_with_tools.rs - Uses
.tools(vec![...]) - examples/forest_of_agents.rs - Uses
.agents(vec![...])
Both examples demonstrate the cleaner, more readable syntax while maintaining full functionality.
✅ Testing & Validation
All Tests Pass
test result: ok. 101 passed; 0 failed; 0 ignored
All Examples Compile
Finished `dev` profile [unoptimized + debuginfo] target(s)
Backward Compatibility
- ✅ Old
.tool()method still works - ✅ Old
.agent()method still works - ✅ No breaking changes to existing code
- ✅ Existing examples still function
🎯 Migration Guide
For Tool Users
No migration required! The old syntax still works:
// This still works perfectly
.tool(Box::new(CalculatorTool))
.tool(Box::new(EchoTool))But you can upgrade to the cleaner syntax:
// New cleaner way
.tools(vec![
Box::new(CalculatorTool),
Box::new(EchoTool),
])For Forest Users
No migration required! The old syntax still works:
// This still works perfectly
.agent("worker1".to_string(), Agent::builder("worker1"))
.agent("worker2".to_string(), Agent::builder("worker2"))But you can upgrade to the cleaner syntax:
// New cleaner way
.agents(vec![
("worker1".to_string(), Agent::builder("worker1")),
("worker2".to_string(), Agent::builder("worker2")),
])For Documentation Users
Updated navigation:
- Instead of QUICKSTART.md → Use GETTING_STARTED.md
- Instead of TUTORIAL.md → Use GETTING_STARTED.md
- Instead of USAGE.md → Use GETTING_STARTED.md
- Instead of multiple Forest docs → Use FOREST.md
- Instead of TOOL_CREATION_SIMPLE.md → Use TOOLS.md
All content has been preserved and enhanced in the consolidated files.
📈 Impact
Code Quality
- ✅ More readable and maintainable
- ✅ Easier to understand for new users
- ✅ Follows Rust best practices
- ✅ Consistent with modern Rust APIs
Developer Experience
- ✅ Less typing for common operations
- ✅ More intuitive API
- ✅ Better code organization
- ✅ Clearer documentation structure
Documentation Quality
- ✅ 60% fewer files to maintain
- ✅ Easier to find information
- ✅ More comprehensive guides
- ✅ Better examples and patterns
🚀 Next Steps
Recommended Actions
- Review the new documentation structure in
docs/README.md - Check out GETTING_STARTED.md for the complete guide
- Explore FOREST.md for multi-agent patterns
- Try the new syntax in your projects (optional, no rush!)
- Update bookmarks to point to new documentation files
Future Enhancements (Optional)
Consider these improvements for future releases:
-
Tool Groups - Pre-defined tool sets for common use cases
.tools(ToolGroups::file_operations()) .tools(ToolGroups::data_analysis())
-
Agent Templates - Pre-configured agent builders
.agents(AgentTemplates::development_team())
-
Builder Validation - Better error messages
.validate_before_build(true)
-
Configuration Presets - Common configurations
Config::preset("local_llama") Config::preset("production_gpt4")
📊 Statistics
Code Changes
- Files Modified: 4
src/agent.rs- Added.tools()methodsrc/forest.rs- Added.agents()methodexamples/agent_with_tools.rs- Updated to use new syntaxexamples/forest_of_agents.rs- Updated to use new syntax
Documentation Changes
- Files Removed: 14
- Files Created: 2 (GETTING_STARTED.md, FOREST.md)
- Files Updated: 1 (README.md)
- Net Change: -12 files
Test Results
- Total Tests: 101
- Passed: 101 ✅
- Failed: 0
- Success Rate: 100%
🙏 Feedback Welcome!
We'd love to hear your thoughts on these improvements:
- Do you prefer the new syntax?
- Is the documentation easier to navigate?
- What other improvements would you like to see?
Open an issue or PR on GitHub to share your feedback!
Version: 0.4.3+
Date: 2025
Status: ✅ Complete & Tested
0.4.2
Overview
The new ToolBuilder feature in Helios Engine introduces a dramatically simplified way to create custom tools for LLM agents. With ToolBuilder, developers can wrap any function as a tool using a fluent builder pattern or the ultra-simple quick_tool! macro, eliminating the need for manual trait implementation and boilerplate code.
Key Highlights
- Zero Boilerplate: Create tools in a single expression with automatic parameter extraction and type inference.
- Builder Pattern: Use
ToolBuilderto fluently define tool name, description, parameters, and execution logic. - Macro Magic: The
quick_tool!macro enables tool creation with just a function signature and body. - Type Safety: Supports Rust primitives (
i32,f64,bool,String, etc.) with automatic JSON extraction and conversion. - Async & Sync Support: Easily define synchronous or asynchronous tool logic.
- Comprehensive Examples: See
examples/tool_builder_demo.rsfor real-world usage.
Usage Examples
1. ToolBuilder Pattern
use helios_engine::{ToolBuilder, ToolResult};
use serde_json::Value;
let tool = ToolBuilder::new("my_tool")
.description("Does something useful")
.required_parameter("input", "string", "The input value")
.sync_function(|args: Value| {
let input = args.get("input").and_then(|v| v.as_str())
.ok_or_else(|| helios_engine::HeliosError::ToolError(
"Missing input parameter".to_string()
))?;
Ok(ToolResult::success(format!("Processed: {}", input)))
})
.build();
2. Macro-Based Tool Creation
use helios_engine::quick_tool;
let volume_tool = quick_tool! {
name: calculate_volume,
description: "Calculate the volume of a box",
params: (width: f64, height: f64, depth: f64),
execute: |width, height, depth| {
format!("Volume: {:.2} cubic meters", width * height * depth)
}
};
3. Real-World Demo
See the full demo in:
// Demonstrates creating tools for addition, multiplication, area, volume, BMI, greetings, and discounts
// using both ToolBuilder and quick_tool! macro
API Reference
ToolBuilder::new(name).description(desc).required_parameter(name, type, desc).optional_parameter(name, type, desc).function(async_fn)/.sync_function(sync_fn).build()/.try_build()
Parameter Types: "string", "number", "boolean", "object", "array"
Best Practices
- Write clear descriptions for tools and parameters.
- Always validate required parameters and handle errors gracefully.
- Use async functions for I/O-bound tools.
- See
examples/tool_builder_demo.rsfor patterns and advanced usage.
Documentation
- Main:
docs/TOOLS.md - Example:
examples/tool_builder_demo.rs - Macro: See "Quick Start:
quick_tool!Macro" indocs/TOOLS.md
Testing & Verification
🧪 TESTING:
- Run the demo:
cargo run --example tool_builder_demo - All tools are covered in the example and validated for correct type inference and execution.
EXPECTED_OUTPUTS:
- Agent responds correctly to math, greeting, and discount queries using the generated tools.
- No errors or warnings detected in the codebase.
- No GitHub releases or tags found; this report is based on the latest code and documentation.
0.4.1
Added new and improved Forest of Agents v2 with planning now .
also added native support for openrouter and vllm extra return parameters and tool calling
0.4.0
added features docs
0.3.9
fixing the examples and new syntax
0.3.8
fixed default streaming