Spaces:
Sleeping
Sleeping
File size: 1,833 Bytes
ff690ea c32db4b 971b7a2 c32db4b ff690ea c32db4b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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)
|