Llama-2-13B / system /proxy.py
jordigonzm's picture
check installation files
8d4d3e5
raw
history blame
No virus
2.58 kB
from http.server import BaseHTTPRequestHandler, HTTPServer
import http.client
import socket
# Configuraci贸n del servidor backend
BACKEND_HOST = "localhost"
BACKEND_PORT = 8080
class TransparentProxy(BaseHTTPRequestHandler):
def do_GET(self):
self.proxy_request()
def do_POST(self):
self.proxy_request()
def proxy_request(self):
# Modifica la ruta para a帽adir /v1
modified_path = f"/v1{self.path}"
print(f"Redirigiendo la solicitud {self.command} a: {modified_path}")
# Establece una conexi贸n al backend con un timeout extendido
conn = http.client.HTTPConnection(BACKEND_HOST, BACKEND_PORT, timeout=300) # Timeout de 5 minutos
try:
# Leer datos del cuerpo si existen
content_length = self.headers.get('Content-Length')
if content_length:
post_data = self.rfile.read(int(content_length))
conn.request(self.command, modified_path, body=post_data, headers=self.headers)
else:
conn.request(self.command, modified_path, headers=self.headers)
# Obtener la respuesta del backend
backend_response = conn.getresponse()
# Enviar la respuesta al cliente
self.send_response(backend_response.status, backend_response.reason)
# Reenviar todos los encabezados del backend al cliente
for key, value in backend_response.getheaders():
self.send_header(key, value)
self.end_headers()
# Reenviar el cuerpo de la respuesta en modo streaming
while True:
chunk = backend_response.read(1024)
if not chunk:
break
self.wfile.write(chunk)
self.wfile.flush() # Asegura que cada fragmento se env铆a inmediatamente al cliente
except socket.timeout:
self.send_error(504, "Gateway Timeout: El backend no respondi贸 en el tiempo esperado.")
print("Error: Tiempo de espera agotado en la solicitud al backend.")
except Exception as e:
self.send_error(500, f"Error en el proxy: {e}")
print(f"Error al manejar la solicitud: {e}")
finally:
conn.close()
def run(server_class=HTTPServer, handler_class=TransparentProxy, port=7860):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f"Proxy corriendo en el puerto {port}")
httpd.serve_forever()
if __name__ == "__main__":
run()