Download cog/server.py from lee101/mojo-tabular: direct link, hf CLI and curl.
- Browser
- Download file 1.97 kB
-
https://huggingface.co/lee101/mojo-tabular/resolve/main/cog/server.py
- Command line
-
hf download hf://lee101/mojo-tabular/cog/server.py
-
curl -L -o server.py https://huggingface.co/lee101/mojo-tabular/resolve/main/cog/server.py
1.97 kB
| import json | |
| from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer | |
| from predict import Predictor | |
| MAX_BODY = 4 * 1024 * 1024 | |
| P = Predictor() | |
| STATE = {'status': 'SETUP'} | |
| SCHEMA = {'outputKind': 'json', 'inputs': [ | |
| {'name': 'dataset', 'type': 'string', 'required': True, 'order': 0, | |
| 'choices': ['adult', 'bank-marketing', 'credit-g', 'diabetes', 'phoneme'], | |
| 'description': 'Model to use (OpenML dataset schema)'}, | |
| {'name': 'rows', 'type': 'string', 'required': True, 'order': 1, | |
| 'description': 'JSON object or list of up to 1000 objects with the dataset columns'}]} | |
| class H(BaseHTTPRequestHandler): | |
| def send(self, code, obj): | |
| b = json.dumps(obj).encode() | |
| self.send_response(code) | |
| self.send_header('content-type', 'application/json') | |
| self.send_header('content-length', str(len(b))) | |
| self.end_headers() | |
| self.wfile.write(b) | |
| def do_GET(self): | |
| if self.path == '/health-check': | |
| self.send(200, {'status': STATE['status']}) | |
| elif self.path == '/openapi.json': | |
| self.send(200, SCHEMA) | |
| else: | |
| self.send(404, {'error': 'not found'}) | |
| def do_POST(self): | |
| if self.path != '/predictions': | |
| return self.send(404, {'error': 'not found'}) | |
| n = int(self.headers.get('content-length') or 0) | |
| if n > MAX_BODY: | |
| return self.send(413, {'status': 'failed', 'error': 'body too large'}) | |
| try: | |
| inp = json.loads(self.rfile.read(n))['input'] | |
| out = P.predict(inp['dataset'], inp['rows']) | |
| self.send(200, {'status': 'succeeded', 'output': json.loads(out)}) | |
| except Exception as e: | |
| self.send(200, {'status': 'failed', 'error': f'{type(e).__name__}: {e}'[:300]}) | |
| def log_message(self, *a): | |
| pass | |
| if __name__ == '__main__': | |
| P.setup() | |
| STATE['status'] = 'READY' | |
| ThreadingHTTPServer(('0.0.0.0', 5000), H).serve_forever() | |