Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from typing import Optional, Union | |
| import gradio as gr | |
| app = FastAPI() | |
| class OperationInput(BaseModel): | |
| num1: Union[int, float] | |
| num2: Union[int, float] | |
| operation: str | |
| def calculate(input_data: OperationInput): | |
| try: | |
| num1 = input_data.num1 | |
| num2 = input_data.num2 | |
| operation = input_data.operation.lower() | |
| if operation == "addition": | |
| result = num1 + num2 | |
| elif operation == "subtraction": | |
| result = num1 - num2 | |
| elif operation == "multiplication": | |
| result = num1 * num2 | |
| elif operation == "division": | |
| if num2 == 0: | |
| raise HTTPException(status_code=400, detail="Division by zero is not allowed.") | |
| result = num1 / num2 | |
| else: | |
| raise HTTPException(status_code=400, detail="Invalid operation.") | |
| return {"result": result} | |
| except ValueError: | |
| raise HTTPException(status_code=400, detail="Invalid input types.") | |
| def calculator(num1, num2, operation): | |
| response = calculate(OperationInput(num1=num1, num2=num2, operation=operation)) | |
| return response['result'] | |
| iface = gr.Interface( | |
| fn=calculator, | |
| inputs=[ | |
| gr.Number(label="Number 1"), | |
| gr.Number(label="Number 2"), | |
| gr.Dropdown( | |
| choices=["Addition", "Subtraction", "Multiplication", "Division"], | |
| label="Operation" | |
| ) | |
| ], | |
| outputs="text", | |
| title="Basic Arithmetic Operations", | |
| description="Perform basic arithmetic operations: addition, subtraction, multiplication, and division.", | |
| ) | |
| gr.mount_gradio_app(app, iface, path="/") | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |