Spaces:
Sleeping
Sleeping
| 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) | |
| def calculator_tool(query: str) -> str: | |
| try: | |
| result = safe_eval(query) | |
| return str(result) | |
| except Exception as e: | |
| return f"Error evaluating expression: {e}" | |