Example: Adding a Calculator to Our Agent › Extending the Calculator

Michael BrenndoerferJune 29, 20252 min read
AI Agent HandbookAll chapters
Part 5 of 15Tool Use - Extending the Agent's Abilities
Chapter 14Example: Adding a Calculator to Our Agent › Extending the Calculator
Reading section 10 of 16 · Extending the Calculator · 2 minSection 10 of 16 · 2 min

Book contents

Section 10 of 16 · 2 min read

Example: Adding a Calculator to Our Agent › Extending the CalculatorOne section · Sections in this chapter10 / 16 ↓

Our basic calculator works, but we can make it more robust. Here's an enhanced version that handles more scenarios:

In[14]:
Code
import re

def calculate_enhanced(expression: str) -> dict:
    """
    Enhanced calculator with better error handling and formatting.
    
    Args:
        expression: A math expression
    
    Returns:
        Dictionary with result or error
    """
    try:
        # Clean the expression
        # Remove common words that might appear
        expression = expression.lower()
        expression = re.sub(r'\b(what is|calculate|compute|equals?)\b', '', expression)
        expression = expression.strip()
        
        # Replace common word operators
        expression = expression.replace('times', '*')
        expression = expression.replace('divided by', '/')
        expression = expression.replace('plus', '+')
        expression = expression.replace('minus', '-')
        expression = expression.replace('to the power of', '**')
        
        # Evaluate
        result = eval(expression)
        
        # Format the result nicely
        if isinstance(result, float):
            # Round to reasonable precision
            if result.is_integer():
                result = int(result)
            else:
                result = round(result, 6)
        
        return {
            "success": True,
            "result": result,
            "expression": expression
        }
    except Exception as e:
        return {
            "success": False,
            "error": f"Could not evaluate '{expression}': {str(e)}",
            "expression": expression
        }

This enhanced version:

  • Cleans up the expression by removing common phrases
  • Replaces word operators ("times" → "*")
  • Formats results nicely (removes unnecessary decimals)
  • Provides clearer error messages

You can swap this into your agent by updating the tool registry:

In[15]:
Code
tool_registry = {
    "calculate": calculate_enhanced
}