心跳发送增加 15 秒间隔判断,发送后也更新 last_yield_time

This commit is contained in:
朱潮 2026-03-15 16:53:18 +08:00
parent 8cab0180e3
commit b8368068ae

View File

@ -155,6 +155,7 @@ async def enhanced_generate_stream_response(
# 输出控制器:确保 preamble 先输出,然后是 agent stream
preamble_output_done = False
last_yield_time = time.time()
while True:
try:
@ -165,6 +166,7 @@ async def enhanced_generate_stream_response(
# 立即输出 preamble 内容
if item_data:
yield item_data
last_yield_time = time.time()
preamble_output_done = True
elif item_type == "preamble_done":
@ -175,6 +177,7 @@ async def enhanced_generate_stream_response(
# Agent stream 内容,需要等待 preamble 输出完成
if preamble_output_done:
yield item_data
last_yield_time = time.time()
else:
# preamble 还没输出,先放回队列
await output_queue.put((item_type, item_data))
@ -191,9 +194,11 @@ async def enhanced_generate_stream_response(
if all(task.done() for task in [preamble_task_handle, agent_task_handle]):
# 所有任务都完成了,退出循环
break
# 发送空内容心跳包保持连接活跃,防止 nginx/客户端超时断开
heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "")
yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n"
# 15秒无消息输出时才发送心跳包保持连接活跃
if time.time() - last_yield_time >= 15:
heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "")
yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n"
last_yield_time = time.time()
continue
# 发送结束标记