Final_Assignment_D3MI4N / tools /calculator_tool.py
D3MI4N's picture
first working version
5ada353
from langchain.tools import tool
import ast
import operator
def safe_eval(expr):
ops = {
ast.Add: operator.add,
ast.Sub: operator.sub,
ast.Mult: operator.mul,
ast.Div: operator.truediv,
ast.Pow: operator.pow,
ast.USub: operator.neg,
}
def _eval(node):
if isinstance(node, ast.Constant):
return node.n
elif isinstance(node, ast.BinOp):
return ops[type(node.op)](_eval(node.left), _eval(node.right))
elif isinstance(node, ast.UnaryOp):
return ops[type(node.op)](_eval(node.operand))
else:
raise TypeError(f"Unsupported expression: {node}")
node = ast.parse(expr, mode='eval').body
return _eval(node)
@tool(description="Performs basic arithmetic calculations on a query string and returns the result as a string.")
def calculator_tool(query: str) -> str:
try:
result = safe_eval(query)
return str(result)
except Exception as e:
return f"Error evaluating expression: {e}"