gemma4-webgpu / app.py
ryanhlewis's picture
Serve app through free Gradio runtime
f5f0d68 verified
Raw
History Blame Contribute Delete
1.62 kB
from __future__ import annotations
import mimetypes
import os
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
ROOT = Path(__file__).resolve().parent
DIST = ROOT / "dist"
PORT = int(os.environ.get("PORT", "7860"))
mimetypes.add_type("application/javascript", ".js")
mimetypes.add_type("text/css", ".css")
mimetypes.add_type("application/wasm", ".wasm")
class Handler(SimpleHTTPRequestHandler):
def __init__(self, *args, **kwargs):
super().__init__(*args, directory=str(DIST), **kwargs)
def end_headers(self):
self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
self.send_header("Cross-Origin-Opener-Policy", "same-origin")
self.send_header("Cross-Origin-Resource-Policy", "cross-origin")
self.send_header("Access-Control-Allow-Origin", "*")
super().end_headers()
def translate_path(self, path):
resolved = Path(super().translate_path(path))
if resolved.is_dir():
return str(DIST / "index.html")
if not resolved.exists() and not path.startswith("/assets/"):
return str(DIST / "index.html")
return str(resolved)
def log_message(self, format, *args):
print(f"{self.address_string()} - {format % args}", flush=True)
if __name__ == "__main__":
if not (DIST / "index.html").exists():
raise SystemExit("dist/index.html is missing. Run `npm run build` before deploying.")
server = ThreadingHTTPServer(("0.0.0.0", PORT), Handler)
print(f"Serving {DIST} on 0.0.0.0:{PORT}", flush=True)
server.serve_forever()