Upload server.py with huggingface_hub
Browse files
server.py
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
import logging
|
| 3 |
+
from http.server import HTTPServer, BaseHTTPRequestHandler
|
| 4 |
+
|
| 5 |
+
from handler import EndpointHandler
|
| 6 |
+
|
| 7 |
+
# Configure logging
|
| 8 |
+
logging.basicConfig(level=logging.INFO)
|
| 9 |
+
logger = logging.getLogger(__name__)
|
| 10 |
+
|
| 11 |
+
# Initialize the handler
|
| 12 |
+
handler = EndpointHandler()
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class RequestHandler(BaseHTTPRequestHandler):
|
| 16 |
+
def do_POST(self):
|
| 17 |
+
try:
|
| 18 |
+
content_length = int(self.headers['Content-Length'])
|
| 19 |
+
post_data = self.rfile.read(content_length)
|
| 20 |
+
data = json.loads(post_data.decode('utf-8'))
|
| 21 |
+
|
| 22 |
+
logger.info(f'Received request with {len(data.get("inputs", []))} inputs')
|
| 23 |
+
|
| 24 |
+
# Process the request
|
| 25 |
+
result = handler(data)
|
| 26 |
+
|
| 27 |
+
# Send response
|
| 28 |
+
self.send_response(200)
|
| 29 |
+
self.send_header('Content-Type', 'application/json')
|
| 30 |
+
self.end_headers()
|
| 31 |
+
self.wfile.write(json.dumps(result).encode('utf-8'))
|
| 32 |
+
|
| 33 |
+
except Exception as e:
|
| 34 |
+
logger.error(f'Error processing request: {str(e)}')
|
| 35 |
+
self.send_response(500)
|
| 36 |
+
self.send_header('Content-Type', 'application/json')
|
| 37 |
+
self.end_headers()
|
| 38 |
+
error_response = [{'error': str(e), 'generated_text': ''}]
|
| 39 |
+
self.wfile.write(json.dumps(error_response).encode('utf-8'))
|
| 40 |
+
|
| 41 |
+
def do_GET(self):
|
| 42 |
+
if self.path == '/health':
|
| 43 |
+
# Trigger initialisation if needed but don't block.
|
| 44 |
+
if not handler.initialized:
|
| 45 |
+
try:
|
| 46 |
+
handler._initialize_components()
|
| 47 |
+
except Exception as e:
|
| 48 |
+
logger.error(f'Initialization failed during health check: {str(e)}')
|
| 49 |
+
|
| 50 |
+
is_ready = handler.initialized
|
| 51 |
+
health_response = {
|
| 52 |
+
'status': 'healthy' if is_ready else 'unhealthy',
|
| 53 |
+
'model_ready': is_ready
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
try:
|
| 57 |
+
self.send_response(200 if is_ready else 503)
|
| 58 |
+
self.send_header('Content-Type', 'application/json')
|
| 59 |
+
self.end_headers()
|
| 60 |
+
self.wfile.write(json.dumps(health_response).encode('utf-8'))
|
| 61 |
+
except BrokenPipeError:
|
| 62 |
+
# Client disconnected before we replied – safe to ignore.
|
| 63 |
+
pass
|
| 64 |
+
return
|
| 65 |
+
else:
|
| 66 |
+
self.send_response(404)
|
| 67 |
+
self.end_headers()
|
| 68 |
+
|
| 69 |
+
def log_message(self, format, *args):
|
| 70 |
+
# Suppress default HTTP server logs to keep output clean
|
| 71 |
+
pass
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
if __name__ == "__main__":
|
| 75 |
+
server = HTTPServer(('0.0.0.0', 80), RequestHandler)
|
| 76 |
+
logger.info('HTTP server started on port 80')
|
| 77 |
+
server.serve_forever()
|