File size: 1,959 Bytes
401927c
 
 
99db2c0
401927c
 
 
99db2c0
ce9f2e2
b5adad5
 
 
 
 
 
 
198c437
 
b5adad5
 
198c437
 
b5adad5
 
198c437
 
b5adad5
 
198c437
401927c
 
99db2c0
198c437
 
 
2874038
198c437
 
2874038
198c437
 
2874038
198c437
 
401927c
ce9f2e2
401927c
 
 
ce9f2e2
401927c
 
 
ce9f2e2
401927c
 
 
 
 
 
 
 
 
 
 
 
ce9f2e2
401927c
 
 
 
 
 
 
 
 
 
 
ce9f2e2
401927c
 
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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()