This commit is contained in:
2026-04-05 00:43:23 +05:30
commit 8be37d3e92
425 changed files with 101853 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
import ast, operator
from decimal import Decimal, ROUND_HALF_UP
class CalculatorTool:
name = "calculate"
async def execute(self, expression: str) -> dict:
allowed_ops = {
ast.Add: operator.add, ast.Sub: operator.sub,
ast.Mult: operator.mul, ast.Div: operator.truediv,
}
def _eval(node):
if isinstance(node, ast.Num): return Decimal(str(node.n))
elif isinstance(node, ast.BinOp):
return allowed_ops[type(node.op)](_eval(node.left), _eval(node.right))
raise ValueError(f"Unsupported: {ast.dump(node)}")
tree = ast.parse(expression, mode='eval')
result = float(_eval(tree.body).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))
return {"expression": expression, "result": result}