Spaces:
Sleeping
Sleeping
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 | |
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) |