Spaces:
Sleeping
Sleeping
Download main.py from paulhemb/FridgeChefAI: direct link, hf CLI and curl.
- Browser
- Download file 1.81 kB
-
https://huggingface.co/spaces/paulhemb/FridgeChefAI/resolve/main/main.py
- Command line
-
hf download hf://spaces/paulhemb/FridgeChefAI/main.py
-
curl -L -o main.py https://huggingface.co/spaces/paulhemb/FridgeChefAI/resolve/main/main.py
1.81 kB
| import os | |
| import httpx | |
| from fastapi import FastAPI, HTTPException, Request | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| app = FastAPI(title="NVIDIA API Proxy") | |
| # Enable CORS for all domains so the frontend on Vercel can connect seamlessly | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| NVIDIA_API_KEY = os.getenv("NVIDIA_API_KEY") | |
| NVIDIA_API_URL = "https://integrate.api.nvidia.com/v1/chat/completions" | |
| def read_root(): | |
| return {"status": "ok", "message": "FridgeChef Backend is running!"} | |
| async def proxy_nvidia(request: Request): | |
| if not NVIDIA_API_KEY: | |
| raise HTTPException(status_code=500, detail="Missing NVIDIA_API_KEY on the backend secure server.") | |
| body = await request.json() | |
| async with httpx.AsyncClient() as client: | |
| try: | |
| # We use an extended timeout (120s) because large vision queries or recipe generations can take time | |
| response = await client.post( | |
| NVIDIA_API_URL, | |
| headers={ | |
| "Authorization": f"Bearer {NVIDIA_API_KEY}", | |
| "Content-Type": "application/json", | |
| "Accept": "application/json" | |
| }, | |
| json=body, | |
| timeout=120.0 | |
| ) | |
| if response.status_code != 200: | |
| raise HTTPException(status_code=response.status_code, detail=response.text) | |
| return response.json() | |
| except httpx.RequestError as exc: | |
| raise HTTPException(status_code=500, detail=f"Request to NVIDIA failed: {str(exc)}") | |