77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
import json
|
||
import logging
|
||
from http.server import HTTPServer, BaseHTTPRequestHandler
|
||
|
||
from handler import EndpointHandler
|
||
|
||
# Configure logging
|
||
logging.basicConfig(level=logging.INFO)
|
||
logger = logging.getLogger(__name__)
|
||
|
||
# Initialize the handler
|
||
handler = EndpointHandler()
|
||
|
||
|
||
class RequestHandler(BaseHTTPRequestHandler):
|
||
def do_POST(self):
|
||
try:
|
||
content_length = int(self.headers['Content-Length'])
|
||
post_data = self.rfile.read(content_length)
|
||
data = json.loads(post_data.decode('utf-8'))
|
||
|
||
logger.info(f'Received request with {len(data.get("inputs", []))} inputs')
|
||
|
||
# Process the request
|
||
result = handler(data)
|
||
|
||
# Send response
|
||
self.send_response(200)
|
||
self.send_header('Content-Type', 'application/json')
|
||
self.end_headers()
|
||
self.wfile.write(json.dumps(result).encode('utf-8'))
|
||
|
||
except Exception as e:
|
||
logger.error(f'Error processing request: {str(e)}')
|
||
self.send_response(500)
|
||
self.send_header('Content-Type', 'application/json')
|
||
self.end_headers()
|
||
error_response = [{'error': str(e), 'generated_text': ''}]
|
||
self.wfile.write(json.dumps(error_response).encode('utf-8'))
|
||
|
||
def do_GET(self):
|
||
if self.path == '/health':
|
||
# Trigger initialisation if needed but don't block.
|
||
if not handler.initialized:
|
||
try:
|
||
handler._initialize_components()
|
||
except Exception as e:
|
||
logger.error(f'Initialization failed during health check: {str(e)}')
|
||
|
||
is_ready = handler.initialized
|
||
health_response = {
|
||
'status': 'healthy' if is_ready else 'unhealthy',
|
||
'model_ready': is_ready
|
||
}
|
||
|
||
try:
|
||
self.send_response(200 if is_ready else 503)
|
||
self.send_header('Content-Type', 'application/json')
|
||
self.end_headers()
|
||
self.wfile.write(json.dumps(health_response).encode('utf-8'))
|
||
except BrokenPipeError:
|
||
# Client disconnected before we replied – safe to ignore.
|
||
pass
|
||
return
|
||
else:
|
||
self.send_response(404)
|
||
self.end_headers()
|
||
|
||
def log_message(self, format, *args):
|
||
# Suppress default HTTP server logs to keep output clean
|
||
pass
|
||
|
||
|
||
if __name__ == "__main__":
|
||
server = HTTPServer(('0.0.0.0', 80), RequestHandler)
|
||
logger.info('HTTP server started on port 80')
|
||
server.serve_forever() |