Calculator / app.py
ash2203's picture
Update app.py
971b7a2 verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional, Union
import gradio as gr
app = FastAPI()
class OperationInput(BaseModel):
num1: Union[int, float]
num2: Union[int, float]
operation: str
@app.post("/calculate")
def calculate(input_data: OperationInput):
try:
num1 = input_data.num1
num2 = input_data.num2
operation = input_data.operation.lower()
if operation == "addition":
result = num1 + num2
elif operation == "subtraction":
result = num1 - num2
elif operation == "multiplication":
result = num1 * num2
elif operation == "division":
if num2 == 0:
raise HTTPException(status_code=400, detail="Division by zero is not allowed.")
result = num1 / num2
else:
raise HTTPException(status_code=400, detail="Invalid operation.")
return {"result": result}
except ValueError:
raise HTTPException(status_code=400, detail="Invalid input types.")
def calculator(num1, num2, operation):
response = calculate(OperationInput(num1=num1, num2=num2, operation=operation))
return response['result']
iface = gr.Interface(
fn=calculator,
inputs=[
gr.Number(label="Number 1"),
gr.Number(label="Number 2"),
gr.Dropdown(
choices=["Addition", "Subtraction", "Multiplication", "Division"],
label="Operation"
)
],
outputs="text",
title="Basic Arithmetic Operations",
description="Perform basic arithmetic operations: addition, subtraction, multiplication, and division.",
)
gr.mount_gradio_app(app, iface, path="/")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)