import os import time import gradio as gr from starlette.requests import Request from starlette.responses import JSONResponse, Response DOWNLOAD_SIZE_BYTES = 10 * 1024 * 1024 _RANDOM_BLOB = os.urandom(DOWNLOAD_SIZE_BYTES) NO_CACHE_HEADERS = { "Cache-Control": "no-store, no-cache, must-revalidate, max-age=0", "Pragma": "no-cache", "Expires": "0", } def register_backend_routes(blocks: gr.Blocks) -> None: """Attach REST endpoints to the underlying Gradio server once it exists.""" server_app = getattr(blocks, "server_app", None) if server_app is None: return if getattr(server_app.state, "speedtest_routes_installed", False): return server_app.state.speedtest_routes_installed = True async def ping_test() -> Response: headers = {**NO_CACHE_HEADERS, "Content-Length": "4", "X-Server-Timestamp": str(time.time())} return Response(content="pong", media_type="text/plain", headers=headers) async def download_test() -> Response: headers = { **NO_CACHE_HEADERS, "Content-Length": str(DOWNLOAD_SIZE_BYTES), "Content-Disposition": f'attachment; filename="speedtest_{DOWNLOAD_SIZE_BYTES}.bin"', } return Response(content=_RANDOM_BLOB, media_type="application/octet-stream", headers=headers) async def upload_test(request: Request) -> JSONResponse: payload = await request.body() headers = dict(NO_CACHE_HEADERS) return JSONResponse({"received_bytes": len(payload)}, headers=headers) server_app.add_api_route("/ping_test", ping_test, methods=["GET"]) server_app.add_api_route("/download_test", download_test, methods=["GET"]) server_app.add_api_route("/upload_test", upload_test, methods=["POST"]) with gr.Blocks(fill_height=True) as demo: gr.HTML(value="""

Wi-Fi / Ethernet Speed Test

Run a download, upload, and latency check right from your browser. Results reflect the real connection between this device and Hugging Face Spaces.

Download -
Average throughput in Mbps
Upload -
Average throughput in Mbps
Ping -
Round-trip latency in ms
""") def _ensure_routes() -> None: register_backend_routes(demo) demo.load(fn=_ensure_routes, inputs=None, outputs=None) def build_app() -> gr.Blocks: register_backend_routes(demo) return demo app = build_app() if __name__ == "__main__": import os port = int(os.environ.get("PORT", 7860)) app.queue().launch(server_name="0.0.0.0", server_port=port)