Spaces:
Sleeping
Sleeping
File size: 2,717 Bytes
951c6d3 6f446f3 8d34c11 6f446f3 facb1f4 6f446f3 8d34c11 951c6d3 |
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import gradio as gr
import requests
import os
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
# Create FastAPI app
app = FastAPI()
# Add CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class CalculatorInput(BaseModel):
num1: float
num2: float
operation: str
class CalculatorResponse(BaseModel):
result: float
operation: str
@app.post("/calculate", response_model=CalculatorResponse)
async def calculate(input_data: CalculatorInput):
result = 0.0
if input_data.operation == "add":
result = input_data.num1 + input_data.num2
elif input_data.operation == "subtract":
result = input_data.num1 - input_data.num2
elif input_data.operation == "multiply":
result = input_data.num1 * input_data.num2
elif input_data.operation == "divide":
if input_data.num2 == 0:
raise ValueError("Cannot divide by zero")
result = input_data.num1 / input_data.num2
else:
raise ValueError("Invalid operation")
return CalculatorResponse(result=result, operation=input_data.operation)
# Create Gradio interface
def calculate_interface(num1: float, num2: float, operation: str) -> str:
try:
# Calculate directly without making an HTTP request
result = 0.0
if operation == "add":
result = num1 + num2
elif operation == "subtract":
result = num1 - num2
elif operation == "multiply":
result = num1 * num2
elif operation == "divide":
if num2 == 0:
return "Error: Cannot divide by zero"
result = num1 / num2
else:
return "Error: Invalid operation"
return f"Result: {result}"
except Exception as e:
return f"Error: {str(e)}"
# Create the Gradio interface
with gr.Blocks(title="Calculator") as demo:
gr.Markdown("# Calculator")
with gr.Row():
num1 = gr.Number(label="First Number")
num2 = gr.Number(label="Second Number")
with gr.Row():
operation = gr.Radio(
choices=["add", "subtract", "multiply", "divide"],
label="Operation",
value="add"
)
with gr.Row():
calculate_btn = gr.Button("Calculate")
result = gr.Textbox(label="Result")
calculate_btn.click(
fn=calculate_interface,
inputs=[num1, num2, operation],
outputs=result
)
# Launch the app
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860) |