Spaces:
Sleeping
Sleeping
| 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 | |
| def add_numbers_api(numbers: Numbers): | |
| return {"result": add_numbers(numbers.x, numbers.y)} | |
| def subtract_numbers_api(numbers: Numbers): | |
| return {"result": subtract_numbers(numbers.x, numbers.y)} | |
| def multiply_numbers_api(numbers: Numbers): | |
| return {"result": multiply_numbers(numbers.x, numbers.y)} | |
| 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() | |