mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-03 00:02:28 +08:00
fix: handle client disconnection after stream completion gracefully
- Check has_completion flag before marking client disconnection as failure - Allow graceful termination if response already completed when client disconnects - Change logging level to info for post-completion disconnections - Prevent false error reporting when client closes connection after receiving full response
This commit is contained in:
@@ -1114,6 +1114,8 @@ class CliMessageHandlerBase(BaseMessageHandler):
|
|||||||
async for chunk in stream_generator:
|
async for chunk in stream_generator:
|
||||||
yield chunk
|
yield chunk
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
|
# 如果响应已完成,不标记为失败
|
||||||
|
if not ctx.has_completion:
|
||||||
ctx.status_code = 499
|
ctx.status_code = 499
|
||||||
ctx.error_message = "Client disconnected"
|
ctx.error_message = "Client disconnected"
|
||||||
raise
|
raise
|
||||||
|
|||||||
@@ -410,16 +410,22 @@ class StreamProcessor:
|
|||||||
if now >= next_disconnect_check_at:
|
if now >= next_disconnect_check_at:
|
||||||
next_disconnect_check_at = now + disconnect_check_interval_s
|
next_disconnect_check_at = now + disconnect_check_interval_s
|
||||||
if await is_disconnected():
|
if await is_disconnected():
|
||||||
|
# 如果响应已完成(收到 finish_reason),客户端断开不算失败
|
||||||
|
if ctx.has_completion:
|
||||||
|
logger.info(
|
||||||
|
f"ID:{self.request_id} | Client disconnected after completion"
|
||||||
|
)
|
||||||
|
else:
|
||||||
logger.warning(f"ID:{self.request_id} | Client disconnected")
|
logger.warning(f"ID:{self.request_id} | Client disconnected")
|
||||||
ctx.status_code = 499 # Client Closed Request
|
ctx.status_code = 499 # Client Closed Request
|
||||||
ctx.error_message = "client_disconnected"
|
ctx.error_message = "client_disconnected"
|
||||||
|
|
||||||
break
|
break
|
||||||
yield chunk
|
yield chunk
|
||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
|
# 如果响应已完成,不标记为失败
|
||||||
|
if not ctx.has_completion:
|
||||||
ctx.status_code = 499
|
ctx.status_code = 499
|
||||||
ctx.error_message = "client_disconnected"
|
ctx.error_message = "client_disconnected"
|
||||||
|
|
||||||
raise
|
raise
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
ctx.status_code = 500
|
ctx.status_code = 500
|
||||||
|
|||||||
Reference in New Issue
Block a user