CoolFace
Apppublic

abhishekjoel/Full_stack_calculator

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py82 linesDownload Raw Back to root
1import threading2import time3import requests4from fastapi import FastAPI, HTTPException5from pydantic import BaseModel6import gradio as gr7import uvicorn8 9 10app = FastAPI()11 12class Numbers(BaseModel):13    x: float14    y: float15 16@app.post("/add")17def add_numbers_api(numbers: Numbers):18    return {"result": add_numbers(numbers.x, numbers.y)}19 20@app.post("/subtract")21def subtract_numbers_api(numbers: Numbers):22    return {"result": subtract_numbers(numbers.x, numbers.y)}23 24@app.post("/multiply")25def multiply_numbers_api(numbers: Numbers):26    return {"result": multiply_numbers(numbers.x, numbers.y)}27 28@app.post("/divide")29def divide_numbers_api(numbers: Numbers):30    if numbers.y == 0:31        raise HTTPException(status_code=400, detail="Cannot divide by zero")32    return {"result": divide_numbers(numbers.x, numbers.y)}33 34def add_numbers(x: float, y: float) -> float:35    return x + y36 37def subtract_numbers(x: float, y: float) -> float:38    return x - y39 40def multiply_numbers(x: float, y: float) -> float:41    return x * y42 43def divide_numbers(x: float, y: float) -> float:44    return x / y45 46 47def run_fastapi():48    uvicorn.run(app, host="127.0.0.1", port=8000)49 50 51thread = threading.Thread(target=run_fastapi, daemon=True)52thread.start()53 54 55BASE_URL = "http://127.0.0.1:8000"56 57def perform_operation(operation: str, x: float, y: float) -> str:58    try:59        url = f"{BASE_URL}/{operation}"60        response = requests.post(url, json={"x": x, "y": y})61        response.raise_for_status()62        result = response.json().get("result")63        return str(result)64    except requests.exceptions.HTTPError as err:65        return f"Error: {err.response.json().get('detail')}"66 67 68iface = gr.Interface(69    fn=perform_operation,70    inputs=[71        gr.Radio(choices=["add", "subtract", "multiply", "divide"], label="Operation"),72        gr.Number(label="X"),73        gr.Number(label="Y")74    ],75    outputs="text",76    live=False77)78 79 80time.sleep(1)81iface.launch()82