mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 20:51:49 +00:00
init
This commit is contained in:
19
negot8/backend/tools/calculator.py
Normal file
19
negot8/backend/tools/calculator.py
Normal 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}
|
||||
Reference in New Issue
Block a user