Download serve.py from aliasrobotics/alias3-web: direct link, hf CLI and curl.
- Browser
- Download file 2.66 kB
-
https://huggingface.co/aliasrobotics/alias3-web/resolve/main/serve.py
- Command line
-
hf download hf://aliasrobotics/alias3-web/serve.py
-
curl -L -o serve.py https://huggingface.co/aliasrobotics/alias3-web/resolve/main/serve.py
2.66 kB
| #!/usr/bin/env python3 | |
| """Static server for the alias-web bundle, with HTTP Range support for the 2.4 GB weight file. | |
| python3 serve.py [port] # default 8924; then open http://127.0.0.1:<port> in Chrome or Edge | |
| Binds to 127.0.0.1 only. Responses are marked no-store so that a changed module is never served stale; | |
| CORS is open so that a local browser extension can fetch the model from this server. | |
| """ | |
| import http.server, os, re, socketserver, sys | |
| ROOT = os.path.dirname(os.path.abspath(__file__)) | |
| class Handler(http.server.SimpleHTTPRequestHandler): | |
| def __init__(self, *a, **kw): | |
| super().__init__(*a, directory=ROOT, **kw) | |
| def send_head(self): | |
| self._remaining = None | |
| path = self.translate_path(self.path) | |
| rng = self.headers.get("Range") | |
| if not rng or not os.path.isfile(path): | |
| return super().send_head() | |
| size = os.path.getsize(path) | |
| m = re.match(r"bytes=(\d*)-(\d*)$", rng.strip()) | |
| if not m or not (m.group(1) or m.group(2)): | |
| self.send_error(416) | |
| return None | |
| if m.group(1): | |
| start, end = int(m.group(1)), min(int(m.group(2)) if m.group(2) else size - 1, size - 1) | |
| else: # suffix form: the last N bytes | |
| start, end = max(0, size - int(m.group(2))), size - 1 | |
| if start > end: | |
| self.send_error(416) | |
| return None | |
| f = open(path, "rb") | |
| f.seek(start) | |
| self._remaining = end - start + 1 | |
| self.send_response(206) | |
| self.send_header("Content-Type", self.guess_type(path)) | |
| self.send_header("Content-Range", f"bytes {start}-{end}/{size}") | |
| self.send_header("Content-Length", str(self._remaining)) | |
| self.end_headers() | |
| return f | |
| def copyfile(self, source, outputfile): | |
| if self._remaining is None: | |
| return super().copyfile(source, outputfile) | |
| left = self._remaining | |
| while left > 0: | |
| chunk = source.read(min(1 << 20, left)) | |
| if not chunk: | |
| break | |
| outputfile.write(chunk) | |
| left -= len(chunk) | |
| def end_headers(self): | |
| self.send_header("Accept-Ranges", "bytes") | |
| self.send_header("Cache-Control", "no-store") | |
| self.send_header("Access-Control-Allow-Origin", "*") | |
| super().end_headers() | |
| socketserver.TCPServer.allow_reuse_address = True | |
| if __name__ == "__main__": | |
| port = int(sys.argv[1]) if len(sys.argv) > 1 else 8924 | |
| with socketserver.ThreadingTCPServer(("127.0.0.1", port), Handler) as s: | |
| print(f"serving {ROOT} on http://127.0.0.1:{port}") | |
| s.serve_forever() | |