calculator / app.py
adriiita's picture
Create app.py
38b2f43 verified
raw
history blame
1.79 kB
# main.py
import gradio as gr
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
# FastAPI setup
app = FastAPI()
class CalculationRequest(BaseModel):
operation: str
x: float
y: float
@app.post("/calculate")
def calculate(request: CalculationRequest):
try:
if request.operation == "add":
answer = request.x + request.y
elif request.operation == "subtract":
answer = request.x - request.y
elif request.operation == "multiply":
answer = request.x * request.y
elif request.operation == "divide":
if request.y == 0:
raise HTTPException(status_code=400, detail="Division by zero is not allowed")
answer = request.x / request.y
else:
raise HTTPException(status_code=400, detail="Invalid operation")
return {"result": answer}
except ValueError:
raise HTTPException(status_code=400, detail="Invalid input types")
# Gradio interface
def perform_calculation(operation, x, y):
try:
x = float(x)
y = float(y)
except ValueError:
return "Error: Invalid input. Please enter numbers only."
request = CalculationRequest(operation=operation, x=x, y=y)
response = calculate(request)
return f"Result: {response['result']}"
demo = gr.Interface(
fn=perform_calculation,
inputs=[
gr.Dropdown(["add", "subtract", "multiply", "divide"], label="Operation"),
gr.Textbox(label="First Number"),
gr.Textbox(label="Second Number")
],
outputs="text",
title="Simple Calculator",
description="Enter two numbers and select an operation to perform a calculation."
)
# Run the application
if __name__ == "__main__":
demo.launch()