fix(proxy): handle BrokenPipeError on client disconnect gracefully (#11)
parent
96c889596f
commit
69366d8bd5
|
|
@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "deepseek-cursor-proxy"
|
name = "deepseek-cursor-proxy"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
description = "Local OpenAI-compatible proxy for Cursor and DeepSeek thinking models"
|
description = "Local OpenAI-compatible proxy for Cursor and DeepSeek thinking models"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
|
|
|
||||||
|
|
@ -297,12 +297,15 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler):
|
||||||
body = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode(
|
body = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode(
|
||||||
"utf-8"
|
"utf-8"
|
||||||
)
|
)
|
||||||
|
try:
|
||||||
self.send_response(status)
|
self.send_response(status)
|
||||||
self._send_cors_headers()
|
self._send_cors_headers()
|
||||||
self.send_header("Content-Type", "application/json")
|
self.send_header("Content-Type", "application/json")
|
||||||
self.send_header("Content-Length", str(len(body)))
|
self.send_header("Content-Length", str(len(body)))
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(body)
|
self.wfile.write(body)
|
||||||
|
except (BrokenPipeError, ConnectionError) as exc:
|
||||||
|
LOG.warning("client disconnected before response could be sent: %s", exc)
|
||||||
|
|
||||||
def _send_models(self) -> None:
|
def _send_models(self) -> None:
|
||||||
created = int(time.time())
|
created = int(time.time())
|
||||||
|
|
@ -365,6 +368,7 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler):
|
||||||
body = read_response_body(exc)
|
body = read_response_body(exc)
|
||||||
if self.config.verbose:
|
if self.config.verbose:
|
||||||
log_bytes("upstream error body", body)
|
log_bytes("upstream error body", body)
|
||||||
|
try:
|
||||||
self.send_response(exc.code)
|
self.send_response(exc.code)
|
||||||
self._send_cors_headers()
|
self._send_cors_headers()
|
||||||
self.send_header(
|
self.send_header(
|
||||||
|
|
@ -373,6 +377,8 @@ class DeepSeekProxyHandler(BaseHTTPRequestHandler):
|
||||||
self.send_header("Content-Length", str(len(body)))
|
self.send_header("Content-Length", str(len(body)))
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
self.wfile.write(body)
|
self.wfile.write(body)
|
||||||
|
except (BrokenPipeError, ConnectionError) as write_err:
|
||||||
|
LOG.warning("client disconnected before upstream error could be sent: %s", write_err)
|
||||||
|
|
||||||
def _proxy_regular_response(
|
def _proxy_regular_response(
|
||||||
self,
|
self,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue