abhishekjoel's picture
Update app.py
ce9f2e2 verified
import threading
import time
import requests
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import gradio as gr
import uvicorn
app = FastAPI()
class Numbers(BaseModel):
x: float
y: float
@app.post("/add")
def add_numbers_api(numbers: Numbers):
return {"result": add_numbers(numbers.x, numbers.y)}
@app.post("/subtract")
def subtract_numbers_api(numbers: Numbers):
return {"result": subtract_numbers(numbers.x, numbers.y)}
@app.post("/multiply")
def multiply_numbers_api(numbers: Numbers):
return {"result": multiply_numbers(numbers.x, numbers.y)}
@app.post("/divide")
def divide_numbers_api(numbers: Numbers):
if numbers.y == 0:
raise HTTPException(status_code=400, detail="Cannot divide by zero")
return {"result": divide_numbers(numbers.x, numbers.y)}
def add_numbers(x: float, y: float) -> float:
return x + y
def subtract_numbers(x: float, y: float) -> float:
return x - y
def multiply_numbers(x: float, y: float) -> float:
return x * y
def divide_numbers(x: float, y: float) -> float:
return x / y
def run_fastapi():
uvicorn.run(app, host="127.0.0.1", port=8000)
thread = threading.Thread(target=run_fastapi, daemon=True)
thread.start()
BASE_URL = "http://127.0.0.1:8000"
def perform_operation(operation: str, x: float, y: float) -> str:
try:
url = f"{BASE_URL}/{operation}"
response = requests.post(url, json={"x": x, "y": y})
response.raise_for_status()
result = response.json().get("result")
return str(result)
except requests.exceptions.HTTPError as err:
return f"Error: {err.response.json().get('detail')}"
iface = gr.Interface(
fn=perform_operation,
inputs=[
gr.Radio(choices=["add", "subtract", "multiply", "divide"], label="Operation"),
gr.Number(label="X"),
gr.Number(label="Y")
],
outputs="text",
live=False
)
time.sleep(1)
iface.launch()