introvoyz041 commited on
Commit
8be8af8
·
verified ·
1 Parent(s): 84fbe5c

Upload server.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. server.py +77 -0
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()