Spaces:
Runtime error
Runtime error
from typing import Any, Optional | |
from smolagents.tools import Tool | |
class MathOperationsTool(Tool): | |
name = "math_operations" | |
description = "Performs mathematical operations like multiplication, addition, subtraction, division, modulus, power, and square root" | |
inputs = { | |
'operation': {'type': 'string', 'description': 'The operation to perform: "multiply", "add", "subtract", "divide", "modulus", "power", "square_root"'}, | |
'a': {'type': 'number', 'description': 'First value'}, | |
'b': {'type': 'number', 'description': 'Second value (not used for square_root)', 'nullable': True} | |
} | |
output_type = "number" | |
def multiply(self, a: float, b: float) -> float: | |
"""Multiply two numbers.""" | |
return a * b | |
def add(self, a: float, b: float) -> float: | |
"""Add two numbers.""" | |
return a + b | |
def subtract(self, a: float, b: float) -> float: | |
"""Subtract two numbers.""" | |
return a - b | |
def divide(self, a: float, b: float) -> float: | |
"""Divide two numbers.""" | |
if b == 0: | |
raise ValueError("Cannot divide by zero.") | |
return a / b | |
def modulus(self, a: float, b: float) -> float: | |
"""Get the modulus of two numbers.""" | |
if b == 0: | |
raise ValueError("Cannot calculate modulus with zero.") | |
return a % b | |
def power(self, a: float, b: float) -> float: | |
"""Raise a number to the power of another number.""" | |
return a ** b | |
def square_root(self, a: float) -> float: | |
"""Get the square root of a number.""" | |
if a < 0: | |
raise ValueError("Cannot get square root of negative number.") | |
return a ** 0.5 | |
def forward(self, operation: str, a: float, b: Optional[float] = None) -> float: | |
""" | |
Execute the requested mathematical operation. | |
Args: | |
operation: The operation to perform (multiply, add, subtract, divide, modulus, power, square_root) | |
a: First number | |
b: Second number (not required for square_root) | |
Returns: | |
float: Result of the mathematical operation | |
""" | |
operations = { | |
'multiply': self.multiply, | |
'add': self.add, | |
'subtract': self.subtract, | |
'divide': self.divide, | |
'modulus': self.modulus, | |
'power': self.power, | |
'square_root': self.square_root | |
} | |
if operation not in operations: | |
raise ValueError(f"Invalid operation. Must be one of: {', '.join(operations.keys())}") | |
if operation == 'square_root': | |
return operations[operation](a) | |
if b is None: | |
raise ValueError(f"Second number (b) is required for operation: {operation}") | |
return operations[operation](a, b) |