Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, Request, Response | |
| from fastapi.responses import StreamingResponse | |
| import httpx | |
| import os | |
| app = FastAPI() | |
| HF_TOKEN = os.environ.get("HF_TOKEN") | |
| BASE_URL = "https://huggingface.co" | |
| # Create a shared async client | |
| client = httpx.AsyncClient(base_url=BASE_URL, follow_redirects=True) | |
| def home(): | |
| return {"status": "running", "message": "Universal HF Proxy Active", "token_detected": bool(HF_TOKEN)} | |
| async def proxy(request: Request, path: str): | |
| url = f"{BASE_URL}/{path}" | |
| if request.url.query: | |
| url += f"?{request.url.query}" | |
| print(f"Proxying: {request.method} {url}") | |
| # Filter headers | |
| headers = {k: v for k, v in request.headers.items() if k.lower() not in ["host", "content-length", "connection"]} | |
| if HF_TOKEN and "authorization" not in [k.lower() for k in headers.keys()]: | |
| headers["Authorization"] = f"Bearer {HF_TOKEN}" | |
| try: | |
| # Build request | |
| body = await request.body() | |
| rp_req = client.build_request(request.method, url, headers=headers, content=body) | |
| rp_resp = await client.send(rp_req, stream=True) | |
| # Filter response headers | |
| excluded = ["content-encoding", "transfer-encoding", "connection", "keep-alive"] | |
| resp_headers = {k: v for k, v in rp_resp.headers.items() if k.lower() not in excluded} | |
| return StreamingResponse( | |
| rp_resp.aiter_raw(), | |
| status_code=rp_resp.status_code, | |
| headers=resp_headers, | |
| media_type=rp_resp.headers.get("content-type") | |
| ) | |
| except Exception as e: | |
| print(f"Proxy Error: {e}") | |
| return Response(content=str(e), status_code=500) | |